From 33be87e896aa52f9a39fa27b9e1d42e76e1786a2 Mon Sep 17 00:00:00 2001 From: DarkShadow44 Date: Sun, 28 Sep 2025 13:59:11 +0200 Subject: [PATCH] Fix reach ring (#95) Co-authored-by: Martin Robertz --- .../client/core/proxy/ClientProxy.java | 3 +- .../core/handler/ItemBaubleHandler.java | 22 ------ .../common/core/proxy/CommonProxy.java | 2 - .../item/equipment/bauble/ItemBauble.java | 69 ++++--------------- 4 files changed, 15 insertions(+), 81 deletions(-) delete mode 100644 src/main/java/vazkii/botania/common/core/handler/ItemBaubleHandler.java diff --git a/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java b/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java index 0d6ea988d..b42044d5e 100644 --- a/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java +++ b/src/main/java/vazkii/botania/client/core/proxy/ClientProxy.java @@ -383,7 +383,8 @@ public class ClientProxy extends CommonProxy { super.setExtraReach(entity, reach); Minecraft mc = Minecraft.getMinecraft(); EntityPlayer player = mc.thePlayer; - if(entity == player) { + // Player object might have changed, need to check the UUID. + if(entity.worldObj.isRemote && entity.getUniqueID().equals(player.getUniqueID())) { if(!(mc.playerController instanceof IExtendedPlayerController)) { GameType type = ReflectionHelper.getPrivateValue(PlayerControllerMP.class, mc.playerController, LibObfuscation.CURRENT_GAME_TYPE); NetHandlerPlayClient net = ReflectionHelper.getPrivateValue(PlayerControllerMP.class, mc.playerController, LibObfuscation.NET_CLIENT_HANDLER); diff --git a/src/main/java/vazkii/botania/common/core/handler/ItemBaubleHandler.java b/src/main/java/vazkii/botania/common/core/handler/ItemBaubleHandler.java deleted file mode 100644 index 0135fae7b..000000000 --- a/src/main/java/vazkii/botania/common/core/handler/ItemBaubleHandler.java +++ /dev/null @@ -1,22 +0,0 @@ -package vazkii.botania.common.core.handler; - -import net.minecraft.client.Minecraft; -import vazkii.botania.common.item.equipment.bauble.ItemBauble; -import cpw.mods.fml.common.gameevent.PlayerEvent; -import cpw.mods.fml.common.network.FMLNetworkEvent; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; - -public class ItemBaubleHandler { - - @SubscribeEvent - public void disconnectFromServer(FMLNetworkEvent.ClientDisconnectionFromServerEvent event) { - if(Minecraft.getMinecraft().thePlayer != null) { - ItemBauble.removePlayer(Minecraft.getMinecraft().thePlayer.getUniqueID()); - } - } - - @SubscribeEvent - public void playerDisconnect(PlayerEvent.PlayerLoggedOutEvent event) { - ItemBauble.removePlayer(event.player.getUniqueID()); - } -} diff --git a/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java b/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java index c43e5838d..24c14e5f4 100644 --- a/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java +++ b/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java @@ -50,7 +50,6 @@ import vazkii.botania.common.core.handler.ChestGenHandler; import vazkii.botania.common.core.handler.CommonTickHandler; import vazkii.botania.common.core.handler.ConfigHandler; import vazkii.botania.common.core.handler.InternalMethodHandler; -import vazkii.botania.common.core.handler.ItemBaubleHandler; import vazkii.botania.common.core.handler.ManaNetworkHandler; import vazkii.botania.common.core.handler.PixieHandler; import vazkii.botania.common.core.handler.SheddingHandler; @@ -146,7 +145,6 @@ public class CommonProxy { MinecraftForge.EVENT_BUS.register(new SkyblockWorldEvents()); FMLCommonHandler.instance().bus().register(new CommonTickHandler()); - FMLCommonHandler.instance().bus().register(new ItemBaubleHandler()); FMLInterModComms.sendMessage("ProjectE", "interdictionblacklist", EntityManaBurst.class.getCanonicalName()); diff --git a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemBauble.java b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemBauble.java index ef703a587..54c992baf 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemBauble.java +++ b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemBauble.java @@ -10,14 +10,14 @@ */ package vazkii.botania.common.item.equipment.bauble; -import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.UUID; +import baubles.api.BaublesApi; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.StatCollector; @@ -45,9 +45,6 @@ public abstract class ItemBauble extends ItemMod implements IBauble, ICosmeticAt private static final String TAG_COSMETIC_ITEM = "cosmeticItem"; private static final String TAG_PHANTOM_INK = "phantomInk"; - private static final HashMap itemToPlayerRemote = new HashMap<>(); - private static final HashMap itemToPlayer = new HashMap<>(); - private static final HashSet toRemoveItems = new HashSet<>(); public ItemBauble(String name) { super(); @@ -127,18 +124,12 @@ public abstract class ItemBauble extends ItemMod implements IBauble, ICosmeticAt @Override public void onWornTick(ItemStack stack, EntityLivingBase player) { - UUID itemUUID = getBaubleUUID(stack); - if(toRemoveItems.contains(itemUUID)) { - // this is done like this because on server worn tick gets called after unequip - // so it would get reapplied - unapplyItem(itemUUID, player.worldObj.isRemote); - toRemoveItems.remove(itemUUID); - return; - } - if(!wasPlayerApplied(itemUUID, player.getUniqueID(), player.worldObj.isRemote)) { - onEquippedOrLoadedIntoWorld(stack, player); - applyToPlayer(itemUUID, player.getUniqueID(), player.worldObj.isRemote); - } + // NO-OP + } + + @Override + public void onPlayerLoad(ItemStack stack, EntityLivingBase player) { + onEquippedOrLoadedIntoWorld(stack, player); } @Override @@ -151,17 +142,16 @@ public abstract class ItemBauble extends ItemMod implements IBauble, ICosmeticAt ((EntityPlayer) player).addStat(ModAchievements.baubleWear, 1); onEquippedOrLoadedIntoWorld(stack, player); - applyToPlayer(getBaubleUUID(stack), player.getUniqueID(), player.worldObj.isRemote); } } - public void onEquippedOrLoadedIntoWorld(ItemStack stack, EntityLivingBase player) { - // NO-OP - } - @Override public void onUnequipped(ItemStack stack, EntityLivingBase player) { - toRemoveItems.add(getBaubleUUID(stack)); + // NO-OP + } + + public void onEquippedOrLoadedIntoWorld(ItemStack stack, EntityLivingBase player) { + // NO-OP } @Override @@ -208,39 +198,6 @@ public abstract class ItemBauble extends ItemMod implements IBauble, ICosmeticAt return new UUID(most, least); } - public static boolean wasPlayerApplied(UUID itemUUID, UUID playerUUID, boolean remote) { - return playerUUID.equals(remote ? itemToPlayerRemote.get(itemUUID) : itemToPlayer.get(itemUUID)); - } - - public static void applyToPlayer(UUID itemUUID, UUID playerUUID, boolean remote) { - if(remote) { - itemToPlayerRemote.put(itemUUID, playerUUID); - } else { - itemToPlayer.put(itemUUID, playerUUID); - } - } - - public static void unapplyItem(UUID itemUUID, boolean remote) { - if(remote) { - itemToPlayerRemote.remove(itemUUID); - } else { - itemToPlayer.remove(itemUUID); - } - } - - public static void removePlayer(UUID playerUUID) { - for(UUID item : itemToPlayerRemote.keySet().toArray(new UUID[0])) { - if(playerUUID.equals(itemToPlayerRemote.get(item))) { - itemToPlayerRemote.remove(item); - } - } - for(UUID item : itemToPlayer.keySet().toArray(new UUID[0])) { - if(playerUUID.equals(itemToPlayer.get(item))) { - itemToPlayer.remove(item); - } - } - } - @Override public boolean hasPhantomInk(ItemStack stack) { return ItemNBTHelper.getBoolean(stack, TAG_PHANTOM_INK, false);