Advertisement
Guest User

Untitled

a guest
Jul 20th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.64 KB | None | 0 0
  1. package com.natura.minestuckarsenal.tileentity;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.UUID;
  6.  
  7. import javax.annotation.Nonnull;
  8.  
  9. import com.mraof.minestuck.entity.item.EntityGrist;
  10. import com.mraof.minestuck.util.GristHelper;
  11. import com.mraof.minestuck.util.GristSet;
  12. import com.mraof.minestuck.util.GristType;
  13. import com.mraof.minestuck.util.IdentifierHandler;
  14. import com.mraof.minestuck.util.IdentifierHandler.PlayerIdentifier;
  15.  
  16. import net.minecraft.entity.Entity;
  17. import net.minecraft.nbt.NBTTagCompound;
  18. import net.minecraft.tileentity.TileEntity;
  19. import net.minecraft.util.ClassInheritanceMultiMap;
  20. import net.minecraft.util.ITickable;
  21. import net.minecraft.util.math.AxisAlignedBB;
  22. import net.minecraft.util.math.MathHelper;
  23. import net.minecraft.world.World;
  24. import net.minecraft.world.chunk.Chunk;
  25. import net.minecraftforge.fml.relauncher.Side;
  26. import net.minecraftforge.fml.relauncher.SideOnly;
  27. import net.minecraftforge.fml.server.FMLServerHandler;
  28.  
  29. /* Thanks to Ender IO team for the entity selection code. */
  30.  
  31. public class TileEntityGristGatherer extends TileEntity implements ITickable {
  32.  
  33.     int counter = 0;
  34.     private int range = 8;
  35.     private PlayerIdentifier player;
  36.     private int ownerId;
  37.    
  38.     public TileEntityGristGatherer() {
  39.        
  40.     }
  41.  
  42.     public @Nonnull AxisAlignedBB getBounds() {
  43.         return new AxisAlignedBB(getPos()).expand(getRange() + (range == 0 ? 1 / 32f : 0), 0, getRange() + (range == 0 ? 1 / 32f : 0)).expand(-(getRange() + (range == 0 ? 1 / 32f : 0)), 0, -(getRange() + (range == 0 ? 1 / 32f : 0)));
  44.      }
  45.  
  46.      public float getRange() {
  47.         return range;
  48.      }
  49.      
  50.      public PlayerIdentifier setPlayer(PlayerIdentifier player) {
  51.         this.player = player;
  52.         return this.player;
  53.      }
  54.      
  55.      public PlayerIdentifier getPlayer() {
  56.          return this.player;
  57.      }
  58.      
  59.      @SideOnly(Side.SERVER)
  60.      @Override
  61.      public NBTTagCompound writeToNBT(NBTTagCompound compound) {
  62.         super.writeToNBT(compound);
  63.         compound.setString("player", player.getPlayer().getOfflineUUID(player.getUsername()).toString());
  64.         return compound;
  65.      }
  66.        
  67.      @SideOnly(Side.SERVER)
  68.      @Override
  69.      public void readFromNBT(NBTTagCompound compound) {
  70.         super.readFromNBT(compound);  
  71.         this.player = IdentifierHandler.encode(FMLServerHandler.instance().getServer().getPlayerList().getPlayerByUUID(UUID.fromString((compound.getString("player")))));
  72.      }
  73.    
  74.     @Override
  75.     public void update() {
  76.        
  77.         if(counter == 20) {
  78.            
  79.             List<EntityGrist> list = selectEntitiesWithinAABB(this.getWorld(), getBounds());
  80.            
  81.             if(list.size() != 0) {
  82.                     for(int i = 0; i == list.size() - 1; i++)
  83.                     {
  84.                         if(player != null && list.get(i) != null) {
  85.                             NBTTagCompound nbtData = new NBTTagCompound();
  86.                             list.get(i).writeToNBT(nbtData);
  87.                             int value = nbtData.getShort("Value");
  88.                             GristType type = GristType.getTypeFromString(nbtData.getString("Type"));
  89.                             if(type != null && value != 0) {
  90.                                 GristHelper.increase(player, new GristSet(type, value));
  91.                             }
  92.                             list.get(i).setDead();
  93.                         }
  94.                     }
  95.             }
  96.            
  97.             counter = 0;
  98.         }
  99.        
  100.         else {
  101.             counter++;
  102.         }
  103.        
  104.         this.markDirty();
  105.     }
  106.    
  107.     private List<EntityGrist> selectEntitiesWithinAABB(World worldIn, AxisAlignedBB bb) {
  108.         List<EntityGrist> result = new ArrayList<EntityGrist>();
  109.  
  110.         final int minChunkX = MathHelper.floor((bb.minX) / 16.0D);
  111.         final int maxChunkX = MathHelper.floor((bb.maxX) / 16.0D);
  112.         final int minChunkZ = MathHelper.floor((bb.minZ) / 16.0D);
  113.         final int maxChunkZ = MathHelper.floor((bb.maxZ) / 16.0D);
  114.         final int minChunkY = MathHelper.floor((bb.minY) / 16.0D);
  115.         final int maxChunkY = MathHelper.floor((bb.maxY) / 16.0D);
  116.  
  117.         for (int chunkX = minChunkX; chunkX <= maxChunkX; ++chunkX) {
  118.           for (int chunkZ = minChunkZ; chunkZ <= maxChunkZ; ++chunkZ) {
  119.             Chunk chunk = worldIn.getChunkFromChunkCoords(chunkX, chunkZ);
  120.             final ClassInheritanceMultiMap<Entity>[] entityLists = chunk.getEntityLists();
  121.             final int minChunkYClamped = MathHelper.clamp(minChunkY, 0, entityLists.length - 1);
  122.             final int maxChunkYClamped = MathHelper.clamp(maxChunkY, 0, entityLists.length - 1);
  123.             for (int chunkY = minChunkYClamped; chunkY <= maxChunkYClamped; ++chunkY) {
  124.               for (Entity entity : entityLists[chunkY]) {
  125.                 if (!entity.isDead && (entity instanceof EntityGrist) && entity.getEntityBoundingBox().intersects(bb)) {
  126.                   result.add((EntityGrist) entity);
  127.                  
  128.                     return result;
  129.                  
  130.                 }
  131.               }
  132.             }
  133.           }
  134.         }
  135.  
  136.         return result;
  137.       }
  138.    
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement