Advertisement
Camellias_

Untitled

Jul 29th, 2019
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.41 KB | None | 0 0
  1. package com.camellias.voidaicarcania.common.tileentities.altar;
  2.  
  3. import javax.annotation.Nullable;
  4.  
  5. import com.camellias.voidaicarcania.api.capabilities.EssenceCap.EssenceProvider;
  6. import com.camellias.voidaicarcania.core.init.ModBlocks;
  7.  
  8. import net.minecraft.block.state.BlockWorldState;
  9. import net.minecraft.block.state.IBlockState;
  10. import net.minecraft.block.state.pattern.BlockPattern;
  11. import net.minecraft.block.state.pattern.BlockStateMatcher;
  12. import net.minecraft.block.state.pattern.FactoryBlockPattern;
  13. import net.minecraft.entity.player.EntityPlayer;
  14. import net.minecraft.item.ItemStack;
  15. import net.minecraft.nbt.NBTTagCompound;
  16. import net.minecraft.network.NetworkManager;
  17. import net.minecraft.network.play.server.SPacketUpdateTileEntity;
  18. import net.minecraft.tileentity.TileEntity;
  19. import net.minecraft.util.EnumFacing;
  20. import net.minecraft.util.ITickable;
  21. import net.minecraft.util.math.BlockPos;
  22. import net.minecraft.util.math.BlockPos.MutableBlockPos;
  23. import net.minecraftforge.common.capabilities.Capability;
  24. import net.minecraftforge.items.CapabilityItemHandler;
  25. import net.minecraftforge.items.ItemStackHandler;
  26.  
  27. public class TileVoidaicAltar extends TileEntity implements ITickable
  28. {
  29.     public static final int SLOTS = 1;
  30.     public int voidEssence = 0;
  31.     public int maxEssence = 5000;
  32.     private boolean isCasting = false;
  33.    
  34.     private BlockPattern pattern = FactoryBlockPattern.start().aisle(
  35.             "0003000", "0302030", "0022200", "3221223", "0022200", "0302030", "0003000")
  36.             .where('1', BlockWorldState.hasState(BlockStateMatcher.forBlock(ModBlocks.ALTAR)))
  37.             .where('2', BlockWorldState.hasState(BlockStateMatcher.forBlock(ModBlocks.CATALYST)))
  38.             .where('3', BlockWorldState.hasState(BlockStateMatcher.forBlock(ModBlocks.PEDESTAL)))
  39.             .where('0', BlockWorldState.hasState(BlockStateMatcher.ANY)).build();
  40.    
  41.     public ItemStackHandler handler = new ItemStackHandler(SLOTS)
  42.     {
  43.         @Override
  44.         protected void onContentsChanged(int slot)
  45.         {
  46.             TileVoidaicAltar.this.markDirty();
  47.         }
  48.     };
  49.    
  50.     @Override
  51.     @Nullable
  52.     public SPacketUpdateTileEntity getUpdatePacket()
  53.     {
  54.         BlockPos pos1 = getPos();
  55.         return new SPacketUpdateTileEntity(pos1, 0, getUpdateTag());
  56.     }
  57.    
  58.     @Override
  59.     public NBTTagCompound getUpdateTag()
  60.     {
  61.         NBTTagCompound nbt = super.getUpdateTag();
  62.         writeToNBT(nbt);
  63.         return nbt;
  64.     }
  65.    
  66.     @Override
  67.     public void onDataPacket(NetworkManager manager, SPacketUpdateTileEntity packet)
  68.     {
  69.         NBTTagCompound tag = packet.getNbtCompound();
  70.         readFromNBT(tag);
  71.     }
  72.    
  73.     @Override
  74.     public void readFromNBT(NBTTagCompound nbt)
  75.     {
  76.         super.readFromNBT(nbt);
  77.        
  78.         if(nbt.hasKey("items"))
  79.         {
  80.             handler.deserializeNBT((NBTTagCompound) nbt.getTag("items"));
  81.         }
  82.        
  83.         if(nbt.hasKey("isCasting"))
  84.         {
  85.             nbt.getBoolean("isCasting");
  86.         }
  87.        
  88.         if(nbt.hasKey("voidEssence"))
  89.         {
  90.             nbt.getInteger("voidEssence");
  91.         }
  92.     }
  93.    
  94.     @Override
  95.     public NBTTagCompound writeToNBT(NBTTagCompound nbt)
  96.     {
  97.         super.writeToNBT(nbt);
  98.        
  99.         nbt.setTag("items", handler.serializeNBT());
  100.         nbt.setBoolean("isCasting", isCasting);
  101.         nbt.setInteger("voidEssence", voidEssence);
  102.        
  103.         return nbt;
  104.     }
  105.    
  106.     @Override
  107.     public boolean hasCapability(Capability<?> capability, EnumFacing facing)
  108.     {
  109.         if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
  110.         {
  111.             return true;
  112.         }
  113.        
  114.         return super.hasCapability(capability, facing);
  115.     }
  116.    
  117.     @Override
  118.     public <T> T getCapability(Capability<T> capability, EnumFacing facing)
  119.     {
  120.         if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY)
  121.         {
  122.             return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(handler);
  123.         }
  124.        
  125.         return super.getCapability(capability, facing);
  126.     }
  127.    
  128.     @Override
  129.     public void update()
  130.     {
  131.         if(!world.isRemote) System.out.println(voidEssence);
  132.        
  133.         if(isCasting && !isValidStructure())
  134.         {
  135.             stopCasting();
  136.         }
  137.     }
  138.    
  139.     public boolean isValidStructure()
  140.     {
  141.         return pattern.match(world, pos) != null;
  142.     }
  143.    
  144.     public void startCasting()
  145.     {
  146.         if(!world.isRemote && isValidStructure())
  147.         {
  148.             isCasting = true;
  149.            
  150.             if(getEssenceFromPedestals() > 0 && maxEssence >= (voidEssence + getEssenceFromPedestals()))
  151.             {
  152.                 voidEssence += getEssenceFromPedestals();
  153.                 Iterable<MutableBlockPos> blocksWithin = BlockPos.getAllInBoxMutable(pos.getX() - 3, pos.getY(), pos.getZ() - 3, pos.getX() + 3, pos.getY(), pos.getZ() + 3);
  154.                
  155.                 for(MutableBlockPos allBlockPos : blocksWithin)
  156.                 {
  157.                     if(world.getTileEntity(allBlockPos) instanceof TileWhitewoodPedestal)
  158.                     {
  159.                         TileWhitewoodPedestal pedestal = (TileWhitewoodPedestal) world.getTileEntity(allBlockPos);
  160.                         IBlockState state = world.getBlockState(allBlockPos);
  161.                         ItemStack stack = pedestal.handler.getStackInSlot(0);
  162.                        
  163.                         if(stack.hasCapability(EssenceProvider.essenceCapability, null))
  164.                         {
  165.                             stack.shrink(1);
  166.                             world.notifyBlockUpdate(allBlockPos, state, state, 2);
  167.                         }
  168.                     }
  169.                 }
  170.                
  171.                 stopCasting();
  172.             }
  173.         }
  174.     }
  175.    
  176.     public void stopCasting()
  177.     {
  178.         if(!world.isRemote)
  179.         {
  180.             isCasting = false;
  181.            
  182.             world.setBlockToAir(pos.north(2));
  183.             world.setBlockToAir(pos.north().west());
  184.             world.setBlockToAir(pos.north());
  185.             world.setBlockToAir(pos.north().east());
  186.             world.setBlockToAir(pos.west(2));
  187.             world.setBlockToAir(pos.west());
  188.             world.setBlockToAir(pos.east());
  189.             world.setBlockToAir(pos.east(2));
  190.             world.setBlockToAir(pos.south().west());
  191.             world.setBlockToAir(pos.south());
  192.             world.setBlockToAir(pos.south().east());
  193.             world.setBlockToAir(pos.south(2));
  194.         }
  195.     }
  196.    
  197.     public boolean isCasting()
  198.     {
  199.         return isCasting;
  200.     }
  201.    
  202.     public int getEssenceFromPedestals()
  203.     {
  204.         Iterable<MutableBlockPos> blocksWithin = BlockPos.getAllInBoxMutable(pos.getX() - 3, pos.getY(), pos.getZ() - 3, pos.getX() + 3, pos.getY(), pos.getZ() + 3);
  205.         int essence = 0;
  206.        
  207.         for(MutableBlockPos allBlockPos : blocksWithin)
  208.         {
  209.             if(world.getTileEntity(allBlockPos) instanceof TileWhitewoodPedestal)
  210.             {
  211.                 TileWhitewoodPedestal pedestal = (TileWhitewoodPedestal) world.getTileEntity(allBlockPos);
  212.                 ItemStack stack = pedestal.handler.getStackInSlot(0);
  213.                
  214.                 if(stack.hasCapability(EssenceProvider.essenceCapability, null))
  215.                 {
  216.                     essence += stack.getCapability(EssenceProvider.essenceCapability, null).getEssence();
  217.                 }
  218.             }
  219.         }
  220.        
  221.         return essence;
  222.     }
  223.    
  224.     public boolean canInteractWith(EntityPlayer player)
  225.     {
  226.         return !isInvalid() && player.getDistanceSq(pos.add(0.5D, 0.5D, 0.5D)) <= 64D;
  227.     }
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement