Get Lasers kind of working vs. dediservers

This commit is contained in:
Ben Spiers 2014-07-22 21:11:43 +01:00
parent dd421f7308
commit 327389a88c
5 changed files with 91 additions and 12 deletions

View file

@ -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));
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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);
}
/**

View file

@ -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<LaserFireMessage, IMessage>
{
@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());
}
}
}