collision boxes on siege weapons and other stuff
This commit is contained in:
parent
76dba421b4
commit
7d28bc69c9
|
@ -6,6 +6,7 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.ListIterator;
|
import java.util.ListIterator;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
public class NautArrayList<Elem>
|
public class NautArrayList<Elem>
|
||||||
{
|
{
|
||||||
|
@ -135,4 +136,14 @@ public class NautArrayList<Elem>
|
||||||
{
|
{
|
||||||
_wrappedArrayList.forEach(consumer);
|
_wrappedArrayList.forEach(consumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Stream<Elem> stream()
|
||||||
|
{
|
||||||
|
return _wrappedArrayList.stream();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Elem> getWrapped()
|
||||||
|
{
|
||||||
|
return _wrappedArrayList;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1125,4 +1125,56 @@ public class UtilItem
|
||||||
i.setItemMeta(im);
|
i.setItemMeta(im);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static double getAttackDamage(Material type)
|
||||||
|
{
|
||||||
|
return ItemDamage.get(type);
|
||||||
|
}
|
||||||
|
|
||||||
|
enum ItemDamage
|
||||||
|
{
|
||||||
|
IRON_SHOVEL(Material.IRON_SPADE, 3),
|
||||||
|
IRON_PICKAXE(Material.IRON_PICKAXE, 4),
|
||||||
|
IRON_AXE(Material.IRON_AXE, 5),
|
||||||
|
WOODEN_SHOVEL(Material.WOOD_SPADE, 1),
|
||||||
|
WOODEN_PICKAXE(Material.WOOD_PICKAXE, 2),
|
||||||
|
WOODEN_AXE(Material.WOOD_AXE, 3),
|
||||||
|
STONE_SHOVEL(Material.STONE_SPADE, 2),
|
||||||
|
STONE_PICKAXE(Material.STONE_PICKAXE, 3),
|
||||||
|
STONE_AXE(Material.STONE_AXE, 4),
|
||||||
|
DIAMOND_SHOVEL(Material.DIAMOND_SPADE, 4),
|
||||||
|
DIAMOND_PICKAXE(Material.DIAMOND_PICKAXE, 5),
|
||||||
|
DIAMOND_AXE(Material.DIAMOND_AXE, 6),
|
||||||
|
GOLD_SHOVEL(Material.GOLD_SPADE, 1),
|
||||||
|
GOLD_PICKAXE(Material.GOLD_PICKAXE, 2),
|
||||||
|
GOLD_AXE(Material.GOLD_AXE, 3),
|
||||||
|
IRON_SWORD(Material.IRON_SWORD, 6),
|
||||||
|
WOODEN_SWORD(Material.WOOD_SWORD, 4),
|
||||||
|
STONE_SWORD(Material.STONE_SWORD, 5),
|
||||||
|
DIAMOND_SWORD(Material.DIAMOND_SWORD, 7),
|
||||||
|
GOLDEN_SWORD(Material.GOLD_SWORD, 4);
|
||||||
|
|
||||||
|
private double _damage;
|
||||||
|
private Material _type;
|
||||||
|
|
||||||
|
ItemDamage(Material type, double damage)
|
||||||
|
{
|
||||||
|
_type = type;
|
||||||
|
_damage = damage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double get(Material type)
|
||||||
|
{
|
||||||
|
for (ItemDamage item : values())
|
||||||
|
{
|
||||||
|
if (item._type.equals(type))
|
||||||
|
{
|
||||||
|
return item._damage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,12 +6,12 @@ import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.PluginManager;
|
||||||
|
|
||||||
public class UtilServer
|
public class UtilServer
|
||||||
{
|
{
|
||||||
|
@ -86,4 +86,9 @@ public class UtilServer
|
||||||
{
|
{
|
||||||
return (double)getPlayers().length / (double)UtilServer.getServer().getMaxPlayers();
|
return (double)getPlayers().length / (double)UtilServer.getServer().getMaxPlayers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static PluginManager getPluginManager()
|
||||||
|
{
|
||||||
|
return getServer().getPluginManager();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -221,13 +221,8 @@ public class ClanTips extends MiniPlugin
|
||||||
}),
|
}),
|
||||||
MOUNT_CANNON(
|
MOUNT_CANNON(
|
||||||
new String[] {
|
new String[] {
|
||||||
C.cDAqua + "Cannons",
|
C.cDAqua + "Meownon",
|
||||||
C.cAqua + "A Cannon is a Siege weapon used to infiltrate your enemies bases. NEEDS MORE INFO HERE, I'M NOT GOOD AT THINKING UP STUFF THIS LATE!!!!"
|
C.cAqua + "Congratulations on your new purchase! You are now in possesion, of the one, and only, Meownon 3000.24! " + C.Italics + "we are not responsible for any injuries caused by the meownon, or any related products. stay safe kids."
|
||||||
}),
|
|
||||||
MOUNT_CATAPULT(
|
|
||||||
new String[] {
|
|
||||||
C.cDAqua + "Meowapult",
|
|
||||||
C.cAqua + "Congratulations on your new purchase! You are now in possesion, of the one, and only, Meowapult 3000.24! " + C.Italics + "we are not responsible for any injuries caused by the meowapult, or any related products. please stay safe."
|
|
||||||
}),
|
}),
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,251 @@
|
||||||
|
package mineplex.game.clans.clans.siege;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.Action;
|
||||||
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
|
import org.bukkit.event.block.BlockDamageEvent;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
|
||||||
|
import mineplex.core.common.util.UtilBlock;
|
||||||
|
import mineplex.core.common.util.UtilServer;
|
||||||
|
import mineplex.core.updater.UpdateType;
|
||||||
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
|
|
||||||
|
public class BarrierCollisionBox implements Listener
|
||||||
|
{
|
||||||
|
private List<Location> _collisionBlocks;
|
||||||
|
|
||||||
|
private List<BiConsumer<Location, Player>> _leftClickListeners;
|
||||||
|
private List<BiConsumer<Location, Player>> _rightClickListeners;
|
||||||
|
|
||||||
|
BarrierCollisionBox()
|
||||||
|
{
|
||||||
|
_collisionBlocks = new ArrayList<>();
|
||||||
|
|
||||||
|
_leftClickListeners = new ArrayList<>();
|
||||||
|
_rightClickListeners = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
BarrierCollisionBox(List<Location> locations)
|
||||||
|
{
|
||||||
|
this();
|
||||||
|
|
||||||
|
_collisionBlocks.addAll(locations);
|
||||||
|
}
|
||||||
|
|
||||||
|
BarrierCollisionBox(Location start, Location end)
|
||||||
|
{
|
||||||
|
this();
|
||||||
|
|
||||||
|
UtilBlock.getInBoundingBox(start, end, false).forEach(block -> _collisionBlocks.add(block.getLocation()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Construct()
|
||||||
|
{
|
||||||
|
setBlocks();
|
||||||
|
|
||||||
|
UtilServer.getPluginManager().registerEvents(this, UtilServer.getServer().getPluginManager().getPlugins()[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Destruct()
|
||||||
|
{
|
||||||
|
System.out.println("Destructing...");
|
||||||
|
HandlerList.unregisterAll(this);
|
||||||
|
|
||||||
|
resetBlocks();
|
||||||
|
|
||||||
|
_leftClickListeners.clear();
|
||||||
|
_rightClickListeners.clear();
|
||||||
|
_collisionBlocks.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update()
|
||||||
|
{
|
||||||
|
setBlocks();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerLeft(BiConsumer<Location, Player> listener)
|
||||||
|
{
|
||||||
|
_leftClickListeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerRight(BiConsumer<Location, Player> listener)
|
||||||
|
{
|
||||||
|
_rightClickListeners.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterLeft(BiConsumer<Location, Player> listener)
|
||||||
|
{
|
||||||
|
_leftClickListeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterRight(BiConsumer<Location, Player> listener)
|
||||||
|
{
|
||||||
|
_rightClickListeners.remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onLeftClick(Location location, Player player)
|
||||||
|
{
|
||||||
|
_leftClickListeners.forEach(listener -> listener.accept(location, player));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onRightClick(Location location, Player player)
|
||||||
|
{
|
||||||
|
_rightClickListeners.forEach(listener -> listener.accept(location, player));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resetBlocks()
|
||||||
|
{
|
||||||
|
_collisionBlocks
|
||||||
|
.stream()
|
||||||
|
.filter(location -> location.getBlock().getType().equals(Material.BARRIER))
|
||||||
|
.forEach(location -> location.getBlock().setType(Material.AIR));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setBlocks()
|
||||||
|
{
|
||||||
|
for (Location location : _collisionBlocks)
|
||||||
|
{
|
||||||
|
location.getBlock().setType(Material.BARRIER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isInBox(Location location)
|
||||||
|
{
|
||||||
|
for (Location boxLocation : _collisionBlocks)
|
||||||
|
{
|
||||||
|
if (boxLocation.equals(location))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void update(UpdateEvent event)
|
||||||
|
{
|
||||||
|
if (event.getType() == UpdateType.FAST)
|
||||||
|
{
|
||||||
|
Update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Events for interaction with the collision box;
|
||||||
|
@EventHandler
|
||||||
|
public void blockDamage(BlockDamageEvent event)
|
||||||
|
{
|
||||||
|
if (isInBox(event.getBlock().getLocation()))
|
||||||
|
{
|
||||||
|
onLeftClick(event.getBlock().getLocation(), event.getPlayer());
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void blockBreak(BlockBreakEvent event)
|
||||||
|
{
|
||||||
|
if (isInBox(event.getBlock().getLocation()))
|
||||||
|
{
|
||||||
|
onLeftClick(event.getBlock().getLocation(), event.getPlayer());
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void interact(PlayerInteractEvent event)
|
||||||
|
{
|
||||||
|
if (event.getAction() != Action.RIGHT_CLICK_BLOCK)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isInBox(event.getClickedBlock().getLocation()))
|
||||||
|
{
|
||||||
|
onRightClick(event.getClickedBlock().getLocation(), event.getPlayer());
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public BarrierCollisionBox add(Location... location)
|
||||||
|
{
|
||||||
|
_collisionBlocks.addAll(Arrays.asList(location));
|
||||||
|
|
||||||
|
Update();
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BarrierCollisionBox add(List<Location> location)
|
||||||
|
{
|
||||||
|
_collisionBlocks.addAll(location);
|
||||||
|
|
||||||
|
Update();
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BarrierCollisionBox remove(Location... location)
|
||||||
|
{
|
||||||
|
_collisionBlocks.removeAll(Arrays.asList(location));
|
||||||
|
|
||||||
|
Update();
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BarrierCollisionBox add(BarrierCollisionBox box, boolean destructOld, boolean cloneListeners)
|
||||||
|
{
|
||||||
|
_collisionBlocks.addAll(box._collisionBlocks);
|
||||||
|
|
||||||
|
if (cloneListeners)
|
||||||
|
{
|
||||||
|
_leftClickListeners.addAll(box._leftClickListeners);
|
||||||
|
_rightClickListeners.addAll(box._rightClickListeners);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (destructOld)
|
||||||
|
{
|
||||||
|
box.Destruct();
|
||||||
|
}
|
||||||
|
|
||||||
|
Update();
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BarrierCollisionBox add(BarrierCollisionBox box)
|
||||||
|
{
|
||||||
|
return add(box, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BarrierCollisionBox addAll(Location start, Location end)
|
||||||
|
{
|
||||||
|
UtilBlock.getInBoundingBox(start, end).forEach(block -> _collisionBlocks.add(block.getLocation()));
|
||||||
|
|
||||||
|
Update();
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BarrierCollisionBox all(Location start, Location end)
|
||||||
|
{
|
||||||
|
return new BarrierCollisionBox(start, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BarrierCollisionBox single(Location location)
|
||||||
|
{
|
||||||
|
return new BarrierCollisionBox(new ArrayList<>(Arrays.asList(location)));
|
||||||
|
}
|
||||||
|
}
|
|
@ -55,6 +55,7 @@ import mineplex.core.updater.event.UpdateEvent;
|
||||||
import mineplex.game.clans.clans.ClanInfo;
|
import mineplex.game.clans.clans.ClanInfo;
|
||||||
import mineplex.game.clans.clans.ClanTips.TipType;
|
import mineplex.game.clans.clans.ClanTips.TipType;
|
||||||
import mineplex.game.clans.clans.ClansManager;
|
import mineplex.game.clans.clans.ClansManager;
|
||||||
|
import mineplex.game.clans.clans.siege.BarrierCollisionBox;
|
||||||
|
|
||||||
public class Cannon implements Listener
|
public class Cannon implements Listener
|
||||||
{
|
{
|
||||||
|
@ -94,6 +95,8 @@ public class Cannon implements Listener
|
||||||
|
|
||||||
private ClanInfo _clan;
|
private ClanInfo _clan;
|
||||||
|
|
||||||
|
private BarrierCollisionBox _collisionBox;
|
||||||
|
|
||||||
public Cannon(Location location, ClanInfo clan)
|
public Cannon(Location location, ClanInfo clan)
|
||||||
{
|
{
|
||||||
_location = location;
|
_location = location;
|
||||||
|
@ -103,6 +106,11 @@ public class Cannon implements Listener
|
||||||
|
|
||||||
_entities = new ArrayList<>();
|
_entities = new ArrayList<>();
|
||||||
|
|
||||||
|
_collisionBox = BarrierCollisionBox.single(_location.clone());
|
||||||
|
_collisionBox.Construct();
|
||||||
|
_collisionBox.registerRight((block, player) -> handleRightClick(player));
|
||||||
|
_collisionBox.registerLeft((block, player) -> handleLeftClick(player, -1));
|
||||||
|
|
||||||
_inventory = UtilServer.getServer().createInventory(null, InventoryType.DISPENSER, C.cRedB + "Cannon");
|
_inventory = UtilServer.getServer().createInventory(null, InventoryType.DISPENSER, C.cRedB + "Cannon");
|
||||||
|
|
||||||
_healthHologram = new Hologram(ClansManager.getInstance().getHologramManager(), location.clone().add(.5, 3, .5), "Cannon Health", getDisplayHealth());
|
_healthHologram = new Hologram(ClansManager.getInstance().getHologramManager(), location.clone().add(.5, 3, .5), "Cannon Health", getDisplayHealth());
|
||||||
|
@ -117,6 +125,7 @@ public class Cannon implements Listener
|
||||||
|
|
||||||
_entities.clear();
|
_entities.clear();
|
||||||
|
|
||||||
|
_collisionBox.Destruct();
|
||||||
_healthHologram.stop();
|
_healthHologram.stop();
|
||||||
_healthHologram = null;
|
_healthHologram = null;
|
||||||
|
|
||||||
|
@ -154,8 +163,8 @@ public class Cannon implements Listener
|
||||||
UtilEnt.setFakeHead(armorStand, true);
|
UtilEnt.setFakeHead(armorStand, true);
|
||||||
armorStand.teleport(getArmorStandLocation());
|
armorStand.teleport(getArmorStandLocation());
|
||||||
armorStand.setVisible(false);
|
armorStand.setVisible(false);
|
||||||
armorStand.setGravity(false);
|
|
||||||
armorStand.setHelmet(_state.toItemStack());
|
armorStand.setHelmet(_state.toItemStack());
|
||||||
|
armorStand.setGravity(false);
|
||||||
|
|
||||||
armorStand.setPassenger(UtilMath.getFirst(_entities));
|
armorStand.setPassenger(UtilMath.getFirst(_entities));
|
||||||
|
|
||||||
|
@ -418,17 +427,10 @@ public class Cannon implements Listener
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_clan.isMember((Player) event.getDamager()))
|
if (!(event.getDamager() instanceof Player))
|
||||||
{
|
{
|
||||||
removeHealth(event.getFinalDamage());
|
handleLeftClick((Player) event.getDamager(), event.getFinalDamage());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!event.getDamager().equals(_rider))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
attemptFire();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
@ -436,26 +438,7 @@ public class Cannon implements Listener
|
||||||
{
|
{
|
||||||
if (_entities.contains(event.getRightClicked()))
|
if (_entities.contains(event.getRightClicked()))
|
||||||
{
|
{
|
||||||
if (!_clan.isMember(event.getPlayer()))
|
handleRightClick(event.getPlayer());
|
||||||
{
|
|
||||||
UtilPlayer.message(event.getPlayer(), F.main("Clans", "This Cannon does not belong to your Clan."));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity passenger = UtilMath.getLast(_entities);
|
|
||||||
if (passenger == null)
|
|
||||||
{
|
|
||||||
UtilMath.getLast(_entities).setPassenger(event.getPlayer());
|
|
||||||
|
|
||||||
_rider = event.getPlayer();
|
|
||||||
|
|
||||||
ClansManager.getInstance().ClanTips.displayTip(TipType.MOUNT_CANNON, _rider);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
handleOpenInv(event.getPlayer());
|
|
||||||
}
|
|
||||||
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -465,26 +448,7 @@ public class Cannon implements Listener
|
||||||
{
|
{
|
||||||
if (_entities.contains(event.getRightClicked()))
|
if (_entities.contains(event.getRightClicked()))
|
||||||
{
|
{
|
||||||
if (!_clan.isMember(event.getPlayer()))
|
handleRightClick(event.getPlayer());
|
||||||
{
|
|
||||||
UtilPlayer.message(event.getPlayer(), F.main("Clans", "This Cannon does not belong to your Clan."));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity passenger = UtilMath.getLast(_entities).getPassenger();
|
|
||||||
if (passenger == null)
|
|
||||||
{
|
|
||||||
UtilMath.getLast(_entities).setPassenger(event.getPlayer());
|
|
||||||
|
|
||||||
_rider = event.getPlayer();
|
|
||||||
|
|
||||||
ClansManager.getInstance().ClanTips.displayTip(TipType.MOUNT_CANNON, _rider);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
handleOpenInv(event.getPlayer());
|
|
||||||
}
|
|
||||||
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -494,27 +458,75 @@ public class Cannon implements Listener
|
||||||
{
|
{
|
||||||
if (_entities.contains(event.getRightClicked()))
|
if (_entities.contains(event.getRightClicked()))
|
||||||
{
|
{
|
||||||
if (!_clan.isMember(event.getPlayer()))
|
handleRightClick(event.getPlayer());
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handleLeftClick(Player player, double damage)
|
||||||
{
|
{
|
||||||
UtilPlayer.message(event.getPlayer(), F.main("Clans", "This Cannon does not belong to your Clan."));
|
if (!_clan.isMember(player))
|
||||||
|
{
|
||||||
|
removeHealth(damage == -1 ? calcDmg(player) : damage);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!player.equals(_rider))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
attemptFire();
|
||||||
|
}
|
||||||
|
|
||||||
|
private double calcDmg(Player player)
|
||||||
|
{
|
||||||
|
ItemStack item = player.getItemInHand();
|
||||||
|
|
||||||
|
if (item == null)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
double dmg = UtilItem.getAttackDamage(item.getType());
|
||||||
|
|
||||||
|
switch(item.getType())
|
||||||
|
{
|
||||||
|
case RECORD_4:
|
||||||
|
dmg += 7;
|
||||||
|
case GREEN_RECORD:
|
||||||
|
dmg += 6;
|
||||||
|
case GOLD_RECORD:
|
||||||
|
dmg += 9;
|
||||||
|
case RECORD_3:
|
||||||
|
dmg += 1;
|
||||||
|
case RECORD_5:
|
||||||
|
dmg += 7;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
|
return dmg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handleRightClick(Player player)
|
||||||
|
{
|
||||||
|
if (!_clan.isMember(player))
|
||||||
|
{
|
||||||
|
UtilPlayer.message(player, F.main("Clans", "This Cannon does not belong to your Clan."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Entity passenger = UtilMath.getLast(_entities).getPassenger();
|
Entity passenger = UtilMath.getLast(_entities).getPassenger();
|
||||||
if (passenger == null)
|
if (passenger == null)
|
||||||
{
|
{
|
||||||
UtilMath.getLast(_entities).setPassenger(event.getPlayer());
|
UtilMath.getLast(_entities).setPassenger(player);
|
||||||
|
|
||||||
_rider = event.getPlayer();
|
_rider = player;
|
||||||
|
|
||||||
ClansManager.getInstance().ClanTips.displayTip(TipType.MOUNT_CANNON, _rider);
|
ClansManager.getInstance().ClanTips.displayTip(TipType.MOUNT_CANNON, _rider);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
handleOpenInv(event.getPlayer());
|
handleOpenInv(player);
|
||||||
}
|
|
||||||
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@ import mineplex.core.common.util.F;
|
||||||
import mineplex.core.common.util.UtilAlg;
|
import mineplex.core.common.util.UtilAlg;
|
||||||
import mineplex.core.common.util.UtilEnt;
|
import mineplex.core.common.util.UtilEnt;
|
||||||
import mineplex.core.common.util.UtilInv;
|
import mineplex.core.common.util.UtilInv;
|
||||||
|
import mineplex.core.common.util.UtilItem;
|
||||||
import mineplex.core.common.util.UtilMath;
|
import mineplex.core.common.util.UtilMath;
|
||||||
import mineplex.core.common.util.UtilParticle;
|
import mineplex.core.common.util.UtilParticle;
|
||||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||||
|
@ -49,6 +50,8 @@ import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
import mineplex.game.clans.clans.ClanInfo;
|
import mineplex.game.clans.clans.ClanInfo;
|
||||||
import mineplex.game.clans.clans.ClansManager;
|
import mineplex.game.clans.clans.ClansManager;
|
||||||
|
import mineplex.game.clans.clans.ClanTips.TipType;
|
||||||
|
import mineplex.game.clans.clans.siege.BarrierCollisionBox;
|
||||||
|
|
||||||
public class Catapult implements Listener
|
public class Catapult implements Listener
|
||||||
{
|
{
|
||||||
|
@ -91,7 +94,7 @@ public class Catapult implements Listener
|
||||||
|
|
||||||
private Hologram _healthHologram;
|
private Hologram _healthHologram;
|
||||||
|
|
||||||
private List<Block> _barriers;
|
private BarrierCollisionBox _collisionBox;
|
||||||
|
|
||||||
public Catapult(Location location, ClanInfo clan)
|
public Catapult(Location location, ClanInfo clan)
|
||||||
{
|
{
|
||||||
|
@ -101,12 +104,10 @@ public class Catapult implements Listener
|
||||||
_rotationPoints = new ArrayList<>();
|
_rotationPoints = new ArrayList<>();
|
||||||
_entities = new ArrayList<>();
|
_entities = new ArrayList<>();
|
||||||
|
|
||||||
_barriers = new ArrayList<>();
|
_collisionBox = BarrierCollisionBox.all(_location.clone().subtract(1, 0, 1), _location.clone().add(1.5, 2, 1.5));
|
||||||
|
_collisionBox.Construct();
|
||||||
_barriers.add(_location.getBlock());
|
_collisionBox.registerRight((block, player) -> handleOpenInv(player));
|
||||||
_barriers.add(_location.getBlock().getRelative(BlockFace.UP));
|
_collisionBox.registerLeft((block, player) -> handleLeftClick(player, -1));
|
||||||
|
|
||||||
_barriers.forEach(block -> block.setType(Material.BARRIER));
|
|
||||||
|
|
||||||
for (int i = 0; i < 20; i++)
|
for (int i = 0; i < 20; i++)
|
||||||
{
|
{
|
||||||
|
@ -132,7 +133,7 @@ public class Catapult implements Listener
|
||||||
_healthHologram.stop();
|
_healthHologram.stop();
|
||||||
_healthHologram = null;
|
_healthHologram = null;
|
||||||
|
|
||||||
_barriers.forEach(block -> block.setType(Material.AIR));
|
_collisionBox.Destruct();
|
||||||
|
|
||||||
HandlerList.unregisterAll(this);
|
HandlerList.unregisterAll(this);
|
||||||
}
|
}
|
||||||
|
@ -411,6 +412,47 @@ public class Catapult implements Listener
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void handleLeftClick(Player player, double damage)
|
||||||
|
{
|
||||||
|
if (!_clan.isMember(player))
|
||||||
|
{
|
||||||
|
removeHealth(damage == -1 ? calcDmg(player) : damage);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
attemptFire(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private double calcDmg(Player player)
|
||||||
|
{
|
||||||
|
ItemStack item = player.getItemInHand();
|
||||||
|
|
||||||
|
if (item == null)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
double dmg = UtilItem.getAttackDamage(item.getType());
|
||||||
|
|
||||||
|
switch(item.getType())
|
||||||
|
{
|
||||||
|
case RECORD_4:
|
||||||
|
dmg += 7;
|
||||||
|
case GREEN_RECORD:
|
||||||
|
dmg += 6;
|
||||||
|
case GOLD_RECORD:
|
||||||
|
dmg += 9;
|
||||||
|
case RECORD_3:
|
||||||
|
dmg += 1;
|
||||||
|
case RECORD_5:
|
||||||
|
dmg += 7;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
|
return dmg;
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void update(UpdateEvent event)
|
public void update(UpdateEvent event)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue