> cir) {
cir.getReturnValue().thenAccept(v -> EBEEvents.RESOURCE_RELOAD.invoker().run());
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/mixin/ShulkerBoxBlockEntityMixin.java
================================================
package foundationgames.enhancedblockentities.mixin;
import foundationgames.enhancedblockentities.util.duck.AppearanceStateHolder;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.block.entity.ShulkerBoxBlockEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(ShulkerBoxBlockEntity.class)
public abstract class ShulkerBoxBlockEntityMixin extends BlockEntity implements AppearanceStateHolder {
@Shadow public abstract float getAnimationProgress(float delta);
@Unique private int enhanced_bes$modelState = 0;
@Unique private int enhanced_bes$renderState = 0;
public ShulkerBoxBlockEntityMixin(BlockEntityType> type, BlockPos pos, BlockState state) {
super(type, pos, state);
}
@Inject(method = "updateAnimation", at = @At("TAIL"))
private void enhanced_bes$updateModelState(World world, BlockPos pos, BlockState state, CallbackInfo ci) {
int mState = this.getAnimationProgress(0) > 0 ? 1 : 0;
if (mState != enhanced_bes$modelState) updateAppearanceState(mState, world, pos);
}
@Override
public int getModelState() {
return enhanced_bes$modelState;
}
@Override
public void setModelState(int state) {
this.enhanced_bes$modelState = state;
}
@Override
public int getRenderState() {
return enhanced_bes$renderState;
}
@Override
public void setRenderState(int state) {
this.enhanced_bes$renderState = state;
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/mixin/SignEditScreenMixin.java
================================================
package foundationgames.enhancedblockentities.mixin;
import foundationgames.enhancedblockentities.EnhancedBlockEntities;
import foundationgames.enhancedblockentities.EnhancedBlockEntityRegistry;
import foundationgames.enhancedblockentities.util.EBEUtil;
import net.minecraft.block.BlockState;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.ingame.SignEditScreen;
import net.minecraft.client.render.OverlayTexture;
import net.minecraft.state.property.Properties;
import net.minecraft.util.math.Direction;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(SignEditScreen.class)
public class SignEditScreenMixin {
@Inject(method = "renderSignBackground", at = @At("HEAD"), cancellable = true)
private void enhanced_bes$renderBakedModelSign(DrawContext context, CallbackInfo ci) {
BlockState state = ((SignEditScreen) (Object) this).blockEntity.getCachedState();
boolean enhanceSigns = EnhancedBlockEntities.CONFIG.renderEnhancedSigns;
if (!EnhancedBlockEntityRegistry.BLOCKS.contains(state.getBlock())) return;
if (enhanceSigns) {
var models = MinecraftClient.getInstance().getBakedModelManager().getBlockModels();
var buffers = MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers();
float up = 0;
if (state.contains(Properties.HORIZONTAL_FACING)) {
state = state.with(Properties.HORIZONTAL_FACING, Direction.SOUTH);
up += 5f/16;
} else if (state.contains(Properties.ROTATION)) {
state = state.with(Properties.ROTATION, 0);
}
var signModel = models.getModel(state);
var matrices = context.getMatrices();
matrices.push();
matrices.translate(0, 31, -50);
matrices.scale(93.75f, -93.75f, 93.75f);
matrices.translate(-0.5, up - 0.5, 0);
EBEUtil.renderBakedModel(buffers, state, matrices, signModel, 15728880, OverlayTexture.DEFAULT_UV);
matrices.pop();
ci.cancel();
}
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/mixin/VideoOptionsScreenMixin.java
================================================
package foundationgames.enhancedblockentities.mixin;
import foundationgames.enhancedblockentities.config.gui.option.ConfigButtonOption;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.option.VideoOptionsScreen;
import net.minecraft.client.option.SimpleOption;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyArg;
@Mixin(VideoOptionsScreen.class)
public abstract class VideoOptionsScreenMixin extends Screen {
protected VideoOptionsScreenMixin(Text title) {
super(title);
}
@ModifyArg(
method = "addOptions",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/client/gui/widget/OptionListWidget;addAll([Lnet/minecraft/client/option/SimpleOption;)V"
),
index = 0
)
private SimpleOption>[] enhanced_bes$addEBEOptionButton(SimpleOption>[] old) {
var options = new SimpleOption>[old.length + 1];
System.arraycopy(old, 0, options, 0, old.length);
options[options.length - 1] = ConfigButtonOption.getOption(this);
return options;
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/mixin/WorldRendererMixin.java
================================================
package foundationgames.enhancedblockentities.mixin;
import foundationgames.enhancedblockentities.util.WorldUtil;
import foundationgames.enhancedblockentities.util.duck.ChunkRebuildTaskAccess;
import net.minecraft.client.render.WorldRenderer;
import net.minecraft.client.render.chunk.ChunkBuilder;
import net.minecraft.util.math.ChunkSectionPos;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(WorldRenderer.class)
public class WorldRendererMixin {
@ModifyVariable(method = "updateChunks",
at = @At(value = "INVOKE", shift = At.Shift.BEFORE, ordinal = 0, target = "Lnet/minecraft/client/option/SimpleOption;getValue()Ljava/lang/Object;"),
index = 7)
private ChunkBuilder.BuiltChunk enhanced_bes$addPostRebuildTask(ChunkBuilder.BuiltChunk chunk) {
if (WorldUtil.CHUNK_UPDATE_TASKS.size() > 0) {
var pos = ChunkSectionPos.from(chunk.getOrigin());
if (WorldUtil.CHUNK_UPDATE_TASKS.containsKey(pos)) {
var task = WorldUtil.CHUNK_UPDATE_TASKS.remove(pos);
((ChunkRebuildTaskAccess) chunk).enhanced_bes$setTaskAfterRebuild(task);
}
}
return chunk;
}
@Inject(method = "addBuiltChunk", at = @At("HEAD"))
private void enhanced_bes$runPostRebuildTask(ChunkBuilder.BuiltChunk chunk, CallbackInfo ci) {
((ChunkRebuildTaskAccess) chunk).enhanced_bes$runAfterRebuildTask();
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/mixin/compat/sodium/RenderSectionManagerMixin.java
================================================
package foundationgames.enhancedblockentities.mixin.compat.sodium;
import foundationgames.enhancedblockentities.util.WorldUtil;
import foundationgames.enhancedblockentities.util.duck.ChunkRebuildTaskAccess;
import net.caffeinemc.mods.sodium.client.render.chunk.RenderSection;
import net.caffeinemc.mods.sodium.client.render.chunk.RenderSectionManager;
import net.caffeinemc.mods.sodium.client.render.chunk.compile.BuilderTaskOutput;
import net.minecraft.util.math.ChunkSectionPos;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
/**
* Adapted from {@link foundationgames.enhancedblockentities.mixin.WorldRendererMixin}
*/
@Pseudo
@Mixin(value = RenderSectionManager.class, remap = false)
public class RenderSectionManagerMixin {
@ModifyVariable(method = "submitSectionTasks(Lnet/caffeinemc/mods/sodium/client/render/chunk/compile/executor/ChunkJobCollector;Lnet/caffeinemc/mods/sodium/client/render/chunk/ChunkUpdateType;Z)V",
at = @At(value = "INVOKE", shift = At.Shift.BEFORE, ordinal = 0, target = "Lnet/caffeinemc/mods/sodium/client/render/chunk/RenderSection;isDisposed()Z"),
index = 5, require = 0
)
private RenderSection enhanced_bes$compat_sodium$cacheUpdatingChunk(RenderSection section) {
if (WorldUtil.CHUNK_UPDATE_TASKS.size() > 0) {
var pos = ChunkSectionPos.from(section.getChunkX(), section.getChunkY(), section.getChunkZ());
if (WorldUtil.CHUNK_UPDATE_TASKS.containsKey(pos)) {
var task = WorldUtil.CHUNK_UPDATE_TASKS.remove(pos);
((ChunkRebuildTaskAccess) section).enhanced_bes$setTaskAfterRebuild(task);
}
}
return section;
}
@ModifyVariable(method = "processChunkBuildResults",
at = @At(value = "INVOKE_ASSIGN", shift = At.Shift.BEFORE, ordinal = 0, target = "Lnet/caffeinemc/mods/sodium/client/render/chunk/RenderSection;getTaskCancellationToken()Lnet/caffeinemc/mods/sodium/client/util/task/CancellationToken;"),
index = 5, require = 0
)
private BuilderTaskOutput enhanced_bes$runPostRebuildTask(BuilderTaskOutput output) {
((ChunkRebuildTaskAccess) output.render).enhanced_bes$runAfterRebuildTask();
return output;
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/mixin/compat/sodium/RenderSectionMixin.java
================================================
package foundationgames.enhancedblockentities.mixin.compat.sodium;
import foundationgames.enhancedblockentities.util.duck.ChunkRebuildTaskAccess;
import net.caffeinemc.mods.sodium.client.render.chunk.RenderSection;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.Unique;
/**
* Adapted from {@link foundationgames.enhancedblockentities.mixin.BuiltChunkMixin}
*/
@Pseudo
@Mixin(value = RenderSection.class, remap = false)
public class RenderSectionMixin implements ChunkRebuildTaskAccess {
private @Unique @Nullable Runnable enhanced_bes$taskAfterRebuild = null;
@Override
public Runnable enhanced_bes$getTaskAfterRebuild() {
return enhanced_bes$taskAfterRebuild;
}
@Override
public void enhanced_bes$setTaskAfterRebuild(Runnable task) {
enhanced_bes$taskAfterRebuild = task;
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/util/ConvUtil.java
================================================
package foundationgames.enhancedblockentities.util;
public enum ConvUtil {;
public static boolean bool(String bool) {
return bool != null && bool.equalsIgnoreCase("true");
}
public static boolean defaultedBool(String bool, boolean defaultVal) {
return bool == null ? defaultVal : bool(bool);
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/util/DateUtil.java
================================================
package foundationgames.enhancedblockentities.util;
import foundationgames.enhancedblockentities.EnhancedBlockEntities;
import net.minecraft.client.render.block.entity.ChestBlockEntityRenderer;
public enum DateUtil {;
public static boolean isChristmas() {
String config = EnhancedBlockEntities.CONFIG.christmasChests;
if (config.equals("disabled")) return false;
if (config.equals("forced")) return true;
return ChestBlockEntityRenderer.isAroundChristmas();
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/util/EBEUtil.java
================================================
package foundationgames.enhancedblockentities.util;
import foundationgames.enhancedblockentities.EnhancedBlockEntities;
import net.fabricmc.fabric.api.renderer.v1.model.ModelHelper;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.block.BlockState;
import net.minecraft.client.render.RenderLayers;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.render.model.BakedQuad;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.resource.DefaultResourcePack;
import net.minecraft.resource.ResourcePack;
import net.minecraft.util.DyeColor;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.random.Random;
import java.io.IOException;
import java.nio.file.Files;
public enum EBEUtil {;
private static final Random dummy = Random.create();
// Contains all dye colors, and null
public static final DyeColor[] DEFAULTED_DYE_COLORS;
// All directions except up and down
public static final Direction[] HORIZONTAL_DIRECTIONS;
static {
var dColors = DyeColor.values();
DEFAULTED_DYE_COLORS = new DyeColor[dColors.length + 1];
System.arraycopy(dColors, 0, DEFAULTED_DYE_COLORS, 0, dColors.length);
HORIZONTAL_DIRECTIONS = new Direction[] {Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.EAST};
}
public static int angle(Direction dir) {
int h = dir.getHorizontalQuarterTurns();
return h >= 0 ? h * 90 : 0;
}
public static void renderBakedModel(VertexConsumerProvider vertexConsumers, BlockState state, MatrixStack matrices, BakedModel model, int light, int overlay) {
VertexConsumer vertices = vertexConsumers.getBuffer(RenderLayers.getEntityBlockLayer(state));
for (int i = 0; i <= 6; i++) {
for (BakedQuad q : model.getQuads(null, ModelHelper.faceFromIndex(i), dummy)) {
vertices.quad(matrices.peek(), q, 1, 1, 1, 1, light, overlay);
}
}
}
public static boolean isVanillaResourcePack(ResourcePack pack) {
return (pack instanceof DefaultResourcePack) ||
// Terrible quilt compat hack
("org.quiltmc.qsl.resource.loader.api.GroupResourcePack$Wrapped".equals(pack.getClass().getName()));
}
public static Identifier id(String path) {
return Identifier.of(EnhancedBlockEntities.NAMESPACE, path);
}
public static final String DUMP_FOLDER_NAME = "enhanced_bes_dump";
public static void dumpResources() throws IOException {
var path = FabricLoader.getInstance().getGameDir().resolve(DUMP_FOLDER_NAME);
if (!Files.exists(path)) {
Files.createDirectory(path);
}
ResourceUtil.dumpAllPacks(path);
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/util/ExecutableRunnableHashSet.java
================================================
package foundationgames.enhancedblockentities.util;
import java.util.HashSet;
public class ExecutableRunnableHashSet extends HashSet implements Runnable {
@Override
public void run() {
this.forEach(Runnable::run);
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/util/GuiUtil.java
================================================
package foundationgames.enhancedblockentities.util;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
public enum GuiUtil {;
public static Text shorten(String text, final int maxLength, Formatting ... formats) {
String[] words = text.split(" ");
StringBuilder line = new StringBuilder();
StringBuilder result = new StringBuilder();
for (int i = 0; i < words.length; i++) {
var word = words[i];
line.append(word).append(" ");
if (line.length() > maxLength) {
if (i < words.length - 1) {
line.append("\n");
}
result.append(line);
line = new StringBuilder();
}
}
if (line.length() > 0) result.append(line);
return Text.literal(result.toString()).formatted(formats);
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/util/ResourceUtil.java
================================================
package foundationgames.enhancedblockentities.util;
import foundationgames.enhancedblockentities.EnhancedBlockEntities;
import foundationgames.enhancedblockentities.client.resource.EBEPack;
import foundationgames.enhancedblockentities.client.resource.template.TemplateProvider;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.ModContainer;
import net.minecraft.block.DecoratedPotPattern;
import net.minecraft.client.render.TexturedRenderLayers;
import net.minecraft.registry.RegistryKey;
import net.minecraft.util.DyeColor;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.Direction;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.nio.file.CopyOption;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
public enum ResourceUtil {;
private static EBEPack BASE_PACK;
private static EBEPack TOP_LEVEL_PACK;
public static void addChestItemDefinition(String chestName, String centerChest, boolean hasChristmas, EBEPack pack) {
pack.addTemplateResource(Identifier.of("items/"+chestName+".json"),
t -> t.load(hasChristmas ? "item/chest_item.json" : "item/chest_item_no_christmas.json",
d -> d.def("chest", centerChest)));
}
public static void addBedItemDefinition(String bedColor, EBEPack pack) {
pack.addTemplateResource(Identifier.of("items/"+bedColor+"_bed.json"),
t -> t.load("item/bed.json",
d -> d.def("head", bedColor + "_bed_head").def("foot", bedColor + "_bed_foot")));
pack.addTemplateResource(Identifier.of("models/item/"+bedColor+"_bed_head.json"),
t -> t.load("model/bed_head_item.json", d -> d.def("bed", bedColor)));
pack.addTemplateResource(Identifier.of("models/item/"+bedColor+"_bed_foot.json"),
t -> t.load("model/bed_foot_item.json", d -> d.def("bed", bedColor)));
}
private static String list(String ... els) {
return String.join(",", els);
}
private static String kv(String k, String v) {
return String.format("\""+k+"\":\""+v+"\"");
}
private static String kv(String k, int v) {
return String.format("\""+k+"\":"+v+"");
}
private static String variant(TemplateProvider t, String state, String model) throws IOException {
return t.load("blockstate/var.json", d -> d
.def("state", state)
.def("model", model)
.def("extra", ""));
}
private static String variantY(TemplateProvider t, String state, String model, int y) throws IOException {
return t.load("blockstate/var.json", d -> d
.def("state", state)
.def("model", model)
.def("extra", kv("y", y) + ","));
}
private static String variantXY(TemplateProvider t, String state, String model, int x, int y) throws IOException {
return t.load("blockstate/var.json", d -> d
.def("state", state)
.def("model", model)
.def("extra", list(
kv("x", x),
kv("y", y)
) + ","));
}
private static String variantRotation16(TemplateProvider t, String keyPrefix, String modelPrefix) throws IOException {
return list(
variantY(t, keyPrefix+"0", modelPrefix+"_0", 180),
variantY(t, keyPrefix+"1", modelPrefix+"_67_5", 270),
variantY(t, keyPrefix+"2", modelPrefix+"_45", 270),
variantY(t, keyPrefix+"3", modelPrefix+"_22_5", 270),
variantY(t, keyPrefix+"4", modelPrefix+"_0", 270),
variant(t, keyPrefix+"5", modelPrefix+"_67_5"),
variant(t, keyPrefix+"6", modelPrefix+"_45"),
variant(t, keyPrefix+"7", modelPrefix+"_22_5"),
variant(t, keyPrefix+"8", modelPrefix+"_0"),
variantY(t, keyPrefix+"9", modelPrefix+"_67_5", 90),
variantY(t, keyPrefix+"10", modelPrefix+"_45", 90),
variantY(t, keyPrefix+"11", modelPrefix+"_22_5", 90),
variantY(t, keyPrefix+"12", modelPrefix+"_0", 90),
variantY(t, keyPrefix+"13", modelPrefix+"_67_5", 180),
variantY(t, keyPrefix+"14", modelPrefix+"_45", 180),
variantY(t, keyPrefix+"15", modelPrefix+"_22_5", 180)
);
}
private static String variantHFacing(TemplateProvider t, String keyPrefix, String model) throws IOException {
return list(
variant(t, keyPrefix+"north", model),
variantY(t, keyPrefix+"west", model, 270),
variantY(t, keyPrefix+"south", model, 180),
variantY(t, keyPrefix+"east", model, 90)
);
}
private static void addChestLikeModel(String parent, String chestTex, String chestName, Identifier id, EBEPack pack) {
pack.addTemplateResource(Identifier.of(id.getNamespace(), "models/" + id.getPath() + ".json"),
t -> t.load("model/chest_like.json", d -> d
.def("parent", parent)
.def("chest_tex", chestTex)
.def("particle", chestParticle(chestName))
)
);
}
public static void addSingleChestModels(String chestTex, String chestName, EBEPack pack) {
addChestLikeModel("template_chest_center", chestTex, chestName, Identifier.of("block/" + chestName + "_center"), pack);
addChestLikeModel("template_chest_center_lid", chestTex, chestName, Identifier.of("block/" + chestName + "_center_lid"), pack);
addChestLikeModel("template_chest_center_trunk", chestTex, chestName, Identifier.of("block/" + chestName + "_center_trunk"), pack);
}
public static void addDoubleChestModels(String leftTex, String rightTex, String chestName, EBEPack pack) {
addChestLikeModel("template_chest_left", leftTex, chestName, Identifier.of("block/" + chestName + "_left"), pack);
addChestLikeModel("template_chest_left_lid", leftTex, chestName, Identifier.of("block/" + chestName + "_left_lid"), pack);
addChestLikeModel("template_chest_left_trunk", leftTex, chestName, Identifier.of("block/" + chestName + "_left_trunk"), pack);
addChestLikeModel("template_chest_right", rightTex, chestName, Identifier.of("block/" + chestName + "_right"), pack);
addChestLikeModel("template_chest_right_lid", rightTex, chestName, Identifier.of("block/" + chestName + "_right_lid"), pack);
addChestLikeModel("template_chest_right_trunk", rightTex, chestName, Identifier.of("block/" + chestName + "_right_trunk"), pack);
}
private static String chestParticle(String chestName) {
if (EnhancedBlockEntities.CONFIG.experimentalChests) return kv("particle", "block/"+chestName+"_particle") + ",";
return "";
}
private static String bedParticle(String bedColor) {
if (EnhancedBlockEntities.CONFIG.experimentalBeds) return kv("particle", "block/"+bedColor+"_bed_particle") + ",";
return "";
}
private static String signParticle(String signName) {
if (EnhancedBlockEntities.CONFIG.experimentalSigns) return kv("particle", "block/"+signName+"_particle") + ",";
return "";
}
private static void addBlockState(Identifier id, TemplateProvider.TemplateApplyingFunction vars, EBEPack pack) {
pack.addTemplateResource(Identifier.of(id.getNamespace(), "blockstates/" + id.getPath() + ".json"),
t -> t.load("blockstate/base.json", d -> d.def("vars", vars)));
}
public static void addChestBlockStates(String chestName, EBEPack pack) {
addBlockState(Identifier.of(chestName),
t0 -> list(
variantHFacing(t0, "type=single,facing=", "builtin:"+chestName+"_center"),
variantHFacing(t0, "type=left,facing=", "builtin:"+chestName+"_left"),
variantHFacing(t0, "type=right,facing=", "builtin:"+chestName+"_right")
), pack);
}
public static void addSingleChestOnlyBlockStates(String chestName, EBEPack pack) {
addBlockState(Identifier.of(chestName),
t0 -> list(
variantHFacing(t0, "facing=", "builtin:"+chestName+"_center")
), pack);
}
public static void addParentModel(String parent, Identifier id, EBEPack pack) {
pack.addTemplateResource(Identifier.of(id.getNamespace(), "models/" + id.getPath() + ".json"), t ->
"{" + kv("parent", parent) + "}");
}
public static void addParentTexModel(String parent, String textures, Identifier id, EBEPack pack) {
pack.addTemplateResource(Identifier.of(id.getNamespace(), "models/" + id.getPath() + ".json"), t ->
t.load("model/parent_and_tex.json", d -> d.def("parent", parent).def("textures", textures)));
}
public static void addSignTypeModels(String signType, EBEPack pack) {
var signName = signType+"_sign";
var signTex = "entity/signs/"+signType;
addRotation16Models(
signParticle(signName) + kv("sign", signTex),
"block/template_sign", "block/"+signName, ResourceUtil::signAOSuffix, pack);
var hangingTexDef = list(
kv("sign", "entity/signs/hanging/"+signType),
kv("particle", "block/particle_hanging_sign_"+signType)
);
addRotation16Models(hangingTexDef, "block/template_hanging_sign", "block/"+signType+"_hanging_sign",
ResourceUtil::signAOSuffix, pack);
addRotation16Models(hangingTexDef, "block/template_hanging_sign_attached", "block/"+signType+"_hanging_sign_attached",
ResourceUtil::signAOSuffix, pack);
addParentTexModel(signAOSuffix("block/template_wall_sign"),
signParticle(signName) + kv("sign", signTex), Identifier.of("block/"+signType+"_wall_sign"), pack);
addParentTexModel(signAOSuffix("block/template_wall_hanging_sign"),
hangingTexDef, Identifier.of("block/"+signType+"_wall_hanging_sign"), pack);
}
public static void addRotation16Models(String textures, String templatePrefix, String modelPrefix, Function suffix, EBEPack pack) {
addParentTexModel(suffix.apply(templatePrefix+"_0"), textures, Identifier.of(modelPrefix + "_0"), pack);
addParentTexModel(suffix.apply(templatePrefix+"_22_5"), textures, Identifier.of(modelPrefix + "_22_5"), pack);
addParentTexModel(suffix.apply(templatePrefix+"_45"), textures, Identifier.of(modelPrefix + "_45"), pack);
addParentTexModel(suffix.apply(templatePrefix+"_67_5"), textures, Identifier.of(modelPrefix + "_67_5"), pack);
}
private static String signAOSuffix(String model) {
if (EnhancedBlockEntities.CONFIG.signAO) model += "_ao";
return model;
}
public static void addSignBlockStates(String signName, String wallSignName, EBEPack pack) {
addBlockState(Identifier.of(signName),
t -> variantRotation16(t, "rotation=", "block/"+signName), pack);
addBlockState(Identifier.of(wallSignName),
t -> variantHFacing(t, "facing=", "block/"+wallSignName), pack);
}
public static void addHangingSignBlockStates(String signName, String wallSignName, EBEPack pack) {
addBlockState(Identifier.of(signName),
t -> list(
variantRotation16(t, "attached=false,rotation=", "block/"+signName),
variantRotation16(t, "attached=true,rotation=", "block/"+signName+"_attached")
), pack);
addBlockState(Identifier.of(wallSignName),
t -> variantHFacing(t, "facing=", "block/"+wallSignName), pack);
}
public static void addBellBlockState(EBEPack pack) {
addBlockState(Identifier.of("bell"),
t -> {
var vars = new DelimitedAppender(",");
for (Direction dir : EBEUtil.HORIZONTAL_DIRECTIONS) {
int rot = EBEUtil.angle(dir) + 90;
vars
.append(variantY(t, "attachment=double_wall,facing="+dir.getName(), "builtin:bell_between_walls", rot))
.append(variantY(t, "attachment=ceiling,facing="+dir.getName(), "builtin:bell_ceiling", rot + 90)) // adding 90 here and below to maintain Parity with vanilla's weird choice of rotations
.append(variantY(t, "attachment=floor,facing="+dir.getName(), "builtin:bell_floor", rot + 90))
.append(variantY(t, "attachment=single_wall,facing="+dir.getName(), "builtin:bell_wall", rot));
}
return vars.get();
}, pack);
}
public static void addBedModels(DyeColor bedColor, EBEPack pack) {
String color = bedColor.getName();
addParentTexModel(bedAOSuffix("block/template_bed_head"),
bedParticle(color) + kv("bed", "entity/bed/" + color),
Identifier.of("block/" + color + "_bed_head"), pack);
addParentTexModel(bedAOSuffix("block/template_bed_foot"),
bedParticle(color) + kv("bed", "entity/bed/" + color),
Identifier.of("block/" + color + "_bed_foot"), pack);
addBedItemDefinition(color, pack);
}
public static void addBedBlockState(DyeColor bedColor, EBEPack pack) {
String color = bedColor.getName();
addBlockState(Identifier.of(color + "_bed"),
t -> {
var vars = new DelimitedAppender(",");
for (Direction dir : EBEUtil.HORIZONTAL_DIRECTIONS) {
int rot = EBEUtil.angle(dir) + 180;
vars
.append(variantY(t, "part=head,facing="+dir.getName(), "block/" + bedColor + "_bed_head", rot))
.append(variantY(t, "part=foot,facing="+dir.getName(), "block/" + bedColor + "_bed_foot", rot));
}
return vars.get();
}, pack);
}
private static String bedAOSuffix(String model) {
if (EnhancedBlockEntities.CONFIG.bedAO) model += "_ao";
return model;
}
public static void addShulkerBoxModels(@Nullable DyeColor color, EBEPack pack) {
var texture = color != null ? "entity/shulker/shulker_"+color.getName() : "entity/shulker/shulker";
var shulkerBoxStr = color != null ? color.getName()+"_shulker_box" : "shulker_box";
var particle = "block/"+shulkerBoxStr;
addParentTexModel("block/template_shulker_box",
list(kv("shulker", texture), kv("particle", particle)),
Identifier.of("block/"+shulkerBoxStr), pack);
addParentTexModel("block/template_shulker_box_bottom",
list(kv("shulker", texture), kv("particle", particle)),
Identifier.of("block/"+shulkerBoxStr+"_bottom"), pack);
addParentTexModel("block/template_shulker_box_lid",
list(kv("shulker", texture), kv("particle", particle)),
Identifier.of("block/"+shulkerBoxStr+"_lid"), pack);
}
public static void addShulkerBoxBlockStates(@Nullable DyeColor color, EBEPack pack) {
var shulkerBoxStr = color != null ? color.getName()+"_shulker_box" : "shulker_box";
addBlockState(Identifier.of(shulkerBoxStr),
t -> {
var vars = new DelimitedAppender(",");
vars
.append(variant(t, "facing=up", "builtin:"+shulkerBoxStr))
.append(variantXY(t, "facing=down", "builtin:"+shulkerBoxStr, 180, 0));
for (Direction dir : EBEUtil.HORIZONTAL_DIRECTIONS) {
int rot = EBEUtil.angle(dir) + 180;
vars.append(variantXY(t, "facing="+dir.getName(), "builtin:"+shulkerBoxStr, 90, rot));
}
return vars.get();
}, pack);
}
public static void addDecoratedPotBlockState(EBEPack pack) {
addBlockState(Identifier.of("decorated_pot"),
t -> variantHFacing(t, "facing=", "builtin:decorated_pot"), pack);
}
public static void addDecoratedPotPatternModels(RegistryKey patternKey, EBEPack pack) {
for (Direction dir : EBEUtil.HORIZONTAL_DIRECTIONS) {
addParentTexModel("block/template_pottery_pattern_" + dir.getName(),
kv("pattern", TexturedRenderLayers.getDecoratedPotPatternTextureId(patternKey).getTextureId().toString()),
Identifier.of("block/" + patternKey.getValue().getPath() + "_" + dir.getName()),
pack);
}
}
public static void resetBasePack() {
BASE_PACK = new EBEPack(EBEUtil.id("base_resources"), EnhancedBlockEntities.TEMPLATE_LOADER);
}
public static void resetTopLevelPack() {
TOP_LEVEL_PACK = new EBEPack(EBEUtil.id("top_level_resources"), EnhancedBlockEntities.TEMPLATE_LOADER);
}
public static EBEPack getBasePack() {
return BASE_PACK;
}
public static EBEPack getTopLevelPack() {
return TOP_LEVEL_PACK;
}
/**
* @return the pack most appropriate for resources that might be accidentally overwritten by resource packs
*/
public static EBEPack getPackForCompat() {
if (EnhancedBlockEntities.CONFIG.forceResourcePackCompat) {
return getTopLevelPack();
}
return getBasePack();
}
public static void dumpModAssets(Path dest) throws IOException {
var roots = FabricLoader.getInstance().getModContainer(EnhancedBlockEntities.ID)
.map(ModContainer::getRootPaths).orElse(List.of());
for (var root : roots) {
var sourceAssets = Files.walk(root.resolve("assets"));
for (var asset : sourceAssets.collect(Collectors.toSet())) {
if (!Files.isDirectory(asset)) {
var out = dest.resolve(root.relativize(asset));
if (!Files.exists(out.getParent())) {
Files.createDirectories(out.getParent());
}
Files.copy(asset, out, Files.exists(out) ? new CopyOption[] {StandardCopyOption.REPLACE_EXISTING} : new CopyOption[] {});
}
}
}
}
public static void dumpAllPacks(Path dest) throws IOException {
getBasePack().dump(dest);
getTopLevelPack().dump(dest);
dumpModAssets(dest);
}
private static class DelimitedAppender {
private final StringBuilder builder = new StringBuilder();
private final CharSequence delimiter;
private DelimitedAppender(CharSequence delimiter) {
this.delimiter = delimiter;
}
public DelimitedAppender append(CharSequence seq) {
if (!this.builder.isEmpty()) this.builder.append(this.delimiter);
this.builder.append(seq);
return this;
}
public String get() {
return this.builder.toString();
}
}
static {
resetBasePack();
resetTopLevelPack();
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/util/WorldUtil.java
================================================
package foundationgames.enhancedblockentities.util;
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.registry.RegistryKey;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkSectionPos;
import net.minecraft.world.World;
import java.util.HashMap;
import java.util.Map;
public enum WorldUtil implements ClientTickEvents.EndWorldTick {
EVENT_LISTENER;
public static final Map CHUNK_UPDATE_TASKS = new HashMap<>();
private static final Map, Long2ObjectMap> TIMED_TASKS = new HashMap<>();
public static void rebuildChunk(World world, BlockPos pos) {
var state = world.getBlockState(pos);
MinecraftClient.getInstance().worldRenderer.updateBlock(world, pos, state, state, 8);
}
public static void rebuildChunkAndThen(World world, BlockPos pos, Runnable action) {
CHUNK_UPDATE_TASKS.computeIfAbsent(ChunkSectionPos.from(pos), k -> new ExecutableRunnableHashSet()).add(action);
rebuildChunk(world, pos);
}
public static void scheduleTimed(World world, long time, Runnable action) {
TIMED_TASKS.computeIfAbsent(world.getRegistryKey(), k -> new Long2ObjectOpenHashMap<>()).put(time, action);
}
@Override
public void onEndTick(ClientWorld world) {
var key = world.getRegistryKey();
if (TIMED_TASKS.containsKey(key)) {
TIMED_TASKS.get(key).long2ObjectEntrySet().removeIf(entry -> {
if (world.getTime() >= entry.getLongKey()) {
entry.getValue().run();
return true;
}
return false;
});
}
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/util/duck/AppearanceStateHolder.java
================================================
package foundationgames.enhancedblockentities.util.duck;
import foundationgames.enhancedblockentities.util.WorldUtil;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public interface AppearanceStateHolder {
int getModelState();
void setModelState(int state);
int getRenderState();
void setRenderState(int state);
default void updateAppearanceState(int state, World world, BlockPos pos) {
if (!world.isClient()) {
return;
}
this.setModelState(state);
WorldUtil.rebuildChunkAndThen(world, pos, () -> this.setRenderState(state));
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/util/duck/ChunkRebuildTaskAccess.java
================================================
package foundationgames.enhancedblockentities.util.duck;
public interface ChunkRebuildTaskAccess {
Runnable enhanced_bes$getTaskAfterRebuild();
void enhanced_bes$setTaskAfterRebuild(Runnable task);
default void enhanced_bes$runAfterRebuildTask() {
var task = this.enhanced_bes$getTaskAfterRebuild();
if (task != null) {
task.run();
this.enhanced_bes$setTaskAfterRebuild(null);
}
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/util/hacks/ExperimentalSetup.java
================================================
package foundationgames.enhancedblockentities.util.hacks;
import foundationgames.enhancedblockentities.EnhancedBlockEntities;
import foundationgames.enhancedblockentities.client.resource.EBEPack;
import foundationgames.enhancedblockentities.config.EBEConfig;
import foundationgames.enhancedblockentities.util.ResourceUtil;
import net.minecraft.resource.ResourceManager;
import net.minecraft.util.DyeColor;
import java.io.IOException;
public enum ExperimentalSetup {;
private static ResourceManager RESOURCES;
public static void setup() {
EBEConfig config = EnhancedBlockEntities.CONFIG;
if (config.renderEnhancedChests && config.experimentalChests) {
try {
if (RESOURCES != null) setupChests(RESOURCES);
} catch (IOException e) {
EnhancedBlockEntities.LOG.error("Error loading experimental chests!", e);
config.experimentalChests = false;
config.save();
}
}
if (config.renderEnhancedBeds && config.experimentalBeds) {
try {
if (RESOURCES != null) setupBeds(RESOURCES);
} catch (IOException e) {
EnhancedBlockEntities.LOG.error("Error loading experimental beds!", e);
config.experimentalBeds = false;
config.save();
}
}
if (config.renderEnhancedSigns && config.experimentalSigns) {
try {
if (RESOURCES != null) setupSigns(RESOURCES);
} catch (IOException e) {
EnhancedBlockEntities.LOG.error("Error loading experimental signs!", e);
config.experimentalSigns = false;
config.save();
}
}
}
public static void setupChests(ResourceManager manager) throws IOException {
EBEPack p = ResourceUtil.getTopLevelPack();
ResourceHacks.addChestParticleTexture("chest", "entity/chest/normal", manager, p);
ResourceHacks.addChestParticleTexture("trapped_chest", "entity/chest/trapped", manager, p);
ResourceHacks.addChestParticleTexture("ender_chest", "entity/chest/ender", manager, p);
ResourceHacks.addChestParticleTexture("christmas_chest", "entity/chest/christmas", manager, p);
}
public static void setupBeds(ResourceManager manager) throws IOException {
EBEPack p = ResourceUtil.getTopLevelPack();
for (var color : DyeColor.values()) {
ResourceHacks.addBedParticleTexture(color.getName(), "entity/bed/"+color.getName(), manager, p);
}
}
public static void setupSigns(ResourceManager manager) throws IOException {
EBEPack p = ResourceUtil.getTopLevelPack();
ResourceHacks.addSignParticleTexture("oak", "entity/signs/oak", manager, p);
ResourceHacks.addSignParticleTexture("birch", "entity/signs/birch", manager, p);
ResourceHacks.addSignParticleTexture("spruce", "entity/signs/spruce", manager, p);
ResourceHacks.addSignParticleTexture("jungle", "entity/signs/jungle", manager, p);
ResourceHacks.addSignParticleTexture("acacia", "entity/signs/acacia", manager, p);
ResourceHacks.addSignParticleTexture("dark_oak", "entity/signs/dark_oak", manager, p);
ResourceHacks.addSignParticleTexture("mangrove", "entity/signs/mangrove", manager, p);
ResourceHacks.addSignParticleTexture("cherry", "entity/signs/cherry", manager, p);
ResourceHacks.addSignParticleTexture("crimson", "entity/signs/crimson", manager, p);
ResourceHacks.addSignParticleTexture("warped", "entity/signs/warped", manager, p);
ResourceHacks.addSignParticleTexture("bamboo", "entity/signs/bamboo", manager, p);
}
public static void cacheResources(ResourceManager resources) {
RESOURCES = resources;
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/util/hacks/ResourceHacks.java
================================================
package foundationgames.enhancedblockentities.util.hacks;
import foundationgames.enhancedblockentities.client.resource.EBEPack;
import net.minecraft.resource.ResourceManager;
import net.minecraft.util.Identifier;
import java.io.IOException;
import java.io.InputStream;
import java.util.NoSuchElementException;
public enum ResourceHacks {;
private static void cropAndPutTexture(Identifier source, Identifier result, ResourceManager manager, EBEPack pack, float u0, float v0, float u1, float v1) throws IOException {
InputStream image;
try {
image = manager.getResource(source).orElseThrow().getInputStream();
} catch (IOException | NoSuchElementException e) {
return;
}
if (image == null) return;
TextureHacks.cropImage(image, u0, v0, u1, v1).ifPresent(imgBytes -> pack.addResource(result, imgBytes));
image.close();
}
public static void addChestParticleTexture(String chestName, String chestTexture, ResourceManager manager, EBEPack pack) throws IOException {
cropAndPutTexture(
Identifier.of("textures/"+chestTexture+".png"), Identifier.of("textures/block/"+chestName+"_particle.png"),
manager, pack,
42f/64, 33f/64, 58f/64, 49f/64
);
}
public static void addBedParticleTexture(String bedColor, String bedTexture, ResourceManager manager, EBEPack pack) throws IOException {
cropAndPutTexture(
Identifier.of("textures/"+bedTexture+".png"), Identifier.of("textures/block/"+bedColor+"_bed_particle.png"),
manager, pack,
18f/64, 6f/64, 34f/64, 22f/64
);
}
public static void addSignParticleTexture(String signType, String signTexture, ResourceManager manager, EBEPack pack) throws IOException {
cropAndPutTexture(
Identifier.of("textures/"+signTexture+".png"), Identifier.of("textures/block/"+signType+"_sign_particle.png"),
manager, pack,
0, 3f/32, 16f/64, 19f/32
);
}
}
================================================
FILE: src/main/java/foundationgames/enhancedblockentities/util/hacks/TextureHacks.java
================================================
package foundationgames.enhancedblockentities.util.hacks;
import net.minecraft.client.texture.NativeImage;
import org.jetbrains.annotations.Nullable;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.channels.Channels;
import java.nio.channels.WritableByteChannel;
import java.util.Optional;
public enum TextureHacks {;
public static Optional cropImage(@Nullable InputStream image, float u0, float v0, float u1, float v1) throws IOException {
byte[] r = new byte[0];
if (image != null) {
try {
NativeImage src = NativeImage.read(NativeImage.Format.RGBA, image);
int w = src.getWidth();
int h = src.getHeight();
int x = (int)Math.floor(u0 * w);
int y = (int)Math.floor(v0 * h);
int sw = (int)Math.floor((u1 - u0) * w);
int sh = (int)Math.floor((v1 - v0) * h);
NativeImage prod = new NativeImage(src.getFormat(), sw, sh, false);
for (int u = 0; u < sw; u++) {
for (int v = 0; v < sh; v++) {
prod.setColorArgb(u, v, src.getColorArgb(x + u, y + v));
}
}
src.close();
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
WritableByteChannel writableByteChannel = Channels.newChannel(byteArrayOutputStream)) {
if (!prod.write(writableByteChannel)) {
throw new IOException("Could not write cropped image to byte array");
}
r = byteArrayOutputStream.toByteArray();
}
prod.close();
} catch (IllegalArgumentException e) {
return Optional.empty();
}
}
return Optional.of(r);
}
}
================================================
FILE: src/main/resources/assets/enhancedblockentities/lang/en_us.json
================================================
{
"option.ebe.config": "Block Entities...",
"value.ebe.true": "On",
"value.ebe.false": "Off",
"value.ebe.allowed": "Allowed",
"value.ebe.forced": "Forced",
"value.ebe.disabled": "Disabled",
"value.ebe.smart": "Smart",
"value.ebe.all": "All",
"value.ebe.most": "Most",
"value.ebe.some": "Some",
"value.ebe.few": "Few",
"option.ebe.render_enhanced_chests": "Enhanced Chests",
"option.ebe.render_enhanced_chests.comment": "Enables baked chest models, greatly improving performance in areas with lots of chests. Also allows for seeing chests from far distances. Disable if chests appear invisible due to another mod.",
"option.ebe.render_enhanced_signs": "Enhanced Signs",
"option.ebe.render_enhanced_signs.comment": "Enables baked sign models and smart sign text rendering, greatly improving performance in areas with lots of signs. Also allows for seeing signs from far distances. Disable if signs appear invisible due to another mod.",
"option.ebe.render_enhanced_bells": "Enhanced Bells",
"option.ebe.render_enhanced_bells.comment": "Enables fully baked bell models, greatly improving performance in areas with lots of bells. Also allows for seeing bells from far distances. Disable if bells appear invisible due to another mod.",
"option.ebe.render_enhanced_beds": "Enhanced Beds",
"option.ebe.render_enhanced_beds.comment": "Enables baked bed models, greatly improving performance in areas with lots of beds. Also allows for seeing beds from far distances. Disable if beds appear invisible due to another mod.",
"option.ebe.render_enhanced_shulker_boxes": "Enhanced Shulker Boxes",
"option.ebe.render_enhanced_shulker_boxes.comment": "Enables baked shulker box models, greatly improving performance in areas with lots of shulker boxes. Also allows for seeing shulker boxes from far distances. Disable if shulker boxes appear invisible due to another mod.",
"option.ebe.render_enhanced_decorated_pots": "Enhanced Decorated Pots",
"option.ebe.render_enhanced_decorated_pots.comment": "Enables baked decorated pot models, greatly improving performance in areas with lots of decorated pots. Also allows for seeing decorated pots from far distances. Disable if decorated pots appear invisible, or if modded pottery patterns are not working properly.",
"option.ebe.chest_ao": "Smooth Chest Lighting",
"option.ebe.chest_ao.comment": "Allows for chests to use smooth lighting and ambient occlusion. Requires Enhanced Chests to be enabled.",
"option.ebe.sign_ao": "Smooth Sign Lighting",
"option.ebe.sign_ao.comment": "Allows for signs to use smooth lighting and ambient occlusion. Requires Enhanced Signs to be enabled.",
"option.ebe.bell_ao": "Smooth Bell Lighting",
"option.ebe.bell_ao.comment": "Allows for bells to use smooth lighting and ambient occlusion. Requires Enhanced Bells to be enabled.",
"option.ebe.bed_ao": "Smooth Bed Lighting",
"option.ebe.bed_ao.comment": "Allows for beds to use smooth lighting and ambient occlusion. Requires Enhanced Beds to be enabled.",
"option.ebe.shulker_box_ao": "Smooth Shulker Box Lighting",
"option.ebe.shulker_box_ao.comment": "Allows for shulker boxes to use smooth lighting and ambient occlusion. Requires Enhanced Shulker Boxes to be enabled.",
"option.ebe.decorated_pot_ao": "Smooth Decorated Pot Lighting",
"option.ebe.decorated_pot_ao.comment": "Allows for decorated pots to use smooth lighting and ambient occlusion. Requires Enhanced Decorated Pots to be enabled.",
"option.ebe.christmas_chests": "Christmas Chests",
"option.ebe.christmas_chests.valueComment.allowed": "Allowed - Christmas texture will be applied from December 24th to 26th.",
"option.ebe.christmas_chests.valueComment.forced": "Forced - Christmas texture will always be applied.",
"option.ebe.christmas_chests.valueComment.disabled": "Disabled - Christmas texture will never be applied.",
"option.ebe.christmas_chests.comment": "Either allows, forces, or disables the Christmas chest texture. Requires Enhanced Chests to be enabled.",
"option.ebe.sign_text_rendering": "Sign Text Rendering",
"option.ebe.sign_text_rendering.valueComment.smart": "Smart - The maximum render distance will be automatically determined based on how many signs are rendering at once.",
"option.ebe.sign_text_rendering.valueComment.all": "All - All signs within block entity render distance will try to render text. Very performance heavy.",
"option.ebe.sign_text_rendering.valueComment.most": "Most - All signs within 50%% of block entity render distance will try to render text.",
"option.ebe.sign_text_rendering.valueComment.some": "Some - All signs within 30%% of block entity render distance will try to render text. ",
"option.ebe.sign_text_rendering.valueComment.few": "Few - All signs within 20%% of block entity render distance will try to render text. Highest performance.",
"option.ebe.sign_text_rendering.comment": "Determines the maximum distance from the player that sign text will render. Requires Enhanced Signs to be enabled.",
"option.ebe.experimental_chests": "Experimental Chests",
"option.ebe.experimental_chests.comment": "Enables very experimental rendering features for chests, such as specially generated particle textures which work with resource packs.",
"option.ebe.experimental_beds": "Experimental Beds",
"option.ebe.experimental_beds.comment": "Enables very experimental rendering features for beds, such as specially generated particle textures which work with resource packs.",
"option.ebe.experimental_signs": "Experimental Signs",
"option.ebe.experimental_signs.comment": "Enables very experimental rendering features for signs, such as specially generated particle textures which work with resource packs.",
"option.ebe.force_resource_pack_compat": "Force Resource Pack Compatibility",
"option.ebe.force_resource_pack_compat.comment": "Enable this if blocks are invisible when using resource packs. Do not use with resource packs designed for this mod. If issues continue, report them.",
"option.ebe.dump": "Dump Example Resources",
"option.ebe.dump.comment": "Dumps the mod's default resources to .minecraft/enhanced_bes_dump/ to be used as an example by resource pack makers.",
"warning.ebe.overridden": "Overwritten by '%s'",
"screen.ebe.config": "Block Entity Settings",
"text.ebe.apply": "Apply",
"text.ebe.descriptions": "Hover over options for descriptions",
"text.ebe.chest_options": "Chest Options",
"text.ebe.sign_options": "Sign Options",
"text.ebe.bell_options": "Bell Options",
"text.ebe.bed_options": "Bed Options",
"text.ebe.shulker_box_options": "Shulker Box Options",
"text.ebe.decorated_pot_options": "Decorated Pot Options",
"text.ebe.advanced": "Advanced",
"text.ebe.option_value_division": ": "
}
================================================
FILE: src/main/resources/assets/enhancedblockentities/lang/ru_ru.json
================================================
{
"option.ebe.config": "Блоки-сущности...",
"value.ebe.true": "Вкл",
"value.ebe.false": "Выкл",
"value.ebe.allowed": "Разрешены",
"value.ebe.forced": "Включены",
"value.ebe.disabled": "Отключены",
"value.ebe.smart": "Умно",
"value.ebe.all": "Все",
"value.ebe.most": "Половина",
"value.ebe.some": "Меньше",
"value.ebe.few": "Минимум",
"option.ebe.render_enhanced_chests": "Улучшенные сундуки",
"option.ebe.render_enhanced_chests.comment": "Позволяет использовать запечённые модели сундуков, что значительно повышает производительность в областях с большим количеством сундуков. Также позволяет видеть сундуки издалека. Отключите, если из-за других модов сундуки становятся невидимыми.",
"option.ebe.render_enhanced_signs": "Улучшенные таблички",
"option.ebe.render_enhanced_signs.comment": "Позволяет использовать запечённые модели табличек и умный рендеринг текста, что значительно повышает производительность в областях с большим количеством табличек. Также позволяет видеть таблички издалека. Отключите, если из-за других модов таблички становятся невидимыми.",
"option.ebe.render_enhanced_bells": "Улучшенные колокола",
"option.ebe.render_enhanced_bells.comment": "Позволяет использовать запечённые модели колоколов, что значительно повышает производительность в областях с большим количеством колоколов. Также позволяет видеть колокола издалека. Отключите, если из-за других модов колокола становятся невидимыми.",
"option.ebe.render_enhanced_beds": "Улучшенные кровати",
"option.ebe.render_enhanced_beds.comment": "Позволяет использовать запечённые модели кроватей, что значительно повышает производительность в областях с большим количеством кроватей. Также позволяет видеть кровати издалека. Отключите, если из-за других модов кровати становятся невидимыми.",
"option.ebe.render_enhanced_shulker_boxes": "Улучшенные шалкеровые ящики",
"option.ebe.render_enhanced_shulker_boxes.comment": "Позволяет использовать запечённые модели шалкеровых ящиков, что значительно повышает производительность в областях с большим количеством шалкеровых ящиков. Также позволяет видеть шалкеровые ящики издалека. Отключите, если из-за других модов шалкеровые ящики становятся невидимыми.",
"option.ebe.chest_ao": "Мягкое освещение сундуков",
"option.ebe.chest_ao.comment": "Позволяет использовать мягкое и объёмное освещение для сундуков. Требует настройки «Улучшенные сундуки».",
"option.ebe.sign_ao": "Мягкое освещение",
"option.ebe.sign_ao.comment": "Позволяет использовать мягкое и объёмное освещение для табличек. Требует настройки «Улучшенные таблички».",
"option.ebe.bell_ao": "Мягкое освещение колоколов",
"option.ebe.bell_ao.comment": "Позволяет использовать мягкое и объёмное освещение для колоколов. Требует настройки «Улучшенные колокола».",
"option.ebe.bed_ao": "Мягкое освещение",
"option.ebe.bed_ao.comment": "Позволяет использовать мягкое и объёмное освещение для кроватей. Требует настройки «Улучшенные кровати».",
"option.ebe.shulker_box_ao": "Мягкое освещение шалкеровых ящиков",
"option.ebe.shulker_box_ao.comment": "Позволяет использовать мягкое и объёмное освещение для сундуков. Требует настройки «Улучшенные шалкеровые ящики».",
"option.ebe.christmas_chests": "Рождественские",
"option.ebe.christmas_chests.valueComment.allowed": "Разрешены - Рождественские текстуры будут отображаться с 24 по 26 декабря.",
"option.ebe.christmas_chests.valueComment.forced": "Включены - Рождественские текстуры будут включены всегда.",
"option.ebe.christmas_chests.valueComment.disabled": "Отключены - Рождественские текстуры будут всегда отключены.",
"option.ebe.christmas_chests.comment": "Разрешает, включает или отключает текстуры рождественских сундуков. Требуется включить улучшенные сундуки.",
"option.ebe.sign_text_rendering": "Отображение текста на табличках",
"option.ebe.sign_text_rendering.valueComment.smart": "Умно - Максимальное расстояние видимости будет определяться автоматически в зависимости от того, сколько символов отображается одновременно.",
"option.ebe.sign_text_rendering.valueComment.all": "Все - Все таблички в пределах расстояния видимости блоков-сущностей будут пытаться отобразить текст. Сильно снижает производительность.",
"option.ebe.sign_text_rendering.valueComment.most": "Половина - Все таблички в пределах 50%% расстояния видимости блоков-сущностей будут пытаться отобразить текст.",
"option.ebe.sign_text_rendering.valueComment.some": "Меньше - Все таблички в пределах 30%% расстояния видимости блоков-сущностей будут пытаться отобразить текст.",
"option.ebe.sign_text_rendering.valueComment.few": "Минимум - Все таблички в пределах 20%% расстояния рендеринга блоков-сущностей будут пытаться отобразить текст, наилучшая производительность.",
"option.ebe.sign_text_rendering.comment": "Определяет максимальное расстояние от игрока, на котором будет отображаться текст табличек. Необходимо включить «Улучшенные таблички».",
"option.ebe.experimental_chests": "Экспериментальные",
"option.ebe.experimental_chests.comment": "Активирует крайне экспериментальные функции рендеринга для сундуков, такие как специально сгенерированные текстуры частиц, работающие с пакетами ресурсов.",
"option.ebe.experimental_beds": "Экспериментальные",
"option.ebe.experimental_beds.comment": "Активирует крайне экспериментальные функции рендеринга для кроватей, такие как специально сгенерированные текстуры частиц, работающие с пакетами ресурсов.",
"option.ebe.experimental_signs": "Экспериментальные",
"option.ebe.experimental_signs.comment": "Активирует крайне экспериментальные функции рендеринга для табличек, такие как специально сгенерированные текстуры частиц, работающие с пакетами ресурсов.",
"option.ebe.dump": "Выгрузить пример ресурсов",
"option.ebe.dump.comment": "Выгружает базовые ресурсы мода в .minecraft/enhanced_bes_dump для их использования создателями наборов ресурсов в качестве образца.",
"screen.ebe.config": "Настройки блоков-сущностей",
"text.ebe.apply": "Применить",
"text.ebe.descriptions": "Наведите мышь для отображения описания",
"text.ebe.chest_options": "Настройки сундуков",
"text.ebe.sign_options": "Настройки табличек",
"text.ebe.bell_options": "Настройки колоколов",
"text.ebe.bed_options": "Настройки кроватей",
"text.ebe.shulker_box_options": "Настройки шалкеровых ящиков",
"text.ebe.advanced": "Расширенные",
"text.ebe.option_value_division": ": ",
"modmenu.summaryTranslation.enhancedblockentities": "Современный подход к оптимизации и персонализации блоков-сущностей.",
"modmenu.descriptionTranslation.enhancedblockentities": "Клиентский мод для Fabric, предназначенный для повышения производительности при отрисовке блоков-сущностей и расширения возможностей их персонализации при помощи наборов ресурсов."
}
================================================
FILE: src/main/resources/assets/enhancedblockentities/lang/zh_cn.json
================================================
{
"option.ebe.config": "方块实体...",
"value.ebe.true": "开",
"value.ebe.false": "关",
"value.ebe.allowed": "允许",
"value.ebe.forced": "一直",
"value.ebe.disabled": "禁用",
"value.ebe.smart": "智能",
"value.ebe.all": "全部",
"value.ebe.most": "多数",
"value.ebe.some": "部分",
"value.ebe.few": "少量",
"option.ebe.render_enhanced_chests": "优化箱子",
"option.ebe.render_enhanced_chests.comment": "启用烘焙箱子模型,极大地提高了多箱子区域的性能。还能在远处看见箱子。如果箱子不可见,可能是由其他mod引起的,尝试禁用解决。",
"option.ebe.render_enhanced_signs": "优化告示牌",
"option.ebe.render_enhanced_signs.comment": "启用烘焙告示牌模型和智能告示牌文本渲染,极大地提高了多告示牌区域的性能。还能从远处看见告示牌。如果告示牌不可见,可能是由其他mod引起的,尝试禁用解决。",
"option.ebe.render_enhanced_bells": "优化钟",
"option.ebe.render_enhanced_bells.comment": "启用完整的烘焙钟模型,极大地提高了多钟区域的性能。还能在远处看见钟。如果钟不可见,可能是由其他mod引起的,尝试禁用解决。",
"option.ebe.render_enhanced_beds": "优化床",
"option.ebe.render_enhanced_beds.comment": "启用烘焙床模型,极大地提高了多床区域的性能。还能在远程看见床。如果床不可见,可能是由其他mod引起的,尝试禁用解决。",
"option.ebe.render_enhanced_shulker_boxes": "优化潜影盒",
"option.ebe.render_enhanced_shulker_boxes.comment": "启用烘焙潜影盒模型,极大地提高了多潜影盒区域的性能。还能在远处看见潜影盒。如果潜影盒不可见,可能是由其他mod引起的,尝试禁用解决。",
"option.ebe.chest_ao": "平滑箱子光照",
"option.ebe.chest_ao.comment": "允许箱子使用平滑光照和环境光遮蔽。需要启用优化箱子。",
"option.ebe.sign_ao": "平滑告示牌光照",
"option.ebe.sign_ao.comment": "允许告示牌使用平滑光照和环境光遮蔽。需要启用优化告示牌。",
"option.ebe.bell_ao": "平滑钟光照",
"option.ebe.bell_ao.comment": "允许钟使用平滑光照和环境光遮蔽。需要启用优化钟。",
"option.ebe.bed_ao": "平滑床光照",
"option.ebe.bed_ao.comment": "允许床使用平滑光照和环境光遮蔽。需要启用优化床。",
"option.ebe.shulker_box_ao": "平滑潜影盒光照",
"option.ebe.shulker_box_ao.comment": "允许潜影盒使用平滑光照和环境光遮蔽。需要启用优化潜影盒",
"option.ebe.christmas_chests": "圣诞箱子",
"option.ebe.christmas_chests.valueComment.allowed": "允许 - 圣诞节纹理将于12月24日至26日应用。",
"option.ebe.christmas_chests.valueComment.forced": "一直 - 圣诞节纹理将永远应用。",
"option.ebe.christmas_chests.valueComment.disabled": "禁用 - 圣诞节纹理将永远不会应用。",
"option.ebe.christmas_chests.comment": "允许、一直或禁用圣诞节箱子纹理。需要启用优化箱子。",
"option.ebe.sign_text_rendering": "告示牌文本渲染",
"option.ebe.sign_text_rendering.valueComment.smart": "智能 - 最大渲染距离将根据一次渲染多少个告示牌来自动确定。",
"option.ebe.sign_text_rendering.valueComment.all": "全部 - 方块实体渲染距离内的所有告示牌都会尝试渲染文本。非常注重性能。",
"option.ebe.sign_text_rendering.valueComment.most": "多数 - 方块实体渲染距离50%%以内的所有告示牌都会尝试渲染文本。",
"option.ebe.sign_text_rendering.valueComment.some": "部分 - 方块实体渲染距离30%%以内的所有告示牌都会尝试渲染文本。",
"option.ebe.sign_text_rendering.valueComment.few": "少量 - 方块实体渲染距离20%%以内的所有告示牌都会尝试渲染文本。最佳性能。",
"option.ebe.sign_text_rendering.comment": "确定玩家渲染告示牌文本的最大距离。需要启用优化告示牌。",
"option.ebe.experimental_chests": "实验性箱子",
"option.ebe.experimental_chests.comment": "为箱子启用非常实验性的渲染功能,例如与资源包一起使用时特殊生成的粒子纹理。",
"option.ebe.experimental_beds": "实验性床",
"option.ebe.experimental_beds.comment": "为床启用非常实验性的渲染功能,例如与资源包一起使用时特殊生成的粒子纹理。",
"option.ebe.experimental_signs": "实验性告示牌",
"option.ebe.experimental_signs.comment": "为告示牌启用非常实验性的渲染功能,例如与资源包一起使用时特殊生成的粒子纹理。",
"option.ebe.dump": "导出示例资源",
"option.ebe.dump.comment": "导出本模组的默认资源到.minecraft/enhanced_bes_dump/用于资源包制作者当做一个示例。",
"screen.ebe.config": "方块实体设置",
"text.ebe.apply": "应用",
"text.ebe.descriptions": "将鼠标悬停在选项上查看描述",
"text.ebe.chest_options": "箱子",
"text.ebe.sign_options": "告示牌",
"text.ebe.bell_options": "钟",
"text.ebe.bed_options": "床",
"text.ebe.shulker_box_options": "潜影盒",
"text.ebe.option_value_division": ":"
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/bell_between_walls_with_bell.json
================================================
{
"textures": {
"bell": "entity/bell/bell_body",
"bar": "block/dark_oak_planks",
"particle": "entity/bell/bell_body"
},
"elements": [
{
"from": [0, 13, 7],
"to": [16, 15, 9],
"faces": {
"north": {"uv": [2, 2, 14, 4], "texture": "#bar"},
"east": {"uv": [5, 4, 7, 6], "texture": "#bar", "cullface": "east"},
"south": {"uv": [2, 3, 14, 5], "texture": "#bar"},
"west": {"uv": [5, 4, 7, 6], "texture": "#bar", "cullface": "west"},
"up": {"uv": [2, 3, 14, 5], "texture": "#bar"},
"down": {"uv": [2, 3, 14, 5], "texture": "#bar"}
}
},
{
"from": [5, 6, 5],
"to": [11, 13, 11],
"faces": {
"north": {"uv": [3, 3, 6, 6.5], "rotation": 180, "texture": "#bell"},
"east": {"uv": [0, 3, 3, 6.5], "rotation": 180, "texture": "#bell"},
"south": {"uv": [9, 3, 12, 6.5], "rotation": 180, "texture": "#bell"},
"west": {"uv": [6, 3, 9, 6.5], "rotation": 180, "texture": "#bell"},
"up": {"uv": [3, 0, 6, 3], "rotation": 180, "texture": "#bell"}
}
},
{
"from": [4, 4, 4],
"to": [12, 6, 12],
"faces": {
"north": {"uv": [4, 10.5, 8, 11.5], "rotation": 180, "texture": "#bell"},
"east": {"uv": [0, 10.5, 4, 11.5], "rotation": 180, "texture": "#bell"},
"south": {"uv": [4, 10.5, 8, 11.5], "rotation": 180, "texture": "#bell"},
"west": {"uv": [8, 10.5, 12, 11.5], "rotation": 180, "texture": "#bell"},
"up": {"uv": [4, 6.5, 8, 10.5], "rotation": 180, "texture": "#bell"},
"down": {"uv": [8, 6.5, 12, 10.5], "rotation": 180, "texture": "#bell"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/bell_body.json
================================================
{
"texture_size": [32, 32],
"textures": {
"bell": "entity/bell/bell_body",
"particle": "entity/bell/bell_body"
},
"elements": [
{
"from": [5, 6, 5],
"to": [11, 13, 11],
"faces": {
"north": {"uv": [3, 3, 6, 6.5], "rotation": 180, "texture": "#bell"},
"east": {"uv": [0, 3, 3, 6.5], "rotation": 180, "texture": "#bell"},
"south": {"uv": [9, 3, 12, 6.5], "rotation": 180, "texture": "#bell"},
"west": {"uv": [6, 3, 9, 6.5], "rotation": 180, "texture": "#bell"},
"up": {"uv": [3, 0, 6, 3], "rotation": 180, "texture": "#bell"}
}
},
{
"from": [4, 4, 4],
"to": [12, 6, 12],
"faces": {
"north": {"uv": [4, 10.5, 8, 11.5], "rotation": 180, "texture": "#bell"},
"east": {"uv": [0, 10.5, 4, 11.5], "rotation": 180, "texture": "#bell"},
"south": {"uv": [4, 10.5, 8, 11.5], "rotation": 180, "texture": "#bell"},
"west": {"uv": [8, 10.5, 12, 11.5], "rotation": 180, "texture": "#bell"},
"up": {"uv": [4, 6.5, 8, 10.5], "rotation": 180, "texture": "#bell"},
"down": {"uv": [8, 6.5, 12, 10.5], "rotation": 180, "texture": "#bell"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/bell_ceiling_with_bell.json
================================================
{
"textures": {
"bell": "entity/bell/bell_body",
"bar": "block/dark_oak_planks",
"particle": "entity/bell/bell_body"
},
"elements": [
{
"from": [7, 13, 7],
"to": [9, 16, 9],
"faces": {
"north": {"uv": [7, 2, 9, 5], "texture": "#bar"},
"east": {"uv": [1, 2, 3, 5], "texture": "#bar"},
"south": {"uv": [6, 2, 8, 5], "texture": "#bar"},
"west": {"uv": [4, 2, 6, 5], "texture": "#bar"},
"up": {"uv": [1, 3, 3, 5], "texture": "#bar", "cullface": "up"}
}
},
{
"from": [5, 6, 5],
"to": [11, 13, 11],
"faces": {
"north": {"uv": [3, 3, 6, 6.5], "rotation": 180, "texture": "#bell"},
"east": {"uv": [0, 3, 3, 6.5], "rotation": 180, "texture": "#bell"},
"south": {"uv": [9, 3, 12, 6.5], "rotation": 180, "texture": "#bell"},
"west": {"uv": [6, 3, 9, 6.5], "rotation": 180, "texture": "#bell"},
"up": {"uv": [3, 0, 6, 3], "rotation": 180, "texture": "#bell"}
}
},
{
"from": [4, 4, 4],
"to": [12, 6, 12],
"faces": {
"north": {"uv": [4, 10.5, 8, 11.5], "rotation": 180, "texture": "#bell"},
"east": {"uv": [0, 10.5, 4, 11.5], "rotation": 180, "texture": "#bell"},
"south": {"uv": [4, 10.5, 8, 11.5], "rotation": 180, "texture": "#bell"},
"west": {"uv": [8, 10.5, 12, 11.5], "rotation": 180, "texture": "#bell"},
"up": {"uv": [4, 6.5, 8, 10.5], "rotation": 180, "texture": "#bell"},
"down": {"uv": [8, 6.5, 12, 10.5], "rotation": 180, "texture": "#bell"}
}
}
],
"groups": [0,
{
"name": "bell_base_DELETETHIS",
"origin": [8, 8, 8],
"children": [1, 2]
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/bell_floor_with_bell.json
================================================
{
"textures": {
"bell": "entity/bell/bell_body",
"bar": "block/dark_oak_planks",
"post": "block/stone",
"particle": "entity/bell/bell_body"
},
"elements": [
{
"from": [2, 13, 7],
"to": [14, 15, 9],
"faces": {
"north": {"uv": [2, 2, 14, 4], "texture": "#bar"},
"south": {"uv": [2, 3, 14, 5], "texture": "#bar"},
"up": {"uv": [2, 3, 14, 5], "texture": "#bar"},
"down": {"uv": [2, 3, 14, 5], "texture": "#bar"}
}
},
{
"from": [14, 0, 6],
"to": [16, 16, 10],
"faces": {
"north": {"uv": [0, 1, 2, 16], "texture": "#post"},
"east": {"uv": [0, 1, 4, 16], "texture": "#post", "cullface": "east"},
"south": {"uv": [0, 1, 2, 16], "texture": "#post"},
"west": {"uv": [0, 1, 4, 16], "texture": "#post"},
"up": {"uv": [0, 0, 2, 4], "texture": "#post", "cullface": "up"},
"down": {"uv": [0, 0, 2, 4], "texture": "#post", "cullface": "down"}
}
},
{
"from": [0, 0, 6],
"to": [2, 16, 10],
"faces": {
"north": {"uv": [0, 1, 2, 16], "texture": "#post"},
"east": {"uv": [0, 1, 4, 16], "texture": "#post"},
"south": {"uv": [0, 1, 2, 16], "texture": "#post"},
"west": {"uv": [0, 1, 4, 16], "texture": "#post", "cullface": "west"},
"up": {"uv": [0, 0, 2, 4], "texture": "#post", "cullface": "up"},
"down": {"uv": [0, 0, 2, 4], "texture": "#post", "cullface": "down"}
}
},
{
"from": [5, 6, 5],
"to": [11, 13, 11],
"faces": {
"north": {"uv": [3, 3, 6, 6.5], "rotation": 180, "texture": "#bell"},
"east": {"uv": [0, 3, 3, 6.5], "rotation": 180, "texture": "#bell"},
"south": {"uv": [9, 3, 12, 6.5], "rotation": 180, "texture": "#bell"},
"west": {"uv": [6, 3, 9, 6.5], "rotation": 180, "texture": "#bell"},
"up": {"uv": [3, 0, 6, 3], "rotation": 180, "texture": "#bell"}
}
},
{
"from": [4, 4, 4],
"to": [12, 6, 12],
"faces": {
"north": {"uv": [4, 10.5, 8, 11.5], "rotation": 180, "texture": "#bell"},
"east": {"uv": [0, 10.5, 4, 11.5], "rotation": 180, "texture": "#bell"},
"south": {"uv": [4, 10.5, 8, 11.5], "rotation": 180, "texture": "#bell"},
"west": {"uv": [8, 10.5, 12, 11.5], "rotation": 180, "texture": "#bell"},
"up": {"uv": [4, 6.5, 8, 10.5], "rotation": 180, "texture": "#bell"},
"down": {"uv": [8, 6.5, 12, 10.5], "rotation": 180, "texture": "#bell"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/bell_wall_with_bell.json
================================================
{
"textures": {
"bell": "entity/bell/bell_body",
"bar": "block/dark_oak_planks",
"particle": "entity/bell/bell_body"
},
"elements": [
{
"from": [3, 13, 7],
"to": [16, 15, 9],
"faces": {
"north": {"uv": [2, 2, 14, 4], "texture": "#bar"},
"east": {"uv": [5, 4, 7, 6], "texture": "#bar", "cullface": "east"},
"south": {"uv": [2, 3, 14, 5], "texture": "#bar"},
"west": {"uv": [5, 4, 7, 6], "texture": "#bar"},
"up": {"uv": [2, 3, 14, 5], "texture": "#bar"},
"down": {"uv": [2, 3, 14, 5], "texture": "#bar"}
}
},
{
"from": [5, 6, 5],
"to": [11, 13, 11],
"faces": {
"north": {"uv": [3, 3, 6, 6.5], "rotation": 180, "texture": "#bell"},
"east": {"uv": [0, 3, 3, 6.5], "rotation": 180, "texture": "#bell"},
"south": {"uv": [9, 3, 12, 6.5], "rotation": 180, "texture": "#bell"},
"west": {"uv": [6, 3, 9, 6.5], "rotation": 180, "texture": "#bell"},
"up": {"uv": [3, 0, 6, 3], "rotation": 180, "texture": "#bell"}
}
},
{
"from": [4, 4, 4],
"to": [12, 6, 12],
"faces": {
"north": {"uv": [4, 10.5, 8, 11.5], "rotation": 180, "texture": "#bell"},
"east": {"uv": [0, 10.5, 4, 11.5], "rotation": 180, "texture": "#bell"},
"south": {"uv": [4, 10.5, 8, 11.5], "rotation": 180, "texture": "#bell"},
"west": {"uv": [8, 10.5, 12, 11.5], "rotation": 180, "texture": "#bell"},
"up": {"uv": [4, 6.5, 8, 10.5], "rotation": 180, "texture": "#bell"},
"down": {"uv": [8, 6.5, 12, 10.5], "rotation": 180, "texture": "#bell"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/decorated_pot_base.json
================================================
{
"parent": "block/block",
"texture_size": [32, 32],
"textures": {
"0": "entity/decorated_pot/decorated_pot_base",
"particle": "minecraft:block/terracotta"
},
"elements": [
{
"from": [1, 0, 1],
"to": [15, 16, 15],
"faces": {
"up": {"uv": [7, 6.5, 14, 13.5], "texture": "#0", "cullface": "up"},
"down": {"uv": [0, 6.5, 7, 13.5], "texture": "#0", "cullface": "down"}
}
},
{
"from": [4.8, 15.8, 4.8],
"to": [11.2, 17.2, 11.2],
"faces": {
"north": {"uv": [3, 5.5, 6, 6], "texture": "#0"},
"east": {"uv": [0, 5.5, 3, 6], "texture": "#0"},
"south": {"uv": [9, 5.5, 12, 6], "texture": "#0"},
"west": {"uv": [6, 5.5, 9, 6], "texture": "#0"}
}
},
{
"from": [4.1, 17.1, 4.1],
"to": [11.9, 19.9, 11.9],
"faces": {
"north": {"uv": [4, 4, 8, 5.5], "texture": "#0"},
"east": {"uv": [0, 4, 4, 5.5], "texture": "#0"},
"south": {"uv": [12, 4, 16, 5.5], "texture": "#0"},
"west": {"uv": [8, 4, 12, 5.5], "texture": "#0"},
"up": {"uv": [4, 0, 8, 4], "texture": "#0"},
"down": {"uv": [8, 0, 12, 4], "texture": "#0"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/decorated_pot_shaking.json
================================================
{
"textures": {
"particle": "minecraft:block/terracotta"
}
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_bed_foot.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 64],
"textures": {
"particle": "#bed"
},
"elements": [
{
"from": [0, 0, 13],
"to": [3, 3, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [1.5, 0, 14.5]},
"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", "cullface": "south"},
"west": {"uv": [12.5, 0.75, 13.25, 1.5], "texture": "#bed", "cullface": "west"},
"down": {"uv": [14, 0, 14.75, 0.75], "texture": "#bed", "cullface": "down"}
}
},
{
"from": [13, 0, 13],
"to": [16, 3, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [14.5, 0, 14.5]},
"faces": {
"north": {"uv": [14, 3.75, 14.75, 4.5], "texture": "#bed"},
"east": {"uv": [13.25, 3.75, 14, 4.5], "texture": "#bed", "cullface": "east"},
"south": {"uv": [12.5, 3.75, 13.25, 4.5], "texture": "#bed", "cullface": "south"},
"west": {"uv": [14.75, 3.75, 15.5, 4.5], "texture": "#bed"},
"down": {"uv": [14, 3, 14.75, 3.75], "rotation": 90, "texture": "#bed", "cullface": "down"}
}
},
{
"from": [0, 3, 0],
"to": [16, 9, 16],
"rotation": {"angle": 0, "axis": "x", "origin": [0, 3, 16]},
"faces": {
"east": {"uv": [5.5, 7, 7, 11], "rotation": 90, "texture": "#bed", "cullface": "east"},
"south": {"uv": [5.5, 5.5, 9.5, 7], "rotation": 180, "texture": "#bed", "cullface": "south"},
"west": {"uv": [0, 7, 1.5, 11], "rotation": 270, "texture": "#bed", "cullface": "west"},
"up": {"uv": [1.5, 7, 5.5, 11], "texture": "#bed"},
"down": {"uv": [7, 7, 11, 11], "rotation": 180, "texture": "#bed"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_bed_foot_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 64],
"textures": {
"particle": "#bed"
},
"elements": [
{
"from": [0, 0, 13],
"to": [3, 3, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [1.5, 0, 14.5]},
"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", "cullface": "south"},
"west": {"uv": [12.5, 0.75, 13.25, 1.5], "texture": "#bed", "cullface": "west"},
"down": {"uv": [14, 0, 14.75, 0.75], "texture": "#bed", "cullface": "down"}
}
},
{
"from": [13, 0, 13],
"to": [16, 3, 16],
"rotation": {"angle": 0, "axis": "y", "origin": [14.5, 0, 14.5]},
"faces": {
"north": {"uv": [14, 3.75, 14.75, 4.5], "texture": "#bed"},
"east": {"uv": [13.25, 3.75, 14, 4.5], "texture": "#bed", "cullface": "east"},
"south": {"uv": [12.5, 3.75, 13.25, 4.5], "texture": "#bed", "cullface": "south"},
"west": {"uv": [14.75, 3.75, 15.5, 4.5], "texture": "#bed"},
"down": {"uv": [14, 3, 14.75, 3.75], "rotation": 90, "texture": "#bed", "cullface": "down"}
}
},
{
"from": [0, 3, 0],
"to": [16, 9, 16],
"rotation": {"angle": 0, "axis": "x", "origin": [0, 3, 16]},
"faces": {
"east": {"uv": [5.5, 7, 7, 11], "rotation": 90, "texture": "#bed", "cullface": "east"},
"south": {"uv": [5.5, 5.5, 9.5, 7], "rotation": 180, "texture": "#bed", "cullface": "south"},
"west": {"uv": [0, 7, 1.5, 11], "rotation": 270, "texture": "#bed", "cullface": "west"},
"up": {"uv": [1.5, 7, 5.5, 11], "texture": "#bed"},
"down": {"uv": [7, 7, 11, 11], "rotation": 180, "texture": "#bed"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_bed_foot_offset.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 64],
"textures": {
"particle": "#bed"
},
"elements": [
{
"from": [0, 0, 29],
"to": [3, 3, 32],
"rotation": {"angle": 0, "axis": "y", "origin": [1.5, 0, 14.5]},
"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", "cullface": "south"},
"west": {"uv": [12.5, 0.75, 13.25, 1.5], "texture": "#bed", "cullface": "west"},
"down": {"uv": [14, 0, 14.75, 0.75], "texture": "#bed", "cullface": "down"}
}
},
{
"from": [13, 0, 29],
"to": [16, 3, 32],
"rotation": {"angle": 0, "axis": "y", "origin": [14.5, 0, 14.5]},
"faces": {
"north": {"uv": [14, 3.75, 14.75, 4.5], "texture": "#bed"},
"east": {"uv": [13.25, 3.75, 14, 4.5], "texture": "#bed", "cullface": "east"},
"south": {"uv": [12.5, 3.75, 13.25, 4.5], "texture": "#bed", "cullface": "south"},
"west": {"uv": [14.75, 3.75, 15.5, 4.5], "texture": "#bed"},
"down": {"uv": [14, 3, 14.75, 3.75], "rotation": 90, "texture": "#bed", "cullface": "down"}
}
},
{
"from": [0, 3, 16],
"to": [16, 9, 32],
"rotation": {"angle": 0, "axis": "x", "origin": [0, 3, 16]},
"faces": {
"east": {"uv": [5.5, 7, 7, 11], "rotation": 90, "texture": "#bed", "cullface": "east"},
"south": {"uv": [5.5, 5.5, 9.5, 7], "rotation": 180, "texture": "#bed", "cullface": "south"},
"west": {"uv": [0, 7, 1.5, 11], "rotation": 270, "texture": "#bed", "cullface": "west"},
"up": {"uv": [1.5, 7, 5.5, 11], "texture": "#bed"},
"down": {"uv": [7, 7, 11, 11], "rotation": 180, "texture": "#bed"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_bed_head.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 64],
"textures": {
"particle": "#bed"
},
"elements": [
{
"from": [0, 0, 0],
"to": [3, 3, 3],
"rotation": {"angle": 0, "axis": "y", "origin": [1.5, 0, 1.5]},
"faces": {
"north": {"uv": [12.5, 2.25, 13.25, 3], "texture": "#bed", "cullface": "north"},
"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", "cullface": "west"},
"down": {"uv": [14, 1.5, 14.75, 2.25], "rotation": 270, "texture": "#bed", "cullface": "down"}
}
},
{
"from": [13, 0, 0],
"to": [16, 3, 3],
"faces": {
"north": {"uv": [13.25, 5.25, 14, 6], "texture": "#bed", "cullface": "north"},
"east": {"uv": [12.5, 5.25, 13.25, 6], "texture": "#bed", "cullface": "east"},
"south": {"uv": [14.75, 5.25, 15.5, 6], "texture": "#bed"},
"west": {"uv": [14, 5.25, 14.75, 6], "texture": "#bed"},
"down": {"uv": [14, 4.5, 14.75, 5.25], "rotation": 180, "texture": "#bed", "cullface": "down"}
}
},
{
"from": [0, 3, 0],
"to": [16, 9, 16],
"rotation": {"angle": 0, "axis": "x", "origin": [0, 3, 16]},
"faces": {
"north": {"uv": [1.5, 0, 5.5, 1.5], "rotation": 180, "texture": "#bed", "cullface": "north"},
"east": {"uv": [5.5, 1.5, 7, 5.5], "rotation": 90, "texture": "#bed", "cullface": "east"},
"west": {"uv": [0, 1.5, 1.5, 5.5], "rotation": 270, "texture": "#bed", "cullface": "west"},
"up": {"uv": [1.5, 1.5, 5.5, 5.5], "texture": "#bed"},
"down": {"uv": [7, 1.5, 11, 5.5], "rotation": 180, "texture": "#bed"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_bed_head_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 64],
"textures": {
"particle": "#bed"
},
"elements": [
{
"from": [0, 0, 0],
"to": [3, 3, 3],
"rotation": {"angle": 0, "axis": "y", "origin": [1.5, 0, 1.5]},
"faces": {
"north": {"uv": [12.5, 2.25, 13.25, 3], "texture": "#bed", "cullface": "north"},
"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", "cullface": "west"},
"down": {"uv": [14, 1.5, 14.75, 2.25], "rotation": 270, "texture": "#bed", "cullface": "down"}
}
},
{
"from": [13, 0, 0],
"to": [16, 3, 3],
"faces": {
"north": {"uv": [13.25, 5.25, 14, 6], "texture": "#bed", "cullface": "north"},
"east": {"uv": [12.5, 5.25, 13.25, 6], "texture": "#bed", "cullface": "east"},
"south": {"uv": [14.75, 5.25, 15.5, 6], "texture": "#bed"},
"west": {"uv": [14, 5.25, 14.75, 6], "texture": "#bed"},
"down": {"uv": [14, 4.5, 14.75, 5.25], "rotation": 180, "texture": "#bed", "cullface": "down"}
}
},
{
"from": [0, 3, 0],
"to": [16, 9, 16],
"rotation": {"angle": 0, "axis": "x", "origin": [0, 3, 16]},
"faces": {
"north": {"uv": [1.5, 0, 5.5, 1.5], "rotation": 180, "texture": "#bed", "cullface": "north"},
"east": {"uv": [5.5, 1.5, 7, 5.5], "rotation": 90, "texture": "#bed", "cullface": "east"},
"west": {"uv": [0, 1.5, 1.5, 5.5], "rotation": 270, "texture": "#bed", "cullface": "west"},
"up": {"uv": [1.5, 1.5, 5.5, 5.5], "texture": "#bed"},
"down": {"uv": [7, 1.5, 11, 5.5], "rotation": 180, "texture": "#bed"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_chest_center.json
================================================
{
"parent": "block/block",
"texture_size": [64, 64],
"textures": {
"particle": "#chest"
},
"elements": [
{
"from": [1, 0, 1],
"to": [15, 10, 15],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 9]},
"faces": {
"north": {"uv": [10.5, 8.25, 14, 10.75], "rotation": 180, "texture": "#chest"},
"east": {"uv": [0, 8.25, 3.5, 10.75], "rotation": 180, "texture": "#chest"},
"south": {"uv": [3.5, 8.25, 7, 10.75], "rotation": 180, "texture": "#chest"},
"west": {"uv": [7, 8.25, 10.5, 10.75], "rotation": 180, "texture": "#chest"},
"down": {"uv": [3.5, 4.75, 7, 8.25], "texture": "#chest", "cullface": "down"}
}
},
{
"from": [1, 9, 1],
"to": [15, 14, 15],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 18, 9]},
"faces": {
"north": {"uv": [10.5, 3.5, 14, 4.75], "rotation": 180, "texture": "#chest"},
"east": {"uv": [0, 3.5, 3.5, 4.75], "rotation": 180, "texture": "#chest"},
"south": {"uv": [3.5, 3.5, 7, 4.75], "rotation": 180, "texture": "#chest"},
"west": {"uv": [7, 3.5, 10.5, 4.75], "rotation": 180, "texture": "#chest"},
"up": {"uv": [10.5, 0, 7, 3.5], "texture": "#chest"}
}
},
{
"from": [7, 7, 0],
"to": [9, 11, 1],
"rotation": {"angle": 0, "axis": "y", "origin": [15, 15, 8]},
"faces": {
"north": {"uv": [1, 0.25, 1.5, 1.25], "rotation": 180, "texture": "#chest"},
"east": {"uv": [0, 0.25, 0.25, 1.25], "rotation": 180, "texture": "#chest"},
"west": {"uv": [0.75, 0.25, 1, 1.25], "rotation": 180, "texture": "#chest"},
"up": {"uv": [1.25, 0, 0.75, 0.25], "texture": "#chest"},
"down": {"uv": [0.25, 0, 0.75, 0.25], "rotation": 180, "texture": "#chest"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_chest_center_lid.json
================================================
{
"parent": "block/block",
"texture_size": [64, 64],
"textures": {
"particle": "#chest"
},
"elements": [
{
"from": [1, 9, 1],
"to": [15, 14, 15],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 18, 9]},
"faces": {
"north": {"uv": [10.5, 3.5, 14, 4.75], "rotation": 180, "texture": "#chest"},
"east": {"uv": [0, 3.5, 3.5, 4.75], "rotation": 180, "texture": "#chest"},
"south": {"uv": [3.5, 3.5, 7, 4.75], "rotation": 180, "texture": "#chest"},
"west": {"uv": [7, 3.5, 10.5, 4.75], "rotation": 180, "texture": "#chest"},
"up": {"uv": [10.5, 0, 7, 3.5], "texture": "#chest"},
"down": {"uv": [3.5, 0, 7, 3.5], "texture": "#chest"}
}
},
{
"from": [7, 7, 0],
"to": [9, 11, 1],
"rotation": {"angle": 0, "axis": "y", "origin": [15, 15, 8]},
"faces": {
"north": {"uv": [1, 0.25, 1.5, 1.25], "rotation": 180, "texture": "#chest"},
"east": {"uv": [0, 0.25, 0.25, 1.25], "rotation": 180, "texture": "#chest"},
"south": {"uv": [0.25, 0.25, 0.75, 1.25], "rotation": 180, "texture": "#chest"},
"west": {"uv": [0.75, 0.25, 1, 1.25], "rotation": 180, "texture": "#chest"},
"up": {"uv": [1.25, 0, 0.75, 0.25], "texture": "#chest"},
"down": {"uv": [0.25, 0, 0.75, 0.25], "rotation": 180, "texture": "#chest"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_chest_center_trunk.json
================================================
{
"parent": "block/block",
"texture_size": [64, 64],
"textures": {
"particle": "#chest"
},
"elements": [
{
"from": [1, 0, 1],
"to": [15, 10, 15],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 9]},
"faces": {
"north": {"uv": [10.5, 8.25, 14, 10.75], "rotation": 180, "texture": "#chest"},
"east": {"uv": [0, 8.25, 3.5, 10.75], "rotation": 180, "texture": "#chest"},
"south": {"uv": [3.5, 8.25, 7, 10.75], "rotation": 180, "texture": "#chest"},
"west": {"uv": [7, 8.25, 10.5, 10.75], "rotation": 180, "texture": "#chest"},
"up": {"uv": [7, 4.75, 10.5, 8.25], "texture": "#chest"},
"down": {"uv": [3.5, 4.75, 7, 8.25], "texture": "#chest", "cullface": "down"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_chest_left.json
================================================
{
"parent": "block/block",
"texture_size": [64, 64],
"textures": {
"particle": "#chest"
},
"elements": [
{
"from": [1, 0, 1],
"to": [16, 10, 15],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 9]},
"faces": {
"north": {"uv": [10.75, 8.25, 14.5, 10.75], "rotation": 180, "texture": "#chest"},
"south": {"uv": [3.5, 8.25, 7.25, 10.75], "rotation": 180, "texture": "#chest"},
"west": {"uv": [7.25, 8.25, 10.75, 10.75], "rotation": 180, "texture": "#chest"},
"down": {"uv": [7.25, 4.75, 3.5, 8.25], "texture": "#chest", "cullface": "down"}
}
},
{
"from": [1, 9, 1],
"to": [16, 14, 15],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 17, 9]},
"faces": {
"north": {"uv": [10.75, 3.5, 14.5, 4.75], "rotation": 180, "texture": "#chest"},
"east": {"uv": [0, 3.5, 3.5, 4.75], "rotation": 180, "texture": "#chest"},
"south": {"uv": [3.5, 3.5, 7.25, 4.75], "rotation": 180, "texture": "#chest"},
"west": {"uv": [7.25, 3.5, 10.75, 4.75], "rotation": 180, "texture": "#chest"},
"up": {"uv": [11, 0, 7.25, 3.5], "texture": "#chest"}
}
},
{
"from": [15, 7, 0],
"to": [16, 11, 1],
"rotation": {"angle": 0, "axis": "y", "origin": [23, 15, 8]},
"faces": {
"north": {"uv": [0.75, 0.25, 1, 1.25], "rotation": 180, "texture": "#chest"},
"west": {"uv": [0.5, 0.25, 0.75, 1.25], "rotation": 180, "texture": "#chest"},
"up": {"uv": [0.5, 0, 0.75, 0.25], "texture": "#chest"},
"down": {"uv": [0.25, 0, 0.5, 0.25], "texture": "#chest"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_chest_left_lid.json
================================================
{
"parent": "block/block",
"texture_size": [64, 64],
"textures": {
"particle": "#chest"
},
"elements": [
{
"from": [1, 9, 1],
"to": [16, 14, 15],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 17, 9]},
"faces": {
"north": {"uv": [10.75, 3.5, 14.5, 4.75], "rotation": 180, "texture": "#chest"},
"south": {"uv": [3.5, 3.5, 7.25, 4.75], "rotation": 180, "texture": "#chest"},
"west": {"uv": [7.25, 3.5, 10.75, 4.75], "rotation": 180, "texture": "#chest"},
"up": {"uv": [11, 0, 7.25, 3.5], "texture": "#chest"},
"down": {"uv": [7.25, 0, 3.5, 3.5], "texture": "#chest"}
}
},
{
"from": [15, 7, 0],
"to": [16, 11, 1],
"rotation": {"angle": 0, "axis": "y", "origin": [23, 15, 8]},
"faces": {
"north": {"uv": [0.75, 0.25, 1, 1.25], "rotation": 180, "texture": "#chest"},
"south": {"uv": [0.25, 0.25, 0.5, 1.25], "texture": "#chest"},
"west": {"uv": [0.5, 0.25, 0.75, 1.25], "rotation": 180, "texture": "#chest"},
"up": {"uv": [0.5, 0, 0.75, 0.25], "texture": "#chest"},
"down": {"uv": [0.25, 0, 0.5, 0.25], "texture": "#chest"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_chest_left_trunk.json
================================================
{
"parent": "block/block",
"texture_size": [64, 64],
"textures": {
"particle": "#chest"
},
"elements": [
{
"from": [1, 0, 1],
"to": [16, 10, 15],
"rotation": {"angle": 0, "axis": "y", "origin": [9, 8, 9]},
"faces": {
"north": {"uv": [10.75, 8.25, 14.5, 10.75], "rotation": 180, "texture": "#chest"},
"south": {"uv": [3.5, 8.25, 7.25, 10.75], "rotation": 180, "texture": "#chest"},
"west": {"uv": [7.25, 8.25, 10.75, 10.75], "rotation": 180, "texture": "#chest"},
"up": {"uv": [11, 4.75, 7.25, 8.25], "texture": "#chest"},
"down": {"uv": [7.25, 4.75, 3.5, 8.25], "texture": "#chest", "cullface": "down"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_chest_right.json
================================================
{
"parent": "block/block",
"texture_size": [64, 64],
"textures": {
"particle": "#chest"
},
"elements": [
{
"from": [0, 0, 1],
"to": [15, 10, 15],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 9]},
"faces": {
"north": {"uv": [10.75, 8.25, 14.5, 10.75], "rotation": 180, "texture": "#chest"},
"east": {"uv": [0, 8.25, 3.5, 10.75], "rotation": 180, "texture": "#chest"},
"south": {"uv": [3.5, 8.25, 7.25, 10.75], "rotation": 180, "texture": "#chest"},
"down": {"uv": [7.25, 4.75, 3.5, 8.25], "texture": "#chest", "cullface": "down"}
}
},
{
"from": [0, 9, 1],
"to": [15, 14, 15],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 9]},
"faces": {
"north": {"uv": [10.75, 3.5, 14.5, 4.75], "rotation": 180, "texture": "#chest"},
"east": {"uv": [0, 3.5, 3.5, 4.75], "rotation": 180, "texture": "#chest"},
"south": {"uv": [3.5, 3.5, 7.25, 4.75], "rotation": 180, "texture": "#chest"},
"up": {"uv": [11, 0, 7.25, 3.5], "texture": "#chest"}
}
},
{
"from": [0, 7, 0],
"to": [1, 11, 1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]},
"faces": {
"north": {"uv": [0.75, 0.25, 1, 1.25], "rotation": 180, "texture": "#chest"},
"east": {"uv": [0, 0.25, 0.25, 1.25], "rotation": 180, "texture": "#chest"},
"up": {"uv": [0.5, 0, 0.75, 0.25], "texture": "#chest"},
"down": {"uv": [0.25, 0, 0.5, 0.25], "texture": "#chest"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_chest_right_lid.json
================================================
{
"parent": "block/block",
"texture_size": [64, 64],
"textures": {
"particle": "#chest"
},
"elements": [
{
"from": [0, 9, 1],
"to": [15, 14, 15],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 9]},
"faces": {
"north": {"uv": [10.75, 3.5, 14.5, 4.75], "rotation": 180, "texture": "#chest"},
"east": {"uv": [0, 3.5, 3.5, 4.75], "rotation": 180, "texture": "#chest"},
"south": {"uv": [3.5, 3.5, 7.25, 4.75], "rotation": 180, "texture": "#chest"},
"up": {"uv": [11, 0, 7.25, 3.5], "texture": "#chest"},
"down": {"uv": [7.25, 0, 3.5, 3.5], "texture": "#chest"}
}
},
{
"from": [0, 7, 0],
"to": [1, 11, 1],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]},
"faces": {
"north": {"uv": [0.75, 0.25, 1, 1.25], "rotation": 180, "texture": "#chest"},
"east": {"uv": [0, 0.25, 0.25, 1.25], "rotation": 180, "texture": "#chest"},
"south": {"uv": [0.25, 0.25, 0.5, 1.25], "texture": "#chest"},
"up": {"uv": [0.5, 0, 0.75, 0.25], "texture": "#chest"},
"down": {"uv": [0.25, 0, 0.5, 0.25], "texture": "#chest"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_chest_right_trunk.json
================================================
{
"parent": "block/block",
"texture_size": [64, 64],
"textures": {
"particle": "#chest"
},
"elements": [
{
"from": [0, 0, 1],
"to": [15, 10, 15],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 8, 9]},
"faces": {
"north": {"uv": [10.75, 8.25, 14.5, 10.75], "rotation": 180, "texture": "#chest"},
"east": {"uv": [0, 8.25, 3.5, 10.75], "rotation": 180, "texture": "#chest"},
"south": {"uv": [3.5, 8.25, 7.25, 10.75], "rotation": 180, "texture": "#chest"},
"up": {"uv": [11, 4.75, 7.25, 8.25], "texture": "#chest"},
"down": {"uv": [7.25, 4.75, 3.5, 8.25], "texture": "#chest", "cullface": "down"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_0.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 32],
"elements": [
{
"from": [1, 0, 7],
"to": [15, 10, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"east": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"south": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"west": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [10.03553, 10, 11.53553],
"to": [13.03553, 16, 11.53553],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [10.03553, 10, 4.46447],
"to": [13.03553, 16, 4.46447],
"rotation": {"angle": -45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [2.96447, 10, 4.46447],
"to": [5.96447, 16, 4.46447],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [2.96447, 10, 11.53553],
"to": [5.96447, 16, 11.53553],
"rotation": {"angle": -45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_0_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 32],
"elements": [
{
"from": [1, 0, 7],
"to": [15, 10, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"east": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"south": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"west": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [10.03553, 10, 11.53553],
"to": [13.03553, 16, 11.53553],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [10.03553, 10, 4.46447],
"to": [13.03553, 16, 4.46447],
"rotation": {"angle": -45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [2.96447, 10, 4.46447],
"to": [5.96447, 16, 4.46447],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [2.96447, 10, 11.53553],
"to": [5.96447, 16, 11.53553],
"rotation": {"angle": -45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_22_5.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 32],
"elements": [
{
"from": [1, 0, 7],
"to": [15, 10, 9],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"east": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"south": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"west": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [11.53553, 10, 2.96447],
"to": [11.53553, 16, 5.96447],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"east": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"south": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"west": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "rotation": 270, "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "rotation": 90, "texture": "#sign"}
}
},
{
"from": [10.03553, 10, 4.46447],
"to": [13.03553, 16, 4.46447],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [4.46447, 10, 10.03553],
"to": [4.46447, 16, 13.03553],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"east": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"south": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"west": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "rotation": 270, "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "rotation": 90, "texture": "#sign"}
}
},
{
"from": [2.96447, 10, 11.53553],
"to": [5.96447, 16, 11.53553],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_22_5_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 32],
"elements": [
{
"from": [1, 0, 7],
"to": [15, 10, 9],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"east": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"south": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"west": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [11.53553, 10, 2.96447],
"to": [11.53553, 16, 5.96447],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"east": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"south": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"west": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "rotation": 270, "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "rotation": 90, "texture": "#sign"}
}
},
{
"from": [10.03553, 10, 4.46447],
"to": [13.03553, 16, 4.46447],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [4.46447, 10, 10.03553],
"to": [4.46447, 16, 13.03553],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"east": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"south": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"west": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "rotation": 270, "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "rotation": 90, "texture": "#sign"}
}
},
{
"from": [2.96447, 10, 11.53553],
"to": [5.96447, 16, 11.53553],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_45.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 32],
"elements": [
{
"from": [1, 0, 7],
"to": [15, 10, 9],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"east": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"south": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"west": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [11.53553, 10, 2.96447],
"to": [11.53553, 16, 5.96447],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"east": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"south": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"west": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "rotation": 270, "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "rotation": 90, "texture": "#sign"}
}
},
{
"from": [10.03553, 10, 4.46447],
"to": [13.03553, 16, 4.46447],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [4.46447, 10, 10.03553],
"to": [4.46447, 16, 13.03553],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"east": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"south": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"west": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "rotation": 270, "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "rotation": 90, "texture": "#sign"}
}
},
{
"from": [2.96447, 10, 11.53553],
"to": [5.96447, 16, 11.53553],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_45_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 32],
"elements": [
{
"from": [1, 0, 7],
"to": [15, 10, 9],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"east": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"south": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"west": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [11.53553, 10, 2.96447],
"to": [11.53553, 16, 5.96447],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"east": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"south": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"west": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "rotation": 270, "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "rotation": 90, "texture": "#sign"}
}
},
{
"from": [10.03553, 10, 4.46447],
"to": [13.03553, 16, 4.46447],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [4.46447, 10, 10.03553],
"to": [4.46447, 16, 13.03553],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"east": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"south": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"west": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "rotation": 270, "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "rotation": 90, "texture": "#sign"}
}
},
{
"from": [2.96447, 10, 11.53553],
"to": [5.96447, 16, 11.53553],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_67_5.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 32],
"elements": [
{
"from": [7, 0, 1],
"to": [9, 10, 15],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"east": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"south": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"west": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "rotation": 270, "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "rotation": 90, "texture": "#sign", "cullface": "down"}
}
},
{
"from": [11.53553, 10, 2.96447],
"to": [11.53553, 16, 5.96447],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"east": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"south": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"west": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "rotation": 270, "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "rotation": 90, "texture": "#sign"}
}
},
{
"from": [10.03553, 10, 4.46447],
"to": [13.03553, 16, 4.46447],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [4.46447, 10, 10.03553],
"to": [4.46447, 16, 13.03553],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"east": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"south": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"west": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "rotation": 270, "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "rotation": 90, "texture": "#sign"}
}
},
{
"from": [2.96447, 10, 11.53553],
"to": [5.96447, 16, 11.53553],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_67_5_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 32],
"elements": [
{
"from": [7, 0, 1],
"to": [9, 10, 15],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"east": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"south": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"west": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "rotation": 270, "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "rotation": 90, "texture": "#sign", "cullface": "down"}
}
},
{
"from": [11.53553, 10, 2.96447],
"to": [11.53553, 16, 5.96447],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"east": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"south": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"west": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "rotation": 270, "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "rotation": 90, "texture": "#sign"}
}
},
{
"from": [10.03553, 10, 4.46447],
"to": [13.03553, 16, 4.46447],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [4.46447, 10, 10.03553],
"to": [4.46447, 16, 13.03553],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"east": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"south": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"west": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "rotation": 270, "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "rotation": 90, "texture": "#sign"}
}
},
{
"from": [2.96447, 10, 11.53553],
"to": [5.96447, 16, 11.53553],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_attached_0.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 32],
"elements": [
{
"from": [1, 0, 7],
"to": [15, 10, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"east": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"south": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"west": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [2, 10, 8],
"to": [14, 16, 8],
"faces": {
"north": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 3, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 3, 0], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_attached_0_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 32],
"elements": [
{
"from": [1, 0, 7],
"to": [15, 10, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"east": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"south": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"west": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [2, 10, 8],
"to": [14, 16, 8],
"faces": {
"north": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 3, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 3, 0], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_attached_22_5.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 32],
"elements": [
{
"from": [1, 0, 7],
"to": [15, 10, 9],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"east": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"south": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"west": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [2, 10, 8],
"to": [14, 16, 8],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 3, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 3, 0], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_attached_22_5_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 32],
"elements": [
{
"from": [1, 0, 7],
"to": [15, 10, 9],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"east": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"south": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"west": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [2, 10, 8],
"to": [14, 16, 8],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 3, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 3, 0], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_attached_45.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 32],
"elements": [
{
"from": [1, 0, 7],
"to": [15, 10, 9],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"east": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"south": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"west": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [2, 10, 8],
"to": [14, 16, 8],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 3, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 3, 0], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_attached_45_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 32],
"elements": [
{
"from": [1, 0, 7],
"to": [15, 10, 9],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"east": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"south": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"west": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [2, 10, 8],
"to": [14, 16, 8],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 3, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 3, 0], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_attached_67_5.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 32],
"elements": [
{
"from": [7, 0, 1],
"to": [9, 10, 15],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"east": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"south": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"west": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "rotation": 270, "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "rotation": 90, "texture": "#sign", "cullface": "down"}
}
},
{
"from": [8, 10, 2],
"to": [8, 16, 14],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"east": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"south": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"west": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"up": {"uv": [0, 0, 3, 0], "rotation": 270, "texture": "#sign"},
"down": {"uv": [0, 0, 3, 0], "rotation": 90, "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_hanging_sign_attached_67_5_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 32],
"elements": [
{
"from": [7, 0, 1],
"to": [9, 10, 15],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"east": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"south": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"west": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "rotation": 270, "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "rotation": 90, "texture": "#sign", "cullface": "down"}
}
},
{
"from": [8, 10, 2],
"to": [8, 16, 14],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"east": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"south": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"west": {"uv": [3.5, 3, 6.5, 6], "texture": "#sign"},
"up": {"uv": [0, 0, 3, 0], "rotation": 270, "texture": "#sign"},
"down": {"uv": [0, 0, 3, 0], "rotation": 90, "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_pottery_pattern_east.json
================================================
{
"parent": "block/block",
"elements": [
{
"from": [1, 0, 1],
"to": [15, 16, 15],
"faces": {
"east": {"uv": [1, 0, 15, 16], "texture": "#pattern"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_pottery_pattern_north.json
================================================
{
"parent": "block/block",
"elements": [
{
"from": [1, 0, 1],
"to": [15, 16, 15],
"faces": {
"north": {"uv": [1, 0, 15, 16], "texture": "#pattern"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_pottery_pattern_south.json
================================================
{
"parent": "block/block",
"elements": [
{
"from": [1, 0, 1],
"to": [15, 16, 15],
"faces": {
"south": {"uv": [1, 0, 15, 16], "texture": "#pattern"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_pottery_pattern_west.json
================================================
{
"parent": "block/block",
"elements": [
{
"from": [1, 0, 1],
"to": [15, 16, 15],
"faces": {
"west": {"uv": [1, 0, 15, 16], "texture": "#pattern"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_shulker_box.json
================================================
{
"parent": "block/block",
"texture_size": [64, 64],
"textures": {
"particle": "#shulker"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 8, 16],
"faces": {
"north": {"uv": [4, 11, 8, 13], "texture": "#shulker", "cullface": "north"},
"east": {"uv": [0, 11, 4, 13], "texture": "#shulker", "cullface": "east"},
"south": {"uv": [12, 11, 16, 13], "texture": "#shulker", "cullface": "south"},
"west": {"uv": [8, 11, 12, 13], "texture": "#shulker", "cullface": "west"},
"down": {"uv": [8, 7, 12, 11], "texture": "#shulker", "cullface": "down"}
}
},
{
"from": [0, 4, 0],
"to": [16, 16, 16],
"faces": {
"north": {"uv": [4, 4, 8, 7], "texture": "#shulker", "cullface": "north"},
"east": {"uv": [0, 4, 4, 7], "texture": "#shulker", "cullface": "east"},
"south": {"uv": [12, 4, 16, 7], "texture": "#shulker", "cullface": "south"},
"west": {"uv": [8, 4, 12, 7], "texture": "#shulker", "cullface": "west"},
"up": {"uv": [4, 0, 8, 4], "texture": "#shulker", "cullface": "up"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_shulker_box_bottom.json
================================================
{
"parent": "block/block",
"texture_size": [64, 64],
"textures": {
"particle": "#shulker"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 8, 16],
"faces": {
"north": {"uv": [4, 11, 8, 13], "texture": "#shulker", "cullface": "north"},
"east": {"uv": [0, 11, 4, 13], "texture": "#shulker", "cullface": "east"},
"south": {"uv": [12, 11, 16, 13], "texture": "#shulker", "cullface": "south"},
"west": {"uv": [8, 11, 12, 13], "texture": "#shulker", "cullface": "west"},
"down": {"uv": [8, 7, 12, 11], "texture": "#shulker", "cullface": "down"}
}
},
{
"from": [15.95, 0.05, 0.05],
"to": [0.05, 8, 15.95],
"faces": {
"north": {"uv": [8, 11, 4, 13], "texture": "#shulker"},
"east": {"uv": [4, 11, 0, 13], "texture": "#shulker"},
"south": {"uv": [16, 11, 12, 13], "texture": "#shulker"},
"west": {"uv": [12, 11, 8, 13], "texture": "#shulker"},
"down": {"uv": [8, 7, 12, 11], "texture": "#shulker"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_shulker_box_lid.json
================================================
{
"parent": "block/block",
"texture_size": [64, 64],
"textures": {
"particle": "#shulker"
},
"elements": [
{
"from": [0, 4, 0],
"to": [16, 16, 16],
"faces": {
"north": {"uv": [4, 4, 8, 7], "texture": "#shulker", "cullface": "north"},
"east": {"uv": [0, 4, 4, 7], "texture": "#shulker", "cullface": "east"},
"south": {"uv": [12, 4, 16, 7], "texture": "#shulker", "cullface": "south"},
"west": {"uv": [8, 4, 12, 7], "texture": "#shulker", "cullface": "west"},
"up": {"uv": [4, 0, 8, 4], "texture": "#shulker", "cullface": "up"}
}
},
{
"from": [15.95, 4, 0.05],
"to": [0.05, 15.95, 15.95],
"faces": {
"north": {"uv": [8, 4, 4, 7], "texture": "#shulker"},
"east": {"uv": [4, 4, 0, 7], "texture": "#shulker"},
"south": {"uv": [16, 4, 12, 7], "texture": "#shulker"},
"west": {"uv": [12, 4, 8, 7], "texture": "#shulker"},
"up": {"uv": [4, 0, 8, 4], "texture": "#shulker"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_sign_0.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 32],
"textures": {
"particle": "#sign"
},
"elements": [
{
"from": [7.3333, 0, 7.3333],
"to": [8.66663, 9.33333, 8.66663],
"faces": {
"north": {"uv": [0.5, 8, 1, 15], "texture": "#sign"},
"east": {"uv": [0, 8, 0.5, 15], "texture": "#sign"},
"south": {"uv": [1.5, 8, 2, 15], "texture": "#sign"},
"west": {"uv": [1, 8, 1.5, 15], "texture": "#sign"},
"down": {"uv": [1, 7, 1.5, 8], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [0, 9.3333, 7.3333],
"to": [16, 17.3333, 8.66663],
"faces": {
"north": {"uv": [0.5, 1, 6.5, 7], "texture": "#sign"},
"east": {"uv": [0, 1, 0.5, 7], "texture": "#sign"},
"south": {"uv": [7, 1, 13, 7], "texture": "#sign"},
"west": {"uv": [6.5, 1, 7, 7], "texture": "#sign"},
"up": {"uv": [0.5, 0, 6.5, 1], "texture": "#sign"},
"down": {"uv": [6.5, 0, 12.5, 1], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_sign_0_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 32],
"textures": {
"particle": "#sign"
},
"elements": [
{
"from": [7.3333, 0, 7.3333],
"to": [8.66663, 9.33333, 8.66663],
"faces": {
"north": {"uv": [0.5, 8, 1, 15], "texture": "#sign"},
"east": {"uv": [0, 8, 0.5, 15], "texture": "#sign"},
"south": {"uv": [1.5, 8, 2, 15], "texture": "#sign"},
"west": {"uv": [1, 8, 1.5, 15], "texture": "#sign"},
"down": {"uv": [1, 7, 1.5, 8], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [0, 9.3333, 7.3333],
"to": [16, 17.3333, 8.66663],
"faces": {
"north": {"uv": [0.5, 1, 6.5, 7], "texture": "#sign"},
"east": {"uv": [0, 1, 0.5, 7], "texture": "#sign"},
"south": {"uv": [7, 1, 13, 7], "texture": "#sign"},
"west": {"uv": [6.5, 1, 7, 7], "texture": "#sign"},
"up": {"uv": [0.5, 0, 6.5, 1], "texture": "#sign"},
"down": {"uv": [6.5, 0, 12.5, 1], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_sign_22_5.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 32],
"textures": {
"particle": "#sign"
},
"elements": [
{
"from": [7.3333, 0, 7.3333],
"to": [8.66663, 9.33333, 8.66663],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0.5, 8, 1, 15], "texture": "#sign"},
"east": {"uv": [0, 8, 0.5, 15], "texture": "#sign"},
"south": {"uv": [1.5, 8, 2, 15], "texture": "#sign"},
"west": {"uv": [1, 8, 1.5, 15], "texture": "#sign"},
"down": {"uv": [1, 7, 1.5, 8], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [0, 9.3333, 7.3333],
"to": [16, 17.3333, 8.66663],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0.5, 1, 6.5, 7], "texture": "#sign"},
"east": {"uv": [0, 1, 0.5, 7], "texture": "#sign"},
"south": {"uv": [7, 1, 13, 7], "texture": "#sign"},
"west": {"uv": [6.5, 1, 7, 7], "texture": "#sign"},
"up": {"uv": [0.5, 0, 6.5, 1], "texture": "#sign"},
"down": {"uv": [6.5, 0, 12.5, 1], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_sign_22_5_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 32],
"textures": {
"particle": "#sign"
},
"elements": [
{
"from": [7.3333, 0, 7.3333],
"to": [8.66663, 9.33333, 8.66663],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0.5, 8, 1, 15], "texture": "#sign"},
"east": {"uv": [0, 8, 0.5, 15], "texture": "#sign"},
"south": {"uv": [1.5, 8, 2, 15], "texture": "#sign"},
"west": {"uv": [1, 8, 1.5, 15], "texture": "#sign"},
"down": {"uv": [1, 7, 1.5, 8], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [0, 9.3333, 7.3333],
"to": [16, 17.3333, 8.66663],
"rotation": {"angle": 22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0.5, 1, 6.5, 7], "texture": "#sign"},
"east": {"uv": [0, 1, 0.5, 7], "texture": "#sign"},
"south": {"uv": [7, 1, 13, 7], "texture": "#sign"},
"west": {"uv": [6.5, 1, 7, 7], "texture": "#sign"},
"up": {"uv": [0.5, 0, 6.5, 1], "texture": "#sign"},
"down": {"uv": [6.5, 0, 12.5, 1], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_sign_45.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 32],
"textures": {
"particle": "#sign"
},
"elements": [
{
"from": [7.3333, 0, 7.3333],
"to": [8.66663, 9.33333, 8.66663],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0.5, 8, 1, 15], "texture": "#sign"},
"east": {"uv": [0, 8, 0.5, 15], "texture": "#sign"},
"south": {"uv": [1.5, 8, 2, 15], "texture": "#sign"},
"west": {"uv": [1, 8, 1.5, 15], "texture": "#sign"},
"down": {"uv": [1, 7, 1.5, 8], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [0, 9.3333, 7.3333],
"to": [16, 17.3333, 8.66663],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0.5, 1, 6.5, 7], "texture": "#sign"},
"east": {"uv": [0, 1, 0.5, 7], "texture": "#sign"},
"south": {"uv": [7, 1, 13, 7], "texture": "#sign"},
"west": {"uv": [6.5, 1, 7, 7], "texture": "#sign"},
"up": {"uv": [0.5, 0, 6.5, 1], "texture": "#sign"},
"down": {"uv": [6.5, 0, 12.5, 1], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_sign_45_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 32],
"textures": {
"particle": "#sign"
},
"elements": [
{
"from": [7.3333, 0, 7.3333],
"to": [8.66663, 9.33333, 8.66663],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0.5, 8, 1, 15], "texture": "#sign"},
"east": {"uv": [0, 8, 0.5, 15], "texture": "#sign"},
"south": {"uv": [1.5, 8, 2, 15], "texture": "#sign"},
"west": {"uv": [1, 8, 1.5, 15], "texture": "#sign"},
"down": {"uv": [1, 7, 1.5, 8], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [0, 9.3333, 7.3333],
"to": [16, 17.3333, 8.66663],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0.5, 1, 6.5, 7], "texture": "#sign"},
"east": {"uv": [0, 1, 0.5, 7], "texture": "#sign"},
"south": {"uv": [7, 1, 13, 7], "texture": "#sign"},
"west": {"uv": [6.5, 1, 7, 7], "texture": "#sign"},
"up": {"uv": [0.5, 0, 6.5, 1], "texture": "#sign"},
"down": {"uv": [6.5, 0, 12.5, 1], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_sign_67_5.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 32],
"textures": {
"particle": "#sign"
},
"elements": [
{
"from": [7.3333, 0, 7.33337],
"to": [8.66663, 9.33333, 8.6667],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0, 8, 0.5, 15], "texture": "#sign"},
"east": {"uv": [1.5, 8, 2, 15], "texture": "#sign"},
"south": {"uv": [1, 8, 1.5, 15], "texture": "#sign"},
"west": {"uv": [0.5, 8, 1, 15], "texture": "#sign"},
"down": {"uv": [1, 7, 1.5, 8], "rotation": 90, "texture": "#sign", "cullface": "down"}
}
},
{
"from": [7.3333, 9.3333, 0],
"to": [8.66663, 17.3333, 16],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0, 1, 0.5, 7], "texture": "#sign"},
"east": {"uv": [7, 1, 13, 7], "texture": "#sign"},
"south": {"uv": [6.5, 1, 7, 7], "texture": "#sign"},
"west": {"uv": [0.5, 1, 6.5, 7], "texture": "#sign"},
"up": {"uv": [0.5, 0, 6.5, 1], "rotation": 270, "texture": "#sign"},
"down": {"uv": [6.5, 0, 12.5, 1], "rotation": 90, "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_sign_67_5_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 32],
"textures": {
"particle": "#sign"
},
"elements": [
{
"from": [7.3333, 0, 7.33337],
"to": [8.66663, 9.33333, 8.6667],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0, 8, 0.5, 15], "texture": "#sign"},
"east": {"uv": [1.5, 8, 2, 15], "texture": "#sign"},
"south": {"uv": [1, 8, 1.5, 15], "texture": "#sign"},
"west": {"uv": [0.5, 8, 1, 15], "texture": "#sign"},
"down": {"uv": [1, 7, 1.5, 8], "rotation": 90, "texture": "#sign", "cullface": "down"}
}
},
{
"from": [7.3333, 9.3333, 0],
"to": [8.66663, 17.3333, 16],
"rotation": {"angle": -22.5, "axis": "y", "origin": [8, 8, 8]},
"faces": {
"north": {"uv": [0, 1, 0.5, 7], "texture": "#sign"},
"east": {"uv": [7, 1, 13, 7], "texture": "#sign"},
"south": {"uv": [6.5, 1, 7, 7], "texture": "#sign"},
"west": {"uv": [0.5, 1, 6.5, 7], "texture": "#sign"},
"up": {"uv": [0.5, 0, 6.5, 1], "rotation": 270, "texture": "#sign"},
"down": {"uv": [6.5, 0, 12.5, 1], "rotation": 90, "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_wall_hanging_sign.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 32],
"elements": [
{
"from": [1, 0, 7],
"to": [15, 10, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"east": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"south": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"west": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [10.03553, 10, 11.53553],
"to": [13.03553, 16, 11.53553],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [10.03553, 10, 4.46447],
"to": [13.03553, 16, 4.46447],
"rotation": {"angle": -45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [2.96447, 10, 4.46447],
"to": [5.96447, 16, 4.46447],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [2.96447, 10, 11.53553],
"to": [5.96447, 16, 11.53553],
"rotation": {"angle": -45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [0, 14, 6],
"to": [16, 16, 10],
"faces": {
"north": {"uv": [1, 2, 5, 3], "texture": "#sign"},
"east": {"uv": [0, 2, 1, 3], "texture": "#sign", "cullface": "west"},
"south": {"uv": [6, 2, 10, 3], "texture": "#sign"},
"west": {"uv": [5, 2, 6, 3], "texture": "#sign", "cullface": "west"},
"up": {"uv": [1, 2, 5, 0], "texture": "#sign", "cullface": "up"},
"down": {"uv": [5, 0, 9, 2], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_wall_hanging_sign_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 32],
"elements": [
{
"from": [1, 0, 7],
"to": [15, 10, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0.5, 7, 4, 12], "texture": "#sign"},
"east": {"uv": [0, 7, 0.5, 12], "texture": "#sign"},
"south": {"uv": [4.5, 7, 8, 12], "texture": "#sign"},
"west": {"uv": [4, 7, 4.5, 12], "texture": "#sign"},
"up": {"uv": [0.5, 7, 4, 6], "texture": "#sign"},
"down": {"uv": [4, 6, 7.5, 7], "texture": "#sign", "cullface": "down"}
}
},
{
"from": [10.03553, 10, 11.53553],
"to": [13.03553, 16, 11.53553],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [10.03553, 10, 4.46447],
"to": [13.03553, 16, 4.46447],
"rotation": {"angle": -45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [2.96447, 10, 4.46447],
"to": [5.96447, 16, 4.46447],
"rotation": {"angle": 45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [0, 3, 0.75, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [2.96447, 10, 11.53553],
"to": [5.96447, 16, 11.53553],
"rotation": {"angle": -45, "axis": "y", "origin": [8, 0, 8]},
"faces": {
"north": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"east": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"south": {"uv": [1.5, 3, 2.25, 6], "texture": "#sign"},
"west": {"uv": [0, 0, 0, 3], "texture": "#sign"},
"up": {"uv": [0, 0, 0.75, 0], "texture": "#sign"},
"down": {"uv": [0, 0, 0.75, 0], "texture": "#sign"}
}
},
{
"from": [0, 14, 6],
"to": [16, 16, 10],
"faces": {
"north": {"uv": [1, 2, 5, 3], "texture": "#sign"},
"east": {"uv": [0, 2, 1, 3], "texture": "#sign", "cullface": "east"},
"south": {"uv": [6, 2, 10, 3], "texture": "#sign"},
"west": {"uv": [5, 2, 6, 3], "texture": "#sign", "cullface": "west"},
"up": {"uv": [1, 2, 5, 0], "texture": "#sign", "cullface": "up"},
"down": {"uv": [5, 0, 9, 2], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_wall_sign.json
================================================
{
"ambientocclusion": false,
"texture_size": [64, 32],
"textures": {
"particle": "#sign"
},
"elements": [
{
"from": [0, 4.3333, 14.3333],
"to": [16, 12.3333, 15.66663],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 3, 15]},
"faces": {
"north": {"uv": [0.5, 1, 6.5, 7], "texture": "#sign"},
"east": {"uv": [0, 1, 0.5, 7], "texture": "#sign"},
"south": {"uv": [7, 1, 13, 7], "texture": "#sign"},
"west": {"uv": [6.5, 1, 7, 7], "texture": "#sign"},
"up": {"uv": [0.5, 0, 6.5, 1], "texture": "#sign"},
"down": {"uv": [6.5, 0, 12.5, 1], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/block/template_wall_sign_ao.json
================================================
{
"ambientocclusion": true,
"texture_size": [64, 32],
"textures": {
"particle": "#sign"
},
"elements": [
{
"from": [0, 4.3333, 14.3333],
"to": [16, 12.3333, 15.66663],
"rotation": {"angle": 0, "axis": "y", "origin": [8, 3, 15]},
"faces": {
"north": {"uv": [0.5, 1, 6.5, 7], "texture": "#sign"},
"east": {"uv": [0, 1, 0.5, 7], "texture": "#sign"},
"south": {"uv": [7, 1, 13, 7], "texture": "#sign"},
"west": {"uv": [6.5, 1, 7, 7], "texture": "#sign"},
"up": {"uv": [0.5, 0, 6.5, 1], "texture": "#sign"},
"down": {"uv": [6.5, 0, 12.5, 1], "texture": "#sign"}
}
}
]
}
================================================
FILE: src/main/resources/assets/minecraft/models/item/christmas_chest.json
================================================
{
"parent": "block/christmas_chest_center"
}
================================================
FILE: src/main/resources/enhancedblockentities.accesswidener
================================================
accessWidener v2 named
accessible class net/minecraft/client/option/SimpleOption$Callbacks
accessible class net/minecraft/client/render/model/BakedModelManager$BakingResult
accessible field net/minecraft/client/gui/screen/ingame/AbstractSignEditScreen blockEntity Lnet/minecraft/block/entity/SignBlockEntity;
accessible method net/minecraft/client/texture/NativeImage write (Ljava/nio/channels/WritableByteChannel;)Z
================================================
FILE: src/main/resources/enhancedblockentities.mixins.json
================================================
{
"required": true,
"minVersion": "0.8",
"package": "foundationgames.enhancedblockentities.mixin",
"compatibilityLevel": "JAVA_17",
"client": [
"AbstractBlockStateMixin",
"AbstractSignBlockEntityRenderAccessor",
"BellBlockEntityMixin",
"BlockEntityRenderDispatcherMixin",
"BuiltChunkMixin",
"ChestBlockEntityMixin",
"DecoratedPotBlockEntityMixin",
"EnderChestBlockEntityMixin",
"LifecycledResourceManagerImplMixin",
"MinecraftClientMixin",
"ShulkerBoxBlockEntityMixin",
"SignEditScreenMixin",
"VideoOptionsScreenMixin",
"WorldRendererMixin",
"compat.sodium.RenderSectionManagerMixin",
"compat.sodium.RenderSectionMixin"
],
"injectors": {
"defaultRequire": 1
}
}
================================================
FILE: src/main/resources/fabric.mod.json
================================================
{
"schemaVersion": 1,
"id": "enhancedblockentities",
"version": "${version}",
"name": "Enhanced Block Entities",
"description": "Optimize and customize block entity rendering with a more modern approach.",
"authors": [
"FoundationGames"
],
"contact": {
"homepage": "https://github.com/FoundationGames/EnhancedBlockEntities",
"issues": "https://github.com/FoundationGames/EnhancedBlockEntities/issues",
"sources": "https://github.com/FoundationGames/EnhancedBlockEntities"
},
"license": "LGPLv3",
"icon": "assets/enhancedblockentities/icon.png",
"environment": "client",
"entrypoints": {
"client": [
"foundationgames.enhancedblockentities.EnhancedBlockEntities"
],
"modmenu": [
"foundationgames.enhancedblockentities.config.gui.EBEModMenuPlugin"
]
},
"mixins": [
"enhancedblockentities.mixins.json"
],
"depends": {
"fabricloader": ">=0.16.7",
"fabric-api": ">=0.114.1",
"minecraft": ">=1.21.3"
},
"breaks": {
"optifabric": "*"
},
"accessWidener": "enhancedblockentities.accesswidener",
"custom": {
"modmenu": {
"links": {
"modmenu.discord": "https://discord.gg/7Aw3y4RtY9"
}
}
}
}
================================================
FILE: src/main/resources/templates/blockstate/base.json
================================================
{
"variants": {
![vars]
}
}
================================================
FILE: src/main/resources/templates/blockstate/var.json
================================================
"![state]": {![extra]"model": "![model]"}
================================================
FILE: src/main/resources/templates/item/bed.json
================================================
{
"model": {
"type": "minecraft:composite",
"models": [
{
"type": "minecraft:model",
"model": "minecraft:item/![foot]"
},
{
"type": "minecraft:model",
"model": "minecraft:item/![head]"
}
]
}
}
================================================
FILE: src/main/resources/templates/item/chest_item.json
================================================
{
"model": {
"type": "minecraft:condition",
"on_false": {
"type": "minecraft:model",
"model": "minecraft:block/![chest]"
},
"on_true": {
"type": "minecraft:model",
"model": "minecraft:block/christmas_chest_center"
},
"property": "ebe:ebe_is_christmas"
}
}
================================================
FILE: src/main/resources/templates/item/chest_item_no_christmas.json
================================================
{
"model": {
"type": "minecraft:model",
"model": "minecraft:block/![chest]"
}
}
================================================
FILE: src/main/resources/templates/model/bed_foot_item.json
================================================
{
"parent": "minecraft:block/template_bed_foot_offset",
"textures": {
"bed": "minecraft:entity/bed/![bed]"
},
"display": {
"thirdperson_righthand": {
"rotation": [ 30, 340, 0 ],
"translation": [ 0, 3, -2],
"scale":[ 0.23, 0.23, 0.23]
},
"firstperson_righthand": {
"rotation": [ 30, 340, 0 ],
"translation": [ 0, 3, 0],
"scale":[ 0.375, 0.375, 0.375]
},
"gui": {
"rotation": [ 30, 340, 0 ],
"translation": [ 2, 3, 0],
"scale":[ 0.5325, 0.5325, 0.5325]
},
"ground": {
"rotation": [ 0, 180, 0 ],
"translation": [ 0, 1, 2],
"scale":[ 0.25, 0.25, 0.25]
},
"head": {
"rotation": [ 0, 0, 0 ],
"translation": [ 0, 10, -8],
"scale":[ 1,1,1 ]
},
"fixed": {
"rotation": [ 270, 180, 0 ],
"translation": [ 0, 4, -2],
"scale":[ 0.5, 0.5, 0.5]
}
}
}
================================================
FILE: src/main/resources/templates/model/bed_head_item.json
================================================
{
"parent": "minecraft:block/![bed]_bed_head",
"display": {
"thirdperson_righthand": {
"rotation": [ 30, 340, 0 ],
"translation": [ 0, 3, -2],
"scale":[ 0.23, 0.23, 0.23]
},
"firstperson_righthand": {
"rotation": [ 30, 340, 0 ],
"translation": [ 0, 3, 0],
"scale":[ 0.375, 0.375, 0.375]
},
"gui": {
"rotation": [ 30, 340, 0 ],
"translation": [ 2, 3, 0],
"scale":[ 0.5325, 0.5325, 0.5325]
},
"ground": {
"rotation": [ 0, 180, 0 ],
"translation": [ 0, 1, 2],
"scale":[ 0.25, 0.25, 0.25]
},
"head": {
"rotation": [ 0, 0, 0 ],
"translation": [ 0, 10, -8],
"scale":[ 1,1,1 ]
},
"fixed": {
"rotation": [ 270, 180, 0 ],
"translation": [ 0, 4, -2],
"scale":[ 0.5, 0.5, 0.5]
}
}
}
================================================
FILE: src/main/resources/templates/model/chest_like.json
================================================
{
"parent": "block/![parent]",
"textures": {
![particle]
"chest": "entity/chest/![chest_tex]"
}
}
================================================
FILE: src/main/resources/templates/model/parent_and_tex.json
================================================
{
"parent": "![parent]",
"textures": {
![textures]
}
}