package zmaster587.advancedRocketry.network; import java.io.IOException; import java.util.logging.Logger; import zmaster587.advancedRocketry.dimension.DimensionManager; import zmaster587.advancedRocketry.dimension.DimensionProperties; import zmaster587.libVulpes.network.BasePacket; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; public class PacketDimInfo extends BasePacket { DimensionProperties dimProperties; NBTTagCompound dimNBT; int dimNumber; boolean deleteDim; public PacketDimInfo() {} public PacketDimInfo(int dimNumber,DimensionProperties dimProperties) { this.dimProperties = dimProperties; this.dimNumber = dimNumber; } @Override public void write(ByteBuf out) { NBTTagCompound nbt = new NBTTagCompound(); out.writeInt(dimNumber); boolean flag = dimProperties == null; if(!flag) { //Try to send the nbt data of the dimension to the client, if it fails(probably due to non existent Biome ids) then remove the dimension try { dimProperties.writeToNBT(nbt); PacketBuffer packetBuffer = new PacketBuffer(out); out.writeBoolean(false); try { packetBuffer.writeNBTTagCompoundToBuffer(nbt); } catch (Exception e){} } catch(NullPointerException e) { out.writeBoolean(true); e.printStackTrace(); Logger.getLogger("advancedRocketry").warning("Dimension " + dimNumber + " has thrown an exception trying to write NBT, deleting!"); DimensionManager.getInstance().deleteDimension(dimNumber); } } else out.writeBoolean(flag); } @Override public void readClient(ByteBuf in) { PacketBuffer packetBuffer = new PacketBuffer(in); NBTTagCompound nbt; dimNumber = in.readInt(); deleteDim = in.readBoolean(); if(!deleteDim) { //TODO: error handling try { dimNBT = nbt = packetBuffer.readNBTTagCompoundFromBuffer(); } catch (IOException e) { e.printStackTrace(); return; } dimProperties = new DimensionProperties(dimNumber); dimProperties.readFromNBT(nbt); } } @Override public void read(ByteBuf in) { //Should never be read on the server! } @Override public void executeClient(EntityPlayer thePlayer) { if(deleteDim) { if(DimensionManager.getInstance().isDimensionCreated(dimNumber)) { DimensionManager.getInstance().deleteDimension(dimNumber); } } else if(dimProperties != null) { if(dimNumber == 0) { DimensionManager.overworldProperties = dimProperties; } else if( DimensionManager.getInstance().isDimensionCreated(dimNumber) ) { dimProperties.oreProperties = DimensionManager.getInstance().getDimensionProperties(dimNumber).oreProperties; DimensionManager.getInstance().setDimProperties(dimNumber, dimProperties); } else { dimProperties = new DimensionProperties(dimNumber); dimProperties.readFromNBT(dimNBT); DimensionManager.getInstance().registerDimNoUpdate(dimProperties, true); } } } @Override public void executeServer(EntityPlayerMP player) {} }