Advertisement
AwesomeSpider8

Tile Entity Purifier

Feb 12th, 2017
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.40 KB | None | 0 0
  1. public class TileEntityPurifier extends TileEntity implements ITickable {
  2.  
  3.     private ItemStackHandler inventory;
  4.     public EnergyStorage energyStorage;
  5.  
  6.     private int progress;
  7.     private int currentProgress;
  8.  
  9.     public TileEntityPurifier() {
  10.         inventory = new ItemStackHandler(2);
  11.         energyStorage = new EnergyStorage(100000, 80, 0);
  12.     }
  13.  
  14.     public IItemHandler getInventory() {
  15.         return inventory;
  16.     }
  17.  
  18.     public boolean canProcess() {
  19.         if(inventory.getStackInSlot(0).isEmpty()) {
  20.             return false;
  21.         } else {
  22.             Item itemInSlot = inventory.getStackInSlot(0).getItem();
  23.  
  24.             return itemInSlot == Item.getItemFromBlock(Blocks.SAND) || itemInSlot == Item.getItemFromBlock(Blocks.SOUL_SAND);
  25.         }
  26.     }
  27.  
  28.     public List<BlockPos> scanForGenerators(EnumFacing.Plane plane) {
  29.         List<BlockPos> posList = Lists.newArrayList();
  30.         BlockPos pos = getPos();
  31.  
  32.         if(plane == EnumFacing.Plane.HORIZONTAL) {
  33.             BlockPos[] blockPoses = {
  34.                     pos.north(),
  35.                     pos.east(),
  36.                     pos.south(),
  37.                     pos.west()
  38.             };
  39.  
  40.             for(BlockPos blockPos : blockPoses) {
  41.                 if(blockPos != null) {
  42.                     TileEntity te = world.getTileEntity(blockPos);
  43.  
  44.                     if(te != null)
  45.                         if(te.hasCapability(CapabilityEnergy.ENERGY, null)) {
  46.                             EnergyStorage es = (EnergyStorage)te.getCapability(CapabilityEnergy.ENERGY, null);
  47.  
  48.                             if(es.canExtract()) {
  49.                                 posList.add(blockPos);
  50.                             }
  51.                         }
  52.                 }
  53.             }
  54.         } else {
  55.             BlockPos[] blockPoses = {
  56.                     pos.up(),
  57.                     pos.down()
  58.             };
  59.  
  60.             for(BlockPos blockPos : blockPoses) {
  61.                 if(blockPos != null) {
  62.                     TileEntity te = world.getTileEntity(blockPos);
  63.  
  64.                     if(te.hasCapability(CapabilityEnergy.ENERGY, null)) {
  65.                         EnergyStorage es = (EnergyStorage)te.getCapability(CapabilityEnergy.ENERGY, null);
  66.  
  67.                         if(es.canExtract()) {
  68.                             posList.add(blockPos);
  69.                         }
  70.                     }
  71.                 }
  72.             }
  73.         }
  74.  
  75.         return posList;
  76.     }
  77.  
  78.     //ITickable
  79.  
  80.     @Override
  81.     public void update() {
  82.         if(!world.isRemote) {
  83.             //Gather power
  84.             List<BlockPos> generators = scanForGenerators(EnumFacing.Plane.HORIZONTAL);
  85.  
  86.             for(BlockPos gen : generators) {
  87.                 TileEntity te = world.getTileEntity(gen);
  88.                 EnergyStorage es = (EnergyStorage)te.getCapability(CapabilityEnergy.ENERGY, null);
  89.  
  90.                 int storedEnergy = energyStorage.getEnergyStored();
  91.                 int maxEnergy = energyStorage.getMaxEnergyStored();
  92.  
  93.                 if(storedEnergy + 80 <= maxEnergy) {
  94.                     int received = energyStorage.receiveEnergy(es.extractEnergy(80, false), false);
  95.  
  96.                     if(received > 0) {
  97.                         markDirty();
  98.                     }
  99.                 } else if(storedEnergy + 80 > maxEnergy) {
  100.                     int receivable = (storedEnergy + 80) - maxEnergy;
  101.                     int received = energyStorage.receiveEnergy(es.extractEnergy(receivable, false), false);
  102.  
  103.                     if(received > 0) {
  104.                         markDirty();
  105.                     }
  106.                 }
  107.             }
  108.         }
  109.     }
  110.  
  111.     public int getField(int id) {
  112.         return id == 0 ? progress : id == 1 ? currentProgress : id == 2 ? energyStorage.getEnergyStored() : 0;
  113.     }
  114.  
  115.     public void setField(int id, int value) {
  116.         progress = id == 0 ? value : progress;
  117.         currentProgress = id == 1 ? value : currentProgress;
  118.         if(id == 2) {
  119.             energyStorage.extractEnergy(energyStorage.getEnergyStored(), false);
  120.             energyStorage.receiveEnergy(value, false);
  121.             markDirty();
  122.         }
  123.  
  124.         markDirty();
  125.     }
  126.  
  127.     //NBT/Capability
  128.  
  129.     @Override
  130.     public NBTTagCompound writeToNBT(NBTTagCompound compound) {
  131.         compound.setTag("inventory", inventory.serializeNBT());
  132.         compound.setInteger("storedEnergy", energyStorage.getEnergyStored());
  133.         return super.writeToNBT(compound);
  134.     }
  135.  
  136.     @Override
  137.     public void readFromNBT(NBTTagCompound compound) {
  138.         inventory.deserializeNBT(compound.getCompoundTag("inventory"));
  139.  
  140.         energyStorage = new EnergyStorage(100000);
  141.         energyStorage.receiveEnergy(compound.getInteger("storedEnergy"), false);
  142.  
  143.         super.readFromNBT(compound);
  144.     }
  145.  
  146.     @Override
  147.     public boolean hasCapability(Capability<?> capability, @Nullable EnumFacing facing) {
  148.         return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || capability == CapabilityEnergy.ENERGY ||
  149.                 super.hasCapability(capability, facing);
  150.     }
  151.  
  152.     @Nullable
  153.     @Override
  154.     public <T> T getCapability(Capability<T> capability, @Nullable EnumFacing facing) {
  155.         return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY ? (T)inventory : capability == CapabilityEnergy.ENERGY ? (T)energyStorage :
  156.                 super.getCapability(capability, facing);
  157.     }
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement