From 1042edb13486b8f89e5d4d93f18cf1a568e1b382 Mon Sep 17 00:00:00 2001 From: NewGarbo Date: Fri, 15 Jan 2016 20:17:57 +0000 Subject: [PATCH] CANNONZ! --- .../mineplex/core/common/util/UtilMath.java | 5 + .../clans/clans/playtime/command/cemde.java | 2 +- .../game/clans/clans/siege/cannon/Cannon.java | 118 ++++++++++++++++-- .../clans/clans/siege/cannon/CannonState.java | 4 +- 4 files changed, 117 insertions(+), 12 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilMath.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilMath.java index 2c950b705..049dd47d0 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilMath.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilMath.java @@ -108,6 +108,11 @@ public class UtilMath return num < min ? min : (num > max ? max : num); } + public static float clamp(float num, float min, float max) + { + return num < min ? min : (num > max ? max : num); + } + public static long clamp(long num, long min, long max) { return num < min ? min : (num > max ? max : num); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/command/cemde.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/command/cemde.java index d170200be..8a0f36609 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/command/cemde.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/playtime/command/cemde.java @@ -14,7 +14,7 @@ public class cemde extends CommandBase PvpTimer _timer; public cemde(StatsManager plugin, PvpTimer timer) { - super(plugin, Rank.ALL, "rstime"); + super(plugin, Rank.SNR_MODERATOR, "rstime"); _timer = timer; } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/cannon/Cannon.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/cannon/Cannon.java index e109650d8..b021831d9 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/cannon/Cannon.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/cannon/Cannon.java @@ -4,15 +4,25 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Slime; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.player.PlayerArmorStandManipulateEvent; +import org.bukkit.event.player.PlayerInteractAtEntityEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.EulerAngle; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilEnt; import mineplex.core.itemstack.ItemBuilder; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; import mineplex.game.clans.clans.siege.outpost.Outpost; public class Cannon implements Listener @@ -24,8 +34,12 @@ public class Cannon implements Listener private Outpost _outpost; + private Player _rider; + // Entity Information private ArmorStand _armorStand; + private Slime _filler; + private Slime _filler2; public Cannon(Outpost outpost, Location location) { @@ -39,6 +53,8 @@ public class Cannon implements Listener public void cleanup() { _armorStand.remove(); + _filler.remove(); + _filler2.remove(); HandlerList.unregisterAll(this); } @@ -48,7 +64,30 @@ public class Cannon implements Listener { _armorStand = _location.getWorld().spawn(getArmorStandLocation(), ArmorStand.class); } - + + if (_filler == null) + { + _filler = _location.getWorld().spawn(getArmorStandLocation(), Slime.class); + } + + if (_filler2 == null) + { + _filler2 = _location.getWorld().spawn(getArmorStandLocation(), Slime.class); + } + + _filler.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 99999999, 1, true, false)); + _filler.setSize(-1); + _armorStand.setPassenger(_filler); + UtilEnt.Vegetate(_filler); + UtilEnt.silence(_filler, true); + + _filler2.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 99999999, 1, true, false)); + _filler2.setSize(-1); + _filler.setPassenger(_filler2); + UtilEnt.Vegetate(_filler2); + UtilEnt.silence(_filler2, true); + + UtilEnt.setFakeHead(_armorStand, true); _armorStand.teleport(getArmorStandLocation()); _armorStand.setVisible(false); _armorStand.setGravity(false); @@ -57,7 +96,7 @@ public class Cannon implements Listener private Location getArmorStandLocation() { - return _location.clone().add(.5, -1.3, .5); + return _location.clone().add(.5, .15, .5); } private void setState(CannonState state) @@ -75,26 +114,87 @@ public class Cannon implements Listener { setState(CannonState.EMPTY); } - + @EventHandler - public void onInteract(PlayerArmorStandManipulateEvent event) - { - if (_armorStand != null && _armorStand.equals(event.getRightClicked())) + public void onInteract(PlayerInteractAtEntityEvent event) + { + if (event.getRightClicked().equals(_filler) || event.getRightClicked().equals(_filler2)) { - Entity passenger = _armorStand.getPassenger(); + Entity passenger = _filler2.getPassenger(); if (passenger == null) { - _armorStand.setPassenger(event.getPlayer()); + _filler2.setPassenger(event.getPlayer()); + + _rider = event.getPlayer(); } event.setCancelled(true); } } + + @EventHandler + public void onInteract(PlayerInteractEntityEvent event) + { + if (event.getRightClicked().equals(_filler) || event.getRightClicked().equals(_filler2)) + { + Entity passenger = _filler2.getPassenger(); + if (passenger == null) + { + _filler2.setPassenger(event.getPlayer()); + + _rider = event.getPlayer(); + } + + event.setCancelled(true); + } + } + + @EventHandler + public void onInteract(PlayerArmorStandManipulateEvent event) + { + if (event.getRightClicked().equals(_armorStand)) + { + Entity passenger = _filler2.getPassenger(); + if (passenger == null) + { + _filler2.setPassenger(event.getPlayer()); + + _rider = event.getPlayer(); + } + + event.setCancelled(true); + } + } + + @EventHandler + public void update(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + { + return; + } + + if (_rider != null && !_rider.equals(_filler2.getPassenger())) + { + _rider = null; + } + + if (_rider != null) + { + double standYaw = Math.toDegrees(_armorStand.getHeadPose().getY()) % 360; + double riderYaw = _rider.getLocation().getYaw() % 360; + + double dif = riderYaw - standYaw; + double yaw = standYaw + (dif / 20.f); + + _armorStand.setHeadPose(new EulerAngle(0, Math.toRadians(yaw), 0)); + } + } @EventHandler public void onDamage(EntityDamageEvent event) { - if (_armorStand != null && _armorStand.equals(event.getEntity())) + if (_armorStand != null && _armorStand.equals(event.getEntity()) || _filler != null && _filler.equals(event.getEntity()) || _filler2 != null && _filler2.equals(event.getEntity())) { event.setCancelled(true); } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/cannon/CannonState.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/cannon/CannonState.java index 3b14d5ee2..c3de8460a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/cannon/CannonState.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/cannon/CannonState.java @@ -5,8 +5,8 @@ import org.bukkit.inventory.ItemStack; public enum CannonState { - EMPTY(Material.SPONGE, (byte) 0), - LOADED(Material.SPONGE, (byte) 1); + EMPTY(Material.SPONGE, (byte) 1), + LOADED(Material.SPONGE, (byte) 0); private Material _material; private byte _data;