diff --git a/Plugins/.idea/artifacts/Mineplex_Hub_jar.xml b/Plugins/.idea/artifacts/Mineplex_Hub_jar.xml index 370ba8bd7..55d803b0b 100644 --- a/Plugins/.idea/artifacts/Mineplex_Hub_jar.xml +++ b/Plugins/.idea/artifacts/Mineplex_Hub_jar.xml @@ -21,6 +21,7 @@ + \ No newline at end of file diff --git a/Plugins/.idea/modules.xml b/Plugins/.idea/modules.xml index be0eb0bae..a8626a3f1 100644 --- a/Plugins/.idea/modules.xml +++ b/Plugins/.idea/modules.xml @@ -17,7 +17,6 @@ - diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java index 602b5d974..cb2397a72 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilEnt.java @@ -651,6 +651,11 @@ public class UtilEnt return CreatureLook(ent, UtilAlg.GetPitch(vec), UtilAlg.GetYaw(vec)); } + public static boolean CreatureLook(Entity ent, Vector target) + { + return CreatureLook(ent, UtilAlg.GetPitch(target), UtilAlg.GetYaw(target)); + } + public static void setFakeHead(Entity ent, boolean fakeHead) { net.minecraft.server.v1_8_R3.Entity ec = ((CraftEntity) ent).getHandle(); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitanData.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitanData.java index 7f73ac764..f74915d6d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitanData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitanData.java @@ -1,40 +1,49 @@ - - package mineplex.core.mount.types; import java.util.ArrayList; import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; +import mineplex.core.disguise.DisguiseManager; +import mineplex.core.disguise.disguises.DisguiseGuardian; +import mineplex.core.disguise.disguises.DisguiseMagmaCube; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.craftbukkit.v1_8_R3.entity.CraftLivingEntity; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; -import org.bukkit.entity.MagmaCube; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; -import org.bukkit.entity.Slime; import org.bukkit.inventory.ItemStack; +import org.bukkit.util.EulerAngle; import org.bukkit.util.Vector; -public class MountTitanData +public class MountTitanData { private String _owner; - private Slime _head; - + private LivingEntity _head; + private ArrayList _nodes; - public MountTitanData(Player player, String name) + public MountTitanData(DisguiseManager disguiseManager, Player player, String name) { _owner = player.getName(); - //Nodes + // Nodes _nodes = new ArrayList(); - for (int i=0 ; i<30 ; i++) + Location loc = player.getLocation(); + loc.setYaw(0); + loc.setPitch(0); + + for (int i = 0; i < 30; i++) { - ArmorStand node = player.getWorld().spawn(player.getLocation(), ArmorStand.class); + ArmorStand node = player.getWorld().spawn(loc, ArmorStand.class); node.setVisible(false); node.setGravity(false); @@ -43,12 +52,21 @@ public class MountTitanData _nodes.add(node); } - - //Head - _head = player.getWorld().spawn(player.getLocation(), MagmaCube.class); - _head.setSize(2); - + + // Head + _head = (LivingEntity) player.getWorld().spawnEntity(loc, EntityType.BAT); + UtilEnt.Vegetate(_head, true); + UtilEnt.silence(_head, true); + UtilEnt.setFakeHead(_head, true); + _head.setCustomName(player.getName() + "'s " + name); + + ((CraftLivingEntity) _head).getHandle().setMineplexInvisible(true); + + DisguiseMagmaCube disguise = new DisguiseMagmaCube(_head); + disguise.SetSize(2); + + disguiseManager.disguise(disguise); } public void mount(Player player, Entity entity) @@ -59,58 +77,102 @@ public class MountTitanData public void update() { - //Head + // Head if (_head.getPassenger() != null) - _head.setVelocity(_head.getPassenger().getLocation().getDirection().add(new Vector(0,0.2,0))); + { + _head.setVelocity(_head.getPassenger().getLocation().getDirection().add(new Vector(0, 0.2, 0))); - Location infront = _head.getLocation().add(0, -1.5, 0); + UtilEnt.CreatureLook(_head, _head.getPassenger().getLocation().getDirection()); + } + else + { + Player player = Bukkit.getPlayerExact(_owner); - //Move - for (int i=0 ; i<30 ; i++) + if (player != null) + { + Vector moving = null; + + if (UtilMath.offset(player, _head) > 12) + { + moving = _head.getLocation().getDirection().normalize(); + + Vector vec = moving.clone().subtract(UtilAlg.getTrajectory(player, _head)).normalize(); + + vec.setY(-vec.getY()); + + moving.add(vec.multiply(0.15)); + } + else + { + moving = _head.getLocation().getDirection(); + + moving.setX(moving.getX() + UtilMath.rr(0.1, true)); + moving.setY(moving.getY() + UtilMath.rr(0.3, true)); + moving.setZ(moving.getZ() + UtilMath.rr(0.1, true)); + } + + moving.normalize().multiply(0.5); + + UtilEnt.CreatureLook(_head, moving); + + _head.setVelocity(moving); + } + } + + Location infront = _head.getLocation().add(0, -1.3, 0); + infront.setYaw(0); + infront.setPitch(0); + + // Move + for (int i = 0; i < 30; i++) { ArmorStand node = _nodes.get(i); - //Move + Location loc = node.getLocation(); + + // Move if (i == 0) node.teleport(infront); else if (UtilMath.offset(node.getLocation(), infront) > 0.5) node.teleport(infront.add(UtilAlg.getTrajectory(infront, node.getLocation()).multiply(0.5))); - + + // Rotation + node.setHeadPose(UtilAlg.vectorToEuler(UtilAlg.getTrajectory(node.getLocation(), loc))); + infront = node.getLocation(); - - //Rotation - node.setHeadPose(UtilAlg.vectorToEuler(UtilAlg.getTrajectory(infront, node.getLocation()))); } - - - //Shuffle In + + // Shuffle In if (_head.getPassenger() == null) { - for (int i=_nodes.size()-1 ; i>=0 ; i--) + for (int i = _nodes.size() - 1; i >= 0; i--) { ArmorStand node = _nodes.get(i); - - if (i>0) - infront = _nodes.get(i-1).getLocation(); + + Location loc = node.getLocation(); + + if (i > 0) + infront = _nodes.get(i - 1).getLocation(); else - infront = _head.getLocation().add(0, -1.5, 0); + infront = _head.getLocation().add(0, -1.3, 0); node.teleport(infront); + + node.setHeadPose(new EulerAngle(0, -UtilAlg.GetYaw(UtilAlg.getTrajectory(node.getLocation(), loc)), 0)); + // node.setHeadPose(UtilAlg.vectorToEuler(UtilAlg.getTrajectory(node.getLocation(), loc))); } } } - - - public void clean() + public void clean() { _head.remove(); - + for (ArmorStand stand : _nodes) stand.remove(); } - public boolean ownsMount(Player player) + public boolean ownsMount(Player player) { return _owner.equals(player.getName()); }