diff --git a/src/main/java/com/simibubi/create/AllBogeyStyles.java b/src/main/java/com/simibubi/create/AllBogeyStyles.java index 8615a610e..f6a0dce87 100644 --- a/src/main/java/com/simibubi/create/AllBogeyStyles.java +++ b/src/main/java/com/simibubi/create/AllBogeyStyles.java @@ -66,7 +66,7 @@ public class AllBogeyStyles { protected CompoundTag defaultData = new CompoundTag(); protected ParticleOptions contactParticle = ParticleTypes.CRIT; protected ParticleOptions smokeParticle = ParticleTypes.POOF; - protected Optional commonRenderer = Optional.empty(); + protected Optional> commonRenderer = Optional.empty(); public BogeyStyleBuilder(ResourceLocation name, ResourceLocation cycleGroup) { this.name = name; @@ -96,7 +96,7 @@ public class AllBogeyStyles { public BogeyStyleBuilder size(BogeySizes.BogeySize size, Supplier renderer, ResourceLocation location) { - this.sizes.put(size, new BogeyStyle.SizeData(location, renderer.get())); + this.sizes.put(size, new BogeyStyle.SizeData(location, renderer, renderer.get())); return this; } @@ -111,7 +111,7 @@ public class AllBogeyStyles { } public BogeyStyleBuilder commonRenderer(Supplier commonRenderer) { - this.commonRenderer = Optional.of(commonRenderer.get()); + this.commonRenderer = Optional.of(commonRenderer); return this; } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/AbstractBogeyBlock.java b/src/main/java/com/simibubi/create/content/logistics/trains/AbstractBogeyBlock.java index 5c8413828..61110f849 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/AbstractBogeyBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/AbstractBogeyBlock.java @@ -151,7 +151,7 @@ public abstract class AbstractBogeyBlock exte style = getDefaultStyle(); final Optional commonRenderer - = style.getNewCommonRenderInstance(); + = style.getInWorldCommonRenderInstance(); final BogeyRenderer renderer = style.getInWorldRenderInstance(this.getSize()); if (state != null) { ms.translate(.5f, .5f, .5f); diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/BogeyRenderer.java b/src/main/java/com/simibubi/create/content/logistics/trains/BogeyRenderer.java index 8147114d2..e9e526d80 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/BogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/BogeyRenderer.java @@ -278,21 +278,10 @@ public abstract class BogeyRenderer { return state.toString(); } - /** - * Used for rendering in contraptions allowing for individual instances of models for each component - * - * @return new Instance of renderer - */ - public abstract BogeyRenderer createNewInstance(); - - public static abstract class CommonRenderer extends BogeyRenderer { @Override public BogeySizes.BogeySize getSize() { return null; } - - @Override - public abstract CommonRenderer createNewInstance(); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/StandardBogeyRenderer.java b/src/main/java/com/simibubi/create/content/logistics/trains/StandardBogeyRenderer.java index 0e29b961c..10d14fdad 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/StandardBogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/StandardBogeyRenderer.java @@ -30,11 +30,6 @@ public class StandardBogeyRenderer { .setValue(ShaftBlock.AXIS, Direction.Axis.Z), 2); } - @Override - public CommonStandardBogeyRenderer createNewInstance() { - return new CommonStandardBogeyRenderer(); - } - @Override public void render(boolean upsideDown, CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, VertexConsumer vb, boolean inContraption) { boolean inInstancedContraption = vb == null; @@ -58,10 +53,6 @@ public class StandardBogeyRenderer { createModelInstances(materialManager, BOGEY_FRAME); } - @Override - public BogeyRenderer createNewInstance() { - return new SmallStandardBogeyRenderer(); - } @Override public BogeySizes.BogeySize getSize() { @@ -96,11 +87,6 @@ public class StandardBogeyRenderer { .setValue(ShaftBlock.AXIS, Direction.Axis.X), 2); } - @Override - public BogeyRenderer createNewInstance() { - return new LargeStandardBogeyRenderer(); - } - @Override public BogeySizes.BogeySize getSize() { return BogeySizes.LARGE; diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/entity/BackupBogeyRenderer.java b/src/main/java/com/simibubi/create/content/logistics/trains/entity/BackupBogeyRenderer.java index cc80a4120..45efd8cc9 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/entity/BackupBogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/entity/BackupBogeyRenderer.java @@ -19,9 +19,4 @@ public class BackupBogeyRenderer extends BogeyRenderer.CommonRenderer { public void initialiseContraptionModelData(MaterialManager materialManager) { } - - @Override - public CommonRenderer createNewInstance() { - return new BackupBogeyRenderer(); - } } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/entity/BogeyStyle.java b/src/main/java/com/simibubi/create/content/logistics/trains/entity/BogeyStyle.java index 59338fb7c..c5667cd0d 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/entity/BogeyStyle.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/entity/BogeyStyle.java @@ -21,10 +21,13 @@ import org.jetbrains.annotations.NotNull; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.function.Supplier; import java.util.stream.Stream; public class BogeyStyle { + private final Optional> commonRendererFactory; + public final ResourceLocation name; public final ResourceLocation cycleGroup; private final Optional commonRenderer; @@ -46,7 +49,9 @@ public class BogeyStyle { this.defaultData = defaultData; this.sizes = sizes; - this.commonRenderer = commonRenderer; + + this.commonRendererFactory = commonRenderer; + this.commonRenderer = commonRenderer.map(Supplier::get); } public Map getCycleGroup() { @@ -77,12 +82,12 @@ public class BogeyStyle { } public BogeyRenderer createRendererInstance(BogeySizes.BogeySize size) { - return this.getInWorldRenderInstance(size).createNewInstance(); + return this.sizes.get(size).createRenderInstance(); } public BogeyRenderer getInWorldRenderInstance(BogeySizes.BogeySize size) { SizeData sizeData = this.sizes.get(size); - return sizeData != null ? sizeData.renderer() : BackupBogeyRenderer.INSTANCE; + return sizeData != null ? sizeData.getInWorldInstance() : BackupBogeyRenderer.INSTANCE; } public Optional getInWorldCommonRenderInstance() { @@ -90,13 +95,20 @@ public class BogeyStyle { } public Optional getNewCommonRenderInstance() { - return this.getInWorldCommonRenderInstance().map(CommonRenderer::createNewInstance); + return this.commonRendererFactory.map(Supplier::get); } public BogeyInstance createInstance(CarriageBogey bogey, BogeySizes.BogeySize size, MaterialManager materialManager) { return new BogeyInstance(bogey, this, size, materialManager); } - public record SizeData(ResourceLocation block, BogeyRenderer renderer) { + public record SizeData(ResourceLocation block, Supplier rendererFactory, BogeyRenderer instance) { + public BogeyRenderer createRenderInstance() { + return rendererFactory.get(); + } + + public BogeyRenderer getInWorldInstance() { + return instance; + } } }