package org.valkyrienskies.addon.control.network; import java.util.Optional; import net.minecraft.client.Minecraft; import net.minecraft.util.IThreadListener; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.valkyrienskies.addon.control.piloting.IShipPilotClient; import org.valkyrienskies.mod.common.physics.management.PhysicsObject; import org.valkyrienskies.mod.common.util.ValkyrienUtils; public class MessageStartPilotingHandler implements IMessageHandler<MessageStartPiloting, IMessage> { @Override @SideOnly(Side.CLIENT) public IMessage onMessage(MessageStartPiloting message, MessageContext ctx) { IThreadListener mainThread = Minecraft.getMinecraft(); mainThread.addScheduledTask(() -> { IShipPilotClient pilot = (IShipPilotClient) Minecraft.getMinecraft().player; pilot.setPosBeingControlled(message.posToStartPiloting); pilot.setControllerInputEnum(message.controlType); if (message.setPhysicsWrapperEntityToPilot) { Optional<PhysicsObject> physicsObject = ValkyrienUtils .getPhysicsObject(Minecraft.getMinecraft().world, message.posToStartPiloting); if (physicsObject.isPresent()) { pilot.setPilotedShip(physicsObject.get() .getWrapperEntity()); } else { new IllegalStateException("Received incorrect piloting message!") .printStackTrace(); } } else { pilot.setPilotedShip(null); } }); return null; } }