Finished networking
This commit is contained in:
parent
9566be0b45
commit
023ce31dae
7 changed files with 139 additions and 72 deletions
|
@ -10,6 +10,7 @@ import gregtechmod.api.util.GT_OreDictUnificator;
|
|||
import gregtechmod.api.util.GT_Utility;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
|
@ -334,19 +335,14 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
|
|||
return rPacket;
|
||||
}
|
||||
|
||||
public final void receiveMetaTileEntityData(short aID, int aCover0, int aCover1, int aCover2, int aCover3, int aCover4, int aCover5, byte aTextureData, byte aUpdateData, byte aRedstoneData, byte aColorData) {
|
||||
public final void receiveMetaTileEntityData(short aID, int[] aCovers, byte aTextureData, byte aUpdateData, byte aRedstoneData, byte aColorData) {
|
||||
issueTextureUpdate();
|
||||
if (mID != aID && aID > 0) {
|
||||
mID = aID;
|
||||
createNewMetatileEntity(mID);
|
||||
}
|
||||
|
||||
mCoverSides[0] = aCover0;
|
||||
mCoverSides[1] = aCover1;
|
||||
mCoverSides[2] = aCover2;
|
||||
mCoverSides[3] = aCover3;
|
||||
mCoverSides[4] = aCover4;
|
||||
mCoverSides[5] = aCover5;
|
||||
mCoverSides = Arrays.copyOf(aCovers, aCovers.length);
|
||||
|
||||
receiveClientEvent(0, aTextureData);
|
||||
receiveClientEvent(1, aUpdateData);
|
||||
|
|
|
@ -8,8 +8,10 @@ import gregtechmod.api.util.GT_Log;
|
|||
import gregtechmod.api.util.GT_ModHandler;
|
||||
import gregtechmod.api.util.GT_OreDictUnificator;
|
||||
import gregtechmod.api.util.GT_Utility;
|
||||
import gregtechmod.common.network.packet.GT_TileEntityPacket;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
|
@ -20,7 +22,6 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.network.play.server.S3FPacketCustomPayload;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.EnumSkyBlock;
|
||||
|
@ -29,9 +30,6 @@ import net.minecraftforge.fluids.Fluid;
|
|||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.FluidTankInfo;
|
||||
|
||||
import com.google.common.io.ByteArrayDataOutput;
|
||||
import com.google.common.io.ByteStreams;
|
||||
|
||||
/**
|
||||
* NEVER INCLUDE THIS FILE IN YOUR MOD!!!
|
||||
*
|
||||
|
@ -468,7 +466,7 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
|
|||
if (isServerSide()) {
|
||||
if (getTimer() % 10 == 0) {
|
||||
if (mSendClientData) {
|
||||
GT_Utility.sendPacketToAllPlayersInRange(getWorld(), getDescriptionPacket(), getXCoord(), getZCoord());
|
||||
GT_Utility.sendPacketToAllPlayersInRange(getWorld(), getMetaTileEntityData(), getXCoord(), getZCoord());
|
||||
mSendClientData = false;
|
||||
}
|
||||
}
|
||||
|
@ -505,44 +503,60 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
|
|||
|
||||
@Override
|
||||
public Packet getDescriptionPacket() {
|
||||
ByteArrayDataOutput tOut = ByteStreams.newDataOutput();
|
||||
|
||||
tOut.writeInt(getXCoord());
|
||||
tOut.writeShort(getYCoord());
|
||||
tOut.writeInt(getZCoord());
|
||||
|
||||
tOut.writeShort(mID);
|
||||
tOut.writeInt(mCoverSides[0]);
|
||||
tOut.writeInt(mCoverSides[1]);
|
||||
tOut.writeInt(mCoverSides[2]);
|
||||
tOut.writeInt(mCoverSides[3]);
|
||||
tOut.writeInt(mCoverSides[4]);
|
||||
tOut.writeInt(mCoverSides[5]);
|
||||
|
||||
tOut.writeByte(oTextureData = (byte)((getFrontFacing()&7) | (mActive?8:0) | (mRedstone?16:0) | (mLockUpgrade?32:0)));
|
||||
tOut.writeByte(oUpdateData = hasValidMetaTileEntity()?mMetaTileEntity.getUpdateData():0);
|
||||
tOut.writeByte(oRedstoneData = (byte)(((mSidedRedstone[0]>0)?1:0)|((mSidedRedstone[1]>0)?2:0)|((mSidedRedstone[2]>0)?4:0)|((mSidedRedstone[3]>0)?8:0)|((mSidedRedstone[4]>0)?16:0)|((mSidedRedstone[5]>0)?32:0)));
|
||||
tOut.writeByte(oColor = mColor);
|
||||
|
||||
oLightValue = -1;
|
||||
|
||||
S3FPacketCustomPayload rPacket = new S3FPacketCustomPayload(GregTech_API.TILEENTITY_PACKET_CHANNEL, tOut.toByteArray());
|
||||
return rPacket;
|
||||
// ByteArrayDataOutput tOut = ByteStreams.newDataOutput();
|
||||
//
|
||||
// tOut.writeInt(getXCoord());
|
||||
// tOut.writeShort(getYCoord());
|
||||
// tOut.writeInt(getZCoord());
|
||||
//
|
||||
// tOut.writeShort(mID);
|
||||
// tOut.writeInt(mCoverSides[0]);
|
||||
// tOut.writeInt(mCoverSides[1]);
|
||||
// tOut.writeInt(mCoverSides[2]);
|
||||
// tOut.writeInt(mCoverSides[3]);
|
||||
// tOut.writeInt(mCoverSides[4]);
|
||||
// tOut.writeInt(mCoverSides[5]);
|
||||
//
|
||||
// tOut.writeByte(oTextureData = (byte)((getFrontFacing()&7) | (mActive?8:0) | (mRedstone?16:0) | (mLockUpgrade?32:0)));
|
||||
// tOut.writeByte(oUpdateData = hasValidMetaTileEntity()?mMetaTileEntity.getUpdateData():0);
|
||||
// tOut.writeByte(oRedstoneData = (byte)(((mSidedRedstone[0]>0)?1:0)|((mSidedRedstone[1]>0)?2:0)|((mSidedRedstone[2]>0)?4:0)|((mSidedRedstone[3]>0)?8:0)|((mSidedRedstone[4]>0)?16:0)|((mSidedRedstone[5]>0)?32:0)));
|
||||
// tOut.writeByte(oColor = mColor);
|
||||
//
|
||||
// oLightValue = -1;
|
||||
//
|
||||
// S3FPacketCustomPayload rPacket = new S3FPacketCustomPayload(GregTech_API.TILEENTITY_PACKET_CHANNEL, tOut.toByteArray());
|
||||
// return rPacket;
|
||||
return super.getDescriptionPacket();
|
||||
}
|
||||
|
||||
public final void receiveMetaTileEntityData(short aID, int aCover0, int aCover1, int aCover2, int aCover3, int aCover4, int aCover5, byte aTextureData, byte aUpdateData, byte aRedstoneData, byte aColorData) {
|
||||
public final GT_TileEntityPacket getMetaTileEntityData() {
|
||||
GT_TileEntityPacket tOut = new GT_TileEntityPacket();
|
||||
tOut.aX = getXCoord();
|
||||
tOut.aY = getYCoord();
|
||||
tOut.aZ = getZCoord();
|
||||
tOut.aID = mID;
|
||||
tOut.aCovers = mCoverSides;
|
||||
tOut.aTextureData = (byte)((getFrontFacing() & 7) | (mActive ? 8 : 0) | (mRedstone ? 16 : 0) | (mLockUpgrade ? 32 : 0));
|
||||
tOut.aUpdateData = (oUpdateData = hasValidMetaTileEntity() ? mMetaTileEntity.getUpdateData() : 0);
|
||||
tOut.aRedstoneData = (oRedstoneData = (byte)
|
||||
(((mSidedRedstone[0] >0 ) ? 1: 0) |
|
||||
((mSidedRedstone[1] > 0) ? 2 : 0) |
|
||||
((mSidedRedstone[2] > 0) ? 4 : 0) |
|
||||
((mSidedRedstone[3] >0) ? 8 : 0) |
|
||||
((mSidedRedstone[4] > 0) ? 16 : 0) |
|
||||
((mSidedRedstone[5] > 0) ? 32 : 0)));
|
||||
tOut.aRedstoneData = (oColor = mColor);
|
||||
return tOut;
|
||||
}
|
||||
|
||||
public final void receiveMetaTileEntityData(short aID, int[] aCovers, byte aTextureData, byte aUpdateData, byte aRedstoneData, byte aColorData) {
|
||||
issueTextureUpdate();
|
||||
if (mID != aID && aID > 0) {
|
||||
mID = aID;
|
||||
createNewMetatileEntity(mID);
|
||||
}
|
||||
|
||||
mCoverSides[0] = aCover0;
|
||||
mCoverSides[1] = aCover1;
|
||||
mCoverSides[2] = aCover2;
|
||||
mCoverSides[3] = aCover3;
|
||||
mCoverSides[4] = aCover4;
|
||||
mCoverSides[5] = aCover5;
|
||||
mCoverSides = Arrays.copyOf(aCovers, aCovers.length);
|
||||
|
||||
receiveClientEvent(0, aTextureData);
|
||||
receiveClientEvent(1, aUpdateData);
|
||||
|
|
|
@ -9,6 +9,7 @@ import gregtechmod.api.interfaces.IMachineProgress;
|
|||
import gregtechmod.api.interfaces.IUpgradableMachine;
|
||||
import gregtechmod.api.items.GT_EnergyArmor_Item;
|
||||
import gregtechmod.common.network.GT_PacketHandler;
|
||||
import gregtechmod.common.network.packet.GT_Packet;
|
||||
import gregtechmod.common.network.packet.GT_SoundPacket;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
@ -676,15 +677,6 @@ public class GT_Utility {
|
|||
|
||||
public static boolean sendSoundToPlayers(World aWorld, String aSoundName, float aSoundStrength, float aSoundModulation, int aX, int aY, int aZ) {
|
||||
if (aSoundName == null || aSoundName.equals("") || aWorld == null || aWorld.isRemote) return false;
|
||||
// ByteArrayDataOutput tOut = ByteStreams.newDataOutput();
|
||||
//
|
||||
// tOut.writeInt(aX);
|
||||
// tOut.writeShort(aY);
|
||||
// tOut.writeInt(aZ);
|
||||
//
|
||||
// tOut.writeUTF(aSoundName);
|
||||
// tOut.writeFloat(aSoundStrength);
|
||||
// tOut.writeFloat(aSoundModulation < 0 ? (1.0F + (aWorld.rand.nextFloat() - aWorld.rand.nextFloat()) * 0.2F) * 0.7F : aSoundModulation);
|
||||
aSoundModulation = aSoundModulation < 0 ? (1.0F + (aWorld.rand.nextFloat() - aWorld.rand.nextFloat()) * 0.2F) * 0.7F : aSoundModulation;
|
||||
GT_SoundPacket tPacket = new GT_SoundPacket(aSoundName, aX, aY, aZ, aSoundStrength, aSoundModulation);
|
||||
sendPacketToAllPlayersInRange(aWorld, tPacket, aX, aZ);
|
||||
|
@ -692,7 +684,7 @@ public class GT_Utility {
|
|||
return true;
|
||||
}
|
||||
|
||||
public static void sendPacketToAllPlayersInRange(World aWorld, GT_SoundPacket aPacket, int aX, int aZ) {
|
||||
public static void sendPacketToAllPlayersInRange(World aWorld, GT_Packet aPacket, int aX, int aZ) {
|
||||
for (Object tObject : aWorld.playerEntities) {
|
||||
if (tObject instanceof EntityPlayerMP) {
|
||||
EntityPlayerMP tPlayer = (EntityPlayerMP)tObject;
|
||||
|
@ -700,7 +692,7 @@ public class GT_Utility {
|
|||
Chunk tChunk = aWorld.getChunkFromBlockCoords(aX, aZ);
|
||||
if (tPlayer.getServerForPlayer().getPlayerManager().isPlayerWatchingChunk(tPlayer, tChunk.xPosition, tChunk.zPosition)) {
|
||||
if (GregTech_API.DEBUG_MODE) GT_Log.log.debug("sent Packet to " + tPlayer.getDisplayName());
|
||||
GT_PacketHandler.SOUND_PACKET_CHANNEL.sendTo(aPacket, tPlayer);
|
||||
GT_PacketHandler.sendPacket(aPacket, tPlayer);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -4,18 +4,40 @@ 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 gregtechmod.api.GregTech_API;
|
||||
import gregtechmod.api.metatileentity.BaseMetaPipeEntity;
|
||||
import gregtechmod.api.metatileentity.BaseMetaTileEntity;
|
||||
import gregtechmod.api.util.GT_Log;
|
||||
import gregtechmod.api.util.GT_Utility;
|
||||
import gregtechmod.common.network.packet.GT_Packet;
|
||||
import gregtechmod.common.network.packet.GT_SoundPacket;
|
||||
import gregtechmod.common.network.packet.GT_TileEntityPacket;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
/**
|
||||
* Used to handle packets on client side
|
||||
* @author iDnK
|
||||
*
|
||||
* @param <T> should be GT_Packet or their child class
|
||||
*/
|
||||
public abstract class GT_NetworkHandler<T extends GT_Packet> implements IMessageHandler<T, IMessage> {
|
||||
|
||||
@Override
|
||||
public IMessage onMessage(T message, MessageContext ctx) {
|
||||
if (message instanceof GT_TileEntityPacket) {
|
||||
// TODO Packets
|
||||
GT_TileEntityPacket packet = (GT_TileEntityPacket) message;
|
||||
if (GT_Utility.sCurrentPlayer != null && GT_Utility.sCurrentPlayer.worldObj != null) {
|
||||
String name = GT_Utility.sCurrentPlayer.getDisplayName();
|
||||
if (GregTech_API.DEBUG_MODE && (name.equals("Player") || name.equals("GregoriusT") || name.equals("The_DnK")))
|
||||
GT_Log.log.info(String.format("Received initial MetaTileEntity Data: %s Bytes @ (%d;%d;%d) during Tick: %s", packet.data.capacity(), packet.aX, packet.aY, packet.aZ, GregTech_API.sClientTickCounter));
|
||||
TileEntity tTile = GT_Utility.sCurrentPlayer.worldObj.getTileEntity(packet.aX, packet.aY, packet.aZ);
|
||||
if (tTile != null) {
|
||||
if (tTile instanceof BaseMetaTileEntity) {
|
||||
((BaseMetaTileEntity) tTile).receiveMetaTileEntityData(packet.aID, packet.aCovers, packet.aTextureData, packet.aUpdateData, packet.aRedstoneData, packet.aColorData);
|
||||
} else if (tTile instanceof BaseMetaPipeEntity) {
|
||||
((BaseMetaPipeEntity) tTile).receiveMetaTileEntityData(packet.aID, packet.aCovers, packet.aTextureData, packet.aUpdateData, packet.aRedstoneData, packet.aColorData);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (message instanceof GT_SoundPacket) {
|
||||
GT_SoundPacket sound = (GT_SoundPacket) message;
|
||||
if (GT_Utility.sCurrentPlayer != null) {
|
||||
|
@ -27,22 +49,6 @@ public abstract class GT_NetworkHandler<T extends GT_Packet> implements IMessage
|
|||
|
||||
}
|
||||
|
||||
// public void onPacketData(INetworkManager aManager, Packet250CustomPayload aPacket, Player aPlayer) {
|
||||
// if (aPacket.channel.equals(GregTech_API.TILEENTITY_PACKET_CHANNEL)) {
|
||||
// ByteArrayDataInput tIn = ByteStreams.newDataInput(aPacket.data);
|
||||
// int tX = tIn.readInt(), tY = tIn.readShort(), tZ = tIn.readInt();
|
||||
// if (aPlayer != null && aPlayer instanceof EntityPlayer) {
|
||||
// if (GregTech_API.DEBUG_MODE && (((EntityPlayer)aPlayer).username.equals("Player") || ((EntityPlayer)aPlayer).username.equals("GregoriusT"))) GT_Log.out.println("Received initial MetaTileEntity Data: " + aPacket.length + " Bytes @ (" + tX + ";" + tY + ";" + tZ + ") during Tick: " + GregTech_API.sClientTickCounter);
|
||||
// TileEntity tTileEntity = ((EntityPlayer)aPlayer).worldObj.getBlockTileEntity(tX, tY, tZ);
|
||||
// if (tTileEntity != null) {
|
||||
// if (tTileEntity instanceof BaseMetaTileEntity) ((BaseMetaTileEntity)tTileEntity).receiveMetaTileEntityData(tIn.readShort(), tIn.readInt(), tIn.readInt(), tIn.readInt(), tIn.readInt(), tIn.readInt(), tIn.readInt(), tIn.readByte(), tIn.readByte(), tIn.readByte(), tIn.readByte());
|
||||
// else if (tTileEntity instanceof BaseMetaPipeEntity) ((BaseMetaPipeEntity)tTileEntity).receiveMetaTileEntityData(tIn.readShort(), tIn.readInt(), tIn.readInt(), tIn.readInt(), tIn.readInt(), tIn.readInt(), tIn.readInt(), tIn.readByte(), tIn.readByte(), tIn.readByte(), tIn.readByte());
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -6,6 +6,7 @@ import cpw.mods.fml.relauncher.Side;
|
|||
import gregtechmod.common.network.packet.GT_Packet;
|
||||
import gregtechmod.common.network.packet.GT_SoundPacket;
|
||||
import gregtechmod.common.network.packet.GT_TileEntityPacket;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
|
||||
public final class GT_PacketHandler implements Runnable {
|
||||
private static byte discriminator = 0;
|
||||
|
@ -26,6 +27,16 @@ public final class GT_PacketHandler implements Runnable {
|
|||
GT_PacketHandler.registerClientMessage(SOUND_PACKET_CHANNEL, GT_SoundPacket.class);
|
||||
}
|
||||
|
||||
public static <T extends GT_Packet> void sendPacket(T packet, EntityPlayerMP reciever) {
|
||||
if (packet instanceof GT_TileEntityPacket) {
|
||||
TILEENTITY_PACKET_CHANNEL.sendTo(packet, reciever);
|
||||
} else if (packet instanceof GT_SoundPacket) {
|
||||
SOUND_PACKET_CHANNEL.sendTo(packet, reciever);
|
||||
} else {
|
||||
GENERIC_CHANNEL.sendTo(packet, reciever);
|
||||
}
|
||||
}
|
||||
|
||||
protected static <T extends GT_Packet> void registerServerMessage(SimpleNetworkWrapper channel, Class<T> type) {
|
||||
GT_PacketHandler.register(channel, type, Side.SERVER);
|
||||
}
|
||||
|
|
|
@ -3,6 +3,12 @@ package gregtechmod.common.network.packet;
|
|||
import cpw.mods.fml.common.network.simpleimpl.IMessage;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
/**
|
||||
* Abstract packet, contains raw data buffer.
|
||||
* Fucking new packet system, in same time it is useful
|
||||
* @author iDnK
|
||||
*
|
||||
*/
|
||||
public abstract class GT_Packet implements IMessage {
|
||||
public ByteBuf data;
|
||||
|
||||
|
|
|
@ -1,18 +1,60 @@
|
|||
package gregtechmod.common.network.packet;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
|
||||
/**
|
||||
* Data packet for MTE updates
|
||||
* @author iDnK
|
||||
*
|
||||
*/
|
||||
public class GT_TileEntityPacket extends GT_Packet {
|
||||
public int aX;
|
||||
public int aY;
|
||||
public int aZ;
|
||||
public short aID;
|
||||
public int[] aCovers;
|
||||
public byte aTextureData;
|
||||
public byte aUpdateData;
|
||||
public byte aRedstoneData;
|
||||
public byte aColorData;
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buf) {
|
||||
aX = buf.readInt();
|
||||
aY = buf.readInt();
|
||||
aZ = buf.readInt();
|
||||
aID = buf.readShort();
|
||||
for (int i = 0; i < 6; i++)
|
||||
aCovers[i] = buf.readInt();
|
||||
aTextureData = buf.readByte();
|
||||
aUpdateData = buf.readByte();
|
||||
aRedstoneData = buf.readByte();
|
||||
aColorData = buf.readByte();
|
||||
super.fromBytes(buf);
|
||||
// FIXME Packets
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buf) {
|
||||
buf.writeInt(aX);
|
||||
buf.writeInt(aY);
|
||||
buf.writeInt(aZ);
|
||||
buf.writeShort(aID);
|
||||
for (int i = 0; i < 6; i++)
|
||||
buf.writeInt(aCovers[i]);
|
||||
buf.writeByte(aTextureData);
|
||||
buf.writeByte(aUpdateData);
|
||||
buf.writeByte(aRedstoneData);
|
||||
buf.writeByte(aColorData);
|
||||
super.toBytes(buf);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("GT_TileEntityPacket[x=%d, y=%d, z=%d, ID=%d, TextureData=%d, UpdateData=%d, RedstoneData=%d, ColorData=%d, CoverData=%s]",
|
||||
aX, aY, aZ, (int)aID, (int)aTextureData, (int)aUpdateData, (int)aRedstoneData, (int)aColorData,
|
||||
Arrays.stream(aCovers).mapToObj(i -> new Integer(i)).collect(Collectors.toList()).toString());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue