diff options
author | Alexdoru <57050655+Alexdoru@users.noreply.github.com> | 2024-11-03 18:50:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-03 17:50:31 +0000 |
commit | 3376516a2856a854584bd72de4428c539e4d4b34 (patch) | |
tree | 9a19a9430cdeb1e6eb18b100e7f1a1b0337a14f6 | |
parent | 6b16a43329c97cd844e9f5cafd86114aa2c2c8c8 (diff) | |
download | GT5-Unofficial-3376516a2856a854584bd72de4428c539e4d4b34.tar.gz GT5-Unofficial-3376516a2856a854584bd72de4428c539e4d4b34.tar.bz2 GT5-Unofficial-3376516a2856a854584bd72de4428c539e4d4b34.zip |
Fix memory leak in gt++ PlayerUtils (#3411)
Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com>
-rw-r--r-- | src/main/java/gtPlusPlus/core/handler/events/EntityDeathHandler.java | 5 | ||||
-rw-r--r-- | src/main/java/gtPlusPlus/core/util/minecraft/PlayerUtils.java | 63 |
2 files changed, 6 insertions, 62 deletions
diff --git a/src/main/java/gtPlusPlus/core/handler/events/EntityDeathHandler.java b/src/main/java/gtPlusPlus/core/handler/events/EntityDeathHandler.java index 35970d9165..cb59db205e 100644 --- a/src/main/java/gtPlusPlus/core/handler/events/EntityDeathHandler.java +++ b/src/main/java/gtPlusPlus/core/handler/events/EntityDeathHandler.java @@ -2,7 +2,6 @@ package gtPlusPlus.core.handler.events; import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -27,8 +26,8 @@ import gtPlusPlus.core.util.minecraft.PlayerUtils; @Optional.Interface(iface = "com.kuba6000.mobsinfo.api.IMobExtraInfoProvider", modid = "mobsinfo") public class EntityDeathHandler implements IMobExtraInfoProvider { - private static final HashMap<Class, ArrayList<Triplet<ItemStack, Integer, Integer>>> mMobDropMap = new HashMap<>(); - private static final HashSet<Class> mInternalClassKeyCache = new HashSet<>(); + private static final HashMap<Class<?>, ArrayList<Triplet<ItemStack, Integer, Integer>>> mMobDropMap = new HashMap<>(); + private static final ArrayList<Class<?>> mInternalClassKeyCache = new ArrayList<>(); /** * Provides the ability to provide custom drops upon the death of EntityLivingBase objects. diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/PlayerUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/PlayerUtils.java index 5f639f3739..1108d5d904 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/PlayerUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/PlayerUtils.java @@ -1,9 +1,7 @@ package gtPlusPlus.core.util.minecraft; import java.util.List; -import java.util.Map; import java.util.UUID; -import java.util.WeakHashMap; import net.minecraft.client.Minecraft; import net.minecraft.entity.EntityLivingBase; @@ -11,23 +9,16 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; -import net.minecraft.util.ChunkCoordinates; import net.minecraft.util.IChatComponent; import net.minecraft.world.World; -import net.minecraftforge.common.util.FakePlayer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.util.GTUtility; -import gregtech.api.util.ReflectionUtil; import gtPlusPlus.core.util.Utils; public class PlayerUtils { - public static final Map<String, EntityPlayer> mCachedFakePlayers = new WeakHashMap<>(); - private static final Class<?> mThaumcraftFakePlayer = ReflectionUtil - .getClass("thaumcraft.common.lib.FakeThaumcraftPlayer"); - public static List<EntityPlayerMP> getOnlinePlayers() { return MinecraftServer.getServer() .getConfigurationManager().playerEntityList; @@ -105,55 +96,9 @@ public class PlayerUtils { return !aPlayer.capabilities.disableDamage; } - public static void cacheFakePlayer(EntityPlayer aPlayer) { - ChunkCoordinates aChunkLocation = aPlayer.getPlayerCoordinates(); - // Cache Fake Player - if (aPlayer instanceof FakePlayer - || (mThaumcraftFakePlayer != null && mThaumcraftFakePlayer.isInstance(aPlayer)) - || (aPlayer.getCommandSenderName() == null || aPlayer.getCommandSenderName() - .isEmpty()) - || (aPlayer.isEntityInvulnerable() && !aPlayer.canCommandSenderUseCommand(0, "") && (aChunkLocation == null) - || (aChunkLocation.posX == 0 && aChunkLocation.posY == 0 && aChunkLocation.posZ == 0))) { - mCachedFakePlayers.put( - aPlayer.getUniqueID() - .toString(), - aPlayer); - } - } - - public static boolean isCachedFakePlayer(String aUUID) { - return mCachedFakePlayers.containsKey(aUUID); - } - - public static boolean isRealPlayer(EntityLivingBase aEntity) { - if (aEntity instanceof EntityPlayer p) { - ChunkCoordinates aChunkLocation = p.getPlayerCoordinates(); - if (p instanceof FakePlayer) { - cacheFakePlayer(p); - return false; - } - if (mThaumcraftFakePlayer != null && mThaumcraftFakePlayer.isInstance(p)) { - cacheFakePlayer(p); - return false; - } - if (p.getCommandSenderName() == null) { - cacheFakePlayer(p); - return false; - } - if (p.getCommandSenderName() - .isEmpty()) { - cacheFakePlayer(p); - return false; - } - if (p.isEntityInvulnerable() && !p.canCommandSenderUseCommand(0, "") - && (aChunkLocation.posX == 0 && aChunkLocation.posY == 0 && aChunkLocation.posZ == 0)) { - cacheFakePlayer(p); - return false; - } - return !isCachedFakePlayer( - p.getUniqueID() - .toString()); - } - return false; + public static boolean isRealPlayer(EntityLivingBase entity) { + return entity instanceof EntityPlayer p && !p.getClass() + .getName() + .contains("Fake"); } } |