Advertisement
Guest User

Untitled

a guest
Jun 9th, 2016
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.54 KB | None | 0 0
  1. package sham1.novaarcada.transport.tileentity;
  2.  
  3. import net.minecraft.item.ItemStack;
  4. import net.minecraft.nbt.NBTTagCompound;
  5. import net.minecraft.network.NetworkManager;
  6. import net.minecraft.network.play.server.SPacketUpdateTileEntity;
  7. import net.minecraft.tileentity.TileEntity;
  8. import net.minecraft.util.EnumFacing;
  9. import net.minecraft.util.math.BlockPos;
  10. import net.minecraftforge.common.capabilities.Capability;
  11. import net.minecraftforge.items.CapabilityItemHandler;
  12. import net.minecraftforge.items.IItemHandler;
  13.  
  14. import javax.annotation.Nullable;
  15. import java.util.HashMap;
  16. import java.util.Map;
  17.  
  18. public class WorldHoleTileEntity extends TileEntity {
  19.  
  20.   public BlockPos pair = null;
  21.  
  22.   private Map<EnumFacing, IItemHandler> sidedHandlers = new HashMap<>();
  23.  
  24.   public WorldHoleTileEntity() {
  25.     for (EnumFacing facing : EnumFacing.VALUES) {
  26.       sidedHandlers.put(facing, new WorldHoleItemHandler(facing));
  27.     }
  28.   }
  29.  
  30.   @Override
  31.   public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) {
  32.     readFromNBT(pkt.getNbtCompound());
  33.   }
  34.  
  35.   @Nullable
  36.   @Override
  37.   public SPacketUpdateTileEntity getUpdatePacket() {
  38.     NBTTagCompound tag = new NBTTagCompound();
  39.     writeToNBT(tag);
  40.     return new SPacketUpdateTileEntity(pos, 1, tag);
  41.   }
  42.  
  43.   @Override
  44.   public void readFromNBT(NBTTagCompound compound) {
  45.     super.readFromNBT(compound);
  46.     if (compound.hasKey("pairPos")) pair = BlockPos.fromLong(compound.getLong("pairPos"));
  47.   }
  48.  
  49.   @Override
  50.   public NBTTagCompound writeToNBT(NBTTagCompound compound) {
  51.     NBTTagCompound tag = super.writeToNBT(compound);
  52.     if (pair != null) {
  53.       tag.setLong("pairPos", pair.toLong());
  54.     }
  55.     return tag;
  56.   }
  57.  
  58.   @Override
  59.   public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
  60.     return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
  61.   }
  62.  
  63.   @Override
  64.   public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
  65.     return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY ? (T)sidedHandlers.get(facing) : super.getCapability(capability, facing);
  66.   }
  67.  
  68.   private class WorldHoleItemHandler implements IItemHandler {
  69.  
  70.     private final EnumFacing facing;
  71.  
  72.     WorldHoleItemHandler(EnumFacing facing) {
  73.       this.facing = facing;
  74.     }
  75.  
  76.     @Override
  77.     public int getSlots() {
  78.       if (pair != null) {
  79.         EnumFacing oppositeFacing = facing.getOpposite();
  80.         TileEntity tileEntity = worldObj.getTileEntity(pair.offset(oppositeFacing));
  81.         if (tileEntity != null && tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing)) {
  82.           return tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing).getSlots();
  83.         }
  84.       }
  85.       return 0;
  86.     }
  87.  
  88.     @Override
  89.     public ItemStack getStackInSlot(int slot) {
  90.       if (pair != null) {
  91.         EnumFacing oppositeFacing = facing.getOpposite();
  92.         TileEntity tileEntity = worldObj.getTileEntity(pair.offset(oppositeFacing));
  93.         if (tileEntity != null && tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing)) {
  94.           return tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing).getStackInSlot(slot);
  95.         }
  96.       }
  97.       return null;
  98.     }
  99.  
  100.     @Override
  101.     public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
  102.       if (pair != null) {
  103.         EnumFacing oppositeFacing = facing.getOpposite();
  104.         TileEntity tileEntity = worldObj.getTileEntity(pair.offset(oppositeFacing));
  105.         if (tileEntity != null && tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing)) {
  106.           IItemHandler handler = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing);
  107.  
  108.           return handler.insertItem(slot, stack, simulate);
  109.         }
  110.       }
  111.       return stack;
  112.     }
  113.  
  114.     @Override
  115.     public ItemStack extractItem(int slot, int amount, boolean simulate) {
  116.       if (pair != null) {
  117.         EnumFacing oppositeFacing = facing.getOpposite();
  118.         TileEntity tileEntity = worldObj.getTileEntity(pair.offset(oppositeFacing));
  119.         if (tileEntity != null && tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing)) {
  120.           return tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing).extractItem(slot, amount, simulate);
  121.         }
  122.       }
  123.       return null;
  124.     }
  125.   }
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement