diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemInfraredGoggles.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemInfraredGoggles.java index 2c245cca5..29762112c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemInfraredGoggles.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemInfraredGoggles.java @@ -14,6 +14,7 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.items.base.ItemArmorAA; import de.ellpeck.actuallyadditions.mod.material.InitArmorMaterials; import de.ellpeck.actuallyadditions.mod.util.StackUtil; +import io.netty.util.internal.ConcurrentSet; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; @@ -26,9 +27,12 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import java.util.List; +import java.util.Set; public class ItemInfraredGoggles extends ItemArmorAA{ + private final Set cachedGlowingEntities = new ConcurrentSet(); + public ItemInfraredGoggles(String name){ super(name, InitArmorMaterials.armorMaterialGoggles, 0, StackUtil.getNull()); this.setMaxDamage(0); @@ -41,21 +45,34 @@ public class ItemInfraredGoggles extends ItemArmorAA{ public void onClientTick(ClientTickEvent event){ EntityPlayer player = ActuallyAdditions.proxy.getCurrentPlayer(); if(player != null && isWearing(player)){ - double innerRange = 8; - double remRange = innerRange+2; - - AxisAlignedBB aabb = new AxisAlignedBB(player.posX-remRange, player.posY-remRange, player.posZ-remRange, player.posX+remRange, player.posY+remRange, player.posZ+remRange); + double range = 8; + AxisAlignedBB aabb = new AxisAlignedBB(player.posX-range, player.posY-range, player.posZ-range, player.posX+range, player.posY+range, player.posZ+range); List entities = player.world.getEntitiesWithinAABB(Entity.class, aabb); + if(entities != null && !entities.isEmpty()){ + this.cachedGlowingEntities.addAll(entities); + } - for(Entity entity : entities){ - if(entity != player){ - if(entity.getDistanceSq(player.posX, player.posY, player.posZ) <= innerRange*innerRange){ - entity.setGlowing(true); + if(!this.cachedGlowingEntities.isEmpty()){ + for(Entity entity : this.cachedGlowingEntities){ + if(entity.getDistanceSq(player.posX, player.posY, player.posZ) > range*range){ + entity.setGlowing(false); + + this.cachedGlowingEntities.remove(entity); } else{ + entity.setGlowing(true); + } + } + } + } + else{ + if(!this.cachedGlowingEntities.isEmpty()){ + for(Entity entity : this.cachedGlowingEntities){ + if(!entity.isDead){ entity.setGlowing(false); } } + this.cachedGlowingEntities.clear(); } } }