package joshie.harvest.core.tile;
import joshie.harvest.core.base.tile.TileFaceable;
import joshie.harvest.core.HFTrackers;
import joshie.harvest.core.helpers.StackHelper;
import joshie.harvest.player.PlayerTrackerServer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.wrapper.EmptyHandler;
import javax.annotation.Nonnull;
import java.util.UUID;
import static joshie.harvest.api.HFApi.shipping;
public class TileShipping extends TileFaceable {
private UUID owner;
public void setOwner(UUID uuid) {
this.owner = uuid;
this.markDirty();
}
public UUID getOwner() {
return owner;
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
if (nbt.hasKey("Owner")) owner = UUID.fromString(nbt.getString("Owner"));
}
@Override
@Nonnull
public NBTTagCompound writeToNBT(@Nonnull NBTTagCompound nbt) {
if (owner != null) nbt.setString("Owner", owner.toString());
return super.writeToNBT(nbt);
}
/** Capabilities **/
private final IItemHandler handler = new EmptyHandler() {
@Override
public int getSlots() {
return 1;
}
@Override
@SuppressWarnings("ConstantConditions")
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
if (stack == null || stack.getItem() == null || owner == null) return stack;
long sell = shipping.getSellValue(stack);
if (sell > 0) {
if (!simulate && !getWorld().isRemote) {
PlayerTrackerServer tracker = HFTrackers.getPlayerTracker(getWorld(), owner);
if (tracker != null) {
tracker.getTracking().addForShipping(StackHelper.toStack(stack, 1));
} else return stack;
}
ItemStack copy = stack.copy();
copy.splitStack(1);
return copy;
}
return stack;
}
};
@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nonnull EnumFacing facing) {
return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
@SuppressWarnings("unchecked")
@Override
@Nonnull
public <T> T getCapability(@Nonnull Capability<T> capability, @Nonnull EnumFacing facing)
{
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
return (T) handler;
return super.getCapability(capability, facing);
}
}