Support 1.18 worlds, add fabric 1.18 support, start adding forge 1.17.1

This commit is contained in:
Blue (Lukas Rieger) 2021-11-20 12:31:18 +01:00
parent f52d463458
commit ae00af5860
No known key found for this signature in database
GPG Key ID: 904C4995F9E1F800
169 changed files with 4166 additions and 90 deletions

View File

@ -34,13 +34,27 @@ license {
}
//resource Extensions
String[] resourceIds = [
"1_12", "1_13", "1_15", "1_16", "1_18"
];
task zipResourceExtensions {
dependsOn 'zipResourceExtensions1_12'
dependsOn 'zipResourceExtensions1_13'
dependsOn 'zipResourceExtensions1_15'
dependsOn 'zipResourceExtensions1_16'
for (String id : resourceIds) {
dependsOn "zipResourceExtensions$id"
}
}
for (String id : resourceIds) zipResourcesTask(id)
void zipResourcesTask(String resourceId) {
task ("zipResourceExtensions$resourceId", type: Zip) {
from fileTree("src/main/resourceExtensions/mc$resourceId")
archiveName 'resourceExtensions.zip'
destinationDir(file("src/main/resources/de/bluecolored/bluemap/mc$resourceId/"))
outputs.upToDateWhen{ false }
}
}
/*
task zipResourceExtensions1_12(type: Zip) {
from fileTree('src/main/resourceExtensions/mc1_12')
archiveName 'resourceExtensions.zip'
@ -68,6 +82,7 @@ task zipResourceExtensions1_16(type: Zip) {
destinationDir(file('src/main/resources/de/bluecolored/bluemap/mc1_16/'))
outputs.upToDateWhen { false }
}
*/
//always update the zip before build
processResources.dependsOn(zipResourceExtensions)

View File

@ -148,7 +148,8 @@ public class MinecraftVersion implements Comparable<MinecraftVersion> {
MC_1_15 (new MinecraftVersion(1, 15), "mc1_15", "https://launcher.mojang.com/v1/objects/e3f78cd16f9eb9a52307ed96ebec64241cc5b32d/client.jar"),
MC_1_16 (new MinecraftVersion(1, 16), "mc1_16", "https://launcher.mojang.com/v1/objects/228fdf45541c4c2fe8aec4f20e880cb8fcd46621/client.jar"),
MC_1_16_2 (new MinecraftVersion(1, 16, 2), "mc1_16", "https://launcher.mojang.com/v1/objects/653e97a2d1d76f87653f02242d243cdee48a5144/client.jar"),
MC_1_17 (new MinecraftVersion(1, 17), "mc1_16", "https://launcher.mojang.com/v1/objects/1cf89c77ed5e72401b869f66410934804f3d6f52/client.jar");
MC_1_17 (new MinecraftVersion(1, 17), "mc1_16", "https://launcher.mojang.com/v1/objects/1cf89c77ed5e72401b869f66410934804f3d6f52/client.jar"),
MC_1_18 (new MinecraftVersion(1, 18), "mc1_18", "https://launcher.mojang.com/v1/objects/020aa79e63a7aab5d6f30e5ec7a6c08baee6b64c/client.jar");
private final MinecraftVersion version;
private final String resourcePrefix;

View File

@ -61,6 +61,8 @@ public class ChunkAnvil113 extends MCAChunk {
Section section = new Section(sectionTag);
if (section.getSectionY() >= 0 && section.getSectionY() < sections.length) sections[section.getSectionY()] = section;
}
} else {
sections = new Section[0];
}
Tag<?> tag = levelData.get("Biomes"); //tag can be byte-array or int-array
@ -116,14 +118,14 @@ public class ChunkAnvil113 extends MCAChunk {
}
@Override
public int getBiome(int x, int y, int z) {
public String getBiome(int x, int y, int z) {
x = x & 0xF; // Math.floorMod(pos.getX(), 16)
z = z & 0xF;
int biomeIntIndex = z * 16 + x;
if (biomeIntIndex >= this.biomes.length) return Biome.DEFAULT.getNumeralId();
if (biomeIntIndex >= this.biomes.length) return Biome.DEFAULT.getFullId();
return biomes[biomeIntIndex];
return LegacyBiomes.idFor(biomes[biomeIntIndex]);
}
private class Section {

View File

@ -61,6 +61,8 @@ public class ChunkAnvil115 extends MCAChunk {
Section section = new Section(sectionTag);
if (section.getSectionY() >= 0 && section.getSectionY() < sections.length) sections[section.getSectionY()] = section;
}
} else {
sections = new Section[0];
}
Tag<?> tag = levelData.get("Biomes"); //tag can be byte-array or int-array
@ -116,16 +118,16 @@ public class ChunkAnvil115 extends MCAChunk {
}
@Override
public int getBiome(int x, int y, int z) {
public String getBiome(int x, int y, int z) {
x = (x & 0xF) / 4; // Math.floorMod(pos.getX(), 16)
z = (z & 0xF) / 4;
y = y / 4;
int biomeIntIndex = y * 16 + z * 4 + x;
if (biomeIntIndex < 0) return Biome.DEFAULT.getNumeralId();
if (biomeIntIndex >= this.biomes.length) return Biome.DEFAULT.getNumeralId();
if (biomeIntIndex < 0) return Biome.DEFAULT.getFullId();
if (biomeIntIndex >= this.biomes.length) return Biome.DEFAULT.getFullId();
return biomes[biomeIntIndex];
return LegacyBiomes.idFor(biomes[biomeIntIndex]);
}
private static class Section {

View File

@ -82,6 +82,8 @@ public class ChunkAnvil116 extends MCAChunk {
for (Section section : sectionList) {
sections[section.sectionY - sectionMin] = section;
}
} else {
sections = new Section[0];
}
Tag<?> tag = levelData.get("Biomes"); //tag can be byte-array or int-array
@ -130,8 +132,8 @@ public class ChunkAnvil116 extends MCAChunk {
}
@Override
public int getBiome(int x, int y, int z) {
if (biomes.length < 16) return Biome.DEFAULT.getNumeralId();
public String getBiome(int x, int y, int z) {
if (biomes.length < 16) return Biome.DEFAULT.getFullId();
x = (x & 0xF) / 4; // Math.floorMod(pos.getX(), 16)
z = (z & 0xF) / 4;
@ -142,7 +144,7 @@ public class ChunkAnvil116 extends MCAChunk {
if (biomeIntIndex >= biomes.length) biomeIntIndex -= (((biomeIntIndex - biomes.length) >> 4) + 1) * 16;
if (biomeIntIndex < 0) biomeIntIndex -= (biomeIntIndex >> 4) * 16;
return biomes[biomeIntIndex];
return LegacyBiomes.idFor(biomes[biomeIntIndex]);
}
@Override

View File

@ -0,0 +1,281 @@
/*
* This file is part of BlueMap, licensed under the MIT License (MIT).
*
* Copyright (c) Blue (Lukas Rieger) <https://bluecolored.de>
* Copyright (c) contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package de.bluecolored.bluemap.core.mca;
import de.bluecolored.bluemap.core.logger.Logger;
import de.bluecolored.bluemap.core.world.Biome;
import de.bluecolored.bluemap.core.world.BlockState;
import de.bluecolored.bluemap.core.world.LightData;
import net.querz.nbt.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
@SuppressWarnings("FieldMayBeFinal")
public class ChunkAnvil118 extends MCAChunk {
private static final String AIR_ID = "minecraft:air";
private boolean isGenerated;
private boolean hasLight;
private int sectionMin, sectionMax;
private Section[] sections;
@SuppressWarnings("unchecked")
public ChunkAnvil118(MCAWorld world, CompoundTag chunkTag) {
super(world, chunkTag);
String status = chunkTag.getString("Status");
this.isGenerated = status.equals("full");
this.hasLight = isGenerated;
if (!isGenerated && getWorld().isIgnoreMissingLightData()) {
isGenerated = !status.equals("empty");
}
if (chunkTag.containsKey("sections")) {
this.sectionMin = Integer.MAX_VALUE;
this.sectionMax = Integer.MIN_VALUE;
ListTag<CompoundTag> sectionsTag = (ListTag<CompoundTag>) chunkTag.getListTag("sections");
ArrayList<Section> sectionList = new ArrayList<>(sectionsTag.size());
for (CompoundTag sectionTag : sectionsTag) {
// skip empty sections
CompoundTag blockStatesTag = sectionTag.getCompoundTag("block_states");
if (blockStatesTag == null) continue;
ListTag<CompoundTag> paletteTag = (ListTag<CompoundTag>) blockStatesTag.getListTag("palette");
if (paletteTag == null) continue;
if (paletteTag.size() == 0) continue;
if (paletteTag.size() == 1 && AIR_ID.equals(paletteTag.get(0).getString("Name"))) continue;
Section section = new Section(sectionTag);
int y = section.getSectionY();
if (sectionMin > y) sectionMin = y;
if (sectionMax < y) sectionMax = y;
sectionList.add(section);
}
sections = new Section[1 + sectionMax - sectionMin];
for (Section section : sectionList) {
sections[section.sectionY - sectionMin] = section;
}
} else {
sections = new Section[0];
}
}
@Override
public boolean isGenerated() {
return isGenerated;
}
@Override
public BlockState getBlockState(int x, int y, int z) {
int sectionY = y >> 4;
Section section = getSection(sectionY);
if (section == null) return BlockState.AIR;
return section.getBlockState(x, y, z);
}
@Override
public LightData getLightData(int x, int y, int z, LightData target) {
if (!hasLight) return target.set(getWorld().getSkyLight(), 0);
int sectionY = y >> 4;
Section section = getSection(sectionY);
if (section == null) return (sectionY < sectionMin) ? target.set(0, 0) : target.set(getWorld().getSkyLight(), 0);
return section.getLightData(x, y, z, target);
}
@Override
public String getBiome(int x, int y, int z) {
int sectionY = y >> 4;
Section section = getSection(sectionY);
if (section == null) return Biome.DEFAULT.getFullId();
return section.getBiome(x, y, z);
}
@Override
public int getMinY(int x, int z) {
return sectionMin * 16;
}
@Override
public int getMaxY(int x, int z) {
return sectionMax * 16 + 15;
}
private Section getSection(int y) {
y -= sectionMin;
if (y < 0 || y >= this.sections.length) return null;
return this.sections[y];
}
private static class Section {
private static final long[] EMPTY_LONG_ARRAY = new long[0];
private static final BlockState[] EMPTY_BLOCK_STATE_ARRAY = new BlockState[0];
private static final String[] EMPTY_STRING_ARRAY = new String[0];
private int sectionY;
private byte[] blockLight;
private byte[] skyLight;
private long[] blocks = EMPTY_LONG_ARRAY;
private long[] biomes = EMPTY_LONG_ARRAY;
private BlockState[] blockPalette = EMPTY_BLOCK_STATE_ARRAY;
private String[] biomePalette = EMPTY_STRING_ARRAY;
private int bitsPerBlock, bitsPerBiome;
@SuppressWarnings("unchecked")
public Section(CompoundTag sectionData) {
this.sectionY = sectionData.get("Y", NumberTag.class).asInt();
this.blockLight = sectionData.getByteArray("BlockLight");
this.skyLight = sectionData.getByteArray("SkyLight");
// blocks
CompoundTag blockStatesTag = sectionData.getCompoundTag("block_states");
if (blockStatesTag != null) {
// block data
this.blocks = blockStatesTag.getLongArray("data");
// block palette
ListTag<CompoundTag> paletteTag = (ListTag<CompoundTag>) blockStatesTag.getListTag("palette");
if (paletteTag != null) {
this.blockPalette = new BlockState[paletteTag.size()];
for (int i = 0; i < this.blockPalette.length; i++) {
blockPalette[i] = readBlockStatePaletteEntry(paletteTag.get(i));
}
}
}
// biomes
CompoundTag biomesTag = sectionData.getCompoundTag("biomes");
if (biomesTag != null) {
// biomes data
this.biomes = biomesTag.getLongArray("data");
// biomes palette
ListTag<StringTag> paletteTag = (ListTag<StringTag>) biomesTag.getListTag("palette");
if (paletteTag != null) {
this.biomePalette = new String[paletteTag.size()];
for (int i = 0; i < this.biomePalette.length; i++) {
biomePalette[i] = paletteTag.get(i).getValue();
}
}
}
if (blocks.length < 256 && blocks.length > 0) blocks = Arrays.copyOf(blocks, 256);
if (blockLight.length < 2048 && blockLight.length > 0) blockLight = Arrays.copyOf(blockLight, 2048);
if (skyLight.length < 2048 && skyLight.length > 0) skyLight = Arrays.copyOf(skyLight, 2048);
this.bitsPerBlock = this.blocks.length >> 6; // available longs * 64 (bits per long) / 4096 (blocks per section) (floored result)
this.bitsPerBiome = Integer.SIZE - Integer.numberOfLeadingZeros(this.biomePalette.length - 1);
}
private BlockState readBlockStatePaletteEntry(CompoundTag paletteEntry) {
String id = paletteEntry.getString("Name"); //shortcut to save time and memory
if (AIR_ID.equals(id)) return BlockState.AIR;
Map<String, String> properties = new HashMap<>();
if (paletteEntry.containsKey("Properties")) {
CompoundTag propertiesTag = paletteEntry.getCompoundTag("Properties");
for (Entry<String, Tag<?>> property : propertiesTag) {
properties.put(property.getKey().toLowerCase(), ((StringTag) property.getValue()).getValue().toLowerCase());
}
}
return new BlockState(id, properties);
}
public int getSectionY() {
return sectionY;
}
public BlockState getBlockState(int x, int y, int z) {
if (blocks.length == 0) return BlockState.AIR;
x &= 0xF; y &= 0xF; z &= 0xF; // Math.floorMod(pos.getX(), 16)
int blockIndex = y * 256 + z * 16 + x;
long value = MCAMath.getValueFromLongArray(blocks, blockIndex, bitsPerBlock);
if (value >= blockPalette.length) {
Logger.global.noFloodWarning("palettewarning", "Got block-palette value " + value + " but palette has size of " + blockPalette.length + "! (Future occasions of this error will not be logged)");
return BlockState.MISSING;
}
return blockPalette[(int) value];
}
public LightData getLightData(int x, int y, int z, LightData target) {
if (blockLight.length == 0 && skyLight.length == 0) return target.set(0, 0);
x &= 0xF; y &= 0xF; z &= 0xF; // Math.floorMod(pos.getX(), 16)
int blockByteIndex = y * 256 + z * 16 + x;
int blockHalfByteIndex = blockByteIndex >> 1; // blockByteIndex / 2
boolean largeHalf = (blockByteIndex & 0x1) != 0; // (blockByteIndex % 2) == 0
return target.set(
this.skyLight.length > 0 ? MCAMath.getByteHalf(this.skyLight[blockHalfByteIndex], largeHalf) : 0,
this.blockLight.length > 0 ? MCAMath.getByteHalf(this.blockLight[blockHalfByteIndex], largeHalf) : 0
);
}
public String getBiome(int x, int y, int z) {
if (biomePalette.length == 0) return Biome.DEFAULT.getId();
if (biomes.length == 0) return biomePalette[0];
x = (x & 0xF) / 4; // Math.floorMod(pos.getX(), 16) / 4
z = (z & 0xF) / 4;
y = (y & 0xF) / 4;
int biomeIndex = y * 16 + z * 4 + x;
// this.biomes.length == bits per biome -- because -> available longs * 64 (bits per long) / 64 (biomes per section, 4*4*4)
long value = MCAMath.getValueFromLongArray(biomes, biomeIndex, bitsPerBiome);
if (value >= biomePalette.length) {
Logger.global.noFloodWarning("biomepalettewarning", "Got biome-palette value " + value + " but palette has size of " + biomePalette.length + "! (Future occasions of this error will not be logged)");
return Biome.DEFAULT.getId();
}
return biomePalette[(int) value];
}
}
}

View File

@ -48,8 +48,8 @@ public class EmptyChunk extends MCAChunk {
}
@Override
public int getBiome(int x, int y, int z) {
return Biome.DEFAULT.getNumeralId();
public String getBiome(int x, int y, int z) {
return Biome.DEFAULT.getFullId();
}
}

View File

@ -0,0 +1,116 @@
/*
* This file is part of BlueMap, licensed under the MIT License (MIT).
*
* Copyright (c) Blue (Lukas Rieger) <https://bluecolored.de>
* Copyright (c) contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package de.bluecolored.bluemap.core.mca;
import java.util.Arrays;
public class LegacyBiomes {
private static final String[] BIOME_IDS = new String[170];
static {
Arrays.fill(BIOME_IDS, "minecraft:ocean");
BIOME_IDS[0] = "minecraft:ocean";
BIOME_IDS[1] = "minecraft:plains";
BIOME_IDS[2] = "minecraft:desert";
BIOME_IDS[3] = "minecraft:mountains";
BIOME_IDS[4] = "minecraft:forest";
BIOME_IDS[5] = "minecraft:taiga";
BIOME_IDS[6] = "minecraft:swamp";
BIOME_IDS[7] = "minecraft:river";
BIOME_IDS[8] = "minecraft:nether";
BIOME_IDS[9] = "minecraft:the_end";
BIOME_IDS[10] = "minecraft:frozen_ocean";
BIOME_IDS[11] = "minecraft:frozen_river";
BIOME_IDS[12] = "minecraft:snowy_tundra";
BIOME_IDS[13] = "minecraft:snowy_mountains";
BIOME_IDS[14] = "minecraft:mushroom_fields";
BIOME_IDS[15] = "minecraft:mushroom_field_shore";
BIOME_IDS[16] = "minecraft:beach";
BIOME_IDS[17] = "minecraft:desert_hills";
BIOME_IDS[18] = "minecraft:wooded_hills";
BIOME_IDS[19] = "minecraft:taiga_hills";
BIOME_IDS[20] = "minecraft:mountain_edge";
BIOME_IDS[21] = "minecraft:jungle";
BIOME_IDS[22] = "minecraft:jungle_hills";
BIOME_IDS[23] = "minecraft:jungle_edge";
BIOME_IDS[24] = "minecraft:deep_ocean";
BIOME_IDS[25] = "minecraft:stone_shore";
BIOME_IDS[26] = "minecraft:snowy_beach";
BIOME_IDS[27] = "minecraft:birch_forest";
BIOME_IDS[28] = "minecraft:birch_forest_hills";
BIOME_IDS[29] = "minecraft:dark_forest";
BIOME_IDS[30] = "minecraft:snowy_taiga";
BIOME_IDS[31] = "minecraft:snowy_taiga_hills";
BIOME_IDS[32] = "minecraft:giant_tree_taiga";
BIOME_IDS[33] = "minecraft:giant_tree_taiga_hills";
BIOME_IDS[34] = "minecraft:wooded_mountains";
BIOME_IDS[35] = "minecraft:savanna";
BIOME_IDS[36] = "minecraft:savanna_plateau";
BIOME_IDS[37] = "minecraft:badlands";
BIOME_IDS[38] = "minecraft:wooded_badlands_plateau";
BIOME_IDS[39] = "minecraft:badlands_plateau";
BIOME_IDS[40] = "minecraft:small_end_islands";
BIOME_IDS[41] = "minecraft:end_midlands";
BIOME_IDS[42] = "minecraft:end_highlands";
BIOME_IDS[43] = "minecraft:end_barrens";
BIOME_IDS[44] = "minecraft:warm_ocean";
BIOME_IDS[45] = "minecraft:lukewarm_ocean";
BIOME_IDS[46] = "minecraft:cold_ocean";
BIOME_IDS[47] = "minecraft:deep_warm_ocean";
BIOME_IDS[48] = "minecraft:deep_lukewarm_ocean";
BIOME_IDS[49] = "minecraft:deep_cold_ocean";
BIOME_IDS[50] = "minecraft:deep_frozen_ocean";
BIOME_IDS[127] = "minecraft:the_void";
BIOME_IDS[129] = "minecraft:sunflower_plains";
BIOME_IDS[130] = "minecraft:desert_lakes";
BIOME_IDS[131] = "minecraft:gravelly_mountains";
BIOME_IDS[132] = "minecraft:flower_forest";
BIOME_IDS[133] = "minecraft:taiga_mountains";
BIOME_IDS[134] = "minecraft:swamp_hills";
BIOME_IDS[140] = "minecraft:ice_spikes";
BIOME_IDS[149] = "minecraft:modified_jungle";
BIOME_IDS[151] = "minecraft:modified_jungle_edge";
BIOME_IDS[155] = "minecraft:tall_birch_forest";
BIOME_IDS[156] = "minecraft:tall_birch_hills";
BIOME_IDS[157] = "minecraft:dark_forest_hills";
BIOME_IDS[158] = "minecraft:snowy_taiga_mountains";
BIOME_IDS[160] = "minecraft:giant_spruce_taiga";
BIOME_IDS[161] = "minecraft:giant_spruce_taiga_hills";
BIOME_IDS[162] = "minecraft:modified_gravelly_mountains";
BIOME_IDS[163] = "minecraft:shattered_savanna";
BIOME_IDS[164] = "minecraft:shattered_savanna_plateau";
BIOME_IDS[165] = "minecraft:eroded_badlands";
BIOME_IDS[166] = "minecraft:modified_wooded_badlands_plateau";
BIOME_IDS[167] = "minecraft:modified_badlands_plateau";
BIOME_IDS[168] = "minecraft:bamboo_jungle";
BIOME_IDS[169] = "minecraft:bamboo_jungle_hills";
}
public static String idFor(int legacyId) {
if (legacyId < 0 || legacyId > BIOME_IDS.length) legacyId = 0;
return BIOME_IDS[legacyId];
}
}

View File

@ -66,7 +66,7 @@ public abstract class MCAChunk implements Chunk {
public abstract LightData getLightData(int x, int y, int z, LightData target);
@Override
public abstract int getBiome(int x, int y, int z);
public abstract String getBiome(int x, int y, int z);
@Override
public int getMaxY(int x, int z) {
@ -87,7 +87,8 @@ public abstract class MCAChunk implements Chunk {
if (version < 2200) return new ChunkAnvil113(world, chunkTag);
if (version < 2500) return new ChunkAnvil115(world, chunkTag);
return new ChunkAnvil116(world, chunkTag);
if (version < 2844) return new ChunkAnvil116(world, chunkTag);
return new ChunkAnvil118(world, chunkTag);
}
public static MCAChunk empty() {

View File

@ -24,50 +24,33 @@
*/
package de.bluecolored.bluemap.core.resourcepack;
import de.bluecolored.bluemap.core.debug.DebugDump;
import de.bluecolored.bluemap.core.world.Biome;
import org.spongepowered.configurate.ConfigurationNode;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
@DebugDump
public class BiomeConfig {
private Biome[] biomes;
private final Map<String, Biome> biomes;
public BiomeConfig() {
biomes = new Biome[10];
biomes = new HashMap<>();
}
public void load(ConfigurationNode node) {
for (Entry<Object, ? extends ConfigurationNode> e : node.childrenMap().entrySet()){
String id = e.getKey().toString();
Biome biome = Biome.create(id, e.getValue());
int numeralId = biome.getNumeralId();
ensureAvailability(numeralId);
biomes[numeralId] = biome;
biomes.put(id, biome);
}
}
public Biome getBiome(int id) {
if (id > 0 && id < biomes.length) {
Biome biome = biomes[id];
return biome != null ? biome : Biome.DEFAULT;
}
return Biome.DEFAULT;
}
private void ensureAvailability(int id) {
if (id >= biomes.length) {
int newSize = biomes.length;
do {
newSize = (int) (newSize * 1.5) + 1;
} while (id >= newSize);
Biome[] newArray = new Biome[newSize];
System.arraycopy(biomes, 0, newArray, 0, biomes.length);
biomes = newArray;
}
public Biome getBiome(String id) {
return biomes.getOrDefault(id, Biome.DEFAULT);
}
}

View File

@ -26,6 +26,7 @@ package de.bluecolored.bluemap.core.resourcepack;
import com.flowpowered.math.GenericMath;
import de.bluecolored.bluemap.core.debug.DebugDump;
import de.bluecolored.bluemap.core.logger.Logger;
import de.bluecolored.bluemap.core.util.ConfigUtils;
import de.bluecolored.bluemap.core.util.math.Color;
import de.bluecolored.bluemap.core.world.Biome;
@ -207,8 +208,10 @@ public class BlockColorCalculatorFactory {
}
private void getColorFromMap(Biome biome, int[] colorMap, int defaultColor, Color target) {
double temperature = GenericMath.clamp(biome.getTemp(), 0, 1);
double humidity = GenericMath.clamp(biome.getHumidity(), 0, 1) * temperature;
double temperature = GenericMath.clamp(biome.getTemp(), 0.0, 1.0);
double humidity = GenericMath.clamp(biome.getHumidity(), 0.0, 1.0);
humidity *= temperature;
int x = (int) ((1.0 - temperature) * 255.0);
int y = (int) ((1.0 - humidity) * 255.0);

View File

@ -24,6 +24,7 @@
*/
package de.bluecolored.bluemap.core.resourcepack;
import de.bluecolored.bluemap.core.debug.DebugDump;
import de.bluecolored.bluemap.core.logger.Logger;
import de.bluecolored.bluemap.core.world.BlockProperties;
import de.bluecolored.bluemap.core.world.BlockState;
@ -37,6 +38,7 @@ import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;
@DebugDump
public class BlockPropertiesConfig {
private final Map<String, List<BlockStateMapping<BlockProperties>>> mappings;

View File

@ -24,10 +24,12 @@
*/
package de.bluecolored.bluemap.core.resourcepack;
import de.bluecolored.bluemap.core.debug.DebugDump;
import de.bluecolored.bluemap.core.world.BlockState;
import java.util.Map.Entry;
@DebugDump
class BlockStateMapping<T> {
private BlockState blockState;
private T mapping;

View File

@ -252,7 +252,7 @@ public class ResourcePack {
return props.build();
}
public Biome getBiome(int id) {
public Biome getBiome(String id) {
return biomeConfig.getBiome(id);
}

View File

@ -24,8 +24,10 @@
*/
package de.bluecolored.bluemap.core.resourcepack.texture;
import de.bluecolored.bluemap.core.debug.DebugDump;
import de.bluecolored.bluemap.core.util.math.Color;
@DebugDump
public class Texture {
private final int id;

View File

@ -25,6 +25,7 @@
package de.bluecolored.bluemap.core.resourcepack.texture;
import com.google.gson.*;
import de.bluecolored.bluemap.core.debug.DebugDump;
import de.bluecolored.bluemap.core.logger.Logger;
import de.bluecolored.bluemap.core.resourcepack.ParseResourceException;
import de.bluecolored.bluemap.core.resourcepack.fileaccess.FileAccess;
@ -40,6 +41,7 @@ import java.util.*;
* A {@link TextureGallery} is managing {@link Texture}s and their id's and path's.<br>
* I can also load and generate the texture.json file, or load new {@link Texture}s from a {@link FileAccess}.
*/
@DebugDump
public class TextureGallery {
private static final String EMPTY_BASE64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAEUlEQVR42mNkIAAYRxWMJAUAE5gAEdz4t9QAAAAASUVORK5CYII=";

View File

@ -24,6 +24,9 @@
*/
package de.bluecolored.bluemap.core.util.math;
import de.bluecolored.bluemap.core.debug.DebugDump;
@DebugDump
public class Color {
public float r, g, b, a;

View File

@ -24,46 +24,63 @@
*/
package de.bluecolored.bluemap.core.world;
import de.bluecolored.bluemap.core.debug.DebugDump;
import de.bluecolored.bluemap.core.util.ConfigUtils;
import de.bluecolored.bluemap.core.util.math.Color;
import org.spongepowered.configurate.ConfigurationNode;
@DebugDump
public class Biome {
public static final Biome DEFAULT = new Biome();
public static final Biome DEFAULT = new Biome("minecraft:ocean");
private String id = "ocean";
private int numeralId = 0;
private final String namespace;
private final String id;
private final String fullId;
private float humidity = 0.5f;
private float temp = 0.5f;
private Color waterColor = new Color().set(4159204).premultiplied();
private final Color waterColor = new Color().set(4159204).premultiplied();
private Color overlayFoliageColor = new Color().premultiplied();
private Color overlayGrassColor = new Color().premultiplied();
private final Color overlayFoliageColor = new Color().premultiplied();
private final Color overlayGrassColor = new Color().premultiplied();
private Biome() {}
public Biome(String id) {
//resolve namespace
String namespace = "minecraft";
int namespaceSeperator = id.indexOf(':');
if (namespaceSeperator > 0) {
namespace = id.substring(0, namespaceSeperator);
id = id.substring(namespaceSeperator + 1);
}
public Biome(String id, int numeralId, float humidity, float temp, Color waterColor) {
this.id = id;
this.numeralId = numeralId;
this.humidity = humidity;
this.temp = temp;
this.waterColor = waterColor;
this.namespace = namespace;
this.fullId = namespace + ":" + id;
}
public Biome(String id, int numeralId, float humidity, float temp, Color waterColor, Color overlayFoliageColor, Color overlayGrassColor) {
this (id, numeralId, humidity, temp, waterColor);
public Biome(String id, float humidity, float temp, Color waterColor) {
this(id);
this.humidity = humidity;
this.temp = temp;
this.waterColor.set(waterColor);
}
this.overlayFoliageColor = overlayFoliageColor;
this.overlayGrassColor = overlayGrassColor;
public Biome(String id, float humidity, float temp, Color waterColor, Color overlayFoliageColor, Color overlayGrassColor) {
this (id, humidity, temp, waterColor);
this.overlayFoliageColor.set(overlayFoliageColor);
this.overlayGrassColor.set(overlayGrassColor);
}
public String getNamespace() {
return namespace;
}
public String getId() {
return id;
}
public int getNumeralId() {
return numeralId;
public String getFullId() {
return fullId;
}
public float getHumidity() {
@ -87,15 +104,12 @@ public class Biome {
}
public static Biome create(String id, ConfigurationNode node) {
Biome biome = new Biome();
biome.id = id;
biome.numeralId = node.node("id").getInt(biome.numeralId);
biome.humidity = node.node("humidity").getFloat(biome.humidity);
biome.temp = node.node("temp").getFloat(biome.temp);
try { biome.waterColor = new Color().set(ConfigUtils.readColorInt(node.node("watercolor"))).premultiplied(); } catch (NumberFormatException ignored) {}
try { biome.overlayFoliageColor = new Color().set(ConfigUtils.readColorInt(node.node("foliagecolor"))).premultiplied(); } catch (NumberFormatException ignored) {}
try { biome.overlayGrassColor = new Color().set(ConfigUtils.readColorInt(node.node("grasscolor"))).premultiplied(); } catch (NumberFormatException ignored) {}
Biome biome = new Biome(id);
biome.humidity = (float) node.node("humidity").getDouble(biome.humidity);
biome.temp = (float) node.node("temp").getDouble(biome.temp);
try { biome.waterColor.set(ConfigUtils.readColorInt(node.node("watercolor"))).premultiplied(); } catch (NumberFormatException ignored) {}
try { biome.overlayFoliageColor.set(ConfigUtils.readColorInt(node.node("foliagecolor"))).premultiplied(); } catch (NumberFormatException ignored) {}
try { biome.overlayGrassColor.set(ConfigUtils.readColorInt(node.node("grasscolor"))).premultiplied(); } catch (NumberFormatException ignored) {}
return biome;
}
@ -104,7 +118,8 @@ public class Biome {
public String toString() {
return "Biome{" +
"id='" + id + '\'' +
", numeralId=" + numeralId +
", namespace=" + namespace +
", fullId=" + fullId +
", humidity=" + humidity +
", temp=" + temp +
", waterColor=" + waterColor +

View File

@ -33,7 +33,7 @@ public class Block<T extends Block<T>> {
private BlockState blockState;
private final LightData lightData = new LightData(-1, -1);
private int biomeId;
private String biomeId;
public Block(World world, int x, int y, int z) {
set(world, x, y, z);
@ -75,7 +75,7 @@ public class Block<T extends Block<T>> {
protected void reset() {
this.blockState = null;
this.lightData.set(-1, -1);
this.biomeId = -1;
this.biomeId = null;
}
public T add(int dx, int dy, int dz) {
@ -145,8 +145,8 @@ public class Block<T extends Block<T>> {
return lightData;
}
public int getBiomeId() {
if (biomeId == -1) biomeId = getChunk().getBiome(x, y, z);
public String getBiomeId() {
if (biomeId == null) biomeId = getChunk().getBiome(x, y, z);
return biomeId;
}

View File

@ -24,8 +24,10 @@
*/
package de.bluecolored.bluemap.core.world;
import de.bluecolored.bluemap.core.debug.DebugDump;
import de.bluecolored.bluemap.core.util.Tristate;
@DebugDump
public class BlockProperties {
public static final BlockProperties DEFAULT = new BlockProperties();

View File

@ -24,6 +24,8 @@
*/
package de.bluecolored.bluemap.core.world;
import de.bluecolored.bluemap.core.debug.DebugDump;
import java.util.*;
import java.util.Map.Entry;
import java.util.regex.Matcher;
@ -35,6 +37,7 @@ import java.util.regex.Pattern;
* <br>
* <i>The implementation of this class has to be thread-save!</i><br>
*/
@DebugDump
public class BlockState {
private static final Pattern BLOCKSTATE_SERIALIZATION_PATTERN = Pattern.compile("^(.+?)(?:\\[(.*)])?$");

View File

@ -34,7 +34,7 @@ public interface Chunk {
LightData getLightData(int x, int y, int z, LightData target);
int getBiome(int x, int y, int z);
String getBiome(int x, int y, int z);
int getMaxY(int x, int z);

View File

@ -0,0 +1,5 @@
{
"variants": {
"": { "model": "bluemap:block/missing" }
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "block/cube_all",
"textures": {
"all": "bluemap:block/missing"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,316 @@
{
"minecraft:the_void": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 4159204
},
"minecraft:plains": {
"humidity": 0.4,
"temp": 0.8,
"watercolor": 4159204
},
"minecraft:sunflower_plains": {
"humidity": 0.4,
"temp": 0.8,
"watercolor": 4159204
},
"minecraft:snowy_plains": {
"humidity": 0.5,
"temp": 0.0,
"watercolor": 4159204
},
"minecraft:ice_spikes": {
"humidity": 0.5,
"temp": 0.0,
"watercolor": 4159204
},
"minecraft:desert": {
"humidity": 0.0,
"temp": 2.0,
"watercolor": 4159204
},
"minecraft:swamp": {
"humidity": 0.9,
"temp": 0.8,
"watercolor": 6388580,
"foliagecolor": 6975545
},
"minecraft:forest": {
"humidity": 0.8,
"temp": 0.7,
"watercolor": 4159204
},
"minecraft:flower_forest": {
"humidity": 0.8,
"temp": 0.7,
"watercolor": 4159204
},
"minecraft:birch_forest": {
"humidity": 0.6,
"temp": 0.6,
"watercolor": 4159204
},
"minecraft:dark_forest": {
"humidity": 0.8,
"temp": 0.7,
"watercolor": 4159204,
"foliagecolor": "#5528340a",
"grasscolor": "#8828340a"
},
"minecraft:old_growth_birch_forest": {
"humidity": 0.6,
"temp": 0.6,
"watercolor": 4159204
},
"minecraft:old_growth_pine_taiga": {
"humidity": 0.8,
"temp": 0.3,
"watercolor": 4159204
},
"minecraft:old_growth_spruce_taiga": {
"humidity": 0.8,
"temp": 0.25,
"watercolor": 4159204
},
"minecraft:taiga": {
"humidity": 0.8,
"temp": 0.25,
"watercolor": 4159204
},
"minecraft:snowy_taiga": {
"humidity": 0.4,
"temp": -0.5,
"watercolor": 4020182
},
"minecraft:savanna": {
"humidity": 0.0,
"temp": 1.2,
"watercolor": 4159204
},
"minecraft:savanna_plateau": {
"humidity": 0.0,
"temp": 1.0,
"watercolor": 4159204
},
"minecraft:windswept_hills": {
"humidity": 0.3,
"temp": 0.2,
"watercolor": 4159204
},
"minecraft:windswept_gravelly_hills": {
"humidity": 0.3,
"temp": 0.2,
"watercolor": 4159204
},
"minecraft:windswept_forest": {
"humidity": 0.3,
"temp": 0.2,
"watercolor": 4159204
},
"minecraft:windswept_savanna": {
"humidity": 0.0,
"temp": 1.1,
"watercolor": 4159204
},
"minecraft:jungle": {
"humidity": 0.9,
"temp": 0.95,
"watercolor": 4159204
},
"minecraft:sparse_jungle": {
"humidity": 0.8,
"temp": 0.95,
"watercolor": 4159204
},
"minecraft:bamboo_jungle": {
"humidity": 0.9,
"temp": 0.95,
"watercolor": 4159204
},
"minecraft:badlands": {
"humidity": 0.0,
"temp": 2.0,
"watercolor": 4159204,
"foliagecolor": 10387789,
"grasscolor": 9470285
},
"minecraft:eroded_badlands": {
"humidity": 0.0,
"temp": 2.0,
"watercolor": 4159204,
"foliagecolor": 10387789,
"grasscolor": 9470285
},
"minecraft:wooded_badlands": {
"humidity": 0.0,
"temp": 2.0,
"watercolor": 4159204,
"foliagecolor": 10387789,
"grasscolor": 9470285
},
"minecraft:meadow": {
"humidity": 0.8,
"temp": 0.5,
"watercolor": 937679
},
"minecraft:grove": {
"humidity": 0.8,
"temp": -0.2,
"watercolor": 4159204
},
"minecraft:snowy_slopes": {
"humidity": 0.9,
"temp": -0.3,
"watercolor": 4159204
},
"minecraft:frozen_peaks": {
"humidity": 0.9,
"temp": -0.7,
"watercolor": 4159204
},
"minecraft:jagged_peaks": {
"humidity": 0.9,
"temp": -0.7,
"watercolor": 4159204
},
"minecraft:stony_peaks": {
"humidity": 0.3,
"temp": 1.0,
"watercolor": 4159204
},
"minecraft:river": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 4159204
},
"minecraft:frozen_river": {
"humidity": 0.5,
"temp": 0.0,
"watercolor": 3750089
},
"minecraft:beach": {
"humidity": 0.4,
"temp": 0.8,
"watercolor": 4159204
},
"minecraft:snowy_beach": {
"humidity": 0.3,
"temp": 0.05,
"watercolor": 4020182
},
"minecraft:stony_shore": {
"humidity": 0.3,
"temp": 0.2,
"watercolor": 4159204
},
"minecraft:warm_ocean": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 4445678
},
"minecraft:lukewarm_ocean": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 4566514
},
"minecraft:deep_lukewarm_ocean": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 4566514
},
"minecraft:ocean": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 4159204
},
"minecraft:deep_ocean": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 4159204
},
"minecraft:cold_ocean": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 4020182
},
"minecraft:deep_cold_ocean": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 4020182
},
"minecraft:frozen_ocean": {
"humidity": 0.5,
"temp": 0.0,
"watercolor": 3750089
},
"minecraft:deep_frozen_ocean": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 3750089
},
"minecraft:mushroom_fields": {
"humidity": 1.0,
"temp": 0.9,
"watercolor": 4159204
},
"minecraft:dripstone_caves": {
"humidity": 0.4,
"temp": 0.8,
"watercolor": 4159204
},
"minecraft:lush_caves": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 4159204
},
"minecraft:nether_wastes": {
"humidity": 0.0,
"temp": 2.0,
"watercolor": 4159204
},
"minecraft:warped_forest": {
"humidity": 0.0,
"temp": 2.0,
"watercolor": 4159204
},
"minecraft:crimson_forest": {
"humidity": 0.0,
"temp": 2.0,
"watercolor": 4159204
},
"minecraft:soul_sand_valley": {
"humidity": 0.0,
"temp": 2.0,
"watercolor": 4159204
},
"minecraft:basalt_deltas": {
"humidity": 0.0,
"temp": 2.0,
"watercolor": 4159204
},
"minecraft:the_end": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 4159204
},
"minecraft:end_highlands": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 4159204
},
"minecraft:end_midlands": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 4159204
},
"minecraft:small_end_islands": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 4159204
},
"minecraft:end_barrens": {
"humidity": 0.5,
"temp": 0.5,
"watercolor": 4159204
}
}

View File

@ -0,0 +1,17 @@
{
"default": "@foliage",
"minecraft:water": "@water",
"minecraft:cauldron": "@water",
"minecraft:water_cauldron": "@water",
"minecraft:powder_snow_cauldron": "#ffffff",
"minecraft:lava_cauldron": "#ffffff",
"minecraft:grass_block": "@grass",
"minecraft:grass": "@grass",
"minecraft:tall_grass": "@grass",
"minecraft:fern": "@grass",
"minecraft:large_fern": "@grass",
"minecraft:redstone_wire": "@redstone",
"minecraft:birch_leaves": 8431445,
"minecraft:spruce_leaves": 6396257,
"minecraft:stonecutter": "#ffffff"
}

View File

@ -0,0 +1,52 @@
{
"minecraft:seagrass": { "alwaysWaterlogged": true },
"minecraft:tall_seagrass": { "alwaysWaterlogged": true },
"minecraft:kelp": { "alwaysWaterlogged": true },
"minecraft:kelp_plant": { "alwaysWaterlogged": true },
"minecraft:bubble_column": { "alwaysWaterlogged": true },
"minecraft:grass": { "randomOffset": true },
"minecraft:tall_grass": { "randomOffset": true },
"minecraft:fern": { "randomOffset": true },
"minecraft:dandelion": { "randomOffset": true },
"minecraft:cornflower": { "randomOffset": true },
"minecraft:poppy": { "randomOffset": true },
"minecraft:blue_orchid": { "randomOffset": true },
"minecraft:allium": { "randomOffset": true },
"minecraft:azure_bluet": { "randomOffset": true },
"minecraft:red_tulip": { "randomOffset": true },
"minecraft:orange_tulip": { "randomOffset": true },
"minecraft:white_tulip": { "randomOffset": true },
"minecraft:pink_tulip": { "randomOffset": true },
"minecraft:oxeye_daisy": { "randomOffset": true },
"minecraft:lily_of_the_valley": { "randomOffset": true },
"minecraft:wither_rose": { "randomOffset": true },
"minecraft:crimson_roots": { "randomOffset": true },
"minecraft:warped_roots": { "randomOffset": true },
"minecraft:nether_sprouts": { "randomOffset": true },
"minecraft:rose_bush": { "randomOffset": true },
"minecraft:peony": { "randomOffset": true },
"minecraft:lilac": { "randomOffset": true },
"minecraft:sunflower": { "randomOffset": true },
"minecraft:hanging_roots": { "randomOffset": true },
"minecraft:small_dripleaf": { "randomOffset": true },
"minecraft:glass": { "occluding": false },
"minecraft:tinted_glass": { "occluding": false },
"minecraft:white_stained_glass": { "occluding": false },
"minecraft:orange_stained_glass": { "occluding": false },
"minecraft:magenta_stained_glass": { "occluding": false },
"minecraft:light_blue_stained_glass": { "occluding": false },
"minecraft:yellow_stained_glass": { "occluding": false },
"minecraft:lime_stained_glass": { "occluding": false },
"minecraft:pink_stained_glass": { "occluding": false },
"minecraft:gray_stained_glass": { "occluding": false },
"minecraft:light_gray_stained_glass": { "occluding": false },
"minecraft:cyan_stained_glass": { "occluding": false },
"minecraft:purple_stained_glass": { "occluding": false },
"minecraft:blue_stained_glass": { "occluding": false },
"minecraft:brown_stained_glass": { "occluding": false },
"minecraft:green_stained_glass": { "occluding": false },
"minecraft:red_stained_glass": { "occluding": false },
"minecraft:black_stained_glass": { "occluding": false }
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/acacia" },
"rotation=1": { "model": "block/sign/acacia", "y": 22.5 },
"rotation=2": { "model": "block/sign/acacia", "y": 45 },
"rotation=3": { "model": "block/sign/acacia", "y": 67.5 },
"rotation=4": { "model": "block/sign/acacia", "y": 90 },
"rotation=5": { "model": "block/sign/acacia", "y": 112.5 },
"rotation=6": { "model": "block/sign/acacia", "y": 135 },
"rotation=7": { "model": "block/sign/acacia", "y": 157.5 },
"rotation=8": { "model": "block/sign/acacia", "y": 180 },
"rotation=9": { "model": "block/sign/acacia", "y": 202.5 },
"rotation=10": { "model": "block/sign/acacia", "y": 225 },
"rotation=11": { "model": "block/sign/acacia", "y": 247.5 },
"rotation=12": { "model": "block/sign/acacia", "y": 270 },
"rotation=13": { "model": "block/sign/acacia", "y": 292.5 },
"rotation=14": { "model": "block/sign/acacia", "y": 315 },
"rotation=15": { "model": "block/sign/acacia", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_acacia" },
"facing=west": { "model": "block/sign/wall_acacia", "y": 90 },
"facing=north": { "model": "block/sign/wall_acacia", "y": 180 },
"facing=east": { "model": "block/sign/wall_acacia", "y": 270 }
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/birch" },
"rotation=1": { "model": "block/sign/birch", "y": 22.5 },
"rotation=2": { "model": "block/sign/birch", "y": 45 },
"rotation=3": { "model": "block/sign/birch", "y": 67.5 },
"rotation=4": { "model": "block/sign/birch", "y": 90 },
"rotation=5": { "model": "block/sign/birch", "y": 112.5 },
"rotation=6": { "model": "block/sign/birch", "y": 135 },
"rotation=7": { "model": "block/sign/birch", "y": 157.5 },
"rotation=8": { "model": "block/sign/birch", "y": 180 },
"rotation=9": { "model": "block/sign/birch", "y": 202.5 },
"rotation=10": { "model": "block/sign/birch", "y": 225 },
"rotation=11": { "model": "block/sign/birch", "y": 247.5 },
"rotation=12": { "model": "block/sign/birch", "y": 270 },
"rotation=13": { "model": "block/sign/birch", "y": 292.5 },
"rotation=14": { "model": "block/sign/birch", "y": 315 },
"rotation=15": { "model": "block/sign/birch", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_birch" },
"facing=west": { "model": "block/sign/wall_birch", "y": 90 },
"facing=north": { "model": "block/sign/wall_birch", "y": 180 },
"facing=east": { "model": "block/sign/wall_birch", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/black_head" },
"part=head,facing=east": { "model": "block/bed/black_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/black_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/black_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/black_foot" },
"part=foot,facing=east": { "model": "block/bed/black_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/black_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/black_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/blue_head" },
"part=head,facing=east": { "model": "block/bed/blue_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/blue_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/blue_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/blue_foot" },
"part=foot,facing=east": { "model": "block/bed/blue_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/blue_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/blue_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/brown_head" },
"part=head,facing=east": { "model": "block/bed/brown_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/brown_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/brown_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/brown_foot" },
"part=foot,facing=east": { "model": "block/bed/brown_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/brown_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/brown_foot", "y": 270 }
}
}

View File

@ -0,0 +1,5 @@
{
"variants": {
"": { "model": "block/bubble_column" }
}
}

View File

@ -0,0 +1,16 @@
{
"variants": {
"type=single,facing=north": { "model": "block/chest/normal", "y": 90 },
"type=single,facing=east": { "model": "block/chest/normal", "y": 180 },
"type=single,facing=south": { "model": "block/chest/normal", "y": 270 },
"type=single,facing=west": { "model": "block/chest/normal"},
"type=right,facing=north": { "model": "block/chest/normal_double_right", "y": 90 },
"type=right,facing=east": { "model": "block/chest/normal_double_right", "y": 180 },
"type=right,facing=south": { "model": "block/chest/normal_double_right", "y": 270 },
"type=right,facing=west": { "model": "block/chest/normal_double_right"},
"type=left,facing=north": { "model": "block/chest/normal_double_left", "y": 90 },
"type=left,facing=east": { "model": "block/chest/normal_double_left","y": 180 },
"type=left,facing=south": { "model": "block/chest/normal_double_left", "y": 270 },
"type=left,facing=west": { "model": "block/chest/normal_double_left"}
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/crimson" },
"rotation=1": { "model": "block/sign/crimson", "y": 22.5 },
"rotation=2": { "model": "block/sign/crimson", "y": 45 },
"rotation=3": { "model": "block/sign/crimson", "y": 67.5 },
"rotation=4": { "model": "block/sign/crimson", "y": 90 },
"rotation=5": { "model": "block/sign/crimson", "y": 112.5 },
"rotation=6": { "model": "block/sign/crimson", "y": 135 },
"rotation=7": { "model": "block/sign/crimson", "y": 157.5 },
"rotation=8": { "model": "block/sign/crimson", "y": 180 },
"rotation=9": { "model": "block/sign/crimson", "y": 202.5 },
"rotation=10": { "model": "block/sign/crimson", "y": 225 },
"rotation=11": { "model": "block/sign/crimson", "y": 247.5 },
"rotation=12": { "model": "block/sign/crimson", "y": 270 },
"rotation=13": { "model": "block/sign/crimson", "y": 292.5 },
"rotation=14": { "model": "block/sign/crimson", "y": 315 },
"rotation=15": { "model": "block/sign/crimson", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_crimson" },
"facing=west": { "model": "block/sign/wall_crimson", "y": 90 },
"facing=north": { "model": "block/sign/wall_crimson", "y": 180 },
"facing=east": { "model": "block/sign/wall_crimson", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/cyan_head" },
"part=head,facing=east": { "model": "block/bed/cyan_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/cyan_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/cyan_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/cyan_foot" },
"part=foot,facing=east": { "model": "block/bed/cyan_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/cyan_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/cyan_foot", "y": 270 }
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/dark_oak" },
"rotation=1": { "model": "block/sign/dark_oak", "y": 22.5 },
"rotation=2": { "model": "block/sign/dark_oak", "y": 45 },
"rotation=3": { "model": "block/sign/dark_oak", "y": 67.5 },
"rotation=4": { "model": "block/sign/dark_oak", "y": 90 },
"rotation=5": { "model": "block/sign/dark_oak", "y": 112.5 },
"rotation=6": { "model": "block/sign/dark_oak", "y": 135 },
"rotation=7": { "model": "block/sign/dark_oak", "y": 157.5 },
"rotation=8": { "model": "block/sign/dark_oak", "y": 180 },
"rotation=9": { "model": "block/sign/dark_oak", "y": 202.5 },
"rotation=10": { "model": "block/sign/dark_oak", "y": 225 },
"rotation=11": { "model": "block/sign/dark_oak", "y": 247.5 },
"rotation=12": { "model": "block/sign/dark_oak", "y": 270 },
"rotation=13": { "model": "block/sign/dark_oak", "y": 292.5 },
"rotation=14": { "model": "block/sign/dark_oak", "y": 315 },
"rotation=15": { "model": "block/sign/dark_oak", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_dark_oak" },
"facing=west": { "model": "block/sign/wall_dark_oak", "y": 90 },
"facing=north": { "model": "block/sign/wall_dark_oak", "y": 180 },
"facing=east": { "model": "block/sign/wall_dark_oak", "y": 270 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=north": { "model": "block/chest/ender", "y": 90 },
"facing=east": { "model": "block/chest/ender", "y": 180 },
"facing=south": { "model": "block/chest/ender", "y":270 },
"facing=west": { "model": "block/chest/ender"}
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/gray_head" },
"part=head,facing=east": { "model": "block/bed/gray_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/gray_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/gray_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/gray_foot" },
"part=foot,facing=east": { "model": "block/bed/gray_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/gray_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/gray_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/green_head" },
"part=head,facing=east": { "model": "block/bed/green_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/green_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/green_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/green_foot" },
"part=foot,facing=east": { "model": "block/bed/green_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/green_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/green_foot", "y": 270 }
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/jungle" },
"rotation=1": { "model": "block/sign/jungle", "y": 22.5 },
"rotation=2": { "model": "block/sign/jungle", "y": 45 },
"rotation=3": { "model": "block/sign/jungle", "y": 67.5 },
"rotation=4": { "model": "block/sign/jungle", "y": 90 },
"rotation=5": { "model": "block/sign/jungle", "y": 112.5 },
"rotation=6": { "model": "block/sign/jungle", "y": 135 },
"rotation=7": { "model": "block/sign/jungle", "y": 157.5 },
"rotation=8": { "model": "block/sign/jungle", "y": 180 },
"rotation=9": { "model": "block/sign/jungle", "y": 202.5 },
"rotation=10": { "model": "block/sign/jungle", "y": 225 },
"rotation=11": { "model": "block/sign/jungle", "y": 247.5 },
"rotation=12": { "model": "block/sign/jungle", "y": 270 },
"rotation=13": { "model": "block/sign/jungle", "y": 292.5 },
"rotation=14": { "model": "block/sign/jungle", "y": 315 },
"rotation=15": { "model": "block/sign/jungle", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_jungle" },
"facing=west": { "model": "block/sign/wall_jungle", "y": 90 },
"facing=north": { "model": "block/sign/wall_jungle", "y": 180 },
"facing=east": { "model": "block/sign/wall_jungle", "y": 270 }
}
}

View File

@ -0,0 +1,5 @@
{
"variants": {
"": { "model": "block/lava" }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/light_blue_head" },
"part=head,facing=east": { "model": "block/bed/light_blue_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/light_blue_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/light_blue_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/light_blue_foot" },
"part=foot,facing=east": { "model": "block/bed/light_blue_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/light_blue_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/light_blue_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/light_gray_head" },
"part=head,facing=east": { "model": "block/bed/light_gray_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/light_gray_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/light_gray_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/light_gray_foot" },
"part=foot,facing=east": { "model": "block/bed/light_gray_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/light_gray_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/light_gray_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/lime_head" },
"part=head,facing=east": { "model": "block/bed/lime_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/lime_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/lime_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/lime_foot" },
"part=foot,facing=east": { "model": "block/bed/lime_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/lime_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/lime_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/magenta_head" },
"part=head,facing=east": { "model": "block/bed/magenta_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/magenta_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/magenta_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/magenta_foot" },
"part=foot,facing=east": { "model": "block/bed/magenta_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/magenta_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/magenta_foot", "y": 270 }
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/oak" },
"rotation=1": { "model": "block/sign/oak", "y": 22.5 },
"rotation=2": { "model": "block/sign/oak", "y": 45 },
"rotation=3": { "model": "block/sign/oak", "y": 67.5 },
"rotation=4": { "model": "block/sign/oak", "y": 90 },
"rotation=5": { "model": "block/sign/oak", "y": 112.5 },
"rotation=6": { "model": "block/sign/oak", "y": 135 },
"rotation=7": { "model": "block/sign/oak", "y": 157.5 },
"rotation=8": { "model": "block/sign/oak", "y": 180 },
"rotation=9": { "model": "block/sign/oak", "y": 202.5 },
"rotation=10": { "model": "block/sign/oak", "y": 225 },
"rotation=11": { "model": "block/sign/oak", "y": 247.5 },
"rotation=12": { "model": "block/sign/oak", "y": 270 },
"rotation=13": { "model": "block/sign/oak", "y": 292.5 },
"rotation=14": { "model": "block/sign/oak", "y": 315 },
"rotation=15": { "model": "block/sign/oak", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_oak" },
"facing=west": { "model": "block/sign/wall_oak", "y": 90 },
"facing=north": { "model": "block/sign/wall_oak", "y": 180 },
"facing=east": { "model": "block/sign/wall_oak", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/orange_head" },
"part=head,facing=east": { "model": "block/bed/orange_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/orange_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/orange_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/orange_foot" },
"part=foot,facing=east": { "model": "block/bed/orange_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/orange_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/orange_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/pink_head" },
"part=head,facing=east": { "model": "block/bed/pink_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/pink_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/pink_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/pink_foot" },
"part=foot,facing=east": { "model": "block/bed/pink_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/pink_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/pink_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/purple_head" },
"part=head,facing=east": { "model": "block/bed/purple_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/purple_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/purple_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/purple_foot" },
"part=foot,facing=east": { "model": "block/bed/purple_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/purple_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/purple_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/red_head" },
"part=head,facing=east": { "model": "block/bed/red_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/red_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/red_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/red_foot" },
"part=foot,facing=east": { "model": "block/bed/red_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/red_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/red_foot", "y": 270 }
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/spruce" },
"rotation=1": { "model": "block/sign/spruce", "y": 22.5 },
"rotation=2": { "model": "block/sign/spruce", "y": 45 },
"rotation=3": { "model": "block/sign/spruce", "y": 67.5 },
"rotation=4": { "model": "block/sign/spruce", "y": 90 },
"rotation=5": { "model": "block/sign/spruce", "y": 112.5 },
"rotation=6": { "model": "block/sign/spruce", "y": 135 },
"rotation=7": { "model": "block/sign/spruce", "y": 157.5 },
"rotation=8": { "model": "block/sign/spruce", "y": 180 },
"rotation=9": { "model": "block/sign/spruce", "y": 202.5 },
"rotation=10": { "model": "block/sign/spruce", "y": 225 },
"rotation=11": { "model": "block/sign/spruce", "y": 247.5 },
"rotation=12": { "model": "block/sign/spruce", "y": 270 },
"rotation=13": { "model": "block/sign/spruce", "y": 292.5 },
"rotation=14": { "model": "block/sign/spruce", "y": 315 },
"rotation=15": { "model": "block/sign/spruce", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_spruce" },
"facing=west": { "model": "block/sign/wall_spruce", "y": 90 },
"facing=north": { "model": "block/sign/wall_spruce", "y": 180 },
"facing=east": { "model": "block/sign/wall_spruce", "y": 270 }
}
}

View File

@ -0,0 +1,16 @@
{
"variants": {
"type=single,facing=north": { "model": "block/chest/trapped", "y": 90 },
"type=single,facing=east": { "model": "block/chest/trapped", "y": 180 },
"type=single,facing=south": { "model": "block/chest/trapped", "y":270 },
"type=single,facing=west": { "model": "block/chest/trapped"},
"type=right,facing=north": { "model": "block/chest/trapped_double_right", "y": 90 },
"type=right,facing=east": { "model": "block/chest/trapped_double_right", "y": 180 },
"type=right,facing=south": { "model": "block/chest/trapped_double_right", "y":270 },
"type=right,facing=west": { "model": "block/chest/trapped_double_right"},
"type=left,facing=north": { "model": "block/chest/trapped_double_left", "y": 90 },
"type=left,facing=east": { "model": "block/chest/trapped_double_left", "y": 180 },
"type=left,facing=south": { "model": "block/chest/trapped_double_left", "y":270 },
"type=left,facing=west": { "model": "block/chest/trapped_double_left"}
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "block/sign/warped" },
"rotation=1": { "model": "block/sign/warped", "y": 22.5 },
"rotation=2": { "model": "block/sign/warped", "y": 45 },
"rotation=3": { "model": "block/sign/warped", "y": 67.5 },
"rotation=4": { "model": "block/sign/warped", "y": 90 },
"rotation=5": { "model": "block/sign/warped", "y": 112.5 },
"rotation=6": { "model": "block/sign/warped", "y": 135 },
"rotation=7": { "model": "block/sign/warped", "y": 157.5 },
"rotation=8": { "model": "block/sign/warped", "y": 180 },
"rotation=9": { "model": "block/sign/warped", "y": 202.5 },
"rotation=10": { "model": "block/sign/warped", "y": 225 },
"rotation=11": { "model": "block/sign/warped", "y": 247.5 },
"rotation=12": { "model": "block/sign/warped", "y": 270 },
"rotation=13": { "model": "block/sign/warped", "y": 292.5 },
"rotation=14": { "model": "block/sign/warped", "y": 315 },
"rotation=15": { "model": "block/sign/warped", "y": 337.5 }
}
}

View File

@ -0,0 +1,8 @@
{
"variants": {
"facing=south": { "model": "block/sign/wall_warped" },
"facing=west": { "model": "block/sign/wall_warped", "y": 90 },
"facing=north": { "model": "block/sign/wall_warped", "y": 180 },
"facing=east": { "model": "block/sign/wall_warped", "y": 270 }
}
}

View File

@ -0,0 +1,5 @@
{
"variants": {
"": { "model": "block/water" }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/white_head" },
"part=head,facing=east": { "model": "block/bed/white_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/white_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/white_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/white_foot" },
"part=foot,facing=east": { "model": "block/bed/white_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/white_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/white_foot", "y": 270 }
}
}

View File

@ -0,0 +1,12 @@
{
"variants": {
"part=head,facing=north": { "model": "block/bed/yellow_head" },
"part=head,facing=east": { "model": "block/bed/yellow_head", "y": 90 },
"part=head,facing=south": { "model": "block/bed/yellow_head", "y": 180 },
"part=head,facing=west": { "model": "block/bed/yellow_head", "y": 270 },
"part=foot,facing=north": { "model": "block/bed/yellow_foot" },
"part=foot,facing=east": { "model": "block/bed/yellow_foot", "y": 90 },
"part=foot,facing=south": { "model": "block/bed/yellow_foot", "y": 180 },
"part=foot,facing=west": { "model": "block/bed/yellow_foot", "y": 270 }
}
}

View File

@ -0,0 +1,39 @@
{
"elements": [
{
"from": [0, 0, 13],
"to": [3, 3, 16],
"faces": {
"north": {"uv": [14.75, 0.75, 15.5, 1.5], "texture": "#bed"},
"east": {"uv": [14, 0.75, 14.75, 1.5], "texture": "#bed"},
"south": {"uv": [13.25, 0.75, 14, 1.5], "texture": "#bed"},
"west": {"uv": [12.5, 0.75, 13.25, 1.5], "texture": "#bed"},
"up": {"uv": [13.25, 0, 14, 0.75], "texture": "#bed"},
"down": {"uv": [14, 0, 14.75, 0.75], "texture": "#bed"}
}
},
{
"from": [13, 0, 13],
"to": [16, 3, 16],
"faces": {
"north": {"uv": [14, 3.75, 14.75, 4.5], "texture": "#bed"},
"east": {"uv": [13.25, 3.75, 14, 4.5], "texture": "#bed"},
"south": {"uv": [12.5, 3.75, 13.25, 4.5], "texture": "#bed"},
"west": {"uv": [14.75, 3.75, 15.5, 4.5], "texture": "#bed"},
"up": {"uv": [13.25, 3, 14, 3.75], "texture": "#bed"},
"down": {"uv": [14, 3, 14.75, 3.75], "texture": "#bed"}
}
},
{
"from": [0, 3, 0],
"to": [16, 9, 16],
"faces": {
"east": {"uv": [5.5, 7, 7, 11], "rotation": 90, "texture": "#bed"},
"south": {"uv": [5.5, 7, 9.5, 5.5], "texture": "#bed"},
"west": {"uv": [0, 7, 1.5, 11], "rotation": 270, "texture": "#bed"},
"up": {"uv": [1.5, 7, 5.5, 11], "texture": "#bed"},
"down": {"uv": [7, 7, 11, 11], "rotation": 180, "texture": "#bed"}
}
}
]
}

View File

@ -0,0 +1,39 @@
{
"elements": [
{
"from": [0, 0, 0],
"to": [3, 3, 3],
"faces": {
"north": {"uv": [12.5, 2.25, 13.25, 3], "texture": "#bed"},
"east": {"uv": [14.75, 2.25, 15.5, 3], "texture": "#bed"},
"south": {"uv": [14, 2.25, 14.75, 3], "texture": "#bed"},
"west": {"uv": [13.25, 2.25, 14, 3], "texture": "#bed"},
"up": {"uv": [13.25, 1.5, 14, 2.25], "texture": "#bed"},
"down": {"uv": [14, 1.5, 14.75, 2.25], "texture": "#bed"}
}
},
{
"from": [13, 0, 0],
"to": [16, 3, 3],
"faces": {
"north": {"uv": [13.25, 5.25, 14, 6], "texture": "#bed"},
"east": {"uv": [12.5, 5.25, 13.25, 6], "texture": "#bed"},
"south": {"uv": [14.75, 5.25, 15.5, 6], "texture": "#bed"},
"west": {"uv": [14, 5.25, 14.75, 6], "texture": "#bed"},
"up": {"uv": [13.25, 4.5, 14, 5.25], "texture": "#bed"},
"down": {"uv": [14, 4.5, 14.75, 5.25], "texture": "#bed"}
}
},
{
"from": [0, 3, 0],
"to": [16, 9, 16],
"faces": {
"north": {"uv": [1.5, 1.5, 5.5, 0], "texture": "#bed"},
"east": {"uv": [5.5, 1.5, 7, 5.5], "rotation": 90, "texture": "#bed"},
"west": {"uv": [0, 1.5, 1.5, 5.5], "rotation": 270, "texture": "#bed"},
"up": {"uv": [1.5, 1.5, 5.5, 5.5], "texture": "#bed"},
"down": {"uv": [7, 1.5, 11, 5.5], "rotation": 180, "texture": "#bed"}
}
}
]
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/black"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/black"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/blue"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/blue"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/brown"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/brown"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/cyan"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/cyan"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/gray"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/gray"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/green"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/green"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/light_blue"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/light_blue"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/light_gray"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/light_gray"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/lime"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/lime"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/magenta"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/magenta"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/orange"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/orange"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/pink"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/pink"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/purple"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/purple"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/red"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/red"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/white"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/white"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_foot",
"textures": {
"bed": "entity/bed/yellow"
}
}

View File

@ -0,0 +1,6 @@
{
"parent":"block/bed/bed_head",
"textures": {
"bed": "entity/bed/yellow"
}
}

Some files were not shown because too many files have changed in this diff Show More