@@ -4654,24 +4654,29 @@ def brewing_stand(self, blockid, data):
4654
4654
4655
4655
4656
4656
# cauldron
4657
- @material (blockid = 118 , data = list (range (4 )), transparent = True , solid = True , nospawn = True )
4657
+ @material (blockid = 118 , data = list (range (16 )), transparent = True , solid = True , nospawn = True )
4658
4658
def cauldron (self , blockid , data ):
4659
4659
side = self .load_image_texture ("assets/minecraft/textures/block/cauldron_side.png" ).copy ()
4660
4660
top = self .load_image_texture ("assets/minecraft/textures/block/cauldron_top.png" )
4661
- bottom = self .load_image_texture ("assets/minecraft/textures/block/cauldron_inner.png" )
4662
- water = self .transform_image_top (self .load_image_texture ("water.png" ))
4661
+ filltype = (data & (3 << 2 )) >> 2
4662
+ if filltype == 3 :
4663
+ water = self .transform_image_top (self .load_image_texture ("assets/minecraft/textures/block/powder_snow.png" ))
4664
+ elif filltype == 2 :
4665
+ water = self .transform_image_top (self .load_image_texture ("assets/minecraft/textures/block/lava_still.png" ))
4666
+ else : # filltype == 1 or 0
4667
+ water = self .transform_image_top (self .load_image_texture ("water.png" ))
4663
4668
# Side texture isn't transparent between the feet, so adjust the texture
4664
4669
ImageDraw .Draw (side ).rectangle ((5 , 14 , 11 , 16 ), outline = (0 , 0 , 0 , 0 ), fill = (0 , 0 , 0 , 0 ))
4665
4670
4666
- if data == 0 : # Empty
4671
+ level = (data & 3 )
4672
+ if level == 0 : # Empty
4667
4673
img = self .build_full_block (top , side , side , side , side )
4668
4674
else : # Part or fully filled
4669
- # Is filled in increments of a third, with data indicating how many thirds are filled
4675
+ # Is filled in increments of a third, with level indicating how many thirds are filled
4670
4676
img = self .build_full_block (None , side , side , None , None )
4671
- alpha_over (img , water , (0 , 12 - data * 4 ), water )
4677
+ alpha_over (img , water , (0 , 12 - level * 4 ), water )
4672
4678
img2 = self .build_full_block (top , None , None , side , side )
4673
4679
alpha_over (img , img2 , (0 , 0 ), img2 )
4674
-
4675
4680
return img
4676
4681
4677
4682
@@ -5289,9 +5294,12 @@ def hayblock(self, blockid, data):
5289
5294
5290
5295
5291
5296
# carpet - wool block that's small?
5292
- @material (blockid = 171 , data = list (range (16 )), transparent = True )
5297
+ @material (blockid = 171 , data = list (range (17 )), transparent = True )
5293
5298
def carpet (self , blockid , data ):
5294
- texture = self .load_image_texture ("assets/minecraft/textures/block/%s_wool.png" % color_map [data ])
5299
+ if data < 16 :
5300
+ texture = self .load_image_texture ("assets/minecraft/textures/block/%s_wool.png" % color_map [data ])
5301
+ elif data == 16 :
5302
+ texture = self .load_image_texture ("assets/minecraft/textures/block/moss_block.png" )
5295
5303
5296
5304
return self .build_full_block ((texture ,15 ),texture ,texture ,texture ,texture )
5297
5305
@@ -6080,3 +6088,289 @@ def pointed_dripstone(self, blockid, data):
6080
6088
else : # 0 - tip
6081
6089
tex = self .load_image_texture ("assets/minecraft/textures/block/pointed_dripstone_%s_tip.png" % (up_down ))
6082
6090
return self .build_sprite (tex )
6091
+
6092
+
6093
+ block (blockid = 1111 , top_image = "assets/minecraft/textures/block/powder_snow.png" )
6094
+
6095
+
6096
+ @material (blockid = 1112 , data = 0 , transparent = True )
6097
+ def hangings_roots (self , blockid , data ):
6098
+ tex = self .load_image_texture ("assets/minecraft/textures/block/hanging_roots.png" )
6099
+ return self .build_sprite (tex )
6100
+
6101
+
6102
+ @material (blockid = [1113 , 1114 , 1115 ], data = list (range (6 )), transparent = True )
6103
+ def amethyst_bud (self , blockid , data ):
6104
+ if blockid == 1113 :
6105
+ tex = self .load_image_texture ("assets/minecraft/textures/block/small_amethyst_bud.png" )
6106
+ elif blockid == 1114 :
6107
+ tex = self .load_image_texture ("assets/minecraft/textures/block/medium_amethyst_bud.png" )
6108
+ elif blockid == 1115 :
6109
+ tex = self .load_image_texture ("assets/minecraft/textures/block/large_amethyst_bud.png" )
6110
+
6111
+ def draw_north ():
6112
+ rotated = tex .rotate (90 )
6113
+ side = self .transform_image_side (rotated )
6114
+ otherside = self .transform_image_top (rotated )
6115
+ otherside = otherside .transpose (Image .FLIP_TOP_BOTTOM )
6116
+ alpha_over (img , side , (6 , 3 ), side )
6117
+ alpha_over (img , otherside , (0 , 6 ), otherside )
6118
+
6119
+ def draw_south ():
6120
+ rotated = tex .rotate (- 90 )
6121
+ side = self .transform_image_side (rotated )
6122
+ otherside = self .transform_image_top (rotated )
6123
+ otherside = otherside .transpose (Image .FLIP_TOP_BOTTOM )
6124
+ alpha_over (img , side , (6 , 3 ), side )
6125
+ alpha_over (img , otherside , (0 , 6 ), otherside )
6126
+
6127
+ def draw_west ():
6128
+ rotated = tex .rotate (- 90 )
6129
+ side = self .transform_image_side (rotated )
6130
+ side = side .transpose (Image .FLIP_LEFT_RIGHT )
6131
+ otherside = self .transform_image_top (rotated )
6132
+ otherside = otherside .transpose (Image .FLIP_LEFT_RIGHT )
6133
+ otherside = otherside .transpose (Image .FLIP_TOP_BOTTOM )
6134
+ alpha_over (img , side , (6 , 3 ), side )
6135
+ alpha_over (img , otherside , (0 , 6 ), otherside )
6136
+
6137
+ def draw_east ():
6138
+ rotated = tex .rotate (90 )
6139
+ side = self .transform_image_side (rotated )
6140
+ side = side .transpose (Image .FLIP_LEFT_RIGHT )
6141
+ otherside = self .transform_image_top (rotated )
6142
+ otherside = otherside .transpose (Image .FLIP_LEFT_RIGHT )
6143
+ otherside = otherside .transpose (Image .FLIP_TOP_BOTTOM )
6144
+ alpha_over (img , side , (6 , 3 ), side )
6145
+ alpha_over (img , otherside , (0 , 6 ), otherside )
6146
+
6147
+ draw_funcs = [draw_east , draw_south , draw_west , draw_north ]
6148
+
6149
+ if data == 0 : # down
6150
+ tex = tex .transpose (Image .FLIP_TOP_BOTTOM )
6151
+ return self .build_sprite (tex )
6152
+ elif data == 1 : # up
6153
+ return self .build_sprite (tex )
6154
+ elif data == 5 : # north
6155
+ img = Image .new ("RGBA" , (24 , 24 ), self .bgcolor )
6156
+ draw_funcs [(self .rotation + 3 ) % len (draw_funcs )]()
6157
+ return img
6158
+ elif data == 3 : # south
6159
+ img = Image .new ("RGBA" , (24 , 24 ), self .bgcolor )
6160
+ draw_funcs [(self .rotation + 1 ) % len (draw_funcs )]()
6161
+ return img
6162
+ elif data == 4 : # west
6163
+ img = Image .new ("RGBA" , (24 ,24 ), self .bgcolor )
6164
+ draw_funcs [(self .rotation + 2 ) % len (draw_funcs )]()
6165
+ return img
6166
+ elif data == 2 : # east
6167
+ img = Image .new ("RGBA" , (24 , 24 ), self .bgcolor )
6168
+ draw_funcs [(self .rotation + 0 ) % len (draw_funcs )]()
6169
+ return img
6170
+
6171
+ return self .build_sprite (tex )
6172
+
6173
+
6174
+ @material (blockid = [1116 , 1117 ], data = list (range (2 )), transparent = True )
6175
+ def cave_vines (self , blockid , data ):
6176
+ if blockid == 1116 :
6177
+ if data == 1 :
6178
+ tex = self .load_image_texture ("assets/minecraft/textures/block/cave_vines_plant_lit.png" )
6179
+ else :
6180
+ tex = self .load_image_texture ("assets/minecraft/textures/block/cave_vines_plant.png" )
6181
+ elif blockid == 1117 :
6182
+ if data == 1 :
6183
+ tex = self .load_image_texture ("assets/minecraft/textures/block/cave_vines_lit.png" )
6184
+ else :
6185
+ tex = self .load_image_texture ("assets/minecraft/textures/block/cave_vines.png" )
6186
+ return self .build_sprite (tex )
6187
+
6188
+
6189
+ @material (blockid = 1118 , data = list (range (6 )), transparent = True , solid = True )
6190
+ def lightning_rod (self , blockid , data ):
6191
+ tex = self .load_image_texture ("assets/minecraft/textures/block/lightning_rod.png" )
6192
+ img = Image .new ("RGBA" , (24 , 24 ), self .bgcolor )
6193
+
6194
+ mask = tex .crop ((0 , 4 , 2 , 16 ))
6195
+ sidetex = Image .new (tex .mode , tex .size , self .bgcolor )
6196
+ alpha_over (sidetex , mask , (14 , 4 ), mask )
6197
+
6198
+ mask = tex .crop ((0 , 0 , 4 , 4 ))
6199
+ toptex = Image .new (tex .mode , tex .size , self .bgcolor )
6200
+ alpha_over (toptex , mask , (12 , 0 ), mask )
6201
+
6202
+ mask = tex .crop ((0 , 4 , 2 , 6 ))
6203
+ side_toptex = Image .new (tex .mode , tex .size , self .bgcolor )
6204
+ alpha_over (side_toptex , mask , (12 , 0 ), mask )
6205
+
6206
+ def draw_east ():
6207
+ toptex_rotated = toptex .rotate (90 )
6208
+ top_side = self .transform_image_side (toptex_rotated )
6209
+ top_side = top_side .transpose (Image .FLIP_LEFT_RIGHT )
6210
+ top_otherside = self .transform_image_top (toptex )
6211
+ top_otherside = top_otherside .transpose (Image .FLIP_LEFT_RIGHT )
6212
+ top_top = self .transform_image_side (toptex )
6213
+
6214
+ # top
6215
+ alpha_over (img , top_otherside , (6 , 6 ), top_otherside )
6216
+ # side
6217
+ alpha_over (img , top_side , (8 , 7 ), top_side )
6218
+ alpha_over (img , top_top , (6 , 2 ), top_top )
6219
+
6220
+ roated_side = sidetex .rotate (90 )
6221
+ side = self .transform_image_side (roated_side )
6222
+ side = side .transpose (Image .FLIP_TOP_BOTTOM )
6223
+ otherside = self .transform_image_top (sidetex )
6224
+ otherside = otherside .transpose (Image .FLIP_TOP_BOTTOM )
6225
+ side_top = self .transform_image_side (side_toptex )
6226
+
6227
+ alpha_over (img , otherside , (- 7 , 4 ), otherside )
6228
+ alpha_over (img , side , (5 , - 1 ), side )
6229
+ alpha_over (img , side_top , (- 2 , 9 ), side_top )
6230
+
6231
+ def draw_south ():
6232
+ roated_side = sidetex .rotate (90 )
6233
+ side = self .transform_image_side (roated_side )
6234
+ otherside = self .transform_image_top (sidetex )
6235
+
6236
+ alpha_over (img , side , (3 , 6 ), side )
6237
+ alpha_over (img , otherside , (- 8 , 6 ), otherside )
6238
+
6239
+ toptex_rotated = toptex .rotate (90 )
6240
+ top_side = self .transform_image_side (toptex_rotated )
6241
+ top_otherside = self .transform_image_top (toptex )
6242
+ top_top = self .transform_image_side (toptex )
6243
+ top_top = top_top .transpose (Image .FLIP_LEFT_RIGHT )
6244
+
6245
+ alpha_over (img , top_side , (15 , 12 ), top_side )
6246
+ alpha_over (img , top_otherside , (5 , 10 ), top_otherside )
6247
+ alpha_over (img , top_top , (17 , 7 ), top_top )
6248
+
6249
+ def draw_west ():
6250
+ roated_side = sidetex .rotate (90 )
6251
+ side = self .transform_image_side (roated_side )
6252
+ side = side .transpose (Image .FLIP_LEFT_RIGHT )
6253
+ otherside = self .transform_image_top (sidetex )
6254
+ otherside = otherside .transpose (Image .FLIP_LEFT_RIGHT )
6255
+
6256
+ alpha_over (img , side , (10 , 6 ), side )
6257
+ alpha_over (img , otherside , (8 , 6 ), otherside )
6258
+
6259
+ toptex_rotated = toptex .rotate (90 )
6260
+ top_side = self .transform_image_side (toptex_rotated )
6261
+ top_side = top_side .transpose (Image .FLIP_LEFT_RIGHT )
6262
+ top_otherside = self .transform_image_top (toptex )
6263
+ top_otherside = top_otherside .transpose (Image .FLIP_LEFT_RIGHT )
6264
+ top_top = self .transform_image_side (toptex )
6265
+
6266
+ # top
6267
+ alpha_over (img , top_otherside , (- 3 , 10 ), top_otherside )
6268
+ # side
6269
+ alpha_over (img , top_side , (0 , 11 ), top_side )
6270
+ alpha_over (img , top_top , (- 3 , 7 ), top_top )
6271
+
6272
+ def draw_north ():
6273
+ roated_side = sidetex .rotate (90 )
6274
+ side = self .transform_image_side (roated_side )
6275
+ otherside = self .transform_image_top (sidetex )
6276
+
6277
+ alpha_over (img , side , (4 , 7 ), side )
6278
+ alpha_over (img , otherside , (- 6 , 7 ), otherside )
6279
+
6280
+ toptex_rotated = toptex .rotate (90 )
6281
+ top_side = self .transform_image_side (toptex_rotated )
6282
+ top_otherside = self .transform_image_top (toptex )
6283
+ top_top = self .transform_image_side (toptex )
6284
+ top_top = top_top .transpose (Image .FLIP_LEFT_RIGHT )
6285
+ alpha_over (img , top_otherside , (- 4 , 6 ), top_otherside )
6286
+ alpha_over (img , top_side , (5 , 7 ), top_side )
6287
+ alpha_over (img , top_top , (8 , 3 ), top_top )
6288
+
6289
+ draw_funcs = [draw_east , draw_south , draw_west , draw_north ]
6290
+
6291
+ if data == 1 : # up
6292
+ side = self .transform_image_side (sidetex )
6293
+ otherside = side .transpose (Image .FLIP_LEFT_RIGHT )
6294
+ alpha_over (img , side , (0 , 6 - 4 ), side )
6295
+ alpha_over (img , otherside , (12 , 6 - 4 ), otherside )
6296
+
6297
+ top_top = self .transform_image_top (toptex )
6298
+ top_side = self .transform_image_side (toptex )
6299
+ top_otherside = top_side .transpose (Image .FLIP_LEFT_RIGHT )
6300
+ alpha_over (img , top_side , (0 , 6 - 4 ), top_side )
6301
+ alpha_over (img , top_otherside , (12 , 6 - 4 ), top_otherside )
6302
+ alpha_over (img , top_top , (0 , 5 ), top_top )
6303
+ elif data == 0 : # down
6304
+ toptex_flipped = toptex .transpose (Image .FLIP_TOP_BOTTOM )
6305
+ top_top = self .transform_image_top (toptex )
6306
+ top_side = self .transform_image_side (toptex_flipped )
6307
+ top_otherside = top_side .transpose (Image .FLIP_LEFT_RIGHT )
6308
+ alpha_over (img , top_side , (0 , 6 - 4 ), top_side )
6309
+ alpha_over (img , top_otherside , (12 , 6 - 4 ), top_otherside )
6310
+ alpha_over (img , top_top , (0 , 14 ), top_top )
6311
+
6312
+ flipped = sidetex .transpose (Image .FLIP_TOP_BOTTOM )
6313
+ side_top = self .transform_image_top (side_toptex )
6314
+ side = self .transform_image_side (flipped )
6315
+ otherside = side .transpose (Image .FLIP_LEFT_RIGHT )
6316
+ alpha_over (img , side , (0 , 6 - 4 ), side )
6317
+ alpha_over (img , otherside , (12 , 6 - 4 ), otherside )
6318
+ alpha_over (img , side_top , (2 , 6 ), side_top )
6319
+ elif data == 3 : # south
6320
+ draw_funcs [(self .rotation + 1 ) % len (draw_funcs )]()
6321
+ elif data == 4 : # west
6322
+ draw_funcs [(self .rotation + 2 ) % len (draw_funcs )]()
6323
+ elif data == 2 : # east
6324
+ draw_funcs [(self .rotation + 0 ) % len (draw_funcs )]()
6325
+ elif data == 5 : # north
6326
+ draw_funcs [(self .rotation + 3 ) % len (draw_funcs )]()
6327
+
6328
+ return img
6329
+
6330
+
6331
+ @material (blockid = 1119 , data = list (range (1 << 6 )), transparent = True )
6332
+ def glow_lichen (self , blockid , data ):
6333
+ tex = self .load_image_texture ("assets/minecraft/textures/block/glow_lichen.png" )
6334
+
6335
+ bottom = tex if data & 1 << 0 else None
6336
+ top = tex if data & 1 << 1 else None
6337
+ east = tex if data & 1 << 2 else None
6338
+ south = tex if data & 1 << 3 else None
6339
+ west = tex if data & 1 << 4 else None
6340
+ north = tex if data & 1 << 5 else None
6341
+
6342
+ if self .rotation == 0 :
6343
+ return self .build_full_block (top , north , east , west , south , bottom )
6344
+ elif self .rotation == 1 :
6345
+ return self .build_full_block (top , west , north , south , east , bottom )
6346
+ elif self .rotation == 2 :
6347
+ return self .build_full_block (top , south , west , east , north , bottom )
6348
+ else : # self.rotation == 3:
6349
+ return self .build_full_block (top , east , south , north , west , bottom )
6350
+
6351
+
6352
+ @material (blockid = 1120 , data = list (range (1 )), transparent = True )
6353
+ def spore_blossom (self , blockid , data ):
6354
+ leaf = self .load_image_texture ("assets/minecraft/textures/block/spore_blossom.png" )
6355
+ base = self .load_image_texture ("assets/minecraft/textures/block/spore_blossom_base.png" )
6356
+ img = Image .new ("RGBA" , (24 , 24 ), self .bgcolor )
6357
+
6358
+ side_leaf = self .transform_image_top (leaf )
6359
+ alpha_over (img , side_leaf , (- 6 , - 5 ), side_leaf )
6360
+
6361
+ roated_leaf = leaf .rotate (90 )
6362
+ side_leaf = self .transform_image_top (roated_leaf )
6363
+ alpha_over (img , side_leaf , (- 7 , 4 ), side_leaf )
6364
+
6365
+ roated_leaf = roated_leaf .rotate (90 )
6366
+ side_leaf = self .transform_image_top (roated_leaf )
6367
+ alpha_over (img , side_leaf , (5 , 4 ), side_leaf )
6368
+
6369
+ roated_leaf = roated_leaf .rotate (90 )
6370
+ side_leaf = self .transform_image_top (roated_leaf )
6371
+ alpha_over (img , side_leaf , (5 , - 5 ), side_leaf )
6372
+
6373
+ base_top = self .transform_image_top (base )
6374
+ alpha_over (img , base_top , (0 , 0 ), base_top )
6375
+ return img
6376
+
0 commit comments