From 0383f0fb311598df85b5f89745e2647ea2c6b01e Mon Sep 17 00:00:00 2001 From: Arcaratus Date: Tue, 22 Mar 2016 21:10:05 -0400 Subject: [PATCH] Move some base classes into the API Add Javadocs for API classes that didn't already have them Redo 'nother redo Another redo Update ItemSigil.java Last one, I swear Fix --- .../api/altar/EnumAltarComponent.java | 4 + .../bloodmagic/api/event/BoundToolEvent.java | 16 +- .../bloodmagic/api/event/ItemBindEvent.java | 12 ++ .../bloodmagic/api/event/RitualEvent.java | 1 - .../api/event/SacrificeKnifeUsedEvent.java | 18 ++ .../api/event/SoulNetworkEvent.java | 27 ++- .../bloodmagic/api/iface/IAltarReader.java | 4 + .../bloodmagic/api/iface/ISigil.java | 4 + .../bloodmagic/api/impl/ItemBindable.java | 41 ++++ .../bloodmagic/api/impl/ItemSigil.java | 38 ++++ .../impl}/ItemSigilToggleable.java | 68 +++---- .../api/util/helper/NetworkHelper.java | 5 +- .../bloodmagic/client/IVariantProvider.java | 1 - .../item/ItemActivationCrystal.java | 3 +- .../bloodmagic/item/ItemBindable.java | 190 ------------------ .../bloodmagic/item/ItemBindableBase.java | 35 ++++ .../bloodmagic/item/ItemBloodOrb.java | 11 +- .../item/ItemDaggerOfSacrifice.java | 5 +- .../bloodmagic/item/ItemInscriptionTool.java | 3 +- .../bloodmagic/item/ItemLavaCrystal.java | 12 +- .../item/ItemSacrificialDagger.java | 2 +- .../item/ItemTelepositionFocus.java | 2 +- .../bloodmagic/item/sigil/ItemSigilAir.java | 5 +- .../bloodmagic/item/sigil/ItemSigilBase.java | 52 +---- .../item/sigil/ItemSigilBloodLight.java | 4 +- .../item/sigil/ItemSigilCompression.java | 2 +- .../sigil/ItemSigilElementalAffinity.java | 2 +- .../item/sigil/ItemSigilEnderSeverance.java | 2 +- .../item/sigil/ItemSigilFastMiner.java | 2 +- .../item/sigil/ItemSigilGreenGrove.java | 2 +- .../bloodmagic/item/sigil/ItemSigilHaste.java | 2 +- .../bloodmagic/item/sigil/ItemSigilLava.java | 7 +- .../item/sigil/ItemSigilMagnetism.java | 2 +- .../item/sigil/ItemSigilPhantomBridge.java | 2 +- .../item/sigil/ItemSigilSuppression.java | 2 +- .../item/sigil/ItemSigilToggleableBase.java | 54 +++++ .../item/sigil/ItemSigilTransposition.java | 5 +- .../bloodmagic/item/sigil/ItemSigilVoid.java | 9 +- .../bloodmagic/item/sigil/ItemSigilWater.java | 9 +- .../item/sigil/ItemSigilWhirlwind.java | 2 +- .../bloodmagic/tile/TileTeleposer.java | 7 +- 41 files changed, 331 insertions(+), 343 deletions(-) create mode 100644 src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java create mode 100644 src/main/java/WayofTime/bloodmagic/api/impl/ItemSigil.java rename src/main/java/WayofTime/bloodmagic/{item/sigil => api/impl}/ItemSigilToggleable.java (51%) delete mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemBindable.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/ItemBindableBase.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java diff --git a/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarComponent.java b/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarComponent.java index 613ad884..595dafbe 100644 --- a/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarComponent.java +++ b/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarComponent.java @@ -1,5 +1,9 @@ package WayofTime.bloodmagic.api.altar; +/** + * List of different components used to construct + * different tiers of altars. + */ public enum EnumAltarComponent { GLOWSTONE, diff --git a/src/main/java/WayofTime/bloodmagic/api/event/BoundToolEvent.java b/src/main/java/WayofTime/bloodmagic/api/event/BoundToolEvent.java index 78eb7add..7cc7bea1 100644 --- a/src/main/java/WayofTime/bloodmagic/api/event/BoundToolEvent.java +++ b/src/main/java/WayofTime/bloodmagic/api/event/BoundToolEvent.java @@ -14,10 +14,16 @@ public class BoundToolEvent extends Event this.player = player; } + /** + * This event is called when a {@link WayofTime.bloodmagic.item.ItemBoundTool} + * is being charged. + * + * If canceled, will result in the charging being canceled. + */ + @Cancelable public static class Charge extends BoundToolEvent { - public ItemStack result; public Charge(EntityPlayer player, ItemStack result) @@ -27,10 +33,16 @@ public class BoundToolEvent extends Event } } + /** + * This event is called when a {@link WayofTime.bloodmagic.item.ItemBoundTool}'s + * charge is released. + * + * If canceled, will result in the charge not being released. + */ + @Cancelable public static class Release extends BoundToolEvent { - public final ItemStack boundTool; public int charge; diff --git a/src/main/java/WayofTime/bloodmagic/api/event/ItemBindEvent.java b/src/main/java/WayofTime/bloodmagic/api/event/ItemBindEvent.java index 11fc960b..49e6ef65 100644 --- a/src/main/java/WayofTime/bloodmagic/api/event/ItemBindEvent.java +++ b/src/main/java/WayofTime/bloodmagic/api/event/ItemBindEvent.java @@ -12,6 +12,18 @@ public class ItemBindEvent extends Event public String key; public ItemStack itemStack; + /** + * This event is called whenever a player attempts to bind a {@link WayofTime.bloodmagic.api.iface.IBindable} item. + * + * @param player + * The player doing the binding + * @param key + * The UUID of the player doing the binding + * @param itemStack + * The {@link ItemStack} that the player is binding + * + * This event is {@link Cancelable}.
+ */ public ItemBindEvent(EntityPlayer player, String key, ItemStack itemStack) { super(); diff --git a/src/main/java/WayofTime/bloodmagic/api/event/RitualEvent.java b/src/main/java/WayofTime/bloodmagic/api/event/RitualEvent.java index 5f721603..45813ab6 100644 --- a/src/main/java/WayofTime/bloodmagic/api/event/RitualEvent.java +++ b/src/main/java/WayofTime/bloodmagic/api/event/RitualEvent.java @@ -55,7 +55,6 @@ public class RitualEvent extends Event @Cancelable public static class RitualRunEvent extends RitualEvent { - public RitualRunEvent(IMasterRitualStone mrs, String owner, Ritual ritual) { super(mrs, owner, ritual); diff --git a/src/main/java/WayofTime/bloodmagic/api/event/SacrificeKnifeUsedEvent.java b/src/main/java/WayofTime/bloodmagic/api/event/SacrificeKnifeUsedEvent.java index 49fd07f4..41230abb 100644 --- a/src/main/java/WayofTime/bloodmagic/api/event/SacrificeKnifeUsedEvent.java +++ b/src/main/java/WayofTime/bloodmagic/api/event/SacrificeKnifeUsedEvent.java @@ -1,6 +1,7 @@ package WayofTime.bloodmagic.api.event; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.eventhandler.Cancelable; import net.minecraftforge.fml.common.eventhandler.Event; @@ -13,6 +14,23 @@ public class SacrificeKnifeUsedEvent extends Event public boolean shouldDrainHealth; public boolean shouldFillAltar; + /** + * This event is called whenever a player attempts to use a {@link WayofTime.bloodmagic.item.ItemSacrificialDagger} + * to self-sacrifice near an altar. + * + * @param player + * The player doing the sacrificing + * @param shouldDrainHealth + * Determines whether or not health is lost + * @param shouldFillAltar + * Determines whether or not an altar should be filled + * @param hp + * Amount of health lost + * @param lpAdded + * Amount of LP added to the altar + * + * This event is {@link Cancelable}.
+ */ public SacrificeKnifeUsedEvent(EntityPlayer player, boolean shouldDrainHealth, boolean shouldFillAltar, int hp, int lpAdded) { this.player = player; diff --git a/src/main/java/WayofTime/bloodmagic/api/event/SoulNetworkEvent.java b/src/main/java/WayofTime/bloodmagic/api/event/SoulNetworkEvent.java index 6f3ceabc..d2feadc9 100644 --- a/src/main/java/WayofTime/bloodmagic/api/event/SoulNetworkEvent.java +++ b/src/main/java/WayofTime/bloodmagic/api/event/SoulNetworkEvent.java @@ -5,21 +5,32 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.eventhandler.Cancelable; import net.minecraftforge.fml.common.eventhandler.Event; +/** + * Base event class for Soul Network related events. + * + * {@link #ownerUUID} contains the owner's UUID + * {@link #syphon} contains the amount of LP to be drained + */ public class SoulNetworkEvent extends Event { - public final String ownerName; + public final String ownerUUID; public int syphon; - public SoulNetworkEvent(String ownerName, int syphon) + public SoulNetworkEvent(String ownerUUID, int syphon) { - this.ownerName = ownerName; + this.ownerUUID = ownerUUID; this.syphon = syphon; } + /** + * This event is called when an {@link WayofTime.bloodmagic.api.impl.ItemBindable} + * is being drained inside of a {@link net.minecraft.tileentity.TileEntity}. + * + * If canceled, the drain will not be executed. + */ @Cancelable public static class ItemDrainInContainerEvent extends SoulNetworkEvent { - public ItemStack stack; public ItemDrainInContainerEvent(ItemStack stack, String ownerName, int syphon) @@ -29,10 +40,15 @@ public class SoulNetworkEvent extends Event } } + /** + * This event is called when a {@link EntityPlayer} + * drains the Soul Network + * + * If canceled, the drain will not be executed. + */ @Cancelable public static class PlayerDrainNetworkEvent extends SoulNetworkEvent { - public final EntityPlayer player; // If true, will damage regardless of if the network had enough inside it public boolean shouldDamage; @@ -48,7 +64,6 @@ public class SoulNetworkEvent extends Event @Cancelable public static class ItemDrainNetworkEvent extends PlayerDrainNetworkEvent { - public final ItemStack itemStack; /** * Amount of damage that would incur if the network could not drain diff --git a/src/main/java/WayofTime/bloodmagic/api/iface/IAltarReader.java b/src/main/java/WayofTime/bloodmagic/api/iface/IAltarReader.java index 8666eeac..e17ae4e4 100644 --- a/src/main/java/WayofTime/bloodmagic/api/iface/IAltarReader.java +++ b/src/main/java/WayofTime/bloodmagic/api/iface/IAltarReader.java @@ -1,5 +1,9 @@ package WayofTime.bloodmagic.api.iface; +/** + * Any item that implements this interface will not be pulled into the Altar on + * right click. + */ public interface IAltarReader { diff --git a/src/main/java/WayofTime/bloodmagic/api/iface/ISigil.java b/src/main/java/WayofTime/bloodmagic/api/iface/ISigil.java index 2ca43928..451bc2c1 100644 --- a/src/main/java/WayofTime/bloodmagic/api/iface/ISigil.java +++ b/src/main/java/WayofTime/bloodmagic/api/iface/ISigil.java @@ -1,5 +1,9 @@ package WayofTime.bloodmagic.api.iface; +/** + * Used for all {@link WayofTime.bloodmagic.api.impl.ItemSigil} + * EXCEPT Sigils of Holdings. + */ public interface ISigil { } diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java b/src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java new file mode 100644 index 00000000..0fd8c86e --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java @@ -0,0 +1,41 @@ +package WayofTime.bloodmagic.api.impl; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.iface.IBindable; +import WayofTime.bloodmagic.api.util.helper.NBTHelper; + +/** + * Base class for all bindable items. + */ +public class ItemBindable extends Item implements IBindable +{ + public ItemBindable() + { + super(); + + setMaxStackSize(1); + } + + // IBindable + + @Override + public boolean onBind(EntityPlayer player, ItemStack stack) + { + return true; + } + + @Override + public String getOwnerName(ItemStack stack) + { + return stack != null ? NBTHelper.checkNBT(stack).getTagCompound().getString(Constants.NBT.OWNER_NAME) : null; + } + + @Override + public String getOwnerUUID(ItemStack stack) + { + return stack != null ? NBTHelper.checkNBT(stack).getTagCompound().getString(Constants.NBT.OWNER_UUID) : null; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigil.java b/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigil.java new file mode 100644 index 00000000..99a57556 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigil.java @@ -0,0 +1,38 @@ +package WayofTime.bloodmagic.api.impl; + +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.iface.ISigil; +import WayofTime.bloodmagic.api.util.helper.NBTHelper; +import lombok.Getter; +import net.minecraft.item.ItemStack; + +/** + * Base class for all (static) sigils. + */ +public class ItemSigil extends ItemBindable implements ISigil +{ + @Getter + private int lpUsed; + + public ItemSigil(int lpUsed) + { + super(); + + this.lpUsed = lpUsed; + } + + public boolean isUnusable(ItemStack stack) + { + NBTHelper.checkNBT(stack); + + return stack.getTagCompound().getBoolean(Constants.NBT.UNUSABLE); + } + + public ItemStack setUnusable(ItemStack stack, boolean unusable) + { + NBTHelper.checkNBT(stack); + + stack.getTagCompound().setBoolean(Constants.NBT.UNUSABLE, unusable); + return stack; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleable.java b/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java similarity index 51% rename from src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleable.java rename to src/main/java/WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java index 7a9fe0f6..f39d7e20 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleable.java +++ b/src/main/java/WayofTime/bloodmagic/api/impl/ItemSigilToggleable.java @@ -1,8 +1,7 @@ -package WayofTime.bloodmagic.item.sigil; - -import java.util.ArrayList; -import java.util.List; +package WayofTime.bloodmagic.api.impl; +import WayofTime.bloodmagic.api.iface.IActivatable; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -13,32 +12,36 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import org.apache.commons.lang3.tuple.ImmutablePair; -import org.apache.commons.lang3.tuple.Pair; - -import WayofTime.bloodmagic.item.ItemBindable; -import WayofTime.bloodmagic.util.helper.TextHelper; - -public class ItemSigilToggleable extends ItemSigilBase +/** + * Base class for all toggleable sigils. + */ +public class ItemSigilToggleable extends ItemSigil implements IActivatable { - public ItemSigilToggleable(String name, int lpUsed) + private boolean toggleable; + + public ItemSigilToggleable(int lpUsed) { - super(name, lpUsed); + super(lpUsed); setToggleable(); } - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) + public void setToggleable() { - super.addInformation(stack, player, tooltip, advanced); - if (getActivated(stack)) - tooltip.add(TextHelper.localize("tooltip.BloodMagic.activated")); - else - tooltip.add(TextHelper.localize("tooltip.BloodMagic.deactivated")); + this.toggleable = true; + } + + public boolean getActivated(ItemStack stack) + { + return stack.getItemDamage() > 0; + } + + public ItemStack setActivatedState(ItemStack stack, boolean activated) + { + if (this.toggleable) + stack.setItemDamage(activated ? 1 : 0); + + return stack; } @Override @@ -47,8 +50,8 @@ public class ItemSigilToggleable extends ItemSigilBase if (!world.isRemote && !isUnusable(stack)) { if (player.isSneaking()) - setActivated(stack, !getActivated(stack)); - if (getActivated(stack) && ItemBindable.syphonNetwork(stack, player, getLPUsed())) + setActivatedState(stack, !getActivated(stack)); + if (getActivated(stack) && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())) return super.onItemRightClick(stack, world, player, hand); } @@ -58,7 +61,7 @@ public class ItemSigilToggleable extends ItemSigilBase @Override public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - return (ItemBindable.syphonNetwork(stack, player, getLPUsed()) && onSigilUse(stack, player, world, pos, side, hitX, hitY, hitZ)) ? EnumActionResult.SUCCESS : EnumActionResult.FAIL; + return (NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed()) && onSigilUse(stack, player, world, pos, side, hitX, hitY, hitZ)) ? EnumActionResult.SUCCESS : EnumActionResult.FAIL; } public boolean onSigilUse(ItemStack itemStack, EntityPlayer player, World world, BlockPos blockPos, EnumFacing side, float hitX, float hitY, float hitZ) @@ -73,9 +76,9 @@ public class ItemSigilToggleable extends ItemSigilBase { if (worldIn.getWorldTime() % 100 == 0) { - if (!ItemBindable.syphonNetwork(stack, (EntityPlayer) entityIn, getLPUsed())) + if (!NetworkHelper.getSoulNetwork((EntityPlayerMP) entityIn).syphonAndDamage((EntityPlayer) entityIn, getLpUsed())) { - setActivated(stack, false); + setActivatedState(stack, false); } } @@ -86,13 +89,4 @@ public class ItemSigilToggleable extends ItemSigilBase public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { } - - @Override - public List> getVariants() - { - List> ret = new ArrayList>(); - ret.add(new ImmutablePair(0, "active=false")); - ret.add(new ImmutablePair(1, "active=true")); - return ret; - } } diff --git a/src/main/java/WayofTime/bloodmagic/api/util/helper/NetworkHelper.java b/src/main/java/WayofTime/bloodmagic/api/util/helper/NetworkHelper.java index 4cf6a8ee..5aa573cc 100644 --- a/src/main/java/WayofTime/bloodmagic/api/util/helper/NetworkHelper.java +++ b/src/main/java/WayofTime/bloodmagic/api/util/helper/NetworkHelper.java @@ -10,7 +10,6 @@ import WayofTime.bloodmagic.api.registry.OrbRegistry; import com.google.common.base.Strings; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.server.MinecraftServer; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; import net.minecraftforge.common.MinecraftForge; @@ -223,7 +222,7 @@ public class NetworkHelper if (MinecraftForge.EVENT_BUS.post(event)) return false; - int drainAmount = syphonFromNetwork(event.ownerName, event.syphon); + int drainAmount = syphonFromNetwork(event.ownerUUID, event.syphon); if (drainAmount == 0 || event.shouldDamage) hurtPlayer(player, event.syphon); @@ -254,7 +253,7 @@ public class NetworkHelper if (MinecraftForge.EVENT_BUS.post(event) || event.getResult() == Event.Result.DENY) return false; - return syphonFromNetwork(event.ownerName, event.syphon) >= syphon; + return syphonFromNetwork(event.ownerUUID, event.syphon) >= syphon; } @Deprecated diff --git a/src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java b/src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java index fb42c02f..18ba5fd0 100644 --- a/src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java +++ b/src/main/java/WayofTime/bloodmagic/client/IVariantProvider.java @@ -6,6 +6,5 @@ import java.util.List; public interface IVariantProvider { - List> getVariants(); } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java b/src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java index 3f1ea5db..c41533bb 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemActivationCrystal.java @@ -15,7 +15,7 @@ import org.apache.commons.lang3.tuple.Pair; import java.util.ArrayList; import java.util.List; -public class ItemActivationCrystal extends ItemBindable implements IVariantProvider +public class ItemActivationCrystal extends ItemBindableBase implements IVariantProvider { public static String[] names = { "weak", "awakened", "creative" }; @@ -26,7 +26,6 @@ public class ItemActivationCrystal extends ItemBindable implements IVariantProvi setUnlocalizedName(Constants.Mod.MODID + ".activationCrystal."); setRegistryName(Constants.BloodMagicItem.ACTIVATION_CRYSTAL.getRegName()); setHasSubtypes(true); - setLPUsed(100); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBindable.java b/src/main/java/WayofTime/bloodmagic/item/ItemBindable.java deleted file mode 100644 index 0374a1e5..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBindable.java +++ /dev/null @@ -1,190 +0,0 @@ -package WayofTime.bloodmagic.item; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.SoundCategory; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; -import WayofTime.bloodmagic.BloodMagic; -import WayofTime.bloodmagic.api.BloodMagicAPI; -import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.iface.IBindable; -import WayofTime.bloodmagic.api.network.SoulNetwork; -import WayofTime.bloodmagic.api.util.helper.NBTHelper; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.util.helper.TextHelper; - -import com.google.common.base.Strings; - -public class ItemBindable extends Item implements IBindable -{ - private int lpUsed; - - public ItemBindable() - { - super(); - - setCreativeTab(BloodMagic.tabBloodMagic); - setMaxStackSize(1); - } - - /** - * Syphons from the owner's network if possible - if not enough LP is found, - * it will instead take the LP from the holder of the item. - * - * @param stack - * - The ItemStack to syphon from - * @param player - * - The Player using the item - * @param lpUsed - * - The amount of LP to syphon - * - * @return Whether syphoning was successful or not - */ - public static boolean syphonNetwork(ItemStack stack, EntityPlayer player, int lpUsed) - { - if (player == null) - return false; - - if (!player.worldObj.isRemote) - { - if (stack != null && stack.getItem() instanceof IBindable) - { - IBindable itemBindable = (IBindable) stack.getItem(); - String owner = itemBindable.getOwnerUUID(stack); - - if (Strings.isNullOrEmpty(owner)) - return false; - - SoulNetwork network = NetworkHelper.getSoulNetwork(owner); - return NetworkHelper.syphonAndDamage(network, player, lpUsed); - } - - } else - { - // SpellHelper.sendIndexedParticleToAllAround(player.worldObj, posX,posY, posZ, 20, player.worldObj.provider.getDimensionId(), 4, posX, posY, posZ); - player.worldObj.playSound((EntityPlayer) null, player.posX, player.posY, player.posZ, SoundEvents.block_fire_extinguish, SoundCategory.BLOCKS, 0.5F, 2.6F + (player.worldObj.rand.nextFloat() - player.worldObj.rand.nextFloat()) * 0.8F); - } - return true; - } - - /** - * This method is to be used for when you want to drain from a network - * without an online player. This will not take health from the owner if it - * fails to find sufficient LP. - * - * @param stack - * - The ItemStack to syphon from. - * @param lpUsed - * - The amount of LP to syphon - * - * @return - If syphoning was successful or not - */ - public static boolean syphonNetwork(ItemStack stack, int lpUsed) - { - if (stack.getItem() instanceof IBindable) - { - IBindable bindable = (IBindable) stack.getItem(); - return !Strings.isNullOrEmpty(bindable.getOwnerUUID(stack)) && NetworkHelper.syphonFromContainer(stack, lpUsed); - } - - return false; - } - - public static boolean canSyphonFromNetwork(ItemStack stack, int lpRequested) - { - if (stack.getItem() instanceof IBindable) - { - IBindable bindable = (IBindable) stack.getItem(); - return !Strings.isNullOrEmpty(bindable.getOwnerUUID(stack)) && NetworkHelper.canSyphonFromContainer(stack, lpRequested); - } - - return false; - } - - public static void hurtPlayer(EntityPlayer user, int lpSyphoned) - { - if (user != null) - { - if (lpSyphoned < 100 && lpSyphoned > 0) - { - if (!user.capabilities.isCreativeMode) - { - user.attackEntityFrom(BloodMagicAPI.getDamageSource(), 0F); // Emulate an attack - user.setHealth(user.getHealth() - 1); - - if (user.getHealth() <= 0.0005f) - user.onDeath(BloodMagicAPI.getDamageSource()); - } - } else if (lpSyphoned >= 100) - { - if (!user.capabilities.isCreativeMode) - { - for (int i = 0; i < ((lpSyphoned + 99) / 100); i++) - { - user.attackEntityFrom(BloodMagicAPI.getDamageSource(), 0F); // Emulate an attack - user.setHealth(user.getHealth() - 1); - - if (user.getHealth() <= 0.0005f) - { - user.onDeath(BloodMagicAPI.getDamageSource()); - break; - } - } - } - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) - { - NBTHelper.checkNBT(stack); - - if (!Strings.isNullOrEmpty(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID))) - tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.currentOwner", PlayerHelper.getUsernameFromStack(stack))); - } - - public int getLPUsed() - { - return this.lpUsed; - } - - protected void setLPUsed(int lpUsed) - { - this.lpUsed = lpUsed; - } - - public String getBindableOwner(ItemStack stack) - { - stack = NBTHelper.checkNBT(stack); - - return stack.getTagCompound().getString(Constants.NBT.OWNER_UUID); - } - - // IBindable - - @Override - public boolean onBind(EntityPlayer player, ItemStack stack) - { - return true; - } - - @Override - public String getOwnerName(ItemStack stack) - { - return stack != null ? NBTHelper.checkNBT(stack).getTagCompound().getString(Constants.NBT.OWNER_NAME) : null; - } - - @Override - public String getOwnerUUID(ItemStack stack) - { - return stack != null ? NBTHelper.checkNBT(stack).getTagCompound().getString(Constants.NBT.OWNER_UUID) : null; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBindableBase.java b/src/main/java/WayofTime/bloodmagic/item/ItemBindableBase.java new file mode 100644 index 00000000..d1c3657f --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBindableBase.java @@ -0,0 +1,35 @@ +package WayofTime.bloodmagic.item; + +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.impl.ItemBindable; +import WayofTime.bloodmagic.api.util.helper.NBTHelper; +import WayofTime.bloodmagic.api.util.helper.PlayerHelper; +import WayofTime.bloodmagic.util.helper.TextHelper; +import com.google.common.base.Strings; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.List; + +public class ItemBindableBase extends ItemBindable +{ + public ItemBindableBase() + { + super(); + + setCreativeTab(BloodMagic.tabBloodMagic); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) + { + NBTHelper.checkNBT(stack); + + if (!Strings.isNullOrEmpty(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID))) + tooltip.add(TextHelper.localizeEffect("tooltip.BloodMagic.currentOwner", PlayerHelper.getUsernameFromStack(stack))); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java b/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java index 3bd0bec9..c65bd928 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemBloodOrb.java @@ -24,7 +24,7 @@ import WayofTime.bloodmagic.util.helper.TextHelper; import com.google.common.base.Strings; -public class ItemBloodOrb extends ItemBindable implements IBloodOrb, IBindable +public class ItemBloodOrb extends ItemBindableBase implements IBloodOrb, IBindable { public ItemBloodOrb() { @@ -51,12 +51,9 @@ public class ItemBloodOrb extends ItemBindable implements IBloodOrb, IBindable public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) { if (world == null) - return super.onItemRightClick(stack, world, player, hand); + return super.onItemRightClick(stack, null, player, hand); - double posX = player.posX; - double posY = player.posY; - double posZ = player.posZ; - world.playSound((EntityPlayer) null, player.posX, player.posY, player.posZ, SoundEvents.block_fire_extinguish, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); + world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.block_fire_extinguish, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); // SpellHelper.sendIndexedParticleToAllAround(world, posX, posY, posZ, // 20, world.provider.getDimensionId(), 4, posX, posY, posZ); @@ -78,7 +75,7 @@ public class ItemBloodOrb extends ItemBindable implements IBloodOrb, IBindable NetworkHelper.setMaxOrb(NetworkHelper.getSoulNetwork(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID)), getOrbLevel(stack.getItemDamage())); NetworkHelper.getSoulNetwork(stack.getTagCompound().getString(Constants.NBT.OWNER_UUID)).addLifeEssence(200, getMaxEssence(stack.getItemDamage())); - hurtPlayer(player, 200); + NetworkHelper.getSoulNetwork(player).hurtPlayer(player, 200); return super.onItemRightClick(stack, world, player, hand); } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java b/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java index d00bd707..e56e6928 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemDaggerOfSacrifice.java @@ -60,10 +60,7 @@ public class ItemDaggerOfSacrifice extends Item implements IVariantProvider if (findAndFillAltar(attacker.worldObj, target, lifeEssence)) { - double posX = target.posX; - double posY = target.posY; - double posZ = target.posZ; - target.worldObj.playSound((EntityPlayer) null, target.posX, target.posY, target.posZ, SoundEvents.block_fire_extinguish, SoundCategory.BLOCKS, 0.5F, 2.6F + (target.worldObj.rand.nextFloat() - target.worldObj.rand.nextFloat()) * 0.8F); + target.worldObj.playSound(null, target.posX, target.posY, target.posZ, SoundEvents.block_fire_extinguish, SoundCategory.BLOCKS, 0.5F, 2.6F + (target.worldObj.rand.nextFloat() - target.worldObj.rand.nextFloat()) * 0.8F); target.setHealth(-1); target.onDeath(new DamageSourceBloodMagic()); } diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java b/src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java index c9b8c250..706d12c9 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemInscriptionTool.java @@ -27,7 +27,7 @@ import WayofTime.bloodmagic.block.BlockRitualStone; import WayofTime.bloodmagic.client.IVariantProvider; import WayofTime.bloodmagic.util.helper.TextHelper; -public class ItemInscriptionTool extends ItemBindable implements IVariantProvider +public class ItemInscriptionTool extends ItemBindableBase implements IVariantProvider { public ItemInscriptionTool() { @@ -36,7 +36,6 @@ public class ItemInscriptionTool extends ItemBindable implements IVariantProvide setUnlocalizedName(Constants.Mod.MODID + ".scribe."); setRegistryName(Constants.BloodMagicItem.INSCRIPTION_TOOL.getRegName()); setHasSubtypes(true); - setLPUsed(100); } @Override diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java b/src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java index c5ba80ff..655476d6 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemLavaCrystal.java @@ -3,6 +3,7 @@ package WayofTime.bloodmagic.item; import java.util.ArrayList; import java.util.List; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.MobEffects; import net.minecraft.item.Item; @@ -19,20 +20,19 @@ import WayofTime.bloodmagic.client.IVariantProvider; import com.google.common.base.Strings; -public class ItemLavaCrystal extends ItemBindable implements IFuelHandler, IVariantProvider +public class ItemLavaCrystal extends ItemBindableBase implements IFuelHandler, IVariantProvider { public ItemLavaCrystal() { super(); setUnlocalizedName(Constants.Mod.MODID + ".lavaCrystal"); setRegistryName(Constants.BloodMagicItem.LAVA_CRYSTAL.getRegName()); - setLPUsed(25); } @Override public ItemStack getContainerItem(ItemStack itemStack) { - syphonNetwork(itemStack, getLPUsed()); + NetworkHelper.getSoulNetwork(this.getOwnerName(itemStack)).syphon(25); ItemStack copiedStack = itemStack.copy(); copiedStack.setItemDamage(copiedStack.getItemDamage()); copiedStack.stackSize = 1; @@ -63,14 +63,14 @@ public class ItemLavaCrystal extends ItemBindable implements IFuelHandler, IVari // return 200; // } - if (canSyphonFromNetwork(fuel, getLPUsed())) + if (NetworkHelper.canSyphonFromContainer(fuel, 25)) { return 200; } else { - if (!Strings.isNullOrEmpty(getBindableOwner(fuel))) + if (!Strings.isNullOrEmpty(this.getOwnerUUID(fuel))) { - EntityPlayer player = PlayerHelper.getPlayerFromUUID(getBindableOwner(fuel)); + EntityPlayer player = PlayerHelper.getPlayerFromUUID(this.getOwnerUUID(fuel)); if (player != null) { player.addPotionEffect(new PotionEffect(MobEffects.confusion, 99)); diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java b/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java index 7d0ea2a3..486f938c 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java @@ -146,7 +146,7 @@ public class ItemSacrificialDagger extends Item implements IVariantProvider double posX = player.posX; double posY = player.posY; double posZ = player.posZ; - world.playSound((EntityPlayer) null, player.posX, player.posY, player.posZ, SoundEvents.block_fire_extinguish, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); + world.playSound(null, posX, posY, posZ, SoundEvents.block_fire_extinguish, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); for (int l = 0; l < 8; ++l) world.spawnParticle(EnumParticleTypes.REDSTONE, posX + Math.random() - Math.random(), posY + Math.random() - Math.random(), posZ + Math.random() - Math.random(), 0, 0, 0); diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java b/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java index 7957f2a7..bfef04d0 100644 --- a/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java +++ b/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java @@ -26,7 +26,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -public class ItemTelepositionFocus extends ItemBindable implements IVariantProvider +public class ItemTelepositionFocus extends ItemBindableBase implements IVariantProvider { public static String[] names = { "weak", "enhanced", "reinforced", "demonic" }; diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java index d7baef9c..d2bfdd26 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java @@ -1,5 +1,6 @@ package WayofTime.bloodmagic.item.sigil; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.SoundEvents; import net.minecraft.item.ItemStack; @@ -37,12 +38,12 @@ public class ItemSigilAir extends ItemSigilBase player.motionY = vec.yCoord * wantedVelocity; player.motionZ = vec.zCoord * wantedVelocity; player.velocityChanged = true; - world.playSound((EntityPlayer) null, player.posX, player.posY, player.posZ, SoundEvents.block_fire_extinguish, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); + world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.block_fire_extinguish, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); player.fallDistance = 0; if (!player.capabilities.isCreativeMode) - this.setUnusable(stack, !syphonNetwork(stack, player, getLPUsed())); + this.setUnusable(stack, !NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())); } return super.onItemRightClick(stack, world, player, hand); diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java index 8bfc5b5f..ca546a2f 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBase.java @@ -4,12 +4,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import WayofTime.bloodmagic.api.impl.ItemSigil; import lombok.Getter; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -17,25 +15,20 @@ import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.iface.ISigil; -import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.client.IVariantProvider; -import WayofTime.bloodmagic.item.ItemBindable; import WayofTime.bloodmagic.util.helper.TextHelper; @Getter -public class ItemSigilBase extends ItemBindable implements ISigil, IVariantProvider +public class ItemSigilBase extends ItemSigil implements IVariantProvider { protected final String tooltipBase; private final String name; - private boolean toggleable; public ItemSigilBase(String name, int lpUsed) { - super(); + super(lpUsed); setUnlocalizedName(Constants.Mod.MODID + ".sigil." + name); - setLPUsed(lpUsed); this.name = name; this.tooltipBase = "tooltip.BloodMagic.sigil." + name + "."; @@ -46,12 +39,6 @@ public class ItemSigilBase extends ItemBindable implements ISigil, IVariantProvi this(name, 0); } - @Override - public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) - { - return super.onItemRightClick(stack, world, player, hand); - } - @Override @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) @@ -69,37 +56,4 @@ public class ItemSigilBase extends ItemBindable implements ISigil, IVariantProvi ret.add(new ImmutablePair(0, "type=normal")); return ret; } - - public void setToggleable() - { - this.toggleable = true; - } - - public boolean isUnusable(ItemStack stack) - { - NBTHelper.checkNBT(stack); - - return stack.getTagCompound().getBoolean(Constants.NBT.UNUSABLE); - } - - public ItemStack setUnusable(ItemStack stack, boolean unusable) - { - NBTHelper.checkNBT(stack); - - stack.getTagCompound().setBoolean(Constants.NBT.UNUSABLE, unusable); - return stack; - } - - public boolean getActivated(ItemStack stack) - { - return stack.getItemDamage() > 0; - } - - public ItemStack setActivated(ItemStack stack, boolean activated) - { - if (this.toggleable) - stack.setItemDamage(activated ? 1 : 0); - - return stack; - } } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java index 0272e9a6..66632525 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java @@ -45,7 +45,7 @@ public class ItemSigilBloodLight extends ItemSigilBase { world.setBlockState(blockPos, ModBlocks.bloodLight.getDefaultState()); if (!world.isRemote) - NetworkHelper.syphonAndDamage(NetworkHelper.getSoulNetwork(player), player, getLPUsed()); + NetworkHelper.syphonAndDamage(NetworkHelper.getSoulNetwork(player), player, getLpUsed()); resetCooldown(stack); player.swingArm(hand); return super.onItemRightClick(stack, world, player, hand); @@ -55,7 +55,7 @@ public class ItemSigilBloodLight extends ItemSigilBase if (!world.isRemote) { world.spawnEntityInWorld(new EntityBloodLight(world, player)); - NetworkHelper.syphonAndDamage(NetworkHelper.getSoulNetwork(player), player, getLPUsed()); + NetworkHelper.syphonAndDamage(NetworkHelper.getSoulNetwork(player), player, getLpUsed()); } resetCooldown(stack); } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java index d74cb249..f56dddbb 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilCompression.java @@ -7,7 +7,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.World; -public class ItemSigilCompression extends ItemSigilToggleable +public class ItemSigilCompression extends ItemSigilToggleableBase { public ItemSigilCompression() { diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilElementalAffinity.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilElementalAffinity.java index f4c731f0..6cc4c0e7 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilElementalAffinity.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilElementalAffinity.java @@ -7,7 +7,7 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; import WayofTime.bloodmagic.api.Constants; -public class ItemSigilElementalAffinity extends ItemSigilToggleable +public class ItemSigilElementalAffinity extends ItemSigilToggleableBase { public ItemSigilElementalAffinity() { diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java index ad7535a8..de944785 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java @@ -11,7 +11,7 @@ import net.minecraft.world.World; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.registry.ModPotions; -public class ItemSigilEnderSeverance extends ItemSigilToggleable +public class ItemSigilEnderSeverance extends ItemSigilToggleableBase { public ItemSigilEnderSeverance() { diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java index 2b8c47b6..f2a0739e 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java @@ -7,7 +7,7 @@ import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; import WayofTime.bloodmagic.api.Constants; -public class ItemSigilFastMiner extends ItemSigilToggleable +public class ItemSigilFastMiner extends ItemSigilToggleableBase { public ItemSigilFastMiner() { diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java index 7678f2f2..92c18537 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilGreenGrove.java @@ -12,7 +12,7 @@ import net.minecraftforge.common.IPlantable; import WayofTime.bloodmagic.api.BloodMagicAPI; import WayofTime.bloodmagic.api.Constants; -public class ItemSigilGreenGrove extends ItemSigilToggleable +public class ItemSigilGreenGrove extends ItemSigilToggleableBase { public ItemSigilGreenGrove() { diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java index 737f2659..b11023d4 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilHaste.java @@ -7,7 +7,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; -public class ItemSigilHaste extends ItemSigilToggleable +public class ItemSigilHaste extends ItemSigilToggleableBase { public ItemSigilHaste() { diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java index f8e67160..1ebd9b8c 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilLava.java @@ -1,5 +1,6 @@ package WayofTime.bloodmagic.item.sigil; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -60,7 +61,7 @@ public class ItemSigilLava extends ItemSigilBase return super.onItemRightClick(stack, world, player, hand); } - if (this.canPlaceLava(world, blockpos1) && syphonNetwork(stack, player, getLPUsed()) && this.tryPlaceLava(world, blockpos1)) + if (this.canPlaceLava(world, blockpos1) && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed()) && this.tryPlaceLava(world, blockpos1)) { return super.onItemRightClick(stack, world, player, hand); } @@ -89,7 +90,7 @@ public class ItemSigilLava extends ItemSigilBase FluidStack fluid = new FluidStack(FluidRegistry.LAVA, 1000); int amount = ((IFluidHandler) tile).fill(side, fluid, false); - if (amount > 0 && syphonNetwork(stack, player, getLPUsed())) + if (amount > 0 && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())) { ((IFluidHandler) tile).fill(side, fluid, true); } @@ -107,7 +108,7 @@ public class ItemSigilLava extends ItemSigilBase return EnumActionResult.FAIL; } - if (this.canPlaceLava(world, newPos) && syphonNetwork(stack, player, getLPUsed())) + if (this.canPlaceLava(world, newPos) && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())) { return this.tryPlaceLava(world, newPos) ? EnumActionResult.SUCCESS : EnumActionResult.FAIL; } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilMagnetism.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilMagnetism.java index 2aa491ed..4456ea0d 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilMagnetism.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilMagnetism.java @@ -10,7 +10,7 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.world.World; import WayofTime.bloodmagic.api.Constants; -public class ItemSigilMagnetism extends ItemSigilToggleable +public class ItemSigilMagnetism extends ItemSigilToggleableBase { public ItemSigilMagnetism() { diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilPhantomBridge.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilPhantomBridge.java index 86e2f4b8..2a461eeb 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilPhantomBridge.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilPhantomBridge.java @@ -7,7 +7,7 @@ import net.minecraft.world.World; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.registry.ModBlocks; -public class ItemSigilPhantomBridge extends ItemSigilToggleable +public class ItemSigilPhantomBridge extends ItemSigilToggleableBase { public ItemSigilPhantomBridge() { diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSuppression.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSuppression.java index cbb11b3f..893859e5 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSuppression.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilSuppression.java @@ -10,7 +10,7 @@ import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.tile.TileSpectralBlock; import WayofTime.bloodmagic.util.Utils; -public class ItemSigilSuppression extends ItemSigilToggleable +public class ItemSigilSuppression extends ItemSigilToggleableBase { public ItemSigilSuppression() { diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java new file mode 100644 index 00000000..b026b87d --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilToggleableBase.java @@ -0,0 +1,54 @@ +package WayofTime.bloodmagic.item.sigil; + +import java.util.ArrayList; +import java.util.List; + +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.impl.ItemSigilToggleable; +import WayofTime.bloodmagic.client.IVariantProvider; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; + +import WayofTime.bloodmagic.util.helper.TextHelper; + +public class ItemSigilToggleableBase extends ItemSigilToggleable implements IVariantProvider +{ + protected final String tooltipBase; + private final String name; + + public ItemSigilToggleableBase(String name, int lpUsed) + { + super(lpUsed); + setToggleable(); + + setUnlocalizedName(Constants.Mod.MODID + ".sigil." + name); + + this.name = name; + this.tooltipBase = "tooltip.BloodMagic.sigil." + name + "."; + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) + { + super.addInformation(stack, player, tooltip, advanced); + if (getActivated(stack)) + tooltip.add(TextHelper.localize("tooltip.BloodMagic.activated")); + else + tooltip.add(TextHelper.localize("tooltip.BloodMagic.deactivated")); + } + + @Override + public List> getVariants() + { + List> ret = new ArrayList>(); + ret.add(new ImmutablePair(0, "active=false")); + ret.add(new ImmutablePair(1, "active=true")); + return ret; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java index a23d2a92..ac42ee7f 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilTransposition.java @@ -2,6 +2,7 @@ package WayofTime.bloodmagic.item.sigil; import java.util.List; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.effect.EntityLightningBolt; @@ -73,7 +74,7 @@ public class ItemSigilTransposition extends ItemSigilBase { if (rightClickedBlock.getBlock().getPlayerRelativeBlockHardness(state, player, world, blockPos) >= 0 && rightClickedBlock.getBlock().getBlockHardness(state, world, blockPos) >= 0) { - int cost = getLPUsed(); + int cost = getLpUsed(); NBTTagCompound tileNBTTag = new NBTTagCompound(); String blockName = rightClickedBlock.getBlock().getRegistryName(); @@ -94,7 +95,7 @@ public class ItemSigilTransposition extends ItemSigilBase stack.getTagCompound().setByte(Constants.NBT.CONTAINED_BLOCK_META, metadata); stack.getTagCompound().setTag(Constants.NBT.CONTAINED_TILE_ENTITY, tileNBTTag); - syphonNetwork(stack, player, cost); + NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, cost); lightning(world, blockPos); world.removeTileEntity(blockPos); diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java index a8e1a221..cb0af14d 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilVoid.java @@ -1,5 +1,6 @@ package WayofTime.bloodmagic.item.sigil; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -56,7 +57,7 @@ public class ItemSigilVoid extends ItemSigilBase return super.onItemRightClick(stack, world, player, hand); } - if (world.getBlockState(blockpos).getBlock().getMaterial(world.getBlockState(blockpos)).isLiquid() && syphonNetwork(stack, player, getLPUsed())) + if (world.getBlockState(blockpos).getBlock().getMaterial(world.getBlockState(blockpos)).isLiquid() && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())) { world.setBlockToAir(blockpos); return super.onItemRightClick(stack, world, player, hand); @@ -68,7 +69,7 @@ public class ItemSigilVoid extends ItemSigilBase } if (!player.capabilities.isCreativeMode) - this.setUnusable(stack, !syphonNetwork(stack, player, getLPUsed())); + this.setUnusable(stack, !NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())); } return super.onItemRightClick(stack, world, player, hand); @@ -92,7 +93,7 @@ public class ItemSigilVoid extends ItemSigilBase { FluidStack amount = ((IFluidHandler) tile).drain(side, 1000, false); - if (amount != null && amount.amount > 0 && syphonNetwork(stack, player, getLPUsed())) + if (amount != null && amount.amount > 0 && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())) { ((IFluidHandler) tile).drain(side, 1000, true); return EnumActionResult.SUCCESS; @@ -108,7 +109,7 @@ public class ItemSigilVoid extends ItemSigilBase return EnumActionResult.FAIL; } - if (world.getBlockState(newPos).getBlock() instanceof IFluidBlock && syphonNetwork(stack, player, getLPUsed())) + if (world.getBlockState(newPos).getBlock() instanceof IFluidBlock && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())) { world.setBlockToAir(newPos); return EnumActionResult.SUCCESS; diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java index f9fced5f..0218fe03 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWater.java @@ -1,5 +1,6 @@ package WayofTime.bloodmagic.item.sigil; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; import net.minecraft.block.BlockCauldron; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; @@ -57,7 +58,7 @@ public class ItemSigilWater extends ItemSigilBase if (!player.canPlayerEdit(blockpos1, movingobjectposition.sideHit, stack)) return super.onItemRightClick(stack, world, player, hand); - if (this.canPlaceWater(world, blockpos1) && syphonNetwork(stack, player, getLPUsed()) && this.tryPlaceWater(world, blockpos1)) + if (this.canPlaceWater(world, blockpos1) && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed()) && this.tryPlaceWater(world, blockpos1)) return super.onItemRightClick(stack, world, player, hand); } } @@ -81,19 +82,19 @@ public class ItemSigilWater extends ItemSigilBase FluidStack fluid = new FluidStack(FluidRegistry.WATER, 1000); int amount = ((IFluidHandler) tile).fill(side, fluid, false); - if (amount > 0 && syphonNetwork(stack, player, getLPUsed())) + if (amount > 0 && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())) ((IFluidHandler) tile).fill(side, fluid, true); return EnumActionResult.FAIL; } - if (world.getBlockState(blockPos).getBlock() == Blocks.cauldron && syphonNetwork(stack, player, getLPUsed())) + if (world.getBlockState(blockPos).getBlock() == Blocks.cauldron && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed())) { world.setBlockState(blockPos, Blocks.cauldron.getDefaultState().withProperty(BlockCauldron.LEVEL, 3)); return EnumActionResult.SUCCESS; } BlockPos newPos = blockPos.offset(side); - return (player.canPlayerEdit(newPos, side, stack) && this.canPlaceWater(world, newPos) && syphonNetwork(stack, player, getLPUsed()) && this.tryPlaceWater(world, newPos)) ? EnumActionResult.SUCCESS : EnumActionResult.FAIL; + return (player.canPlayerEdit(newPos, side, stack) && this.canPlaceWater(world, newPos) && NetworkHelper.getSoulNetwork(player).syphonAndDamage(player, getLpUsed()) && this.tryPlaceWater(world, newPos)) ? EnumActionResult.SUCCESS : EnumActionResult.FAIL; } public boolean canPlaceWater(World world, BlockPos blockPos) diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWhirlwind.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWhirlwind.java index 7e9594c0..d3a25711 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWhirlwind.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilWhirlwind.java @@ -7,7 +7,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; -public class ItemSigilWhirlwind extends ItemSigilToggleable +public class ItemSigilWhirlwind extends ItemSigilToggleableBase { public ItemSigilWhirlwind() { diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java b/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java index 7ab0d913..fccfdcd6 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java @@ -6,8 +6,8 @@ import WayofTime.bloodmagic.api.event.TeleposeEvent; import WayofTime.bloodmagic.api.teleport.TeleportQueue; import WayofTime.bloodmagic.api.util.helper.NBTHelper; import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import WayofTime.bloodmagic.block.BlockTeleposer; -import WayofTime.bloodmagic.item.ItemBindable; import WayofTime.bloodmagic.item.ItemTelepositionFocus; import WayofTime.bloodmagic.ritual.portal.Teleports; import com.google.common.base.Strings; @@ -86,8 +86,7 @@ public class TileTeleposer extends TileInventory implements ITickable final int focusLevel = (teleposer.getStackInSlot(0).getItemDamage() + 1); final int lpToBeDrained = (int) (0.5F * Math.sqrt((pos.getX() - focusPos.getX()) * (pos.getX() - focusPos.getX()) + (pos.getY() - focusPos.getY() + 1) * (pos.getY() - focusPos.getY() + 1) + (pos.getZ() - focusPos.getZ()) * (pos.getZ() - focusPos.getZ()))); - //TODO MAKE THIS SYPHON LP BETTER - if (ItemBindable.syphonNetwork(teleposer.getStackInSlot(0), lpToBeDrained * (focusLevel * 2 - 1) * (focusLevel * 2 - 1) * (focusLevel * 2 - 1))) + if (NetworkHelper.getSoulNetwork(focus.getOwnerUUID(focusStack)).syphonAndDamage(PlayerHelper.getPlayerFromUUID(focus.getOwnerUUID(focusStack)), lpToBeDrained * (focusLevel * 2 - 1) * (focusLevel * 2 - 1) * (focusLevel * 2 - 1))) { int blocksTransported = 0; @@ -156,7 +155,7 @@ public class TileTeleposer extends TileInventory implements ITickable private boolean canInitiateTeleport(TileTeleposer teleposer) { - return teleposer.getStackInSlot(0) != null && teleposer.getStackInSlot(0).getItem() instanceof ItemTelepositionFocus && !Strings.isNullOrEmpty(((ItemTelepositionFocus) teleposer.getStackInSlot(0).getItem()).getBindableOwner(teleposer.getStackInSlot(0))); + return teleposer.getStackInSlot(0) != null && teleposer.getStackInSlot(0).getItem() instanceof ItemTelepositionFocus && !Strings.isNullOrEmpty(((ItemTelepositionFocus) teleposer.getStackInSlot(0).getItem()).getOwnerName(teleposer.getStackInSlot(0))); } public static boolean teleportBlocks(Object caller, World initialWorld, BlockPos initialPos, World finalWorld, BlockPos finalPos)