pushing to beta to change to alpha

This commit is contained in:
NewGarbo 2016-01-22 11:06:19 +00:00
parent 40c52ac557
commit cc48d98208
6 changed files with 122 additions and 84 deletions

View File

@ -142,4 +142,14 @@ public class UtilMath
return ((double) rand) / 100.d; return ((double) rand) / 100.d;
} }
public static <T> T getLast(List<T> list)
{
return list.isEmpty() ? null : list.get(list.size() - 1);
}
public static <T> T getFirst(List<T> list)
{
return list.isEmpty() ? null : list.get(0);
}
} }

View File

@ -1,9 +1,17 @@
package mineplex.game.clans.clans.siege; package mineplex.game.clans.clans.siege;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import mineplex.core.MiniPlugin; import mineplex.core.MiniPlugin;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilInv;
import mineplex.core.common.util.UtilPlayer;
import mineplex.game.clans.clans.ClansManager; import mineplex.game.clans.clans.ClansManager;
import mineplex.game.clans.clans.siege.cannon.Cannon;
import mineplex.game.clans.clans.siege.outpost.OutpostManager; import mineplex.game.clans.clans.siege.outpost.OutpostManager;
public class SiegeManager extends MiniPlugin public class SiegeManager extends MiniPlugin
@ -20,4 +28,51 @@ public class SiegeManager extends MiniPlugin
_outpostManager = new OutpostManager(clans, this); _outpostManager = new OutpostManager(clans, this);
} }
@EventHandler
public void onBlockPlace(BlockPlaceEvent event)
{
if (event.getItemInHand().isSimilar(Cannon.CANNON_ITEM))
{
event.setCancelled(true);
if (trySpawnCannon(event.getPlayer(), event.getBlock().getLocation()))
{
event.getPlayer().setItemInHand(UtilInv.decrement(event.getPlayer().getItemInHand()));
return;
}
}
}
public boolean trySpawnCannon(Player player, Location location)
{
if (!_clans.isInClan(player))
{
UtilPlayer.message(player, F.main("Clans", "You must be in a Clan to place a cannon."));
return false;
}
if (_clans.getClanUtility().isClaimed(location))
{
UtilPlayer.message(player, F.main("Clans", "A cannon must be placed in unclaimed territory."));
return false;
}
// if (!isInOutpostSiegeArea(location, _clans.getClan(player)))
// {
// UtilPlayer.message(player, F.main("Clans", "A cannon must be placed in your own Clan's Outpost."));
// return false;
// }
spawnCannon(player, location);
return true;
}
public void spawnCannon(Player player, Location location)
{
Cannon cannon = new Cannon(location);
_outpostManager.getPlugin().getServer().getPluginManager().registerEvents(cannon, _outpostManager.getPlugin());
}
} }

View File

@ -1,5 +1,8 @@
package mineplex.game.clans.clans.siege.cannon; package mineplex.game.clans.clans.siege.cannon;
import java.util.LinkedList;
import java.util.List;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.ArmorStand; import org.bukkit.entity.ArmorStand;
@ -20,10 +23,10 @@ import org.bukkit.util.EulerAngle;
import mineplex.core.common.util.C; import mineplex.core.common.util.C;
import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilEnt;
import mineplex.core.common.util.UtilMath;
import mineplex.core.itemstack.ItemBuilder; import mineplex.core.itemstack.ItemBuilder;
import mineplex.core.updater.UpdateType; import mineplex.core.updater.UpdateType;
import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.event.UpdateEvent;
import mineplex.game.clans.clans.siege.outpost.Outpost;
public class Cannon implements Listener public class Cannon implements Listener
{ {
@ -37,22 +40,25 @@ public class Cannon implements Listener
// Entity Information // Entity Information
private ArmorStand _armorStand; private ArmorStand _armorStand;
private Slime _filler;
private Slime _filler2; private List<Entity> _fillers;
public Cannon(Location location) public Cannon(Location location)
{ {
_location = location; _location = location;
_state = CannonState.UNLOADED; _state = CannonState.UNLOADED;
_fillers = new LinkedList<>();
updateEntities(); updateEntities();
} }
public void cleanup() public void cleanup()
{ {
if (_armorStand != null) _armorStand.remove(); if (_armorStand != null) _armorStand.remove();
if (_filler != null) _filler.remove();
if (_filler2 != null) _filler2.remove(); _fillers.forEach(Entity::remove);
HandlerList.unregisterAll(this); HandlerList.unregisterAll(this);
} }
@ -63,28 +69,33 @@ public class Cannon implements Listener
_armorStand = _location.getWorld().spawn(getArmorStandLocation(), ArmorStand.class); _armorStand = _location.getWorld().spawn(getArmorStandLocation(), ArmorStand.class);
} }
if (_filler == null) if (_fillers.isEmpty())
{ {
_filler = _location.getWorld().spawn(getArmorStandLocation(), Slime.class); Slime slime = getArmorStandLocation().getWorld().spawn(getArmorStandLocation(), Slime.class);
UtilEnt.silence(slime, true);
UtilEnt.Vegetate(slime);
slime.setSize(-1);
slime.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 99999999, 1, true, false));
_armorStand.setPassenger(slime);
_fillers.add(slime);
slime = getArmorStandLocation().getWorld().spawn(getArmorStandLocation(), Slime.class);
UtilEnt.silence(slime, true);
UtilEnt.Vegetate(slime);
slime.setSize(-1);
slime.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 99999999, 1, true, false));
UtilMath.getLast(_fillers).setPassenger(slime);
_fillers.add(slime);
} }
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); UtilEnt.setFakeHead(_armorStand, true);
_armorStand.teleport(getArmorStandLocation()); _armorStand.teleport(getArmorStandLocation());
_armorStand.setVisible(false); _armorStand.setVisible(false);
@ -116,12 +127,12 @@ public class Cannon implements Listener
@EventHandler @EventHandler
public void onInteract(PlayerInteractAtEntityEvent event) public void onInteract(PlayerInteractAtEntityEvent event)
{ {
if (event.getRightClicked().equals(_filler) || event.getRightClicked().equals(_filler2)) if (_fillers.contains(event.getRightClicked()))
{ {
Entity passenger = _filler2.getPassenger(); Entity passenger = UtilMath.getLast(_fillers);
if (passenger == null) if (passenger == null)
{ {
_filler2.setPassenger(event.getPlayer()); UtilMath.getLast(_fillers).setPassenger(event.getPlayer());
_rider = event.getPlayer(); _rider = event.getPlayer();
} }
@ -133,12 +144,12 @@ public class Cannon implements Listener
@EventHandler @EventHandler
public void onInteract(PlayerInteractEntityEvent event) public void onInteract(PlayerInteractEntityEvent event)
{ {
if (event.getRightClicked().equals(_filler) || event.getRightClicked().equals(_filler2)) if (_fillers.contains(event.getRightClicked()))
{ {
Entity passenger = _filler2.getPassenger(); Entity passenger = UtilMath.getLast(_fillers).getPassenger();
if (passenger == null) if (passenger == null)
{ {
_filler2.setPassenger(event.getPlayer()); UtilMath.getLast(_fillers).setPassenger(event.getPlayer());
_rider = event.getPlayer(); _rider = event.getPlayer();
} }
@ -150,12 +161,12 @@ public class Cannon implements Listener
@EventHandler @EventHandler
public void onInteract(PlayerArmorStandManipulateEvent event) public void onInteract(PlayerArmorStandManipulateEvent event)
{ {
if (event.getRightClicked().equals(_armorStand)) if (_fillers.contains(event.getRightClicked()))
{ {
Entity passenger = _filler2.getPassenger(); Entity passenger = UtilMath.getLast(_fillers).getPassenger();
if (passenger == null) if (passenger == null)
{ {
_filler2.setPassenger(event.getPlayer()); UtilMath.getLast(_fillers).setPassenger(event.getPlayer());
_rider = event.getPlayer(); _rider = event.getPlayer();
} }
@ -172,7 +183,7 @@ public class Cannon implements Listener
return; return;
} }
if (_rider != null && !_rider.equals(_filler2.getPassenger())) if (_rider != null && !_rider.equals(UtilMath.getLast(_fillers).getPassenger()))
{ {
_rider = null; _rider = null;
} }
@ -192,7 +203,7 @@ public class Cannon implements Listener
@EventHandler @EventHandler
public void onDamage(EntityDamageEvent event) public void onDamage(EntityDamageEvent event)
{ {
if (_armorStand != null && _armorStand.equals(event.getEntity()) || _filler != null && _filler.equals(event.getEntity()) || _filler2 != null && _filler2.equals(event.getEntity())) if (_armorStand != null && _armorStand.equals(event.getEntity()) || _fillers.contains(event.getEntity()))
{ {
event.setCancelled(true); event.setCancelled(true);
} }

View File

@ -5,13 +5,15 @@ import org.bukkit.inventory.ItemStack;
import mineplex.core.command.CommandBase; import mineplex.core.command.CommandBase;
import mineplex.core.common.Rank; import mineplex.core.common.Rank;
import mineplex.core.common.util.F;
import mineplex.core.common.util.UtilPlayer;
import mineplex.game.clans.clans.siege.cannon.Cannon; import mineplex.game.clans.clans.siege.cannon.Cannon;
public class Meow extends CommandBase<OutpostManager> public class CommandSiegeSupplies extends CommandBase<OutpostManager>
{ {
public Meow(OutpostManager plugin) public CommandSiegeSupplies(OutpostManager plugin)
{ {
super(plugin, Rank.ALL, "meow"); super(plugin, Rank.CMOD, "siegesupplies");
} }
@Override @Override
@ -25,5 +27,7 @@ public class Meow extends CommandBase<OutpostManager>
caller.getInventory().addItem(outpost); caller.getInventory().addItem(outpost);
caller.getInventory().addItem(cannons); caller.getInventory().addItem(cannons);
UtilPlayer.message(caller, F.main("Clans", "Received supplies for a siege."));
} }
} }

View File

@ -237,16 +237,7 @@ public class Outpost implements Listener
@EventHandler @EventHandler
public void onBlockPlace(BlockPlaceEvent event) public void onBlockPlace(BlockPlaceEvent event)
{ {
if (event.getItemInHand().isSimilar(Cannon.CANNON_ITEM)) if (event.isCancelled()) return;
{
event.setCancelled(true);
if (_host.spawnCannon(event.getPlayer(), event.getBlock().getLocation()))
{
event.getPlayer().setItemInHand(UtilInv.decrement(event.getPlayer().getItemInHand()));
return;
}
}
if (UtilAlg.inBoundingBox(event.getBlock().getLocation(), _startCorner.clone().subtract(.5, 0, .5), _endCorner)) if (UtilAlg.inBoundingBox(event.getBlock().getLocation(), _startCorner.clone().subtract(.5, 0, .5), _endCorner))
{ {
@ -513,14 +504,6 @@ public class Outpost implements Listener
// AREA IN WHICH CANNONS AND OTHER SIEGE WEAPONS CAN BE PLACED // AREA IN WHICH CANNONS AND OTHER SIEGE WEAPONS CAN BE PLACED
public boolean isInSiegeArea(Location location) public boolean isInSiegeArea(Location location)
{ {
return UtilAlg.inBoundingBox(location, _siegeAreaStart.clone().subtract(.9, 0, .9), _siegeAreaEnd); return UtilAlg.inBoundingBox(location, _siegeAreaStart.clone().subtract(.9, 0, .9), _siegeAreaEnd.clone().add(.9, 0, .9));
}
public void spawnCannon(Player player, Location location)
{
Cannon cannon = new Cannon(location);
_host.getPlugin().getServer().getPluginManager().registerEvents(cannon, _host.getPlugin());
_cannons.add(cannon);
} }
} }

View File

@ -48,32 +48,7 @@ public class OutpostManager extends MiniPlugin
_removalQueue = new ArrayList<>(); _removalQueue = new ArrayList<>();
addCommand(new Meow(this)); addCommand(new CommandSiegeSupplies(this));
}
public boolean spawnCannon(Player player, Location location)
{
if (!_clansManager.isInClan(player))
{
UtilPlayer.message(player, F.main("Clans", "You must be in a Clan to place a cannon."));
return false;
}
if (_clansManager.getClanUtility().isClaimed(location))
{
UtilPlayer.message(player, F.main("Clans", "A cannon must be placed in unclaimed territory."));
return false;
}
if (!isInOutpostSiegeArea(location, _clansManager.getClan(player)))
{
UtilPlayer.message(player, F.main("Clans", "A cannon must be placed in your own Clan's Outpost."));
return false;
}
Get(_clansManager.getClan(player)).spawnCannon(player, location);
return true;
} }
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)