From 98d988584d393ca2a1c8fc0a49cc98a9e7c13e18 Mon Sep 17 00:00:00 2001 From: Cheese Date: Fri, 27 Nov 2015 13:35:25 +1100 Subject: [PATCH] titan cosmetics --- .../mineplex/core/common/util/UtilAlg.java | 6 + .../disguise/disguises/DisguiseGuardian.java | 23 ++++ .../core/gadget/gadgets/MorphTitan.java | 49 +++++++- .../src/mineplex/core/mount/Mount.java | 1 + .../mineplex/core/mount/types/MountTitan.java | 117 ++++++++++++++++-- .../core/mount/types/MountTitanData.java | 117 ++++++++++++++++++ .../src/mineplex/core/pet/PetFactory.java | 1 + .../src/mineplex/core/pet/PetManager.java | 8 ++ .../src/mineplex/mapparser/MapParser.java | 1 + 9 files changed, 310 insertions(+), 13 deletions(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/disguise/disguises/DisguiseGuardian.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitanData.java diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java index c3d16a857..71916c921 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java @@ -9,6 +9,7 @@ import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; +import org.bukkit.util.EulerAngle; import org.bukkit.util.Vector; public class UtilAlg @@ -439,4 +440,9 @@ public class UtilAlg return value; } + + public static EulerAngle vectorToEuler(Vector vector) + { + return new EulerAngle(Math.toRadians(GetPitch(vector)), Math.toRadians(GetYaw(vector)), 0); + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/disguise/disguises/DisguiseGuardian.java b/Plugins/Mineplex.Core/src/mineplex/core/disguise/disguises/DisguiseGuardian.java new file mode 100644 index 000000000..808c60efc --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/disguise/disguises/DisguiseGuardian.java @@ -0,0 +1,23 @@ +package mineplex.core.disguise.disguises; + +import org.bukkit.entity.*; + +public class DisguiseGuardian extends DisguiseCreature +{ + public DisguiseGuardian(org.bukkit.entity.Entity entity) + { + super(EntityType.GUARDIAN, entity); + } + + public void setElder(boolean elder) + { + //data stuff + } + + public boolean isElder() + { + //return DataWatcher.getByte(13); + + return false; + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphTitan.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphTitan.java index 26d1bd925..9d19f5eca 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphTitan.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/MorphTitan.java @@ -1,35 +1,76 @@ package mineplex.core.gadget.gadgets; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import mineplex.core.common.Rank; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.core.disguise.disguises.DisguiseGuardian; import mineplex.core.gadget.GadgetManager; import mineplex.core.gadget.types.MorphGadget; +import mineplex.core.recharge.Recharge; public class MorphTitan extends MorphGadget { public MorphTitan(GadgetManager manager) { - super(manager, "Titanic Morph", new String[] + super(manager, "Elder Guardian Morph", new String[] { - C.cWhite + "Coming Soon...", + C.cWhite + "From deep withinsdngsg", " ", C.cRed + "Unlocked with Titan Rank", }, -1, - Material.INK_SACK, (byte)8); + Material.PRISMARINE_SHARD, (byte)0); } @Override public void EnableCustom(Player player) { - + this.ApplyArmor(player); + + DisguiseGuardian disguise = new DisguiseGuardian(player); + disguise.setName(player.getName(), Manager.getClientManager().Get(player).GetRank()); + disguise.setCustomNameVisible(true); + Manager.getDisguiseManager().disguise(disguise); } @Override public void DisableCustom(Player player) { + this.RemoveArmor(player); + Manager.getDisguiseManager().undisguise(player); + } + + @EventHandler + public void Snort(PlayerInteractEvent event) + { + Player player = event.getPlayer(); + + if (!IsActive(player)) + return; + + if (!UtilEvent.isAction(event, ActionType.L)) + return; + if (!Recharge.Instance.use(player, GetName(), 2000, false, false)) + return; + + player.getWorld().playSound(player.getLocation(), Sound.ZOMBIE_UNFECT, 1f, 0.25f); + } + + @EventHandler + public void titanOwner(PlayerJoinEvent event) + { + if (Manager.getClientManager().Get(event.getPlayer()).GetRank().has(Rank.TITAN)) + { + Manager.getDonationManager().Get(event.getPlayer().getName()).AddUnknownSalesPackagesOwned(GetName()); + } } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/Mount.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/Mount.java index 3e346cc57..f9731fe6c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/Mount.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/Mount.java @@ -54,6 +54,7 @@ public abstract class Mount extends SalesPackageBase implements Listener Manager.setActive(player, this); EnableCustom(player); } + public abstract void EnableCustom(Player player); public abstract void Disable(Player player); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitan.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitan.java index e4ea28811..186a5a3b4 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitan.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitan.java @@ -1,27 +1,126 @@ package mineplex.core.mount.types; +import java.util.HashMap; + import org.bukkit.Material; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Slime; import org.bukkit.entity.Horse.Color; import org.bukkit.entity.Horse.Style; import org.bukkit.entity.Horse.Variant; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityTargetEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import mineplex.core.common.Rank; import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; import mineplex.core.mount.HorseMount; +import mineplex.core.mount.Mount; import mineplex.core.mount.MountManager; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; -public class MountTitan extends HorseMount +public class MountTitan extends Mount { - public MountTitan(MountManager manager) + public MountTitan(MountManager manager) { - super(manager, "Titanic Mount", new String[] + super(manager, "Molten Snake", Material.REDSTONE_BLOCK, (byte)0, new String[] { - C.cWhite + "Coming Soon...", + C.cWhite + "From the distant ether realm,", + C.cWhite + "this prized dragon is said to", + C.cWhite + "obey only true Heroes!", " ", C.cRed + "Unlocked with Titan Rank", - }, - Material.INK_SACK, - (byte)8, - -1, - Color.BLACK, Style.BLACK_DOTS, Variant.UNDEAD_HORSE, 0.8, null); + }, -1); + } + + @Override + public void EnableCustom(Player player) + { + player.leaveVehicle(); + player.eject(); + + //Remove other mounts + Manager.DeregisterAll(player); + + //Inform + UtilPlayer.message(player, F.main("Mount", "You spawned " + F.elem(GetName()) + ".")); + + //Store + _active.put(player, new MountTitanData(player, GetName())); + } + + @Override + public void Disable(Player player) + { + MountTitanData data = _active.remove(player); + if (data != null) + { + data.clean(); + + //Inform + UtilPlayer.message(player, F.main("Mount", "You despawned " + F.elem(GetName()) + ".")); + + Manager.removeActive(player); + } + } + + @EventHandler + public void update(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + return; + + for (MountTitanData data : _active.values()) + { + data.update(); + } + } + + @EventHandler + public void interactMount(PlayerInteractEntityEvent event) + { + if (event.getRightClicked() == null) + return; + + if (!GetActive().containsKey(event.getPlayer())) + return; + + if (!GetActive().get(event.getPlayer()).ownsMount(event.getPlayer())) + { + UtilPlayer.message(event.getPlayer(), F.main("Mount", "This is not your Mount!")); + return; + } + + event.getPlayer().leaveVehicle(); + event.getPlayer().eject(); + + GetActive().get(event.getPlayer()).mount(event.getPlayer(), event.getRightClicked()); + } + + @EventHandler + public void target(EntityTargetEvent event) + { + if (!(event.getEntity() instanceof Player)) + return; + + if (!GetActive().containsKey(event.getTarget())) + return; + + if (!GetActive().get(event.getTarget()).ownsMount((Player)event.getEntity())) + event.setCancelled(true); + } + + @EventHandler + public void titanOwner(PlayerJoinEvent event) + { + if (Manager.getClientManager().Get(event.getPlayer()).GetRank().has(Rank.TITAN)) + { + Manager.getDonationManager().Get(event.getPlayer().getName()).AddUnknownSalesPackagesOwned(GetName()); + } } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitanData.java b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitanData.java new file mode 100644 index 000000000..7f73ac764 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/mount/types/MountTitanData.java @@ -0,0 +1,117 @@ + + +package mineplex.core.mount.types; + +import java.util.ArrayList; + +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilMath; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Entity; +import org.bukkit.entity.MagmaCube; +import org.bukkit.entity.Player; +import org.bukkit.entity.Slime; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; + +public class MountTitanData +{ + private String _owner; + + private Slime _head; + + private ArrayList _nodes; + + public MountTitanData(Player player, String name) + { + _owner = player.getName(); + + //Nodes + _nodes = new ArrayList(); + + for (int i=0 ; i<30 ; i++) + { + ArmorStand node = player.getWorld().spawn(player.getLocation(), ArmorStand.class); + + node.setVisible(false); + node.setGravity(false); + + node.setHelmet(new ItemStack(Material.REDSTONE_BLOCK)); + + _nodes.add(node); + } + + //Head + _head = player.getWorld().spawn(player.getLocation(), MagmaCube.class); + _head.setSize(2); + + _head.setCustomName(player.getName() + "'s " + name); + } + + public void mount(Player player, Entity entity) + { + if (_head.equals(entity) || _nodes.contains(entity)) + _head.setPassenger(player); + } + + public void update() + { + //Head + if (_head.getPassenger() != null) + _head.setVelocity(_head.getPassenger().getLocation().getDirection().add(new Vector(0,0.2,0))); + + Location infront = _head.getLocation().add(0, -1.5, 0); + + //Move + for (int i=0 ; i<30 ; i++) + { + ArmorStand node = _nodes.get(i); + + //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))); + + infront = node.getLocation(); + + //Rotation + node.setHeadPose(UtilAlg.vectorToEuler(UtilAlg.getTrajectory(infront, node.getLocation()))); + } + + + //Shuffle In + if (_head.getPassenger() == null) + { + for (int i=_nodes.size()-1 ; i>=0 ; i--) + { + ArmorStand node = _nodes.get(i); + + if (i>0) + infront = _nodes.get(i-1).getLocation(); + else + infront = _head.getLocation().add(0, -1.5, 0); + + node.teleport(infront); + } + } + } + + + + public void clean() + { + _head.remove(); + + for (ArmorStand stand : _nodes) + stand.remove(); + } + + public boolean ownsMount(Player player) + { + return _owner.equals(player.getName()); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/pet/PetFactory.java b/Plugins/Mineplex.Core/src/mineplex/core/pet/PetFactory.java index 84a1a2664..6aa8d232b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/pet/PetFactory.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/pet/PetFactory.java @@ -42,6 +42,7 @@ public class PetFactory _pets.put(EntityType.OCELOT, new Pet("Cat", EntityType.OCELOT, 6000)); _pets.put(EntityType.MUSHROOM_COW, new Pet("Mooshroom", EntityType.MUSHROOM_COW, 5000)); _pets.put(EntityType.WITHER, new Pet("Widder", EntityType.WITHER, -1)); + _pets.put(EntityType.GUARDIAN, new Pet("Guardian", EntityType.GUARDIAN, -1)); } private void CreatePetExtras() diff --git a/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java b/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java index 9d631ff8d..65e182620 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java @@ -38,8 +38,10 @@ import org.bukkit.entity.Ageable; import org.bukkit.entity.Creature; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; +import org.bukkit.entity.Guardian; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.entity.Skeleton; import org.bukkit.entity.Villager; import org.bukkit.entity.Zombie; import org.bukkit.event.EventHandler; @@ -159,6 +161,12 @@ public class PetManager extends MiniClientPlugin if (!Get(p).GetPets().containsKey(EntityType.WITHER)) Get(p).GetPets().put(EntityType.WITHER, "Widder"); } + + if (rank.has(Rank.TITAN)) + { + if (!Get(p).GetPets().containsKey(EntityType.GUARDIAN)) + Get(p).GetPets().put(EntityType.GUARDIAN, "Guardian"); + } } public void AddPetOwner(Player player, EntityType entityType, Location location) diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java index a33e9f6d7..88522f513 100644 --- a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/MapParser.java @@ -160,6 +160,7 @@ public class MapParser extends JavaPlugin implements Listener player.addAttachment(plugin, "worldedit.*", hasPermission); player.addAttachment(plugin, "voxelsniper.sniper", hasPermission); player.addAttachment(plugin, "voxelsniper.brush.*", hasPermission); + player.addAttachment(plugin, "coloredsigns.format", hasPermission); } _permissionMap.put(player, hasPermission);