Restructure resource-extensions, fix some issues and add support for biome grass_color_modifier

This commit is contained in:
Lukas Rieger (Blue) 2024-05-08 19:31:36 +02:00
parent a311fc1cef
commit 36c1d3f7ac
No known key found for this signature in database
GPG Key ID: AA33883B1BBA03E6
957 changed files with 3952 additions and 12113 deletions

2
.gitignore vendored
View File

@ -18,7 +18,7 @@ release.md
# exclude generated resource # exclude generated resource
BlueMapCommon/src/main/resources/de/bluecolored/bluemap/webapp.zip BlueMapCommon/src/main/resources/de/bluecolored/bluemap/webapp.zip
BlueMapCore/src/main/resources/de/bluecolored/bluemap/*/resourceExtensions.zip BlueMapCore/src/main/resources/de/bluecolored/bluemap/resourceExtensions.zip
#exclude-test-data #exclude-test-data
data/test-render data/test-render

@ -1 +1 @@
Subproject commit b200d339f1a20c5d0def4e134237c756e6294c50 Subproject commit 6c84500dfc560ec9588c89f71cc4a2d7edef2b2d

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@ -121,28 +121,11 @@ tasks.processResources {
} }
} }
//resource Extensions tasks.register("zipResourceExtensions", type = Zip::class) {
val resourceIds: Array<String> = arrayOf( from(fileTree("src/main/resourceExtensions"))
"1_13", "1_15", "1_16", "1_18", "1_20_3"
)
tasks.register("zipResourceExtensions") {
resourceIds.forEach {
dependsOn("zipResourceExtensions$it")
}
}
resourceIds.forEach {
zipResourcesTask(it)
}
fun zipResourcesTask(resourceId: String) {
tasks.register ("zipResourceExtensions$resourceId", type = Zip::class) {
from(fileTree("src/main/resourceExtensions/mc$resourceId"))
archiveFileName.set("resourceExtensions.zip") archiveFileName.set("resourceExtensions.zip")
destinationDirectory.set(file("src/main/resources/de/bluecolored/bluemap/mc$resourceId/")) destinationDirectory.set(file("src/main/resources/de/bluecolored/bluemap/"))
outputs.upToDateWhen{ false } outputs.upToDateWhen{ false }
}
} }
//always update the zip before build //always update the zip before build

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@ -28,7 +28,7 @@
import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonReader;
import de.bluecolored.bluemap.api.debug.DebugDump; import de.bluecolored.bluemap.api.debug.DebugDump;
import de.bluecolored.bluemap.core.util.math.Color; import de.bluecolored.bluemap.core.util.math.Color;
import de.bluecolored.bluemap.core.world.Biome; import de.bluecolored.bluemap.core.world.biome.Biome;
import de.bluecolored.bluemap.core.world.block.Block; import de.bluecolored.bluemap.core.world.block.Block;
import de.bluecolored.bluemap.core.world.block.BlockNeighborhood; import de.bluecolored.bluemap.core.world.block.BlockNeighborhood;
@ -188,12 +188,10 @@ public Color getBlendedGrassColor(BlockNeighborhood<?> block, Color target) {
int x, y, z; int x, y, z;
Biome biome;
for (y = BLEND_MIN_Y; y <= BLEND_MAX_Y; y++) { for (y = BLEND_MIN_Y; y <= BLEND_MAX_Y; y++) {
for (x = BLEND_MIN_X; x <= BLEND_MAX_X; x++) { for (x = BLEND_MIN_X; x <= BLEND_MAX_X; x++) {
for (z = BLEND_MIN_Z; z <= BLEND_MAX_Z; z++) { for (z = BLEND_MIN_Z; z <= BLEND_MAX_Z; z++) {
biome = block.getNeighborBlock(x, y, z).getBiome(); target.add(getGrassColor(block.getNeighborBlock(x, y, z), tempColor));
target.add(getGrassColor(biome, tempColor));
} }
} }
} }
@ -201,9 +199,12 @@ public Color getBlendedGrassColor(BlockNeighborhood<?> block, Color target) {
return target.flatten(); return target.flatten();
} }
public Color getGrassColor(Biome biome, Color target) { public Color getGrassColor(Block<?> block, Color target) {
Biome biome = block.getBiome();
getColorFromMap(biome, grassMap, 0xff52952f, target); getColorFromMap(biome, grassMap, 0xff52952f, target);
return target.overlay(biome.getOverlayGrassColor()); target.overlay(biome.getOverlayGrassColor());
biome.getGrassColorModifier().apply(block, target);
return target;
} }
private void getColorFromMap(Biome biome, int[] colorMap, int defaultColor, Color target) { private void getColorFromMap(Biome biome, int[] colorMap, int defaultColor, Color target) {

View File

@ -41,6 +41,7 @@
import java.io.OutputStream; import java.io.OutputStream;
import java.io.Reader; import java.io.Reader;
import java.net.URL; import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.*; import java.nio.file.*;
import java.security.DigestInputStream; import java.security.DigestInputStream;
import java.security.MessageDigest; import java.security.MessageDigest;
@ -196,7 +197,7 @@ private static VersionInfo loadVersionInfo(Path file) throws IOException {
Path versionFile = fsRoot.resolve("version.json"); Path versionFile = fsRoot.resolve("version.json");
if (!Files.exists(versionFile)) continue; if (!Files.exists(versionFile)) continue;
try (Reader reader = Files.newBufferedReader(file)) { try (Reader reader = Files.newBufferedReader(versionFile, StandardCharsets.UTF_8)) {
return GSON.fromJson(reader, VersionInfo.class); return GSON.fromJson(reader, VersionInfo.class);
} }
} }
@ -217,8 +218,8 @@ public static class VersionInfo {
public static class VersionInfoAdapter extends AbstractTypeAdapterFactory<VersionInfo> { public static class VersionInfoAdapter extends AbstractTypeAdapterFactory<VersionInfo> {
public VersionInfoAdapter(Class<VersionInfo> type) { public VersionInfoAdapter() {
super(type); super(VersionInfo.class);
} }
@Override @Override

View File

@ -54,8 +54,8 @@ public ResourcePath(String namespace, String value) {
super(namespace.toLowerCase(Locale.ROOT), value.toLowerCase(Locale.ROOT)); super(namespace.toLowerCase(Locale.ROOT), value.toLowerCase(Locale.ROOT));
} }
public ResourcePath(Path filePath) { public ResourcePath(Path filePath, int namespacePos, int valuePos) {
super(parsePath(filePath).toLowerCase(Locale.ROOT)); super(parsePath(filePath, namespacePos, valuePos).toLowerCase(Locale.ROOT));
} }
@Nullable @Nullable
@ -73,12 +73,12 @@ public void setResource(T resource) {
this.resource = resource; this.resource = resource;
} }
private static String parsePath(Path filePath) { private static String parsePath(Path filePath, int namespacePos, int valuePos) {
if (filePath.getNameCount() < 4) if (filePath.getNameCount() <= valuePos)
throw new IllegalArgumentException("The provided filePath has less than 4 segments!"); throw new IllegalArgumentException("The provided filePath has not enough segments!");
String namespace = filePath.getName(1).toString(); String namespace = filePath.getName(namespacePos).toString();
String path = filePath.subpath(3, filePath.getNameCount()).toString().replace(filePath.getFileSystem().getSeparator(), "/"); String path = filePath.subpath(valuePos, filePath.getNameCount()).toString().replace(filePath.getFileSystem().getSeparator(), "/");
// remove file-ending // remove file-ending
int dotIndex = path.lastIndexOf('.'); int dotIndex = path.lastIndexOf('.');

View File

@ -10,6 +10,7 @@
import java.io.*; import java.io.*;
import java.net.URL; import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Arrays; import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
@ -47,7 +48,7 @@ public static VersionManifest getOrFetch() throws IOException {
public static VersionManifest fetch() throws IOException { public static VersionManifest fetch() throws IOException {
try ( try (
InputStream in = new URL(MANIFEST_URL).openStream(); InputStream in = new URL(MANIFEST_URL).openStream();
Reader reader = new BufferedReader(new InputStreamReader(in)) Reader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))
) { ) {
instance = GSON.fromJson(reader, VersionManifest.class); instance = GSON.fromJson(reader, VersionManifest.class);
} }
@ -94,7 +95,7 @@ public synchronized VersionDetail fetchDetail() throws IOException {
if (detail == null) { if (detail == null) {
try ( try (
InputStream in = new URL(url).openStream(); InputStream in = new URL(url).openStream();
Reader reader = new BufferedReader(new InputStreamReader(in)) Reader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))
) { ) {
detail = GSON.fromJson(reader, VersionDetail.class); detail = GSON.fromJson(reader, VersionDetail.class);
} }

View File

@ -0,0 +1,36 @@
package de.bluecolored.bluemap.core.resources.adapter;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import de.bluecolored.bluemap.core.logger.Logger;
import de.bluecolored.bluemap.core.util.Key;
import de.bluecolored.bluemap.core.util.Keyed;
import de.bluecolored.bluemap.core.util.Registry;
import lombok.RequiredArgsConstructor;
import java.io.IOException;
@RequiredArgsConstructor
public class RegistryAdapter<T extends Keyed> extends TypeAdapter<T> {
private final Registry<T> registry;
private final String defaultNamespace;
private final T fallback;
@Override
public T read(JsonReader in) throws IOException {
Key key = Key.parse(in.nextString(), defaultNamespace);
T value = registry.get(key);
if (value != null) return value;
Logger.global.noFloodWarning("unknown-registry-key-" + key.getFormatted(), "Failed to find registry-entry for key: " + key);
return fallback;
}
@Override
public void write(JsonWriter out, T value) throws IOException {
out.value(value.getKey().getFormatted());
}
}

View File

@ -31,8 +31,10 @@
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import de.bluecolored.bluemap.core.resources.pack.resourcepack.blockmodel.Face; import de.bluecolored.bluemap.core.resources.pack.resourcepack.blockmodel.Face;
import de.bluecolored.bluemap.core.util.Direction; import de.bluecolored.bluemap.core.util.Direction;
import de.bluecolored.bluemap.core.util.Key;
import de.bluecolored.bluemap.core.util.math.Axis; import de.bluecolored.bluemap.core.util.math.Axis;
import de.bluecolored.bluemap.core.util.math.Color; import de.bluecolored.bluemap.core.util.math.Color;
import de.bluecolored.bluemap.core.world.biome.GrassColorModifier;
import java.util.EnumMap; import java.util.EnumMap;
@ -56,7 +58,12 @@ public static GsonBuilder addAdapter(GsonBuilder builder) {
.registerTypeAdapter( .registerTypeAdapter(
new TypeToken<EnumMap<Direction, Face>>(){}.getType(), new TypeToken<EnumMap<Direction, Face>>(){}.getType(),
new EnumMapInstanceCreator<Direction, Face>(Direction.class) new EnumMapInstanceCreator<Direction, Face>(Direction.class)
); )
.registerTypeAdapter(GrassColorModifier.class, new RegistryAdapter<>(
GrassColorModifier.REGISTRY,
Key.MINECRAFT_NAMESPACE,
GrassColorModifier.NONE
));
} }
} }

View File

@ -3,7 +3,6 @@
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import de.bluecolored.bluemap.core.logger.Logger; import de.bluecolored.bluemap.core.logger.Logger;
import de.bluecolored.bluemap.core.resources.PackMeta;
import de.bluecolored.bluemap.core.resources.ResourcePath; import de.bluecolored.bluemap.core.resources.ResourcePath;
import de.bluecolored.bluemap.core.resources.adapter.ResourcesGson; import de.bluecolored.bluemap.core.resources.adapter.ResourcesGson;
import de.bluecolored.bluemap.core.resources.pack.resourcepack.ResourcePack; import de.bluecolored.bluemap.core.resources.pack.resourcepack.ResourcePack;
@ -80,9 +79,9 @@ protected void loadResourcePath(Path root, ResourcePack.PathLoader resourceLoade
resourceLoader.load(root); resourceLoader.load(root);
} }
protected <T> void loadResource(Path root, Path file, Loader<T> loader, Map<? super ResourcePath<T>, T> resultMap) { protected <T> void loadResource(Path root, Path file, int namespacePos, int valuePos, Loader<T> loader, Map<? super ResourcePath<T>, T> resultMap) {
try { try {
ResourcePath<T> resourcePath = new ResourcePath<>(root.relativize(file)); ResourcePath<T> resourcePath = new ResourcePath<>(root.relativize(file), namespacePos, valuePos);
if (resultMap.containsKey(resourcePath)) return; // don't load already present resources if (resultMap.containsKey(resourcePath)) return; // don't load already present resources
T resource = loader.load(resourcePath); T resource = loader.load(resourcePath);

View File

@ -1,10 +1,11 @@
package de.bluecolored.bluemap.core.resources; package de.bluecolored.bluemap.core.resources.pack;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.annotations.JsonAdapter; import com.google.gson.annotations.JsonAdapter;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonToken;
import de.bluecolored.bluemap.core.resources.AbstractTypeAdapterFactory;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -50,8 +51,8 @@ public boolean includes(int version) {
private static class Adapter extends AbstractTypeAdapterFactory<VersionRange> { private static class Adapter extends AbstractTypeAdapterFactory<VersionRange> {
public Adapter(Class<VersionRange> type) { public Adapter() {
super(type); super(VersionRange.class);
} }
@Override @Override

View File

@ -30,7 +30,7 @@
import de.bluecolored.bluemap.core.resources.pack.datapack.biome.DatapackBiome; import de.bluecolored.bluemap.core.resources.pack.datapack.biome.DatapackBiome;
import de.bluecolored.bluemap.core.resources.pack.datapack.dimension.DimensionTypeData; import de.bluecolored.bluemap.core.resources.pack.datapack.dimension.DimensionTypeData;
import de.bluecolored.bluemap.core.util.Key; import de.bluecolored.bluemap.core.util.Key;
import de.bluecolored.bluemap.core.world.Biome; import de.bluecolored.bluemap.core.world.biome.Biome;
import de.bluecolored.bluemap.core.world.DimensionType; import de.bluecolored.bluemap.core.world.DimensionType;
import de.bluecolored.bluemap.core.world.mca.chunk.LegacyBiomes; import de.bluecolored.bluemap.core.world.mca.chunk.LegacyBiomes;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -88,7 +88,7 @@ private void loadPath(Path root) {
.flatMap(DataPack::walk) .flatMap(DataPack::walk)
.filter(path -> path.getFileName().toString().endsWith(".json")) .filter(path -> path.getFileName().toString().endsWith(".json"))
.filter(Files::isRegularFile) .filter(Files::isRegularFile)
.forEach(file -> loadResource(root, file, key -> { .forEach(file -> loadResource(root, file, 1, 3, key -> {
try (BufferedReader reader = Files.newBufferedReader(file)) { try (BufferedReader reader = Files.newBufferedReader(file)) {
return ResourcesGson.INSTANCE.fromJson(reader, DimensionTypeData.class); return ResourcesGson.INSTANCE.fromJson(reader, DimensionTypeData.class);
} }
@ -100,7 +100,7 @@ private void loadPath(Path root) {
.flatMap(DataPack::walk) .flatMap(DataPack::walk)
.filter(path -> path.getFileName().toString().endsWith(".json")) .filter(path -> path.getFileName().toString().endsWith(".json"))
.filter(Files::isRegularFile) .filter(Files::isRegularFile)
.forEach(file -> loadResource(root, file, key -> { .forEach(file -> loadResource(root, file, 1, 4, key -> {
try (BufferedReader reader = Files.newBufferedReader(file)) { try (BufferedReader reader = Files.newBufferedReader(file)) {
return new DatapackBiome(key, ResourcesGson.INSTANCE.fromJson(reader, DatapackBiome.Data.class)); return new DatapackBiome(key, ResourcesGson.INSTANCE.fromJson(reader, DatapackBiome.Data.class));
} }

View File

@ -2,7 +2,8 @@
import de.bluecolored.bluemap.core.util.Key; import de.bluecolored.bluemap.core.util.Key;
import de.bluecolored.bluemap.core.util.math.Color; import de.bluecolored.bluemap.core.util.math.Color;
import de.bluecolored.bluemap.core.world.Biome; import de.bluecolored.bluemap.core.world.biome.Biome;
import de.bluecolored.bluemap.core.world.biome.GrassColorModifier;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -38,6 +39,11 @@ public Color getOverlayGrassColor() {
return data.effects.grassColor; return data.effects.grassColor;
} }
@Override
public GrassColorModifier getGrassColorModifier() {
return data.effects.grassColorModifier;
}
@SuppressWarnings("FieldMayBeFinal") @SuppressWarnings("FieldMayBeFinal")
@Getter @Getter
public static class Data { public static class Data {
@ -55,6 +61,7 @@ public static class Effects {
private Color waterColor = Biome.DEFAULT.getWaterColor(); private Color waterColor = Biome.DEFAULT.getWaterColor();
private Color foliageColor = Biome.DEFAULT.getOverlayFoliageColor(); private Color foliageColor = Biome.DEFAULT.getOverlayFoliageColor();
private Color grassColor = Biome.DEFAULT.getOverlayGrassColor(); private Color grassColor = Biome.DEFAULT.getOverlayGrassColor();
private GrassColorModifier grassColorModifier = Biome.DEFAULT.getGrassColorModifier();
} }

View File

@ -134,7 +134,7 @@ private void loadResources(Path root) throws IOException {
.flatMap(ResourcePack::walk) .flatMap(ResourcePack::walk)
.filter(path -> path.getFileName().toString().endsWith(".json")) .filter(path -> path.getFileName().toString().endsWith(".json"))
.filter(Files::isRegularFile) .filter(Files::isRegularFile)
.forEach(file -> loadResource(root, file, key -> { .forEach(file -> loadResource(root, file, 1, 3, key -> {
try (BufferedReader reader = Files.newBufferedReader(file)) { try (BufferedReader reader = Files.newBufferedReader(file)) {
return ResourcesGson.INSTANCE.fromJson(reader, BlockState.class); return ResourcesGson.INSTANCE.fromJson(reader, BlockState.class);
} }
@ -150,7 +150,7 @@ private void loadResources(Path root) throws IOException {
.flatMap(ResourcePack::walk) .flatMap(ResourcePack::walk)
.filter(path -> path.getFileName().toString().endsWith(".json")) .filter(path -> path.getFileName().toString().endsWith(".json"))
.filter(Files::isRegularFile) .filter(Files::isRegularFile)
.forEach(file -> loadResource(root, file, key -> { .forEach(file -> loadResource(root, file, 1, 3, key -> {
try (BufferedReader reader = Files.newBufferedReader(file)) { try (BufferedReader reader = Files.newBufferedReader(file)) {
return ResourcesGson.INSTANCE.fromJson(reader, BlockModel.class); return ResourcesGson.INSTANCE.fromJson(reader, BlockModel.class);
} }
@ -162,7 +162,7 @@ private void loadResources(Path root) throws IOException {
walk(root.resolve("assets").resolve("minecraft").resolve("textures").resolve("colormap")) walk(root.resolve("assets").resolve("minecraft").resolve("textures").resolve("colormap"))
.filter(path -> path.getFileName().toString().endsWith(".png")) .filter(path -> path.getFileName().toString().endsWith(".png"))
.filter(Files::isRegularFile) .filter(Files::isRegularFile)
.forEach(file -> loadResource(root, file, key -> { .forEach(file -> loadResource(root, file, 1, 3, key -> {
try (InputStream in = Files.newInputStream(file)) { try (InputStream in = Files.newInputStream(file)) {
return ImageIO.read(in); return ImageIO.read(in);
} }
@ -226,7 +226,7 @@ private void loadTextures(Path root) throws IOException {
.flatMap(ResourcePack::walk) .flatMap(ResourcePack::walk)
.filter(path -> path.getFileName().toString().endsWith(".png")) .filter(path -> path.getFileName().toString().endsWith(".png"))
.filter(Files::isRegularFile) .filter(Files::isRegularFile)
.forEach(file -> loadResource(root, file, key -> { .forEach(file -> loadResource(root, file, 1, 3, key -> {
if (!usedTextures.contains(key)) return null; // don't load unused textures if (!usedTextures.contains(key)) return null; // don't load unused textures
// load image // load image

View File

@ -81,11 +81,15 @@ public Key getKey() {
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) return true; if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; if (!(o instanceof Key that)) return false;
Key that = (Key) o; if (!that.canEqual(this)) return false;
return formatted == that.formatted; return formatted == that.formatted;
} }
protected boolean canEqual(Object o) {
return o instanceof Key;
}
@Override @Override
public int hashCode() { public int hashCode() {
return formatted.hashCode(); return formatted.hashCode();

View File

@ -66,7 +66,6 @@ public BlockState(String value, Map<String, String> properties) {
this.hashed = false; this.hashed = false;
this.hash = 0; this.hash = 0;
//this.properties = Collections.unmodifiableMap(new HashMap<>(properties)); // <- not doing this to reduce object-creation
this.properties = properties; this.properties = properties;
this.propertiesArray = properties.entrySet().stream() this.propertiesArray = properties.entrySet().stream()
.map(e -> new Property(e.getKey(), e.getValue())) .map(e -> new Property(e.getKey(), e.getValue()))
@ -141,13 +140,17 @@ public int getRedstonePower() {
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (this == obj) return true; if (this == obj) return true;
if (!(obj instanceof BlockState b)) return false;
if (!(obj instanceof BlockState)) return false; if (!b.canEqual(this)) return false;
BlockState b = (BlockState) obj;
if (getFormatted() != b.getFormatted()) return false; if (getFormatted() != b.getFormatted()) return false;
return Arrays.equals(propertiesArray, b.propertiesArray); return Arrays.equals(propertiesArray, b.propertiesArray);
} }
@Override
protected boolean canEqual(Object o) {
return o instanceof BlockState;
}
@Override @Override
public int hashCode() { public int hashCode() {
if (!hashed){ if (!hashed){

View File

@ -24,6 +24,7 @@
*/ */
package de.bluecolored.bluemap.core.world; package de.bluecolored.bluemap.core.world;
import de.bluecolored.bluemap.core.world.biome.Biome;
import de.bluecolored.bluemap.core.world.block.entity.BlockEntity; import de.bluecolored.bluemap.core.world.block.entity.BlockEntity;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;

View File

@ -22,7 +22,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
package de.bluecolored.bluemap.core.world; package de.bluecolored.bluemap.core.world.biome;
import de.bluecolored.bluemap.api.debug.DebugDump; import de.bluecolored.bluemap.api.debug.DebugDump;
import de.bluecolored.bluemap.core.util.Key; import de.bluecolored.bluemap.core.util.Key;
@ -45,6 +45,8 @@ public interface Biome extends Keyed {
Color getOverlayGrassColor(); Color getOverlayGrassColor();
GrassColorModifier getGrassColorModifier();
@Getter @Getter
class Default implements Biome { class Default implements Biome {
@ -54,6 +56,7 @@ class Default implements Biome {
private final Color waterColor = new Color().set(4159204 | 0xFF000000).premultiplied(); private final Color waterColor = new Color().set(4159204 | 0xFF000000).premultiplied();
private final Color overlayFoliageColor = new Color().premultiplied(); private final Color overlayFoliageColor = new Color().premultiplied();
private final Color overlayGrassColor = new Color().premultiplied(); private final Color overlayGrassColor = new Color().premultiplied();
private final GrassColorModifier grassColorModifier = GrassColorModifier.NONE;
} }

View File

@ -0,0 +1,10 @@
package de.bluecolored.bluemap.core.world.biome;
import de.bluecolored.bluemap.core.util.math.Color;
import de.bluecolored.bluemap.core.world.block.Block;
public interface ColorModifier {
void apply(Block<?> block, Color color);
}

View File

@ -0,0 +1,48 @@
package de.bluecolored.bluemap.core.world.biome;
import de.bluecolored.bluemap.core.util.Key;
import de.bluecolored.bluemap.core.util.Keyed;
import de.bluecolored.bluemap.core.util.Registry;
import de.bluecolored.bluemap.core.util.math.Color;
import de.bluecolored.bluemap.core.world.block.Block;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
public interface GrassColorModifier extends Keyed, ColorModifier {
GrassColorModifier NONE = new Impl(Key.minecraft("none"), (Block<?> block, Color color) -> {});
GrassColorModifier DARK_FOREST = new Impl(Key.minecraft("dark_forest"), (Block<?> block, Color color) ->
color.set(((color.getInt() & 0xfefefe) + 0x28340a >> 1) | 0xff000000, true)
);
GrassColorModifier SWAMP = new Impl(Key.minecraft("swamp"), (Block<?> block, Color color) -> {
color.set(0xff6a7039, true);
/* Vanilla code with noise:
double f = FOLIAGE_NOISE.sample(block.getX() * 0.0225, block.getZ() * 0.0225, false);
if (f < -0.1) color.set(5011004)
else color.set(6975545);
*/
});
Registry<GrassColorModifier> REGISTRY = new Registry<>(
NONE,
DARK_FOREST,
SWAMP
);
@RequiredArgsConstructor
@Getter
class Impl implements GrassColorModifier {
private final Key key;
private final ColorModifier modifier;
@Override
public void apply(Block<?> block, Color color) {
modifier.apply(block, color);
}
}
}

View File

@ -25,6 +25,7 @@
package de.bluecolored.bluemap.core.world.block; package de.bluecolored.bluemap.core.world.block;
import de.bluecolored.bluemap.core.world.*; import de.bluecolored.bluemap.core.world.*;
import de.bluecolored.bluemap.core.world.biome.Biome;
import de.bluecolored.bluemap.core.world.block.entity.BlockEntity; import de.bluecolored.bluemap.core.world.block.entity.BlockEntity;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;

View File

@ -26,7 +26,7 @@
import de.bluecolored.bluemap.core.logger.Logger; import de.bluecolored.bluemap.core.logger.Logger;
import de.bluecolored.bluemap.core.util.Key; import de.bluecolored.bluemap.core.util.Key;
import de.bluecolored.bluemap.core.world.Biome; import de.bluecolored.bluemap.core.world.biome.Biome;
import de.bluecolored.bluemap.core.world.BlockState; import de.bluecolored.bluemap.core.world.BlockState;
import de.bluecolored.bluemap.core.world.DimensionType; import de.bluecolored.bluemap.core.world.DimensionType;
import de.bluecolored.bluemap.core.world.LightData; import de.bluecolored.bluemap.core.world.LightData;

View File

@ -24,7 +24,7 @@
*/ */
package de.bluecolored.bluemap.core.world.mca.chunk; package de.bluecolored.bluemap.core.world.mca.chunk;
import de.bluecolored.bluemap.core.world.Biome; import de.bluecolored.bluemap.core.world.biome.Biome;
import de.bluecolored.bluemap.core.world.mca.MCAWorld; import de.bluecolored.bluemap.core.world.mca.MCAWorld;
public class Chunk_1_15 extends Chunk_1_13 { public class Chunk_1_15 extends Chunk_1_13 {

View File

@ -26,7 +26,7 @@
import de.bluecolored.bluemap.core.logger.Logger; import de.bluecolored.bluemap.core.logger.Logger;
import de.bluecolored.bluemap.core.util.Key; import de.bluecolored.bluemap.core.util.Key;
import de.bluecolored.bluemap.core.world.Biome; import de.bluecolored.bluemap.core.world.biome.Biome;
import de.bluecolored.bluemap.core.world.BlockState; import de.bluecolored.bluemap.core.world.BlockState;
import de.bluecolored.bluemap.core.world.DimensionType; import de.bluecolored.bluemap.core.world.DimensionType;
import de.bluecolored.bluemap.core.world.LightData; import de.bluecolored.bluemap.core.world.LightData;

View File

@ -26,7 +26,7 @@
import de.bluecolored.bluemap.core.logger.Logger; import de.bluecolored.bluemap.core.logger.Logger;
import de.bluecolored.bluemap.core.util.Key; import de.bluecolored.bluemap.core.util.Key;
import de.bluecolored.bluemap.core.world.Biome; import de.bluecolored.bluemap.core.world.biome.Biome;
import de.bluecolored.bluemap.core.world.BlockState; import de.bluecolored.bluemap.core.world.BlockState;
import de.bluecolored.bluemap.core.world.DimensionType; import de.bluecolored.bluemap.core.world.DimensionType;
import de.bluecolored.bluemap.core.world.LightData; import de.bluecolored.bluemap.core.world.LightData;

View File

@ -26,7 +26,7 @@
import de.bluecolored.bluemap.core.resources.pack.datapack.DataPack; import de.bluecolored.bluemap.core.resources.pack.datapack.DataPack;
import de.bluecolored.bluemap.core.util.Key; import de.bluecolored.bluemap.core.util.Key;
import de.bluecolored.bluemap.core.world.Biome; import de.bluecolored.bluemap.core.world.biome.Biome;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
public class LegacyBiomes { public class LegacyBiomes {

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"
}
}

View File

@ -0,0 +1,68 @@
{
"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:short_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",
"minecraft:snow": "#ffffff",
"minecraft:cherry_leaves": "#ffffff",
"minecraft:white_banner": "#f9fffe",
"minecraft:light_gray_banner": "#9d9d97",
"minecraft:gray_banner": "#474f52",
"minecraft:black_banner": "#1d1d21",
"minecraft:brown_banner": "#835432",
"minecraft:red_banner": "#b02e26",
"minecraft:orange_banner": "#f9801d",
"minecraft:yellow_banner": "#fed83d",
"minecraft:lime_banner": "#80c71f",
"minecraft:green_banner": "#5e7c16",
"minecraft:cyan_banner": "#169c9c",
"minecraft:light_blue_banner": "#3ab3da",
"minecraft:blue_banner": "#3c44aa",
"minecraft:purple_banner": "#8932b8",
"minecraft:magenta_banner": "#c74ebd",
"minecraft:pink_banner": "#f38baa",
"minecraft:white_wall_banner": "#f9fffe",
"minecraft:light_gray_wall_banner": "#9d9d97",
"minecraft:gray_wall_banner": "#474f52",
"minecraft:black_wall_banner": "#1d1d21",
"minecraft:brown_wall_banner": "#835432",
"minecraft:red_wall_banner": "#b02e26",
"minecraft:orange_wall_banner": "#f9801d",
"minecraft:yellow_wall_banner": "#fed83d",
"minecraft:lime_wall_banner": "#80c71f",
"minecraft:green_wall_banner": "#5e7c16",
"minecraft:cyan_wall_banner": "#169c9c",
"minecraft:light_blue_wall_banner": "#3ab3da",
"minecraft:blue_wall_banner": "#3c44aa",
"minecraft:purple_wall_banner": "#8932b8",
"minecraft:magenta_wall_banner": "#c74ebd",
"minecraft:pink_wall_banner": "#f38baa",
"minecraft:white_shulker_box": "#f9fffe",
"minecraft:light_gray_shulker_box": "#9d9d97",
"minecraft:gray_shulker_box": "#474f52",
"minecraft:black_shulker_box": "#1d1d21",
"minecraft:brown_shulker_box": "#835432",
"minecraft:red_shulker_box": "#b02e26",
"minecraft:orange_shulker_box": "#f9801d",
"minecraft:yellow_shulker_box": "#fed83d",
"minecraft:lime_shulker_box": "#80c71f",
"minecraft:green_shulker_box": "#5e7c16",
"minecraft:cyan_shulker_box": "#169c9c",
"minecraft:light_blue_shulker_box": "#3ab3da",
"minecraft:blue_shulker_box": "#3c44aa",
"minecraft:purple_shulker_box": "#8932b8",
"minecraft:magenta_shulker_box": "#c74ebd",
"minecraft:pink_shulker_box": "#f38baa"
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/acacia_hanging_sign", "y": 180 },
"rotation=1": { "model": "minecraft:entity/acacia_hanging_sign", "y": 202 },
"rotation=2": { "model": "minecraft:entity/acacia_hanging_sign", "y": 225 },
"rotation=3": { "model": "minecraft:entity/acacia_hanging_sign", "y": 247 },
"rotation=4": { "model": "minecraft:entity/acacia_hanging_sign", "y": 270 },
"rotation=5": { "model": "minecraft:entity/acacia_hanging_sign", "y": 292 },
"rotation=6": { "model": "minecraft:entity/acacia_hanging_sign", "y": 315 },
"rotation=7": { "model": "minecraft:entity/acacia_hanging_sign", "y": 337 },
"rotation=8": { "model": "minecraft:entity/acacia_hanging_sign" },
"rotation=9": { "model": "minecraft:entity/acacia_hanging_sign", "y": 22 },
"rotation=10": { "model": "minecraft:entity/acacia_hanging_sign", "y": 45 },
"rotation=11": { "model": "minecraft:entity/acacia_hanging_sign", "y": 67 },
"rotation=12": { "model": "minecraft:entity/acacia_hanging_sign", "y": 90 },
"rotation=13": { "model": "minecraft:entity/acacia_hanging_sign", "y": 112 },
"rotation=14": { "model": "minecraft:entity/acacia_hanging_sign", "y": 135 },
"rotation=15": { "model": "minecraft:entity/acacia_hanging_sign", "y": 157 }
}
}

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=east": { "model": "minecraft:entity/acacia_wall_hanging_sign", "y": 90 },
"facing=south": { "model": "minecraft:entity/acacia_wall_hanging_sign", "y": 180 },
"facing=west": { "model": "minecraft:entity/acacia_wall_hanging_sign", "y": 270 },
"facing=north": { "model": "minecraft:entity/acacia_wall_hanging_sign" }
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/bamboo_hanging_sign", "y": 180 },
"rotation=1": { "model": "minecraft:entity/bamboo_hanging_sign", "y": 202 },
"rotation=2": { "model": "minecraft:entity/bamboo_hanging_sign", "y": 225 },
"rotation=3": { "model": "minecraft:entity/bamboo_hanging_sign", "y": 247 },
"rotation=4": { "model": "minecraft:entity/bamboo_hanging_sign", "y": 270 },
"rotation=5": { "model": "minecraft:entity/bamboo_hanging_sign", "y": 292 },
"rotation=6": { "model": "minecraft:entity/bamboo_hanging_sign", "y": 315 },
"rotation=7": { "model": "minecraft:entity/bamboo_hanging_sign", "y": 337 },
"rotation=8": { "model": "minecraft:entity/bamboo_hanging_sign" },
"rotation=9": { "model": "minecraft:entity/bamboo_hanging_sign", "y": 22 },
"rotation=10": { "model": "minecraft:entity/bamboo_hanging_sign", "y": 45 },
"rotation=11": { "model": "minecraft:entity/bamboo_hanging_sign", "y": 67 },
"rotation=12": { "model": "minecraft:entity/bamboo_hanging_sign", "y": 90 },
"rotation=13": { "model": "minecraft:entity/bamboo_hanging_sign", "y": 112 },
"rotation=14": { "model": "minecraft:entity/bamboo_hanging_sign", "y": 135 },
"rotation=15": { "model": "minecraft:entity/bamboo_hanging_sign", "y": 157 }
}
}

View File

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

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/birch_hanging_sign", "y": 180 },
"rotation=1": { "model": "minecraft:entity/birch_hanging_sign", "y": 202 },
"rotation=2": { "model": "minecraft:entity/birch_hanging_sign", "y": 225 },
"rotation=3": { "model": "minecraft:entity/birch_hanging_sign", "y": 247 },
"rotation=4": { "model": "minecraft:entity/birch_hanging_sign", "y": 270 },
"rotation=5": { "model": "minecraft:entity/birch_hanging_sign", "y": 292 },
"rotation=6": { "model": "minecraft:entity/birch_hanging_sign", "y": 315 },
"rotation=7": { "model": "minecraft:entity/birch_hanging_sign", "y": 337 },
"rotation=8": { "model": "minecraft:entity/birch_hanging_sign" },
"rotation=9": { "model": "minecraft:entity/birch_hanging_sign", "y": 22 },
"rotation=10": { "model": "minecraft:entity/birch_hanging_sign", "y": 45 },
"rotation=11": { "model": "minecraft:entity/birch_hanging_sign", "y": 67 },
"rotation=12": { "model": "minecraft:entity/birch_hanging_sign", "y": 90 },
"rotation=13": { "model": "minecraft:entity/birch_hanging_sign", "y": 112 },
"rotation=14": { "model": "minecraft:entity/birch_hanging_sign", "y": 135 },
"rotation=15": { "model": "minecraft:entity/birch_hanging_sign", "y": 157 }
}
}

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=east": { "model": "minecraft:entity/birch_wall_hanging_sign", "y": 90 },
"facing=south": { "model": "minecraft:entity/birch_wall_hanging_sign", "y": 180 },
"facing=west": { "model": "minecraft:entity/birch_wall_hanging_sign", "y": 270 },
"facing=north": { "model": "minecraft:entity/birch_wall_hanging_sign" }
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/banner", "y": 180 },
"rotation=1": { "model": "minecraft:entity/banner", "y": 202 },
"rotation=2": { "model": "minecraft:entity/banner", "y": 225 },
"rotation=3": { "model": "minecraft:entity/banner", "y": 247 },
"rotation=4": { "model": "minecraft:entity/banner", "y": 270 },
"rotation=5": { "model": "minecraft:entity/banner", "y": 292 },
"rotation=6": { "model": "minecraft:entity/banner", "y": 315 },
"rotation=7": { "model": "minecraft:entity/banner", "y": 337 },
"rotation=8": { "model": "minecraft:entity/banner" },
"rotation=9": { "model": "minecraft:entity/banner", "y": 22 },
"rotation=10": { "model": "minecraft:entity/banner", "y": 45 },
"rotation=11": { "model": "minecraft:entity/banner", "y": 67 },
"rotation=12": { "model": "minecraft:entity/banner", "y": 90 },
"rotation=13": { "model": "minecraft:entity/banner", "y": 112 },
"rotation=14": { "model": "minecraft:entity/banner", "y": 135 },
"rotation=15": { "model": "minecraft:entity/banner", "y": 157 }
}
}

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,10 @@
{
"variants": {
"facing=up": { "model": "minecraft:entity/dyed_shulker_box" },
"facing=down": { "model": "minecraft:entity/dyed_shulker_box", "x": 180 },
"facing=north": { "model": "minecraft:entity/dyed_shulker_box", "x": 90 },
"facing=east": { "model": "minecraft:entity/dyed_shulker_box", "y": 90, "x": 90 },
"facing=south": { "model": "minecraft:entity/dyed_shulker_box", "y": 180, "x": 90 },
"facing=west": { "model": "minecraft:entity/dyed_shulker_box", "y": 270, "x": 90 }
}
}

View File

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

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/banner", "y": 180 },
"rotation=1": { "model": "minecraft:entity/banner", "y": 202 },
"rotation=2": { "model": "minecraft:entity/banner", "y": 225 },
"rotation=3": { "model": "minecraft:entity/banner", "y": 247 },
"rotation=4": { "model": "minecraft:entity/banner", "y": 270 },
"rotation=5": { "model": "minecraft:entity/banner", "y": 292 },
"rotation=6": { "model": "minecraft:entity/banner", "y": 315 },
"rotation=7": { "model": "minecraft:entity/banner", "y": 337 },
"rotation=8": { "model": "minecraft:entity/banner" },
"rotation=9": { "model": "minecraft:entity/banner", "y": 22 },
"rotation=10": { "model": "minecraft:entity/banner", "y": 45 },
"rotation=11": { "model": "minecraft:entity/banner", "y": 67 },
"rotation=12": { "model": "minecraft:entity/banner", "y": 90 },
"rotation=13": { "model": "minecraft:entity/banner", "y": 112 },
"rotation=14": { "model": "minecraft:entity/banner", "y": 135 },
"rotation=15": { "model": "minecraft:entity/banner", "y": 157 }
}
}

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,10 @@
{
"variants": {
"facing=up": { "model": "minecraft:entity/dyed_shulker_box" },
"facing=down": { "model": "minecraft:entity/dyed_shulker_box", "x": 180 },
"facing=north": { "model": "minecraft:entity/dyed_shulker_box", "x": 90 },
"facing=east": { "model": "minecraft:entity/dyed_shulker_box", "y": 90, "x": 90 },
"facing=south": { "model": "minecraft:entity/dyed_shulker_box", "y": 180, "x": 90 },
"facing=west": { "model": "minecraft:entity/dyed_shulker_box", "y": 270, "x": 90 }
}
}

View File

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

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/banner", "y": 180 },
"rotation=1": { "model": "minecraft:entity/banner", "y": 202 },
"rotation=2": { "model": "minecraft:entity/banner", "y": 225 },
"rotation=3": { "model": "minecraft:entity/banner", "y": 247 },
"rotation=4": { "model": "minecraft:entity/banner", "y": 270 },
"rotation=5": { "model": "minecraft:entity/banner", "y": 292 },
"rotation=6": { "model": "minecraft:entity/banner", "y": 315 },
"rotation=7": { "model": "minecraft:entity/banner", "y": 337 },
"rotation=8": { "model": "minecraft:entity/banner" },
"rotation=9": { "model": "minecraft:entity/banner", "y": 22 },
"rotation=10": { "model": "minecraft:entity/banner", "y": 45 },
"rotation=11": { "model": "minecraft:entity/banner", "y": 67 },
"rotation=12": { "model": "minecraft:entity/banner", "y": 90 },
"rotation=13": { "model": "minecraft:entity/banner", "y": 112 },
"rotation=14": { "model": "minecraft:entity/banner", "y": 135 },
"rotation=15": { "model": "minecraft:entity/banner", "y": 157 }
}
}

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,10 @@
{
"variants": {
"facing=up": { "model": "minecraft:entity/dyed_shulker_box" },
"facing=down": { "model": "minecraft:entity/dyed_shulker_box", "x": 180 },
"facing=north": { "model": "minecraft:entity/dyed_shulker_box", "x": 90 },
"facing=east": { "model": "minecraft:entity/dyed_shulker_box", "y": 90, "x": 90 },
"facing=south": { "model": "minecraft:entity/dyed_shulker_box", "y": 180, "x": 90 },
"facing=west": { "model": "minecraft:entity/dyed_shulker_box", "y": 270, "x": 90 }
}
}

View File

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

View File

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

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/cherry_hanging_sign", "y": 180 },
"rotation=1": { "model": "minecraft:entity/cherry_hanging_sign", "y": 202 },
"rotation=2": { "model": "minecraft:entity/cherry_hanging_sign", "y": 225 },
"rotation=3": { "model": "minecraft:entity/cherry_hanging_sign", "y": 247 },
"rotation=4": { "model": "minecraft:entity/cherry_hanging_sign", "y": 270 },
"rotation=5": { "model": "minecraft:entity/cherry_hanging_sign", "y": 292 },
"rotation=6": { "model": "minecraft:entity/cherry_hanging_sign", "y": 315 },
"rotation=7": { "model": "minecraft:entity/cherry_hanging_sign", "y": 337 },
"rotation=8": { "model": "minecraft:entity/cherry_hanging_sign" },
"rotation=9": { "model": "minecraft:entity/cherry_hanging_sign", "y": 22 },
"rotation=10": { "model": "minecraft:entity/cherry_hanging_sign", "y": 45 },
"rotation=11": { "model": "minecraft:entity/cherry_hanging_sign", "y": 67 },
"rotation=12": { "model": "minecraft:entity/cherry_hanging_sign", "y": 90 },
"rotation=13": { "model": "minecraft:entity/cherry_hanging_sign", "y": 112 },
"rotation=14": { "model": "minecraft:entity/cherry_hanging_sign", "y": 135 },
"rotation=15": { "model": "minecraft:entity/cherry_hanging_sign", "y": 157 }
}
}

View File

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

View File

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

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/creeper_head", "y": 180 },
"rotation=1": { "model": "minecraft:entity/creeper_head", "y": 202 },
"rotation=2": { "model": "minecraft:entity/creeper_head", "y": 225 },
"rotation=3": { "model": "minecraft:entity/creeper_head", "y": 247 },
"rotation=4": { "model": "minecraft:entity/creeper_head", "y": 270 },
"rotation=5": { "model": "minecraft:entity/creeper_head", "y": 292 },
"rotation=6": { "model": "minecraft:entity/creeper_head", "y": 315 },
"rotation=7": { "model": "minecraft:entity/creeper_head", "y": 337 },
"rotation=8": { "model": "minecraft:entity/creeper_head" },
"rotation=9": { "model": "minecraft:entity/creeper_head", "y": 22 },
"rotation=10": { "model": "minecraft:entity/creeper_head", "y": 45 },
"rotation=11": { "model": "minecraft:entity/creeper_head", "y": 67 },
"rotation=12": { "model": "minecraft:entity/creeper_head", "y": 90 },
"rotation=13": { "model": "minecraft:entity/creeper_head", "y": 112 },
"rotation=14": { "model": "minecraft:entity/creeper_head", "y": 135 },
"rotation=15": { "model": "minecraft:entity/creeper_head", "y": 157 }
}
}

View File

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

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/crimson_hanging_sign", "y": 180 },
"rotation=1": { "model": "minecraft:entity/crimson_hanging_sign", "y": 202 },
"rotation=2": { "model": "minecraft:entity/crimson_hanging_sign", "y": 225 },
"rotation=3": { "model": "minecraft:entity/crimson_hanging_sign", "y": 247 },
"rotation=4": { "model": "minecraft:entity/crimson_hanging_sign", "y": 270 },
"rotation=5": { "model": "minecraft:entity/crimson_hanging_sign", "y": 292 },
"rotation=6": { "model": "minecraft:entity/crimson_hanging_sign", "y": 315 },
"rotation=7": { "model": "minecraft:entity/crimson_hanging_sign", "y": 337 },
"rotation=8": { "model": "minecraft:entity/crimson_hanging_sign" },
"rotation=9": { "model": "minecraft:entity/crimson_hanging_sign", "y": 22 },
"rotation=10": { "model": "minecraft:entity/crimson_hanging_sign", "y": 45 },
"rotation=11": { "model": "minecraft:entity/crimson_hanging_sign", "y": 67 },
"rotation=12": { "model": "minecraft:entity/crimson_hanging_sign", "y": 90 },
"rotation=13": { "model": "minecraft:entity/crimson_hanging_sign", "y": 112 },
"rotation=14": { "model": "minecraft:entity/crimson_hanging_sign", "y": 135 },
"rotation=15": { "model": "minecraft:entity/crimson_hanging_sign", "y": 157 }
}
}

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=east": { "model": "minecraft:entity/crimson_wall_hanging_sign", "y": 90 },
"facing=south": { "model": "minecraft:entity/crimson_wall_hanging_sign", "y": 180 },
"facing=west": { "model": "minecraft:entity/crimson_wall_hanging_sign", "y": 270 },
"facing=north": { "model": "minecraft:entity/crimson_wall_hanging_sign" }
}
}

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/banner", "y": 180 },
"rotation=1": { "model": "minecraft:entity/banner", "y": 202 },
"rotation=2": { "model": "minecraft:entity/banner", "y": 225 },
"rotation=3": { "model": "minecraft:entity/banner", "y": 247 },
"rotation=4": { "model": "minecraft:entity/banner", "y": 270 },
"rotation=5": { "model": "minecraft:entity/banner", "y": 292 },
"rotation=6": { "model": "minecraft:entity/banner", "y": 315 },
"rotation=7": { "model": "minecraft:entity/banner", "y": 337 },
"rotation=8": { "model": "minecraft:entity/banner" },
"rotation=9": { "model": "minecraft:entity/banner", "y": 22 },
"rotation=10": { "model": "minecraft:entity/banner", "y": 45 },
"rotation=11": { "model": "minecraft:entity/banner", "y": 67 },
"rotation=12": { "model": "minecraft:entity/banner", "y": 90 },
"rotation=13": { "model": "minecraft:entity/banner", "y": 112 },
"rotation=14": { "model": "minecraft:entity/banner", "y": 135 },
"rotation=15": { "model": "minecraft:entity/banner", "y": 157 }
}
}

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,10 @@
{
"variants": {
"facing=up": { "model": "minecraft:entity/dyed_shulker_box" },
"facing=down": { "model": "minecraft:entity/dyed_shulker_box", "x": 180 },
"facing=north": { "model": "minecraft:entity/dyed_shulker_box", "x": 90 },
"facing=east": { "model": "minecraft:entity/dyed_shulker_box", "y": 90, "x": 90 },
"facing=south": { "model": "minecraft:entity/dyed_shulker_box", "y": 180, "x": 90 },
"facing=west": { "model": "minecraft:entity/dyed_shulker_box", "y": 270, "x": 90 }
}
}

View File

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

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/dark_oak_hanging_sign", "y": 180 },
"rotation=1": { "model": "minecraft:entity/dark_oak_hanging_sign", "y": 202 },
"rotation=2": { "model": "minecraft:entity/dark_oak_hanging_sign", "y": 225 },
"rotation=3": { "model": "minecraft:entity/dark_oak_hanging_sign", "y": 247 },
"rotation=4": { "model": "minecraft:entity/dark_oak_hanging_sign", "y": 270 },
"rotation=5": { "model": "minecraft:entity/dark_oak_hanging_sign", "y": 292 },
"rotation=6": { "model": "minecraft:entity/dark_oak_hanging_sign", "y": 315 },
"rotation=7": { "model": "minecraft:entity/dark_oak_hanging_sign", "y": 337 },
"rotation=8": { "model": "minecraft:entity/dark_oak_hanging_sign" },
"rotation=9": { "model": "minecraft:entity/dark_oak_hanging_sign", "y": 22 },
"rotation=10": { "model": "minecraft:entity/dark_oak_hanging_sign", "y": 45 },
"rotation=11": { "model": "minecraft:entity/dark_oak_hanging_sign", "y": 67 },
"rotation=12": { "model": "minecraft:entity/dark_oak_hanging_sign", "y": 90 },
"rotation=13": { "model": "minecraft:entity/dark_oak_hanging_sign", "y": 112 },
"rotation=14": { "model": "minecraft:entity/dark_oak_hanging_sign", "y": 135 },
"rotation=15": { "model": "minecraft:entity/dark_oak_hanging_sign", "y": 157 }
}
}

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=east": { "model": "minecraft:entity/dark_oak_wall_hanging_sign", "y": 90 },
"facing=south": { "model": "minecraft:entity/dark_oak_wall_hanging_sign", "y": 180 },
"facing=west": { "model": "minecraft:entity/dark_oak_wall_hanging_sign", "y": 270 },
"facing=north": { "model": "minecraft:entity/dark_oak_wall_hanging_sign" }
}
}

View File

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

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/dragon_head", "y": 180 },
"rotation=1": { "model": "minecraft:entity/dragon_head", "y": 202 },
"rotation=2": { "model": "minecraft:entity/dragon_head", "y": 225 },
"rotation=3": { "model": "minecraft:entity/dragon_head", "y": 247 },
"rotation=4": { "model": "minecraft:entity/dragon_head", "y": 270 },
"rotation=5": { "model": "minecraft:entity/dragon_head", "y": 292 },
"rotation=6": { "model": "minecraft:entity/dragon_head", "y": 315 },
"rotation=7": { "model": "minecraft:entity/dragon_head", "y": 337 },
"rotation=8": { "model": "minecraft:entity/dragon_head" },
"rotation=9": { "model": "minecraft:entity/dragon_head", "y": 22 },
"rotation=10": { "model": "minecraft:entity/dragon_head", "y": 45 },
"rotation=11": { "model": "minecraft:entity/dragon_head", "y": 67 },
"rotation=12": { "model": "minecraft:entity/dragon_head", "y": 90 },
"rotation=13": { "model": "minecraft:entity/dragon_head", "y": 112 },
"rotation=14": { "model": "minecraft:entity/dragon_head", "y": 135 },
"rotation=15": { "model": "minecraft:entity/dragon_head", "y": 157 }
}
}

View File

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

View File

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

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/banner", "y": 180 },
"rotation=1": { "model": "minecraft:entity/banner", "y": 202 },
"rotation=2": { "model": "minecraft:entity/banner", "y": 225 },
"rotation=3": { "model": "minecraft:entity/banner", "y": 247 },
"rotation=4": { "model": "minecraft:entity/banner", "y": 270 },
"rotation=5": { "model": "minecraft:entity/banner", "y": 292 },
"rotation=6": { "model": "minecraft:entity/banner", "y": 315 },
"rotation=7": { "model": "minecraft:entity/banner", "y": 337 },
"rotation=8": { "model": "minecraft:entity/banner" },
"rotation=9": { "model": "minecraft:entity/banner", "y": 22 },
"rotation=10": { "model": "minecraft:entity/banner", "y": 45 },
"rotation=11": { "model": "minecraft:entity/banner", "y": 67 },
"rotation=12": { "model": "minecraft:entity/banner", "y": 90 },
"rotation=13": { "model": "minecraft:entity/banner", "y": 112 },
"rotation=14": { "model": "minecraft:entity/banner", "y": 135 },
"rotation=15": { "model": "minecraft:entity/banner", "y": 157 }
}
}

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,10 @@
{
"variants": {
"facing=up": { "model": "minecraft:entity/dyed_shulker_box" },
"facing=down": { "model": "minecraft:entity/dyed_shulker_box", "x": 180 },
"facing=north": { "model": "minecraft:entity/dyed_shulker_box", "x": 90 },
"facing=east": { "model": "minecraft:entity/dyed_shulker_box", "y": 90, "x": 90 },
"facing=south": { "model": "minecraft:entity/dyed_shulker_box", "y": 180, "x": 90 },
"facing=west": { "model": "minecraft:entity/dyed_shulker_box", "y": 270, "x": 90 }
}
}

View File

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

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/banner", "y": 180 },
"rotation=1": { "model": "minecraft:entity/banner", "y": 202 },
"rotation=2": { "model": "minecraft:entity/banner", "y": 225 },
"rotation=3": { "model": "minecraft:entity/banner", "y": 247 },
"rotation=4": { "model": "minecraft:entity/banner", "y": 270 },
"rotation=5": { "model": "minecraft:entity/banner", "y": 292 },
"rotation=6": { "model": "minecraft:entity/banner", "y": 315 },
"rotation=7": { "model": "minecraft:entity/banner", "y": 337 },
"rotation=8": { "model": "minecraft:entity/banner" },
"rotation=9": { "model": "minecraft:entity/banner", "y": 22 },
"rotation=10": { "model": "minecraft:entity/banner", "y": 45 },
"rotation=11": { "model": "minecraft:entity/banner", "y": 67 },
"rotation=12": { "model": "minecraft:entity/banner", "y": 90 },
"rotation=13": { "model": "minecraft:entity/banner", "y": 112 },
"rotation=14": { "model": "minecraft:entity/banner", "y": 135 },
"rotation=15": { "model": "minecraft:entity/banner", "y": 157 }
}
}

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,10 @@
{
"variants": {
"facing=up": { "model": "minecraft:entity/dyed_shulker_box" },
"facing=down": { "model": "minecraft:entity/dyed_shulker_box", "x": 180 },
"facing=north": { "model": "minecraft:entity/dyed_shulker_box", "x": 90 },
"facing=east": { "model": "minecraft:entity/dyed_shulker_box", "y": 90, "x": 90 },
"facing=south": { "model": "minecraft:entity/dyed_shulker_box", "y": 180, "x": 90 },
"facing=west": { "model": "minecraft:entity/dyed_shulker_box", "y": 270, "x": 90 }
}
}

View File

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

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/jungle_hanging_sign", "y": 180 },
"rotation=1": { "model": "minecraft:entity/jungle_hanging_sign", "y": 202 },
"rotation=2": { "model": "minecraft:entity/jungle_hanging_sign", "y": 225 },
"rotation=3": { "model": "minecraft:entity/jungle_hanging_sign", "y": 247 },
"rotation=4": { "model": "minecraft:entity/jungle_hanging_sign", "y": 270 },
"rotation=5": { "model": "minecraft:entity/jungle_hanging_sign", "y": 292 },
"rotation=6": { "model": "minecraft:entity/jungle_hanging_sign", "y": 315 },
"rotation=7": { "model": "minecraft:entity/jungle_hanging_sign", "y": 337 },
"rotation=8": { "model": "minecraft:entity/jungle_hanging_sign" },
"rotation=9": { "model": "minecraft:entity/jungle_hanging_sign", "y": 22 },
"rotation=10": { "model": "minecraft:entity/jungle_hanging_sign", "y": 45 },
"rotation=11": { "model": "minecraft:entity/jungle_hanging_sign", "y": 67 },
"rotation=12": { "model": "minecraft:entity/jungle_hanging_sign", "y": 90 },
"rotation=13": { "model": "minecraft:entity/jungle_hanging_sign", "y": 112 },
"rotation=14": { "model": "minecraft:entity/jungle_hanging_sign", "y": 135 },
"rotation=15": { "model": "minecraft:entity/jungle_hanging_sign", "y": 157 }
}
}

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=east": { "model": "minecraft:entity/jungle_wall_hanging_sign", "y": 90 },
"facing=south": { "model": "minecraft:entity/jungle_wall_hanging_sign", "y": 180 },
"facing=west": { "model": "minecraft:entity/jungle_wall_hanging_sign", "y": 270 },
"facing=north": { "model": "minecraft:entity/jungle_wall_hanging_sign" }
}
}

View File

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

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/banner", "y": 180 },
"rotation=1": { "model": "minecraft:entity/banner", "y": 202 },
"rotation=2": { "model": "minecraft:entity/banner", "y": 225 },
"rotation=3": { "model": "minecraft:entity/banner", "y": 247 },
"rotation=4": { "model": "minecraft:entity/banner", "y": 270 },
"rotation=5": { "model": "minecraft:entity/banner", "y": 292 },
"rotation=6": { "model": "minecraft:entity/banner", "y": 315 },
"rotation=7": { "model": "minecraft:entity/banner", "y": 337 },
"rotation=8": { "model": "minecraft:entity/banner" },
"rotation=9": { "model": "minecraft:entity/banner", "y": 22 },
"rotation=10": { "model": "minecraft:entity/banner", "y": 45 },
"rotation=11": { "model": "minecraft:entity/banner", "y": 67 },
"rotation=12": { "model": "minecraft:entity/banner", "y": 90 },
"rotation=13": { "model": "minecraft:entity/banner", "y": 112 },
"rotation=14": { "model": "minecraft:entity/banner", "y": 135 },
"rotation=15": { "model": "minecraft:entity/banner", "y": 157 }
}
}

View File

@ -0,0 +1,10 @@
{
"variants": {
"facing=up": { "model": "minecraft:entity/dyed_shulker_box" },
"facing=down": { "model": "minecraft:entity/dyed_shulker_box", "x": 180 },
"facing=north": { "model": "minecraft:entity/dyed_shulker_box", "x": 90 },
"facing=east": { "model": "minecraft:entity/dyed_shulker_box", "y": 90, "x": 90 },
"facing=south": { "model": "minecraft:entity/dyed_shulker_box", "y": 180, "x": 90 },
"facing=west": { "model": "minecraft:entity/dyed_shulker_box", "y": 270, "x": 90 }
}
}

View File

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

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/banner", "y": 180 },
"rotation=1": { "model": "minecraft:entity/banner", "y": 202 },
"rotation=2": { "model": "minecraft:entity/banner", "y": 225 },
"rotation=3": { "model": "minecraft:entity/banner", "y": 247 },
"rotation=4": { "model": "minecraft:entity/banner", "y": 270 },
"rotation=5": { "model": "minecraft:entity/banner", "y": 292 },
"rotation=6": { "model": "minecraft:entity/banner", "y": 315 },
"rotation=7": { "model": "minecraft:entity/banner", "y": 337 },
"rotation=8": { "model": "minecraft:entity/banner" },
"rotation=9": { "model": "minecraft:entity/banner", "y": 22 },
"rotation=10": { "model": "minecraft:entity/banner", "y": 45 },
"rotation=11": { "model": "minecraft:entity/banner", "y": 67 },
"rotation=12": { "model": "minecraft:entity/banner", "y": 90 },
"rotation=13": { "model": "minecraft:entity/banner", "y": 112 },
"rotation=14": { "model": "minecraft:entity/banner", "y": 135 },
"rotation=15": { "model": "minecraft:entity/banner", "y": 157 }
}
}

View File

@ -0,0 +1,10 @@
{
"variants": {
"facing=up": { "model": "minecraft:entity/dyed_shulker_box" },
"facing=down": { "model": "minecraft:entity/dyed_shulker_box", "x": 180 },
"facing=north": { "model": "minecraft:entity/dyed_shulker_box", "x": 90 },
"facing=east": { "model": "minecraft:entity/dyed_shulker_box", "y": 90, "x": 90 },
"facing=south": { "model": "minecraft:entity/dyed_shulker_box", "y": 180, "x": 90 },
"facing=west": { "model": "minecraft:entity/dyed_shulker_box", "y": 270, "x": 90 }
}
}

View File

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

View File

@ -0,0 +1,20 @@
{
"variants": {
"rotation=0": { "model": "minecraft:entity/banner", "y": 180 },
"rotation=1": { "model": "minecraft:entity/banner", "y": 202 },
"rotation=2": { "model": "minecraft:entity/banner", "y": 225 },
"rotation=3": { "model": "minecraft:entity/banner", "y": 247 },
"rotation=4": { "model": "minecraft:entity/banner", "y": 270 },
"rotation=5": { "model": "minecraft:entity/banner", "y": 292 },
"rotation=6": { "model": "minecraft:entity/banner", "y": 315 },
"rotation=7": { "model": "minecraft:entity/banner", "y": 337 },
"rotation=8": { "model": "minecraft:entity/banner" },
"rotation=9": { "model": "minecraft:entity/banner", "y": 22 },
"rotation=10": { "model": "minecraft:entity/banner", "y": 45 },
"rotation=11": { "model": "minecraft:entity/banner", "y": 67 },
"rotation=12": { "model": "minecraft:entity/banner", "y": 90 },
"rotation=13": { "model": "minecraft:entity/banner", "y": 112 },
"rotation=14": { "model": "minecraft:entity/banner", "y": 135 },
"rotation=15": { "model": "minecraft:entity/banner", "y": 157 }
}
}

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 }
}
}

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