Merge PR #1963 from buscher

Added more 1.17 blocks
This commit is contained in:
Nicolas F 2021-12-05 23:35:16 +01:00 committed by GitHub
commit 9f9cd1ea71
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 355 additions and 12 deletions

View File

@ -394,6 +394,17 @@ enum mc_block_id {
block_tuff = 1109,
block_pointed_dripstone = 1110,
block_powder_snow = 1111,
block_hanging_roots = 1112,
block_small_amethyst_bud = 1113,
block_medium_amethyst_bud = 1114,
block_large_amethyst_bud = 1115,
block_cave_vines_plant = 1116,
block_cave_vines = 1117,
block_lightning_rod = 1118,
block_glow_lichen = 1119,
block_spore_blossom = 1120,
// adding a gap in the numbering of walls to keep them all
// in one numbering block starting at 1792
// all blocks between 1792 and 2047 are considered walls

View File

@ -4654,24 +4654,29 @@ def brewing_stand(self, blockid, data):
# cauldron
@material(blockid=118, data=list(range(4)), transparent=True, solid=True, nospawn=True)
@material(blockid=118, data=list(range(16)), transparent=True, solid=True, nospawn=True)
def cauldron(self, blockid, data):
side = self.load_image_texture("assets/minecraft/textures/block/cauldron_side.png").copy()
top = self.load_image_texture("assets/minecraft/textures/block/cauldron_top.png")
bottom = self.load_image_texture("assets/minecraft/textures/block/cauldron_inner.png")
water = self.transform_image_top(self.load_image_texture("water.png"))
filltype = (data & (3 << 2)) >> 2
if filltype == 3:
water = self.transform_image_top(self.load_image_texture("assets/minecraft/textures/block/powder_snow.png"))
elif filltype == 2:
water = self.transform_image_top(self.load_image_texture("assets/minecraft/textures/block/lava_still.png"))
else: # filltype == 1 or 0
water = self.transform_image_top(self.load_image_texture("water.png"))
# Side texture isn't transparent between the feet, so adjust the texture
ImageDraw.Draw(side).rectangle((5, 14, 11, 16), outline=(0, 0, 0, 0), fill=(0, 0, 0, 0))
if data == 0: # Empty
level = (data & 3)
if level == 0: # Empty
img = self.build_full_block(top, side, side, side, side)
else: # Part or fully filled
# Is filled in increments of a third, with data indicating how many thirds are filled
# Is filled in increments of a third, with level indicating how many thirds are filled
img = self.build_full_block(None, side, side, None, None)
alpha_over(img, water, (0, 12 - data * 4), water)
alpha_over(img, water, (0, 12 - level * 4), water)
img2 = self.build_full_block(top, None, None, side, side)
alpha_over(img, img2, (0, 0), img2)
return img
@ -5289,9 +5294,12 @@ def hayblock(self, blockid, data):
# carpet - wool block that's small?
@material(blockid=171, data=list(range(16)), transparent=True)
@material(blockid=171, data=list(range(17)), transparent=True)
def carpet(self, blockid, data):
texture = self.load_image_texture("assets/minecraft/textures/block/%s_wool.png" % color_map[data])
if data < 16:
texture = self.load_image_texture("assets/minecraft/textures/block/%s_wool.png" % color_map[data])
elif data == 16:
texture = self.load_image_texture("assets/minecraft/textures/block/moss_block.png")
return self.build_full_block((texture,15),texture,texture,texture,texture)
@ -6080,3 +6088,289 @@ def pointed_dripstone(self, blockid, data):
else: # 0 - tip
tex = self.load_image_texture("assets/minecraft/textures/block/pointed_dripstone_%s_tip.png" % (up_down))
return self.build_sprite(tex)
block(blockid=1111, top_image="assets/minecraft/textures/block/powder_snow.png")
@material(blockid=1112, data=0, transparent=True)
def hangings_roots(self, blockid, data):
tex = self.load_image_texture("assets/minecraft/textures/block/hanging_roots.png")
return self.build_sprite(tex)
@material(blockid=[1113, 1114, 1115], data=list(range(6)), transparent=True)
def amethyst_bud(self, blockid, data):
if blockid == 1113:
tex = self.load_image_texture("assets/minecraft/textures/block/small_amethyst_bud.png")
elif blockid == 1114:
tex = self.load_image_texture("assets/minecraft/textures/block/medium_amethyst_bud.png")
elif blockid == 1115:
tex = self.load_image_texture("assets/minecraft/textures/block/large_amethyst_bud.png")
def draw_north():
rotated = tex.rotate(90)
side = self.transform_image_side(rotated)
otherside = self.transform_image_top(rotated)
otherside = otherside.transpose(Image.FLIP_TOP_BOTTOM)
alpha_over(img, side, (6, 3), side)
alpha_over(img, otherside, (0, 6), otherside)
def draw_south():
rotated = tex.rotate(-90)
side = self.transform_image_side(rotated)
otherside = self.transform_image_top(rotated)
otherside = otherside.transpose(Image.FLIP_TOP_BOTTOM)
alpha_over(img, side, (6, 3), side)
alpha_over(img, otherside, (0, 6), otherside)
def draw_west():
rotated = tex.rotate(-90)
side = self.transform_image_side(rotated)
side = side.transpose(Image.FLIP_LEFT_RIGHT)
otherside = self.transform_image_top(rotated)
otherside = otherside.transpose(Image.FLIP_LEFT_RIGHT)
otherside = otherside.transpose(Image.FLIP_TOP_BOTTOM)
alpha_over(img, side, (6, 3), side)
alpha_over(img, otherside, (0, 6), otherside)
def draw_east():
rotated = tex.rotate(90)
side = self.transform_image_side(rotated)
side = side.transpose(Image.FLIP_LEFT_RIGHT)
otherside = self.transform_image_top(rotated)
otherside = otherside.transpose(Image.FLIP_LEFT_RIGHT)
otherside = otherside.transpose(Image.FLIP_TOP_BOTTOM)
alpha_over(img, side, (6, 3), side)
alpha_over(img, otherside, (0, 6), otherside)
draw_funcs = [draw_east, draw_south, draw_west, draw_north]
if data == 0: # down
tex = tex.transpose(Image.FLIP_TOP_BOTTOM)
return self.build_sprite(tex)
elif data == 1: # up
return self.build_sprite(tex)
elif data == 5: # north
img = Image.new("RGBA", (24, 24), self.bgcolor)
draw_funcs[(self.rotation + 3) % len(draw_funcs)]()
return img
elif data == 3: # south
img = Image.new("RGBA", (24, 24), self.bgcolor)
draw_funcs[(self.rotation + 1) % len(draw_funcs)]()
return img
elif data == 4: # west
img = Image.new("RGBA", (24,24), self.bgcolor)
draw_funcs[(self.rotation + 2) % len(draw_funcs)]()
return img
elif data == 2: # east
img = Image.new("RGBA", (24, 24), self.bgcolor)
draw_funcs[(self.rotation + 0) % len(draw_funcs)]()
return img
return self.build_sprite(tex)
@material(blockid=[1116, 1117], data=list(range(2)), transparent=True)
def cave_vines(self, blockid, data):
if blockid == 1116:
if data == 1:
tex = self.load_image_texture("assets/minecraft/textures/block/cave_vines_plant_lit.png")
else:
tex = self.load_image_texture("assets/minecraft/textures/block/cave_vines_plant.png")
elif blockid == 1117:
if data == 1:
tex = self.load_image_texture("assets/minecraft/textures/block/cave_vines_lit.png")
else:
tex = self.load_image_texture("assets/minecraft/textures/block/cave_vines.png")
return self.build_sprite(tex)
@material(blockid=1118, data=list(range(6)), transparent=True, solid=True)
def lightning_rod(self, blockid, data):
tex = self.load_image_texture("assets/minecraft/textures/block/lightning_rod.png")
img = Image.new("RGBA", (24, 24), self.bgcolor)
mask = tex.crop((0, 4, 2, 16))
sidetex = Image.new(tex.mode, tex.size, self.bgcolor)
alpha_over(sidetex, mask, (14, 4), mask)
mask = tex.crop((0, 0, 4, 4))
toptex = Image.new(tex.mode, tex.size, self.bgcolor)
alpha_over(toptex, mask, (12, 0), mask)
mask = tex.crop((0, 4, 2, 6))
side_toptex = Image.new(tex.mode, tex.size, self.bgcolor)
alpha_over(side_toptex, mask, (12, 0), mask)
def draw_east():
toptex_rotated = toptex.rotate(90)
top_side = self.transform_image_side(toptex_rotated)
top_side = top_side.transpose(Image.FLIP_LEFT_RIGHT)
top_otherside = self.transform_image_top(toptex)
top_otherside = top_otherside.transpose(Image.FLIP_LEFT_RIGHT)
top_top = self.transform_image_side(toptex)
# top
alpha_over(img, top_otherside, (6, 6), top_otherside)
# side
alpha_over(img, top_side, (8, 7), top_side)
alpha_over(img, top_top, (6, 2), top_top)
roated_side = sidetex.rotate(90)
side = self.transform_image_side(roated_side)
side = side.transpose(Image.FLIP_TOP_BOTTOM)
otherside = self.transform_image_top(sidetex)
otherside = otherside.transpose(Image.FLIP_TOP_BOTTOM)
side_top = self.transform_image_side(side_toptex)
alpha_over(img, otherside, (-7, 4), otherside)
alpha_over(img, side, (5, -1), side)
alpha_over(img, side_top, (-2, 9), side_top)
def draw_south():
roated_side = sidetex.rotate(90)
side = self.transform_image_side(roated_side)
otherside = self.transform_image_top(sidetex)
alpha_over(img, side, (3, 6), side)
alpha_over(img, otherside, (-8, 6), otherside)
toptex_rotated = toptex.rotate(90)
top_side = self.transform_image_side(toptex_rotated)
top_otherside = self.transform_image_top(toptex)
top_top = self.transform_image_side(toptex)
top_top = top_top.transpose(Image.FLIP_LEFT_RIGHT)
alpha_over(img, top_side, (15, 12), top_side)
alpha_over(img, top_otherside, (5, 10), top_otherside)
alpha_over(img, top_top, (17, 7), top_top)
def draw_west():
roated_side = sidetex.rotate(90)
side = self.transform_image_side(roated_side)
side = side.transpose(Image.FLIP_LEFT_RIGHT)
otherside = self.transform_image_top(sidetex)
otherside = otherside.transpose(Image.FLIP_LEFT_RIGHT)
alpha_over(img, side, (10, 6), side)
alpha_over(img, otherside, (8, 6), otherside)
toptex_rotated = toptex.rotate(90)
top_side = self.transform_image_side(toptex_rotated)
top_side = top_side.transpose(Image.FLIP_LEFT_RIGHT)
top_otherside = self.transform_image_top(toptex)
top_otherside = top_otherside.transpose(Image.FLIP_LEFT_RIGHT)
top_top = self.transform_image_side(toptex)
# top
alpha_over(img, top_otherside, (-3, 10), top_otherside)
# side
alpha_over(img, top_side, (0, 11), top_side)
alpha_over(img, top_top, (-3, 7), top_top)
def draw_north():
roated_side = sidetex.rotate(90)
side = self.transform_image_side(roated_side)
otherside = self.transform_image_top(sidetex)
alpha_over(img, side, (4, 7), side)
alpha_over(img, otherside, (-6, 7), otherside)
toptex_rotated = toptex.rotate(90)
top_side = self.transform_image_side(toptex_rotated)
top_otherside = self.transform_image_top(toptex)
top_top = self.transform_image_side(toptex)
top_top = top_top.transpose(Image.FLIP_LEFT_RIGHT)
alpha_over(img, top_otherside, (-4, 6), top_otherside)
alpha_over(img, top_side, (5, 7), top_side)
alpha_over(img, top_top, (8, 3), top_top)
draw_funcs = [draw_east, draw_south, draw_west, draw_north]
if data == 1: # up
side = self.transform_image_side(sidetex)
otherside = side.transpose(Image.FLIP_LEFT_RIGHT)
alpha_over(img, side, (0, 6 - 4), side)
alpha_over(img, otherside, (12, 6 - 4), otherside)
top_top = self.transform_image_top(toptex)
top_side = self.transform_image_side(toptex)
top_otherside = top_side.transpose(Image.FLIP_LEFT_RIGHT)
alpha_over(img, top_side, (0, 6 - 4), top_side)
alpha_over(img, top_otherside, (12, 6 - 4), top_otherside)
alpha_over(img, top_top, (0, 5), top_top)
elif data == 0: # down
toptex_flipped = toptex.transpose(Image.FLIP_TOP_BOTTOM)
top_top = self.transform_image_top(toptex)
top_side = self.transform_image_side(toptex_flipped)
top_otherside = top_side.transpose(Image.FLIP_LEFT_RIGHT)
alpha_over(img, top_side, (0, 6 - 4), top_side)
alpha_over(img, top_otherside, (12, 6 - 4), top_otherside)
alpha_over(img, top_top, (0, 14), top_top)
flipped = sidetex.transpose(Image.FLIP_TOP_BOTTOM)
side_top = self.transform_image_top(side_toptex)
side = self.transform_image_side(flipped)
otherside = side.transpose(Image.FLIP_LEFT_RIGHT)
alpha_over(img, side, (0, 6 - 4), side)
alpha_over(img, otherside, (12, 6 - 4), otherside)
alpha_over(img, side_top, (2, 6), side_top)
elif data == 3: # south
draw_funcs[(self.rotation + 1) % len(draw_funcs)]()
elif data == 4: # west
draw_funcs[(self.rotation + 2) % len(draw_funcs)]()
elif data == 2: # east
draw_funcs[(self.rotation + 0) % len(draw_funcs)]()
elif data == 5: # north
draw_funcs[(self.rotation + 3) % len(draw_funcs)]()
return img
@material(blockid=1119, data=list(range(1 << 6)), transparent=True)
def glow_lichen(self, blockid, data):
tex = self.load_image_texture("assets/minecraft/textures/block/glow_lichen.png")
bottom = tex if data & 1 << 0 else None
top = tex if data & 1 << 1 else None
east = tex if data & 1 << 2 else None
south = tex if data & 1 << 3 else None
west = tex if data & 1 << 4 else None
north = tex if data & 1 << 5 else None
if self.rotation == 0:
return self.build_full_block(top, north, east, west, south, bottom)
elif self.rotation == 1:
return self.build_full_block(top, west, north, south, east, bottom)
elif self.rotation == 2:
return self.build_full_block(top, south, west, east, north, bottom)
else: # self.rotation == 3:
return self.build_full_block(top, east, south, north, west, bottom)
@material(blockid=1120, data=list(range(1)), transparent=True)
def spore_blossom(self, blockid, data):
leaf = self.load_image_texture("assets/minecraft/textures/block/spore_blossom.png")
base = self.load_image_texture("assets/minecraft/textures/block/spore_blossom_base.png")
img = Image.new("RGBA", (24, 24), self.bgcolor)
side_leaf = self.transform_image_top(leaf)
alpha_over(img, side_leaf, (-6, -5), side_leaf)
roated_leaf = leaf.rotate(90)
side_leaf = self.transform_image_top(roated_leaf)
alpha_over(img, side_leaf, (-7, 4), side_leaf)
roated_leaf = roated_leaf.rotate(90)
side_leaf = self.transform_image_top(roated_leaf)
alpha_over(img, side_leaf, (5, 4), side_leaf)
roated_leaf = roated_leaf.rotate(90)
side_leaf = self.transform_image_top(roated_leaf)
alpha_over(img, side_leaf, (5, -5), side_leaf)
base_top = self.transform_image_top(base)
alpha_over(img, base_top, (0, 0), base_top)
return img

View File

@ -506,7 +506,10 @@ class RegionSet(object):
'minecraft:nether_wart': (115, 0),
'minecraft:enchanting_table': (116, 0),
'minecraft:brewing_stand': (117, 0),
'minecraft:cauldron': (118, 0),
'minecraft:cauldron': (118, 1 << 2),
'minecraft:water_cauldron': (118, 1 << 2),
'minecraft:lava_cauldron': (118, (2 << 2) | 3),
'minecraft:powder_snow_cauldron': (118, 3 << 2),
'minecraft:end_portal': (119, 0),
'minecraft:end_portal_frame': (120, 0),
'minecraft:end_stone': (121, 0),
@ -625,6 +628,7 @@ class RegionSet(object):
'minecraft:green_carpet': (171, 13),
'minecraft:red_carpet': (171, 14),
'minecraft:black_carpet': (171, 15),
'minecraft:moss_carpet': (171, 16),
'minecraft:terracotta': (172, 0),
'minecraft:coal_block': (173, 0),
'minecraft:packed_ice': (174, 0),
@ -848,6 +852,17 @@ class RegionSet(object):
'minecraft:tuff': (1109, 0),
'minecraft:pointed_dripstone': (1110, 0),
'minecraft:powder_snow': (1111, 0),
'minecraft:hanging_roots': (1112, 0),
'minecraft:small_amethyst_bud': (1113, 0),
'minecraft:medium_amethyst_bud': (1114, 0),
'minecraft:large_amethyst_bud': (1115, 0),
'minecraft:cave_vines_plant': (1116, 0),
'minecraft:cave_vines': (1117, 0),
'minecraft:lightning_rod': (1118, 0),
'minecraft:glow_lichen': (1119, 0),
'minecraft:spore_blossom': (1120, 0),
# New blocks
'minecraft:carved_pumpkin': (11300, 0),
'minecraft:spruce_pressure_plate': (11301, 0),
@ -1365,8 +1380,9 @@ class RegionSet(object):
data |= 4
elif key == 'minecraft:respawn_anchor':
data = int(palette_entry['Properties']['charges'])
elif key == 'minecraft:cauldron':
data = int(palette_entry['Properties'].get('level', '0'))
elif key in ['minecraft:cauldron', 'minecraft:water_cauldron',
'minecraft:lava_cauldron', 'minecraft:powder_snow_cauldron']:
data |= int(palette_entry.get('Properties', {}).get('level', '0'))
elif key == 'minecraft:structure_block':
block_mode = palette_entry['Properties'].get('mode', 'save')
data = {'save': 0, 'load': 1, 'corner': 2, 'data': 3}.get(block_mode, 0)
@ -1405,6 +1421,28 @@ class RegionSet(object):
p = palette_entry['Properties']
data = {'tip': 0, 'tip_merge': 1, 'middle': 2, 'frustum': 3, 'base': 4}[p['thickness']]
data |= {'up': 0, 'down': 0b1000}[p['vertical_direction']]
elif key in ['minecraft:small_amethyst_bud', 'minecraft:medium_amethyst_bud', 'minecraft:large_amethyst_bud',
'minecraft:lightning_rod']:
p = palette_entry['Properties']
data = {'down': 0, 'up': 1, 'east': 2, 'south': 3, 'west': 4, 'north': 5}[p['facing']]
elif key in ['minecraft:cave_vines_plant', 'minecraft:cave_vines']:
p = palette_entry['Properties']
if p['berries'] == 'true':
data = 1
elif key == 'minecraft:glow_lichen':
p = palette_entry['Properties']
if p['down'] == 'true':
data |= 1 << 0
if p['up'] == 'true':
data |= 1 << 1
if p['east'] == 'true':
data |= 1 << 2
if p['south'] == 'true':
data |= 1 << 3
if p['west'] == 'true':
data |= 1 << 4
if p['north'] == 'true':
data |= 1 << 5
return (block, data)