From f0abbaacd744dee705bd12d0fe66a30c5ae97a09 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Fri, 24 Jul 2020 19:43:33 +0200 Subject: [PATCH] Riding the engine - Fixed incompatibility between seats and furnace cart contraptions --- src/main/java/ContraptionInteractionHandler.java | 2 +- src/main/java/com/simibubi/create/Create.java | 1 - src/main/java/com/simibubi/create/CreateClient.java | 2 +- .../components/structureMovement/Contraption.java | 4 ++++ .../structureMovement/ContraptionCollider.java | 1 + .../structureMovement/ContraptionEntity.java | 11 +++++++++++ .../{ => chassis}/ChassisRangeDisplay.java | 3 +-- .../structureMovement/chassis/ChassisTileEntity.java | 1 - .../{ => sync}/ClientMotionPacket.java | 2 +- .../{ => sync}/ContraptionInteractionPacket.java | 3 ++- .../{ => sync}/ContraptionSeatMappingPacket.java | 9 +++++---- .../simibubi/create/{ => events}/ClientEvents.java | 4 +++- .../simibubi/create/{ => events}/CommonEvents.java | 5 +++-- .../create/foundation/networking/AllPackets.java | 6 +++--- 14 files changed, 36 insertions(+), 18 deletions(-) rename src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/{ => chassis}/ChassisRangeDisplay.java (97%) rename src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/{ => sync}/ClientMotionPacket.java (98%) rename src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/{ => sync}/ContraptionInteractionPacket.java (94%) rename src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/{ => sync}/ContraptionSeatMappingPacket.java (84%) rename src/main/java/com/simibubi/create/{ => events}/ClientEvents.java (98%) rename src/main/java/com/simibubi/create/{ => events}/CommonEvents.java (93%) diff --git a/src/main/java/ContraptionInteractionHandler.java b/src/main/java/ContraptionInteractionHandler.java index 8ae1d08c5..2ad46f867 100644 --- a/src/main/java/ContraptionInteractionHandler.java +++ b/src/main/java/ContraptionInteractionHandler.java @@ -2,7 +2,7 @@ import org.apache.commons.lang3.mutable.MutableObject; import com.simibubi.create.content.contraptions.components.structureMovement.Contraption; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionEntity; -import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionInteractionPacket; +import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionInteractionPacket; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.utility.RaycastHelper; import com.simibubi.create.foundation.utility.RaycastHelper.PredicateTraceResult; diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 64b99568b..a10d6c7a9 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -89,7 +89,6 @@ public class Create { if (schematicReceiver == null) schematicReceiver = new ServerSchematicLoader(); schematicReceiver.tick(); - lagger.tick(); } diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index 3cfd33723..e27420044 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -7,8 +7,8 @@ import java.util.function.Function; import com.simibubi.create.content.contraptions.KineticDebugger; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; -import com.simibubi.create.content.contraptions.components.structureMovement.ChassisRangeDisplay; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionRenderer; +import com.simibubi.create.content.contraptions.components.structureMovement.chassis.ChassisRangeDisplay; import com.simibubi.create.content.contraptions.relays.belt.item.BeltConnectorHandler; import com.simibubi.create.content.curiosities.tools.ExtendoGripRenderHandler; import com.simibubi.create.content.curiosities.zapper.ZapperRenderHandler; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java index 4989e3d36..f3f97426c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/Contraption.java @@ -811,6 +811,10 @@ public abstract class Contraption { public Map<UUID, Integer> getSeatMapping() { return seatMapping; } + + public void setSeatMapping(Map<UUID, Integer> seatMapping) { + this.seatMapping = seatMapping; + } public List<BlockPos> getSeats() { return seats; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java index e8369ef14..6ae155701 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionCollider.java @@ -20,6 +20,7 @@ import com.google.common.cache.CacheBuilder; import com.google.common.collect.ImmutableSet; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.components.actors.BlockBreakingMovementBehaviour; +import com.simibubi.create.content.contraptions.components.structureMovement.sync.ClientMotionPacket; import com.simibubi.create.foundation.collision.ContinuousOBBCollider.ContinuousSeparationManifold; import com.simibubi.create.foundation.collision.Matrix3d; import com.simibubi.create.foundation.collision.OrientedBB; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java index 2f468a4e8..49011f157 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionEntity.java @@ -16,6 +16,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.bea import com.simibubi.create.content.contraptions.components.structureMovement.glue.SuperGlueEntity; import com.simibubi.create.content.contraptions.components.structureMovement.mounted.CartAssemblerTileEntity.CartMovementMode; import com.simibubi.create.content.contraptions.components.structureMovement.mounted.MountedContraption; +import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionSeatMappingPacket; import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.networking.AllPackets; import com.simibubi.create.foundation.utility.AngleHelper; @@ -69,6 +70,7 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD protected boolean stationary; protected boolean initialized; final List<Entity> collidingEntities = new ArrayList<>(); + private boolean isSerializingFurnaceCart; private static final Ingredient FUEL_ITEMS = Ingredient.fromItems(Items.COAL, Items.CHARCOAL); private static final DataParameter<Boolean> STALLED = @@ -90,6 +92,7 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD super(entityTypeIn, worldIn); motionBeforeStall = Vec3d.ZERO; stationary = entityTypeIn == AllEntityTypes.STATIONARY_CONTRAPTION.get(); + isSerializingFurnaceCart = false; forcedAngle = -1; } @@ -352,7 +355,12 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD if (!isStalled() && (riding instanceof FurnaceMinecartEntity)) { FurnaceMinecartEntity furnaceCart = (FurnaceMinecartEntity) riding; + + // Notify to not trigger serialization side-effects + isSerializingFurnaceCart = true; CompoundNBT nbt = furnaceCart.serializeNBT(); + isSerializingFurnaceCart = false; + int fuel = nbt.getInt("Fuel"); int fuelBefore = fuel; double pushX = nbt.getDouble("PushX"); @@ -672,6 +680,9 @@ public class ContraptionEntity extends Entity implements IEntityAdditionalSpawnD @SuppressWarnings("deprecation") @Override public CompoundNBT writeWithoutTypeId(CompoundNBT nbt) { + if (isSerializingFurnaceCart) + return nbt; + Vec3d vec = getPositionVec(); List<Entity> passengers = getPassengers(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ChassisRangeDisplay.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisRangeDisplay.java similarity index 97% rename from src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ChassisRangeDisplay.java rename to src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisRangeDisplay.java index fdb17e76c..796c5793e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ChassisRangeDisplay.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisRangeDisplay.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.contraptions.components.structureMovement; +package com.simibubi.create.content.contraptions.components.structureMovement.chassis; import java.util.ArrayList; import java.util.Collections; @@ -14,7 +14,6 @@ import com.simibubi.create.AllItems; import com.simibubi.create.AllKeys; import com.simibubi.create.AllSpecialTextures; import com.simibubi.create.CreateClient; -import com.simibubi.create.content.contraptions.components.structureMovement.chassis.ChassisTileEntity; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.PlayerEntity; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java index 454af89ea..c7efc5d12 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/chassis/ChassisTileEntity.java @@ -11,7 +11,6 @@ import java.util.Set; import com.simibubi.create.AllBlocks; import com.simibubi.create.content.contraptions.components.structureMovement.BlockMovementTraits; -import com.simibubi.create.content.contraptions.components.structureMovement.ChassisRangeDisplay; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.tileEntity.SmartTileEntity; import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ClientMotionPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ClientMotionPacket.java similarity index 98% rename from src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ClientMotionPacket.java rename to src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ClientMotionPacket.java index 17261237b..a80351080 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ClientMotionPacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ClientMotionPacket.java @@ -1,4 +1,4 @@ -package com.simibubi.create.content.contraptions.components.structureMovement; +package com.simibubi.create.content.contraptions.components.structureMovement.sync; import java.util.function.Supplier; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionInteractionPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionInteractionPacket.java similarity index 94% rename from src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionInteractionPacket.java rename to src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionInteractionPacket.java index 0b2d2c56a..731c791e4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionInteractionPacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionInteractionPacket.java @@ -1,7 +1,8 @@ -package com.simibubi.create.content.contraptions.components.structureMovement; +package com.simibubi.create.content.contraptions.components.structureMovement.sync; import java.util.function.Supplier; +import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionEntity; import com.simibubi.create.foundation.networking.SimplePacketBase; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionSeatMappingPacket.java b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionSeatMappingPacket.java similarity index 84% rename from src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionSeatMappingPacket.java rename to src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionSeatMappingPacket.java index d67e51504..4596dbd28 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/ContraptionSeatMappingPacket.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/structureMovement/sync/ContraptionSeatMappingPacket.java @@ -1,10 +1,11 @@ -package com.simibubi.create.content.contraptions.components.structureMovement; +package com.simibubi.create.content.contraptions.components.structureMovement.sync; import java.util.HashMap; import java.util.Map; import java.util.UUID; import java.util.function.Supplier; +import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionEntity; import com.simibubi.create.foundation.networking.SimplePacketBase; import net.minecraft.client.Minecraft; @@ -44,12 +45,12 @@ public class ContraptionSeatMappingPacket extends SimplePacketBase { public void handle(Supplier<Context> context) { context.get() .enqueueWork(() -> { - Entity entityByID = Minecraft.getInstance().world - .getEntityByID(entityID); + Entity entityByID = Minecraft.getInstance().world.getEntityByID(entityID); if (!(entityByID instanceof ContraptionEntity)) return; ContraptionEntity contraptionEntity = (ContraptionEntity) entityByID; - contraptionEntity.contraption.seatMapping = mapping; + contraptionEntity.getContraption() + .setSeatMapping(mapping); }); context.get() .setPacketHandled(true); diff --git a/src/main/java/com/simibubi/create/ClientEvents.java b/src/main/java/com/simibubi/create/events/ClientEvents.java similarity index 98% rename from src/main/java/com/simibubi/create/ClientEvents.java rename to src/main/java/com/simibubi/create/events/ClientEvents.java index c38981966..e3a3fc2c7 100644 --- a/src/main/java/com/simibubi/create/ClientEvents.java +++ b/src/main/java/com/simibubi/create/events/ClientEvents.java @@ -1,9 +1,11 @@ -package com.simibubi.create; +package com.simibubi.create.events; import java.util.ArrayList; import java.util.List; import com.mojang.blaze3d.matrix.MatrixStack; +import com.simibubi.create.Create; +import com.simibubi.create.CreateClient; import com.simibubi.create.content.contraptions.KineticDebugger; import com.simibubi.create.content.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.content.contraptions.components.turntable.TurntableHandler; diff --git a/src/main/java/com/simibubi/create/CommonEvents.java b/src/main/java/com/simibubi/create/events/CommonEvents.java similarity index 93% rename from src/main/java/com/simibubi/create/CommonEvents.java rename to src/main/java/com/simibubi/create/events/CommonEvents.java index 0c4da0e88..12cd8d21b 100644 --- a/src/main/java/com/simibubi/create/CommonEvents.java +++ b/src/main/java/com/simibubi/create/events/CommonEvents.java @@ -1,5 +1,7 @@ -package com.simibubi.create; +package com.simibubi.create.events; +import com.simibubi.create.Create; +import com.simibubi.create.CreateClient; import com.simibubi.create.foundation.command.CreateCommand; import net.minecraft.world.IWorld; @@ -20,7 +22,6 @@ public class CommonEvents { public static void onTick(ServerTickEvent event) { if (event.phase == Phase.END) return; - Create.tick(); } diff --git a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java index bd2e888da..57a6b3a82 100644 --- a/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java +++ b/src/main/java/com/simibubi/create/foundation/networking/AllPackets.java @@ -5,11 +5,11 @@ import java.util.function.Function; import java.util.function.Supplier; import com.simibubi.create.Create; -import com.simibubi.create.content.contraptions.components.structureMovement.ClientMotionPacket; -import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionInteractionPacket; -import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionSeatMappingPacket; import com.simibubi.create.content.contraptions.components.structureMovement.ContraptionStallPacket; import com.simibubi.create.content.contraptions.components.structureMovement.glue.GlueEffectPacket; +import com.simibubi.create.content.contraptions.components.structureMovement.sync.ClientMotionPacket; +import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionInteractionPacket; +import com.simibubi.create.content.contraptions.components.structureMovement.sync.ContraptionSeatMappingPacket; import com.simibubi.create.content.contraptions.relays.advanced.sequencer.ConfigureSequencedGearshiftPacket; import com.simibubi.create.content.curiosities.symmetry.SymmetryEffectPacket; import com.simibubi.create.content.curiosities.tools.ExtendoGripInteractionPacket;