Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package sham1.novaarcada.transport.tileentity;
- import net.minecraft.item.ItemStack;
- import net.minecraft.nbt.NBTTagCompound;
- import net.minecraft.network.NetworkManager;
- import net.minecraft.network.play.server.SPacketUpdateTileEntity;
- import net.minecraft.tileentity.TileEntity;
- import net.minecraft.util.EnumFacing;
- import net.minecraft.util.math.BlockPos;
- import net.minecraftforge.common.capabilities.Capability;
- import net.minecraftforge.items.CapabilityItemHandler;
- import net.minecraftforge.items.IItemHandler;
- import javax.annotation.Nullable;
- import java.util.HashMap;
- import java.util.Map;
- public class WorldHoleTileEntity extends TileEntity {
- public BlockPos pair = null;
- private Map<EnumFacing, IItemHandler> sidedHandlers = new HashMap<>();
- public WorldHoleTileEntity() {
- for (EnumFacing facing : EnumFacing.VALUES) {
- sidedHandlers.put(facing, new WorldHoleItemHandler(facing));
- }
- }
- @Override
- public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) {
- readFromNBT(pkt.getNbtCompound());
- }
- @Nullable
- @Override
- public SPacketUpdateTileEntity getUpdatePacket() {
- NBTTagCompound tag = new NBTTagCompound();
- writeToNBT(tag);
- return new SPacketUpdateTileEntity(pos, 1, tag);
- }
- @Override
- public void readFromNBT(NBTTagCompound compound) {
- super.readFromNBT(compound);
- if (compound.hasKey("pairPos")) pair = BlockPos.fromLong(compound.getLong("pairPos"));
- }
- @Override
- public NBTTagCompound writeToNBT(NBTTagCompound compound) {
- NBTTagCompound tag = super.writeToNBT(compound);
- if (pair != null) {
- tag.setLong("pairPos", pair.toLong());
- }
- return tag;
- }
- @Override
- public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
- return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
- }
- @Override
- public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
- return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY ? (T)sidedHandlers.get(facing) : super.getCapability(capability, facing);
- }
- private class WorldHoleItemHandler implements IItemHandler {
- private final EnumFacing facing;
- WorldHoleItemHandler(EnumFacing facing) {
- this.facing = facing;
- }
- @Override
- public int getSlots() {
- if (pair != null) {
- EnumFacing oppositeFacing = facing.getOpposite();
- TileEntity tileEntity = worldObj.getTileEntity(pair.offset(oppositeFacing));
- if (tileEntity != null && tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing)) {
- return tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing).getSlots();
- }
- }
- return 0;
- }
- @Override
- public ItemStack getStackInSlot(int slot) {
- if (pair != null) {
- EnumFacing oppositeFacing = facing.getOpposite();
- TileEntity tileEntity = worldObj.getTileEntity(pair.offset(oppositeFacing));
- if (tileEntity != null && tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing)) {
- return tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing).getStackInSlot(slot);
- }
- }
- return null;
- }
- @Override
- public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
- if (pair != null) {
- EnumFacing oppositeFacing = facing.getOpposite();
- TileEntity tileEntity = worldObj.getTileEntity(pair.offset(oppositeFacing));
- if (tileEntity != null && tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing)) {
- IItemHandler handler = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing);
- return handler.insertItem(slot, stack, simulate);
- }
- }
- return stack;
- }
- @Override
- public ItemStack extractItem(int slot, int amount, boolean simulate) {
- if (pair != null) {
- EnumFacing oppositeFacing = facing.getOpposite();
- TileEntity tileEntity = worldObj.getTileEntity(pair.offset(oppositeFacing));
- if (tileEntity != null && tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing)) {
- return tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, oppositeFacing).extractItem(slot, amount, simulate);
- }
- }
- return null;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement