diff --git a/src/main/java/mekanism/api/lasers/LaserManager.java b/src/main/java/mekanism/api/lasers/LaserManager.java index 6e92d91ba..d69652cee 100644 --- a/src/main/java/mekanism/api/lasers/LaserManager.java +++ b/src/main/java/mekanism/api/lasers/LaserManager.java @@ -1,18 +1,13 @@ package mekanism.api.lasers; import mekanism.api.Coord4D; -import mekanism.client.entity.EntityLaser; import mekanism.common.Mekanism; -import net.minecraft.client.Minecraft; -import net.minecraft.client.particle.EntityNoteFX; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; -import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -import cpw.mods.fml.client.FMLClientHandler; public class LaserManager { @@ -47,9 +42,4 @@ public class LaserManager Mekanism.proxy.renderLaser(world, from, to, direction); } } - - public static void renderLaser(World world, Coord4D from, Coord4D to, ForgeDirection direction) - { - Minecraft.getMinecraft().effectRenderer.addEffect(new EntityLaser(world, from, to, direction)); - } } diff --git a/src/main/java/mekanism/client/ClientProxy.java b/src/main/java/mekanism/client/ClientProxy.java index 79f20f899..ce61faf8e 100644 --- a/src/main/java/mekanism/client/ClientProxy.java +++ b/src/main/java/mekanism/client/ClientProxy.java @@ -591,4 +591,10 @@ public class ClientProxy extends CommonProxy { Minecraft.getMinecraft().effectRenderer.addEffect(new EntityLaser(world, from, to, direction)); } + + @Override + public boolean isClientSide() + { + return true; + } } diff --git a/src/main/java/mekanism/common/CommonProxy.java b/src/main/java/mekanism/common/CommonProxy.java index e4dce9f06..d5cb09961 100644 --- a/src/main/java/mekanism/common/CommonProxy.java +++ b/src/main/java/mekanism/common/CommonProxy.java @@ -38,6 +38,7 @@ import mekanism.common.inventory.container.ContainerSalinationController; import mekanism.common.inventory.container.ContainerSeismicVibrator; import mekanism.common.inventory.container.ContainerTeleporter; import mekanism.common.inventory.container.ContainerUpgradeManagement; +import mekanism.common.network.PacketLaserFire.LaserFireMessage; import mekanism.common.tile.TileEntityAdvancedElectricMachine; import mekanism.common.tile.TileEntityAdvancedFactory; import mekanism.common.tile.TileEntityBin; @@ -145,7 +146,7 @@ public class CommonProxy /** * Registers a client-side sound, assigned to a TileEntity. - * @param tile - TileEntity who is registering the sound + * @param tileEntity - TileEntity who is registering the sound */ public void registerSound(TileEntity tileEntity) {} @@ -474,5 +475,13 @@ public class CommonProxy return context.getServerHandler().playerEntity; } - public void renderLaser(World world, Coord4D from, Coord4D to, ForgeDirection direction) {} + public void renderLaser(World world, Coord4D from, Coord4D to, ForgeDirection direction) + { + Mekanism.packetHandler.sendToAllAround(new LaserFireMessage(from, to, direction), from.getTargetPoint(50D)); + } + + public boolean isClientSide() + { + return false; + } } diff --git a/src/main/java/mekanism/common/PacketHandler.java b/src/main/java/mekanism/common/PacketHandler.java index b24281cff..d7d1ddb91 100644 --- a/src/main/java/mekanism/common/PacketHandler.java +++ b/src/main/java/mekanism/common/PacketHandler.java @@ -33,6 +33,8 @@ import mekanism.common.network.PacketJetpackData; import mekanism.common.network.PacketJetpackData.JetpackDataMessage; import mekanism.common.network.PacketKey; import mekanism.common.network.PacketKey.KeyMessage; +import mekanism.common.network.PacketLaserFire; +import mekanism.common.network.PacketLaserFire.LaserFireMessage; import mekanism.common.network.PacketLogisticalSorterGui; import mekanism.common.network.PacketLogisticalSorterGui.LogisticalSorterGuiMessage; import mekanism.common.network.PacketNewFilter; @@ -118,6 +120,7 @@ public class PacketHandler netHandler.registerMessage(PacketPortableTankState.class, PortableTankStateMessage.class, 25, Side.SERVER); netHandler.registerMessage(PacketContainerEditMode.class, ContainerEditModeMessage.class, 26, Side.SERVER); netHandler.registerMessage(PacketFlamethrowerActive.class, FlamethrowerActiveMessage.class, 27, Side.SERVER); + netHandler.registerMessage(PacketLaserFire.class, LaserFireMessage.class, 28, Side.CLIENT); } /** diff --git a/src/main/java/mekanism/common/network/PacketLaserFire.java b/src/main/java/mekanism/common/network/PacketLaserFire.java new file mode 100644 index 000000000..ad0afeecb --- /dev/null +++ b/src/main/java/mekanism/common/network/PacketLaserFire.java @@ -0,0 +1,71 @@ +package mekanism.common.network; + +import mekanism.api.Coord4D; +import mekanism.common.IRedstoneControl.RedstoneControl; +import mekanism.common.Mekanism; +import mekanism.common.PacketHandler; +import mekanism.common.network.PacketLaserFire.LaserFireMessage; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; + +import io.netty.buffer.ByteBuf; + +public class PacketLaserFire implements IMessageHandler +{ + @Override + public IMessage onMessage(LaserFireMessage message, MessageContext context) + { + EntityPlayer player = PacketHandler.getPlayer(context); + + if(Mekanism.proxy.isClientSide()) + { + Mekanism.proxy.renderLaser(player.worldObj, message.from, message.to, message.direction); + } + + return null; + } + + public static class LaserFireMessage implements IMessage + { + public Coord4D from; + public Coord4D to; + public ForgeDirection direction; + + public LaserFireMessage() {} + + public LaserFireMessage(Coord4D from, Coord4D to, ForgeDirection direction) + { + this.from = from; + this.to = to; + this.direction = direction; + } + + @Override + public void toBytes(ByteBuf dataStream) + { + dataStream.writeInt(from.xCoord); + dataStream.writeInt(from.yCoord); + dataStream.writeInt(from.zCoord); + dataStream.writeInt(from.dimensionId); + + dataStream.writeInt(to.xCoord); + dataStream.writeInt(to.yCoord); + dataStream.writeInt(to.zCoord); + dataStream.writeInt(to.dimensionId); + + dataStream.writeInt(direction.ordinal()); + } + + @Override + public void fromBytes(ByteBuf dataStream) + { + from = Coord4D.read(dataStream); + to = Coord4D.read(dataStream); + direction = ForgeDirection.getOrientation(dataStream.readInt()); + } + } +}