From 46d48bf1f862c9e13822c821ee5dacc1ead6a89a Mon Sep 17 00:00:00 2001 From: Joseph Camp Date: Sat, 2 May 2020 20:14:11 +0000 Subject: [PATCH] Fix cauldron water rendering - Use cauldron 'level' property to determine water level --- overviewer_core/textures.py | 34 +++++++++++++++------------------- overviewer_core/world.py | 2 ++ 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/overviewer_core/textures.py b/overviewer_core/textures.py index 1af489a..f7e1ecb 100644 --- a/overviewer_core/textures.py +++ b/overviewer_core/textures.py @@ -4227,33 +4227,29 @@ def brewing_stand(self, blockid, data): alpha_over(img,stand,(0,-2)) return img + # cauldron -@material(blockid=118, data=list(range(4)), transparent=True) +@material(blockid=118, data=list(range(4)), transparent=True, solid=True, nospawn=True) def cauldron(self, blockid, data): - side = self.load_image_texture("assets/minecraft/textures/block/cauldron_side.png") + 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_water()) - if data == 0: # empty + 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 img = self.build_full_block(top, side, side, side, side) - if data == 1: # 1/3 filled - img = self.build_full_block(None , side, side, None, None) - alpha_over(img, water, (0,8), water) - img2 = self.build_full_block(top , None, None, side, side) - alpha_over(img, img2, (0,0), img2) - if data == 2: # 2/3 filled - img = self.build_full_block(None , side, side, None, None) - alpha_over(img, water, (0,4), water) - img2 = self.build_full_block(top , None, None, side, side) - alpha_over(img, img2, (0,0), img2) - if data == 3: # 3/3 filled - img = self.build_full_block(None , side, side, None, None) - alpha_over(img, water, (0,0), water) - img2 = self.build_full_block(top , None, None, side, side) - alpha_over(img, img2, (0,0), img2) + else: # Part or fully filled + # Is filled in increments of a third, with data 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) + img2 = self.build_full_block(top, None, None, side, side) + alpha_over(img, img2, (0, 0), img2) return img + # end portal and end_gateway @material(blockid=[119,209], transparent=True, nodata=True) def end_portal(self, blockid, data): diff --git a/overviewer_core/world.py b/overviewer_core/world.py index 63432fc..467d7c6 100644 --- a/overviewer_core/world.py +++ b/overviewer_core/world.py @@ -1155,6 +1155,8 @@ class RegionSet(object): data |= {'south': 0, 'west': 1, 'north': 2, 'east': 3}[facing] if palette_entry['Properties'].get('eye', 'false') == 'true': data |= 4 + elif key == 'minecraft:cauldron': + data = int(palette_entry['Properties'].get('level', '0')) return (block, data)