mirror of
https://github.com/GTNewHorizons/Botania.git
synced 2026-10-26 14:24:22 +00:00
Reach ring rewrite (#67)
Co-authored-by: Shadow1590 <> Co-authored-by: Maya <10861407+serenibyss@users.noreply.github.com>
This commit is contained in:
10 files changed
+88
-10
No files matched your search
@@ -0,0 +1,22 @@
|
||||
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());
|
||||
}
|
||||
}
|
||||
@@ -50,6 +50,7 @@ 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;
|
||||
@@ -145,6 +146,7 @@ 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());
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
*/
|
||||
package vazkii.botania.common.item.equipment.bauble;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
@@ -38,13 +40,15 @@ import cpw.mods.fml.relauncher.SideOnly;
|
||||
@Optional.Interface(modid = "Thaumcraft", iface = "thaumcraft.api.IRunicArmor")
|
||||
public abstract class ItemBauble extends ItemMod implements IBauble, ICosmeticAttachable, IPhantomInkable, IRunicArmor {
|
||||
|
||||
private static final String TAG_HASHCODE = "playerHashcode";
|
||||
private static final String TAG_HASHCODE_CLIENT = "playerHashcodeClient";
|
||||
private static final String TAG_BAUBLE_UUID_MOST = "baubleUUIDMost";
|
||||
private static final String TAG_BAUBLE_UUID_LEAST = "baubleUUIDLeast";
|
||||
private static final String TAG_COSMETIC_ITEM = "cosmeticItem";
|
||||
private static final String TAG_PHANTOM_INK = "phantomInk";
|
||||
|
||||
private static final HashMap<UUID, UUID> itemToPlayerRemote = new HashMap<>();
|
||||
private static final HashMap<UUID, UUID> itemToPlayer = new HashMap<>();
|
||||
private static final HashSet<UUID> toRemoveItems = new HashSet<>();
|
||||
|
||||
public ItemBauble(String name) {
|
||||
super();
|
||||
setMaxStackSize(1);
|
||||
@@ -123,9 +127,17 @@ public abstract class ItemBauble extends ItemMod implements IBauble, ICosmeticAt
|
||||
|
||||
@Override
|
||||
public void onWornTick(ItemStack stack, EntityLivingBase player) {
|
||||
if(getLastPlayerHashcode(stack, player.worldObj.isRemote) != player.hashCode()) {
|
||||
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);
|
||||
setLastPlayerHashcode(stack, player.hashCode(), player.worldObj.isRemote);
|
||||
applyToPlayer(itemUUID, player.getUniqueID(), player.worldObj.isRemote);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,7 +151,7 @@ public abstract class ItemBauble extends ItemMod implements IBauble, ICosmeticAt
|
||||
((EntityPlayer) player).addStat(ModAchievements.baubleWear, 1);
|
||||
|
||||
onEquippedOrLoadedIntoWorld(stack, player);
|
||||
setLastPlayerHashcode(stack, player.hashCode(), player.worldObj.isRemote);
|
||||
applyToPlayer(getBaubleUUID(stack), player.getUniqueID(), player.worldObj.isRemote);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,7 +161,7 @@ public abstract class ItemBauble extends ItemMod implements IBauble, ICosmeticAt
|
||||
|
||||
@Override
|
||||
public void onUnequipped(ItemStack stack, EntityLivingBase player) {
|
||||
// NO-OP
|
||||
toRemoveItems.add(getBaubleUUID(stack));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -196,12 +208,37 @@ public abstract class ItemBauble extends ItemMod implements IBauble, ICosmeticAt
|
||||
return new UUID(most, least);
|
||||
}
|
||||
|
||||
public static int getLastPlayerHashcode(ItemStack stack, boolean remote) {
|
||||
return ItemNBTHelper.getInt(stack, remote ? TAG_HASHCODE_CLIENT : TAG_HASHCODE, 0);
|
||||
public static boolean wasPlayerApplied(UUID itemUUID, UUID playerUUID, boolean remote) {
|
||||
return playerUUID.equals(remote ? itemToPlayerRemote.get(itemUUID) : itemToPlayer.get(itemUUID));
|
||||
}
|
||||
|
||||
public static void setLastPlayerHashcode(ItemStack stack, int hash, boolean remote) {
|
||||
ItemNBTHelper.setInt(stack, remote ? TAG_HASHCODE_CLIENT : TAG_HASHCODE, hash);
|
||||
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
|
||||
|
||||
@@ -12,6 +12,8 @@ package vazkii.botania.common.item.equipment.bauble;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.ItemRenderer;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
@@ -53,6 +55,7 @@ public class ItemBaubleCosmetic extends ItemBauble implements ICosmeticBauble {
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerIcons(IIconRegister par1IconRegister) {
|
||||
icons = new IIcon[SUBTYPES];
|
||||
for(int i = 0; i < SUBTYPES; i++)
|
||||
|
||||
@@ -13,6 +13,8 @@ package vazkii.botania.common.item.equipment.bauble;
|
||||
import java.awt.Color;
|
||||
import java.util.List;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.ItemRenderer;
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
@@ -68,6 +70,7 @@ public class ItemBloodPendant extends ItemBauble implements IBrewContainer, IBre
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerIcons(IIconRegister par1IconRegister) {
|
||||
icons = new IIcon[4];
|
||||
for(int i = 0; i < 4; i++)
|
||||
|
||||
@@ -15,6 +15,8 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.ItemRenderer;
|
||||
@@ -53,6 +55,7 @@ public class ItemIcePendant extends ItemBauble implements IBaubleRender {
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerIcons(IIconRegister par1IconRegister) {
|
||||
super.registerIcons(par1IconRegister);
|
||||
gemIcon = IconHelper.forItem(par1IconRegister, this, "Gem");
|
||||
|
||||
@@ -62,6 +62,7 @@ public class ItemItemFinder extends ItemBauble implements IBaubleRender {
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerIcons(IIconRegister par1IconRegister) {
|
||||
super.registerIcons(par1IconRegister);
|
||||
gemIcon = IconHelper.forItem(par1IconRegister, this, "Gem");
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
*/
|
||||
package vazkii.botania.common.item.equipment.bauble;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.ItemRenderer;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
@@ -47,6 +49,7 @@ public class ItemLavaPendant extends ItemBauble implements IBaubleRender {
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerIcons(IIconRegister par1IconRegister) {
|
||||
super.registerIcons(par1IconRegister);
|
||||
gemIcon = IconHelper.forItem(par1IconRegister, this, "Gem");
|
||||
|
||||
@@ -30,6 +30,7 @@ public class ItemReachRing extends ItemBauble {
|
||||
@Override
|
||||
public void onUnequipped(ItemStack stack, EntityLivingBase player) {
|
||||
Botania.proxy.setExtraReach(player, -3.5F);
|
||||
super.onUnequipped(stack, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
*/
|
||||
package vazkii.botania.common.item.equipment.bauble;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.ItemRenderer;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
@@ -58,6 +60,7 @@ public class ItemSuperLavaPendant extends ItemBauble implements IBaubleRender {
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerIcons(IIconRegister par1IconRegister) {
|
||||
super.registerIcons(par1IconRegister);
|
||||
gemIcon = IconHelper.forItem(par1IconRegister, this, "Gem");
|
||||
|
||||
Reference in new issue
Block a user