Handle HD textures and animated textures
This commit is contained in:
@@ -54,7 +54,7 @@ class Textures(object):
|
|||||||
# this is set in in generate()
|
# this is set in in generate()
|
||||||
self.generated = False
|
self.generated = False
|
||||||
|
|
||||||
# see load_image()
|
# see load_image_texture()
|
||||||
self.texture_cache = {}
|
self.texture_cache = {}
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -85,7 +85,7 @@ class Textures(object):
|
|||||||
def generate(self):
|
def generate(self):
|
||||||
|
|
||||||
# generate biome grass mask
|
# generate biome grass mask
|
||||||
self.biome_grass_texture = self.build_block(self.load_image("textures/blocks/grass_top.png"), self.load_image("textures/blocks/grass_side_overlay.png"))
|
self.biome_grass_texture = self.build_block(self.load_image_texture("textures/blocks/grass_top.png"), self.load_image_texture("textures/blocks/grass_side_overlay.png"))
|
||||||
|
|
||||||
# generate the blocks
|
# generate the blocks
|
||||||
global blockmap_generators
|
global blockmap_generators
|
||||||
@@ -222,16 +222,30 @@ class Textures(object):
|
|||||||
|
|
||||||
raise TextureException("Could not find the file `{0}'. Try specifying the 'texturepath' option in your config file. Set it to the directory where I can find {0}. Also see <http://docs.overviewer.org/en/latest/running/#installing-the-textures>".format(filename))
|
raise TextureException("Could not find the file `{0}'. Try specifying the 'texturepath' option in your config file. Set it to the directory where I can find {0}. Also see <http://docs.overviewer.org/en/latest/running/#installing-the-textures>".format(filename))
|
||||||
|
|
||||||
|
def load_image_texture(self, filename):
|
||||||
|
# Textures may be animated or in a different resolution than 16x16.
|
||||||
|
# This method will always return a 16x16 image
|
||||||
|
if filename in self.texture_cache:
|
||||||
|
return self.texture_cache[filename]
|
||||||
|
|
||||||
|
img = self.load_image(filename)
|
||||||
|
|
||||||
|
w,h = img.size
|
||||||
|
if w != h:
|
||||||
|
img = img.crop((0,0,w,w))
|
||||||
|
if w != 16:
|
||||||
|
img = img.resize((16, 16), Image.ANTIALIAS)
|
||||||
|
|
||||||
|
self.texture_cache[filename] = img
|
||||||
|
return img
|
||||||
|
|
||||||
def load_image(self, filename):
|
def load_image(self, filename):
|
||||||
"""Returns an image object"""
|
"""Returns an image object"""
|
||||||
|
|
||||||
if filename in self.texture_cache:
|
|
||||||
return self.texture_cache[filename]
|
|
||||||
|
|
||||||
fileobj = self.find_file(filename)
|
fileobj = self.find_file(filename)
|
||||||
buffer = StringIO(fileobj.read())
|
buffer = StringIO(fileobj.read())
|
||||||
img = Image.open(buffer).convert("RGBA")
|
img = Image.open(buffer).convert("RGBA")
|
||||||
self.texture_cache[filename] = img
|
|
||||||
return img
|
return img
|
||||||
|
|
||||||
|
|
||||||
@@ -723,7 +737,7 @@ def block(blockid=[], top_image=None, side_image=None, **kwargs):
|
|||||||
|
|
||||||
@material(blockid=blockid, **new_kwargs)
|
@material(blockid=blockid, **new_kwargs)
|
||||||
def inner_block(self, unused_id, unused_data):
|
def inner_block(self, unused_id, unused_data):
|
||||||
return self.build_block(self.load_image(top_image), self.load_image(side_image))
|
return self.build_block(self.load_image_texture(top_image), self.load_image_texture(side_image))
|
||||||
return inner_block
|
return inner_block
|
||||||
|
|
||||||
# shortcut function for sprite blocks, defaults to transparent, nodata
|
# shortcut function for sprite blocks, defaults to transparent, nodata
|
||||||
@@ -736,7 +750,7 @@ def sprite(blockid=[], imagename=None, **kwargs):
|
|||||||
|
|
||||||
@material(blockid=blockid, **new_kwargs)
|
@material(blockid=blockid, **new_kwargs)
|
||||||
def inner_sprite(self, unused_id, unused_data):
|
def inner_sprite(self, unused_id, unused_data):
|
||||||
return self.build_sprite(self.load_image(imagename))
|
return self.build_sprite(self.load_image_texture(imagename))
|
||||||
return inner_sprite
|
return inner_sprite
|
||||||
|
|
||||||
# shortcut function for billboard blocks, defaults to transparent, nodata
|
# shortcut function for billboard blocks, defaults to transparent, nodata
|
||||||
@@ -749,7 +763,7 @@ def billboard(blockid=[], imagename=None, **kwargs):
|
|||||||
|
|
||||||
@material(blockid=blockid, **new_kwargs)
|
@material(blockid=blockid, **new_kwargs)
|
||||||
def inner_billboard(self, unused_id, unused_data):
|
def inner_billboard(self, unused_id, unused_data):
|
||||||
return self.build_billboard(self.load_image(imagename))
|
return self.build_billboard(self.load_image_texture(imagename))
|
||||||
return inner_billboard
|
return inner_billboard
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -762,10 +776,10 @@ block(blockid=1, top_image="textures/blocks/stone.png")
|
|||||||
@material(blockid=2, data=range(11)+[0x10,], solid=True)
|
@material(blockid=2, data=range(11)+[0x10,], solid=True)
|
||||||
def grass(self, blockid, data):
|
def grass(self, blockid, data):
|
||||||
# 0x10 bit means SNOW
|
# 0x10 bit means SNOW
|
||||||
side_img = self.load_image("textures/blocks/grass_side.png")
|
side_img = self.load_image_texture("textures/blocks/grass_side.png")
|
||||||
if data & 0x10:
|
if data & 0x10:
|
||||||
side_img = self.load_image("textures/blocks/snow_side.png")
|
side_img = self.load_image_texture("textures/blocks/snow_side.png")
|
||||||
img = self.build_block(self.load_image("textures/blocks/grass_top.png"), side_img)
|
img = self.build_block(self.load_image_texture("textures/blocks/grass_top.png"), side_img)
|
||||||
if not data & 0x10:
|
if not data & 0x10:
|
||||||
alpha_over(img, self.biome_grass_texture, (0, 0), self.biome_grass_texture)
|
alpha_over(img, self.biome_grass_texture, (0, 0), self.biome_grass_texture)
|
||||||
return img
|
return img
|
||||||
@@ -779,25 +793,25 @@ block(blockid=4, top_image="textures/blocks/stonebrick.png")
|
|||||||
@material(blockid=5, data=range(4), solid=True)
|
@material(blockid=5, data=range(4), solid=True)
|
||||||
def wooden_planks(self, blockid, data):
|
def wooden_planks(self, blockid, data):
|
||||||
if data == 0: # normal
|
if data == 0: # normal
|
||||||
return self.build_block(self.load_image("textures/blocks/wood.png"), self.load_image("textures/blocks/wood.png"))
|
return self.build_block(self.load_image_texture("textures/blocks/wood.png"), self.load_image_texture("textures/blocks/wood.png"))
|
||||||
if data == 1: # pine
|
if data == 1: # pine
|
||||||
return self.build_block(self.load_image("textures/blocks/wood_spruce.png"),self.load_image("textures/blocks/wood_spruce.png"))
|
return self.build_block(self.load_image_texture("textures/blocks/wood_spruce.png"),self.load_image_texture("textures/blocks/wood_spruce.png"))
|
||||||
if data == 2: # birch
|
if data == 2: # birch
|
||||||
return self.build_block(self.load_image("textures/blocks/wood_birch.png"),self.load_image("textures/blocks/wood_birch.png"))
|
return self.build_block(self.load_image_texture("textures/blocks/wood_birch.png"),self.load_image_texture("textures/blocks/wood_birch.png"))
|
||||||
if data == 3: # jungle wood
|
if data == 3: # jungle wood
|
||||||
return self.build_block(self.load_image("textures/blocks/wood_jungle.png"),self.load_image("textures/blocks/wood_jungle.png"))
|
return self.build_block(self.load_image_texture("textures/blocks/wood_jungle.png"),self.load_image_texture("textures/blocks/wood_jungle.png"))
|
||||||
|
|
||||||
@material(blockid=6, data=range(16), transparent=True)
|
@material(blockid=6, data=range(16), transparent=True)
|
||||||
def saplings(self, blockid, data):
|
def saplings(self, blockid, data):
|
||||||
# usual saplings
|
# usual saplings
|
||||||
tex = self.load_image("textures/blocks/sapling.png")
|
tex = self.load_image_texture("textures/blocks/sapling.png")
|
||||||
|
|
||||||
if data & 0x3 == 1: # spruce sapling
|
if data & 0x3 == 1: # spruce sapling
|
||||||
tex = self.load_image("textures/blocks/sapling_spruce.png")
|
tex = self.load_image_texture("textures/blocks/sapling_spruce.png")
|
||||||
elif data & 0x3 == 2: # birch sapling
|
elif data & 0x3 == 2: # birch sapling
|
||||||
tex = self.load_image("textures/blocks/sapling_birch.png")
|
tex = self.load_image_texture("textures/blocks/sapling_birch.png")
|
||||||
elif data & 0x3 == 3: # jungle sapling
|
elif data & 0x3 == 3: # jungle sapling
|
||||||
tex = self.load_image("textures/blocks/sapling_jungle.png")
|
tex = self.load_image_texture("textures/blocks/sapling_jungle.png")
|
||||||
return self.build_sprite(tex)
|
return self.build_sprite(tex)
|
||||||
|
|
||||||
# bedrock
|
# bedrock
|
||||||
@@ -815,9 +829,9 @@ def no_inner_surfaces(self, blockid, data):
|
|||||||
if blockid == 9:
|
if blockid == 9:
|
||||||
texture = self.load_water()
|
texture = self.load_water()
|
||||||
elif blockid == 20:
|
elif blockid == 20:
|
||||||
texture = self.load_image("textures/blocks/glass.png")
|
texture = self.load_image_texture("textures/blocks/glass.png")
|
||||||
else:
|
else:
|
||||||
texture = self.load_image("textures/blocks/ice.png")
|
texture = self.load_image_texture("textures/blocks/ice.png")
|
||||||
|
|
||||||
if (data & 0b10000) == 16:
|
if (data & 0b10000) == 16:
|
||||||
top = texture
|
top = texture
|
||||||
@@ -880,15 +894,15 @@ def wood(self, blockid, data):
|
|||||||
elif wood_orientation == 8: wood_orientation = 4
|
elif wood_orientation == 8: wood_orientation = 4
|
||||||
|
|
||||||
# choose textures
|
# choose textures
|
||||||
top = self.load_image("textures/blocks/tree_top.png")
|
top = self.load_image_texture("textures/blocks/tree_top.png")
|
||||||
if wood_type == 0: # normal
|
if wood_type == 0: # normal
|
||||||
side = self.load_image("textures/blocks/tree_side.png")
|
side = self.load_image_texture("textures/blocks/tree_side.png")
|
||||||
if wood_type == 1: # spruce
|
if wood_type == 1: # spruce
|
||||||
side = self.load_image("textures/blocks/tree_spruce.png")
|
side = self.load_image_texture("textures/blocks/tree_spruce.png")
|
||||||
if wood_type == 2: # birch
|
if wood_type == 2: # birch
|
||||||
side = self.load_image("textures/blocks/tree_birch.png")
|
side = self.load_image_texture("textures/blocks/tree_birch.png")
|
||||||
if wood_type == 3: # jungle wood
|
if wood_type == 3: # jungle wood
|
||||||
side = self.load_image("textures/blocks/tree_jungle.png")
|
side = self.load_image_texture("textures/blocks/tree_jungle.png")
|
||||||
|
|
||||||
# choose orientation and paste textures
|
# choose orientation and paste textures
|
||||||
if wood_orientation == 0:
|
if wood_orientation == 0:
|
||||||
@@ -903,13 +917,13 @@ def leaves(self, blockid, data):
|
|||||||
# mask out the bits 4 and 8
|
# mask out the bits 4 and 8
|
||||||
# they are used for player placed and check-for-decay blocks
|
# they are used for player placed and check-for-decay blocks
|
||||||
data = data & 0x3
|
data = data & 0x3
|
||||||
t = self.load_image("textures/blocks/leaves.png")
|
t = self.load_image_texture("textures/blocks/leaves.png")
|
||||||
if data == 1:
|
if data == 1:
|
||||||
# pine!
|
# pine!
|
||||||
t = self.load_image("textures/blocks/leaves_spruce.png")
|
t = self.load_image_texture("textures/blocks/leaves_spruce.png")
|
||||||
elif data == 3:
|
elif data == 3:
|
||||||
# jungle tree
|
# jungle tree
|
||||||
t = self.load_image("textures/blocks/leaves_jungle.png")
|
t = self.load_image_texture("textures/blocks/leaves_jungle.png")
|
||||||
return self.build_block(t, t)
|
return self.build_block(t, t)
|
||||||
|
|
||||||
# sponge
|
# sponge
|
||||||
@@ -939,15 +953,15 @@ def furnaces(self, blockid, data):
|
|||||||
elif data == 4: data = 3
|
elif data == 4: data = 3
|
||||||
elif data == 5: data = 2
|
elif data == 5: data = 2
|
||||||
|
|
||||||
top = self.load_image("textures/blocks/furnace_top.png")
|
top = self.load_image_texture("textures/blocks/furnace_top.png")
|
||||||
side = self.load_image("textures/blocks/furnace_side.png")
|
side = self.load_image_texture("textures/blocks/furnace_side.png")
|
||||||
|
|
||||||
if blockid == 61:
|
if blockid == 61:
|
||||||
front = self.load_image("textures/blocks/furnace_front.png")
|
front = self.load_image_texture("textures/blocks/furnace_front.png")
|
||||||
elif blockid == 62:
|
elif blockid == 62:
|
||||||
front = self.load_image("textures/blocks/furnace_front_lit.png")
|
front = self.load_image_texture("textures/blocks/furnace_front_lit.png")
|
||||||
elif blockid == 23:
|
elif blockid == 23:
|
||||||
front = self.load_image("textures/blocks/dispenser_front.png")
|
front = self.load_image_texture("textures/blocks/dispenser_front.png")
|
||||||
|
|
||||||
if data == 3: # pointing west
|
if data == 3: # pointing west
|
||||||
return self.build_full_block(top, None, None, side, front)
|
return self.build_full_block(top, None, None, side, front)
|
||||||
@@ -959,13 +973,13 @@ def furnaces(self, blockid, data):
|
|||||||
# sandstone
|
# sandstone
|
||||||
@material(blockid=24, data=range(3), solid=True)
|
@material(blockid=24, data=range(3), solid=True)
|
||||||
def sandstone(self, blockid, data):
|
def sandstone(self, blockid, data):
|
||||||
top = self.load_image("textures/blocks/sandstone_top.png")
|
top = self.load_image_texture("textures/blocks/sandstone_top.png")
|
||||||
if data == 0: # normal
|
if data == 0: # normal
|
||||||
return self.build_block(top, self.load_image("textures/blocks/sandstone_side.png"))
|
return self.build_block(top, self.load_image_texture("textures/blocks/sandstone_side.png"))
|
||||||
if data == 1: # hieroglyphic
|
if data == 1: # hieroglyphic
|
||||||
return self.build_block(top, self.load_image("textures/blocks/sandstone_carved.png"))
|
return self.build_block(top, self.load_image_texture("textures/blocks/sandstone_carved.png"))
|
||||||
if data == 2: # soft
|
if data == 2: # soft
|
||||||
return self.build_block(top, self.load_image("textures/blocks/sandstone_smooth.png"))
|
return self.build_block(top, self.load_image_texture("textures/blocks/sandstone_smooth.png"))
|
||||||
|
|
||||||
# note block
|
# note block
|
||||||
block(blockid=25, top_image="textures/blocks/musicBlock.png")
|
block(blockid=25, top_image="textures/blocks/musicBlock.png")
|
||||||
@@ -994,40 +1008,40 @@ def bed(self, blockid, data):
|
|||||||
left_face = None
|
left_face = None
|
||||||
right_face = None
|
right_face = None
|
||||||
if data & 0x8 == 0x8: # head of the bed
|
if data & 0x8 == 0x8: # head of the bed
|
||||||
top = self.load_image("textures/blocks/bed_head_top.png")
|
top = self.load_image_texture("textures/blocks/bed_head_top.png")
|
||||||
if data & 0x00 == 0x00: # head pointing to West
|
if data & 0x00 == 0x00: # head pointing to West
|
||||||
top = top.copy().rotate(270)
|
top = top.copy().rotate(270)
|
||||||
left_face = self.load_image("textures/blocks/bed_head_side.png")
|
left_face = self.load_image_texture("textures/blocks/bed_head_side.png")
|
||||||
right_face = self.load_image("textures/blocks/bed_head_end.png")
|
right_face = self.load_image_texture("textures/blocks/bed_head_end.png")
|
||||||
if data & 0x01 == 0x01: # ... North
|
if data & 0x01 == 0x01: # ... North
|
||||||
top = top.rotate(270)
|
top = top.rotate(270)
|
||||||
left_face = self.load_image("textures/blocks/bed_head_end.png")
|
left_face = self.load_image_texture("textures/blocks/bed_head_end.png")
|
||||||
right_face = self.load_image("textures/blocks/bed_head_side.png")
|
right_face = self.load_image_texture("textures/blocks/bed_head_side.png")
|
||||||
if data & 0x02 == 0x02: # East
|
if data & 0x02 == 0x02: # East
|
||||||
top = top.rotate(180)
|
top = top.rotate(180)
|
||||||
left_face = self.load_image("textures/blocks/bed_head_side.png").transpose(Image.FLIP_LEFT_RIGHT)
|
left_face = self.load_image_texture("textures/blocks/bed_head_side.png").transpose(Image.FLIP_LEFT_RIGHT)
|
||||||
right_face = None
|
right_face = None
|
||||||
if data & 0x03 == 0x03: # South
|
if data & 0x03 == 0x03: # South
|
||||||
right_face = None
|
right_face = None
|
||||||
right_face = self.load_image("textures/blocks/bed_head_side.png").transpose(Image.FLIP_LEFT_RIGHT)
|
right_face = self.load_image_texture("textures/blocks/bed_head_side.png").transpose(Image.FLIP_LEFT_RIGHT)
|
||||||
|
|
||||||
else: # foot of the bed
|
else: # foot of the bed
|
||||||
top = self.load_image("textures/blocks/bed_feet_top.png")
|
top = self.load_image_texture("textures/blocks/bed_feet_top.png")
|
||||||
if data & 0x00 == 0x00: # head pointing to West
|
if data & 0x00 == 0x00: # head pointing to West
|
||||||
top = top.rotate(270)
|
top = top.rotate(270)
|
||||||
left_face = self.load_image("textures/blocks/bed_feet_side.png")
|
left_face = self.load_image_texture("textures/blocks/bed_feet_side.png")
|
||||||
right_face = None
|
right_face = None
|
||||||
if data & 0x01 == 0x01: # ... North
|
if data & 0x01 == 0x01: # ... North
|
||||||
top = top.rotate(270)
|
top = top.rotate(270)
|
||||||
left_face = None
|
left_face = None
|
||||||
right_face = self.load_image("textures/blocks/bed_feet_side.png")
|
right_face = self.load_image_texture("textures/blocks/bed_feet_side.png")
|
||||||
if data & 0x02 == 0x02: # East
|
if data & 0x02 == 0x02: # East
|
||||||
top = top.rotate(180)
|
top = top.rotate(180)
|
||||||
left_face = self.load_image("textures/blocks/bed_feet_side.png").transpose(Image.FLIP_LEFT_RIGHT)
|
left_face = self.load_image_texture("textures/blocks/bed_feet_side.png").transpose(Image.FLIP_LEFT_RIGHT)
|
||||||
right_face = self.load_image("textures/blocks/bed_feet_end.png").transpose(Image.FLIP_LEFT_RIGHT)
|
right_face = self.load_image_texture("textures/blocks/bed_feet_end.png").transpose(Image.FLIP_LEFT_RIGHT)
|
||||||
if data & 0x03 == 0x03: # South
|
if data & 0x03 == 0x03: # South
|
||||||
left_face = self.load_image("textures/blocks/bed_feet_end.png")
|
left_face = self.load_image_texture("textures/blocks/bed_feet_end.png")
|
||||||
right_face = self.load_image("textures/blocks/bed_feet_side.png").transpose(Image.FLIP_LEFT_RIGHT)
|
right_face = self.load_image_texture("textures/blocks/bed_feet_side.png").transpose(Image.FLIP_LEFT_RIGHT)
|
||||||
|
|
||||||
top = (top, increment)
|
top = (top, increment)
|
||||||
return self.build_full_block(top, None, None, left_face, right_face)
|
return self.build_full_block(top, None, None, left_face, right_face)
|
||||||
@@ -1078,22 +1092,22 @@ def rails(self, blockid, data):
|
|||||||
|
|
||||||
if blockid == 27: # powered rail
|
if blockid == 27: # powered rail
|
||||||
if data & 0x8 == 0: # unpowered
|
if data & 0x8 == 0: # unpowered
|
||||||
raw_straight = self.load_image("textures/blocks/goldenRail.png")
|
raw_straight = self.load_image_texture("textures/blocks/goldenRail.png")
|
||||||
raw_corner = self.load_image("textures/blocks/rail_turn.png") # they don't exist but make the code
|
raw_corner = self.load_image_texture("textures/blocks/rail_turn.png") # they don't exist but make the code
|
||||||
# much simplier
|
# much simplier
|
||||||
elif data & 0x8 == 0x8: # powered
|
elif data & 0x8 == 0x8: # powered
|
||||||
raw_straight = self.load_image("textures/blocks/goldenRail_powered.png")
|
raw_straight = self.load_image_texture("textures/blocks/goldenRail_powered.png")
|
||||||
raw_corner = self.load_image("textures/blocks/rail_turn.png") # leave corners for code simplicity
|
raw_corner = self.load_image_texture("textures/blocks/rail_turn.png") # leave corners for code simplicity
|
||||||
# filter the 'powered' bit
|
# filter the 'powered' bit
|
||||||
data = data & 0x7
|
data = data & 0x7
|
||||||
|
|
||||||
elif blockid == 28: # detector rail
|
elif blockid == 28: # detector rail
|
||||||
raw_straight = self.load_image("textures/blocks/detectorRail.png")
|
raw_straight = self.load_image_texture("textures/blocks/detectorRail.png")
|
||||||
raw_corner = self.load_image("textures/blocks/rail_turn.png") # leave corners for code simplicity
|
raw_corner = self.load_image_texture("textures/blocks/rail_turn.png") # leave corners for code simplicity
|
||||||
|
|
||||||
elif blockid == 66: # normal rail
|
elif blockid == 66: # normal rail
|
||||||
raw_straight = self.load_image("textures/blocks/rail.png")
|
raw_straight = self.load_image_texture("textures/blocks/rail.png")
|
||||||
raw_corner = self.load_image("textures/blocks/rail_turn.png")
|
raw_corner = self.load_image_texture("textures/blocks/rail_turn.png")
|
||||||
|
|
||||||
## use transform_image to scale and shear
|
## use transform_image to scale and shear
|
||||||
if data == 0:
|
if data == 0:
|
||||||
@@ -1161,14 +1175,14 @@ def piston(self, blockid, data):
|
|||||||
elif (data & 0b0111) == 5: data = data & 0b1000 | 2
|
elif (data & 0b0111) == 5: data = data & 0b1000 | 2
|
||||||
|
|
||||||
if blockid == 29: # sticky
|
if blockid == 29: # sticky
|
||||||
piston_t = self.load_image("textures/blocks/piston_top_sticky.png").copy()
|
piston_t = self.load_image_texture("textures/blocks/piston_top_sticky.png").copy()
|
||||||
else: # normal
|
else: # normal
|
||||||
piston_t = self.load_image("textures/blocks/piston_top.png").copy()
|
piston_t = self.load_image_texture("textures/blocks/piston_top.png").copy()
|
||||||
|
|
||||||
# other textures
|
# other textures
|
||||||
side_t = self.load_image("textures/blocks/piston_side.png").copy()
|
side_t = self.load_image_texture("textures/blocks/piston_side.png").copy()
|
||||||
back_t = self.load_image("textures/blocks/piston_bottom.png").copy()
|
back_t = self.load_image_texture("textures/blocks/piston_bottom.png").copy()
|
||||||
interior_t = self.load_image("textures/blocks/piston_inner_top.png").copy()
|
interior_t = self.load_image_texture("textures/blocks/piston_inner_top.png").copy()
|
||||||
|
|
||||||
if data & 0x08 == 0x08: # pushed out, non full blocks, tricky stuff
|
if data & 0x08 == 0x08: # pushed out, non full blocks, tricky stuff
|
||||||
# remove piston texture from piston body
|
# remove piston texture from piston body
|
||||||
@@ -1237,13 +1251,13 @@ def piston_extension(self, blockid, data):
|
|||||||
elif (data & 0b0111) == 5: data = data & 0b1000 | 2
|
elif (data & 0b0111) == 5: data = data & 0b1000 | 2
|
||||||
|
|
||||||
if (data & 0x8) == 0x8: # sticky
|
if (data & 0x8) == 0x8: # sticky
|
||||||
piston_t = self.load_image("textures/blocks/piston_top_sticky.png").copy()
|
piston_t = self.load_image_texture("textures/blocks/piston_top_sticky.png").copy()
|
||||||
else: # normal
|
else: # normal
|
||||||
piston_t = self.load_image("textures/blocks/piston_top.png").copy()
|
piston_t = self.load_image_texture("textures/blocks/piston_top.png").copy()
|
||||||
|
|
||||||
# other textures
|
# other textures
|
||||||
side_t = self.load_image("textures/blocks/piston_side.png").copy()
|
side_t = self.load_image_texture("textures/blocks/piston_side.png").copy()
|
||||||
back_t = self.load_image("textures/blocks/piston_top.png").copy()
|
back_t = self.load_image_texture("textures/blocks/piston_top.png").copy()
|
||||||
# crop piston body
|
# crop piston body
|
||||||
ImageDraw.Draw(side_t).rectangle((0, 4,16,16),outline=(0,0,0,0),fill=(0,0,0,0))
|
ImageDraw.Draw(side_t).rectangle((0, 4,16,16),outline=(0,0,0,0),fill=(0,0,0,0))
|
||||||
|
|
||||||
@@ -1308,11 +1322,11 @@ sprite(blockid=30, imagename="textures/blocks/web.png", nospawn=True)
|
|||||||
@material(blockid=31, data=range(3), transparent=True)
|
@material(blockid=31, data=range(3), transparent=True)
|
||||||
def tall_grass(self, blockid, data):
|
def tall_grass(self, blockid, data):
|
||||||
if data == 0: # dead shrub
|
if data == 0: # dead shrub
|
||||||
texture = self.load_image("textures/blocks/deadbush.png")
|
texture = self.load_image_texture("textures/blocks/deadbush.png")
|
||||||
elif data == 1: # tall grass
|
elif data == 1: # tall grass
|
||||||
texture = self.load_image("textures/blocks/tallgrass.png")
|
texture = self.load_image_texture("textures/blocks/tallgrass.png")
|
||||||
elif data == 2: # fern
|
elif data == 2: # fern
|
||||||
texture = self.load_image("textures/blocks/fern.png")
|
texture = self.load_image_texture("textures/blocks/fern.png")
|
||||||
|
|
||||||
return self.build_billboard(texture)
|
return self.build_billboard(texture)
|
||||||
|
|
||||||
@@ -1321,7 +1335,7 @@ billboard(blockid=32, imagename="textures/blocks/deadbush.png")
|
|||||||
|
|
||||||
@material(blockid=35, data=range(16), solid=True)
|
@material(blockid=35, data=range(16), solid=True)
|
||||||
def wool(self, blockid, data):
|
def wool(self, blockid, data):
|
||||||
texture = self.load_image("textures/blocks/cloth_%d.png" % data)
|
texture = self.load_image_texture("textures/blocks/cloth_%d.png" % data)
|
||||||
|
|
||||||
return self.build_block(texture, texture)
|
return self.build_block(texture, texture)
|
||||||
|
|
||||||
@@ -1345,21 +1359,21 @@ block(blockid=42, top_image="textures/blocks/blockIron.png")
|
|||||||
def slabs(self, blockid, data):
|
def slabs(self, blockid, data):
|
||||||
texture = data & 7
|
texture = data & 7
|
||||||
if texture== 0: # stone slab
|
if texture== 0: # stone slab
|
||||||
top = self.load_image("textures/blocks/stoneslab_top.png")
|
top = self.load_image_texture("textures/blocks/stoneslab_top.png")
|
||||||
side = self.load_image("textures/blocks/stoneslab_side.png")
|
side = self.load_image_texture("textures/blocks/stoneslab_side.png")
|
||||||
elif texture== 1: # smooth stone
|
elif texture== 1: # smooth stone
|
||||||
top = self.load_image("textures/blocks/sandstone_top.png")
|
top = self.load_image_texture("textures/blocks/sandstone_top.png")
|
||||||
side = self.load_image("textures/blocks/sandstone_side.png")
|
side = self.load_image_texture("textures/blocks/sandstone_side.png")
|
||||||
elif texture== 2: # wooden slab
|
elif texture== 2: # wooden slab
|
||||||
top = side = self.load_image("textures/blocks/wood.png")
|
top = side = self.load_image_texture("textures/blocks/wood.png")
|
||||||
elif texture== 3: # cobblestone slab
|
elif texture== 3: # cobblestone slab
|
||||||
top = side = self.load_image("textures/blocks/stonebrick.png")
|
top = side = self.load_image_texture("textures/blocks/stonebrick.png")
|
||||||
elif texture== 4: # brick
|
elif texture== 4: # brick
|
||||||
top = side = self.load_image("textures/blocks/brick.png")
|
top = side = self.load_image_texture("textures/blocks/brick.png")
|
||||||
elif texture== 5: # stone brick
|
elif texture== 5: # stone brick
|
||||||
top = side = self.load_image("textures/blocks/stonebricksmooth.png")
|
top = side = self.load_image_texture("textures/blocks/stonebricksmooth.png")
|
||||||
elif texture== 6: # nether brick slab
|
elif texture== 6: # nether brick slab
|
||||||
top = side = self.load_image("textures/blocks/netherBrick.png")
|
top = side = self.load_image_texture("textures/blocks/netherBrick.png")
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -1428,11 +1442,11 @@ def torches(self, blockid, data):
|
|||||||
|
|
||||||
# choose the proper texture
|
# choose the proper texture
|
||||||
if blockid == 50: # torch
|
if blockid == 50: # torch
|
||||||
small = self.load_image("textures/blocks/torch.png")
|
small = self.load_image_texture("textures/blocks/torch.png")
|
||||||
elif blockid == 75: # off redstone torch
|
elif blockid == 75: # off redstone torch
|
||||||
small = self.load_image("textures/blocks/redtorch.png")
|
small = self.load_image_texture("textures/blocks/redtorch.png")
|
||||||
else: # on redstone torch
|
else: # on redstone torch
|
||||||
small = self.load_image("textures/blocks/redtorch_lit.png")
|
small = self.load_image_texture("textures/blocks/redtorch_lit.png")
|
||||||
|
|
||||||
# compose a torch bigger than the normal
|
# compose a torch bigger than the normal
|
||||||
# (better for doing transformations)
|
# (better for doing transformations)
|
||||||
@@ -1522,23 +1536,23 @@ def stairs(self, blockid, data):
|
|||||||
data = data | upside_down
|
data = data | upside_down
|
||||||
|
|
||||||
if blockid == 53: # wooden
|
if blockid == 53: # wooden
|
||||||
texture = self.load_image("textures/blocks/wood.png")
|
texture = self.load_image_texture("textures/blocks/wood.png")
|
||||||
elif blockid == 67: # cobblestone
|
elif blockid == 67: # cobblestone
|
||||||
texture = self.load_image("textures/blocks/stonebrick.png")
|
texture = self.load_image_texture("textures/blocks/stonebrick.png")
|
||||||
elif blockid == 108: # red brick stairs
|
elif blockid == 108: # red brick stairs
|
||||||
texture = self.load_image("textures/blocks/brick.png")
|
texture = self.load_image_texture("textures/blocks/brick.png")
|
||||||
elif blockid == 109: # stone brick stairs
|
elif blockid == 109: # stone brick stairs
|
||||||
texture = self.load_image("textures/blocks/stonebricksmooth.png")
|
texture = self.load_image_texture("textures/blocks/stonebricksmooth.png")
|
||||||
elif blockid == 114: # netherbrick stairs
|
elif blockid == 114: # netherbrick stairs
|
||||||
texture = self.load_image("textures/blocks/netherBrick.png")
|
texture = self.load_image_texture("textures/blocks/netherBrick.png")
|
||||||
elif blockid == 128: # sandstone stairs
|
elif blockid == 128: # sandstone stairs
|
||||||
texture = self.load_image("textures/blocks/sandstone_side.png")
|
texture = self.load_image_texture("textures/blocks/sandstone_side.png")
|
||||||
elif blockid == 134: # spruce wood stairs
|
elif blockid == 134: # spruce wood stairs
|
||||||
texture = self.load_image("textures/blocks/wood_spruce.png")
|
texture = self.load_image_texture("textures/blocks/wood_spruce.png")
|
||||||
elif blockid == 135: # birch wood stairs
|
elif blockid == 135: # birch wood stairs
|
||||||
texture = self.load_image("textures/blocks/wood_birch.png")
|
texture = self.load_image_texture("textures/blocks/wood_birch.png")
|
||||||
elif blockid == 136: # jungle good stairs
|
elif blockid == 136: # jungle good stairs
|
||||||
texture = self.load_image("textures/blocks/wood_jungle.png")
|
texture = self.load_image_texture("textures/blocks/wood_jungle.png")
|
||||||
|
|
||||||
|
|
||||||
side = texture.copy()
|
side = texture.copy()
|
||||||
@@ -1549,9 +1563,9 @@ def stairs(self, blockid, data):
|
|||||||
|
|
||||||
# sandstone stairs have spcial top texture
|
# sandstone stairs have spcial top texture
|
||||||
if blockid == 128:
|
if blockid == 128:
|
||||||
half_block_u = self.load_image("textures/blocks/sandstone_top.png").copy()
|
half_block_u = self.load_image_texture("textures/blocks/sandstone_top.png").copy()
|
||||||
half_block_d = self.load_image("textures/blocks/sandstone_top.png").copy()
|
half_block_d = self.load_image_texture("textures/blocks/sandstone_top.png").copy()
|
||||||
texture = self.load_image("textures/blocks/sandstone_top.png").copy()
|
texture = self.load_image_texture("textures/blocks/sandstone_top.png").copy()
|
||||||
|
|
||||||
# generate needed geometries
|
# generate needed geometries
|
||||||
ImageDraw.Draw(side).rectangle((0,0,7,6),outline=(0,0,0,0),fill=(0,0,0,0))
|
ImageDraw.Draw(side).rectangle((0,0,7,6),outline=(0,0,0,0),fill=(0,0,0,0))
|
||||||
@@ -1828,18 +1842,18 @@ def chests(self, blockid, data):
|
|||||||
def wire(self, blockid, data):
|
def wire(self, blockid, data):
|
||||||
|
|
||||||
if data & 0b1000000 == 64: # powered redstone wire
|
if data & 0b1000000 == 64: # powered redstone wire
|
||||||
redstone_wire_t = self.load_image("textures/blocks/redstoneDust_line.png")
|
redstone_wire_t = self.load_image_texture("textures/blocks/redstoneDust_line.png")
|
||||||
redstone_wire_t = self.tint_texture(redstone_wire_t,(255,0,0))
|
redstone_wire_t = self.tint_texture(redstone_wire_t,(255,0,0))
|
||||||
|
|
||||||
redstone_cross_t = self.load_image("textures/blocks/redstoneDust_cross.png")
|
redstone_cross_t = self.load_image_texture("textures/blocks/redstoneDust_cross.png")
|
||||||
redstone_cross_t = self.tint_texture(redstone_cross_t,(255,0,0))
|
redstone_cross_t = self.tint_texture(redstone_cross_t,(255,0,0))
|
||||||
|
|
||||||
|
|
||||||
else: # unpowered redstone wire
|
else: # unpowered redstone wire
|
||||||
redstone_wire_t = self.load_image("textures/blocks/redstoneDust_line.png")
|
redstone_wire_t = self.load_image_texture("textures/blocks/redstoneDust_line.png")
|
||||||
redstone_wire_t = self.tint_texture(redstone_wire_t,(48,0,0))
|
redstone_wire_t = self.tint_texture(redstone_wire_t,(48,0,0))
|
||||||
|
|
||||||
redstone_cross_t = self.load_image("textures/blocks/redstoneDust_cross.png")
|
redstone_cross_t = self.load_image_texture("textures/blocks/redstoneDust_cross.png")
|
||||||
redstone_cross_t = self.tint_texture(redstone_cross_t,(48,0,0))
|
redstone_cross_t = self.tint_texture(redstone_cross_t,(48,0,0))
|
||||||
|
|
||||||
# generate an image per redstone direction
|
# generate an image per redstone direction
|
||||||
@@ -1911,9 +1925,9 @@ block(blockid=57, top_image="textures/blocks/blockDiamond.png")
|
|||||||
# needs two different sides
|
# needs two different sides
|
||||||
@material(blockid=58, solid=True, nodata=True)
|
@material(blockid=58, solid=True, nodata=True)
|
||||||
def crafting_table(self, blockid, data):
|
def crafting_table(self, blockid, data):
|
||||||
top = self.load_image("textures/blocks/workbench_top.png")
|
top = self.load_image_texture("textures/blocks/workbench_top.png")
|
||||||
side3 = self.load_image("textures/blocks/workbench_side.png")
|
side3 = self.load_image_texture("textures/blocks/workbench_side.png")
|
||||||
side4 = self.load_image("textures/blocks/workbench_front.png")
|
side4 = self.load_image_texture("textures/blocks/workbench_front.png")
|
||||||
|
|
||||||
img = self.build_full_block(top, None, None, side3, side4, None)
|
img = self.build_full_block(top, None, None, side3, side4, None)
|
||||||
return img
|
return img
|
||||||
@@ -1921,7 +1935,7 @@ def crafting_table(self, blockid, data):
|
|||||||
# crops
|
# crops
|
||||||
@material(blockid=59, data=range(8), transparent=True, nospawn=True)
|
@material(blockid=59, data=range(8), transparent=True, nospawn=True)
|
||||||
def crops(self, blockid, data):
|
def crops(self, blockid, data):
|
||||||
raw_crop = self.load_image("textures/blocks/crops_%d.png" % data)
|
raw_crop = self.load_image_texture("textures/blocks/crops_%d.png" % data)
|
||||||
crop1 = self.transform_image_top(raw_crop)
|
crop1 = self.transform_image_top(raw_crop)
|
||||||
crop2 = self.transform_image_side(raw_crop)
|
crop2 = self.transform_image_side(raw_crop)
|
||||||
crop3 = crop2.transpose(Image.FLIP_LEFT_RIGHT)
|
crop3 = crop2.transpose(Image.FLIP_LEFT_RIGHT)
|
||||||
@@ -1935,10 +1949,10 @@ def crops(self, blockid, data):
|
|||||||
# farmland
|
# farmland
|
||||||
@material(blockid=60, data=range(9), solid=True)
|
@material(blockid=60, data=range(9), solid=True)
|
||||||
def farmland(self, blockid, data):
|
def farmland(self, blockid, data):
|
||||||
top = self.load_image("textures/blocks/farmland_wet.png")
|
top = self.load_image_texture("textures/blocks/farmland_wet.png")
|
||||||
if data == 0:
|
if data == 0:
|
||||||
top = self.load_image("textures/blocks/farmland_dry.png")
|
top = self.load_image_texture("textures/blocks/farmland_dry.png")
|
||||||
return self.build_block(top, self.load_image("textures/blocks/dirt.png"))
|
return self.build_block(top, self.load_image_texture("textures/blocks/dirt.png"))
|
||||||
|
|
||||||
# signposts
|
# signposts
|
||||||
@material(blockid=63, data=range(16), transparent=True)
|
@material(blockid=63, data=range(16), transparent=True)
|
||||||
@@ -1952,7 +1966,7 @@ def signpost(self, blockid, data):
|
|||||||
elif self.rotation == 3:
|
elif self.rotation == 3:
|
||||||
data = (data + 12) % 16
|
data = (data + 12) % 16
|
||||||
|
|
||||||
texture = self.load_image("textures/blocks/wood.png").copy()
|
texture = self.load_image_texture("textures/blocks/wood.png").copy()
|
||||||
# cut the planks to the size of a signpost
|
# cut the planks to the size of a signpost
|
||||||
ImageDraw.Draw(texture).rectangle((0,12,15,15),outline=(0,0,0,0),fill=(0,0,0,0))
|
ImageDraw.Draw(texture).rectangle((0,12,15,15),outline=(0,0,0,0),fill=(0,0,0,0))
|
||||||
|
|
||||||
@@ -1965,7 +1979,7 @@ def signpost(self, blockid, data):
|
|||||||
texture.putpixel((x,y),(0,0,0,255))
|
texture.putpixel((x,y),(0,0,0,255))
|
||||||
|
|
||||||
# Minecraft uses wood texture for the signpost stick
|
# Minecraft uses wood texture for the signpost stick
|
||||||
texture_stick = self.load_image("textures/blocks/tree_side.png")
|
texture_stick = self.load_image_texture("textures/blocks/tree_side.png")
|
||||||
texture_stick = texture_stick.resize((12,12), Image.ANTIALIAS)
|
texture_stick = texture_stick.resize((12,12), Image.ANTIALIAS)
|
||||||
ImageDraw.Draw(texture_stick).rectangle((2,0,12,12),outline=(0,0,0,0),fill=(0,0,0,0))
|
ImageDraw.Draw(texture_stick).rectangle((2,0,12,12),outline=(0,0,0,0),fill=(0,0,0,0))
|
||||||
|
|
||||||
@@ -2015,9 +2029,9 @@ def door(self, blockid, data):
|
|||||||
elif (data & 0b00011) == 3: data = data & 0b11100 | 2
|
elif (data & 0b00011) == 3: data = data & 0b11100 | 2
|
||||||
|
|
||||||
if data & 0x8 == 0x8: # top of the door
|
if data & 0x8 == 0x8: # top of the door
|
||||||
raw_door = self.load_image("textures/blocks/%s.png" % ("doorWood_upper" if blockid == 64 else "doorIron_upper"))
|
raw_door = self.load_image_texture("textures/blocks/%s.png" % ("doorWood_upper" if blockid == 64 else "doorIron_upper"))
|
||||||
else: # bottom of the door
|
else: # bottom of the door
|
||||||
raw_door = self.load_image("textures/blocks/%s.png" % ("doorWood_lower" if blockid == 64 else "doorIron_lower"))
|
raw_door = self.load_image_texture("textures/blocks/%s.png" % ("doorWood_lower" if blockid == 64 else "doorIron_lower"))
|
||||||
|
|
||||||
# if you want to render all doors as closed, then force
|
# if you want to render all doors as closed, then force
|
||||||
# force closed to be True
|
# force closed to be True
|
||||||
@@ -2137,7 +2151,7 @@ def ladder(self, blockid, data):
|
|||||||
elif data == 5: data = 2
|
elif data == 5: data = 2
|
||||||
|
|
||||||
img = Image.new("RGBA", (24,24), self.bgcolor)
|
img = Image.new("RGBA", (24,24), self.bgcolor)
|
||||||
raw_texture = self.load_image("textures/blocks/ladder.png")
|
raw_texture = self.load_image_texture("textures/blocks/ladder.png")
|
||||||
|
|
||||||
if data == 5:
|
if data == 5:
|
||||||
# normally this ladder would be obsured by the block it's attached to
|
# normally this ladder would be obsured by the block it's attached to
|
||||||
@@ -2181,7 +2195,7 @@ def wall_sign(self, blockid, data): # wall sign
|
|||||||
elif data == 4: data = 3
|
elif data == 4: data = 3
|
||||||
elif data == 5: data = 2
|
elif data == 5: data = 2
|
||||||
|
|
||||||
texture = self.load_image("textures/blocks/wood.png").copy()
|
texture = self.load_image_texture("textures/blocks/wood.png").copy()
|
||||||
# cut the planks to the size of a signpost
|
# cut the planks to the size of a signpost
|
||||||
ImageDraw.Draw(texture).rectangle((0,12,15,15),outline=(0,0,0,0),fill=(0,0,0,0))
|
ImageDraw.Draw(texture).rectangle((0,12,15,15),outline=(0,0,0,0),fill=(0,0,0,0))
|
||||||
|
|
||||||
@@ -2251,7 +2265,7 @@ def levers(self, blockid, data):
|
|||||||
elif data == 6: data = 5
|
elif data == 6: data = 5
|
||||||
|
|
||||||
# generate the texture for the base of the lever
|
# generate the texture for the base of the lever
|
||||||
t_base = self.load_image("textures/blocks/stonebrick.png").copy()
|
t_base = self.load_image_texture("textures/blocks/stonebrick.png").copy()
|
||||||
|
|
||||||
ImageDraw.Draw(t_base).rectangle((0,0,15,3),outline=(0,0,0,0),fill=(0,0,0,0))
|
ImageDraw.Draw(t_base).rectangle((0,0,15,3),outline=(0,0,0,0),fill=(0,0,0,0))
|
||||||
ImageDraw.Draw(t_base).rectangle((0,12,15,15),outline=(0,0,0,0),fill=(0,0,0,0))
|
ImageDraw.Draw(t_base).rectangle((0,12,15,15),outline=(0,0,0,0),fill=(0,0,0,0))
|
||||||
@@ -2259,7 +2273,7 @@ def levers(self, blockid, data):
|
|||||||
ImageDraw.Draw(t_base).rectangle((11,0,15,15),outline=(0,0,0,0),fill=(0,0,0,0))
|
ImageDraw.Draw(t_base).rectangle((11,0,15,15),outline=(0,0,0,0),fill=(0,0,0,0))
|
||||||
|
|
||||||
# generate the texture for the stick
|
# generate the texture for the stick
|
||||||
stick = self.load_image("textures/blocks/lever.png").copy()
|
stick = self.load_image_texture("textures/blocks/lever.png").copy()
|
||||||
c_stick = Image.new("RGBA", (16,16), self.bgcolor)
|
c_stick = Image.new("RGBA", (16,16), self.bgcolor)
|
||||||
|
|
||||||
tmp = ImageEnhance.Brightness(stick).enhance(0.8)
|
tmp = ImageEnhance.Brightness(stick).enhance(0.8)
|
||||||
@@ -2364,9 +2378,9 @@ def levers(self, blockid, data):
|
|||||||
@material(blockid=[70, 72], data=[0,1], transparent=True)
|
@material(blockid=[70, 72], data=[0,1], transparent=True)
|
||||||
def pressure_plate(self, blockid, data):
|
def pressure_plate(self, blockid, data):
|
||||||
if blockid == 70: # stone
|
if blockid == 70: # stone
|
||||||
t = self.load_image("textures/blocks/stone.png").copy()
|
t = self.load_image_texture("textures/blocks/stone.png").copy()
|
||||||
else: # wooden
|
else: # wooden
|
||||||
t = self.load_image("textures/blocks/wood.png").copy()
|
t = self.load_image_texture("textures/blocks/wood.png").copy()
|
||||||
|
|
||||||
# cut out the outside border, pressure plates are smaller
|
# cut out the outside border, pressure plates are smaller
|
||||||
# than a normal block
|
# than a normal block
|
||||||
@@ -2419,9 +2433,9 @@ def buttons(self, blockid, data):
|
|||||||
elif data == 4: data = 2
|
elif data == 4: data = 2
|
||||||
|
|
||||||
if blockid == 77:
|
if blockid == 77:
|
||||||
t = self.load_image("textures/blocks/stone.png").copy()
|
t = self.load_image_texture("textures/blocks/stone.png").copy()
|
||||||
else:
|
else:
|
||||||
t = self.load_image("textures/blocks/wood.png").copy()
|
t = self.load_image_texture("textures/blocks/wood.png").copy()
|
||||||
|
|
||||||
# generate the texture for the button
|
# generate the texture for the button
|
||||||
ImageDraw.Draw(t).rectangle((0,0,15,5),outline=(0,0,0,0),fill=(0,0,0,0))
|
ImageDraw.Draw(t).rectangle((0,0,15,5),outline=(0,0,0,0),fill=(0,0,0,0))
|
||||||
@@ -2471,7 +2485,7 @@ def buttons(self, blockid, data):
|
|||||||
def snow(self, blockid, data):
|
def snow(self, blockid, data):
|
||||||
# still not rendered correctly: data other than 0
|
# still not rendered correctly: data other than 0
|
||||||
|
|
||||||
tex = self.load_image("textures/blocks/snow.png")
|
tex = self.load_image_texture("textures/blocks/snow.png")
|
||||||
|
|
||||||
# make the side image, top 3/4 transparent
|
# make the side image, top 3/4 transparent
|
||||||
mask = tex.crop((0,12,16,16))
|
mask = tex.crop((0,12,16,16))
|
||||||
@@ -2496,8 +2510,8 @@ block(blockid=80, top_image="textures/blocks/snow.png")
|
|||||||
# cactus
|
# cactus
|
||||||
@material(blockid=81, data=range(15), transparent=True, solid=True, nospawn=True)
|
@material(blockid=81, data=range(15), transparent=True, solid=True, nospawn=True)
|
||||||
def cactus(self, blockid, data):
|
def cactus(self, blockid, data):
|
||||||
top = self.load_image("textures/blocks/cactus_top.png")
|
top = self.load_image_texture("textures/blocks/cactus_top.png")
|
||||||
side = self.load_image("textures/blocks/cactus_side.png")
|
side = self.load_image_texture("textures/blocks/cactus_side.png")
|
||||||
|
|
||||||
img = Image.new("RGBA", (24,24), self.bgcolor)
|
img = Image.new("RGBA", (24,24), self.bgcolor)
|
||||||
|
|
||||||
@@ -2524,13 +2538,13 @@ block(blockid=82, top_image="textures/blocks/clay.png")
|
|||||||
# sugar cane
|
# sugar cane
|
||||||
@material(blockid=83, data=range(16), transparent=True)
|
@material(blockid=83, data=range(16), transparent=True)
|
||||||
def sugar_cane(self, blockid, data):
|
def sugar_cane(self, blockid, data):
|
||||||
tex = self.load_image("textures/blocks/reeds.png")
|
tex = self.load_image_texture("textures/blocks/reeds.png")
|
||||||
return self.build_sprite(tex)
|
return self.build_sprite(tex)
|
||||||
|
|
||||||
# jukebox
|
# jukebox
|
||||||
@material(blockid=84, data=range(16), solid=True)
|
@material(blockid=84, data=range(16), solid=True)
|
||||||
def jukebox(self, blockid, data):
|
def jukebox(self, blockid, data):
|
||||||
return self.build_block(self.load_image("textures/blocks/jukebox_top.png"), self.load_image("textures/blocks/musicBlock.png"))
|
return self.build_block(self.load_image_texture("textures/blocks/jukebox_top.png"), self.load_image_texture("textures/blocks/musicBlock.png"))
|
||||||
|
|
||||||
# nether and normal fences
|
# nether and normal fences
|
||||||
# uses pseudo-ancildata found in iterate.c
|
# uses pseudo-ancildata found in iterate.c
|
||||||
@@ -2539,13 +2553,13 @@ def fence(self, blockid, data):
|
|||||||
# no need for rotations, it uses pseudo data.
|
# no need for rotations, it uses pseudo data.
|
||||||
# create needed images for Big stick fence
|
# create needed images for Big stick fence
|
||||||
if blockid == 85: # normal fence
|
if blockid == 85: # normal fence
|
||||||
fence_top = self.load_image("textures/blocks/wood.png").copy()
|
fence_top = self.load_image_texture("textures/blocks/wood.png").copy()
|
||||||
fence_side = self.load_image("textures/blocks/wood.png").copy()
|
fence_side = self.load_image_texture("textures/blocks/wood.png").copy()
|
||||||
fence_small_side = self.load_image("textures/blocks/wood.png").copy()
|
fence_small_side = self.load_image_texture("textures/blocks/wood.png").copy()
|
||||||
else: # netherbrick fence
|
else: # netherbrick fence
|
||||||
fence_top = self.load_image("textures/blocks/netherBrick.png").copy()
|
fence_top = self.load_image_texture("textures/blocks/netherBrick.png").copy()
|
||||||
fence_side = self.load_image("textures/blocks/netherBrick.png").copy()
|
fence_side = self.load_image_texture("textures/blocks/netherBrick.png").copy()
|
||||||
fence_small_side = self.load_image("textures/blocks/netherBrick.png").copy()
|
fence_small_side = self.load_image_texture("textures/blocks/netherBrick.png").copy()
|
||||||
|
|
||||||
# generate the textures of the fence
|
# generate the textures of the fence
|
||||||
ImageDraw.Draw(fence_top).rectangle((0,0,5,15),outline=(0,0,0,0),fill=(0,0,0,0))
|
ImageDraw.Draw(fence_top).rectangle((0,0,5,15),outline=(0,0,0,0),fill=(0,0,0,0))
|
||||||
@@ -2650,10 +2664,10 @@ def pumpkin(self, blockid, data): # pumpkins, jack-o-lantern
|
|||||||
elif data == 3: data = 2
|
elif data == 3: data = 2
|
||||||
|
|
||||||
# texture generation
|
# texture generation
|
||||||
top = self.load_image("textures/blocks/pumpkin_top.png")
|
top = self.load_image_texture("textures/blocks/pumpkin_top.png")
|
||||||
frontName = "textures/blocks/pumpkin_face.png" if blockid == 86 else "textures/blocks/pumpkin_jack.png"
|
frontName = "textures/blocks/pumpkin_face.png" if blockid == 86 else "textures/blocks/pumpkin_jack.png"
|
||||||
front = self.load_image(frontName)
|
front = self.load_image_texture(frontName)
|
||||||
side = self.load_image("textures/blocks/pumpkin_side.png")
|
side = self.load_image_texture("textures/blocks/pumpkin_side.png")
|
||||||
|
|
||||||
if data == 0: # pointing west
|
if data == 0: # pointing west
|
||||||
img = self.build_full_block(top, None, None, side, front)
|
img = self.build_full_block(top, None, None, side, front)
|
||||||
@@ -2698,10 +2712,10 @@ def portal(self, blockid, data):
|
|||||||
def cake(self, blockid, data):
|
def cake(self, blockid, data):
|
||||||
|
|
||||||
# cake textures
|
# cake textures
|
||||||
top = self.load_image("textures/blocks/cake_top.png").copy()
|
top = self.load_image_texture("textures/blocks/cake_top.png").copy()
|
||||||
side = self.load_image("textures/blocks/cake_side.png").copy()
|
side = self.load_image_texture("textures/blocks/cake_side.png").copy()
|
||||||
fullside = side.copy()
|
fullside = side.copy()
|
||||||
inside = self.load_image("textures/blocks/cake_inner.png")
|
inside = self.load_image_texture("textures/blocks/cake_inner.png")
|
||||||
|
|
||||||
img = Image.new("RGBA", (24,24), self.bgcolor)
|
img = Image.new("RGBA", (24,24), self.bgcolor)
|
||||||
if data == 0: # unbitten cake
|
if data == 0: # unbitten cake
|
||||||
@@ -2839,8 +2853,8 @@ def repeater(self, blockid, data):
|
|||||||
elif (data & 0b0011) == 3: data = data & 0b1100 | 2
|
elif (data & 0b0011) == 3: data = data & 0b1100 | 2
|
||||||
|
|
||||||
# generate the diode
|
# generate the diode
|
||||||
top = self.load_image("textures/blocks/repeater.png") if blockid == 93 else self.load_image("textures/blocks/repeater_lit.png")
|
top = self.load_image_texture("textures/blocks/repeater.png") if blockid == 93 else self.load_image_texture("textures/blocks/repeater_lit.png")
|
||||||
side = self.load_image("textures/blocks/stoneslab_side.png")
|
side = self.load_image_texture("textures/blocks/stoneslab_side.png")
|
||||||
increment = 13
|
increment = 13
|
||||||
|
|
||||||
if (data & 0x3) == 0: # pointing east
|
if (data & 0x3) == 0: # pointing east
|
||||||
@@ -2858,7 +2872,7 @@ def repeater(self, blockid, data):
|
|||||||
img = self.build_full_block( (top, increment), None, None, side, side)
|
img = self.build_full_block( (top, increment), None, None, side, side)
|
||||||
|
|
||||||
# compose a "3d" redstone torch
|
# compose a "3d" redstone torch
|
||||||
t = self.load_image("textures/blocks/redtorch.png").copy() if blockid == 93 else self.load_image("textures/blocks/redtorch_lit.png").copy()
|
t = self.load_image_texture("textures/blocks/redtorch.png").copy() if blockid == 93 else self.load_image_texture("textures/blocks/redtorch_lit.png").copy()
|
||||||
torch = Image.new("RGBA", (24,24), self.bgcolor)
|
torch = Image.new("RGBA", (24,24), self.bgcolor)
|
||||||
|
|
||||||
t_crop = t.crop((2,2,14,14))
|
t_crop = t.crop((2,2,14,14))
|
||||||
@@ -2971,8 +2985,8 @@ def comparator(self, blockid, data):
|
|||||||
data = data & 0b1100 | (((data & 0b11) + self.rotation) % 4)
|
data = data & 0b1100 | (((data & 0b11) + self.rotation) % 4)
|
||||||
|
|
||||||
|
|
||||||
top = self.load_image("textures/blocks/comparator.png") if blockid == 149 else self.load_image("textures/blocks/comparator_lit.png")
|
top = self.load_image_texture("textures/blocks/comparator.png") if blockid == 149 else self.load_image_texture("textures/blocks/comparator_lit.png")
|
||||||
side = self.load_image("textures/blocks/stoneslab_side.png")
|
side = self.load_image_texture("textures/blocks/stoneslab_side.png")
|
||||||
increment = 13
|
increment = 13
|
||||||
|
|
||||||
if (data & 0x3) == 0: # pointing north
|
if (data & 0x3) == 0: # pointing north
|
||||||
@@ -2998,7 +3012,7 @@ def comparator(self, blockid, data):
|
|||||||
|
|
||||||
def build_torch(active):
|
def build_torch(active):
|
||||||
# compose a "3d" redstone torch
|
# compose a "3d" redstone torch
|
||||||
t = self.load_image("textures/blocks/redtorch.png").copy() if not active else self.load_image("textures/blocks/redtorch_lit.png").copy()
|
t = self.load_image_texture("textures/blocks/redtorch.png").copy() if not active else self.load_image_texture("textures/blocks/redtorch_lit.png").copy()
|
||||||
torch = Image.new("RGBA", (24,24), self.bgcolor)
|
torch = Image.new("RGBA", (24,24), self.bgcolor)
|
||||||
|
|
||||||
t_crop = t.crop((2,2,14,14))
|
t_crop = t.crop((2,2,14,14))
|
||||||
@@ -3050,7 +3064,7 @@ def trapdoor(self, blockid, data):
|
|||||||
elif (data & 0b0011) == 3: data = data & 0b1100 | 0
|
elif (data & 0b0011) == 3: data = data & 0b1100 | 0
|
||||||
|
|
||||||
# texture generation
|
# texture generation
|
||||||
texture = self.load_image("textures/blocks/trapdoor.png")
|
texture = self.load_image_texture("textures/blocks/trapdoor.png")
|
||||||
if data & 0x4 == 0x4: # opened trapdoor
|
if data & 0x4 == 0x4: # opened trapdoor
|
||||||
if data & 0x3 == 0: # west
|
if data & 0x3 == 0: # west
|
||||||
img = self.build_full_block(None, None, None, None, texture)
|
img = self.build_full_block(None, None, None, None, texture)
|
||||||
@@ -3075,11 +3089,11 @@ def trapdoor(self, blockid, data):
|
|||||||
@material(blockid=97, data=range(3), solid=True)
|
@material(blockid=97, data=range(3), solid=True)
|
||||||
def hidden_silverfish(self, blockid, data):
|
def hidden_silverfish(self, blockid, data):
|
||||||
if data == 0: # stone
|
if data == 0: # stone
|
||||||
t = self.load_image("textures/blocks/stone.png")
|
t = self.load_image_texture("textures/blocks/stone.png")
|
||||||
elif data == 1: # cobblestone
|
elif data == 1: # cobblestone
|
||||||
t = self.load_image("textures/blocks/stonebrick.png")
|
t = self.load_image_texture("textures/blocks/stonebrick.png")
|
||||||
elif data == 2: # stone brick
|
elif data == 2: # stone brick
|
||||||
t = self.load_image("textures/blocks/stonebricksmooth.png")
|
t = self.load_image_texture("textures/blocks/stonebricksmooth.png")
|
||||||
|
|
||||||
img = self.build_block(t, t)
|
img = self.build_block(t, t)
|
||||||
|
|
||||||
@@ -3089,13 +3103,13 @@ def hidden_silverfish(self, blockid, data):
|
|||||||
@material(blockid=98, data=range(4), solid=True)
|
@material(blockid=98, data=range(4), solid=True)
|
||||||
def stone_brick(self, blockid, data):
|
def stone_brick(self, blockid, data):
|
||||||
if data == 0: # normal
|
if data == 0: # normal
|
||||||
t = self.load_image("textures/blocks/stonebricksmooth.png")
|
t = self.load_image_texture("textures/blocks/stonebricksmooth.png")
|
||||||
elif data == 1: # mossy
|
elif data == 1: # mossy
|
||||||
t = self.load_image("textures/blocks/stonebricksmooth_mossy.png")
|
t = self.load_image_texture("textures/blocks/stonebricksmooth_mossy.png")
|
||||||
elif data == 2: # cracked
|
elif data == 2: # cracked
|
||||||
t = self.load_image("textures/blocks/stonebricksmooth_cracked.png")
|
t = self.load_image_texture("textures/blocks/stonebricksmooth_cracked.png")
|
||||||
elif data == 3: # "circle" stone brick
|
elif data == 3: # "circle" stone brick
|
||||||
t = self.load_image("textures/blocks/stonebricksmooth_carved.png")
|
t = self.load_image_texture("textures/blocks/stonebricksmooth_carved.png")
|
||||||
|
|
||||||
img = self.build_full_block(t, None, None, t, t)
|
img = self.build_full_block(t, None, None, t, t)
|
||||||
|
|
||||||
@@ -3135,12 +3149,12 @@ def huge_mushroom(self, blockid, data):
|
|||||||
|
|
||||||
# texture generation
|
# texture generation
|
||||||
if blockid == 99: # brown
|
if blockid == 99: # brown
|
||||||
cap = self.load_image("textures/blocks/mushroom_skin_brown.png")
|
cap = self.load_image_texture("textures/blocks/mushroom_skin_brown.png")
|
||||||
else: # red
|
else: # red
|
||||||
cap = self.load_image("textures/blocks/mushroom_skin_red.png")
|
cap = self.load_image_texture("textures/blocks/mushroom_skin_red.png")
|
||||||
|
|
||||||
stem = self.load_image("textures/blocks/mushroom_skin_stem.png")
|
stem = self.load_image_texture("textures/blocks/mushroom_skin_stem.png")
|
||||||
porous = self.load_image("textures/blocks/mushroom_inside.png")
|
porous = self.load_image_texture("textures/blocks/mushroom_inside.png")
|
||||||
|
|
||||||
if data == 0: # fleshy piece
|
if data == 0: # fleshy piece
|
||||||
img = self.build_full_block(porous, None, None, porous, porous)
|
img = self.build_full_block(porous, None, None, porous, porous)
|
||||||
@@ -3185,10 +3199,10 @@ def panes(self, blockid, data):
|
|||||||
# no rotation, uses pseudo data
|
# no rotation, uses pseudo data
|
||||||
if blockid == 101:
|
if blockid == 101:
|
||||||
# iron bars
|
# iron bars
|
||||||
t = self.load_image("textures/blocks/fenceIron.png")
|
t = self.load_image_texture("textures/blocks/fenceIron.png")
|
||||||
else:
|
else:
|
||||||
# glass panes
|
# glass panes
|
||||||
t = self.load_image("textures/blocks/glass.png")
|
t = self.load_image_texture("textures/blocks/glass.png")
|
||||||
left = t.copy()
|
left = t.copy()
|
||||||
right = t.copy()
|
right = t.copy()
|
||||||
|
|
||||||
@@ -3234,7 +3248,7 @@ def stem(self, blockid, data):
|
|||||||
|
|
||||||
# not fully grown stem or no pumpkin/melon touching it,
|
# not fully grown stem or no pumpkin/melon touching it,
|
||||||
# straight up stem
|
# straight up stem
|
||||||
t = self.load_image("textures/blocks/stem_straight.png").copy()
|
t = self.load_image_texture("textures/blocks/stem_straight.png").copy()
|
||||||
img = Image.new("RGBA", (16,16), self.bgcolor)
|
img = Image.new("RGBA", (16,16), self.bgcolor)
|
||||||
alpha_over(img, t, (0, int(16 - 16*((data + 1)/8.))), t)
|
alpha_over(img, t, (0, int(16 - 16*((data + 1)/8.))), t)
|
||||||
img = self.build_sprite(t)
|
img = self.build_sprite(t)
|
||||||
@@ -3270,7 +3284,7 @@ def vines(self, blockid, data):
|
|||||||
data = (data - 16) | 1
|
data = (data - 16) | 1
|
||||||
|
|
||||||
# decode data and prepare textures
|
# decode data and prepare textures
|
||||||
raw_texture = self.load_image("textures/blocks/vine.png")
|
raw_texture = self.load_image_texture("textures/blocks/vine.png")
|
||||||
s = w = n = e = None
|
s = w = n = e = None
|
||||||
|
|
||||||
if data & 1: # south
|
if data & 1: # south
|
||||||
@@ -3315,7 +3329,7 @@ def fence_gate(self, blockid, data):
|
|||||||
data = data | 0x4
|
data = data | 0x4
|
||||||
|
|
||||||
# create the closed gate side
|
# create the closed gate side
|
||||||
gate_side = self.load_image("textures/blocks/wood.png").copy()
|
gate_side = self.load_image_texture("textures/blocks/wood.png").copy()
|
||||||
gate_side_draw = ImageDraw.Draw(gate_side)
|
gate_side_draw = ImageDraw.Draw(gate_side)
|
||||||
gate_side_draw.rectangle((7,0,15,0),outline=(0,0,0,0),fill=(0,0,0,0))
|
gate_side_draw.rectangle((7,0,15,0),outline=(0,0,0,0),fill=(0,0,0,0))
|
||||||
gate_side_draw.rectangle((7,4,9,6),outline=(0,0,0,0),fill=(0,0,0,0))
|
gate_side_draw.rectangle((7,4,9,6),outline=(0,0,0,0),fill=(0,0,0,0))
|
||||||
@@ -3381,7 +3395,7 @@ block(blockid=110, top_image="textures/blocks/mycel_top.png", side_image="textur
|
|||||||
# with ancil data.
|
# with ancil data.
|
||||||
@material(blockid=111, data=range(4), transparent=True)
|
@material(blockid=111, data=range(4), transparent=True)
|
||||||
def lilypad(self, blockid, data):
|
def lilypad(self, blockid, data):
|
||||||
t = self.load_image("textures/blocks/waterlily.png")
|
t = self.load_image_texture("textures/blocks/waterlily.png")
|
||||||
return self.build_full_block(None, None, None, None, None, t)
|
return self.build_full_block(None, None, None, None, None, t)
|
||||||
|
|
||||||
# nether brick
|
# nether brick
|
||||||
@@ -3391,11 +3405,11 @@ block(blockid=112, top_image="textures/blocks/netherBrick.png")
|
|||||||
@material(blockid=115, data=range(4), transparent=True)
|
@material(blockid=115, data=range(4), transparent=True)
|
||||||
def nether_wart(self, blockid, data):
|
def nether_wart(self, blockid, data):
|
||||||
if data == 0: # just come up
|
if data == 0: # just come up
|
||||||
t = self.load_image("textures/blocks/netherStalk_0.png")
|
t = self.load_image_texture("textures/blocks/netherStalk_0.png")
|
||||||
elif data in (1, 2):
|
elif data in (1, 2):
|
||||||
t = self.load_image("textures/blocks/netherStalk_1.png")
|
t = self.load_image_texture("textures/blocks/netherStalk_1.png")
|
||||||
else: # fully grown
|
else: # fully grown
|
||||||
t = self.load_image("textures/blocks/netherStalk_2.png")
|
t = self.load_image_texture("textures/blocks/netherStalk_2.png")
|
||||||
|
|
||||||
# use the same technic as tall grass
|
# use the same technic as tall grass
|
||||||
img = self.build_billboard(t)
|
img = self.build_billboard(t)
|
||||||
@@ -3407,8 +3421,8 @@ def nether_wart(self, blockid, data):
|
|||||||
@material(blockid=116, transparent=True, nodata=True)
|
@material(blockid=116, transparent=True, nodata=True)
|
||||||
def enchantment_table(self, blockid, data):
|
def enchantment_table(self, blockid, data):
|
||||||
# no book at the moment
|
# no book at the moment
|
||||||
top = self.load_image("textures/blocks/enchantment_top.png")
|
top = self.load_image_texture("textures/blocks/enchantment_top.png")
|
||||||
side = self.load_image("textures/blocks/enchantment_side.png")
|
side = self.load_image_texture("textures/blocks/enchantment_side.png")
|
||||||
img = self.build_full_block((top, 4), None, None, side, side)
|
img = self.build_full_block((top, 4), None, None, side, side)
|
||||||
|
|
||||||
return img
|
return img
|
||||||
@@ -3417,9 +3431,9 @@ def enchantment_table(self, blockid, data):
|
|||||||
# TODO this is a place holder, is a 2d image pasted
|
# TODO this is a place holder, is a 2d image pasted
|
||||||
@material(blockid=117, data=range(5), transparent=True)
|
@material(blockid=117, data=range(5), transparent=True)
|
||||||
def brewing_stand(self, blockid, data):
|
def brewing_stand(self, blockid, data):
|
||||||
base = self.load_image("textures/blocks/brewingStand_base.png")
|
base = self.load_image_texture("textures/blocks/brewingStand_base.png")
|
||||||
img = self.build_full_block(None, None, None, None, None, base)
|
img = self.build_full_block(None, None, None, None, None, base)
|
||||||
t = self.load_image("textures/blocks/brewingStand.png")
|
t = self.load_image_texture("textures/blocks/brewingStand.png")
|
||||||
stand = self.build_billboard(t)
|
stand = self.build_billboard(t)
|
||||||
alpha_over(img,stand,(0,-2))
|
alpha_over(img,stand,(0,-2))
|
||||||
return img
|
return img
|
||||||
@@ -3427,9 +3441,9 @@ def brewing_stand(self, blockid, data):
|
|||||||
# cauldron
|
# cauldron
|
||||||
@material(blockid=118, data=range(4), transparent=True)
|
@material(blockid=118, data=range(4), transparent=True)
|
||||||
def cauldron(self, blockid, data):
|
def cauldron(self, blockid, data):
|
||||||
side = self.load_image("textures/blocks/cauldron_side.png")
|
side = self.load_image_texture("textures/blocks/cauldron_side.png")
|
||||||
top = self.load_image("textures/blocks/cauldron_top.png")
|
top = self.load_image_texture("textures/blocks/cauldron_top.png")
|
||||||
bottom = self.load_image("textures/blocks/cauldron_inner.png")
|
bottom = self.load_image_texture("textures/blocks/cauldron_inner.png")
|
||||||
water = self.transform_image_top(self.load_water())
|
water = self.transform_image_top(self.load_water())
|
||||||
if data == 0: # empty
|
if data == 0: # empty
|
||||||
img = self.build_full_block(top, side, side, side, side)
|
img = self.build_full_block(top, side, side, side, side)
|
||||||
@@ -3473,14 +3487,14 @@ def end_portal(self, blockid, data):
|
|||||||
def end_portal_frame(self, blockid, data):
|
def end_portal_frame(self, blockid, data):
|
||||||
# The bottom 2 bits are oritation info but seems there is no
|
# The bottom 2 bits are oritation info but seems there is no
|
||||||
# graphical difference between orientations
|
# graphical difference between orientations
|
||||||
top = self.load_image("textures/blocks/endframe_top.png")
|
top = self.load_image_texture("textures/blocks/endframe_top.png")
|
||||||
eye_t = self.load_image("textures/blocks/endframe_eye.png")
|
eye_t = self.load_image_texture("textures/blocks/endframe_eye.png")
|
||||||
side = self.load_image("textures/blocks/endframe_side.png")
|
side = self.load_image_texture("textures/blocks/endframe_side.png")
|
||||||
img = self.build_full_block((top, 4), None, None, side, side)
|
img = self.build_full_block((top, 4), None, None, side, side)
|
||||||
if data & 0x4 == 0x4: # ender eye on it
|
if data & 0x4 == 0x4: # ender eye on it
|
||||||
# generate the eye
|
# generate the eye
|
||||||
eye_t = self.load_image("textures/blocks/endframe_eye.png").copy()
|
eye_t = self.load_image_texture("textures/blocks/endframe_eye.png").copy()
|
||||||
eye_t_s = self.load_image("textures/blocks/endframe_eye.png").copy()
|
eye_t_s = self.load_image_texture("textures/blocks/endframe_eye.png").copy()
|
||||||
# cut out from the texture the side and the top of the eye
|
# cut out from the texture the side and the top of the eye
|
||||||
ImageDraw.Draw(eye_t).rectangle((0,0,15,4),outline=(0,0,0,0),fill=(0,0,0,0))
|
ImageDraw.Draw(eye_t).rectangle((0,0,15,4),outline=(0,0,0,0),fill=(0,0,0,0))
|
||||||
ImageDraw.Draw(eye_t_s).rectangle((0,4,15,15),outline=(0,0,0,0),fill=(0,0,0,0))
|
ImageDraw.Draw(eye_t_s).rectangle((0,4,15,15),outline=(0,0,0,0),fill=(0,0,0,0))
|
||||||
@@ -3514,13 +3528,13 @@ block(blockid=124, top_image="textures/blocks/redstoneLight_lit.png")
|
|||||||
def wooden_slabs(self, blockid, data):
|
def wooden_slabs(self, blockid, data):
|
||||||
texture = data & 7
|
texture = data & 7
|
||||||
if texture== 0: # oak
|
if texture== 0: # oak
|
||||||
top = side = self.load_image("textures/blocks/wood.png")
|
top = side = self.load_image_texture("textures/blocks/wood.png")
|
||||||
elif texture== 1: # spruce
|
elif texture== 1: # spruce
|
||||||
top = side = self.load_image("textures/blocks/wood_spruce.png")
|
top = side = self.load_image_texture("textures/blocks/wood_spruce.png")
|
||||||
elif texture== 2: # birch
|
elif texture== 2: # birch
|
||||||
top = side = self.load_image("textures/blocks/wood_birch.png")
|
top = side = self.load_image_texture("textures/blocks/wood_birch.png")
|
||||||
elif texture== 3: # jungle
|
elif texture== 3: # jungle
|
||||||
top = side = self.load_image("textures/blocks/wood_jungle.png")
|
top = side = self.load_image_texture("textures/blocks/wood_jungle.png")
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -3591,17 +3605,17 @@ def cocoa_plant(self, blockid, data):
|
|||||||
|
|
||||||
size = data & 12
|
size = data & 12
|
||||||
if size == 8: # big
|
if size == 8: # big
|
||||||
t = self.load_image("textures/blocks/cocoa_2.png")
|
t = self.load_image_texture("textures/blocks/cocoa_2.png")
|
||||||
c_left = (0,3)
|
c_left = (0,3)
|
||||||
c_right = (8,3)
|
c_right = (8,3)
|
||||||
c_top = (5,2)
|
c_top = (5,2)
|
||||||
elif size == 4: # normal
|
elif size == 4: # normal
|
||||||
t = self.load_image("textures/blocks/cocoa_1.png")
|
t = self.load_image_texture("textures/blocks/cocoa_1.png")
|
||||||
c_left = (-2,2)
|
c_left = (-2,2)
|
||||||
c_right = (8,2)
|
c_right = (8,2)
|
||||||
c_top = (5,2)
|
c_top = (5,2)
|
||||||
elif size == 0: # small
|
elif size == 0: # small
|
||||||
t = self.load_image("textures/blocks/cocoa_0.png")
|
t = self.load_image_texture("textures/blocks/cocoa_0.png")
|
||||||
c_left = (-3,2)
|
c_left = (-3,2)
|
||||||
c_right = (6,2)
|
c_right = (6,2)
|
||||||
c_top = (5,2)
|
c_top = (5,2)
|
||||||
@@ -3658,12 +3672,12 @@ block(blockid=137, top_image="textures/blocks/commandBlock.png")
|
|||||||
@material(blockid=138, transparent=True, nodata = True)
|
@material(blockid=138, transparent=True, nodata = True)
|
||||||
def beacon(self, blockid, data):
|
def beacon(self, blockid, data):
|
||||||
# generate the three pieces of the block
|
# generate the three pieces of the block
|
||||||
t = self.load_image("textures/blocks/glass.png")
|
t = self.load_image_texture("textures/blocks/glass.png")
|
||||||
glass = self.build_block(t,t)
|
glass = self.build_block(t,t)
|
||||||
t = self.load_image("textures/blocks/obsidian.png")
|
t = self.load_image_texture("textures/blocks/obsidian.png")
|
||||||
obsidian = self.build_full_block((t,12),None, None, t, t)
|
obsidian = self.build_full_block((t,12),None, None, t, t)
|
||||||
obsidian = obsidian.resize((20,20), Image.ANTIALIAS)
|
obsidian = obsidian.resize((20,20), Image.ANTIALIAS)
|
||||||
t = self.load_image("textures/blocks/beacon.png")
|
t = self.load_image_texture("textures/blocks/beacon.png")
|
||||||
crystal = self.build_block(t,t)
|
crystal = self.build_block(t,t)
|
||||||
crystal = crystal.resize((16,16),Image.ANTIALIAS)
|
crystal = crystal.resize((16,16),Image.ANTIALIAS)
|
||||||
|
|
||||||
@@ -3682,10 +3696,10 @@ def cobblestone_wall(self, blockid, data):
|
|||||||
# no rotation, uses pseudo data
|
# no rotation, uses pseudo data
|
||||||
if data & 0b10000 == 0:
|
if data & 0b10000 == 0:
|
||||||
# cobblestone
|
# cobblestone
|
||||||
t = self.load_image("textures/blocks/stonebrick.png").copy()
|
t = self.load_image_texture("textures/blocks/stonebrick.png").copy()
|
||||||
else:
|
else:
|
||||||
# mossy cobblestone
|
# mossy cobblestone
|
||||||
t = self.load_image("textures/blocks/stoneMoss.png").copy()
|
t = self.load_image_texture("textures/blocks/stoneMoss.png").copy()
|
||||||
|
|
||||||
wall_pole_top = t.copy()
|
wall_pole_top = t.copy()
|
||||||
wall_pole_side = t.copy()
|
wall_pole_side = t.copy()
|
||||||
@@ -3810,11 +3824,11 @@ def crops(self, blockid, data):
|
|||||||
if data != 7: # when growing they look the same
|
if data != 7: # when growing they look the same
|
||||||
# data = 7 -> fully grown, everything else is growing
|
# data = 7 -> fully grown, everything else is growing
|
||||||
# this seems to work, but still not sure
|
# this seems to work, but still not sure
|
||||||
raw_crop = self.load_image("textures/blocks/potatoes_%d.png" % (data % 3))
|
raw_crop = self.load_image_texture("textures/blocks/potatoes_%d.png" % (data % 3))
|
||||||
elif blockid == 141: # carrots
|
elif blockid == 141: # carrots
|
||||||
raw_crop = self.load_image("textures/blocks/carrots_3.png")
|
raw_crop = self.load_image_texture("textures/blocks/carrots_3.png")
|
||||||
else: # potatoes
|
else: # potatoes
|
||||||
raw_crop = self.load_image("textures/blocks/potatoes_3.png")
|
raw_crop = self.load_image_texture("textures/blocks/potatoes_3.png")
|
||||||
crop1 = self.transform_image_top(raw_crop)
|
crop1 = self.transform_image_top(raw_crop)
|
||||||
crop2 = self.transform_image_side(raw_crop)
|
crop2 = self.transform_image_side(raw_crop)
|
||||||
crop3 = crop2.transpose(Image.FLIP_LEFT_RIGHT)
|
crop3 = crop2.transpose(Image.FLIP_LEFT_RIGHT)
|
||||||
@@ -3840,16 +3854,16 @@ def anvil(self, blockid, data):
|
|||||||
# get the correct textures
|
# get the correct textures
|
||||||
# the bits 0x4 and 0x8 determine how damaged is the anvil
|
# 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("textures/blocks/anvil_top.png")
|
top = self.load_image_texture("textures/blocks/anvil_top.png")
|
||||||
elif (data & 0xc) == 0x4: # slightly damaged
|
elif (data & 0xc) == 0x4: # slightly damaged
|
||||||
top = self.load_image("textures/blocks/anvil_top_damaged_1.png")
|
top = self.load_image_texture("textures/blocks/anvil_top_damaged_1.png")
|
||||||
elif (data & 0xc) == 0x8: # very damaged
|
elif (data & 0xc) == 0x8: # very damaged
|
||||||
top = self.load_image("textures/blocks/anvil_top_damaged_2.png")
|
top = self.load_image_texture("textures/blocks/anvil_top_damaged_2.png")
|
||||||
# everything else use this texture
|
# everything else use this texture
|
||||||
big_side = self.load_image("textures/blocks/anvil_base.png").copy()
|
big_side = self.load_image_texture("textures/blocks/anvil_base.png").copy()
|
||||||
small_side = self.load_image("textures/blocks/anvil_base.png").copy()
|
small_side = self.load_image_texture("textures/blocks/anvil_base.png").copy()
|
||||||
base = self.load_image("textures/blocks/anvil_base.png").copy()
|
base = self.load_image_texture("textures/blocks/anvil_base.png").copy()
|
||||||
small_base = self.load_image("textures/blocks/anvil_base.png").copy()
|
small_base = self.load_image_texture("textures/blocks/anvil_base.png").copy()
|
||||||
|
|
||||||
# cut needed patterns
|
# cut needed patterns
|
||||||
ImageDraw.Draw(big_side).rectangle((0,8,15,15),outline=(0,0,0,0),fill=(0,0,0,0))
|
ImageDraw.Draw(big_side).rectangle((0,8,15,15),outline=(0,0,0,0),fill=(0,0,0,0))
|
||||||
|
|||||||
Reference in New Issue
Block a user