From 23051088dabde2d066b752299f5173cfbff70f7f Mon Sep 17 00:00:00 2001
From: Arcaratus <byou64@gmail.com>
Date: Wed, 30 Dec 2015 23:00:49 -0500
Subject: [PATCH] Jumping Ritual

Patch
---
 .../item/ItemSacrificialDagger.java           |  1 -
 .../item/ItemTelepositionFocus.java           | 21 ++++-
 .../bloodmagic/registry/ModItems.java         |  4 +
 .../bloodmagic/registry/ModRituals.java       |  9 +-
 .../bloodmagic/ritual/RitualJumping.java      | 88 +++++++++++++++++++
 .../bloodmagic/tile/TileTeleposer.java        |  5 ++
 .../assets/bloodmagic/lang/en_US.lang         |  6 ++
 7 files changed, 124 insertions(+), 10 deletions(-)
 create mode 100644 src/main/java/WayofTime/bloodmagic/ritual/RitualJumping.java
 create mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java

diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java b/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java
index d7bf3dac..49a9a091 100644
--- a/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java
+++ b/src/main/java/WayofTime/bloodmagic/item/ItemSacrificialDagger.java
@@ -85,7 +85,6 @@ public class ItemSacrificialDagger extends Item
     @Override
     public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
     {
-
         if (PlayerHelper.isFakePlayer(player))
             return stack;
 
diff --git a/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java b/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java
index 95356c5c..299b2eb2 100644
--- a/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java
+++ b/src/main/java/WayofTime/bloodmagic/item/ItemTelepositionFocus.java
@@ -11,6 +11,7 @@ import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
 import net.minecraft.nbt.NBTTagCompound;
 import net.minecraft.util.BlockPos;
+import net.minecraft.util.MovingObjectPosition;
 import net.minecraft.util.StatCollector;
 import net.minecraft.world.World;
 import net.minecraftforge.common.DimensionManager;
@@ -22,7 +23,6 @@ import java.util.List;
 
 public class ItemTelepositionFocus extends ItemBindable
 {
-
     public static String[] names = { "weak", "enhanced", "reinforced", "demonic" };
 
     public ItemTelepositionFocus()
@@ -53,8 +53,17 @@ public class ItemTelepositionFocus extends ItemBindable
     public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
     {
         if (BindableHelper.checkAndSetItemOwner(stack, player))
+        {
             if (player.isSneaking())
-                return stack;
+            {
+                MovingObjectPosition mop = getMovingObjectPositionFromPlayer(world, player, false);
+
+                if (mop != null && mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK)
+                {
+                    setBlockPos(stack, world, mop.getBlockPos());
+                }
+            }
+        }
 
         return stack;
     }
@@ -67,11 +76,15 @@ public class ItemTelepositionFocus extends ItemBindable
 
         super.addInformation(stack, player, tooltip, advanced);
 
+        stack = NBTHelper.checkNBT(stack);
         NBTTagCompound tag = stack.getTagCompound();
         BlockPos coords = getBlockPos(stack);
 
-        tooltip.add(String.format(StatCollector.translateToLocal("tooltip.alchemy.coords"), coords.getX(), coords.getY(), coords.getZ()));
-        tooltip.add(String.format(StatCollector.translateToLocal("tooltip.alchemy.dimension"), tag.getInteger(Constants.NBT.DIMENSION_ID)));
+        if (coords != null && tag != null)
+        {
+            tooltip.add(String.format(StatCollector.translateToLocal("tooltip.BloodMagic.telepositionFocus.coords"), coords.getX(), coords.getY(), coords.getZ()));
+            tooltip.add(String.format(StatCollector.translateToLocal("tooltip.BloodMagic.telepositionFocus.dimension"), tag.getInteger(Constants.NBT.DIMENSION_ID)));
+        }
     }
 
     public World getWorld(ItemStack stack)
diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java
index 7d989a2c..b6489ac2 100644
--- a/src/main/java/WayofTime/bloodmagic/registry/ModItems.java
+++ b/src/main/java/WayofTime/bloodmagic/registry/ModItems.java
@@ -63,6 +63,7 @@ public class ModItems
     public static Item sigilCompression;
 
     public static Item itemComponent;
+    public static Item telepositionFocus;
 
     public static Item bloodShard;
 
@@ -131,6 +132,7 @@ public class ModItems
         sigilEnderSeverance = registerItem(new ItemSigilEnderSeverance());
 
         itemComponent = registerItem(new ItemComponent());
+        telepositionFocus = registerItem(new ItemTelepositionFocus());
 
         bloodShard = registerItem(new ItemBloodShard());
 
@@ -222,6 +224,8 @@ public class ModItems
 
         for (int i = 0; i < ItemComponent.getNames().size(); i++)
             renderHelper.itemRender(itemComponent, i);
+        for (int i = 0; i < ItemTelepositionFocus.names.length; i++)
+            renderHelper.itemRender(telepositionFocus, i);
 
         renderHelper.itemRender(bloodShard, 0);
         renderHelper.itemRender(bloodShard, 1);
diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModRituals.java b/src/main/java/WayofTime/bloodmagic/registry/ModRituals.java
index 12471c16..d9f5ed32 100644
--- a/src/main/java/WayofTime/bloodmagic/registry/ModRituals.java
+++ b/src/main/java/WayofTime/bloodmagic/registry/ModRituals.java
@@ -4,10 +4,7 @@ import WayofTime.bloodmagic.api.registry.ImperfectRitualRegistry;
 import WayofTime.bloodmagic.api.registry.RitualRegistry;
 import WayofTime.bloodmagic.api.ritual.Ritual;
 import WayofTime.bloodmagic.api.ritual.imperfect.ImperfectRitual;
-import WayofTime.bloodmagic.ritual.RitualGreenGrove;
-import WayofTime.bloodmagic.ritual.RitualLava;
-import WayofTime.bloodmagic.ritual.RitualTest;
-import WayofTime.bloodmagic.ritual.RitualWater;
+import WayofTime.bloodmagic.ritual.*;
 import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitualNight;
 import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitualRain;
 import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitualResistance;
@@ -15,11 +12,11 @@ import WayofTime.bloodmagic.ritual.imperfect.ImperfectRitualZombie;
 
 public class ModRituals
 {
-
     public static Ritual testRitual;
     public static Ritual waterRitual;
     public static Ritual lavaRitual;
     public static Ritual greenGroveRitual;
+    public static Ritual jumpRitual;
 
     public static ImperfectRitual imperfectNight;
     public static ImperfectRitual imperfectRain;
@@ -32,11 +29,13 @@ public class ModRituals
         waterRitual = new RitualWater();
         lavaRitual = new RitualLava();
         greenGroveRitual = new RitualGreenGrove();
+        jumpRitual = new RitualJumping();
 
         RitualRegistry.registerRitual(testRitual, testRitual.getName());
         RitualRegistry.registerRitual(waterRitual, waterRitual.getName());
         RitualRegistry.registerRitual(lavaRitual, lavaRitual.getName());
         RitualRegistry.registerRitual(greenGroveRitual, greenGroveRitual.getName());
+        RitualRegistry.registerRitual(jumpRitual, jumpRitual.getName());
     }
 
     public static void initImperfectRituals()
diff --git a/src/main/java/WayofTime/bloodmagic/ritual/RitualJumping.java b/src/main/java/WayofTime/bloodmagic/ritual/RitualJumping.java
new file mode 100644
index 00000000..6021aaa7
--- /dev/null
+++ b/src/main/java/WayofTime/bloodmagic/ritual/RitualJumping.java
@@ -0,0 +1,88 @@
+package WayofTime.bloodmagic.ritual;
+
+import WayofTime.bloodmagic.BloodMagic;
+import WayofTime.bloodmagic.api.Constants;
+import WayofTime.bloodmagic.api.network.SoulNetwork;
+import WayofTime.bloodmagic.api.ritual.*;
+import WayofTime.bloodmagic.api.util.helper.NetworkHelper;
+import WayofTime.bloodmagic.network.BloodMagicPacketHandler;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.util.BlockPos;
+import net.minecraft.world.World;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RitualJumping extends Ritual
+{
+    public static final String JUMP_RANGE = "jumpRange";
+
+    public RitualJumping()
+    {
+        super("ritualJump", 0, 1000, "ritual." + Constants.Mod.MODID + ".jumpRitual");
+        addBlockRange(JUMP_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-1, 1, -1), new BlockPos(1, 2, 1)));
+    }
+
+    @Override
+    public void performRitual(IMasterRitualStone masterRitualStone)
+    {
+        World world = masterRitualStone.getWorld();
+        SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner(), world);
+        int currentEssence = network.getCurrentEssence();
+
+        if (currentEssence < getRefreshCost())
+            return;
+
+        AreaDescriptor jumpRange = getBlockRange(JUMP_RANGE);
+        List<EntityLivingBase> entities = world.getEntitiesWithinAABB(EntityLivingBase.class, jumpRange.getAABB(masterRitualStone.getPos()));
+        if (entities != null)
+        {
+            for (EntityLivingBase entity : entities)
+            {
+                if (entity.isSneaking())
+                    continue;
+
+                double motionY = 1.5;
+
+                if (entity instanceof EntityPlayer && entity instanceof EntityPlayerMP)
+                {
+                    //TODO Packet handlers if needed
+//                    BloodMagicPacketHandler.INSTANCE.sendTo();
+                    ((EntityPlayerMP) entity).motionY = motionY;
+                    ((EntityPlayerMP) entity).fallDistance = 0;
+                }
+                else
+                {
+                    entity.motionY = motionY;
+                    entity.fallDistance = 0;
+                }
+            }
+        }
+    }
+
+    @Override
+    public int getRefreshTime()
+    {
+        return 20;
+    }
+
+    @Override
+    public int getRefreshCost()
+    {
+        return 5;
+    }
+
+    @Override
+    public ArrayList<RitualComponent> getComponents()
+    {
+        ArrayList<RitualComponent> components = new ArrayList<RitualComponent>();
+
+        for (int i = -1; i <= 1; i++)
+            this.addCornerRunes(components, 1, i, EnumRuneType.AIR);
+
+        return components;
+    }
+}
diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java b/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java
new file mode 100644
index 00000000..7cd7ae5a
--- /dev/null
+++ b/src/main/java/WayofTime/bloodmagic/tile/TileTeleposer.java
@@ -0,0 +1,5 @@
+package WayofTime.bloodmagic.tile;
+
+public class TileTeleposer
+{
+}
diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang
index 6963bf25..2759e18a 100644
--- a/src/main/resources/assets/bloodmagic/lang/en_US.lang
+++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang
@@ -200,9 +200,15 @@ tooltip.BloodMagic.diviner.totalRune=Total Runes: %d
 tooltip.BloodMagic.diviner.extraInfo=Press shift for extra info
 tooltip.BloodMagic.diviner.currentDirection=Current Direction: %s
 
+tooltip.BloodMagic.telepositionFocus.coords=Current coordinates: (%d, %d, %d)
+tooltip.BloodMagic.telepositionFocus.dimension=Dimension ID: %d
+
 # Ritual
 ritual.BloodMagic.testRitual=Test Ritual
 ritual.BloodMagic.waterRitual=Ritual of the Full Spring
+ritual.BloodMagic.lavaRitual=Serenade of the Nether
+ritual.BloodMagic.greenGrove=Ritual of the Green Grove
+ritual.BloodMagic.jumpRitual=Ritual of the High Jump
 
 # Chat
 chat.BloodMagic.altarMaker.setTier=Set Tier to: %d