/*
* Copyright (c) CovertJaguar, 2014 http://railcraft.info
*
* This code is the property of CovertJaguar
* and may only be used with explicit written
* permission unless otherwise specified on the
* license page at http://railcraft.info/wiki/info:license.
*/
package mods.railcraft.common.util.network;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import org.apache.logging.log4j.Level;
import mods.railcraft.common.core.Railcraft;
import mods.railcraft.common.util.misc.Game;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public class PacketCurrentItemNBT extends RailcraftPacket {
private final EntityPlayer player;
private final ItemStack currentItem;
public PacketCurrentItemNBT(EntityPlayer player, ItemStack stack) {
this.player = player;
this.currentItem = stack;
}
@Override
public void writeData(DataOutputStream data) throws IOException {
DataTools.writeItemStack(currentItem, data);
}
@Override
public void readData(DataInputStream data) throws IOException {
try {
ItemStack stack = DataTools.readItemStack(data);
if (stack == null || currentItem == null)
return;
if (stack.getItem() != currentItem.getItem())
return;
if (!(currentItem.getItem() instanceof IEditableItem))
return;
IEditableItem eItem = (IEditableItem) stack.getItem();
if (!eItem.canPlayerEdit(player, currentItem)) {
Game.log(Level.WARN, "{0} attempted to edit an item he is not allowed to edit {0}.", Railcraft.proxy.getPlayerUsername(player), currentItem.getItem().getUnlocalizedName());
return;
}
if (!eItem.validateNBT(stack.getTagCompound())) {
Game.log(Level.WARN, "Item NBT not valid!");
return;
}
currentItem.setTagCompound(stack.getTagCompound());
} catch (Exception exception) {
Game.logThrowable("Error reading Item NBT packet", exception);
}
}
public void sendPacket() {
PacketDispatcher.sendToServer(this);
}
@Override
public int getID() {
return PacketType.ITEM_NBT.ordinal();
}
}