diff --git a/src/main/java/mekanism/api/lasers/LaserManager.java b/src/main/java/mekanism/api/lasers/LaserManager.java index d69652cee..1c0f5eaf6 100644 --- a/src/main/java/mekanism/api/lasers/LaserManager.java +++ b/src/main/java/mekanism/api/lasers/LaserManager.java @@ -34,7 +34,17 @@ public class LaserManager ((ILaserReceptor)tile).receiveLaserEnergy(energy, ForgeDirection.getOrientation(mop.sideHit)); } } + } + } + public static void fireLaserClient(Coord4D from, ForgeDirection direction, World world) + { + Coord4D rangeFrom = from.getFromSide(direction, 1); + Coord4D to = from.getFromSide(direction, range); + MovingObjectPosition mop = world.rayTraceBlocks(Vec3.createVectorHelper(rangeFrom.xCoord, rangeFrom.yCoord, rangeFrom.zCoord), Vec3.createVectorHelper(to.xCoord, to.yCoord, to.zCoord)); + + if(mop != null) + { Mekanism.proxy.renderLaser(world, from, new Coord4D(mop.blockX, mop.blockY, mop.blockZ), direction); } else @@ -42,4 +52,5 @@ public class LaserManager Mekanism.proxy.renderLaser(world, from, to, direction); } } + } diff --git a/src/main/java/mekanism/client/ClientProxy.java b/src/main/java/mekanism/client/ClientProxy.java index ce61faf8e..79f20f899 100644 --- a/src/main/java/mekanism/client/ClientProxy.java +++ b/src/main/java/mekanism/client/ClientProxy.java @@ -591,10 +591,4 @@ 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/client/entity/EntityLaser.java b/src/main/java/mekanism/client/entity/EntityLaser.java index 939fc6c75..5b1cd41b3 100644 --- a/src/main/java/mekanism/client/entity/EntityLaser.java +++ b/src/main/java/mekanism/client/entity/EntityLaser.java @@ -28,7 +28,7 @@ public class EntityLaser extends EntityFX particleRed = 1; particleGreen = 0; particleBlue = 0; - particleAlpha = 0.3F; + particleAlpha = 0.1F; particleScale = 0.1F; length = new Pos3D(end).distance(new Pos3D(start)); this.direction = direction; @@ -40,6 +40,8 @@ public class EntityLaser extends EntityFX tessellator.draw(); GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_POLYGON_BIT + GL11.GL_ENABLE_BIT); + GL11.glDisable(GL11.GL_CULL_FACE); Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("mekanism", "particles/laser.png")); float newX = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)partialTick - interpPosX); @@ -81,6 +83,7 @@ public class EntityLaser extends EntityFX tessellator.addVertexWithUV(particleScale, -length/2, 0, 1, 0); tessellator.draw(); + GL11.glPopAttrib(); GL11.glPopMatrix(); Minecraft.getMinecraft().renderEngine.bindTexture(MekanismRenderer.getBlocksTexture()); diff --git a/src/main/java/mekanism/common/CommonProxy.java b/src/main/java/mekanism/common/CommonProxy.java index d5cb09961..dd2ce8bc3 100644 --- a/src/main/java/mekanism/common/CommonProxy.java +++ b/src/main/java/mekanism/common/CommonProxy.java @@ -38,7 +38,6 @@ 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; @@ -475,13 +474,5 @@ public class CommonProxy return context.getServerHandler().playerEntity; } - 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; - } + public void renderLaser(World world, Coord4D from, Coord4D to, ForgeDirection direction) {} } diff --git a/src/main/java/mekanism/common/ITileNetwork.java b/src/main/java/mekanism/common/ITileNetwork.java index 758c497f0..95679654e 100644 --- a/src/main/java/mekanism/common/ITileNetwork.java +++ b/src/main/java/mekanism/common/ITileNetwork.java @@ -13,9 +13,6 @@ public interface ITileNetwork { /** * Receive and manage a packet's data. - * @param network - * @param packet - * @param player * @param dataStream */ public void handlePacketData(ByteBuf dataStream) throws Exception; diff --git a/src/main/java/mekanism/common/PacketHandler.java b/src/main/java/mekanism/common/PacketHandler.java index d7d1ddb91..b24281cff 100644 --- a/src/main/java/mekanism/common/PacketHandler.java +++ b/src/main/java/mekanism/common/PacketHandler.java @@ -33,8 +33,6 @@ 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; @@ -120,7 +118,6 @@ 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 deleted file mode 100644 index ad0afeecb..000000000 --- a/src/main/java/mekanism/common/network/PacketLaserFire.java +++ /dev/null @@ -1,71 +0,0 @@ -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()); - } - } -} diff --git a/src/main/java/mekanism/common/network/PacketTransmitterUpdate.java b/src/main/java/mekanism/common/network/PacketTransmitterUpdate.java index 3b01c90ed..8b3a1ce1f 100644 --- a/src/main/java/mekanism/common/network/PacketTransmitterUpdate.java +++ b/src/main/java/mekanism/common/network/PacketTransmitterUpdate.java @@ -9,6 +9,7 @@ import mekanism.api.gas.GasStack; import mekanism.api.transmitters.IGridTransmitter; import mekanism.common.EnergyNetwork; import mekanism.common.FluidNetwork; +import mekanism.common.Mekanism; import mekanism.common.PacketHandler; import mekanism.common.network.PacketTransmitterUpdate.TransmitterUpdateMessage; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/mekanism/common/tile/TileEntityLaser.java b/src/main/java/mekanism/common/tile/TileEntityLaser.java index e4981dca2..b25e872c6 100644 --- a/src/main/java/mekanism/common/tile/TileEntityLaser.java +++ b/src/main/java/mekanism/common/tile/TileEntityLaser.java @@ -1,15 +1,23 @@ package mekanism.common.tile; +import java.util.ArrayList; + import mekanism.api.Coord4D; import mekanism.api.lasers.LaserManager; +import mekanism.common.Mekanism; +import mekanism.common.network.PacketTileEntity.TileEntityMessage; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.ForgeDirection; +import io.netty.buffer.ByteBuf; + public class TileEntityLaser extends TileEntityElectricBlock { public static final double LASER_ENERGY = 50000; + public boolean on; + public TileEntityLaser() { super("Laser", 100000); @@ -21,10 +29,48 @@ public class TileEntityLaser extends TileEntityElectricBlock { super.onUpdate(); - if(getEnergy() >= LASER_ENERGY) + if(worldObj.isRemote) { - LaserManager.fireLaser(Coord4D.get(this), ForgeDirection.getOrientation(facing), LASER_ENERGY, worldObj); - setEnergy(getEnergy()-LASER_ENERGY); + if(on) + { + LaserManager.fireLaserClient(Coord4D.get(this), ForgeDirection.getOrientation(facing), worldObj); + } + } + else + { + if(getEnergy() >= LASER_ENERGY) + { + if(!on) + { + on = true; + Mekanism.packetHandler.sendToAllAround(new TileEntityMessage(Coord4D.get(this), getNetworkedData(new ArrayList())), Coord4D.get(this).getTargetPoint(50D)); + } + LaserManager.fireLaser(Coord4D.get(this), ForgeDirection.getOrientation(facing), LASER_ENERGY, worldObj); + setEnergy(getEnergy() - LASER_ENERGY); + } + else if(on) + { + on = false; + Mekanism.packetHandler.sendToAllAround(new TileEntityMessage(Coord4D.get(this), getNetworkedData(new ArrayList())), Coord4D.get(this).getTargetPoint(50D)); + } } } + + @Override + public ArrayList getNetworkedData(ArrayList data) + { + super.getNetworkedData(data); + + data.add(on); + + return data; + } + + @Override + public void handlePacketData(ByteBuf dataStream) + { + super.handlePacketData(dataStream); + + on = dataStream.readBoolean(); + } }