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..e617d35b0 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 @@ -162,10 +162,10 @@ public abstract class AbstractBogeyBlock exte VertexConsumer vb = buffers.getBuffer(RenderType.cutoutMipped()); if (bogeyData == null) bogeyData = new CompoundTag(); - renderer.render(upsideDown, bogeyData, wheelAngle, ms, light, vb, state == null); + renderer.render(bogeyData, wheelAngle, ms, light, vb, state == null); CompoundTag finalBogeyData = bogeyData; commonRenderer.ifPresent(common -> - common.render(upsideDown, finalBogeyData, wheelAngle, ms, light, vb, state == null)); + common.render(finalBogeyData, wheelAngle, ms, light, vb, state == null)); } public BogeySizes.BogeySize getSize() { 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..165229161 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 @@ -69,7 +69,7 @@ public abstract class BogeyRenderer { * @param vb (Optional) Vertex Consumer used for in-world rendering */ @OnlyIn(Dist.CLIENT) - public abstract void render(boolean upsideDown, CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, VertexConsumer vb, boolean inContraption); + public abstract void render(CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, VertexConsumer vb, boolean inContraption); /** * Used for calling in-contraption rendering ensuring that falsey data is handled correctly @@ -79,8 +79,8 @@ public abstract class BogeyRenderer { * @param ms The posestack to render to */ @OnlyIn(Dist.CLIENT) - public void render(boolean upsideDown, CompoundTag bogeyData, float wheelAngle, PoseStack ms) { - this.render(upsideDown, bogeyData, wheelAngle, ms, 0, null, true); + public void render(CompoundTag bogeyData, float wheelAngle, PoseStack ms) { + this.render(bogeyData, wheelAngle, ms, 0, null, true); } public abstract BogeySizes.BogeySize getSize(); 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..a4d65875b 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 @@ -36,7 +36,7 @@ public class StandardBogeyRenderer { } @Override - public void render(boolean upsideDown, CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, VertexConsumer vb, boolean inContraption) { + public void render(CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, VertexConsumer vb, boolean inContraption) { boolean inInstancedContraption = vb == null; Transform[] shafts = getTransformsFromBlockState(AllBlocks.SHAFT.getDefaultState() .setValue(ShaftBlock.AXIS, Direction.Axis.Z), ms, inInstancedContraption, 2); @@ -69,7 +69,7 @@ public class StandardBogeyRenderer { } @Override - public void render(boolean upsideDown, CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, VertexConsumer vb, boolean inContraption) { + public void render(CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, VertexConsumer vb, boolean inContraption) { boolean inInstancedContraption = vb == null; Transform transform = getTransformFromPartial(BOGEY_FRAME, ms, inInstancedContraption); finalize(transform, ms, light, vb); @@ -107,7 +107,7 @@ public class StandardBogeyRenderer { } @Override - public void render(boolean upsideDown, CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, VertexConsumer vb, boolean inContraption) { + public void render(CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, VertexConsumer vb, boolean inContraption) { boolean inInstancedContraption = vb == null; Transform[] secondaryShafts = getTransformsFromBlockState(AllBlocks.SHAFT.getDefaultState() 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..d51417776 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 @@ -11,7 +11,7 @@ public class BackupBogeyRenderer extends BogeyRenderer.CommonRenderer { public static BackupBogeyRenderer INSTANCE = new BackupBogeyRenderer(); @Override - public void render(boolean upsideDown, CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, VertexConsumer vb, boolean inContraption) { + public void render(CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, VertexConsumer vb, boolean inContraption) { } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/entity/BogeyInstance.java b/src/main/java/com/simibubi/create/content/logistics/trains/entity/BogeyInstance.java index 9e66664ce..a9b0ff8af 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/entity/BogeyInstance.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/entity/BogeyInstance.java @@ -46,8 +46,8 @@ public final class BogeyInstance { } commonRenderer.ifPresent(bogeyRenderer -> - bogeyRenderer.render(bogey.isUpsideDown(), bogey.bogeyData, wheelAngle, ms)); - renderer.render(bogey.isUpsideDown(), bogey.bogeyData, wheelAngle, ms); + bogeyRenderer.render(bogey.bogeyData, wheelAngle, ms)); + renderer.render(bogey.bogeyData, wheelAngle, ms); } public void updateLight(BlockAndTintGetter world, CarriageContraptionEntity entity) { diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageBogey.java b/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageBogey.java index 0d0b224cb..1d22c4aec 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageBogey.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageBogey.java @@ -28,10 +28,13 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.phys.Vec3; import net.minecraftforge.registries.ForgeRegistries; +import static com.simibubi.create.content.logistics.trains.track.AbstractBogeyTileEntity.BOGEY_DATA_KEY; import static com.simibubi.create.content.logistics.trains.track.AbstractBogeyTileEntity.BOGEY_STYLE_KEY; public class CarriageBogey { + public static final String UPSIDE_DOWN_KEY = "UpsideDown"; + public Carriage carriage; boolean isLeading; @@ -51,12 +54,13 @@ public class CarriageBogey { public CarriageBogey(AbstractBogeyBlock type, boolean upsideDown, CompoundTag bogeyData, TravellingPoint point, TravellingPoint point2) { this.type = type; - if (bogeyData == null || bogeyData.isEmpty()) - bogeyData = this.createBogeyData(); // Prevent Crash When Updating - this.bogeyData = bogeyData; this.upsideDown = type.canBeUpsideDown() && upsideDown; point.upsideDown = this.upsideDown; point2.upsideDown = this.upsideDown; + if (bogeyData == null || bogeyData.isEmpty()) + bogeyData = this.createBogeyData(); // Prevent Crash When Updating + bogeyData.putBoolean(UPSIDE_DOWN_KEY, upsideDown); + this.bogeyData = bogeyData; points = Couple.create(point, point2); wheelAngle = LerpedFloat.angular(); yaw = LerpedFloat.angular(); @@ -177,13 +181,15 @@ public class CarriageBogey { .toString()); tag.put("Points", points.serializeEach(tp -> tp.write(dimensions))); tag.putBoolean("UpsideDown", upsideDown); - tag.put(BOGEY_STYLE_KEY, bogeyData); + bogeyData.putBoolean(UPSIDE_DOWN_KEY, upsideDown); + NBTHelper.writeResourceLocation(bogeyData, BOGEY_STYLE_KEY, getStyle().name); + tag.put(BOGEY_DATA_KEY, bogeyData); return tag; } public static CarriageBogey read(CompoundTag tag, TrackGraph graph, DimensionPalette dimensions) { ResourceLocation location = new ResourceLocation(tag.getString("Type")); - AbstractBogeyBlock type = (AbstractBogeyBlock) ForgeRegistries.BLOCKS.getValue(location); + AbstractBogeyBlock type = (AbstractBogeyBlock) ForgeRegistries.BLOCKS.getValue(location); boolean upsideDown = tag.getBoolean("UpsideDown"); Couple points = Couple.deserializeEach(tag.getList("Points", Tag.TAG_COMPOUND), c -> TravellingPoint.read(c, graph, dimensions)); @@ -197,12 +203,15 @@ public class CarriageBogey { public BogeyStyle getStyle() { ResourceLocation location = NBTHelper.readResourceLocation(this.bogeyData, BOGEY_STYLE_KEY); - return AllBogeyStyles.BOGEY_STYLES.get(location); + BogeyStyle style = AllBogeyStyles.BOGEY_STYLES.get(location); + return style != null ? style : AllBogeyStyles.STANDARD; // just for safety } private CompoundTag createBogeyData() { - CompoundTag nbt = new CompoundTag(); - NBTHelper.writeResourceLocation(nbt, BOGEY_STYLE_KEY, (type != null ? type.getDefaultStyle() : AllBogeyStyles.STANDARD).name); + BogeyStyle style = type != null ? type.getDefaultStyle() : AllBogeyStyles.STANDARD; + CompoundTag nbt = style.defaultData != null ? style.defaultData : new CompoundTag(); + NBTHelper.writeResourceLocation(nbt, BOGEY_STYLE_KEY, style.name); + nbt.putBoolean(UPSIDE_DOWN_KEY, isUpsideDown()); return nbt; } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageSounds.java b/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageSounds.java index b9a59d58d..932ce903f 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageSounds.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/entity/CarriageSounds.java @@ -41,7 +41,7 @@ public class CarriageSounds { public CarriageSounds(CarriageContraptionEntity entity) { this.entity = entity; bogeySounds = entity.getCarriage().bogeys.map(bogey -> - bogey != null ? bogey.getStyle().getSoundType() + bogey != null && bogey.getStyle() != null ? bogey.getStyle().getSoundType() : AllSoundEvents.TRAIN2.getMainEvent()); closestBogeySound = bogeySounds.getFirst(); distanceFactor = LerpedFloat.linear(); diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/entity/Navigation.java b/src/main/java/com/simibubi/create/content/logistics/trains/entity/Navigation.java index ba05808b6..603a277b2 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/entity/Navigation.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/entity/Navigation.java @@ -558,8 +558,6 @@ public class Navigation { if (validTypes.isEmpty()) // if there are no valid track types, a route can't be found return; - Create.LOGGER.info("Valid types: "+validTypes); - Map penalties = new IdentityHashMap<>(); boolean costRelevant = maxCost >= 0; if (costRelevant) { diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/entity/TrainPacket.java b/src/main/java/com/simibubi/create/content/logistics/trains/entity/TrainPacket.java index 54bb6c107..238124743 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/entity/TrainPacket.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/entity/TrainPacket.java @@ -48,7 +48,7 @@ public class TrainPacket extends SimplePacketBase { for (boolean isFirst : Iterate.trueAndFalse) { if (!isFirst && !buffer.readBoolean()) continue; - AbstractBogeyBlock type = (AbstractBogeyBlock) ForgeRegistries.BLOCKS.getValue(buffer.readResourceLocation()); + AbstractBogeyBlock type = (AbstractBogeyBlock) ForgeRegistries.BLOCKS.getValue(buffer.readResourceLocation()); boolean upsideDown = buffer.readBoolean(); CompoundTag data = buffer.readNbt(); bogies.set(isFirst, new CarriageBogey(type, upsideDown, data, new TravellingPoint(), new TravellingPoint())); diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/track/AbstractBogeyTileEntity.java b/src/main/java/com/simibubi/create/content/logistics/trains/track/AbstractBogeyTileEntity.java index f3b752b52..e7e8c4e8b 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/track/AbstractBogeyTileEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/track/AbstractBogeyTileEntity.java @@ -17,6 +17,8 @@ import net.minecraft.world.phys.AABB; ; import org.jetbrains.annotations.NotNull; +import static com.simibubi.create.content.logistics.trains.entity.CarriageBogey.UPSIDE_DOWN_KEY; + public abstract class AbstractBogeyTileEntity extends CachedRenderBBTileEntity { public static String BOGEY_STYLE_KEY = "BogeyStyle"; public static String BOGEY_DATA_KEY = "BogeyData"; @@ -81,6 +83,10 @@ public abstract class AbstractBogeyTileEntity extends CachedRenderBBTileEntity { private CompoundTag createBogeyData() { CompoundTag nbt = new CompoundTag(); NBTHelper.writeResourceLocation(nbt, BOGEY_STYLE_KEY, getDefaultStyle().name); + boolean upsideDown = false; + if (getBlockState().getBlock() instanceof AbstractBogeyBlock bogeyBlock) + upsideDown = bogeyBlock.isUpsideDown(getBlockState()); + nbt.putBoolean(UPSIDE_DOWN_KEY, upsideDown); return nbt; }