From d0ddab3b201cc1dac93aab9d2cf00e6b5a724a02 Mon Sep 17 00:00:00 2001 From: Joseph Camp Date: Fri, 6 Mar 2020 21:41:38 +0000 Subject: [PATCH] Amend anvil texture generation - Fix gap between sides & top in anvil texture --- overviewer_core/textures.py | 77 +++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/overviewer_core/textures.py b/overviewer_core/textures.py index 57f560c..2fadeb0 100644 --- a/overviewer_core/textures.py +++ b/overviewer_core/textures.py @@ -4619,13 +4619,13 @@ def crops4(self, blockid, data): alpha_over(img, crop3, (6,3), crop3) return img + # anvils -@material(blockid=145, data=list(range(12)), transparent=True) +@material(blockid=145, data=list(range(12)), transparent=True, nospawn=True) def anvil(self, blockid, data): - # anvils only have two orientations, invert it for rotations 1 and 3 orientation = data & 0x1 - if self.rotation in (1,3): + if self.rotation in (1, 3): if orientation == 1: orientation = 0 else: @@ -4633,45 +4633,45 @@ 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 + if (data & 0xc) == 0: # non damaged anvil top = self.load_image_texture("assets/minecraft/textures/block/anvil_top.png") - elif (data & 0xc) == 0x4: # slightly damaged + elif (data & 0xc) == 0x4: # slightly damaged top = self.load_image_texture("assets/minecraft/textures/block/chipped_anvil_top.png") - elif (data & 0xc) == 0x8: # very damaged + elif (data & 0xc) == 0x8: # very damaged top = self.load_image_texture("assets/minecraft/textures/block/damaged_anvil_top.png") # everything else use this texture big_side = self.load_image_texture("assets/minecraft/textures/block/anvil.png").copy() small_side = self.load_image_texture("assets/minecraft/textures/block/anvil.png").copy() base = self.load_image_texture("assets/minecraft/textures/block/anvil.png").copy() small_base = self.load_image_texture("assets/minecraft/textures/block/anvil.png").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)) - + 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 orientation == 1: # bottom-left top-right + if orientation == 1: # bottom-left top-right top = top.rotate(90) left_side = small_side - left_pos = (1,7) + left_pos = (1, 6) right_side = big_side - right_pos = (10,5) - else: # top-left bottom-right + right_pos = (10, 5) + else: # top-left bottom-right right_side = small_side - right_pos = (12,7) + right_pos = (12, 6) left_side = big_side - left_pos = (3,5) - - img = Image.new("RGBA", (24,24), self.bgcolor) - + 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) @@ -4682,26 +4682,27 @@ def anvil(self, blockid, data): 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) - + + 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, 1), top) # Fix gap between block edges + 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