From 4e912e950f72966efec3f2de94a88b6a3e62e012 Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 23 Sep 2024 22:06:51 -0400 Subject: [PATCH 01/11] Allow vertical orientations for the Machine Chainer --- .../extended_industrialization/EIClient.java | 36 ++- .../chainer/MachineChainerBakedModel.java | 225 ++++++++++++++++++ .../MachineChainerBlockEntityRenderer.java | 116 +++++++++ .../chainer/MachineChainerUnbakedModel.java | 144 +++++++++++ .../MachineChainerMachineBlockEntity.java | 4 +- .../models/block/machine_chainer.json | 18 +- 6 files changed, 510 insertions(+), 33 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBlockEntityRenderer.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerUnbakedModel.java diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index b16314f2..d2db5e0a 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -9,6 +9,7 @@ import aztech.modern_industrialization.machines.multiblocks.MultiblockTankBER; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; @@ -24,14 +25,16 @@ import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.client.event.ClientTickEvent; import net.neoforged.neoforge.client.event.InputEvent; +import net.neoforged.neoforge.client.event.ModelEvent; import net.neoforged.neoforge.client.event.RegisterClientTooltipComponentFactoriesEvent; import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent; import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent; import net.neoforged.neoforge.client.gui.VanillaGuiLayers; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.registries.DeferredHolder; -import net.swedz.extended_industrialization.client.MachineChainerHighlightRenderer; import net.swedz.extended_industrialization.client.NanoGravichestplateHudRenderer; +import net.swedz.extended_industrialization.client.model.chainer.MachineChainerBlockEntityRenderer; +import net.swedz.extended_industrialization.client.model.chainer.MachineChainerUnbakedModel; import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.SteamChainsawItem; import net.swedz.extended_industrialization.item.machineconfig.MachineConfigCardItem; @@ -94,9 +97,12 @@ private static void onRegisterColorItems(RegisterColorHandlersEvent.Item event) ); } - /** - * Taken from {@link aztech.modern_industrialization.MIClient#registerBlockEntityRenderers(FMLClientSetupEvent)}. This is needed to make multiblocks render their layout when holding a wrench. - */ + @SubscribeEvent + private static void registerModelLoaders(ModelEvent.RegisterGeometryLoaders event) + { + event.register(MachineChainerUnbakedModel.LOADER_ID, MachineChainerUnbakedModel.LOADER); + } + @SubscribeEvent private static void registerBlockEntityRenderers(FMLClientSetupEvent event) { @@ -107,22 +113,14 @@ private static void registerBlockEntityRenderers(FMLClientSetupEvent event) MachineBlockEntity blockEntity = machine.getBlockEntityInstance(); BlockEntityType type = blockEntity.getType(); - if(blockEntity instanceof LargeTankMultiblockBlockEntity) - { - BlockEntityRenderers.register(type, MultiblockTankBER::new); - } - else if(blockEntity instanceof MultiblockMachineBlockEntity) + BlockEntityRendererProvider provider = switch (blockEntity) { - BlockEntityRenderers.register(type, MultiblockMachineBER::new); - } - else if(blockEntity instanceof MachineChainerMachineBlockEntity) - { - BlockEntityRenderers.register(type, MachineChainerHighlightRenderer::new); - } - else - { - BlockEntityRenderers.register(type, (c) -> new MachineBlockEntityRenderer<>(c)); - } + case LargeTankMultiblockBlockEntity be -> MultiblockTankBER::new; + case MachineChainerMachineBlockEntity be -> MachineChainerBlockEntityRenderer::new; + case MultiblockMachineBlockEntity be -> MultiblockMachineBER::new; + default -> MachineBlockEntityRenderer::new; + }; + BlockEntityRenderers.register(type, provider); } } } diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java new file mode 100644 index 00000000..9d69e104 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java @@ -0,0 +1,225 @@ +package net.swedz.extended_industrialization.client.model.chainer; + +import aztech.modern_industrialization.MI; +import aztech.modern_industrialization.machines.models.MachineCasing; +import aztech.modern_industrialization.machines.models.MachineModelClientData; +import aztech.modern_industrialization.util.ModelHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.ItemOverrides; +import net.minecraft.client.renderer.block.model.ItemTransforms; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.resources.model.ModelResourceLocation; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.client.ChunkRenderTypeSet; +import net.neoforged.neoforge.client.model.IDynamicBakedModel; +import net.neoforged.neoforge.client.model.data.ModelData; +import net.neoforged.neoforge.client.model.pipeline.QuadBakingVertexConsumer; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class MachineChainerBakedModel implements IDynamicBakedModel +{ + public static float Z_OFFSET = 5e-4f; + + private static final ChunkRenderTypeSet CUTOUT_MIPPED = ChunkRenderTypeSet.of(RenderType.cutoutMipped()); + + public static final String CASING_FOLDER = "machine_casing"; + + public static ModelResourceLocation getCasingModelId(MachineCasing casing) + { + return ModelResourceLocation.standalone(MI.id(CASING_FOLDER + "/" + casing.name)); + } + + public static BakedModel getCasingModel(MachineCasing casing) + { + return Minecraft.getInstance().getModelManager().getModel(getCasingModelId(casing)); + } + + private final MachineCasing baseCasing; + private final TextureAtlasSprite[] defaultOverlays; + private final Map tieredOverlays; + private final MachineModelClientData defaultData; + + MachineChainerBakedModel(MachineCasing baseCasing, + TextureAtlasSprite[] defaultOverlays, + Map tieredOverlays) + { + this.baseCasing = baseCasing; + this.defaultOverlays = defaultOverlays; + this.tieredOverlays = tieredOverlays; + this.defaultData = new MachineModelClientData(baseCasing, Direction.NORTH); + } + + public MachineCasing getBaseCasing() + { + return baseCasing; + } + + public TextureAtlasSprite[] getSprites(MachineCasing casing) + { + if(casing == null) + { + return defaultOverlays; + } + return tieredOverlays.getOrDefault(casing.name, defaultOverlays); + } + + public static TextureAtlasSprite getSprite(TextureAtlasSprite[] sprites, Direction side, Direction facingDirection, boolean isActive) + { + int spriteId = 1; + if(side == facingDirection) + { + spriteId = 0; + } + else if(side == facingDirection.getOpposite()) + { + spriteId = 1; + } + else if(side.getAxis().isHorizontal()) + { + if(facingDirection.getAxis().isVertical()) + { + spriteId = facingDirection == Direction.UP ? 2 : 3; + } + else + { + spriteId = switch (facingDirection) + { + case NORTH -> side == Direction.WEST ? 4 : 5; + case SOUTH -> side == Direction.WEST ? 5 : 4; + case WEST -> side == Direction.NORTH ? 5 : 4; + case EAST -> side == Direction.NORTH ? 4 : 5; + default -> throw new IllegalStateException("Unexpected value: " + facingDirection); + }; + } + } + else if(side.getAxis().isVertical() && facingDirection.getAxis().isHorizontal()) + { + spriteId = switch (facingDirection) + { + case NORTH -> side == Direction.UP ? 2 : 3; + case SOUTH -> side == Direction.UP ? 3 : 2; + case WEST -> 4; + case EAST -> 5; + default -> throw new IllegalStateException("Unexpected value: " + facingDirection); + }; + } + return sprites[spriteId]; + } + + @Override + public ModelData getModelData(BlockAndTintGetter level, BlockPos pos, BlockState state, ModelData modelData) + { + var machineData = modelData.get(MachineModelClientData.KEY); + if(machineData == null) + { + return modelData; + } + + MachineCasing casing = Objects.requireNonNullElse(machineData.casing, baseCasing); + return getCasingModel(casing).getModelData(level, pos, state, modelData); + } + + @Override + public List getQuads(BlockState state, Direction side, RandomSource rand, + ModelData extraData, RenderType renderType) + { + var data = extraData.get(MachineModelClientData.KEY); + if(data == null) + { + data = defaultData; + } + + MachineCasing casing = Objects.requireNonNullElse(data.casing, baseCasing); + var sprites = getSprites(casing); + + List quads = new ArrayList<>(); + var vc = new QuadBakingVertexConsumer(); + + if(side != null) + { + // Casing + quads.addAll(getCasingModel(casing).getQuads(state, side, rand, extraData, renderType)); + // Machine overlays + TextureAtlasSprite sprite = getSprite(sprites, side, data.frontDirection, false); + if(sprite != null) + { + quads.add(ModelHelper.bakeSprite(vc, side, sprite, -Z_OFFSET)); + } + } + + // Output overlays + if(data.outputDirection != null && side == data.outputDirection) + { + quads.add(ModelHelper.bakeSprite(vc, data.outputDirection, sprites[6], -3 * Z_OFFSET)); + if(data.itemAutoExtract) + { + quads.add(ModelHelper.bakeSprite(vc, data.outputDirection, sprites[7], -3 * Z_OFFSET)); + } + if(data.fluidAutoExtract) + { + quads.add(ModelHelper.bakeSprite(vc, data.outputDirection, sprites[8], -3 * Z_OFFSET)); + } + } + + return quads; + } + + @Override + public boolean useAmbientOcclusion() + { + return true; + } + + @Override + public boolean isGui3d() + { + return false; + } + + @Override + public boolean usesBlockLight() + { + return true; + } + + @Override + public boolean isCustomRenderer() + { + return false; + } + + @Override + public TextureAtlasSprite getParticleIcon() + { + return getCasingModel(baseCasing).getParticleIcon(); + } + + @Override + public ItemTransforms getTransforms() + { + return ModelHelper.MODEL_TRANSFORM_BLOCK; + } + + @Override + public ItemOverrides getOverrides() + { + return ItemOverrides.EMPTY; + } + + @Override + public ChunkRenderTypeSet getRenderTypes(BlockState state, RandomSource rand, ModelData data) + { + return CUTOUT_MIPPED; + } +} \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBlockEntityRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBlockEntityRenderer.java new file mode 100644 index 00000000..c6be6877 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBlockEntityRenderer.java @@ -0,0 +1,116 @@ +package net.swedz.extended_industrialization.client.model.chainer; + +import aztech.modern_industrialization.MI; +import aztech.modern_industrialization.compat.sodium.SodiumCompat; +import aztech.modern_industrialization.machines.models.MachineCasing; +import aztech.modern_industrialization.machines.models.MachineModelClientData; +import aztech.modern_industrialization.util.ModelHelper; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.Sheets; +import net.minecraft.client.renderer.block.BlockModelShaper; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.client.model.pipeline.QuadBakingVertexConsumer; +import net.swedz.extended_industrialization.machines.blockentity.MachineChainerMachineBlockEntity; + +import java.util.IdentityHashMap; + +public class MachineChainerBlockEntityRenderer implements BlockEntityRenderer +{ + private final BlockModelShaper blockModels; + private BlockState lastBlockState = null; + private MachineChainerBakedModel model = null; + private final IdentityHashMap quadCache = new IdentityHashMap<>(); + private static final Object NO_QUAD = new Object(); + + public MachineChainerBlockEntityRenderer(BlockEntityRendererProvider.Context ctx) + { + this.blockModels = ctx.getBlockRenderDispatcher().getBlockModelShaper(); + } + + private BakedQuad getCachedQuad(MachineModelClientData data, Direction d) + { + var facing = data.frontDirection; + int cachedQuadIndex = facing.ordinal() * 6 + d.ordinal(); + var casing = data.casing; + var cachedQuads = quadCache.computeIfAbsent(casing, c -> new Object[36]); + + if(cachedQuads[cachedQuadIndex] == null) + { + TextureAtlasSprite sprite = model == null ? null : MachineChainerBakedModel.getSprite(model.getSprites(casing), d, facing, true); + if(sprite != null) + { + var vc = new QuadBakingVertexConsumer(); + cachedQuads[cachedQuadIndex] = ModelHelper.bakeSprite(vc, d, sprite, -2 * MachineChainerBakedModel.Z_OFFSET); + } + else + { + cachedQuads[cachedQuadIndex] = NO_QUAD; + } + } + + var quad = cachedQuads[cachedQuadIndex]; + return quad == NO_QUAD ? null : (BakedQuad) quad; + } + + private MachineChainerBakedModel getMachineModel(BlockState state) + { + if(blockModels.getBlockModel(state) instanceof MachineChainerBakedModel mbm) + { + return mbm; + } + else + { + MI.LOGGER.warn("Model {} should have been a MachineChainerBakedModel, but was {}", state, blockModels.getBlockModel(state).getClass()); + return null; + } + } + + @Override + public void render(MachineChainerMachineBlockEntity entity, float tickDelta, PoseStack matrices, MultiBufferSource vcp, int light, int overlay) + { + BlockState state = entity.getBlockState(); + if(lastBlockState == null) + { + lastBlockState = state; + model = getMachineModel(state); + } + else if(lastBlockState != state) + { + // Sanity check. + throw new IllegalStateException("Tried to use the same machine BER with two block states: " + state + " and " + lastBlockState); + } + + MachineModelClientData data = entity.getMachineModelData(); + if(data.isActive) + { + VertexConsumer vc = vcp.getBuffer(Sheets.cutoutBlockSheet()); + + for(Direction d : Direction.values()) + { + BakedQuad quad = getCachedQuad(data, d); + if(quad != null) + { + int faceLight = LevelRenderer.getLightColor(entity.getLevel(), entity.getBlockState(), entity.getBlockPos().relative(d)); + vc.putBulkData(matrices.last(), quad, 1.0f, 1.0f, 1.0f, 1.0f, faceLight, OverlayTexture.NO_OVERLAY); + + SodiumCompat.markSpriteActive(quad.getSprite()); + } + } + } + } + + @Override + public int getViewDistance() + { + return 256; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerUnbakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerUnbakedModel.java new file mode 100644 index 00000000..505f6a23 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerUnbakedModel.java @@ -0,0 +1,144 @@ +package net.swedz.extended_industrialization.client.model.chainer; + +import aztech.modern_industrialization.machines.models.MachineCasing; +import aztech.modern_industrialization.machines.models.MachineCasings; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import net.minecraft.client.renderer.block.model.ItemOverrides; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.resources.model.Material; +import net.minecraft.client.resources.model.ModelBaker; +import net.minecraft.client.resources.model.ModelState; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.minecraft.world.inventory.InventoryMenu; +import net.neoforged.neoforge.client.model.geometry.IGeometryBakingContext; +import net.neoforged.neoforge.client.model.geometry.IGeometryLoader; +import net.neoforged.neoforge.client.model.geometry.IUnbakedGeometry; +import net.swedz.extended_industrialization.EI; +import org.jetbrains.annotations.Nullable; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +public class MachineChainerUnbakedModel implements IUnbakedGeometry +{ + public static final ResourceLocation LOADER_ID = EI.id("machine_chainer"); + public static final IGeometryLoader LOADER = (jsonObject, deserializationContext) -> new MachineChainerUnbakedModel(jsonObject); + + private static final Gson GSON = new GsonBuilder().registerTypeAdapter(ResourceLocation.class, new ResourceLocation.Serializer()).create(); + + private final MachineCasing baseCasing; + private final Material[] defaultOverlays; + private final Map tieredOverlays = new HashMap<>(); + + private MachineChainerUnbakedModel(JsonObject obj) + { + this.baseCasing = MachineCasings.get(GsonHelper.getAsString(obj, "casing")); + + var defaultOverlaysJson = OverlaysJson.parse(GsonHelper.getAsJsonObject(obj, "default_overlays"), null); + this.defaultOverlays = defaultOverlaysJson.toSpriteIds(); + + var tieredOverlays = GsonHelper.getAsJsonObject(obj, "tiered_overlays", new JsonObject()); + for(var casingTier : tieredOverlays.keySet()) + { + var casingOverlaysJson = OverlaysJson.parse(GsonHelper.getAsJsonObject(tieredOverlays, casingTier), defaultOverlaysJson); + this.tieredOverlays.put(casingTier, casingOverlaysJson.toSpriteIds()); + } + } + + @Override + public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, + ModelState modelState, ItemOverrides overrides) + { + var defaultOverlays = loadSprites(spriteGetter, this.defaultOverlays); + var tieredOverlays = new HashMap(); + for(var entry : this.tieredOverlays.entrySet()) + { + tieredOverlays.put(entry.getKey(), loadSprites(spriteGetter, entry.getValue())); + } + return new MachineChainerBakedModel(baseCasing, defaultOverlays, tieredOverlays); + } + + private static TextureAtlasSprite[] loadSprites(Function textureGetter, Material[] ids) + { + var sprites = new TextureAtlasSprite[ids.length]; + for(int i = 0; i < ids.length; ++i) + { + if(ids[i] != null) + { + sprites[i] = textureGetter.apply(ids[i]); + } + } + return sprites; + } + + private static class OverlaysJson + { + private ResourceLocation front; + private ResourceLocation back; + private ResourceLocation up; + private ResourceLocation down; + private ResourceLocation left; + private ResourceLocation right; + private ResourceLocation output; + private ResourceLocation item_auto; + private ResourceLocation fluid_auto; + + private static OverlaysJson parse(JsonObject json, OverlaysJson defaultOverlay) + { + var overlays = GSON.fromJson(json, OverlaysJson.class); + + if(defaultOverlay != null) + { + // Copy null fields from the default. + try + { + for(var field : OverlaysJson.class.getDeclaredFields()) + { + if(field.get(overlays) == null) + { + field.set(overlays, field.get(defaultOverlay)); + } + } + } + catch (IllegalAccessException ex) + { + throw new RuntimeException("Failed to copy fields from default overlay", ex); + } + } + + return overlays; + } + + private Material[] toSpriteIds() + { + return new Material[]{ + select(front), + select(back), + select(up), + select(down), + select(left), + select(right), + select(output), + select(item_auto), + select(fluid_auto), + }; + } + + private static Material select(@Nullable ResourceLocation... candidates) + { + for(var id : candidates) + { + if(id != null) + { + return new Material(InventoryMenu.BLOCK_ATLAS, id); + } + } + return null; + } + } +} \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/MachineChainerMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/MachineChainerMachineBlockEntity.java index 9b1e6b35..789a88e3 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/MachineChainerMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/MachineChainerMachineBlockEntity.java @@ -49,7 +49,7 @@ public MachineChainerMachineBlockEntity(BEP bep) super( bep, new MachineGuiParameters.Builder(EI.id("machine_chainer"), false).backgroundHeight(175).build(), - new OrientationComponent.Params(true, true, true) + new OrientationComponent.Params(true, true, true, true) ); redstoneControl = new RedstoneControlComponent(); @@ -131,7 +131,7 @@ public MIInventory getInventory() } @Override - protected MachineModelClientData getMachineModelData() + public MachineModelClientData getMachineModelData() { MachineModelClientData data = new MachineModelClientData(); orientation.writeModelData(data); diff --git a/src/main/resources/assets/extended_industrialization/models/block/machine_chainer.json b/src/main/resources/assets/extended_industrialization/models/block/machine_chainer.json index 2c5da5dd..23b15d9f 100644 --- a/src/main/resources/assets/extended_industrialization/models/block/machine_chainer.json +++ b/src/main/resources/assets/extended_industrialization/models/block/machine_chainer.json @@ -1,20 +1,14 @@ { "casing": "mv", "default_overlays": { - "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/machine_chainer/overlay_front", - "item_auto": "modern_industrialization:block/overlays/item_auto", - "output": "modern_industrialization:block/overlays/output", + "up": "extended_industrialization:block/machines/machine_chainer/overlay_arrow_up", + "down": "extended_industrialization:block/machines/machine_chainer/overlay_arrow_down", "left": "extended_industrialization:block/machines/machine_chainer/overlay_arrow_left", "right": "extended_industrialization:block/machines/machine_chainer/overlay_arrow_right", - "top_n": "extended_industrialization:block/machines/machine_chainer/overlay_arrow_up", - "top_s": "extended_industrialization:block/machines/machine_chainer/overlay_arrow_down", - "top_e": "extended_industrialization:block/machines/machine_chainer/overlay_arrow_right", - "top_w": "extended_industrialization:block/machines/machine_chainer/overlay_arrow_left", - "bottom_n": "extended_industrialization:block/machines/machine_chainer/overlay_arrow_down", - "bottom_s": "extended_industrialization:block/machines/machine_chainer/overlay_arrow_up", - "bottom_e": "extended_industrialization:block/machines/machine_chainer/overlay_arrow_right", - "bottom_w": "extended_industrialization:block/machines/machine_chainer/overlay_arrow_left" + "output": "modern_industrialization:block/overlays/output", + "item_auto": "modern_industrialization:block/overlays/item_auto", + "fluid_auto": "modern_industrialization:block/overlays/fluid_auto" }, - "loader": "modern_industrialization:machine" + "loader": "extended_industrialization:machine_chainer" } \ No newline at end of file From a25ff2406fa3cab8081a3bc5adf6097157a8b8b8 Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 23 Sep 2024 22:59:52 -0400 Subject: [PATCH 02/11] More modular machine model api (will be moved to tesseract) --- gradle.properties | 2 +- .../extended_industrialization/EIClient.java | 12 +- .../MachineChainerHighlightRenderer.java | 4 +- .../model/ModularMachineBakedModel.java | 243 ++++++++++++++++++ ...=> ModularMachineBlockEntityRenderer.java} | 50 ++-- .../model/ModularMachineModelBaker.java | 13 + .../model/ModularMachineUnbakedModel.java | 71 +++++ .../client/model/ModularOverlaysJson.java | 56 ++++ .../chainer/MachineChainerBakedModel.java | 179 +------------ .../chainer/MachineChainerOverlaysJson.java | 40 +++ .../chainer/MachineChainerUnbakedModel.java | 144 ----------- .../mi/accessor/MachineModelDataAccessor.java | 16 ++ .../extended_industrialization.mixins.json | 1 + 13 files changed, 485 insertions(+), 346 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineBakedModel.java rename src/main/java/net/swedz/extended_industrialization/client/model/{chainer/MachineChainerBlockEntityRenderer.java => ModularMachineBlockEntityRenderer.java} (59%) create mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineModelBaker.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineUnbakedModel.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/ModularOverlaysJson.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerOverlaysJson.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerUnbakedModel.java create mode 100644 src/main/java/net/swedz/extended_industrialization/mixin/mi/accessor/MachineModelDataAccessor.java diff --git a/gradle.properties b/gradle.properties index 753e84f0..01035f5e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,7 +33,7 @@ mod_description=An addon mod that extends the content in Modern Industrializatio mod_github=https://github.com/Swedz/Extended-Industrialization # Dependencies -modern_industrialization_version=2.2.23 +modern_industrialization_version=2.2.23-local modern_industrialization_version_range=[2.2.21-beta, 2.3-) grandpower_version=3.0.0 cloth_config_version=15.0.127 diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index d2db5e0a..f8785dd1 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -30,11 +30,14 @@ import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent; import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent; import net.neoforged.neoforge.client.gui.VanillaGuiLayers; +import net.neoforged.neoforge.client.model.geometry.IGeometryLoader; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.registries.DeferredHolder; +import net.swedz.extended_industrialization.client.MachineChainerHighlightRenderer; import net.swedz.extended_industrialization.client.NanoGravichestplateHudRenderer; -import net.swedz.extended_industrialization.client.model.chainer.MachineChainerBlockEntityRenderer; -import net.swedz.extended_industrialization.client.model.chainer.MachineChainerUnbakedModel; +import net.swedz.extended_industrialization.client.model.ModularMachineUnbakedModel; +import net.swedz.extended_industrialization.client.model.chainer.MachineChainerBakedModel; +import net.swedz.extended_industrialization.client.model.chainer.MachineChainerOverlaysJson; import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.SteamChainsawItem; import net.swedz.extended_industrialization.item.machineconfig.MachineConfigCardItem; @@ -100,7 +103,8 @@ private static void onRegisterColorItems(RegisterColorHandlersEvent.Item event) @SubscribeEvent private static void registerModelLoaders(ModelEvent.RegisterGeometryLoaders event) { - event.register(MachineChainerUnbakedModel.LOADER_ID, MachineChainerUnbakedModel.LOADER); + event.register(EI.id("machine_chainer"), (IGeometryLoader) (json, context) -> + new ModularMachineUnbakedModel<>(MachineChainerOverlaysJson.class, MachineChainerBakedModel::new, json)); } @SubscribeEvent @@ -115,8 +119,8 @@ private static void registerBlockEntityRenderers(FMLClientSetupEvent event) BlockEntityRendererProvider provider = switch (blockEntity) { + case MachineChainerMachineBlockEntity be -> MachineChainerHighlightRenderer::new; case LargeTankMultiblockBlockEntity be -> MultiblockTankBER::new; - case MachineChainerMachineBlockEntity be -> MachineChainerBlockEntityRenderer::new; case MultiblockMachineBlockEntity be -> MultiblockMachineBER::new; default -> MachineBlockEntityRenderer::new; }; diff --git a/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java index a6b9affb..23f421fc 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java @@ -1,7 +1,6 @@ package net.swedz.extended_industrialization.client; import aztech.modern_industrialization.MITags; -import aztech.modern_industrialization.machines.MachineBlockEntityRenderer; import aztech.modern_industrialization.util.RenderHelper; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; @@ -14,10 +13,11 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; +import net.swedz.extended_industrialization.client.model.ModularMachineBlockEntityRenderer; import net.swedz.extended_industrialization.machines.blockentity.MachineChainerMachineBlockEntity; import net.swedz.extended_industrialization.machines.component.chainer.ChainerLinks; -public final class MachineChainerHighlightRenderer extends MachineBlockEntityRenderer +public final class MachineChainerHighlightRenderer extends ModularMachineBlockEntityRenderer { private static final int COLOR_SUCCESS = 0x6FFF6F; private static final int COLOR_FAILURE = 0xFF6F6F; diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineBakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineBakedModel.java new file mode 100644 index 00000000..2fad970b --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineBakedModel.java @@ -0,0 +1,243 @@ +package net.swedz.extended_industrialization.client.model; + +import aztech.modern_industrialization.MI; +import aztech.modern_industrialization.machines.models.MachineCasing; +import aztech.modern_industrialization.machines.models.MachineModelClientData; +import aztech.modern_industrialization.util.ModelHelper; +import com.google.common.collect.Lists; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.ItemOverrides; +import net.minecraft.client.renderer.block.model.ItemTransforms; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.resources.model.ModelResourceLocation; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.client.ChunkRenderTypeSet; +import net.neoforged.neoforge.client.model.IDynamicBakedModel; +import net.neoforged.neoforge.client.model.data.ModelData; +import net.neoforged.neoforge.client.model.pipeline.QuadBakingVertexConsumer; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class ModularMachineBakedModel implements IDynamicBakedModel +{ + public static float Z_OFFSET = 5e-4f; + + private static final ChunkRenderTypeSet CUTOUT_MIPPED = ChunkRenderTypeSet.of(RenderType.cutoutMipped()); + + public static final String CASING_FOLDER = "machine_casing"; + + public static ModelResourceLocation getCasingModelId(MachineCasing casing) + { + return ModelResourceLocation.standalone(MI.id(CASING_FOLDER + "/" + casing.name)); + } + + public static BakedModel getCasingModel(MachineCasing casing) + { + return Minecraft.getInstance().getModelManager().getModel(getCasingModelId(casing)); + } + + private final MachineCasing baseCasing; + private final int[] outputOverlayIndexes; + private final TextureAtlasSprite[] defaultOverlays; + private final Map tieredOverlays; + private final MachineModelClientData defaultData; + + public ModularMachineBakedModel(MachineCasing baseCasing, + int[] outputOverlayIndexes, TextureAtlasSprite[] defaultOverlays, + Map tieredOverlays) + { + this.baseCasing = baseCasing; + this.outputOverlayIndexes = outputOverlayIndexes; + this.defaultOverlays = defaultOverlays; + this.tieredOverlays = tieredOverlays; + this.defaultData = new MachineModelClientData(baseCasing, Direction.NORTH); + } + + public MachineCasing getBaseCasing() + { + return baseCasing; + } + + public TextureAtlasSprite[] getSprites(MachineCasing casing) + { + if(casing == null) + { + return defaultOverlays; + } + return tieredOverlays.getOrDefault(casing.name, defaultOverlays); + } + + public TextureAtlasSprite getSprite(TextureAtlasSprite[] sprites, Direction side, Direction facingDirection, boolean isActive) + { + int spriteId; + if(side.getAxis().isHorizontal()) + { + spriteId = (facingDirection.get2DDataValue() - side.get2DDataValue() + 4) % 4 * 2; + } + else + { + spriteId = (facingDirection.get2DDataValue() + 4) * 2; + + if(side == Direction.DOWN) + { + spriteId += 8; + } + } + if(isActive) + { + spriteId++; + } + return sprites[spriteId]; + } + + @Override + public ModelData getModelData(BlockAndTintGetter level, BlockPos pos, BlockState state, ModelData modelData) + { + MachineModelClientData machineData = modelData.get(MachineModelClientData.KEY); + if(machineData == null) + { + return modelData; + } + MachineCasing casing = Objects.requireNonNullElse(machineData.casing, baseCasing); + return getCasingModel(casing).getModelData(level, pos, state, modelData); + } + + protected List getSideQuads(BlockState state, Direction side, RandomSource random, + ModelData extraData, RenderType renderType, + MachineModelClientData data, MachineCasing casing, + TextureAtlasSprite[] sprites, + QuadBakingVertexConsumer vertexConsumer) + { + List quads = Lists.newArrayList(); + + if(side != null) + { + quads.addAll(getCasingModel(casing).getQuads(state, side, random, extraData, renderType)); + + TextureAtlasSprite sprite = this.getSprite(sprites, side, data.frontDirection, false); + if(sprite != null) + { + quads.add(ModelHelper.bakeSprite(vertexConsumer, side, sprite, -Z_OFFSET)); + } + } + + return quads; + } + + protected List getOutputQuads(BlockState state, Direction side, RandomSource random, + ModelData extraData, RenderType renderType, + MachineModelClientData data, MachineCasing casing, + TextureAtlasSprite[] sprites, + QuadBakingVertexConsumer vertexConsumer) + { + List quads = Lists.newArrayList(); + + if(data.outputDirection != null && side == data.outputDirection) + { + quads.add(ModelHelper.bakeSprite(vertexConsumer, data.outputDirection, sprites[outputOverlayIndexes[0]], -3 * Z_OFFSET)); + if(data.itemAutoExtract) + { + quads.add(ModelHelper.bakeSprite(vertexConsumer, data.outputDirection, sprites[outputOverlayIndexes[1]], -3 * Z_OFFSET)); + } + if(data.fluidAutoExtract) + { + quads.add(ModelHelper.bakeSprite(vertexConsumer, data.outputDirection, sprites[outputOverlayIndexes[2]], -3 * Z_OFFSET)); + } + } + + return quads; + } + + protected List getQuads(BlockState state, Direction side, RandomSource random, + ModelData extraData, RenderType renderType, + MachineModelClientData data, MachineCasing casing, + TextureAtlasSprite[] sprites, + QuadBakingVertexConsumer vertexConsumer) + { + List quads = Lists.newArrayList(); + + quads.addAll(this.getSideQuads(state, side, random, extraData, renderType, data, casing, sprites, vertexConsumer)); + + quads.addAll(this.getOutputQuads(state, side, random, extraData, renderType, data, casing, sprites, vertexConsumer)); + + return quads; + } + + @Override + public List getQuads(BlockState state, Direction side, RandomSource random, + ModelData extraData, RenderType renderType) + { + MachineModelClientData data = extraData.get(MachineModelClientData.KEY); + if(data == null) + { + data = defaultData; + } + + MachineCasing casing = Objects.requireNonNullElse(data.casing, baseCasing); + TextureAtlasSprite[] sprites = this.getSprites(casing); + + List quads = Lists.newArrayList(); + QuadBakingVertexConsumer vertexConsumer = new QuadBakingVertexConsumer(); + + quads.addAll(this.getQuads(state, side, random, extraData, renderType, data, casing, sprites, vertexConsumer)); + + return quads; + } + + @Override + public boolean useAmbientOcclusion() + { + return true; + } + + @Override + public boolean isGui3d() + { + return false; + } + + @Override + public boolean usesBlockLight() + { + return true; + } + + @Override + public boolean isCustomRenderer() + { + return false; + } + + @Override + public TextureAtlasSprite getParticleIcon() + { + return getCasingModel(baseCasing).getParticleIcon(); + } + + @Override + public ItemTransforms getTransforms() + { + return ModelHelper.MODEL_TRANSFORM_BLOCK; + } + + @Override + public ItemOverrides getOverrides() + { + return ItemOverrides.EMPTY; + } + + @Override + public ChunkRenderTypeSet getRenderTypes(BlockState state, RandomSource rand, ModelData data) + { + return CUTOUT_MIPPED; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBlockEntityRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineBlockEntityRenderer.java similarity index 59% rename from src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBlockEntityRenderer.java rename to src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineBlockEntityRenderer.java index c6be6877..770cf972 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBlockEntityRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineBlockEntityRenderer.java @@ -1,7 +1,8 @@ -package net.swedz.extended_industrialization.client.model.chainer; +package net.swedz.extended_industrialization.client.model; import aztech.modern_industrialization.MI; import aztech.modern_industrialization.compat.sodium.SodiumCompat; +import aztech.modern_industrialization.machines.MachineBlockEntity; import aztech.modern_industrialization.machines.models.MachineCasing; import aztech.modern_industrialization.machines.models.MachineModelClientData; import aztech.modern_industrialization.util.ModelHelper; @@ -19,37 +20,39 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; import net.neoforged.neoforge.client.model.pipeline.QuadBakingVertexConsumer; -import net.swedz.extended_industrialization.machines.blockentity.MachineChainerMachineBlockEntity; +import net.swedz.extended_industrialization.mixin.mi.accessor.MachineModelDataAccessor; import java.util.IdentityHashMap; -public class MachineChainerBlockEntityRenderer implements BlockEntityRenderer +public class ModularMachineBlockEntityRenderer implements BlockEntityRenderer { - private final BlockModelShaper blockModels; - private BlockState lastBlockState = null; - private MachineChainerBakedModel model = null; - private final IdentityHashMap quadCache = new IdentityHashMap<>(); - private static final Object NO_QUAD = new Object(); + private static final Object NO_QUAD = new Object(); - public MachineChainerBlockEntityRenderer(BlockEntityRendererProvider.Context ctx) + private final BlockModelShaper blockModels; + private final IdentityHashMap quadCache = new IdentityHashMap<>(); + + private BlockState lastBlockState = null; + private ModularMachineBakedModel model = null; + + public ModularMachineBlockEntityRenderer(BlockEntityRendererProvider.Context ctx) { this.blockModels = ctx.getBlockRenderDispatcher().getBlockModelShaper(); } - private BakedQuad getCachedQuad(MachineModelClientData data, Direction d) + private BakedQuad getCachedQuad(MachineModelClientData data, Direction direction) { - var facing = data.frontDirection; - int cachedQuadIndex = facing.ordinal() * 6 + d.ordinal(); - var casing = data.casing; - var cachedQuads = quadCache.computeIfAbsent(casing, c -> new Object[36]); + Direction facing = data.frontDirection; + int cachedQuadIndex = facing.ordinal() * 6 + direction.ordinal(); + MachineCasing casing = data.casing; + Object[] cachedQuads = quadCache.computeIfAbsent(casing, c -> new Object[36]); if(cachedQuads[cachedQuadIndex] == null) { - TextureAtlasSprite sprite = model == null ? null : MachineChainerBakedModel.getSprite(model.getSprites(casing), d, facing, true); + TextureAtlasSprite sprite = model == null ? null : model.getSprite(model.getSprites(casing), direction, facing, true); if(sprite != null) { - var vc = new QuadBakingVertexConsumer(); - cachedQuads[cachedQuadIndex] = ModelHelper.bakeSprite(vc, d, sprite, -2 * MachineChainerBakedModel.Z_OFFSET); + QuadBakingVertexConsumer vc = new QuadBakingVertexConsumer(); + cachedQuads[cachedQuadIndex] = ModelHelper.bakeSprite(vc, direction, sprite, -2 * ModularMachineBakedModel.Z_OFFSET); } else { @@ -57,25 +60,25 @@ private BakedQuad getCachedQuad(MachineModelClientData data, Direction d) } } - var quad = cachedQuads[cachedQuadIndex]; + Object quad = cachedQuads[cachedQuadIndex]; return quad == NO_QUAD ? null : (BakedQuad) quad; } - private MachineChainerBakedModel getMachineModel(BlockState state) + private ModularMachineBakedModel getMachineModel(BlockState state) { - if(blockModels.getBlockModel(state) instanceof MachineChainerBakedModel mbm) + if(blockModels.getBlockModel(state) instanceof ModularMachineBakedModel mbm) { return mbm; } else { - MI.LOGGER.warn("Model {} should have been a MachineChainerBakedModel, but was {}", state, blockModels.getBlockModel(state).getClass()); + MI.LOGGER.warn("Model {} should have been a ModularMachineBakedModel, but was {}", state, blockModels.getBlockModel(state).getClass()); return null; } } @Override - public void render(MachineChainerMachineBlockEntity entity, float tickDelta, PoseStack matrices, MultiBufferSource vcp, int light, int overlay) + public void render(T entity, float tickDelta, PoseStack matrices, MultiBufferSource vcp, int light, int overlay) { BlockState state = entity.getBlockState(); if(lastBlockState == null) @@ -85,11 +88,10 @@ public void render(MachineChainerMachineBlockEntity entity, float tickDelta, Pos } else if(lastBlockState != state) { - // Sanity check. throw new IllegalStateException("Tried to use the same machine BER with two block states: " + state + " and " + lastBlockState); } - MachineModelClientData data = entity.getMachineModelData(); + MachineModelClientData data = ((MachineModelDataAccessor) entity).getMachineModelData(); if(data.isActive) { VertexConsumer vc = vcp.getBuffer(Sheets.cutoutBlockSheet()); diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineModelBaker.java b/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineModelBaker.java new file mode 100644 index 00000000..47f52c11 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineModelBaker.java @@ -0,0 +1,13 @@ +package net.swedz.extended_industrialization.client.model; + +import aztech.modern_industrialization.machines.models.MachineCasing; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; + +import java.util.Map; + +public interface ModularMachineModelBaker +{ + ModularMachineBakedModel bake(MachineCasing baseCasing, + int[] outputOverlayIndexes, TextureAtlasSprite[] defaultOverlays, + Map tieredOverlays); +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineUnbakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineUnbakedModel.java new file mode 100644 index 00000000..69eda662 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineUnbakedModel.java @@ -0,0 +1,71 @@ +package net.swedz.extended_industrialization.client.model; + +import aztech.modern_industrialization.machines.models.MachineCasing; +import aztech.modern_industrialization.machines.models.MachineCasings; +import com.google.common.collect.Maps; +import com.google.gson.JsonObject; +import net.minecraft.client.renderer.block.model.ItemOverrides; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.resources.model.Material; +import net.minecraft.client.resources.model.ModelBaker; +import net.minecraft.client.resources.model.ModelState; +import net.minecraft.util.GsonHelper; +import net.neoforged.neoforge.client.model.geometry.IGeometryBakingContext; +import net.neoforged.neoforge.client.model.geometry.IUnbakedGeometry; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +public class ModularMachineUnbakedModel implements IUnbakedGeometry> +{ + private final ModularMachineModelBaker modelBaker; + + private final MachineCasing baseCasing; + private final int[] outputOverlayIndexes; + private final Material[] defaultOverlays; + private final Map tieredOverlays = new HashMap<>(); + + public ModularMachineUnbakedModel(Class overlayClass, ModularMachineModelBaker modelBaker, JsonObject json) + { + this.modelBaker = modelBaker; + + this.baseCasing = MachineCasings.get(GsonHelper.getAsString(json, "casing")); + + O defaultOverlaysJson = ModularOverlaysJson.parse(overlayClass, GsonHelper.getAsJsonObject(json, "default_overlays"), null); + this.outputOverlayIndexes = defaultOverlaysJson.getOutputSpriteIndexes(); + this.defaultOverlays = defaultOverlaysJson.toSpriteIds(); + + JsonObject tieredOverlays = GsonHelper.getAsJsonObject(json, "tiered_overlays", new JsonObject()); + for(String casingTier : tieredOverlays.keySet()) + { + O casingOverlaysJson = ModularOverlaysJson.parse(overlayClass, GsonHelper.getAsJsonObject(tieredOverlays, casingTier), defaultOverlaysJson); + this.tieredOverlays.put(casingTier, casingOverlaysJson.toSpriteIds()); + } + } + + @Override + public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, + ModelState modelState, ItemOverrides overrides) + { + TextureAtlasSprite[] defaultOverlays = loadSprites(spriteGetter, this.defaultOverlays); + HashMap tieredOverlays = Maps.newHashMap(); + this.tieredOverlays.forEach((key, sprites) -> + tieredOverlays.put(key, loadSprites(spriteGetter, sprites))); + return modelBaker.bake(baseCasing, outputOverlayIndexes, defaultOverlays, tieredOverlays); + } + + private static TextureAtlasSprite[] loadSprites(Function textureGetter, Material[] ids) + { + TextureAtlasSprite[] sprites = new TextureAtlasSprite[ids.length]; + for(int i = 0; i < ids.length; ++i) + { + if(ids[i] != null) + { + sprites[i] = textureGetter.apply(ids[i]); + } + } + return sprites; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/ModularOverlaysJson.java b/src/main/java/net/swedz/extended_industrialization/client/model/ModularOverlaysJson.java new file mode 100644 index 00000000..749cae83 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/model/ModularOverlaysJson.java @@ -0,0 +1,56 @@ +package net.swedz.extended_industrialization.client.model; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import net.minecraft.client.resources.model.Material; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.InventoryMenu; + +import java.lang.reflect.Field; + +public interface ModularOverlaysJson +{ + Material[] toSpriteIds(); + + int[] getOutputSpriteIndexes(); + + Gson GSON = new GsonBuilder().registerTypeAdapter(ResourceLocation.class, new ResourceLocation.Serializer()).create(); + + static O parse(Class clazz, JsonObject json, ModularOverlaysJson defaultOverlay) + { + O overlays = GSON.fromJson(json, clazz); + + if(defaultOverlay != null) + { + try + { + for(Field field : clazz.getDeclaredFields()) + { + if(field.get(overlays) == null) + { + field.set(overlays, field.get(defaultOverlay)); + } + } + } + catch (IllegalAccessException ex) + { + throw new RuntimeException("Failed to copy fields from default overlay", ex); + } + } + + return overlays; + } + + default Material select(ResourceLocation... candidates) + { + for(ResourceLocation id : candidates) + { + if(id != null) + { + return new Material(InventoryMenu.BLOCK_ATLAS, id); + } + } + return null; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java index 9d69e104..1eb1836d 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java +++ b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java @@ -1,80 +1,23 @@ package net.swedz.extended_industrialization.client.model.chainer; -import aztech.modern_industrialization.MI; import aztech.modern_industrialization.machines.models.MachineCasing; -import aztech.modern_industrialization.machines.models.MachineModelClientData; -import aztech.modern_industrialization.util.ModelHelper; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.renderer.block.model.ItemOverrides; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.client.resources.model.ModelResourceLocation; -import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.client.ChunkRenderTypeSet; -import net.neoforged.neoforge.client.model.IDynamicBakedModel; -import net.neoforged.neoforge.client.model.data.ModelData; -import net.neoforged.neoforge.client.model.pipeline.QuadBakingVertexConsumer; +import net.swedz.extended_industrialization.client.model.ModularMachineBakedModel; -import java.util.ArrayList; -import java.util.List; import java.util.Map; -import java.util.Objects; -public class MachineChainerBakedModel implements IDynamicBakedModel +public final class MachineChainerBakedModel extends ModularMachineBakedModel { - public static float Z_OFFSET = 5e-4f; - - private static final ChunkRenderTypeSet CUTOUT_MIPPED = ChunkRenderTypeSet.of(RenderType.cutoutMipped()); - - public static final String CASING_FOLDER = "machine_casing"; - - public static ModelResourceLocation getCasingModelId(MachineCasing casing) - { - return ModelResourceLocation.standalone(MI.id(CASING_FOLDER + "/" + casing.name)); - } - - public static BakedModel getCasingModel(MachineCasing casing) - { - return Minecraft.getInstance().getModelManager().getModel(getCasingModelId(casing)); - } - - private final MachineCasing baseCasing; - private final TextureAtlasSprite[] defaultOverlays; - private final Map tieredOverlays; - private final MachineModelClientData defaultData; - - MachineChainerBakedModel(MachineCasing baseCasing, - TextureAtlasSprite[] defaultOverlays, - Map tieredOverlays) + public MachineChainerBakedModel(MachineCasing baseCasing, + int[] outputOverlayIndexes, TextureAtlasSprite[] defaultOverlays, + Map tieredOverlays) { - this.baseCasing = baseCasing; - this.defaultOverlays = defaultOverlays; - this.tieredOverlays = tieredOverlays; - this.defaultData = new MachineModelClientData(baseCasing, Direction.NORTH); + super(baseCasing, outputOverlayIndexes, defaultOverlays, tieredOverlays); } - public MachineCasing getBaseCasing() - { - return baseCasing; - } - - public TextureAtlasSprite[] getSprites(MachineCasing casing) - { - if(casing == null) - { - return defaultOverlays; - } - return tieredOverlays.getOrDefault(casing.name, defaultOverlays); - } - - public static TextureAtlasSprite getSprite(TextureAtlasSprite[] sprites, Direction side, Direction facingDirection, boolean isActive) + @Override + public TextureAtlasSprite getSprite(TextureAtlasSprite[] sprites, Direction side, Direction facingDirection, boolean isActive) { int spriteId = 1; if(side == facingDirection) @@ -116,110 +59,4 @@ else if(side.getAxis().isVertical() && facingDirection.getAxis().isHorizontal()) } return sprites[spriteId]; } - - @Override - public ModelData getModelData(BlockAndTintGetter level, BlockPos pos, BlockState state, ModelData modelData) - { - var machineData = modelData.get(MachineModelClientData.KEY); - if(machineData == null) - { - return modelData; - } - - MachineCasing casing = Objects.requireNonNullElse(machineData.casing, baseCasing); - return getCasingModel(casing).getModelData(level, pos, state, modelData); - } - - @Override - public List getQuads(BlockState state, Direction side, RandomSource rand, - ModelData extraData, RenderType renderType) - { - var data = extraData.get(MachineModelClientData.KEY); - if(data == null) - { - data = defaultData; - } - - MachineCasing casing = Objects.requireNonNullElse(data.casing, baseCasing); - var sprites = getSprites(casing); - - List quads = new ArrayList<>(); - var vc = new QuadBakingVertexConsumer(); - - if(side != null) - { - // Casing - quads.addAll(getCasingModel(casing).getQuads(state, side, rand, extraData, renderType)); - // Machine overlays - TextureAtlasSprite sprite = getSprite(sprites, side, data.frontDirection, false); - if(sprite != null) - { - quads.add(ModelHelper.bakeSprite(vc, side, sprite, -Z_OFFSET)); - } - } - - // Output overlays - if(data.outputDirection != null && side == data.outputDirection) - { - quads.add(ModelHelper.bakeSprite(vc, data.outputDirection, sprites[6], -3 * Z_OFFSET)); - if(data.itemAutoExtract) - { - quads.add(ModelHelper.bakeSprite(vc, data.outputDirection, sprites[7], -3 * Z_OFFSET)); - } - if(data.fluidAutoExtract) - { - quads.add(ModelHelper.bakeSprite(vc, data.outputDirection, sprites[8], -3 * Z_OFFSET)); - } - } - - return quads; - } - - @Override - public boolean useAmbientOcclusion() - { - return true; - } - - @Override - public boolean isGui3d() - { - return false; - } - - @Override - public boolean usesBlockLight() - { - return true; - } - - @Override - public boolean isCustomRenderer() - { - return false; - } - - @Override - public TextureAtlasSprite getParticleIcon() - { - return getCasingModel(baseCasing).getParticleIcon(); - } - - @Override - public ItemTransforms getTransforms() - { - return ModelHelper.MODEL_TRANSFORM_BLOCK; - } - - @Override - public ItemOverrides getOverrides() - { - return ItemOverrides.EMPTY; - } - - @Override - public ChunkRenderTypeSet getRenderTypes(BlockState state, RandomSource rand, ModelData data) - { - return CUTOUT_MIPPED; - } } \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerOverlaysJson.java b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerOverlaysJson.java new file mode 100644 index 00000000..ac96427c --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerOverlaysJson.java @@ -0,0 +1,40 @@ +package net.swedz.extended_industrialization.client.model.chainer; + +import net.minecraft.client.resources.model.Material; +import net.minecraft.resources.ResourceLocation; +import net.swedz.extended_industrialization.client.model.ModularOverlaysJson; + +public final class MachineChainerOverlaysJson implements ModularOverlaysJson +{ + private ResourceLocation front; + private ResourceLocation back; + private ResourceLocation up; + private ResourceLocation down; + private ResourceLocation left; + private ResourceLocation right; + private ResourceLocation output; + private ResourceLocation item_auto; + private ResourceLocation fluid_auto; + + @Override + public Material[] toSpriteIds() + { + return new Material[]{ + select(front), + select(back), + select(up), + select(down), + select(left), + select(right), + select(output), + select(item_auto), + select(fluid_auto), + }; + } + + @Override + public int[] getOutputSpriteIndexes() + { + return new int[]{6, 7, 8}; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerUnbakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerUnbakedModel.java deleted file mode 100644 index 505f6a23..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerUnbakedModel.java +++ /dev/null @@ -1,144 +0,0 @@ -package net.swedz.extended_industrialization.client.model.chainer; - -import aztech.modern_industrialization.machines.models.MachineCasing; -import aztech.modern_industrialization.machines.models.MachineCasings; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonObject; -import net.minecraft.client.renderer.block.model.ItemOverrides; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.client.resources.model.Material; -import net.minecraft.client.resources.model.ModelBaker; -import net.minecraft.client.resources.model.ModelState; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.GsonHelper; -import net.minecraft.world.inventory.InventoryMenu; -import net.neoforged.neoforge.client.model.geometry.IGeometryBakingContext; -import net.neoforged.neoforge.client.model.geometry.IGeometryLoader; -import net.neoforged.neoforge.client.model.geometry.IUnbakedGeometry; -import net.swedz.extended_industrialization.EI; -import org.jetbrains.annotations.Nullable; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; - -public class MachineChainerUnbakedModel implements IUnbakedGeometry -{ - public static final ResourceLocation LOADER_ID = EI.id("machine_chainer"); - public static final IGeometryLoader LOADER = (jsonObject, deserializationContext) -> new MachineChainerUnbakedModel(jsonObject); - - private static final Gson GSON = new GsonBuilder().registerTypeAdapter(ResourceLocation.class, new ResourceLocation.Serializer()).create(); - - private final MachineCasing baseCasing; - private final Material[] defaultOverlays; - private final Map tieredOverlays = new HashMap<>(); - - private MachineChainerUnbakedModel(JsonObject obj) - { - this.baseCasing = MachineCasings.get(GsonHelper.getAsString(obj, "casing")); - - var defaultOverlaysJson = OverlaysJson.parse(GsonHelper.getAsJsonObject(obj, "default_overlays"), null); - this.defaultOverlays = defaultOverlaysJson.toSpriteIds(); - - var tieredOverlays = GsonHelper.getAsJsonObject(obj, "tiered_overlays", new JsonObject()); - for(var casingTier : tieredOverlays.keySet()) - { - var casingOverlaysJson = OverlaysJson.parse(GsonHelper.getAsJsonObject(tieredOverlays, casingTier), defaultOverlaysJson); - this.tieredOverlays.put(casingTier, casingOverlaysJson.toSpriteIds()); - } - } - - @Override - public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, - ModelState modelState, ItemOverrides overrides) - { - var defaultOverlays = loadSprites(spriteGetter, this.defaultOverlays); - var tieredOverlays = new HashMap(); - for(var entry : this.tieredOverlays.entrySet()) - { - tieredOverlays.put(entry.getKey(), loadSprites(spriteGetter, entry.getValue())); - } - return new MachineChainerBakedModel(baseCasing, defaultOverlays, tieredOverlays); - } - - private static TextureAtlasSprite[] loadSprites(Function textureGetter, Material[] ids) - { - var sprites = new TextureAtlasSprite[ids.length]; - for(int i = 0; i < ids.length; ++i) - { - if(ids[i] != null) - { - sprites[i] = textureGetter.apply(ids[i]); - } - } - return sprites; - } - - private static class OverlaysJson - { - private ResourceLocation front; - private ResourceLocation back; - private ResourceLocation up; - private ResourceLocation down; - private ResourceLocation left; - private ResourceLocation right; - private ResourceLocation output; - private ResourceLocation item_auto; - private ResourceLocation fluid_auto; - - private static OverlaysJson parse(JsonObject json, OverlaysJson defaultOverlay) - { - var overlays = GSON.fromJson(json, OverlaysJson.class); - - if(defaultOverlay != null) - { - // Copy null fields from the default. - try - { - for(var field : OverlaysJson.class.getDeclaredFields()) - { - if(field.get(overlays) == null) - { - field.set(overlays, field.get(defaultOverlay)); - } - } - } - catch (IllegalAccessException ex) - { - throw new RuntimeException("Failed to copy fields from default overlay", ex); - } - } - - return overlays; - } - - private Material[] toSpriteIds() - { - return new Material[]{ - select(front), - select(back), - select(up), - select(down), - select(left), - select(right), - select(output), - select(item_auto), - select(fluid_auto), - }; - } - - private static Material select(@Nullable ResourceLocation... candidates) - { - for(var id : candidates) - { - if(id != null) - { - return new Material(InventoryMenu.BLOCK_ATLAS, id); - } - } - return null; - } - } -} \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/mixin/mi/accessor/MachineModelDataAccessor.java b/src/main/java/net/swedz/extended_industrialization/mixin/mi/accessor/MachineModelDataAccessor.java new file mode 100644 index 00000000..0135a093 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/mixin/mi/accessor/MachineModelDataAccessor.java @@ -0,0 +1,16 @@ +package net.swedz.extended_industrialization.mixin.mi.accessor; + +import aztech.modern_industrialization.machines.MachineBlockEntity; +import aztech.modern_industrialization.machines.models.MachineModelClientData; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin( + value = MachineBlockEntity.class, + remap = false +) +public interface MachineModelDataAccessor +{ + @Invoker("getMachineModelData") + MachineModelClientData getMachineModelData(); +} diff --git a/src/main/resources/extended_industrialization.mixins.json b/src/main/resources/extended_industrialization.mixins.json index c2e3335e..b6062be2 100644 --- a/src/main/resources/extended_industrialization.mixins.json +++ b/src/main/resources/extended_industrialization.mixins.json @@ -9,6 +9,7 @@ "RemoveRainbowWhenDyeingMixin", "mi.accessor.CasingComponentAccessor", "mi.accessor.ConfigurableItemStackAccessor", + "mi.accessor.MachineModelDataAccessor", "mi.accessor.RedstoneControlComponentAccessor", "mi.accessor.UpgradeComponentAccessor" ], From 4303e22eb764aa9ee8a2d3d25f7fc70a1b920c53 Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 23 Sep 2024 23:00:42 -0400 Subject: [PATCH 03/11] Revert local mi version requirement --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 01035f5e..753e84f0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -33,7 +33,7 @@ mod_description=An addon mod that extends the content in Modern Industrializatio mod_github=https://github.com/Swedz/Extended-Industrialization # Dependencies -modern_industrialization_version=2.2.23-local +modern_industrialization_version=2.2.23 modern_industrialization_version_range=[2.2.21-beta, 2.3-) grandpower_version=3.0.0 cloth_config_version=15.0.127 From 5a78887c15a5b55a4ac5b9af3bee738be31eac40 Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 23 Sep 2024 23:08:20 -0400 Subject: [PATCH 04/11] Improve arrow rendering --- .../MachineChainerHighlightRenderer.java | 39 ++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java index 23f421fc..4242c9b4 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java @@ -157,21 +157,32 @@ private String pickArrowSymbol(MachineChainerMachineBlockEntity machine, Direction playerDirectionRight = playerDirection.getClockWise(); String arrow = ""; - if(playerDirection == machineDirection) + if(renderDirection != machineDirection && renderDirection != machineDirection.getOpposite()) { - arrow = renderDirection == Direction.DOWN ? ARROW_DOWN : ARROW_UP; - } - else if(playerDirection == machineDirection.getOpposite()) - { - arrow = renderDirection == Direction.DOWN ? ARROW_UP : ARROW_DOWN; - } - else if(playerDirectionLeft == machineDirection) - { - arrow = ARROW_LEFT; - } - else if(playerDirectionRight == machineDirection) - { - arrow = ARROW_RIGHT; + if(playerDirection == machineDirection) + { + arrow = renderDirection == Direction.DOWN ? ARROW_DOWN : ARROW_UP; + } + else if(playerDirection == machineDirection.getOpposite()) + { + arrow = renderDirection == Direction.DOWN ? ARROW_UP : ARROW_DOWN; + } + else if(playerDirectionLeft == machineDirection) + { + arrow = ARROW_LEFT; + } + else if(playerDirectionRight == machineDirection) + { + arrow = ARROW_RIGHT; + } + else if(machineDirection == Direction.UP) + { + arrow = ARROW_UP; + } + else if(machineDirection == Direction.DOWN) + { + arrow = ARROW_DOWN; + } } return arrow; } From 06c604806b7898e4dd9bb7b781d75304d086d0d9 Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 23 Sep 2024 23:16:36 -0400 Subject: [PATCH 05/11] Update chainer tooltip to be appropriate for changes --- .../resources/assets/extended_industrialization/lang/en_us.json | 2 +- src/main/java/net/swedz/extended_industrialization/EIText.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index 317411cc..6ccac2c3 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -141,7 +141,7 @@ "text.extended_industrialization.key_mouse_scroll": "Mouse Scroll", "text.extended_industrialization.machine_batcher_coils": "Batch size and cost is determined by coil used.", "text.extended_industrialization.machine_chainer_connected_machines": "Connected Machines: %d / %d", - "text.extended_industrialization.machine_chainer_help_1": "Connects up to %d consecutive machines in a horizontal line in the direction it is facing.", + "text.extended_industrialization.machine_chainer_help_1": "Connects up to %d consecutive machines in a straight line in the direction it is facing.", "text.extended_industrialization.machine_chainer_help_2": "Accepts items, fluids, and energy and distributes them to connected machines.", "text.extended_industrialization.machine_chainer_help_3": "Can connect to other machine chainers, but it must not link back to itself.", "text.extended_industrialization.machine_chainer_problem_at": "Problem at: %s", diff --git a/src/main/java/net/swedz/extended_industrialization/EIText.java b/src/main/java/net/swedz/extended_industrialization/EIText.java index f0935116..0f12eaa9 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIText.java +++ b/src/main/java/net/swedz/extended_industrialization/EIText.java @@ -48,7 +48,7 @@ public enum EIText implements TranslatableTextEnum KEY_MOUSE_SCROLL("Mouse Scroll"), MACHINE_BATCHER_COILS("Batch size and cost is determined by coil used."), MACHINE_CHAINER_CONNECTED_MACHINES("Connected Machines: %d / %d"), - MACHINE_CHAINER_HELP_1("Connects up to %d consecutive machines in a horizontal line in the direction it is facing."), + MACHINE_CHAINER_HELP_1("Connects up to %d consecutive machines in a straight line in the direction it is facing."), MACHINE_CHAINER_HELP_2("Accepts items, fluids, and energy and distributes them to connected machines."), MACHINE_CHAINER_HELP_3("Can connect to other machine chainers, but it must not link back to itself."), MACHINE_CHAINER_PROBLEM_AT("Problem at: %s"), From e05b4fc8c40d6ee8295b4ddc0c573e51d910f72b Mon Sep 17 00:00:00 2001 From: Swedz Date: Mon, 23 Sep 2024 23:42:17 -0400 Subject: [PATCH 06/11] Display arrow on proper side for vertical chainers --- .../MachineChainerHighlightRenderer.java | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java index 4242c9b4..6e607c47 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java @@ -130,20 +130,40 @@ private void renderPosition(MachineChainerMachineBlockEntity machine, float tick private Direction pickNumberRenderFace(MachineChainerMachineBlockEntity machine) { - int playerY = Minecraft.getInstance().player.blockPosition().getY(); - int machineY = machine.getBlockPos().getY(); + int playerY = (int) Math.round(Minecraft.getInstance().player.getY()); - if(playerY == machineY || playerY == machineY - 1) + Direction machineDirection = machine.orientation.facingDirection; + if(machineDirection.getAxis().isHorizontal()) { - return Direction.fromYRot(Minecraft.getInstance().player.yHeadRot).getOpposite(); - } - else if(playerY < machineY) - { - return Direction.DOWN; + int machineY = machine.getBlockPos().getY(); + + if(playerY == machineY || playerY == machineY - 1) + { + return Direction.fromYRot(Minecraft.getInstance().player.yHeadRot).getOpposite(); + } + else if(playerY < machineY) + { + return Direction.DOWN; + } + else + { + return Direction.UP; + } } else { - return Direction.UP; + int machineEndY = machine.getChainerComponent().links().positionAfter().getY(); + + if(machineDirection == Direction.UP && playerY >= machineEndY) + { + return Direction.UP; + } + else if(machineDirection == Direction.DOWN && playerY < machineEndY) + { + return Direction.DOWN; + } + + return Direction.fromYRot(Minecraft.getInstance().player.yHeadRot).getOpposite(); } } From 3b35bed9a5d6d38489af6ac091a8830c67c8c15f Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 24 Sep 2024 03:29:45 -0400 Subject: [PATCH 07/11] Move machine model changes to MI --- .../extended_industrialization/EIClient.java | 4 +- .../MachineChainerHighlightRenderer.java | 4 +- .../model/ModularMachineBakedModel.java | 243 ------------------ .../ModularMachineBlockEntityRenderer.java | 118 --------- .../model/ModularMachineModelBaker.java | 13 - .../model/ModularMachineUnbakedModel.java | 71 ----- .../client/model/ModularOverlaysJson.java | 56 ---- .../chainer/MachineChainerBakedModel.java | 4 +- .../chainer/MachineChainerOverlaysJson.java | 4 +- .../MachineChainerMachineBlockEntity.java | 2 +- 10 files changed, 9 insertions(+), 510 deletions(-) delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineBakedModel.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineBlockEntityRenderer.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineModelBaker.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineUnbakedModel.java delete mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/ModularOverlaysJson.java diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index f8785dd1..4e5dfbca 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -4,6 +4,7 @@ import aztech.modern_industrialization.machines.MachineBlockEntity; import aztech.modern_industrialization.machines.MachineBlockEntityRenderer; import aztech.modern_industrialization.machines.blockentities.multiblocks.LargeTankMultiblockBlockEntity; +import aztech.modern_industrialization.machines.models.MachineUnbakedModel; import aztech.modern_industrialization.machines.multiblocks.MultiblockMachineBER; import aztech.modern_industrialization.machines.multiblocks.MultiblockMachineBlockEntity; import aztech.modern_industrialization.machines.multiblocks.MultiblockTankBER; @@ -35,7 +36,6 @@ import net.neoforged.neoforge.registries.DeferredHolder; import net.swedz.extended_industrialization.client.MachineChainerHighlightRenderer; import net.swedz.extended_industrialization.client.NanoGravichestplateHudRenderer; -import net.swedz.extended_industrialization.client.model.ModularMachineUnbakedModel; import net.swedz.extended_industrialization.client.model.chainer.MachineChainerBakedModel; import net.swedz.extended_industrialization.client.model.chainer.MachineChainerOverlaysJson; import net.swedz.extended_industrialization.item.ElectricToolItem; @@ -104,7 +104,7 @@ private static void onRegisterColorItems(RegisterColorHandlersEvent.Item event) private static void registerModelLoaders(ModelEvent.RegisterGeometryLoaders event) { event.register(EI.id("machine_chainer"), (IGeometryLoader) (json, context) -> - new ModularMachineUnbakedModel<>(MachineChainerOverlaysJson.class, MachineChainerBakedModel::new, json)); + new MachineUnbakedModel(MachineChainerOverlaysJson.class, MachineChainerBakedModel::new, json)); } @SubscribeEvent diff --git a/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java index 6e607c47..0aab00c1 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java @@ -1,6 +1,7 @@ package net.swedz.extended_industrialization.client; import aztech.modern_industrialization.MITags; +import aztech.modern_industrialization.machines.MachineBlockEntityRenderer; import aztech.modern_industrialization.util.RenderHelper; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; @@ -13,11 +14,10 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import net.swedz.extended_industrialization.client.model.ModularMachineBlockEntityRenderer; import net.swedz.extended_industrialization.machines.blockentity.MachineChainerMachineBlockEntity; import net.swedz.extended_industrialization.machines.component.chainer.ChainerLinks; -public final class MachineChainerHighlightRenderer extends ModularMachineBlockEntityRenderer +public final class MachineChainerHighlightRenderer extends MachineBlockEntityRenderer { private static final int COLOR_SUCCESS = 0x6FFF6F; private static final int COLOR_FAILURE = 0xFF6F6F; diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineBakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineBakedModel.java deleted file mode 100644 index 2fad970b..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineBakedModel.java +++ /dev/null @@ -1,243 +0,0 @@ -package net.swedz.extended_industrialization.client.model; - -import aztech.modern_industrialization.MI; -import aztech.modern_industrialization.machines.models.MachineCasing; -import aztech.modern_industrialization.machines.models.MachineModelClientData; -import aztech.modern_industrialization.util.ModelHelper; -import com.google.common.collect.Lists; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.renderer.block.model.ItemOverrides; -import net.minecraft.client.renderer.block.model.ItemTransforms; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.client.resources.model.ModelResourceLocation; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.client.ChunkRenderTypeSet; -import net.neoforged.neoforge.client.model.IDynamicBakedModel; -import net.neoforged.neoforge.client.model.data.ModelData; -import net.neoforged.neoforge.client.model.pipeline.QuadBakingVertexConsumer; - -import java.util.List; -import java.util.Map; -import java.util.Objects; - -public class ModularMachineBakedModel implements IDynamicBakedModel -{ - public static float Z_OFFSET = 5e-4f; - - private static final ChunkRenderTypeSet CUTOUT_MIPPED = ChunkRenderTypeSet.of(RenderType.cutoutMipped()); - - public static final String CASING_FOLDER = "machine_casing"; - - public static ModelResourceLocation getCasingModelId(MachineCasing casing) - { - return ModelResourceLocation.standalone(MI.id(CASING_FOLDER + "/" + casing.name)); - } - - public static BakedModel getCasingModel(MachineCasing casing) - { - return Minecraft.getInstance().getModelManager().getModel(getCasingModelId(casing)); - } - - private final MachineCasing baseCasing; - private final int[] outputOverlayIndexes; - private final TextureAtlasSprite[] defaultOverlays; - private final Map tieredOverlays; - private final MachineModelClientData defaultData; - - public ModularMachineBakedModel(MachineCasing baseCasing, - int[] outputOverlayIndexes, TextureAtlasSprite[] defaultOverlays, - Map tieredOverlays) - { - this.baseCasing = baseCasing; - this.outputOverlayIndexes = outputOverlayIndexes; - this.defaultOverlays = defaultOverlays; - this.tieredOverlays = tieredOverlays; - this.defaultData = new MachineModelClientData(baseCasing, Direction.NORTH); - } - - public MachineCasing getBaseCasing() - { - return baseCasing; - } - - public TextureAtlasSprite[] getSprites(MachineCasing casing) - { - if(casing == null) - { - return defaultOverlays; - } - return tieredOverlays.getOrDefault(casing.name, defaultOverlays); - } - - public TextureAtlasSprite getSprite(TextureAtlasSprite[] sprites, Direction side, Direction facingDirection, boolean isActive) - { - int spriteId; - if(side.getAxis().isHorizontal()) - { - spriteId = (facingDirection.get2DDataValue() - side.get2DDataValue() + 4) % 4 * 2; - } - else - { - spriteId = (facingDirection.get2DDataValue() + 4) * 2; - - if(side == Direction.DOWN) - { - spriteId += 8; - } - } - if(isActive) - { - spriteId++; - } - return sprites[spriteId]; - } - - @Override - public ModelData getModelData(BlockAndTintGetter level, BlockPos pos, BlockState state, ModelData modelData) - { - MachineModelClientData machineData = modelData.get(MachineModelClientData.KEY); - if(machineData == null) - { - return modelData; - } - MachineCasing casing = Objects.requireNonNullElse(machineData.casing, baseCasing); - return getCasingModel(casing).getModelData(level, pos, state, modelData); - } - - protected List getSideQuads(BlockState state, Direction side, RandomSource random, - ModelData extraData, RenderType renderType, - MachineModelClientData data, MachineCasing casing, - TextureAtlasSprite[] sprites, - QuadBakingVertexConsumer vertexConsumer) - { - List quads = Lists.newArrayList(); - - if(side != null) - { - quads.addAll(getCasingModel(casing).getQuads(state, side, random, extraData, renderType)); - - TextureAtlasSprite sprite = this.getSprite(sprites, side, data.frontDirection, false); - if(sprite != null) - { - quads.add(ModelHelper.bakeSprite(vertexConsumer, side, sprite, -Z_OFFSET)); - } - } - - return quads; - } - - protected List getOutputQuads(BlockState state, Direction side, RandomSource random, - ModelData extraData, RenderType renderType, - MachineModelClientData data, MachineCasing casing, - TextureAtlasSprite[] sprites, - QuadBakingVertexConsumer vertexConsumer) - { - List quads = Lists.newArrayList(); - - if(data.outputDirection != null && side == data.outputDirection) - { - quads.add(ModelHelper.bakeSprite(vertexConsumer, data.outputDirection, sprites[outputOverlayIndexes[0]], -3 * Z_OFFSET)); - if(data.itemAutoExtract) - { - quads.add(ModelHelper.bakeSprite(vertexConsumer, data.outputDirection, sprites[outputOverlayIndexes[1]], -3 * Z_OFFSET)); - } - if(data.fluidAutoExtract) - { - quads.add(ModelHelper.bakeSprite(vertexConsumer, data.outputDirection, sprites[outputOverlayIndexes[2]], -3 * Z_OFFSET)); - } - } - - return quads; - } - - protected List getQuads(BlockState state, Direction side, RandomSource random, - ModelData extraData, RenderType renderType, - MachineModelClientData data, MachineCasing casing, - TextureAtlasSprite[] sprites, - QuadBakingVertexConsumer vertexConsumer) - { - List quads = Lists.newArrayList(); - - quads.addAll(this.getSideQuads(state, side, random, extraData, renderType, data, casing, sprites, vertexConsumer)); - - quads.addAll(this.getOutputQuads(state, side, random, extraData, renderType, data, casing, sprites, vertexConsumer)); - - return quads; - } - - @Override - public List getQuads(BlockState state, Direction side, RandomSource random, - ModelData extraData, RenderType renderType) - { - MachineModelClientData data = extraData.get(MachineModelClientData.KEY); - if(data == null) - { - data = defaultData; - } - - MachineCasing casing = Objects.requireNonNullElse(data.casing, baseCasing); - TextureAtlasSprite[] sprites = this.getSprites(casing); - - List quads = Lists.newArrayList(); - QuadBakingVertexConsumer vertexConsumer = new QuadBakingVertexConsumer(); - - quads.addAll(this.getQuads(state, side, random, extraData, renderType, data, casing, sprites, vertexConsumer)); - - return quads; - } - - @Override - public boolean useAmbientOcclusion() - { - return true; - } - - @Override - public boolean isGui3d() - { - return false; - } - - @Override - public boolean usesBlockLight() - { - return true; - } - - @Override - public boolean isCustomRenderer() - { - return false; - } - - @Override - public TextureAtlasSprite getParticleIcon() - { - return getCasingModel(baseCasing).getParticleIcon(); - } - - @Override - public ItemTransforms getTransforms() - { - return ModelHelper.MODEL_TRANSFORM_BLOCK; - } - - @Override - public ItemOverrides getOverrides() - { - return ItemOverrides.EMPTY; - } - - @Override - public ChunkRenderTypeSet getRenderTypes(BlockState state, RandomSource rand, ModelData data) - { - return CUTOUT_MIPPED; - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineBlockEntityRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineBlockEntityRenderer.java deleted file mode 100644 index 770cf972..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineBlockEntityRenderer.java +++ /dev/null @@ -1,118 +0,0 @@ -package net.swedz.extended_industrialization.client.model; - -import aztech.modern_industrialization.MI; -import aztech.modern_industrialization.compat.sodium.SodiumCompat; -import aztech.modern_industrialization.machines.MachineBlockEntity; -import aztech.modern_industrialization.machines.models.MachineCasing; -import aztech.modern_industrialization.machines.models.MachineModelClientData; -import aztech.modern_industrialization.util.ModelHelper; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.Sheets; -import net.minecraft.client.renderer.block.BlockModelShaper; -import net.minecraft.client.renderer.block.model.BakedQuad; -import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; -import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; -import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.core.Direction; -import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.client.model.pipeline.QuadBakingVertexConsumer; -import net.swedz.extended_industrialization.mixin.mi.accessor.MachineModelDataAccessor; - -import java.util.IdentityHashMap; - -public class ModularMachineBlockEntityRenderer implements BlockEntityRenderer -{ - private static final Object NO_QUAD = new Object(); - - private final BlockModelShaper blockModels; - private final IdentityHashMap quadCache = new IdentityHashMap<>(); - - private BlockState lastBlockState = null; - private ModularMachineBakedModel model = null; - - public ModularMachineBlockEntityRenderer(BlockEntityRendererProvider.Context ctx) - { - this.blockModels = ctx.getBlockRenderDispatcher().getBlockModelShaper(); - } - - private BakedQuad getCachedQuad(MachineModelClientData data, Direction direction) - { - Direction facing = data.frontDirection; - int cachedQuadIndex = facing.ordinal() * 6 + direction.ordinal(); - MachineCasing casing = data.casing; - Object[] cachedQuads = quadCache.computeIfAbsent(casing, c -> new Object[36]); - - if(cachedQuads[cachedQuadIndex] == null) - { - TextureAtlasSprite sprite = model == null ? null : model.getSprite(model.getSprites(casing), direction, facing, true); - if(sprite != null) - { - QuadBakingVertexConsumer vc = new QuadBakingVertexConsumer(); - cachedQuads[cachedQuadIndex] = ModelHelper.bakeSprite(vc, direction, sprite, -2 * ModularMachineBakedModel.Z_OFFSET); - } - else - { - cachedQuads[cachedQuadIndex] = NO_QUAD; - } - } - - Object quad = cachedQuads[cachedQuadIndex]; - return quad == NO_QUAD ? null : (BakedQuad) quad; - } - - private ModularMachineBakedModel getMachineModel(BlockState state) - { - if(blockModels.getBlockModel(state) instanceof ModularMachineBakedModel mbm) - { - return mbm; - } - else - { - MI.LOGGER.warn("Model {} should have been a ModularMachineBakedModel, but was {}", state, blockModels.getBlockModel(state).getClass()); - return null; - } - } - - @Override - public void render(T entity, float tickDelta, PoseStack matrices, MultiBufferSource vcp, int light, int overlay) - { - BlockState state = entity.getBlockState(); - if(lastBlockState == null) - { - lastBlockState = state; - model = getMachineModel(state); - } - else if(lastBlockState != state) - { - throw new IllegalStateException("Tried to use the same machine BER with two block states: " + state + " and " + lastBlockState); - } - - MachineModelClientData data = ((MachineModelDataAccessor) entity).getMachineModelData(); - if(data.isActive) - { - VertexConsumer vc = vcp.getBuffer(Sheets.cutoutBlockSheet()); - - for(Direction d : Direction.values()) - { - BakedQuad quad = getCachedQuad(data, d); - if(quad != null) - { - int faceLight = LevelRenderer.getLightColor(entity.getLevel(), entity.getBlockState(), entity.getBlockPos().relative(d)); - vc.putBulkData(matrices.last(), quad, 1.0f, 1.0f, 1.0f, 1.0f, faceLight, OverlayTexture.NO_OVERLAY); - - SodiumCompat.markSpriteActive(quad.getSprite()); - } - } - } - } - - @Override - public int getViewDistance() - { - return 256; - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineModelBaker.java b/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineModelBaker.java deleted file mode 100644 index 47f52c11..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineModelBaker.java +++ /dev/null @@ -1,13 +0,0 @@ -package net.swedz.extended_industrialization.client.model; - -import aztech.modern_industrialization.machines.models.MachineCasing; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; - -import java.util.Map; - -public interface ModularMachineModelBaker -{ - ModularMachineBakedModel bake(MachineCasing baseCasing, - int[] outputOverlayIndexes, TextureAtlasSprite[] defaultOverlays, - Map tieredOverlays); -} diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineUnbakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineUnbakedModel.java deleted file mode 100644 index 69eda662..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/model/ModularMachineUnbakedModel.java +++ /dev/null @@ -1,71 +0,0 @@ -package net.swedz.extended_industrialization.client.model; - -import aztech.modern_industrialization.machines.models.MachineCasing; -import aztech.modern_industrialization.machines.models.MachineCasings; -import com.google.common.collect.Maps; -import com.google.gson.JsonObject; -import net.minecraft.client.renderer.block.model.ItemOverrides; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.BakedModel; -import net.minecraft.client.resources.model.Material; -import net.minecraft.client.resources.model.ModelBaker; -import net.minecraft.client.resources.model.ModelState; -import net.minecraft.util.GsonHelper; -import net.neoforged.neoforge.client.model.geometry.IGeometryBakingContext; -import net.neoforged.neoforge.client.model.geometry.IUnbakedGeometry; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; - -public class ModularMachineUnbakedModel implements IUnbakedGeometry> -{ - private final ModularMachineModelBaker modelBaker; - - private final MachineCasing baseCasing; - private final int[] outputOverlayIndexes; - private final Material[] defaultOverlays; - private final Map tieredOverlays = new HashMap<>(); - - public ModularMachineUnbakedModel(Class overlayClass, ModularMachineModelBaker modelBaker, JsonObject json) - { - this.modelBaker = modelBaker; - - this.baseCasing = MachineCasings.get(GsonHelper.getAsString(json, "casing")); - - O defaultOverlaysJson = ModularOverlaysJson.parse(overlayClass, GsonHelper.getAsJsonObject(json, "default_overlays"), null); - this.outputOverlayIndexes = defaultOverlaysJson.getOutputSpriteIndexes(); - this.defaultOverlays = defaultOverlaysJson.toSpriteIds(); - - JsonObject tieredOverlays = GsonHelper.getAsJsonObject(json, "tiered_overlays", new JsonObject()); - for(String casingTier : tieredOverlays.keySet()) - { - O casingOverlaysJson = ModularOverlaysJson.parse(overlayClass, GsonHelper.getAsJsonObject(tieredOverlays, casingTier), defaultOverlaysJson); - this.tieredOverlays.put(casingTier, casingOverlaysJson.toSpriteIds()); - } - } - - @Override - public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, - ModelState modelState, ItemOverrides overrides) - { - TextureAtlasSprite[] defaultOverlays = loadSprites(spriteGetter, this.defaultOverlays); - HashMap tieredOverlays = Maps.newHashMap(); - this.tieredOverlays.forEach((key, sprites) -> - tieredOverlays.put(key, loadSprites(spriteGetter, sprites))); - return modelBaker.bake(baseCasing, outputOverlayIndexes, defaultOverlays, tieredOverlays); - } - - private static TextureAtlasSprite[] loadSprites(Function textureGetter, Material[] ids) - { - TextureAtlasSprite[] sprites = new TextureAtlasSprite[ids.length]; - for(int i = 0; i < ids.length; ++i) - { - if(ids[i] != null) - { - sprites[i] = textureGetter.apply(ids[i]); - } - } - return sprites; - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/ModularOverlaysJson.java b/src/main/java/net/swedz/extended_industrialization/client/model/ModularOverlaysJson.java deleted file mode 100644 index 749cae83..00000000 --- a/src/main/java/net/swedz/extended_industrialization/client/model/ModularOverlaysJson.java +++ /dev/null @@ -1,56 +0,0 @@ -package net.swedz.extended_industrialization.client.model; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonObject; -import net.minecraft.client.resources.model.Material; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.inventory.InventoryMenu; - -import java.lang.reflect.Field; - -public interface ModularOverlaysJson -{ - Material[] toSpriteIds(); - - int[] getOutputSpriteIndexes(); - - Gson GSON = new GsonBuilder().registerTypeAdapter(ResourceLocation.class, new ResourceLocation.Serializer()).create(); - - static O parse(Class clazz, JsonObject json, ModularOverlaysJson defaultOverlay) - { - O overlays = GSON.fromJson(json, clazz); - - if(defaultOverlay != null) - { - try - { - for(Field field : clazz.getDeclaredFields()) - { - if(field.get(overlays) == null) - { - field.set(overlays, field.get(defaultOverlay)); - } - } - } - catch (IllegalAccessException ex) - { - throw new RuntimeException("Failed to copy fields from default overlay", ex); - } - } - - return overlays; - } - - default Material select(ResourceLocation... candidates) - { - for(ResourceLocation id : candidates) - { - if(id != null) - { - return new Material(InventoryMenu.BLOCK_ATLAS, id); - } - } - return null; - } -} diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java index 1eb1836d..80d90179 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java +++ b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java @@ -1,13 +1,13 @@ package net.swedz.extended_industrialization.client.model.chainer; +import aztech.modern_industrialization.machines.models.MachineBakedModel; import aztech.modern_industrialization.machines.models.MachineCasing; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.core.Direction; -import net.swedz.extended_industrialization.client.model.ModularMachineBakedModel; import java.util.Map; -public final class MachineChainerBakedModel extends ModularMachineBakedModel +public final class MachineChainerBakedModel extends MachineBakedModel { public MachineChainerBakedModel(MachineCasing baseCasing, int[] outputOverlayIndexes, TextureAtlasSprite[] defaultOverlays, diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerOverlaysJson.java b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerOverlaysJson.java index ac96427c..0e0f5e7d 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerOverlaysJson.java +++ b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerOverlaysJson.java @@ -1,10 +1,10 @@ package net.swedz.extended_industrialization.client.model.chainer; +import aztech.modern_industrialization.machines.models.MachineOverlaysJson; import net.minecraft.client.resources.model.Material; import net.minecraft.resources.ResourceLocation; -import net.swedz.extended_industrialization.client.model.ModularOverlaysJson; -public final class MachineChainerOverlaysJson implements ModularOverlaysJson +public final class MachineChainerOverlaysJson implements MachineOverlaysJson { private ResourceLocation front; private ResourceLocation back; diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/MachineChainerMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/MachineChainerMachineBlockEntity.java index 789a88e3..9b37a3ce 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/MachineChainerMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/MachineChainerMachineBlockEntity.java @@ -49,7 +49,7 @@ public MachineChainerMachineBlockEntity(BEP bep) super( bep, new MachineGuiParameters.Builder(EI.id("machine_chainer"), false).backgroundHeight(175).build(), - new OrientationComponent.Params(true, true, true, true) + new OrientationComponent.Params(true, true, true/*, true*/) ); redstoneControl = new RedstoneControlComponent(); From 7fe79a74c5e97c78f08d221e08f1635c345b73f0 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 24 Sep 2024 04:17:37 -0400 Subject: [PATCH 08/11] Use resource location for machine casings --- .../models/block/bronze_bending_machine.json | 2 +- .../models/block/bronze_composter.json | 2 +- .../models/block/bronze_solar_boiler.json | 2 +- .../models/block/bronze_waste_collector.json | 2 +- .../models/block/electric_alloy_smelter.json | 2 +- .../models/block/electric_bending_machine.json | 2 +- .../models/block/electric_brewery.json | 2 +- .../models/block/electric_canning_machine.json | 2 +- .../models/block/electric_composter.json | 2 +- .../models/block/electric_farmer.json | 2 +- .../models/block/electric_honey_extractor.json | 2 +- .../models/block/electric_waste_collector.json | 2 +- .../models/block/global_wireless_charging_station.json | 2 +- .../models/block/hv_solar_panel.json | 2 +- .../block/interdimensional_wireless_charging_station.json | 2 +- .../models/block/large_configurable_chest.json | 2 +- .../models/block/large_electric_furnace.json | 2 +- .../models/block/large_electric_macerator.json | 2 +- .../models/block/large_steam_furnace.json | 2 +- .../models/block/large_steam_macerator.json | 2 +- .../models/block/local_wireless_charging_station.json | 2 +- .../models/block/lv_solar_panel.json | 2 +- .../models/block/mv_solar_panel.json | 2 +- .../models/block/processing_array.json | 2 +- .../extended_industrialization/models/block/steam_farmer.json | 2 +- .../models/block/steel_alloy_smelter.json | 2 +- .../models/block/steel_bending_machine.json | 2 +- .../extended_industrialization/models/block/steel_brewery.json | 2 +- .../models/block/steel_canning_machine.json | 2 +- .../models/block/steel_composter.json | 2 +- .../models/block/steel_honey_extractor.json | 2 +- .../models/block/steel_solar_boiler.json | 2 +- .../models/block/steel_waste_collector.json | 2 +- .../models/block/universal_transformer.json | 2 +- .../models/machine_casing/bronze_pipe.json | 0 .../models/machine_casing/large_steel_crate.json | 0 .../models/machine_casing/steel_pipe.json | 0 .../models/machine_casing/steel_plated_bricks.json | 0 .../client/model/chainer/MachineChainerBakedModel.java | 3 ++- .../models/block/machine_chainer.json | 2 +- 40 files changed, 37 insertions(+), 36 deletions(-) rename src/generated/resources/assets/{modern_industrialization => extended_industrialization}/models/machine_casing/bronze_pipe.json (100%) rename src/generated/resources/assets/{modern_industrialization => extended_industrialization}/models/machine_casing/large_steel_crate.json (100%) rename src/generated/resources/assets/{modern_industrialization => extended_industrialization}/models/machine_casing/steel_pipe.json (100%) rename src/generated/resources/assets/{modern_industrialization => extended_industrialization}/models/machine_casing/steel_plated_bricks.json (100%) diff --git a/src/generated/resources/assets/extended_industrialization/models/block/bronze_bending_machine.json b/src/generated/resources/assets/extended_industrialization/models/block/bronze_bending_machine.json index e1c008fd..a489caf3 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/bronze_bending_machine.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/bronze_bending_machine.json @@ -1,5 +1,5 @@ { - "casing": "bronze", + "casing": "modern_industrialization:bronze", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/bending_machine/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/bronze_composter.json b/src/generated/resources/assets/extended_industrialization/models/block/bronze_composter.json index a4aeb80d..442c6279 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/bronze_composter.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/bronze_composter.json @@ -1,5 +1,5 @@ { - "casing": "bronze", + "casing": "modern_industrialization:bronze", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/composter/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/bronze_solar_boiler.json b/src/generated/resources/assets/extended_industrialization/models/block/bronze_solar_boiler.json index a542d194..cd68fea3 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/bronze_solar_boiler.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/bronze_solar_boiler.json @@ -1,5 +1,5 @@ { - "casing": "bricked_bronze", + "casing": "modern_industrialization:bricked_bronze", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/solar_boiler/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/bronze_waste_collector.json b/src/generated/resources/assets/extended_industrialization/models/block/bronze_waste_collector.json index cbbb66cd..bd67ad6d 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/bronze_waste_collector.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/bronze_waste_collector.json @@ -1,5 +1,5 @@ { - "casing": "bronze", + "casing": "modern_industrialization:bronze", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_alloy_smelter.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_alloy_smelter.json index 811e0665..ea3f94e9 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_alloy_smelter.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_alloy_smelter.json @@ -1,5 +1,5 @@ { - "casing": "lv", + "casing": "modern_industrialization:lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/alloy_smelter/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_bending_machine.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_bending_machine.json index dd420f22..9a8e1d4d 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_bending_machine.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_bending_machine.json @@ -1,5 +1,5 @@ { - "casing": "lv", + "casing": "modern_industrialization:lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/bending_machine/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_brewery.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_brewery.json index 8c6bf6c6..980e3952 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_brewery.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_brewery.json @@ -1,5 +1,5 @@ { - "casing": "lv", + "casing": "modern_industrialization:lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/brewery/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_canning_machine.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_canning_machine.json index 70a80f5d..3d3c5ed6 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_canning_machine.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_canning_machine.json @@ -1,5 +1,5 @@ { - "casing": "lv", + "casing": "modern_industrialization:lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/canning_machine/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_composter.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_composter.json index 5f158dc6..04b890d8 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_composter.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_composter.json @@ -1,5 +1,5 @@ { - "casing": "lv", + "casing": "modern_industrialization:lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/composter/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_farmer.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_farmer.json index d8b876d9..c92e09fc 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_farmer.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_farmer.json @@ -1,5 +1,5 @@ { - "casing": "steel", + "casing": "modern_industrialization:steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/farmer/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_honey_extractor.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_honey_extractor.json index 37c84cad..704e62b6 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_honey_extractor.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_honey_extractor.json @@ -1,5 +1,5 @@ { - "casing": "lv", + "casing": "modern_industrialization:lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/honey_extractor/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_waste_collector.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_waste_collector.json index 17d62215..3973533d 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_waste_collector.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_waste_collector.json @@ -1,5 +1,5 @@ { - "casing": "lv", + "casing": "modern_industrialization:lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/global_wireless_charging_station.json b/src/generated/resources/assets/extended_industrialization/models/block/global_wireless_charging_station.json index cbd26897..29064276 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/global_wireless_charging_station.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/global_wireless_charging_station.json @@ -1,5 +1,5 @@ { - "casing": "hv", + "casing": "modern_industrialization:hv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/hv_solar_panel.json b/src/generated/resources/assets/extended_industrialization/models/block/hv_solar_panel.json index 03dadd3b..dbf276b2 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/hv_solar_panel.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/hv_solar_panel.json @@ -1,5 +1,5 @@ { - "casing": "hv", + "casing": "modern_industrialization:hv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/interdimensional_wireless_charging_station.json b/src/generated/resources/assets/extended_industrialization/models/block/interdimensional_wireless_charging_station.json index 2f844bc3..b8530169 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/interdimensional_wireless_charging_station.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/interdimensional_wireless_charging_station.json @@ -1,5 +1,5 @@ { - "casing": "ev", + "casing": "modern_industrialization:ev", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/large_configurable_chest.json b/src/generated/resources/assets/extended_industrialization/models/block/large_configurable_chest.json index 8578604f..8bc01b44 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/large_configurable_chest.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/large_configurable_chest.json @@ -1,5 +1,5 @@ { - "casing": "large_steel_crate", + "casing": "extended_industrialization:large_steel_crate", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/large_electric_furnace.json b/src/generated/resources/assets/extended_industrialization/models/block/large_electric_furnace.json index 93cb0700..8dcda455 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/large_electric_furnace.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/large_electric_furnace.json @@ -1,5 +1,5 @@ { - "casing": "heatproof_machine_casing", + "casing": "modern_industrialization:heatproof_machine_casing", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/large_furnace/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/large_electric_macerator.json b/src/generated/resources/assets/extended_industrialization/models/block/large_electric_macerator.json index 8d97e471..62b7ce65 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/large_electric_macerator.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/large_electric_macerator.json @@ -1,5 +1,5 @@ { - "casing": "steel_plated_bricks", + "casing": "extended_industrialization:steel_plated_bricks", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/large_macerator/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/large_steam_furnace.json b/src/generated/resources/assets/extended_industrialization/models/block/large_steam_furnace.json index cf359500..2fe48d0d 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/large_steam_furnace.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/large_steam_furnace.json @@ -1,5 +1,5 @@ { - "casing": "bronze_plated_bricks", + "casing": "modern_industrialization:bronze_plated_bricks", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/large_furnace/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/large_steam_macerator.json b/src/generated/resources/assets/extended_industrialization/models/block/large_steam_macerator.json index 38b9e021..048b6412 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/large_steam_macerator.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/large_steam_macerator.json @@ -1,5 +1,5 @@ { - "casing": "bronze_plated_bricks", + "casing": "modern_industrialization:bronze_plated_bricks", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/large_macerator/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/local_wireless_charging_station.json b/src/generated/resources/assets/extended_industrialization/models/block/local_wireless_charging_station.json index 87b282b9..4ec2932b 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/local_wireless_charging_station.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/local_wireless_charging_station.json @@ -1,5 +1,5 @@ { - "casing": "mv", + "casing": "modern_industrialization:mv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/lv_solar_panel.json b/src/generated/resources/assets/extended_industrialization/models/block/lv_solar_panel.json index d1380a4e..48001275 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/lv_solar_panel.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/lv_solar_panel.json @@ -1,5 +1,5 @@ { - "casing": "lv", + "casing": "modern_industrialization:lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/mv_solar_panel.json b/src/generated/resources/assets/extended_industrialization/models/block/mv_solar_panel.json index f687ee7a..da14d485 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/mv_solar_panel.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/mv_solar_panel.json @@ -1,5 +1,5 @@ { - "casing": "mv", + "casing": "modern_industrialization:mv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/processing_array.json b/src/generated/resources/assets/extended_industrialization/models/block/processing_array.json index 8eaea5bc..42a7224e 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/processing_array.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/processing_array.json @@ -1,5 +1,5 @@ { - "casing": "clean_stainless_steel_machine_casing", + "casing": "modern_industrialization:clean_stainless_steel_machine_casing", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/processing_array/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steam_farmer.json b/src/generated/resources/assets/extended_industrialization/models/block/steam_farmer.json index d0acfada..337eb890 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steam_farmer.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steam_farmer.json @@ -1,5 +1,5 @@ { - "casing": "bronze_plated_bricks", + "casing": "modern_industrialization:bronze_plated_bricks", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/farmer/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_alloy_smelter.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_alloy_smelter.json index 10ca03b9..c5b23353 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_alloy_smelter.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_alloy_smelter.json @@ -1,5 +1,5 @@ { - "casing": "steel", + "casing": "modern_industrialization:steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/alloy_smelter/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_bending_machine.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_bending_machine.json index daf9c191..b5775d0a 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_bending_machine.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_bending_machine.json @@ -1,5 +1,5 @@ { - "casing": "steel", + "casing": "modern_industrialization:steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/bending_machine/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_brewery.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_brewery.json index c02986a5..ae2cd5f0 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_brewery.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_brewery.json @@ -1,5 +1,5 @@ { - "casing": "steel", + "casing": "modern_industrialization:steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/brewery/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_canning_machine.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_canning_machine.json index 40e1d12d..5935730f 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_canning_machine.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_canning_machine.json @@ -1,5 +1,5 @@ { - "casing": "steel", + "casing": "modern_industrialization:steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/canning_machine/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_composter.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_composter.json index 085282e4..ef253536 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_composter.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_composter.json @@ -1,5 +1,5 @@ { - "casing": "steel", + "casing": "modern_industrialization:steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/composter/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_honey_extractor.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_honey_extractor.json index 4d21b2f8..e2dca546 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_honey_extractor.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_honey_extractor.json @@ -1,5 +1,5 @@ { - "casing": "steel", + "casing": "modern_industrialization:steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/honey_extractor/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_solar_boiler.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_solar_boiler.json index 3b86966a..13b23bf1 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_solar_boiler.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_solar_boiler.json @@ -1,5 +1,5 @@ { - "casing": "bricked_steel", + "casing": "modern_industrialization:bricked_steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/solar_boiler/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_waste_collector.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_waste_collector.json index 8dd9704e..b52e9593 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_waste_collector.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_waste_collector.json @@ -1,5 +1,5 @@ { - "casing": "steel", + "casing": "modern_industrialization:steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/universal_transformer.json b/src/generated/resources/assets/extended_industrialization/models/block/universal_transformer.json index e12d4179..bef72ce8 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/universal_transformer.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/universal_transformer.json @@ -1,5 +1,5 @@ { - "casing": "lv", + "casing": "modern_industrialization:lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/modern_industrialization/models/machine_casing/bronze_pipe.json b/src/generated/resources/assets/extended_industrialization/models/machine_casing/bronze_pipe.json similarity index 100% rename from src/generated/resources/assets/modern_industrialization/models/machine_casing/bronze_pipe.json rename to src/generated/resources/assets/extended_industrialization/models/machine_casing/bronze_pipe.json diff --git a/src/generated/resources/assets/modern_industrialization/models/machine_casing/large_steel_crate.json b/src/generated/resources/assets/extended_industrialization/models/machine_casing/large_steel_crate.json similarity index 100% rename from src/generated/resources/assets/modern_industrialization/models/machine_casing/large_steel_crate.json rename to src/generated/resources/assets/extended_industrialization/models/machine_casing/large_steel_crate.json diff --git a/src/generated/resources/assets/modern_industrialization/models/machine_casing/steel_pipe.json b/src/generated/resources/assets/extended_industrialization/models/machine_casing/steel_pipe.json similarity index 100% rename from src/generated/resources/assets/modern_industrialization/models/machine_casing/steel_pipe.json rename to src/generated/resources/assets/extended_industrialization/models/machine_casing/steel_pipe.json diff --git a/src/generated/resources/assets/modern_industrialization/models/machine_casing/steel_plated_bricks.json b/src/generated/resources/assets/extended_industrialization/models/machine_casing/steel_plated_bricks.json similarity index 100% rename from src/generated/resources/assets/modern_industrialization/models/machine_casing/steel_plated_bricks.json rename to src/generated/resources/assets/extended_industrialization/models/machine_casing/steel_plated_bricks.json diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java index 80d90179..66255f29 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java +++ b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java @@ -4,6 +4,7 @@ import aztech.modern_industrialization.machines.models.MachineCasing; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; import java.util.Map; @@ -11,7 +12,7 @@ public final class MachineChainerBakedModel extends MachineBakedModel { public MachineChainerBakedModel(MachineCasing baseCasing, int[] outputOverlayIndexes, TextureAtlasSprite[] defaultOverlays, - Map tieredOverlays) + Map tieredOverlays) { super(baseCasing, outputOverlayIndexes, defaultOverlays, tieredOverlays); } diff --git a/src/main/resources/assets/extended_industrialization/models/block/machine_chainer.json b/src/main/resources/assets/extended_industrialization/models/block/machine_chainer.json index 23b15d9f..a4cfbec8 100644 --- a/src/main/resources/assets/extended_industrialization/models/block/machine_chainer.json +++ b/src/main/resources/assets/extended_industrialization/models/block/machine_chainer.json @@ -1,5 +1,5 @@ { - "casing": "mv", + "casing": "modern_industrialization:mv", "default_overlays": { "front": "extended_industrialization:block/machines/machine_chainer/overlay_front", "up": "extended_industrialization:block/machines/machine_chainer/overlay_arrow_up", From c5d24c937dde8f2f100c6340eda4a7a88021a862 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 24 Sep 2024 15:17:04 -0400 Subject: [PATCH 09/11] Update tesseract required version --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 753e84f0..a035f388 100644 --- a/gradle.properties +++ b/gradle.properties @@ -39,8 +39,8 @@ grandpower_version=3.0.0 cloth_config_version=15.0.127 emi_version=1.1.10+1.21 emi_version_range=[1.1.10, 1.2-) -tesseract_version=1.5.3-beta-1.21.1 -tesseract_version_range=[1.5.2-beta-, 1.6-) +tesseract_version=1.5.5-beta-1.21.1 +tesseract_version_range=[1.5.5-beta-, 1.6-) mi_tweaks_version=1.5.3-beta-1.21.1 mi_tweaks_version_range=[1.5.0-beta-, 1.6-) mixinextras_version=0.3.5 From 2aa914dd1e3ccc886f003d19cbe524fdace78451 Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 10 Dec 2024 10:38:03 -0500 Subject: [PATCH 10/11] Use custom model baking --- .../extended_industrialization/EIClient.java | 10 +- .../MachineChainerBlockEntityRenderer.java | 114 +++++++++++++ .../MachineChainerHighlightRenderer.java | 5 +- .../client/model/MachineOverlaysJson.java | 56 +++++++ .../chainer/MachineChainerBakedModel.java | 155 +++++++++++++++++- .../chainer/MachineChainerOverlaysJson.java | 2 +- .../chainer/MachineChainerUnbakedModel.java | 66 ++++++++ .../MachineChainerMachineBlockEntity.java | 2 +- .../models/block/machine_chainer.json | 2 +- 9 files changed, 390 insertions(+), 22 deletions(-) create mode 100644 src/main/java/net/swedz/extended_industrialization/client/ber/chainer/MachineChainerBlockEntityRenderer.java rename src/main/java/net/swedz/extended_industrialization/client/{ => ber/chainer}/MachineChainerHighlightRenderer.java (98%) create mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/MachineOverlaysJson.java create mode 100644 src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerUnbakedModel.java diff --git a/src/main/java/net/swedz/extended_industrialization/EIClient.java b/src/main/java/net/swedz/extended_industrialization/EIClient.java index 4e5dfbca..371e3616 100644 --- a/src/main/java/net/swedz/extended_industrialization/EIClient.java +++ b/src/main/java/net/swedz/extended_industrialization/EIClient.java @@ -4,7 +4,6 @@ import aztech.modern_industrialization.machines.MachineBlockEntity; import aztech.modern_industrialization.machines.MachineBlockEntityRenderer; import aztech.modern_industrialization.machines.blockentities.multiblocks.LargeTankMultiblockBlockEntity; -import aztech.modern_industrialization.machines.models.MachineUnbakedModel; import aztech.modern_industrialization.machines.multiblocks.MultiblockMachineBER; import aztech.modern_industrialization.machines.multiblocks.MultiblockMachineBlockEntity; import aztech.modern_industrialization.machines.multiblocks.MultiblockTankBER; @@ -31,13 +30,11 @@ import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent; import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent; import net.neoforged.neoforge.client.gui.VanillaGuiLayers; -import net.neoforged.neoforge.client.model.geometry.IGeometryLoader; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.registries.DeferredHolder; -import net.swedz.extended_industrialization.client.MachineChainerHighlightRenderer; import net.swedz.extended_industrialization.client.NanoGravichestplateHudRenderer; -import net.swedz.extended_industrialization.client.model.chainer.MachineChainerBakedModel; -import net.swedz.extended_industrialization.client.model.chainer.MachineChainerOverlaysJson; +import net.swedz.extended_industrialization.client.ber.chainer.MachineChainerHighlightRenderer; +import net.swedz.extended_industrialization.client.model.chainer.MachineChainerUnbakedModel; import net.swedz.extended_industrialization.item.ElectricToolItem; import net.swedz.extended_industrialization.item.SteamChainsawItem; import net.swedz.extended_industrialization.item.machineconfig.MachineConfigCardItem; @@ -103,8 +100,7 @@ private static void onRegisterColorItems(RegisterColorHandlersEvent.Item event) @SubscribeEvent private static void registerModelLoaders(ModelEvent.RegisterGeometryLoaders event) { - event.register(EI.id("machine_chainer"), (IGeometryLoader) (json, context) -> - new MachineUnbakedModel(MachineChainerOverlaysJson.class, MachineChainerBakedModel::new, json)); + event.register(MachineChainerUnbakedModel.LOADER_ID, MachineChainerUnbakedModel.LOADER); } @SubscribeEvent diff --git a/src/main/java/net/swedz/extended_industrialization/client/ber/chainer/MachineChainerBlockEntityRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/ber/chainer/MachineChainerBlockEntityRenderer.java new file mode 100644 index 00000000..242771a8 --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/chainer/MachineChainerBlockEntityRenderer.java @@ -0,0 +1,114 @@ +package net.swedz.extended_industrialization.client.ber.chainer; + +import aztech.modern_industrialization.compat.sodium.SodiumCompat; +import aztech.modern_industrialization.machines.models.MachineModelClientData; +import aztech.modern_industrialization.util.ModelHelper; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.Sheets; +import net.minecraft.client.renderer.block.BlockModelShaper; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.client.model.pipeline.QuadBakingVertexConsumer; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.client.model.chainer.MachineChainerBakedModel; +import net.swedz.extended_industrialization.machines.blockentity.MachineChainerMachineBlockEntity; + +/** + * Based on {@link aztech.modern_industrialization.machines.MachineBlockEntityRenderer} + */ +public sealed class MachineChainerBlockEntityRenderer implements BlockEntityRenderer permits MachineChainerHighlightRenderer +{ + private final BlockModelShaper blockModels; + private BlockState lastBlockState = null; + private MachineChainerBakedModel model = null; + private final Object[] quadCache = new Object[36]; + private static final Object NO_QUAD = new Object(); + + public MachineChainerBlockEntityRenderer(BlockEntityRendererProvider.Context context) + { + blockModels = context.getBlockRenderDispatcher().getBlockModelShaper(); + } + + private BakedQuad getCachedQuad(MachineModelClientData data, Direction direction) + { + var facing = data.frontDirection; + int cachedQuadIndex = facing.ordinal() * 6 + direction.ordinal(); + + if(quadCache[cachedQuadIndex] == null) + { + TextureAtlasSprite sprite = model == null ? null : MachineChainerBakedModel.getSprite(model.getSprites(), direction, facing, true); + if(sprite != null) + { + var vc = new QuadBakingVertexConsumer(); + quadCache[cachedQuadIndex] = ModelHelper.bakeSprite(vc, direction, sprite, -2 * MachineChainerBakedModel.Z_OFFSET); + } + else + { + quadCache[cachedQuadIndex] = NO_QUAD; + } + } + + var quad = quadCache[cachedQuadIndex]; + return quad == NO_QUAD ? null : (BakedQuad) quad; + } + + private MachineChainerBakedModel getMachineModel(BlockState state) + { + if(blockModels.getBlockModel(state) instanceof MachineChainerBakedModel mbm) + { + return mbm; + } + else + { + EI.LOGGER.warn("Model {} should have been a MachineChainerBakedModel, but was {}", state, blockModels.getBlockModel(state).getClass()); + return null; + } + } + + @Override + public void render(MachineChainerMachineBlockEntity machine, float tickDelta, PoseStack matrices, MultiBufferSource buffer, int light, int overlay) + { + BlockState state = machine.getBlockState(); + if(lastBlockState == null) + { + lastBlockState = state; + model = this.getMachineModel(state); + } + else if(lastBlockState != state) + { + throw new IllegalStateException("Tried to use the same machine BER with two block states: " + state + " and " + lastBlockState); + } + + MachineModelClientData data = machine.getMachineModelData(); + if(data.isActive) + { + VertexConsumer vc = buffer.getBuffer(Sheets.cutoutBlockSheet()); + + for(Direction direction : Direction.values()) + { + BakedQuad quad = this.getCachedQuad(data, direction); + if(quad != null) + { + int faceLight = LevelRenderer.getLightColor(machine.getLevel(), machine.getBlockState(), machine.getBlockPos().relative(direction)); + vc.putBulkData(matrices.last(), quad, 1.0f, 1.0f, 1.0f, 1.0f, faceLight, OverlayTexture.NO_OVERLAY); + + SodiumCompat.markSpriteActive(quad.getSprite()); + } + } + } + } + + @Override + public int getViewDistance() + { + return 256; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java b/src/main/java/net/swedz/extended_industrialization/client/ber/chainer/MachineChainerHighlightRenderer.java similarity index 98% rename from src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java rename to src/main/java/net/swedz/extended_industrialization/client/ber/chainer/MachineChainerHighlightRenderer.java index 0aab00c1..c744ee49 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/MachineChainerHighlightRenderer.java +++ b/src/main/java/net/swedz/extended_industrialization/client/ber/chainer/MachineChainerHighlightRenderer.java @@ -1,7 +1,6 @@ -package net.swedz.extended_industrialization.client; +package net.swedz.extended_industrialization.client.ber.chainer; import aztech.modern_industrialization.MITags; -import aztech.modern_industrialization.machines.MachineBlockEntityRenderer; import aztech.modern_industrialization.util.RenderHelper; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; @@ -17,7 +16,7 @@ import net.swedz.extended_industrialization.machines.blockentity.MachineChainerMachineBlockEntity; import net.swedz.extended_industrialization.machines.component.chainer.ChainerLinks; -public final class MachineChainerHighlightRenderer extends MachineBlockEntityRenderer +public final class MachineChainerHighlightRenderer extends MachineChainerBlockEntityRenderer { private static final int COLOR_SUCCESS = 0x6FFF6F; private static final int COLOR_FAILURE = 0xFF6F6F; diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/MachineOverlaysJson.java b/src/main/java/net/swedz/extended_industrialization/client/model/MachineOverlaysJson.java new file mode 100644 index 00000000..5760702d --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/model/MachineOverlaysJson.java @@ -0,0 +1,56 @@ +package net.swedz.extended_industrialization.client.model; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import net.minecraft.client.resources.model.Material; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.InventoryMenu; + +import java.lang.reflect.Field; + +public interface MachineOverlaysJson +{ + Material[] toSpriteIds(); + + int[] getOutputSpriteIndexes(); + + Gson GSON = new GsonBuilder().registerTypeAdapter(ResourceLocation.class, new ResourceLocation.Serializer()).create(); + + static O parse(Class clazz, JsonObject json, MachineOverlaysJson defaultOverlay) + { + O overlays = GSON.fromJson(json, clazz); + + if(defaultOverlay != null) + { + try + { + for(Field field : clazz.getDeclaredFields()) + { + if(field.get(overlays) == null) + { + field.set(overlays, field.get(defaultOverlay)); + } + } + } + catch (IllegalAccessException ex) + { + throw new RuntimeException("Failed to copy fields from default overlay", ex); + } + } + + return overlays; + } + + default Material select(ResourceLocation... candidates) + { + for(ResourceLocation id : candidates) + { + if(id != null) + { + return new Material(InventoryMenu.BLOCK_ATLAS, id); + } + } + return null; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java index 66255f29..14dac811 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java +++ b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerBakedModel.java @@ -2,23 +2,55 @@ import aztech.modern_industrialization.machines.models.MachineBakedModel; import aztech.modern_industrialization.machines.models.MachineCasing; +import aztech.modern_industrialization.machines.models.MachineModelClientData; +import aztech.modern_industrialization.util.ModelHelper; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.ItemOverrides; +import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.client.ChunkRenderTypeSet; +import net.neoforged.neoforge.client.model.IDynamicBakedModel; +import net.neoforged.neoforge.client.model.data.ModelData; +import net.neoforged.neoforge.client.model.pipeline.QuadBakingVertexConsumer; -import java.util.Map; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; -public final class MachineChainerBakedModel extends MachineBakedModel +/** + * Based on {@link MachineBakedModel} + */ +public final class MachineChainerBakedModel implements IDynamicBakedModel { - public MachineChainerBakedModel(MachineCasing baseCasing, - int[] outputOverlayIndexes, TextureAtlasSprite[] defaultOverlays, - Map tieredOverlays) + public static float Z_OFFSET = 5e-4f; // Cannot be lower due to Embeddium compact vertex format + + private static final ChunkRenderTypeSet CUTOUT_MIPPED = ChunkRenderTypeSet.of(RenderType.cutoutMipped()); + + private final MachineCasing casing; + private final MachineChainerOverlaysJson overlaysJson; + private final TextureAtlasSprite[] overlays; + private final MachineModelClientData defaultData; + + MachineChainerBakedModel(MachineCasing casing, MachineChainerOverlaysJson overlaysJson, TextureAtlasSprite[] overlays) { - super(baseCasing, outputOverlayIndexes, defaultOverlays, tieredOverlays); + this.casing = casing; + this.overlaysJson = overlaysJson; + this.overlays = overlays; + this.defaultData = new MachineModelClientData(casing, Direction.NORTH); } - @Override - public TextureAtlasSprite getSprite(TextureAtlasSprite[] sprites, Direction side, Direction facingDirection, boolean isActive) + public TextureAtlasSprite[] getSprites() + { + return overlays; + } + + public static TextureAtlasSprite getSprite(TextureAtlasSprite[] sprites, Direction side, Direction facingDirection, boolean isActive) { int spriteId = 1; if(side == facingDirection) @@ -60,4 +92,109 @@ else if(side.getAxis().isVertical() && facingDirection.getAxis().isHorizontal()) } return sprites[spriteId]; } + + @Override + public ModelData getModelData(BlockAndTintGetter level, BlockPos pos, BlockState state, ModelData modelData) + { + var machineData = modelData.get(MachineModelClientData.KEY); + if(machineData == null) + { + return modelData; + } + MachineCasing casing = Objects.requireNonNullElse(machineData.casing, this.casing); + return MachineBakedModel.getCasingModel(casing).getModelData(level, pos, state, modelData); + } + + @Override + public List getQuads(BlockState state, Direction side, RandomSource rand, + ModelData extraData, RenderType renderType) + { + var data = extraData.get(MachineModelClientData.KEY); + if(data == null) + { + data = defaultData; + } + MachineCasing casing = Objects.requireNonNullElse(data.casing, this.casing); + + var sprites = this.getSprites(); + + List quads = new ArrayList<>(); + var vc = new QuadBakingVertexConsumer(); + + if(side != null) + { + quads.addAll(MachineBakedModel.getCasingModel(casing).getQuads(state, side, rand, extraData, renderType)); + TextureAtlasSprite sprite = getSprite(sprites, side, data.frontDirection, false); + if(sprite != null) + { + quads.add(ModelHelper.bakeSprite(vc, side, sprite, -Z_OFFSET)); + } + } + + if(data.outputDirection != null && side == data.outputDirection) + { + var outputIndexes = overlaysJson.getOutputSpriteIndexes(); + quads.add(ModelHelper.bakeSprite(vc, data.outputDirection, sprites[outputIndexes[0]], -3 * Z_OFFSET)); + if(data.itemAutoExtract) + { + quads.add(ModelHelper.bakeSprite(vc, data.outputDirection, sprites[outputIndexes[1]], -3 * Z_OFFSET)); + } + if(data.fluidAutoExtract) + { + quads.add(ModelHelper.bakeSprite(vc, data.outputDirection, sprites[outputIndexes[2]], -3 * Z_OFFSET)); + } + } + + return quads; + } + + @Override + public boolean useAmbientOcclusion() + { + return true; + } + + @Override + public boolean isGui3d() + { + return false; + } + + @Override + public boolean usesBlockLight() + { + return true; + } + + @Override + public boolean isCustomRenderer() + { + return false; + } + + @SuppressWarnings("deprecation") + @Override + public TextureAtlasSprite getParticleIcon() + { + return MachineBakedModel.getCasingModel(casing).getParticleIcon(); + } + + @SuppressWarnings("deprecation") + @Override + public ItemTransforms getTransforms() + { + return ModelHelper.MODEL_TRANSFORM_BLOCK; + } + + @Override + public ItemOverrides getOverrides() + { + return ItemOverrides.EMPTY; + } + + @Override + public ChunkRenderTypeSet getRenderTypes(BlockState state, RandomSource rand, ModelData data) + { + return CUTOUT_MIPPED; + } } \ No newline at end of file diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerOverlaysJson.java b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerOverlaysJson.java index 0e0f5e7d..02acfa5a 100644 --- a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerOverlaysJson.java +++ b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerOverlaysJson.java @@ -1,8 +1,8 @@ package net.swedz.extended_industrialization.client.model.chainer; -import aztech.modern_industrialization.machines.models.MachineOverlaysJson; import net.minecraft.client.resources.model.Material; import net.minecraft.resources.ResourceLocation; +import net.swedz.extended_industrialization.client.model.MachineOverlaysJson; public final class MachineChainerOverlaysJson implements MachineOverlaysJson { diff --git a/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerUnbakedModel.java b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerUnbakedModel.java new file mode 100644 index 00000000..82aa744e --- /dev/null +++ b/src/main/java/net/swedz/extended_industrialization/client/model/chainer/MachineChainerUnbakedModel.java @@ -0,0 +1,66 @@ +package net.swedz.extended_industrialization.client.model.chainer; + +import aztech.modern_industrialization.machines.models.MachineCasing; +import aztech.modern_industrialization.machines.models.MachineCasings; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import net.minecraft.client.renderer.block.model.ItemOverrides; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.resources.model.Material; +import net.minecraft.client.resources.model.ModelBaker; +import net.minecraft.client.resources.model.ModelState; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.GsonHelper; +import net.neoforged.neoforge.client.model.geometry.IGeometryBakingContext; +import net.neoforged.neoforge.client.model.geometry.IGeometryLoader; +import net.neoforged.neoforge.client.model.geometry.IUnbakedGeometry; +import net.swedz.extended_industrialization.EI; +import net.swedz.extended_industrialization.client.model.MachineOverlaysJson; + +import java.util.function.Function; + +/** + * Based on {@link aztech.modern_industrialization.machines.models.MachineUnbakedModel} + */ +public final class MachineChainerUnbakedModel implements IUnbakedGeometry +{ + public static final ResourceLocation LOADER_ID = EI.id("machine_chainer"); + public static final IGeometryLoader LOADER = (json, context) -> new MachineChainerUnbakedModel(json); + + private static final Gson GSON = new GsonBuilder().registerTypeAdapter(ResourceLocation.class, new ResourceLocation.Serializer()).create(); + + private final MachineCasing casing; + private final MachineChainerOverlaysJson overlaysJson; + private final Material[] overlays; + + private MachineChainerUnbakedModel(JsonObject json) + { + casing = MachineCasings.get(ResourceLocation.parse(GsonHelper.getAsString(json, "casing"))); + + overlaysJson = MachineOverlaysJson.parse(MachineChainerOverlaysJson.class, GsonHelper.getAsJsonObject(json, "overlays"), null); + overlays = overlaysJson.toSpriteIds(); + } + + @Override + public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, + ModelState modelState, ItemOverrides overrides) + { + var overlays = loadSprites(spriteGetter, this.overlays); + return new MachineChainerBakedModel(casing, overlaysJson, overlays); + } + + private static TextureAtlasSprite[] loadSprites(Function textureGetter, Material[] ids) + { + var sprites = new TextureAtlasSprite[ids.length]; + for(int i = 0; i < ids.length; ++i) + { + if(ids[i] != null) + { + sprites[i] = textureGetter.apply(ids[i]); + } + } + return sprites; + } +} diff --git a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/MachineChainerMachineBlockEntity.java b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/MachineChainerMachineBlockEntity.java index fc4e0000..12e81ba8 100644 --- a/src/main/java/net/swedz/extended_industrialization/machines/blockentity/MachineChainerMachineBlockEntity.java +++ b/src/main/java/net/swedz/extended_industrialization/machines/blockentity/MachineChainerMachineBlockEntity.java @@ -48,7 +48,7 @@ public MachineChainerMachineBlockEntity(BEP bep) super( bep, new MachineGuiParameters.Builder(EI.id("machine_chainer"), false).backgroundHeight(175).build(), - new OrientationComponent.Params(true, true, true/*, true*/) + new OrientationComponent.Params(true, true, true, true) ); redstoneControl = new RedstoneControlComponent(); diff --git a/src/main/resources/assets/extended_industrialization/models/block/machine_chainer.json b/src/main/resources/assets/extended_industrialization/models/block/machine_chainer.json index a4cfbec8..3a286c4d 100644 --- a/src/main/resources/assets/extended_industrialization/models/block/machine_chainer.json +++ b/src/main/resources/assets/extended_industrialization/models/block/machine_chainer.json @@ -1,6 +1,6 @@ { "casing": "modern_industrialization:mv", - "default_overlays": { + "overlays": { "front": "extended_industrialization:block/machines/machine_chainer/overlay_front", "up": "extended_industrialization:block/machines/machine_chainer/overlay_arrow_up", "down": "extended_industrialization:block/machines/machine_chainer/overlay_arrow_down", From 577c1bda2f607f652abc03f7bf67ddba4b49274e Mon Sep 17 00:00:00 2001 From: Swedz Date: Tue, 10 Dec 2024 10:41:31 -0500 Subject: [PATCH 11/11] Fix datagen mess --- .../resources/assets/extended_industrialization/lang/en_us.json | 2 +- .../models/block/bronze_bending_machine.json | 2 +- .../models/block/bronze_composter.json | 2 +- .../models/block/bronze_solar_boiler.json | 2 +- .../models/block/bronze_waste_collector.json | 2 +- .../models/block/electric_alloy_smelter.json | 2 +- .../models/block/electric_bending_machine.json | 2 +- .../models/block/electric_brewery.json | 2 +- .../models/block/electric_canning_machine.json | 2 +- .../models/block/electric_composter.json | 2 +- .../models/block/electric_farmer.json | 2 +- .../models/block/electric_honey_extractor.json | 2 +- .../models/block/electric_waste_collector.json | 2 +- .../models/block/global_wireless_charging_station.json | 2 +- .../extended_industrialization/models/block/hv_solar_panel.json | 2 +- .../block/interdimensional_wireless_charging_station.json | 2 +- .../models/block/large_electric_furnace.json | 2 +- .../models/block/large_steam_furnace.json | 2 +- .../models/block/large_steam_macerator.json | 2 +- .../models/block/local_wireless_charging_station.json | 2 +- .../extended_industrialization/models/block/lv_solar_panel.json | 2 +- .../extended_industrialization/models/block/mv_solar_panel.json | 2 +- .../models/block/processing_array.json | 2 +- .../extended_industrialization/models/block/steam_farmer.json | 2 +- .../models/block/steel_alloy_smelter.json | 2 +- .../models/block/steel_bending_machine.json | 2 +- .../extended_industrialization/models/block/steel_brewery.json | 2 +- .../models/block/steel_canning_machine.json | 2 +- .../models/block/steel_composter.json | 2 +- .../models/block/steel_honey_extractor.json | 2 +- .../models/block/steel_solar_boiler.json | 2 +- .../models/block/steel_waste_collector.json | 2 +- .../models/block/universal_transformer.json | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/generated/resources/assets/extended_industrialization/lang/en_us.json b/src/generated/resources/assets/extended_industrialization/lang/en_us.json index e34f406b..ab71501f 100644 --- a/src/generated/resources/assets/extended_industrialization/lang/en_us.json +++ b/src/generated/resources/assets/extended_industrialization/lang/en_us.json @@ -192,4 +192,4 @@ "text.extended_industrialization.universal_transformer_from_tier_input": "Hull for cable tier to convert from (LV by default).", "text.extended_industrialization.universal_transformer_to_tier_input": "Hull for cable tier to convert to (LV by default).", "text.extended_industrialization.waste_collector_help": "When placed underneath animals, manure will be collected." -} +} \ No newline at end of file diff --git a/src/generated/resources/assets/extended_industrialization/models/block/bronze_bending_machine.json b/src/generated/resources/assets/extended_industrialization/models/block/bronze_bending_machine.json index a489caf3..e1c008fd 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/bronze_bending_machine.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/bronze_bending_machine.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:bronze", + "casing": "bronze", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/bending_machine/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/bronze_composter.json b/src/generated/resources/assets/extended_industrialization/models/block/bronze_composter.json index 442c6279..a4aeb80d 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/bronze_composter.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/bronze_composter.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:bronze", + "casing": "bronze", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/composter/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/bronze_solar_boiler.json b/src/generated/resources/assets/extended_industrialization/models/block/bronze_solar_boiler.json index cd68fea3..a542d194 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/bronze_solar_boiler.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/bronze_solar_boiler.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:bricked_bronze", + "casing": "bricked_bronze", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/solar_boiler/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/bronze_waste_collector.json b/src/generated/resources/assets/extended_industrialization/models/block/bronze_waste_collector.json index bd67ad6d..cbbb66cd 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/bronze_waste_collector.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/bronze_waste_collector.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:bronze", + "casing": "bronze", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_alloy_smelter.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_alloy_smelter.json index ea3f94e9..811e0665 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_alloy_smelter.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_alloy_smelter.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:lv", + "casing": "lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/alloy_smelter/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_bending_machine.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_bending_machine.json index 9a8e1d4d..dd420f22 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_bending_machine.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_bending_machine.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:lv", + "casing": "lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/bending_machine/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_brewery.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_brewery.json index 980e3952..8c6bf6c6 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_brewery.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_brewery.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:lv", + "casing": "lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/brewery/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_canning_machine.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_canning_machine.json index 3d3c5ed6..70a80f5d 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_canning_machine.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_canning_machine.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:lv", + "casing": "lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/canning_machine/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_composter.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_composter.json index 04b890d8..5f158dc6 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_composter.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_composter.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:lv", + "casing": "lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/composter/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_farmer.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_farmer.json index c92e09fc..d8b876d9 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_farmer.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_farmer.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:steel", + "casing": "steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/farmer/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_honey_extractor.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_honey_extractor.json index 704e62b6..37c84cad 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_honey_extractor.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_honey_extractor.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:lv", + "casing": "lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/honey_extractor/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/electric_waste_collector.json b/src/generated/resources/assets/extended_industrialization/models/block/electric_waste_collector.json index 3973533d..17d62215 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/electric_waste_collector.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/electric_waste_collector.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:lv", + "casing": "lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/global_wireless_charging_station.json b/src/generated/resources/assets/extended_industrialization/models/block/global_wireless_charging_station.json index 29064276..cbd26897 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/global_wireless_charging_station.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/global_wireless_charging_station.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:hv", + "casing": "hv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/hv_solar_panel.json b/src/generated/resources/assets/extended_industrialization/models/block/hv_solar_panel.json index dbf276b2..03dadd3b 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/hv_solar_panel.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/hv_solar_panel.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:hv", + "casing": "hv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/interdimensional_wireless_charging_station.json b/src/generated/resources/assets/extended_industrialization/models/block/interdimensional_wireless_charging_station.json index b8530169..2f844bc3 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/interdimensional_wireless_charging_station.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/interdimensional_wireless_charging_station.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:ev", + "casing": "ev", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/large_electric_furnace.json b/src/generated/resources/assets/extended_industrialization/models/block/large_electric_furnace.json index 8dcda455..93cb0700 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/large_electric_furnace.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/large_electric_furnace.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:heatproof_machine_casing", + "casing": "heatproof_machine_casing", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/large_furnace/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/large_steam_furnace.json b/src/generated/resources/assets/extended_industrialization/models/block/large_steam_furnace.json index 2fe48d0d..cf359500 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/large_steam_furnace.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/large_steam_furnace.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:bronze_plated_bricks", + "casing": "bronze_plated_bricks", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/large_furnace/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/large_steam_macerator.json b/src/generated/resources/assets/extended_industrialization/models/block/large_steam_macerator.json index 048b6412..38b9e021 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/large_steam_macerator.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/large_steam_macerator.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:bronze_plated_bricks", + "casing": "bronze_plated_bricks", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/large_macerator/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/local_wireless_charging_station.json b/src/generated/resources/assets/extended_industrialization/models/block/local_wireless_charging_station.json index 4ec2932b..87b282b9 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/local_wireless_charging_station.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/local_wireless_charging_station.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:mv", + "casing": "mv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/lv_solar_panel.json b/src/generated/resources/assets/extended_industrialization/models/block/lv_solar_panel.json index 48001275..d1380a4e 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/lv_solar_panel.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/lv_solar_panel.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:lv", + "casing": "lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/mv_solar_panel.json b/src/generated/resources/assets/extended_industrialization/models/block/mv_solar_panel.json index da14d485..f687ee7a 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/mv_solar_panel.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/mv_solar_panel.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:mv", + "casing": "mv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/processing_array.json b/src/generated/resources/assets/extended_industrialization/models/block/processing_array.json index 42a7224e..8eaea5bc 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/processing_array.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/processing_array.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:clean_stainless_steel_machine_casing", + "casing": "clean_stainless_steel_machine_casing", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/processing_array/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steam_farmer.json b/src/generated/resources/assets/extended_industrialization/models/block/steam_farmer.json index 337eb890..d0acfada 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steam_farmer.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steam_farmer.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:bronze_plated_bricks", + "casing": "bronze_plated_bricks", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/farmer/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_alloy_smelter.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_alloy_smelter.json index c5b23353..10ca03b9 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_alloy_smelter.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_alloy_smelter.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:steel", + "casing": "steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/alloy_smelter/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_bending_machine.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_bending_machine.json index b5775d0a..daf9c191 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_bending_machine.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_bending_machine.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:steel", + "casing": "steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/bending_machine/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_brewery.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_brewery.json index ae2cd5f0..c02986a5 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_brewery.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_brewery.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:steel", + "casing": "steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/brewery/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_canning_machine.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_canning_machine.json index 5935730f..40e1d12d 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_canning_machine.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_canning_machine.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:steel", + "casing": "steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/canning_machine/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_composter.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_composter.json index ef253536..085282e4 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_composter.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_composter.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:steel", + "casing": "steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/composter/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_honey_extractor.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_honey_extractor.json index e2dca546..4d21b2f8 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_honey_extractor.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_honey_extractor.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:steel", + "casing": "steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/honey_extractor/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_solar_boiler.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_solar_boiler.json index 13b23bf1..3b86966a 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_solar_boiler.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_solar_boiler.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:bricked_steel", + "casing": "bricked_steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "front": "extended_industrialization:block/machines/solar_boiler/overlay_front", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/steel_waste_collector.json b/src/generated/resources/assets/extended_industrialization/models/block/steel_waste_collector.json index b52e9593..8dd9704e 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/steel_waste_collector.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/steel_waste_collector.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:steel", + "casing": "steel", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto", diff --git a/src/generated/resources/assets/extended_industrialization/models/block/universal_transformer.json b/src/generated/resources/assets/extended_industrialization/models/block/universal_transformer.json index bef72ce8..e12d4179 100644 --- a/src/generated/resources/assets/extended_industrialization/models/block/universal_transformer.json +++ b/src/generated/resources/assets/extended_industrialization/models/block/universal_transformer.json @@ -1,5 +1,5 @@ { - "casing": "modern_industrialization:lv", + "casing": "lv", "default_overlays": { "fluid_auto": "modern_industrialization:block/overlays/fluid_auto", "item_auto": "modern_industrialization:block/overlays/item_auto",