This commit is contained in:
NewGarbo 2016-01-15 20:17:57 +00:00
parent 1faeb43b73
commit 1042edb134
4 changed files with 117 additions and 12 deletions

View File

@ -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);

View File

@ -14,7 +14,7 @@ public class cemde extends CommandBase<StatsManager>
PvpTimer _timer;
public cemde(StatsManager plugin, PvpTimer timer)
{
super(plugin, Rank.ALL, "rstime");
super(plugin, Rank.SNR_MODERATOR, "rstime");
_timer = timer;
}

View File

@ -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);
}

View File

@ -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;