diff --git a/overviewer_core/textures.py b/overviewer_core/textures.py index ce2cbb3..8f13da9 100644 --- a/overviewer_core/textures.py +++ b/overviewer_core/textures.py @@ -3741,3 +3741,79 @@ def crops(self, blockid, data): alpha_over(img, crop2, (6,3), crop2) alpha_over(img, crop3, (6,3), crop3) return img + +# anvils +@material(blockid=145, data=range(12), transparent=True) +def anvil(self, blockid, data): + # get the correct textures + # the bits 0x4 and 0x8 determine how damaged is the anvil + if (data & 0xc) == 0: # non damaged anvil + top = self.terrain_images[231] + elif (data & 0xc) == 0x4: # slightly damaged + top = self.terrain_images[232] + elif (data & 0xc) == 0x8: # very damaged + top = self.terrain_images[216] + # everything else use this texture + big_side = self.terrain_images[215].copy() + small_side = self.terrain_images[215].copy() + base = self.terrain_images[215].copy() + small_base = self.terrain_images[215].copy() + + # cut needed patterns + ImageDraw.Draw(big_side).rectangle((0,8,15,15),outline=(0,0,0,0),fill=(0,0,0,0)) + ImageDraw.Draw(small_side).rectangle((0,0,2,15),outline=(0,0,0,0),fill=(0,0,0,0)) + ImageDraw.Draw(small_side).rectangle((13,0,15,15),outline=(0,0,0,0),fill=(0,0,0,0)) + ImageDraw.Draw(small_side).rectangle((0,8,15,15),outline=(0,0,0,0),fill=(0,0,0,0)) + ImageDraw.Draw(base).rectangle((0,0,15,15),outline=(0,0,0,0)) + ImageDraw.Draw(base).rectangle((1,1,14,14),outline=(0,0,0,0)) + ImageDraw.Draw(small_base).rectangle((0,0,15,15),outline=(0,0,0,0)) + ImageDraw.Draw(small_base).rectangle((1,1,14,14),outline=(0,0,0,0)) + ImageDraw.Draw(small_base).rectangle((2,2,13,13),outline=(0,0,0,0)) + ImageDraw.Draw(small_base).rectangle((3,3,12,12),outline=(0,0,0,0)) + + # check orientation and compose the anvil + if data & 0x1 == 1: # west-east + top = top.rotate(90) + left_side = small_side + left_pos = (1,7) + right_side = big_side + right_pos = (10,5) + else: # north-south + right_side = small_side + right_pos = (12,7) + left_side = big_side + left_pos = (3,5) + + img = Image.new("RGBA", (24,24), self.bgcolor) + + # darken sides + alpha = big_side.split()[3] + big_side = ImageEnhance.Brightness(big_side).enhance(0.8) + big_side.putalpha(alpha) + alpha = small_side.split()[3] + small_side = ImageEnhance.Brightness(small_side).enhance(0.9) + small_side.putalpha(alpha) + alpha = base.split()[3] + base_d = ImageEnhance.Brightness(base).enhance(0.8) + base_d.putalpha(alpha) + + # compose + base = self.transform_image_top(base) + base_d = self.transform_image_top(base_d) + small_base = self.transform_image_top(small_base) + top = self.transform_image_top(top) + + alpha_over(img, base_d, (0,12), base_d) + alpha_over(img, base_d, (0,11), base_d) + alpha_over(img, base_d, (0,10), base_d) + alpha_over(img, small_base, (0,10), small_base) + + alpha_over(img, top, (0,0), top) + + left_side = self.transform_image_side(left_side) + right_side = self.transform_image_side(right_side).transpose(Image.FLIP_LEFT_RIGHT) + + alpha_over(img, left_side, left_pos, left_side) + alpha_over(img, right_side, right_pos, right_side) + + return img