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;