Merge pull request #1791 from overviewer/116-blocks
This commit is contained in:
@@ -6,7 +6,7 @@ python:
|
|||||||
- "3.7"
|
- "3.7"
|
||||||
- "3.8"
|
- "3.8"
|
||||||
env:
|
env:
|
||||||
- MC_VERSION=1.15
|
- MC_VERSION=1.16.1
|
||||||
before_install:
|
before_install:
|
||||||
- wget https://raw.githubusercontent.com/python-pillow/Pillow/master/src/libImaging/Imaging.h
|
- wget https://raw.githubusercontent.com/python-pillow/Pillow/master/src/libImaging/Imaging.h
|
||||||
- wget https://raw.githubusercontent.com/python-pillow/Pillow/master/src/libImaging/ImagingUtils.h
|
- wget https://raw.githubusercontent.com/python-pillow/Pillow/master/src/libImaging/ImagingUtils.h
|
||||||
|
|||||||
@@ -273,14 +273,14 @@ If you want or need to provide your own textures, you have several options:
|
|||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
VERSION=1.15
|
VERSION=1.16.1
|
||||||
mkdir -p ~/.minecraft/versions/${VERSION}/
|
mkdir -p ~/.minecraft/versions/${VERSION}/
|
||||||
wget https://overviewer.org/textures/${VERSION} -O ~/.minecraft/versions/${VERSION}/${VERSION}.jar
|
wget https://overviewer.org/textures/${VERSION} -O ~/.minecraft/versions/${VERSION}/${VERSION}.jar
|
||||||
|
|
||||||
If that's too confusing for you, then just take this single line and paste it into
|
If that's too confusing for you, then just take this single line and paste it into
|
||||||
a terminal to get 1.15 textures::
|
a terminal to get 1.16 textures::
|
||||||
|
|
||||||
wget https://overviewer.org/textures/1.15 -O ~/.minecraft/versions/1.15/1.15.jar
|
wget https://overviewer.org/textures/1.16.1 -O ~/.minecraft/versions/1.16.1/1.16.1.jar
|
||||||
|
|
||||||
* You can also just run the launcher to install the client.
|
* You can also just run the launcher to install the client.
|
||||||
|
|
||||||
|
|||||||
@@ -239,6 +239,9 @@ def main():
|
|||||||
f = tex.find_file("assets/minecraft/textures/block/grass_block_top.png", verbose=True)
|
f = tex.find_file("assets/minecraft/textures/block/grass_block_top.png", verbose=True)
|
||||||
f = tex.find_file("assets/minecraft/textures/block/diamond_ore.png", verbose=True)
|
f = tex.find_file("assets/minecraft/textures/block/diamond_ore.png", verbose=True)
|
||||||
f = tex.find_file("assets/minecraft/textures/block/acacia_planks.png", verbose=True)
|
f = tex.find_file("assets/minecraft/textures/block/acacia_planks.png", verbose=True)
|
||||||
|
# 1.16
|
||||||
|
f = tex.find_file("assets/minecraft/textures/block/ancient_debris_top.png",
|
||||||
|
verbose=True)
|
||||||
except IOError:
|
except IOError:
|
||||||
logging.error("Could not find any texture files.")
|
logging.error("Could not find any texture files.")
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -58,6 +58,13 @@ bool block_class_is_subset(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool block_class_is_wall(mc_block_t block) {
|
||||||
|
mc_block_t mask = 0b11111111;
|
||||||
|
mc_block_t prefix = 0b111 << 8; // 1792 is the starting offset
|
||||||
|
// if the xor zeroes all bits, the prefix must've matched.
|
||||||
|
return (block & ~mask) ^ prefix == 0;
|
||||||
|
}
|
||||||
|
|
||||||
const mc_block_t block_class_stair[] = {
|
const mc_block_t block_class_stair[] = {
|
||||||
block_oak_stairs,
|
block_oak_stairs,
|
||||||
block_brick_stairs,
|
block_brick_stairs,
|
||||||
@@ -253,19 +260,14 @@ const mc_block_t block_class_alt_height[] = {
|
|||||||
block_wooden_slab};
|
block_wooden_slab};
|
||||||
const size_t block_class_alt_height_len = COUNT_OF(block_class_alt_height);
|
const size_t block_class_alt_height_len = COUNT_OF(block_class_alt_height);
|
||||||
|
|
||||||
const mc_block_t block_class_wall[] = {
|
const mc_block_t block_class_nether_roof[] = {
|
||||||
block_andesite_wall,
|
block_bedrock,
|
||||||
block_brick_wall,
|
block_netherrack,
|
||||||
block_cobblestone_wall,
|
block_quartz_ore,
|
||||||
block_diorite_wall,
|
block_lava,
|
||||||
block_end_stone_brick_wall,
|
block_soul_sand,
|
||||||
block_granite_wall,
|
block_basalt,
|
||||||
block_mossy_cobblestone_wall,
|
block_blackstone,
|
||||||
block_mossy_stone_brick_wall,
|
block_soul_soil,
|
||||||
block_nether_brick_wall,
|
block_nether_gold_ore};
|
||||||
block_prismarine_wall,
|
const size_t block_class_nether_roof_len = COUNT_OF(block_class_nether_roof);
|
||||||
block_red_nether_brick_wall,
|
|
||||||
block_red_sandstone_wall,
|
|
||||||
block_sandstone_wall,
|
|
||||||
block_stone_brick_wall};
|
|
||||||
const size_t block_class_wall_len = COUNT_OF(block_class_wall);
|
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ bool block_class_is_subset(
|
|||||||
const mc_block_t block_class[],
|
const mc_block_t block_class[],
|
||||||
size_t block_class_len);
|
size_t block_class_len);
|
||||||
|
|
||||||
|
bool block_class_is_wall(mc_block_t block);
|
||||||
|
|
||||||
extern const mc_block_t block_class_stair[];
|
extern const mc_block_t block_class_stair[];
|
||||||
extern const size_t block_class_stair_len;
|
extern const size_t block_class_stair_len;
|
||||||
|
|
||||||
@@ -46,7 +48,7 @@ extern const size_t block_class_ancil_len;
|
|||||||
extern const mc_block_t block_class_alt_height[];
|
extern const mc_block_t block_class_alt_height[];
|
||||||
extern const size_t block_class_alt_height_len;
|
extern const size_t block_class_alt_height_len;
|
||||||
|
|
||||||
extern const mc_block_t block_class_wall[];
|
extern const mc_block_t block_class_nether_roof[];
|
||||||
extern const size_t block_class_wall_len;
|
extern const size_t block_class_nether_roof_len;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -354,7 +354,7 @@ generate_pseudo_data(RenderState* state, uint16_t ancilData) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
} else if (block_class_is_subset(state->block, block_class_wall, block_class_wall_len)) {
|
} else if (block_class_is_wall(state->block)) {
|
||||||
/* check for walls and add one bit with the type of wall (mossy or cobblestone)*/
|
/* check for walls and add one bit with the type of wall (mossy or cobblestone)*/
|
||||||
if (ancilData == 0x1) {
|
if (ancilData == 0x1) {
|
||||||
return check_adjacent_blocks(state, x, y, z, state->block) | 0x10;
|
return check_adjacent_blocks(state, x, y, z, state->block) | 0x10;
|
||||||
|
|||||||
@@ -260,6 +260,47 @@ enum mc_block_id {
|
|||||||
block_structure_block = 255,
|
block_structure_block = 255,
|
||||||
block_jigsaw = 256,
|
block_jigsaw = 256,
|
||||||
block_shulker_box = 257,
|
block_shulker_box = 257,
|
||||||
|
// 1.16 stuff
|
||||||
|
block_ancient_debris = 1000,
|
||||||
|
block_basalt = 1001,
|
||||||
|
block_polished_basalt = 1002,
|
||||||
|
block_soul_campfire = 1003,
|
||||||
|
block_blackstone = 1004,
|
||||||
|
block_netherite_block = 1005,
|
||||||
|
block_warped_nylium = 1006,
|
||||||
|
block_crimson_nylium = 1007,
|
||||||
|
block_warped_wart_block = 1010,
|
||||||
|
block_shroomlight = 1011,
|
||||||
|
block_twisting_vines = 1012,
|
||||||
|
block_twisting_vines_plant = 1013,
|
||||||
|
block_weeping_vines = 1014,
|
||||||
|
block_weeping_vines_plant = 1015,
|
||||||
|
block_warped_fungus = 1016,
|
||||||
|
block_crimson_fungus = 1017,
|
||||||
|
block_warped_roots = 1018,
|
||||||
|
block_crimson_roots = 1019,
|
||||||
|
block_soul_soil = 1020,
|
||||||
|
block_nether_gold_ore = 1021,
|
||||||
|
// 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
|
||||||
|
// this is because our check looks for the prefix 0b11100000000
|
||||||
|
block_andesite_wall = 1792,
|
||||||
|
block_brick_wall = 1793,
|
||||||
|
block_cobblestone_wall = 1794,
|
||||||
|
block_diorite_wall = 1795,
|
||||||
|
block_end_stone_brick_wall = 1796,
|
||||||
|
block_granite_wall = 1797,
|
||||||
|
block_mossy_cobblestone_wall = 1798,
|
||||||
|
block_mossy_stone_brick_wall = 1799,
|
||||||
|
block_nether_brick_wall = 1800,
|
||||||
|
block_prismarine_wall = 1801,
|
||||||
|
block_red_nether_brick_wall = 1802,
|
||||||
|
block_red_sandstone_wall = 1803,
|
||||||
|
block_sandstone_wall = 1804,
|
||||||
|
block_stone_brick_wall = 1805,
|
||||||
|
// end of walls
|
||||||
|
|
||||||
block_prismarine_stairs = 11337,
|
block_prismarine_stairs = 11337,
|
||||||
block_dark_prismarine_stairs = 11338,
|
block_dark_prismarine_stairs = 11338,
|
||||||
block_prismarine_brick_stairs = 11339,
|
block_prismarine_brick_stairs = 11339,
|
||||||
@@ -336,23 +377,7 @@ enum mc_block_id {
|
|||||||
block_honey_block = 11504,
|
block_honey_block = 11504,
|
||||||
block_sweet_berry_bush = 11505,
|
block_sweet_berry_bush = 11505,
|
||||||
block_campfire = 11506,
|
block_campfire = 11506,
|
||||||
block_bell = 11507,
|
block_bell = 11507
|
||||||
// adding a gap in the numbering of walls to keep them all
|
|
||||||
// in one numbering block starting at 21000
|
|
||||||
block_andesite_wall = 21000,
|
|
||||||
block_brick_wall = 21001,
|
|
||||||
block_cobblestone_wall = 21002,
|
|
||||||
block_diorite_wall = 21003,
|
|
||||||
block_end_stone_brick_wall = 21004,
|
|
||||||
block_granite_wall = 21005,
|
|
||||||
block_mossy_cobblestone_wall = 21006,
|
|
||||||
block_mossy_stone_brick_wall = 21007,
|
|
||||||
block_nether_brick_wall = 21008,
|
|
||||||
block_prismarine_wall = 21009,
|
|
||||||
block_red_nether_brick_wall = 21010,
|
|
||||||
block_red_sandstone_wall = 21011,
|
|
||||||
block_sandstone_wall = 21012,
|
|
||||||
block_stone_brick_wall = 21013
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef uint16_t mc_block_t;
|
typedef uint16_t mc_block_t;
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
// increment this value if you've made a change to the c extension
|
// increment this value if you've made a change to the c extension
|
||||||
// and want to force users to rebuild
|
// and want to force users to rebuild
|
||||||
#define OVERVIEWER_EXTENSION_VERSION 86
|
#define OVERVIEWER_EXTENSION_VERSION 90
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ walk_chunk(RenderState* state, RenderPrimitiveNether* data) {
|
|||||||
|
|
||||||
for (y = NETHER_ROOF - 1; y >= 0; y--) {
|
for (y = NETHER_ROOF - 1; y >= 0; y--) {
|
||||||
blockid = get_data(state, BLOCKS, x, y - (state->chunky * 16), z);
|
blockid = get_data(state, BLOCKS, x, y - (state->chunky * 16), z);
|
||||||
if (block_class_is_subset(blockid, (mc_block_t[]){block_bedrock, block_netherrack, block_quartz_ore, block_lava}, 4))
|
if (block_class_is_subset(blockid, block_class_nether_roof, block_class_nether_roof_len))
|
||||||
data->remove_block[x + 1][y][z + 1] = true;
|
data->remove_block[x + 1][y][z + 1] = true;
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ import functools
|
|||||||
from . import util
|
from . import util
|
||||||
|
|
||||||
|
|
||||||
|
BLOCKTEX = "assets/minecraft/textures/block/"
|
||||||
|
|
||||||
# global variables to collate information in @material decorators
|
# global variables to collate information in @material decorators
|
||||||
blockmap_generators = {}
|
blockmap_generators = {}
|
||||||
|
|
||||||
@@ -324,7 +326,7 @@ class Textures(object):
|
|||||||
if verbose: logging.info("Found %s in '%s'", filename, path)
|
if verbose: logging.info("Found %s in '%s'", filename, path)
|
||||||
return open(path, mode)
|
return open(path, mode)
|
||||||
|
|
||||||
raise TextureException("Could not find the textures while searching for '{0}'. Try specifying the 'texturepath' option in your config file.\nSet it to the path to a Minecraft Resource pack.\nAlternately, install the Minecraft client (which includes textures)\nAlso see <http://docs.overviewer.org/en/latest/running/#installing-the-textures>\n(Remember, this version of Overviewer requires a 1.15-compatible resource pack)\n(Also note that I won't automatically use snapshots; you'll have to use the texturepath option to use a snapshot jar)".format(filename))
|
raise TextureException("Could not find the textures while searching for '{0}'. Try specifying the 'texturepath' option in your config file.\nSet it to the path to a Minecraft Resource pack.\nAlternately, install the Minecraft client (which includes textures)\nAlso see <http://docs.overviewer.org/en/latest/running/#installing-the-textures>\n(Remember, this version of Overviewer requires a 1.16-compatible resource pack)\n(Also note that I won't automatically use snapshots; you'll have to use the texturepath option to use a snapshot jar)".format(filename))
|
||||||
|
|
||||||
def load_image_texture(self, filename):
|
def load_image_texture(self, filename):
|
||||||
# Textures may be animated or in a different resolution than 16x16.
|
# Textures may be animated or in a different resolution than 16x16.
|
||||||
@@ -1077,7 +1079,8 @@ block(blockid=15, top_image="assets/minecraft/textures/block/iron_ore.png")
|
|||||||
# coal ore
|
# coal ore
|
||||||
block(blockid=16, top_image="assets/minecraft/textures/block/coal_ore.png")
|
block(blockid=16, top_image="assets/minecraft/textures/block/coal_ore.png")
|
||||||
|
|
||||||
@material(blockid=[17,162,11306,11307,11308,11309,11310,11311], data=list(range(12)), solid=True)
|
@material(blockid=[17, 162, 11306, 11307, 11308, 11309, 11310, 11311, 1008, 1009],
|
||||||
|
data=list(range(12)), solid=True)
|
||||||
def wood(self, blockid, data):
|
def wood(self, blockid, data):
|
||||||
# extract orientation and wood type frorm data bits
|
# extract orientation and wood type frorm data bits
|
||||||
wood_type = data & 3
|
wood_type = data & 3
|
||||||
@@ -1089,99 +1092,67 @@ def wood(self, blockid, data):
|
|||||||
if wood_orientation == 4: wood_orientation = 8
|
if wood_orientation == 4: wood_orientation = 8
|
||||||
elif wood_orientation == 8: wood_orientation = 4
|
elif wood_orientation == 8: wood_orientation = 4
|
||||||
|
|
||||||
# choose textures
|
# dictionary of blockid : { wood_type : (top, side) }
|
||||||
if blockid == 17: # regular wood:
|
wood_tex = {
|
||||||
if wood_type == 0: # normal
|
17: {
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/oak_log_top.png")
|
0: ("oak_log_top.png", "oak_log.png"),
|
||||||
side = self.load_image_texture("assets/minecraft/textures/block/oak_log.png")
|
1: ("spruce_log_top.png", "spruce_log.png"),
|
||||||
if wood_type == 1: # spruce
|
2: ("birch_log_top.png", "birch_log.png"),
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/spruce_log_top.png")
|
3: ("jungle_log_top.png", "jungle_log.png"),
|
||||||
side = self.load_image_texture("assets/minecraft/textures/block/spruce_log.png")
|
},
|
||||||
if wood_type == 2: # birch
|
162: {
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/birch_log_top.png")
|
0: ("acacia_log_top.png", "acacia_log.png"),
|
||||||
side = self.load_image_texture("assets/minecraft/textures/block/birch_log.png")
|
1: ("dark_oak_log_top.png", "dark_oak_log.png"),
|
||||||
if wood_type == 3: # jungle wood
|
},
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/jungle_log_top.png")
|
11306: {
|
||||||
side = self.load_image_texture("assets/minecraft/textures/block/jungle_log.png")
|
0: ("stripped_oak_log_top.png", "stripped_oak_log.png"),
|
||||||
elif blockid == 162: # acacia/dark wood:
|
1: ("stripped_spruce_log_top.png", "stripped_spruce_log.png"),
|
||||||
if wood_type == 0: # acacia
|
2: ("stripped_birch_log_top.png", "stripped_birch_log.png"),
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/acacia_log_top.png")
|
3: ("stripped_jungle_log_top.png", "stripped_jungle_log.png"),
|
||||||
side = self.load_image_texture("assets/minecraft/textures/block/acacia_log.png")
|
},
|
||||||
elif wood_type == 1: # dark oak
|
11307: {
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/dark_oak_log_top.png")
|
0: ("stripped_acacia_log_top.png", "stripped_acacia_log.png"),
|
||||||
side = self.load_image_texture("assets/minecraft/textures/block/dark_oak_log.png")
|
1: ("stripped_dark_oak_log_top.png", "stripped_dark_oak_log.png"),
|
||||||
else:
|
},
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/acacia_log_top.png")
|
11308: {
|
||||||
side = self.load_image_texture("assets/minecraft/textures/block/acacia_log.png")
|
0: ("oak_log.png", None),
|
||||||
if blockid == 11306: # stripped regular wood:
|
1: ("spruce_log.png", None),
|
||||||
if wood_type == 0: # normal
|
2: ("birch_log.png", None),
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/stripped_oak_log_top.png")
|
3: ("jungle_log.png", None),
|
||||||
side = self.load_image_texture("assets/minecraft/textures/block/stripped_oak_log.png")
|
},
|
||||||
if wood_type == 1: # spruce
|
11309: {
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/stripped_spruce_log_top.png")
|
0: ("acacia_log.png", None),
|
||||||
side = self.load_image_texture("assets/minecraft/textures/block/stripped_spruce_log.png")
|
1: ("dark_oak_log.png", None),
|
||||||
if wood_type == 2: # birch
|
},
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/stripped_birch_log_top.png")
|
11310: {
|
||||||
side = self.load_image_texture("assets/minecraft/textures/block/stripped_birch_log.png")
|
0: ("stripped_oak_log.png", None),
|
||||||
if wood_type == 3: # jungle wood
|
1: ("stripped_spruce_log.png", None),
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/stripped_jungle_log_top.png")
|
2: ("stripped_birch_log.png", None),
|
||||||
side = self.load_image_texture("assets/minecraft/textures/block/stripped_jungle_log.png")
|
3: ("stripped_jungle_log.png", None),
|
||||||
elif blockid == 11307: # stripped acacia/dark wood:
|
},
|
||||||
if wood_type == 0: # acacia
|
11311: {
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/stripped_acacia_log_top.png")
|
0: ("stripped_acacia_log.png", None),
|
||||||
side = self.load_image_texture("assets/minecraft/textures/block/stripped_acacia_log.png")
|
1: ("stripped_dark_oak_log.png", None),
|
||||||
elif wood_type == 1: # dark oak
|
},
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/stripped_dark_oak_log_top.png")
|
1008: {
|
||||||
side = self.load_image_texture("assets/minecraft/textures/block/stripped_dark_oak_log.png")
|
0: ("warped_stem_top.png", "warped_stem.png"),
|
||||||
else:
|
1: ("warped_stem_top.png", "stripped_warped_stem.png"),
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/stripped_acacia_log_top.png")
|
2: ("crimson_stem_top.png", "crimson_stem.png"),
|
||||||
side = self.load_image_texture("assets/minecraft/textures/block/stripped_acacia_log.png")
|
3: ("crimson_stem_top.png", "stripped_crimson_stem.png"),
|
||||||
if blockid == 11308: # regular bark:
|
},
|
||||||
if wood_type == 0: # normal
|
1009: {
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/oak_log.png")
|
0: ("warped_stem.png", None),
|
||||||
side = top
|
1: ("stripped_warped_stem.png", None),
|
||||||
if wood_type == 1: # spruce
|
2: ("crimson_stem.png", None),
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/spruce_log.png")
|
3: ("stripped_crimson_stem.png", None),
|
||||||
side = top
|
}
|
||||||
if wood_type == 2: # birch
|
}
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/birch_log.png")
|
|
||||||
side = top
|
top_f, side_f = wood_tex[blockid].get(wood_type, wood_tex[blockid][0])
|
||||||
if wood_type == 3: # jungle wood
|
if not side_f:
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/jungle_log.png")
|
side_f = top_f
|
||||||
side = top
|
top = self.load_image_texture(BLOCKTEX + top_f)
|
||||||
elif blockid == 11309: # acacia/dark bark:
|
side = self.load_image_texture(BLOCKTEX + side_f)
|
||||||
if wood_type == 0: # acacia
|
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/acacia_log.png")
|
|
||||||
side = top
|
|
||||||
elif wood_type == 1: # dark oak
|
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/dark_oak_log.png")
|
|
||||||
side = top
|
|
||||||
else:
|
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/acacia_log.png")
|
|
||||||
side = top
|
|
||||||
if blockid == 11310: # stripped regular wood:
|
|
||||||
if wood_type == 0: # normal
|
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/stripped_oak_log.png")
|
|
||||||
side = top
|
|
||||||
if wood_type == 1: # spruce
|
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/stripped_spruce_log.png")
|
|
||||||
side = top
|
|
||||||
if wood_type == 2: # birch
|
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/stripped_birch_log.png")
|
|
||||||
side = top
|
|
||||||
if wood_type == 3: # jungle wood
|
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/stripped_jungle_log.png")
|
|
||||||
side = top
|
|
||||||
elif blockid == 11311: # stripped acacia/dark wood:
|
|
||||||
if wood_type == 0: # acacia
|
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/stripped_acacia_log.png")
|
|
||||||
side = top
|
|
||||||
elif wood_type == 1: # dark oak
|
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/stripped_dark_oak_log.png")
|
|
||||||
side = top
|
|
||||||
else:
|
|
||||||
top = self.load_image_texture("assets/minecraft/textures/block/stripped_acacia_log.png")
|
|
||||||
side = top
|
|
||||||
|
|
||||||
# choose orientation and paste textures
|
# choose orientation and paste textures
|
||||||
if wood_orientation == 0:
|
if wood_orientation == 0:
|
||||||
@@ -1688,6 +1659,15 @@ def flower(self, blockid, data):
|
|||||||
sprite(blockid=39, imagename="assets/minecraft/textures/block/brown_mushroom.png")
|
sprite(blockid=39, imagename="assets/minecraft/textures/block/brown_mushroom.png")
|
||||||
# red mushroom
|
# red mushroom
|
||||||
sprite(blockid=40, imagename="assets/minecraft/textures/block/red_mushroom.png")
|
sprite(blockid=40, imagename="assets/minecraft/textures/block/red_mushroom.png")
|
||||||
|
# warped fungus
|
||||||
|
sprite(blockid=1016, imagename="assets/minecraft/textures/block/warped_fungus.png")
|
||||||
|
# crimson fungus
|
||||||
|
sprite(blockid=1017, imagename="assets/minecraft/textures/block/crimson_fungus.png")
|
||||||
|
# warped roots
|
||||||
|
sprite(blockid=1018, imagename="assets/minecraft/textures/block/warped_roots.png")
|
||||||
|
# crimson roots
|
||||||
|
sprite(blockid=1019, imagename="assets/minecraft/textures/block/crimson_roots.png")
|
||||||
|
|
||||||
# block of gold
|
# block of gold
|
||||||
block(blockid=41, top_image="assets/minecraft/textures/block/gold_block.png")
|
block(blockid=41, top_image="assets/minecraft/textures/block/gold_block.png")
|
||||||
# block of iron
|
# block of iron
|
||||||
@@ -3666,6 +3646,8 @@ block(blockid=88, top_image="assets/minecraft/textures/block/soul_sand.png")
|
|||||||
|
|
||||||
# glowstone
|
# glowstone
|
||||||
block(blockid=89, top_image="assets/minecraft/textures/block/glowstone.png")
|
block(blockid=89, top_image="assets/minecraft/textures/block/glowstone.png")
|
||||||
|
# shroomlight
|
||||||
|
block(blockid=1011, top_image="assets/minecraft/textures/block/shroomlight.png")
|
||||||
|
|
||||||
# portal
|
# portal
|
||||||
@material(blockid=90, data=[1, 2, 4, 5, 8, 10], transparent=True)
|
@material(blockid=90, data=[1, 2, 4, 5, 8, 10], transparent=True)
|
||||||
@@ -4225,6 +4207,12 @@ def stem(self, blockid, data):
|
|||||||
return img
|
return img
|
||||||
|
|
||||||
|
|
||||||
|
# nether vines
|
||||||
|
billboard(blockid=1012, imagename="assets/minecraft/textures/block/twisting_vines.png")
|
||||||
|
billboard(blockid=1013, imagename="assets/minecraft/textures/block/twisting_vines_plant.png")
|
||||||
|
billboard(blockid=1014, imagename="assets/minecraft/textures/block/weeping_vines.png")
|
||||||
|
billboard(blockid=1015, imagename="assets/minecraft/textures/block/weeping_vines_plant.png")
|
||||||
|
|
||||||
# vines
|
# vines
|
||||||
@material(blockid=106, data=list(range(32)), transparent=True, solid=False, nospawn=True)
|
@material(blockid=106, data=list(range(32)), transparent=True, solid=False, nospawn=True)
|
||||||
def vines(self, blockid, data):
|
def vines(self, blockid, data):
|
||||||
@@ -4359,6 +4347,13 @@ def fence_gate(self, blockid, data):
|
|||||||
|
|
||||||
# mycelium
|
# mycelium
|
||||||
block(blockid=110, top_image="assets/minecraft/textures/block/mycelium_top.png", side_image="assets/minecraft/textures/block/mycelium_side.png")
|
block(blockid=110, top_image="assets/minecraft/textures/block/mycelium_top.png", side_image="assets/minecraft/textures/block/mycelium_side.png")
|
||||||
|
# warped_nylium & crimson_nylium
|
||||||
|
block(blockid=1006, top_image="assets/minecraft/textures/block/warped_nylium.png", side_image="assets/minecraft/textures/block/warped_nylium_side.png")
|
||||||
|
block(blockid=1007, top_image="assets/minecraft/textures/block/crimson_nylium.png", side_image="assets/minecraft/textures/block/crimson_nylium_side.png")
|
||||||
|
# soul soil
|
||||||
|
block(blockid=1020, top_image="assets/minecraft/textures/block/soul_soil.png")
|
||||||
|
# nether gold ore
|
||||||
|
block(blockid=1021, top_image="assets/minecraft/textures/block/nether_gold_ore.png")
|
||||||
|
|
||||||
# lilypad
|
# lilypad
|
||||||
# At the moment of writing this lilypads has no ancil data and their
|
# At the moment of writing this lilypads has no ancil data and their
|
||||||
@@ -4691,24 +4686,24 @@ def beacon(self, blockid, data):
|
|||||||
|
|
||||||
# cobblestone and mossy cobblestone walls, chorus plants, mossy stone brick walls
|
# cobblestone and mossy cobblestone walls, chorus plants, mossy stone brick walls
|
||||||
# one additional bit of data value added for mossy and cobblestone
|
# one additional bit of data value added for mossy and cobblestone
|
||||||
@material(blockid=[199]+list(range(21000,21013+1)), data=list(range(32)), transparent=True, nospawn=True)
|
@material(blockid=[199]+list(range(1792, 1805 + 1)), data=list(range(32)), transparent=True, nospawn=True)
|
||||||
def cobblestone_wall(self, blockid, data):
|
def cobblestone_wall(self, blockid, data):
|
||||||
walls_id_to_tex = {
|
walls_id_to_tex = {
|
||||||
199: "assets/minecraft/textures/block/chorus_plant.png", # chorus plants
|
199: "assets/minecraft/textures/block/chorus_plant.png", # chorus plants
|
||||||
21000: "assets/minecraft/textures/block/andesite.png",
|
1792: "assets/minecraft/textures/block/andesite.png",
|
||||||
21001: "assets/minecraft/textures/block/bricks.png",
|
1793: "assets/minecraft/textures/block/bricks.png",
|
||||||
21002: "assets/minecraft/textures/block/cobblestone.png",
|
1794: "assets/minecraft/textures/block/cobblestone.png",
|
||||||
21003: "assets/minecraft/textures/block/diorite.png",
|
1795: "assets/minecraft/textures/block/diorite.png",
|
||||||
21004: "assets/minecraft/textures/block/end_stone_bricks.png",
|
1796: "assets/minecraft/textures/block/end_stone_bricks.png",
|
||||||
21005: "assets/minecraft/textures/block/granite.png",
|
1797: "assets/minecraft/textures/block/granite.png",
|
||||||
21006: "assets/minecraft/textures/block/mossy_cobblestone.png",
|
1798: "assets/minecraft/textures/block/mossy_cobblestone.png",
|
||||||
21007: "assets/minecraft/textures/block/mossy_stone_bricks.png",
|
1799: "assets/minecraft/textures/block/mossy_stone_bricks.png",
|
||||||
21008: "assets/minecraft/textures/block/nether_bricks.png",
|
1800: "assets/minecraft/textures/block/nether_bricks.png",
|
||||||
21009: "assets/minecraft/textures/block/prismarine.png",
|
1801: "assets/minecraft/textures/block/prismarine.png",
|
||||||
21010: "assets/minecraft/textures/block/red_nether_bricks.png",
|
1802: "assets/minecraft/textures/block/red_nether_bricks.png",
|
||||||
21011: "assets/minecraft/textures/block/red_sandstone.png",
|
1803: "assets/minecraft/textures/block/red_sandstone.png",
|
||||||
21012: "assets/minecraft/textures/block/sandstone.png",
|
1804: "assets/minecraft/textures/block/sandstone.png",
|
||||||
21013: "assets/minecraft/textures/block/stone_bricks.png"
|
1805: "assets/minecraft/textures/block/stone_bricks.png"
|
||||||
}
|
}
|
||||||
t = self.load_image_texture(walls_id_to_tex[blockid]).copy()
|
t = self.load_image_texture(walls_id_to_tex[blockid]).copy()
|
||||||
|
|
||||||
@@ -5151,6 +5146,8 @@ block(blockid=213, top_image="assets/minecraft/textures/block/magma.png")
|
|||||||
|
|
||||||
# nether wart block
|
# nether wart block
|
||||||
block(blockid=214, top_image="assets/minecraft/textures/block/nether_wart_block.png")
|
block(blockid=214, top_image="assets/minecraft/textures/block/nether_wart_block.png")
|
||||||
|
# warped wart block
|
||||||
|
block(blockid=1010, top_image="assets/minecraft/textures/block/warped_wart_block.png")
|
||||||
|
|
||||||
# red nether brick
|
# red nether brick
|
||||||
block(blockid=215, top_image="assets/minecraft/textures/block/red_nether_bricks.png")
|
block(blockid=215, top_image="assets/minecraft/textures/block/red_nether_bricks.png")
|
||||||
@@ -5459,18 +5456,21 @@ def barrel(self, blockid, data):
|
|||||||
return self.build_full_block(t_side.rotate(90), None, None, t_top, t_side.rotate(270))
|
return self.build_full_block(t_side.rotate(90), None, None, t_top, t_side.rotate(270))
|
||||||
|
|
||||||
|
|
||||||
# Campfire
|
# Campfire (11506) and soul campfire (1003)
|
||||||
@material(blockid=11506, data=list(range(8)), solid=True, transparent=True, nospawn=True)
|
@material(blockid=[11506, 1003], data=list(range(8)), solid=True, transparent=True, nospawn=True)
|
||||||
def campfire(self, blockid, data):
|
def campfire(self, blockid, data):
|
||||||
# Do rotation, mask to not clobber lit data
|
# Do rotation, mask to not clobber lit data
|
||||||
data = data & 0b100 | ((self.rotation + (data & 0b11)) % 4)
|
data = data & 0b100 | ((self.rotation + (data & 0b11)) % 4)
|
||||||
|
block_name = "campfire" if blockid == 11506 else "soul_campfire"
|
||||||
|
|
||||||
# Load textures
|
# Load textures
|
||||||
# Fire & lit log textures contain multiple tiles, since both are
|
# Fire & lit log textures contain multiple tiles, since both are
|
||||||
# 16px wide rely on load_image_texture() to crop appropriately
|
# 16px wide rely on load_image_texture() to crop appropriately
|
||||||
fire_raw_t = self.load_image_texture("assets/minecraft/textures/block/campfire_fire.png")
|
fire_raw_t = self.load_image_texture("assets/minecraft/textures/block/" + block_name
|
||||||
|
+ "_fire.png")
|
||||||
log_raw_t = self.load_image_texture("assets/minecraft/textures/block/campfire_log.png")
|
log_raw_t = self.load_image_texture("assets/minecraft/textures/block/campfire_log.png")
|
||||||
log_lit_raw_t = self.load_image_texture("assets/minecraft/textures/block/campfire_log_lit.png")
|
log_lit_raw_t = self.load_image_texture("assets/minecraft/textures/block/" + block_name
|
||||||
|
+ "_log_lit.png")
|
||||||
|
|
||||||
def create_tile(img_src, coord_crop, coord_paste, rot):
|
def create_tile(img_src, coord_crop, coord_paste, rot):
|
||||||
# Takes an image, crops a region, optionally rotates the
|
# Takes an image, crops a region, optionally rotates the
|
||||||
@@ -5683,3 +5683,30 @@ def bell(self, blockid, data):
|
|||||||
alpha_over(img, post_front_t, (0, 0), post_front_t)
|
alpha_over(img, post_front_t, (0, 0), post_front_t)
|
||||||
|
|
||||||
return img
|
return img
|
||||||
|
|
||||||
|
|
||||||
|
# Ancient Debris
|
||||||
|
block(blockid=[1000], top_image="assets/minecraft/textures/block/ancient_debris_top.png",
|
||||||
|
side_image="assets/minecraft/textures/block/ancient_debris_side.png")
|
||||||
|
|
||||||
|
|
||||||
|
# Basalt
|
||||||
|
@material(blockid=[1001, 1002], data=list(range(3)), solid=True)
|
||||||
|
def basalt(self, blockid, data):
|
||||||
|
block_name = "polished_basalt" if blockid == 1002 else "basalt"
|
||||||
|
top = self.load_image_texture("assets/minecraft/textures/block/" + block_name + "_top.png")
|
||||||
|
side = self.load_image_texture("assets/minecraft/textures/block/" + block_name + "_side.png")
|
||||||
|
if data == 0:
|
||||||
|
return self.build_block(top, side)
|
||||||
|
elif data == 1: # east-west orientation
|
||||||
|
return self.build_full_block(side.rotate(90), None, None, top, side.rotate(90))
|
||||||
|
elif data == 2: # north-south orientation
|
||||||
|
return self.build_full_block(side, None, None, side.rotate(270), top)
|
||||||
|
|
||||||
|
|
||||||
|
# Blackstone block
|
||||||
|
block(blockid=[1004], top_image="assets/minecraft/textures/block/blackstone_top.png",
|
||||||
|
side_image="assets/minecraft/textures/block/blackstone.png")
|
||||||
|
|
||||||
|
# Netherite
|
||||||
|
block(blockid=[1005], top_image="assets/minecraft/textures/block/netherite_block.png")
|
||||||
|
|||||||
@@ -288,7 +288,10 @@ class RegionSet(object):
|
|||||||
|
|
||||||
for x, y, regionfile in self._iterate_regionfiles():
|
for x, y, regionfile in self._iterate_regionfiles():
|
||||||
# regionfile is a pathname
|
# regionfile is a pathname
|
||||||
|
if os.path.getsize(regionfile) != 0:
|
||||||
self.regionfiles[(x,y)] = (regionfile, os.path.getmtime(regionfile))
|
self.regionfiles[(x,y)] = (regionfile, os.path.getmtime(regionfile))
|
||||||
|
else:
|
||||||
|
logging.debug("Skipping zero-size region file {}".format(regionfile))
|
||||||
|
|
||||||
self.empty_chunk = [None,None]
|
self.empty_chunk = [None,None]
|
||||||
logging.debug("Done scanning regions")
|
logging.debug("Done scanning regions")
|
||||||
@@ -686,6 +689,39 @@ class RegionSet(object):
|
|||||||
'minecraft:tube_coral_fan': (8, 0),
|
'minecraft:tube_coral_fan': (8, 0),
|
||||||
'minecraft:tube_coral_wall_fan': (8, 0),
|
'minecraft:tube_coral_wall_fan': (8, 0),
|
||||||
|
|
||||||
|
# Some 1.16 stuff that I'll arbitrarily shove in here due to ID bloat
|
||||||
|
'minecraft:ancient_debris': (1000, 0),
|
||||||
|
'minecraft:basalt': (1001, 0),
|
||||||
|
'minecraft:polished_basalt': (1002, 0),
|
||||||
|
'minecraft:soul_campfire': (1003, 0),
|
||||||
|
'minecraft:blackstone': (1004, 0),
|
||||||
|
'minecraft:netherite_block': (1005, 0),
|
||||||
|
'minecraft:warped_nylium': (1006, 0),
|
||||||
|
'minecraft:crimson_nylium': (1007, 0),
|
||||||
|
# Nether logs aka stem
|
||||||
|
'minecraft:warped_stem': (1008, 0),
|
||||||
|
'minecraft:stripped_warped_stem': (1008, 1),
|
||||||
|
'minecraft:crimson_stem': (1008, 2),
|
||||||
|
'minecraft:stripped_crimson_stem': (1008, 3),
|
||||||
|
# hyphae
|
||||||
|
'minecraft:warped_hyphae': (1009, 0),
|
||||||
|
'minecraft:stripped_warped_hyphae': (1009, 1),
|
||||||
|
'minecraft:crimson_hyphae': (1009, 2),
|
||||||
|
'minecraft:stripped_crimson_hyphae': (1009, 3),
|
||||||
|
# nether biomes
|
||||||
|
'minecraft:warped_wart_block': (1010, 0),
|
||||||
|
'minecraft:shroomlight': (1011, 0),
|
||||||
|
'minecraft:twisting_vines': (1012, 0),
|
||||||
|
'minecraft:twisting_vines_plant': (1013, 0),
|
||||||
|
'minecraft:weeping_vines': (1014, 0),
|
||||||
|
'minecraft:weeping_vines_plant': (1015, 0),
|
||||||
|
'minecraft:warped_fungus': (1016, 0),
|
||||||
|
'minecraft:crimson_fungus': (1017, 0),
|
||||||
|
'minecraft:warped_roots': (1018, 0),
|
||||||
|
'minecraft:crimson_roots': (1019, 0),
|
||||||
|
'minecraft:soul_soil': (1020, 0),
|
||||||
|
'minecraft:nether_gold_ore': (1021, 0),
|
||||||
|
|
||||||
# New blocks
|
# New blocks
|
||||||
'minecraft:carved_pumpkin': (11300, 0),
|
'minecraft:carved_pumpkin': (11300, 0),
|
||||||
'minecraft:spruce_pressure_plate': (11301, 0),
|
'minecraft:spruce_pressure_plate': (11301, 0),
|
||||||
@@ -803,21 +839,20 @@ class RegionSet(object):
|
|||||||
'minecraft:campfire': (11506, 0),
|
'minecraft:campfire': (11506, 0),
|
||||||
'minecraft:bell': (11507, 0),
|
'minecraft:bell': (11507, 0),
|
||||||
# adding a gap in the numbering of walls to keep them all
|
# adding a gap in the numbering of walls to keep them all
|
||||||
# in one numbering block starting at 21000
|
'minecraft:andesite_wall': (1792, 0),
|
||||||
'minecraft:andesite_wall': (21000, 0),
|
'minecraft:brick_wall': (1793, 0),
|
||||||
'minecraft:brick_wall': (21001, 0),
|
'minecraft:cobblestone_wall': (1794, 0),
|
||||||
'minecraft:cobblestone_wall': (21002, 0),
|
'minecraft:diorite_wall': (1795, 0),
|
||||||
'minecraft:diorite_wall': (21003, 0),
|
'minecraft:end_stone_brick_wall': (1796, 0),
|
||||||
'minecraft:end_stone_brick_wall': (21004, 0),
|
'minecraft:granite_wall': (1797, 0),
|
||||||
'minecraft:granite_wall': (21005, 0),
|
'minecraft:mossy_cobblestone_wall': (1798, 0),
|
||||||
'minecraft:mossy_cobblestone_wall': (21006, 0),
|
'minecraft:mossy_stone_brick_wall': (1799, 0),
|
||||||
'minecraft:mossy_stone_brick_wall': (21007, 0),
|
'minecraft:nether_brick_wall': (1800, 0),
|
||||||
'minecraft:nether_brick_wall': (21008, 0),
|
'minecraft:prismarine_wall': (1801, 0),
|
||||||
'minecraft:prismarine_wall': (21009, 0),
|
'minecraft:red_nether_brick_wall': (1802, 0),
|
||||||
'minecraft:red_nether_brick_wall': (21010, 0),
|
'minecraft:red_sandstone_wall': (1803, 0),
|
||||||
'minecraft:red_sandstone_wall': (21011, 0),
|
'minecraft:sandstone_wall': (1804, 0),
|
||||||
'minecraft:sandstone_wall': (21012, 0),
|
'minecraft:stone_brick_wall': (1805, 0),
|
||||||
'minecraft:stone_brick_wall': (21013, 0),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
colors = [ 'white', 'orange', 'magenta', 'light_blue',
|
colors = [ 'white', 'orange', 'magenta', 'light_blue',
|
||||||
@@ -1017,7 +1052,8 @@ class RegionSet(object):
|
|||||||
(key == 'minecraft:piston_head' and p.get('type', 'normal') == 'sticky') or
|
(key == 'minecraft:piston_head' and p.get('type', 'normal') == 'sticky') or
|
||||||
(key == 'minecraft:observer' and p.get('powered', 'false') == 'true')):
|
(key == 'minecraft:observer' and p.get('powered', 'false') == 'true')):
|
||||||
data |= 0x08
|
data |= 0x08
|
||||||
elif key.endswith('_log') or key.endswith('_wood') or key == 'minecraft:bone_block':
|
elif (key.endswith('_log') or key.endswith('_wood') or
|
||||||
|
key == 'minecraft:bone_block' or key.endswith('_stem')):
|
||||||
axis = palette_entry['Properties']['axis']
|
axis = palette_entry['Properties']['axis']
|
||||||
if axis == 'x':
|
if axis == 'x':
|
||||||
data |= 4
|
data |= 4
|
||||||
@@ -1029,6 +1065,9 @@ class RegionSet(object):
|
|||||||
data = 3
|
data = 3
|
||||||
if axis == 'z':
|
if axis == 'z':
|
||||||
data = 4
|
data = 4
|
||||||
|
elif key == 'minecraft:basalt' or key == 'minecraft:polished_basalt':
|
||||||
|
axis = palette_entry['Properties']['axis']
|
||||||
|
data = {'y': 0, 'x': 1, 'z': 2}[axis]
|
||||||
elif key in ['minecraft:redstone_torch','minecraft:redstone_wall_torch','minecraft:wall_torch']:
|
elif key in ['minecraft:redstone_torch','minecraft:redstone_wall_torch','minecraft:wall_torch']:
|
||||||
if key.startswith('minecraft:redstone_') and palette_entry['Properties']['lit'] == 'true':
|
if key.startswith('minecraft:redstone_') and palette_entry['Properties']['lit'] == 'true':
|
||||||
block += 1
|
block += 1
|
||||||
@@ -1141,7 +1180,7 @@ class RegionSet(object):
|
|||||||
# A moisture level of 7 has a different texture from other farmland
|
# A moisture level of 7 has a different texture from other farmland
|
||||||
data = 1 if palette_entry['Properties'].get('moisture', '0') == '7' else 0
|
data = 1 if palette_entry['Properties'].get('moisture', '0') == '7' else 0
|
||||||
elif key in ['minecraft:grindstone', 'minecraft:lectern', 'minecraft:campfire',
|
elif key in ['minecraft:grindstone', 'minecraft:lectern', 'minecraft:campfire',
|
||||||
'minecraft:bell']:
|
'minecraft:bell', 'minecraft:soul_campfire']:
|
||||||
p = palette_entry['Properties']
|
p = palette_entry['Properties']
|
||||||
data = {'south': 0, 'west': 1, 'north': 2, 'east': 3}[p['facing']]
|
data = {'south': 0, 'west': 1, 'north': 2, 'east': 3}[p['facing']]
|
||||||
if key == 'minecraft:grindstone':
|
if key == 'minecraft:grindstone':
|
||||||
@@ -1149,7 +1188,7 @@ class RegionSet(object):
|
|||||||
elif key == 'minecraft:lectern':
|
elif key == 'minecraft:lectern':
|
||||||
if p['has_book'] == 'true':
|
if p['has_book'] == 'true':
|
||||||
data |= 4
|
data |= 4
|
||||||
elif key == 'minecraft:campfire':
|
elif key == 'minecraft:campfire' or key == 'minecraft:soul_campfire':
|
||||||
if p['lit'] == 'true':
|
if p['lit'] == 'true':
|
||||||
data |= 4
|
data |= 4
|
||||||
elif key == 'minecraft:bell':
|
elif key == 'minecraft:bell':
|
||||||
|
|||||||
Reference in New Issue
Block a user