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.ListIterator;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class NautArrayList<Elem>
|
||||
{
|
||||
|
@ -135,4 +136,14 @@ public class NautArrayList<Elem>
|
|||
{
|
||||
_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);
|
||||
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.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
|
||||
public class UtilServer
|
||||
{
|
||||
|
@ -86,4 +86,9 @@ public class UtilServer
|
|||
{
|
||||
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(
|
||||
new String[] {
|
||||
C.cDAqua + "Cannons",
|
||||
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!!!!"
|
||||
}),
|
||||
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."
|
||||
C.cDAqua + "Meownon",
|
||||
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."
|
||||
}),
|
||||
;
|
||||
|
||||
|
|
|
@ -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.ClanTips.TipType;
|
||||
import mineplex.game.clans.clans.ClansManager;
|
||||
import mineplex.game.clans.clans.siege.BarrierCollisionBox;
|
||||
|
||||
public class Cannon implements Listener
|
||||
{
|
||||
|
@ -94,6 +95,8 @@ public class Cannon implements Listener
|
|||
|
||||
private ClanInfo _clan;
|
||||
|
||||
private BarrierCollisionBox _collisionBox;
|
||||
|
||||
public Cannon(Location location, ClanInfo clan)
|
||||
{
|
||||
_location = location;
|
||||
|
@ -103,6 +106,11 @@ public class Cannon implements Listener
|
|||
|
||||
_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");
|
||||
|
||||
_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();
|
||||
|
||||
_collisionBox.Destruct();
|
||||
_healthHologram.stop();
|
||||
_healthHologram = null;
|
||||
|
||||
|
@ -154,8 +163,8 @@ public class Cannon implements Listener
|
|||
UtilEnt.setFakeHead(armorStand, true);
|
||||
armorStand.teleport(getArmorStandLocation());
|
||||
armorStand.setVisible(false);
|
||||
armorStand.setGravity(false);
|
||||
armorStand.setHelmet(_state.toItemStack());
|
||||
armorStand.setGravity(false);
|
||||
|
||||
armorStand.setPassenger(UtilMath.getFirst(_entities));
|
||||
|
||||
|
@ -418,17 +427,10 @@ public class Cannon implements Listener
|
|||
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
|
||||
|
@ -436,26 +438,7 @@ public class Cannon implements Listener
|
|||
{
|
||||
if (_entities.contains(event.getRightClicked()))
|
||||
{
|
||||
if (!_clan.isMember(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());
|
||||
}
|
||||
|
||||
handleRightClick(event.getPlayer());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
@ -465,26 +448,7 @@ public class Cannon implements Listener
|
|||
{
|
||||
if (_entities.contains(event.getRightClicked()))
|
||||
{
|
||||
if (!_clan.isMember(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());
|
||||
}
|
||||
|
||||
handleRightClick(event.getPlayer());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
@ -494,30 +458,78 @@ public class Cannon implements Listener
|
|||
{
|
||||
if (_entities.contains(event.getRightClicked()))
|
||||
{
|
||||
if (!_clan.isMember(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());
|
||||
}
|
||||
|
||||
handleRightClick(event.getPlayer());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void handleLeftClick(Player player, double damage)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
Entity passenger = UtilMath.getLast(_entities).getPassenger();
|
||||
if (passenger == null)
|
||||
{
|
||||
UtilMath.getLast(_entities).setPassenger(player);
|
||||
|
||||
_rider = player;
|
||||
|
||||
ClansManager.getInstance().ClanTips.displayTip(TipType.MOUNT_CANNON, _rider);
|
||||
}
|
||||
else
|
||||
{
|
||||
handleOpenInv(player);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void update(UpdateEvent event)
|
||||
{
|
||||
|
|
|
@ -34,6 +34,7 @@ import mineplex.core.common.util.F;
|
|||
import mineplex.core.common.util.UtilAlg;
|
||||
import mineplex.core.common.util.UtilEnt;
|
||||
import mineplex.core.common.util.UtilInv;
|
||||
import mineplex.core.common.util.UtilItem;
|
||||
import mineplex.core.common.util.UtilMath;
|
||||
import mineplex.core.common.util.UtilParticle;
|
||||
import mineplex.core.common.util.UtilParticle.ParticleType;
|
||||
|
@ -49,6 +50,8 @@ import mineplex.core.updater.UpdateType;
|
|||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.game.clans.clans.ClanInfo;
|
||||
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
|
||||
{
|
||||
|
@ -91,7 +94,7 @@ public class Catapult implements Listener
|
|||
|
||||
private Hologram _healthHologram;
|
||||
|
||||
private List<Block> _barriers;
|
||||
private BarrierCollisionBox _collisionBox;
|
||||
|
||||
public Catapult(Location location, ClanInfo clan)
|
||||
{
|
||||
|
@ -101,12 +104,10 @@ public class Catapult implements Listener
|
|||
_rotationPoints = new ArrayList<>();
|
||||
_entities = new ArrayList<>();
|
||||
|
||||
_barriers = new ArrayList<>();
|
||||
|
||||
_barriers.add(_location.getBlock());
|
||||
_barriers.add(_location.getBlock().getRelative(BlockFace.UP));
|
||||
|
||||
_barriers.forEach(block -> block.setType(Material.BARRIER));
|
||||
_collisionBox = BarrierCollisionBox.all(_location.clone().subtract(1, 0, 1), _location.clone().add(1.5, 2, 1.5));
|
||||
_collisionBox.Construct();
|
||||
_collisionBox.registerRight((block, player) -> handleOpenInv(player));
|
||||
_collisionBox.registerLeft((block, player) -> handleLeftClick(player, -1));
|
||||
|
||||
for (int i = 0; i < 20; i++)
|
||||
{
|
||||
|
@ -132,7 +133,7 @@ public class Catapult implements Listener
|
|||
_healthHologram.stop();
|
||||
_healthHologram = null;
|
||||
|
||||
_barriers.forEach(block -> block.setType(Material.AIR));
|
||||
_collisionBox.Destruct();
|
||||
|
||||
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
|
||||
public void update(UpdateEvent event)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue