From a0cd54969b3f43c1d3c891a3335abf8a153c575f Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Sun, 8 Oct 2017 21:42:40 -0700 Subject: [PATCH] Begin Sigil migration --- .../WayofTime/bloodmagic/api/Constants.java | 5 +- .../bloodmagic/api/iface/IBindable.java | 16 +- .../bloodmagic/api/impl/ItemBindable.java | 4 +- .../provider/DataProviderBloodAltar.java | 2 +- .../core/RegistrarBloodMagicItems.java | 18 ++- .../bloodmagic/item/sigil/ItemSigilAir.java | 73 --------- .../item/sigil/ItemSigilBloodLight.java | 82 ---------- .../item/sigil/ItemSigilBounce.java | 22 --- .../bloodmagic/item/sigil/ItemSigilClaw.java | 22 --- .../item/sigil/ItemSigilDivination.java | 98 ------------ .../item/sigil/ItemSigilEnderSeverance.java | 30 ---- .../item/sigil/ItemSigilFastMiner.java | 52 ------ .../bloodmagic/item/sigil/ItemSigilFrost.java | 21 --- .../bloodmagic/item/sigil/sigil/ISigil.java | 51 ++++++ .../item/sigil/sigil/ItemSigil.java | 148 ++++++++++++++++++ .../item/sigil/sigil/ItemSigilDivination.java | 81 ++++++++++ .../bloodmagic/item/sigil/sigil/SigilAir.java | 52 ++++++ .../item/sigil/sigil/SigilBloodLight.java | 55 +++++++ .../item/sigil/sigil/SigilBounce.java | 22 +++ .../item/sigil/sigil/SigilClaw.java | 22 +++ .../SigilElementalAffinity.java} | 20 +-- .../item/sigil/sigil/SigilEnderSeverance.java | 26 +++ .../item/sigil/sigil/SigilFastMiner.java | 48 ++++++ .../item/sigil/sigil/SigilFrost.java | 21 +++ .../item/sigil/sigil/SigilHolding.java | 53 +++++++ .../java/WayofTime/bloodmagic/util/Utils.java | 25 ++- .../util/handler/event/GenericHandler.java | 9 ++ 27 files changed, 648 insertions(+), 430 deletions(-) delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBounce.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilClaw.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java delete mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFrost.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ISigil.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigil.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigilDivination.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilAir.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilBloodLight.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilBounce.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilClaw.java rename src/main/java/WayofTime/bloodmagic/item/sigil/{ItemSigilElementalAffinity.java => sigil/SigilElementalAffinity.java} (52%) create mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilEnderSeverance.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFastMiner.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFrost.java create mode 100644 src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilHolding.java diff --git a/src/main/java/WayofTime/bloodmagic/api/Constants.java b/src/main/java/WayofTime/bloodmagic/api/Constants.java index 4ead21b0..7a7640d7 100644 --- a/src/main/java/WayofTime/bloodmagic/api/Constants.java +++ b/src/main/java/WayofTime/bloodmagic/api/Constants.java @@ -7,10 +7,11 @@ import net.minecraftforge.fml.common.registry.ForgeRegistries; import java.util.Locale; +@Deprecated public class Constants { public static class NBT { - public static final String OWNER_UUID = "ownerUUID"; - public static final String OWNER_NAME = "ownerNAME"; + public static final String OWNER_UUID = "uuid"; + public static final String OWNER_NAME = "name"; public static final String USES = "uses"; public static final String ACTIVATED = "activated"; public static final String UNUSABLE = "unusable"; diff --git a/src/main/java/WayofTime/bloodmagic/api/iface/IBindable.java b/src/main/java/WayofTime/bloodmagic/api/iface/IBindable.java index 5b515342..dee1f4c6 100644 --- a/src/main/java/WayofTime/bloodmagic/api/iface/IBindable.java +++ b/src/main/java/WayofTime/bloodmagic/api/iface/IBindable.java @@ -3,6 +3,8 @@ package WayofTime.bloodmagic.api.iface; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import javax.annotation.Nullable; + /** * Implement this interface on any Item that can be bound to a player. */ @@ -16,7 +18,10 @@ public interface IBindable { * @param stack - The owned ItemStack * @return - The username of the Item's owner */ - String getOwnerName(ItemStack stack); + @Nullable + default String getOwnerName(ItemStack stack) { + return !stack.isEmpty() && stack.hasTagCompound() ? stack.getTagCompound().getString("name") : null; + } /** * Gets the UUID of the Item's owner. @@ -26,7 +31,10 @@ public interface IBindable { * @param stack - The owned ItemStack * @return - The UUID of the Item's owner */ - String getOwnerUUID(ItemStack stack); + @Nullable + default String getOwnerUUID(ItemStack stack) { + return !stack.isEmpty() && stack.hasTagCompound() ? stack.getTagCompound().getString("uuid") : null; + } /** * Called when the player attempts to bind the item. @@ -35,5 +43,7 @@ public interface IBindable { * @param stack - The ItemStack to attempt binding * @return If binding was successful. */ - boolean onBind(EntityPlayer player, ItemStack stack); + default boolean onBind(EntityPlayer player, ItemStack stack) { + return true; + } } diff --git a/src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java b/src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java index 11fe41a2..38a0b4c4 100644 --- a/src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java +++ b/src/main/java/WayofTime/bloodmagic/api/impl/ItemBindable.java @@ -25,11 +25,11 @@ public class ItemBindable extends Item implements IBindable { @Override public String getOwnerName(ItemStack stack) { - return !stack.isEmpty() ? stack.getTagCompound().getString(Constants.NBT.OWNER_NAME) : null; + return !stack.isEmpty() && stack.hasTagCompound() ? stack.getTagCompound().getString(Constants.NBT.OWNER_NAME) : null; } @Override public String getOwnerUUID(ItemStack stack) { - return !stack.isEmpty() ? stack.getTagCompound().getString(Constants.NBT.OWNER_UUID) : null; + return !stack.isEmpty() && stack.hasTagCompound() ? stack.getTagCompound().getString(Constants.NBT.OWNER_UUID) : null; } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java b/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java index 9e3ddf39..f7be07dc 100644 --- a/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java +++ b/src/main/java/WayofTime/bloodmagic/compat/waila/provider/DataProviderBloodAltar.java @@ -4,8 +4,8 @@ import WayofTime.bloodmagic.ConfigHandler; import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.block.BlockAltar; import WayofTime.bloodmagic.core.RegistrarBloodMagicItems; -import WayofTime.bloodmagic.item.sigil.ItemSigilDivination; import WayofTime.bloodmagic.item.sigil.ItemSigilSeer; +import WayofTime.bloodmagic.item.sigil.sigil.ItemSigilDivination; import WayofTime.bloodmagic.tile.TileAltar; import WayofTime.bloodmagic.util.helper.TextHelper; import mcp.mobius.waila.api.IWailaConfigHandler; diff --git a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicItems.java b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicItems.java index 8d046c24..40dccbcb 100644 --- a/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicItems.java +++ b/src/main/java/WayofTime/bloodmagic/core/RegistrarBloodMagicItems.java @@ -15,6 +15,8 @@ import WayofTime.bloodmagic.item.routing.ItemFluidRouterFilter; import WayofTime.bloodmagic.item.routing.ItemNodeRouter; import WayofTime.bloodmagic.item.routing.ItemRouterFilter; import WayofTime.bloodmagic.item.sigil.*; +import WayofTime.bloodmagic.item.sigil.sigil.*; +import WayofTime.bloodmagic.item.sigil.sigil.ItemSigilDivination; import WayofTime.bloodmagic.item.soul.*; import WayofTime.bloodmagic.item.types.ComponentType; import WayofTime.bloodmagic.item.types.ReagentType; @@ -146,28 +148,28 @@ public class RegistrarBloodMagicItems { new ItemBoundAxe().setRegistryName("bound_axe"), new ItemBoundShovel().setRegistryName("bound_shovel"), new ItemSigilDivination().setRegistryName("sigil_divination"), - new ItemSigilAir().setRegistryName("sigil_air"), + new ItemSigil(new SigilAir(), "air").setRegistryName("sigil_air"), new ItemSigilWater().setRegistryName("sigil_water"), new ItemSigilLava().setRegistryName("sigil_lava"), new ItemSigilVoid().setRegistryName("sigil_void"), new ItemSigilGreenGrove().setRegistryName("sigil_green_grove"), - new ItemSigilBloodLight().setRegistryName("sigil_blood_light"), - new ItemSigilElementalAffinity().setRegistryName("sigil_elemental_affinity"), + new ItemSigil(new SigilBloodLight(), "blood_light").setRegistryName("sigil_blood_light"), + new ItemSigil(new SigilElementalAffinity(), "elemental_affinity").setRegistryName("sigil_elemental_affinity"), new ItemSigilMagnetism().setRegistryName("sigil_magnetism"), new ItemSigilSuppression().setRegistryName("sigil_suppression"), new ItemSigilHaste().setRegistryName("sigil_haste"), - new ItemSigilFastMiner().setRegistryName("sigil_fast_miner"), + new ItemSigil(new SigilFastMiner(), "fast_miner").setRegistryName("sigil_fast_miner"), new ItemSigilSeer().setRegistryName("sigil_seer"), new ItemSigilPhantomBridge().setRegistryName("sigil_phantom_bridge"), new ItemSigilWhirlwind().setRegistryName("sigil_whirlwind"), new ItemSigilCompression().setRegistryName("sigil_compression"), - new ItemSigilEnderSeverance().setRegistryName("sigil_ender_severance"), + new ItemSigil(new SigilEnderSeverance(), "ender_severance").setRegistryName("sigil_ender_severance"), new ItemSigilHolding().setRegistryName("sigil_holding"), new ItemSigilTeleposition().setRegistryName("sigil_teleposition"), new ItemSigilTransposition().setRegistryName("sigil_transposition"), - new ItemSigilClaw().setRegistryName("sigil_claw"), - new ItemSigilBounce().setRegistryName("sigil_bounce"), - new ItemSigilFrost().setRegistryName("sigil_frost"), + new ItemSigil(new SigilClaw(), "claw").setRegistryName("sigil_claw"), + new ItemSigil(new SigilBounce(), "bounce").setRegistryName("sigil_bounce"), + new ItemSigil(new SigilFrost(), "frost").setRegistryName("sigil_frost"), new ItemEnum<>(ComponentType.class, "component").setRegistryName("component"), new ItemEnum<>(ReagentType.class, "reagent").setRegistryName("reagent"), new ItemDemonCrystal().setRegistryName("item_demon_crystal"), diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java deleted file mode 100644 index 885f02b5..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilAir.java +++ /dev/null @@ -1,73 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.iface.ISentientSwordEffectProvider; -import WayofTime.bloodmagic.api.iface.ISigil; -import WayofTime.bloodmagic.api.soul.EnumDemonWillType; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.init.SoundEvents; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; - -public class ItemSigilAir extends ItemSigilBase implements ISentientSwordEffectProvider { - public ItemSigilAir() { - super("air", 50); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - boolean unusable = isUnusable(stack); - if (world.isRemote && !unusable) { - Vec3d vec = player.getLookVec(); - double wantedVelocity = 1.7; - - // TODO - Revisit after potions - if (player.isPotionActive(RegistrarBloodMagic.BOOST)) { - int amplifier = player.getActivePotionEffect(RegistrarBloodMagic.BOOST).getAmplifier(); - wantedVelocity += (1 + amplifier) * (0.35); - } - - player.motionX = vec.x * wantedVelocity; - player.motionY = vec.y * wantedVelocity; - player.motionZ = vec.z * wantedVelocity; - 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); - } - - if (!world.isRemote) { - if (!player.capabilities.isCreativeMode) - this.setUnusable(stack, !NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed())); - - if (!unusable) - player.fallDistance = 0; - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public boolean applyOnHitEffect(EnumDemonWillType type, ItemStack swordStack, ItemStack providerStack, EntityLivingBase attacker, EntityLivingBase target) { - target.addPotionEffect(new PotionEffect(MobEffects.LEVITATION, 200, 0)); - return true; - } - - @Override - public boolean providesEffectForWill(EnumDemonWillType type) { - return false; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java deleted file mode 100644 index 5f9fd16a..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBloodLight.java +++ /dev/null @@ -1,82 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.Constants; -import WayofTime.bloodmagic.api.iface.ISigil; -import WayofTime.bloodmagic.api.util.helper.NBTHelper; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; -import WayofTime.bloodmagic.entity.projectile.EntityBloodLight; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.world.World; - -public class ItemSigilBloodLight extends ItemSigilBase { - public ItemSigilBloodLight() { - super("blood_light", 10); - } - - @Override - public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) { - if (getCooldownRemainder(stack) > 0) - reduceCooldown(stack); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - RayTraceResult mop = this.rayTrace(world, player, false); - - if (getCooldownRemainder(stack) > 0) - return super.onItemRightClick(world, player, hand); - - if (mop != null && mop.typeOfHit == RayTraceResult.Type.BLOCK) { - BlockPos blockPos = mop.getBlockPos().offset(mop.sideHit); - - if (world.isAirBlock(blockPos)) { - world.setBlockState(blockPos, RegistrarBloodMagicBlocks.BLOOD_LIGHT.getDefaultState()); - if (!world.isRemote) - NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed()); - resetCooldown(stack); - player.swingArm(hand); - return super.onItemRightClick(world, player, hand); - } - } else { - if (!world.isRemote) { - world.spawnEntity(new EntityBloodLight(world, player)); - NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getLpUsed()); - } - resetCooldown(stack); - } - - return super.onItemRightClick(world, player, hand); - } - - @Override - public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { - return oldStack.getItem() != newStack.getItem(); - } - - public int getCooldownRemainder(ItemStack stack) { - return NBTHelper.checkNBT(stack).getTagCompound().getInteger(Constants.NBT.TICKS_REMAINING); - } - - public void reduceCooldown(ItemStack stack) { - NBTHelper.checkNBT(stack).getTagCompound().setInteger(Constants.NBT.TICKS_REMAINING, getCooldownRemainder(stack) - 1); - } - - public void resetCooldown(ItemStack stack) { - NBTHelper.checkNBT(stack).getTagCompound().setInteger(Constants.NBT.TICKS_REMAINING, 10); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBounce.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBounce.java deleted file mode 100644 index 37a6eccb..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilBounce.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class ItemSigilBounce extends ItemSigilToggleableBase { - public ItemSigilBounce() { - super("bounce", 100); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.BOUNCE, 2, 0, true, false)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilClaw.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilClaw.java deleted file mode 100644 index 44753b5b..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilClaw.java +++ /dev/null @@ -1,22 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -public class ItemSigilClaw extends ItemSigilToggleableBase { - public ItemSigilClaw() { - super("claw", 100); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.CLING, 2, 0, true, false)); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java deleted file mode 100644 index bc77fa24..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilDivination.java +++ /dev/null @@ -1,98 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.altar.IBloodAltar; -import WayofTime.bloodmagic.api.iface.IAltarReader; -import WayofTime.bloodmagic.api.iface.ISigil; -import WayofTime.bloodmagic.api.util.helper.NetworkHelper; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.tile.TileIncenseAltar; -import WayofTime.bloodmagic.tile.TileInversionPillar; -import WayofTime.bloodmagic.util.ChatUtil; -import WayofTime.bloodmagic.util.helper.NumeralHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.EnumActionResult; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; - -import java.util.ArrayList; -import java.util.List; - -public class ItemSigilDivination extends ItemSigilBase implements IAltarReader { - public ItemSigilDivination() { - super("divination"); - } - - @Override - public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { -// if (world instanceof WorldServer) -// { -// System.out.println("Testing..."); -//// BuildTestStructure s = new BuildTestStructure(); -//// s.placeStructureAtPosition(new Random(), Rotation.CLOCKWISE_180, (WorldServer) world, player.getPosition(), 0); -// DungeonTester.testDungeonElementWithOutput((WorldServer) world, player.getPosition()); -// } - -// if (!world.isRemote) -// { -// EntityCorruptedSheep fred = new EntityCorruptedSheep(world, EnumDemonWillType.DESTRUCTIVE); -// fred.setPosition(player.posX, player.posY, player.posZ); -// world.spawnEntityInWorld(fred); -// } - ItemStack stack = player.getHeldItem(hand); - if (stack.getItem() instanceof ISigil.Holding) - stack = ((Holding) stack.getItem()).getHeldItem(stack, player); - - if (PlayerHelper.isFakePlayer(player)) - return ActionResult.newResult(EnumActionResult.FAIL, stack); - - if (!world.isRemote) { - super.onItemRightClick(world, player, hand); - - RayTraceResult position = rayTrace(world, player, false); - - if (position == null) { - int currentEssence = NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).getCurrentEssence(); - List toSend = new ArrayList(); - if (!getOwnerName(stack).equals(PlayerHelper.getUsernameFromPlayer(player))) - toSend.add(new TextComponentTranslation(tooltipBase + "otherNetwork", getOwnerName(stack))); - toSend.add(new TextComponentTranslation(tooltipBase + "currentEssence", currentEssence)); - ChatUtil.sendNoSpam(player, toSend.toArray(new ITextComponent[toSend.size()])); - } else { - if (position.typeOfHit == RayTraceResult.Type.BLOCK) { - TileEntity tile = world.getTileEntity(position.getBlockPos()); - - if (tile != null && tile instanceof IBloodAltar) { - IBloodAltar altar = (IBloodAltar) tile; - int tier = altar.getTier().ordinal() + 1; - int currentEssence = altar.getCurrentBlood(); - int capacity = altar.getCapacity(); - altar.checkTier(); - ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentAltarTier", NumeralHelper.toRoman(tier)), new TextComponentTranslation(tooltipBase + "currentEssence", currentEssence), new TextComponentTranslation(tooltipBase + "currentAltarCapacity", capacity)); - } else if (tile != null && tile instanceof TileIncenseAltar) { - TileIncenseAltar altar = (TileIncenseAltar) tile; - altar.recheckConstruction(); - double tranquility = altar.tranquility; - ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentTranquility", (int) ((100D * (int) (100 * tranquility)) / 100d)), new TextComponentTranslation(tooltipBase + "currentBonus", (int) (100 * altar.incenseAddition))); - } else if (tile != null && tile instanceof TileInversionPillar) { - TileInversionPillar pillar = (TileInversionPillar) tile; - double inversion = pillar.getCurrentInversion(); - ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentInversion", ((int) (10 * inversion)) / 10d)); - } else - - { - int currentEssence = NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).getCurrentEssence(); - ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentEssence", currentEssence)); - } - } - } - } - - return super.onItemRightClick(world, player, hand); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java deleted file mode 100644 index 855c29ab..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilEnderSeverance.java +++ /dev/null @@ -1,30 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import WayofTime.bloodmagic.core.RegistrarBloodMagic; -import net.minecraft.entity.Entity; -import net.minecraft.entity.monster.EntityEnderman; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.World; - -import java.util.List; - -public class ItemSigilEnderSeverance extends ItemSigilToggleableBase { - public ItemSigilEnderSeverance() { - super("ender_severance", 200); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - List entityList = world.getEntitiesWithinAABB(Entity.class, new net.minecraft.util.math.AxisAlignedBB(player.posX - 4.5, player.posY - 4.5, player.posZ - 4.5, player.posX + 4.5, player.posY + 4.5, player.posZ + 4.5)); - for (Entity entity : entityList) { - if (entity instanceof EntityEnderman) - ((EntityEnderman) entity).addPotionEffect(new PotionEffect(RegistrarBloodMagic.PLANAR_BINDING, 40, 0)); - } - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java deleted file mode 100644 index 8c6b1a27..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFastMiner.java +++ /dev/null @@ -1,52 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.BloodMagicAPI; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.MobEffects; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; - -import java.util.List; - -public class ItemSigilFastMiner extends ItemSigilToggleableBase { - public ItemSigilFastMiner() { - super("fast_miner", 100); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - player.addPotionEffect(new PotionEffect(MobEffects.HASTE, 2, 0, true, false)); - } - - @Override - public boolean performArrayEffect(World world, BlockPos pos) { - double radius = 10; - int ticks = 600; - int potionPotency = 2; - - AxisAlignedBB bb = new AxisAlignedBB(pos).grow(radius); - List playerList = world.getEntitiesWithinAABB(EntityPlayer.class, bb); - for (EntityPlayer player : playerList) { - if (!player.isPotionActive(MobEffects.HASTE) || (player.isPotionActive(MobEffects.HASTE) && player.getActivePotionEffect(MobEffects.HASTE).getAmplifier() < potionPotency)) { - player.addPotionEffect(new PotionEffect(MobEffects.HASTE, ticks, potionPotency)); - if (!player.capabilities.isCreativeMode) { - player.hurtResistantTime = 0; - player.attackEntityFrom(BloodMagicAPI.damageSource, 1.0F); - } - } - } - - return false; - } - - @Override - public boolean hasArrayEffect() { - return true; - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFrost.java b/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFrost.java deleted file mode 100644 index dfaab6cd..00000000 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilFrost.java +++ /dev/null @@ -1,21 +0,0 @@ -package WayofTime.bloodmagic.item.sigil; - -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; -import net.minecraft.enchantment.EnchantmentFrostWalker; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public class ItemSigilFrost extends ItemSigilToggleableBase { - public ItemSigilFrost() { - super("frost", 100); - } - - @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - - EnchantmentFrostWalker.freezeNearby(player, world, player.getPosition(), 1); - } -} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ISigil.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ISigil.java new file mode 100644 index 00000000..ddee7954 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ISigil.java @@ -0,0 +1,51 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.api.iface.IBindable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; + +public interface ISigil extends IBindable { + + @Nonnull + default EnumActionResult onRightClick(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull EnumHand hand) { + return EnumActionResult.PASS; + } + + default EnumActionResult onInteract(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull EnumFacing side, @Nonnull EnumHand hand) { + return EnumActionResult.PASS; + } + + @Nonnegative + int getCost(); + + interface Toggle extends ISigil { + + default void onToggle(boolean active, @Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull EnumHand hand) { + + } + + default void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnegative int itemSlot, boolean isHeld) { + + } + } + + interface Holding extends ISigil { + + int getSize(ItemStack stack); + + int getEquippedSigil(ItemStack stack); + + NonNullList getHeldSigils(ItemStack stack); + + void setHeldSigils(ItemStack stack, NonNullList inventory); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigil.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigil.java new file mode 100644 index 00000000..1550549c --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigil.java @@ -0,0 +1,148 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.BloodMagic; +import WayofTime.bloodmagic.api.iface.IBindable; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.api.util.helper.PlayerHelper; +import WayofTime.bloodmagic.client.IMeshProvider; +import com.google.common.collect.Lists; +import net.minecraft.client.renderer.ItemMeshDefinition; +import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import javax.annotation.Nullable; +import java.util.List; + +public class ItemSigil extends Item implements IBindable, IMeshProvider { + + private final ISigil sigil; + + public ItemSigil(ISigil sigil, String name) { + this.sigil = sigil; + + setCreativeTab(BloodMagic.TAB_BM); + setUnlocalizedName(BloodMagic.MODID + ".sigil." + name); + setMaxStackSize(1); + } + + @Override + public ActionResult onItemRightClick(World world, EntityPlayer player, EnumHand hand) { + if (PlayerHelper.isFakePlayer(player)) + return ActionResult.newResult(EnumActionResult.FAIL, player.getHeldItem(hand)); + + ItemStack sigilStack = getSigilStack(player, hand); + if (getOwnerUUID(sigilStack) == null) + return ActionResult.newResult(EnumActionResult.FAIL, player.getHeldItem(hand)); + + if (sigil instanceof ISigil.Toggle && player.isSneaking()) { + boolean newState = toggleState(sigilStack); + ((ISigil.Toggle) sigil).onToggle(newState, sigilStack, player, world, hand); + return ActionResult.newResult(EnumActionResult.SUCCESS, player.getHeldItem(hand)); + } + + return ActionResult.newResult(sigil.onRightClick(sigilStack, player, world, hand), player.getHeldItem(hand)); + } + + @Override + public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { + if (PlayerHelper.isFakePlayer(player)) + return EnumActionResult.FAIL; + + return sigil.onInteract(getSigilStack(player, hand), player, world, pos, facing, hand); + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected) { + if (!(entity instanceof EntityPlayer) || PlayerHelper.isFakePlayer((EntityPlayer) entity)) + return; + + ItemStack sigilStack = stack; + if (sigil instanceof ISigil.Holding) { + ISigil.Holding holding = (ISigil.Holding) sigil; + int current = holding.getEquippedSigil(stack); + sigilStack = holding.getHeldSigils(stack).get(current); + } + + if (sigil instanceof ISigil.Toggle && isActive(sigilStack)) { + ((ISigil.Toggle) sigil).onUpdate(sigilStack, (EntityPlayer) entity, world, itemSlot, isSelected); + if (entity.ticksExisted % 100 == 0) + NetworkHelper.getSoulNetwork(getOwnerUUID(sigilStack)).syphonAndDamage((EntityPlayer) entity, sigil.getCost()); + } + } + + @Override + public String getOwnerName(ItemStack stack) { + return sigil.getOwnerName(stack); + } + + @Override + public String getOwnerUUID(ItemStack stack) { + return sigil.getOwnerUUID(stack); + } + + public boolean toggleState(ItemStack stack) { + if (!stack.hasTagCompound()) + return false; + + boolean newState = !isActive(stack); + stack.getTagCompound().setBoolean("active", newState); + return newState; + } + + public boolean isActive(ItemStack stack) { + return stack.hasTagCompound() && stack.getTagCompound().getBoolean("active"); + } + + // TODO - Need to get ISigil from holding stack + public ItemStack getSigilStack(EntityPlayer player, EnumHand hand) { + ItemStack held = player.getHeldItem(hand); + + if (sigil instanceof ISigil.Holding) { + ISigil.Holding holding = (ISigil.Holding) sigil; + int current = holding.getEquippedSigil(held); + return holding.getHeldSigils(held).get(current); + } + + return held; + } + + @Override + public boolean onBind(EntityPlayer player, ItemStack stack) { + return sigil.onBind(player, stack); + } + + @SideOnly(Side.CLIENT) + @Override + public ItemMeshDefinition getMeshDefinition() { + return s -> { + if (!(sigil instanceof ISigil.Toggle)) + return new ModelResourceLocation(s.getItem().getRegistryName(), "inventory"); + + return new ModelResourceLocation(s.getItem().getRegistryName(), "active=" + isActive(s)); + }; + } + + @Override + public List getVariants() { + if (sigil instanceof ISigil.Toggle) { + return Lists.newArrayList( + "active=true", + "active=false" + ); + } else return Lists.newArrayList("inventory"); + } + + @Nullable + @Override + public ResourceLocation getCustomLocation() { + return null; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigilDivination.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigilDivination.java new file mode 100644 index 00000000..517a96f8 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/ItemSigilDivination.java @@ -0,0 +1,81 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.api.altar.IBloodAltar; +import WayofTime.bloodmagic.api.iface.IAltarReader; +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.api.util.helper.PlayerHelper; +import WayofTime.bloodmagic.tile.TileIncenseAltar; +import WayofTime.bloodmagic.tile.TileInversionPillar; +import WayofTime.bloodmagic.util.ChatUtil; +import WayofTime.bloodmagic.util.Utils; +import WayofTime.bloodmagic.util.helper.NumeralHelper; +import com.google.common.collect.Lists; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; +import java.util.List; + +public class ItemSigilDivination extends ItemSigil implements IAltarReader { + + public ItemSigilDivination() { + super(new SigilDivination(), "divination"); + } + + public static class SigilDivination implements ISigil { + + @Nonnull + @Override + public EnumActionResult onRightClick(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull EnumHand hand) { + RayTraceResult rayTrace = Utils.rayTrace(player, false); + if (rayTrace == null || rayTrace.typeOfHit == RayTraceResult.Type.MISS) { + printNetworkInformation(stack, player); + } else if (rayTrace.typeOfHit == RayTraceResult.Type.BLOCK) { + TileEntity tile = world.getTileEntity(rayTrace.getBlockPos()); + + String tooltipBase = "tooltip.bloodmagic.sigil.divination."; + if (tile != null && tile instanceof IBloodAltar) { + IBloodAltar altar = (IBloodAltar) tile; + int tier = altar.getTier().ordinal() + 1; + int currentEssence = altar.getCurrentBlood(); + int capacity = altar.getCapacity(); + altar.checkTier(); + ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentAltarTier", NumeralHelper.toRoman(tier)), new TextComponentTranslation(tooltipBase + "currentEssence", currentEssence), new TextComponentTranslation(tooltipBase + "currentAltarCapacity", capacity)); + } else if (tile != null && tile instanceof TileIncenseAltar) { + TileIncenseAltar altar = (TileIncenseAltar) tile; + altar.recheckConstruction(); + double tranquility = altar.tranquility; + ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentTranquility", (int) ((100D * (int) (100 * tranquility)) / 100d)), new TextComponentTranslation(tooltipBase + "currentBonus", (int) (100 * altar.incenseAddition))); + } else if (tile != null && tile instanceof TileInversionPillar) { + TileInversionPillar pillar = (TileInversionPillar) tile; + double inversion = pillar.getCurrentInversion(); + ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentInversion", ((int) (10 * inversion)) / 10d)); + } else { + printNetworkInformation(stack, player); + } + } + return EnumActionResult.PASS; + } + + @Override + public int getCost() { + return 0; + } + + private void printNetworkInformation(ItemStack sigilStack, EntityPlayer player) { + int currentEssence = NetworkHelper.getSoulNetwork(getOwnerUUID(sigilStack)).getCurrentEssence(); + List toSend = Lists.newArrayList(); + if (getOwnerName(sigilStack) != null && !getOwnerName(sigilStack).equals(PlayerHelper.getUsernameFromPlayer(player))) + toSend.add(new TextComponentTranslation("tooltip.bloodmagic.sigil.divination.otherNetwork", getOwnerName(sigilStack))); + toSend.add(new TextComponentTranslation("tooltip.bloodmagic.sigil.divination.currentEssence", currentEssence)); + ChatUtil.sendNoSpam(player, toSend.toArray(new ITextComponent[0])); + } + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilAir.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilAir.java new file mode 100644 index 00000000..66557822 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilAir.java @@ -0,0 +1,52 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.core.RegistrarBloodMagic; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.SoundEvents; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilAir implements ISigil { + + @Nonnull + @Override + public EnumActionResult onRightClick(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull EnumHand hand) { + if (world.isRemote) { + Vec3d vec = player.getLookVec(); + double wantedVelocity = 1.7D; + + if (player.isPotionActive(RegistrarBloodMagic.BOOST)) { + int amplifier = player.getActivePotionEffect(RegistrarBloodMagic.BOOST).getAmplifier(); + wantedVelocity += (1.0D + amplifier) * 0.35D; + } + + player.motionX = vec.x * wantedVelocity; + player.motionY = vec.y * wantedVelocity; + player.motionZ = vec.z * wantedVelocity; + 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); + } + + if (!world.isRemote) { + boolean unusable = false; + if (!player.capabilities.isCreativeMode) + unusable = !NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getCost()); + + if (!unusable) + player.fallDistance = 0; + } + + return EnumActionResult.SUCCESS; + } + + @Override + public int getCost() { + return 50; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilBloodLight.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilBloodLight.java new file mode 100644 index 00000000..4f871fd8 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilBloodLight.java @@ -0,0 +1,55 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.api.util.helper.NetworkHelper; +import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks; +import WayofTime.bloodmagic.entity.projectile.EntityBloodLight; +import WayofTime.bloodmagic.util.Utils; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.CooldownTracker; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilBloodLight implements ISigil { + + @Nonnull + @Override + public EnumActionResult onRightClick(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, @Nonnull EnumHand hand) { + Item item = stack.getItem(); + RayTraceResult mop = Utils.rayTrace(player, false); + + CooldownTracker cooldownTracker = player.getCooldownTracker(); + if (mop != null && mop.typeOfHit == RayTraceResult.Type.BLOCK) { + BlockPos blockPos = mop.getBlockPos().offset(mop.sideHit); + + if (world.getBlockState(blockPos).getBlock().isReplaceable(world, blockPos)) { + world.setBlockState(blockPos, RegistrarBloodMagicBlocks.BLOOD_LIGHT.getDefaultState()); + if (!world.isRemote) + NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getCost()); + player.swingArm(hand); + cooldownTracker.setCooldown(item, 10); + return EnumActionResult.SUCCESS; + } + } else { + if (!world.isRemote) { + world.spawnEntity(new EntityBloodLight(world, player)); + NetworkHelper.getSoulNetwork(getOwnerUUID(stack)).syphonAndDamage(player, getCost()); + } + cooldownTracker.setCooldown(item, 10); + return EnumActionResult.SUCCESS; + } + + return EnumActionResult.PASS; + } + + @Override + public int getCost() { + return 10; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilBounce.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilBounce.java new file mode 100644 index 00000000..1d145cc6 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilBounce.java @@ -0,0 +1,22 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.core.RegistrarBloodMagic; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilBounce implements ISigil.Toggle { + + @Override + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld) { + player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.BOUNCE, 2, 0, true, false)); + } + + @Override + public int getCost() { + return 100; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilClaw.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilClaw.java new file mode 100644 index 00000000..eb6aaf12 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilClaw.java @@ -0,0 +1,22 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.core.RegistrarBloodMagic; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilClaw implements ISigil.Toggle { + + @Override + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld) { + player.addPotionEffect(new PotionEffect(RegistrarBloodMagic.CLING, 2, 0, true, false)); + } + + @Override + public int getCost() { + return 100; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilElementalAffinity.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilElementalAffinity.java similarity index 52% rename from src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilElementalAffinity.java rename to src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilElementalAffinity.java index e28a310f..fac14b7e 100644 --- a/src/main/java/WayofTime/bloodmagic/item/sigil/ItemSigilElementalAffinity.java +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilElementalAffinity.java @@ -1,25 +1,25 @@ -package WayofTime.bloodmagic.item.sigil; +package WayofTime.bloodmagic.item.sigil.sigil; -import WayofTime.bloodmagic.api.util.helper.PlayerHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.MobEffects; import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; -public class ItemSigilElementalAffinity extends ItemSigilToggleableBase { - public ItemSigilElementalAffinity() { - super("elemental_affinity", 200); - } +import javax.annotation.Nonnull; + +public class SigilElementalAffinity implements ISigil.Toggle { @Override - public void onSigilUpdate(ItemStack stack, World world, EntityPlayer player, int itemSlot, boolean isSelected) { - if (PlayerHelper.isFakePlayer(player)) - return; - + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld) { player.fallDistance = 0; player.extinguish(); player.addPotionEffect(new PotionEffect(MobEffects.FIRE_RESISTANCE, 2, 1, true, false)); player.addPotionEffect(new PotionEffect(MobEffects.WATER_BREATHING, 2, 0, true, false)); } + + @Override + public int getCost() { + return 200; + } } diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilEnderSeverance.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilEnderSeverance.java new file mode 100644 index 00000000..cceff8d8 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilEnderSeverance.java @@ -0,0 +1,26 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import WayofTime.bloodmagic.core.RegistrarBloodMagic; +import net.minecraft.entity.Entity; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; +import java.util.List; + +public class SigilEnderSeverance implements ISigil.Toggle { + + @Override + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld) { + List entityList = world.getEntitiesWithinAABB(Entity.class, new net.minecraft.util.math.AxisAlignedBB(player.posX - 4.5, player.posY - 4.5, player.posZ - 4.5, player.posX + 4.5, player.posY + 4.5, player.posZ + 4.5)); + entityList.stream().filter(e -> e instanceof EntityEnderman).forEach(e -> ((EntityEnderman) e).addPotionEffect(new PotionEffect(RegistrarBloodMagic.PLANAR_BINDING, 40, 0))); + } + + @Override + public int getCost() { + return 200; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFastMiner.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFastMiner.java new file mode 100644 index 00000000..e4fdc50c --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFastMiner.java @@ -0,0 +1,48 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.MobEffects; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilFastMiner implements ISigil.Toggle { + + @Override + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld) { + player.addPotionEffect(new PotionEffect(MobEffects.HASTE, 2, 0, true, false)); + } + + @Override + public int getCost() { + return 100; + } + +// @Override +// public boolean performArrayEffect(World world, BlockPos pos) { +// double radius = 10; +// int ticks = 600; +// int potionPotency = 2; +// +// AxisAlignedBB bb = new AxisAlignedBB(pos).grow(radius); +// List playerList = world.getEntitiesWithinAABB(EntityPlayer.class, bb); +// for (EntityPlayer player : playerList) { +// if (!player.isPotionActive(MobEffects.HASTE) || (player.isPotionActive(MobEffects.HASTE) && player.getActivePotionEffect(MobEffects.HASTE).getAmplifier() < potionPotency)) { +// player.addPotionEffect(new PotionEffect(MobEffects.HASTE, ticks, potionPotency)); +// if (!player.capabilities.isCreativeMode) { +// player.hurtResistantTime = 0; +// player.attackEntityFrom(BloodMagicAPI.damageSource, 1.0F); +// } +// } +// } +// +// return false; +// } +// +// @Override +// public boolean hasArrayEffect() { +// return true; +// } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFrost.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFrost.java new file mode 100644 index 00000000..607a447c --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilFrost.java @@ -0,0 +1,21 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import net.minecraft.enchantment.EnchantmentFrostWalker; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import javax.annotation.Nonnull; + +public class SigilFrost implements ISigil.Toggle { + + @Override + public void onUpdate(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, @Nonnull World world, int itemSlot, boolean isHeld) { + EnchantmentFrostWalker.freezeNearby(player, world, player.getPosition(), 1); + } + + @Override + public int getCost() { + return 100; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilHolding.java b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilHolding.java new file mode 100644 index 00000000..c9827081 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/sigil/sigil/SigilHolding.java @@ -0,0 +1,53 @@ +package WayofTime.bloodmagic.item.sigil.sigil; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.NonNullList; + +public class SigilHolding implements ISigil.Holding { + + @Override + public int getCost() { + return 0; + } + + @Override + public int getSize(ItemStack stack) { + return 5; + } + + @Override + public int getEquippedSigil(ItemStack stack) { + if (!stack.hasTagCompound() || !stack.getTagCompound().hasKey("current")) + return -1; + + return stack.getTagCompound().getInteger("current"); + } + + @Override + public NonNullList getHeldSigils(ItemStack stack) { + NonNullList inventory = NonNullList.withSize(getSize(stack), ItemStack.EMPTY); + if (!stack.hasTagCompound() || !stack.getTagCompound().hasKey("inv")) + return inventory; + + NBTTagList invTag = stack.getTagCompound().getTagList("inv", 10); + for (int i = 0; i < invTag.tagCount(); i++) + inventory.set(i, new ItemStack(invTag.getCompoundTagAt(i))); + + return inventory; + } + + @Override + public void setHeldSigils(ItemStack stack, NonNullList inventory) { + NBTTagList invTag = new NBTTagList(); + for (ItemStack invStack : inventory) + if (!invStack.isEmpty()) + invTag.appendTag(invStack.writeToNBT(new NBTTagCompound())); + + if (!stack.hasTagCompound()) + stack.setTagCompound(new NBTTagCompound()); + + stack.getTagCompound().setTag("inv", invTag); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/util/Utils.java b/src/main/java/WayofTime/bloodmagic/util/Utils.java index fdfcb6a4..f2d14f7e 100644 --- a/src/main/java/WayofTime/bloodmagic/util/Utils.java +++ b/src/main/java/WayofTime/bloodmagic/util/Utils.java @@ -36,10 +36,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumFacing; import net.minecraft.util.SoundCategory; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.*; import net.minecraft.world.World; import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.ISpecialArmor; @@ -956,4 +953,24 @@ public class Utils { stack.getTagCompound().setLong(Constants.NBT.LEAST_SIG, itemUUID.getLeastSignificantBits()); } } + + public static RayTraceResult rayTrace(EntityPlayer player, boolean useLiquids) { + float pitch = player.rotationPitch; + float yaw = player.rotationYaw; + Vec3d eyePosition = new Vec3d(player.posX, player.posY + (double) player.getEyeHeight(), player.posZ); + + float f2 = MathHelper.cos(-yaw * 0.017453292F - (float) Math.PI); + float f3 = MathHelper.sin(-yaw * 0.017453292F - (float) Math.PI); + float f4 = -MathHelper.cos(-pitch * 0.017453292F); + float f5 = MathHelper.sin(-pitch * 0.017453292F); + float f6 = f3 * f4; + float f7 = f2 * f4; + + double reachDistance = 5.0D; + if (player instanceof EntityPlayerMP) + reachDistance = ((EntityPlayerMP)player).interactionManager.getBlockReachDistance(); + + Vec3d reachPosition = eyePosition.addVector((double) f6 * reachDistance, (double) f5 * reachDistance, (double) f7 * reachDistance); + return player.getEntityWorld().rayTraceBlocks(eyePosition, reachPosition, useLiquids, !useLiquids, false); + } } diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java index defb55fa..ee83e923 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/GenericHandler.java @@ -38,6 +38,7 @@ import WayofTime.bloodmagic.util.helper.TextHelper; import com.google.common.base.Strings; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; +import net.minecraft.client.resources.I18n; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; @@ -69,6 +70,7 @@ import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.event.entity.living.LivingFallEvent; import net.minecraftforge.event.entity.living.LivingHurtEvent; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.event.entity.player.PlayerPickupXpEvent; @@ -371,6 +373,13 @@ public class GenericHandler { } } + @SubscribeEvent(priority = EventPriority.HIGH) + public void onTooltip(ItemTooltipEvent event) { + if (event.getItemStack().getItem() instanceof IBindable) + if (((IBindable) event.getItemStack().getItem()).getOwnerUUID(event.getItemStack()) != null) + event.getToolTip().add(I18n.format("tooltip.bloodmagic.currentOwner", PlayerHelper.getUsernameFromStack(event.getItemStack()))); + } + @SubscribeEvent public void selfSacrificeEvent(SacrificeKnifeUsedEvent event) { EntityPlayer player = event.player;