diff --git a/FightSystem_14/src/de/steamwar/fightsystem/utils/FlatteningWrapper14.java b/FightSystem_14/src/de/steamwar/fightsystem/utils/FlatteningWrapper14.java index ff3a1a9..fa872f6 100644 --- a/FightSystem_14/src/de/steamwar/fightsystem/utils/FlatteningWrapper14.java +++ b/FightSystem_14/src/de/steamwar/fightsystem/utils/FlatteningWrapper14.java @@ -80,23 +80,6 @@ public class FlatteningWrapper14 implements FlatteningWrapper { return stack.hasItemMeta() && Objects.requireNonNull(stack.getItemMeta()).hasAttributeModifiers(); } - @Override - public ItemStack onBreak(Block block) { - Material type = block.getType(); - switch(type){ - case REDSTONE_WIRE: - type = Material.REDSTONE; - break; - case PISTON_HEAD: - type = Material.PISTON; - break; - case ICE: - type = Material.AIR; - break; - } - return new ItemStack(type); - } - @Override public boolean doRecord(BlockPhysicsEvent e) { return e.getBlock() == e.getSourceBlock() || e.getChangedType() == Material.AIR; diff --git a/FightSystem_8/src/de/steamwar/fightsystem/utils/FlatteningWrapper8.java b/FightSystem_8/src/de/steamwar/fightsystem/utils/FlatteningWrapper8.java index b88cca2..422dd88 100644 --- a/FightSystem_8/src/de/steamwar/fightsystem/utils/FlatteningWrapper8.java +++ b/FightSystem_8/src/de/steamwar/fightsystem/utils/FlatteningWrapper8.java @@ -60,11 +60,6 @@ public class FlatteningWrapper8 implements FlatteningWrapper { return false; } - @Override - public ItemStack onBreak(Block block) { - return block.getDrops().stream().findAny().orElse(new ItemStack(Material.AIR)); - } - @Override public boolean doRecord(BlockPhysicsEvent e) { return e.getChangedType() != e.getBlock().getType(); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/fight/Kit.java b/FightSystem_Core/src/de/steamwar/fightsystem/fight/Kit.java index 4f0f60c..8b063e7 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/fight/Kit.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/fight/Kit.java @@ -160,6 +160,18 @@ public class Kit { return inventory; } + public boolean contains(ItemStack stack) { + for(ItemStack i : inventory) { + if(similar(i, stack)) + return true; + } + for(ItemStack i : armor) { + if(similar(i, stack)) + return true; + } + return false; + } + public ItemStack[] getArmor() { return armor; } diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java b/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java index 0d7d7e4..6c40cf6 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java @@ -23,6 +23,7 @@ import de.steamwar.fightsystem.ArenaMode; import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.FightSystem; import de.steamwar.fightsystem.fight.Fight; +import de.steamwar.fightsystem.fight.FightPlayer; import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.record.REntity; import de.steamwar.fightsystem.states.FightState; @@ -30,20 +31,23 @@ import de.steamwar.fightsystem.states.StateDependentListener; import net.md_5.bungee.api.ChatMessageType; import org.bukkit.GameMode; import org.bukkit.Material; +import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.entity.SpawnerSpawnEvent; import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.event.inventory.FurnaceSmeltEvent; -import org.bukkit.event.inventory.InventoryPickupItemEvent; import org.bukkit.event.player.*; import org.bukkit.event.weather.WeatherChangeEvent; import org.bukkit.event.world.WorldLoadEvent; +import org.bukkit.inventory.ItemStack; public class Permanent implements Listener { @@ -121,7 +125,7 @@ public class Permanent implements Listener { } @EventHandler - public void onCrafting(CraftItemEvent e){ + public void onCrafting(CraftItemEvent e) { if(Fight.fighting((Player) e.getWhoClicked())) e.setCancelled(true); } @@ -133,15 +137,33 @@ public class Permanent implements Listener { } @EventHandler - public void onDropPickup(InventoryPickupItemEvent e){ - if(Config.ArenaRegion.inRegion(e.getItem().getLocation())) - e.setCancelled(true); + public void onDropPickup(EntityPickupItemEvent e) { + if(!(e.getEntity() instanceof Player || Config.ArenaRegion.inRegion(e.getItem().getLocation()))) + return; + Player player = (Player) e.getEntity(); + + ItemStack stack = e.getItem().getItemStack(); + if(Config.PersonalKits) { + if(Config.ForbiddenItems.contains(stack.getType())) { + e.setCancelled(true); + } + } else { + FightPlayer fp = Fight.getFightPlayer(player); + if(fp == null) + return; + + if(!fp.getKit().contains(stack)) { + e.setCancelled(true); + } + } } - @EventHandler - public void onDropping(PlayerDropItemEvent e){ - if(Fight.fighting(e.getPlayer())) - e.setCancelled(true); + @EventHandler(priority = EventPriority.MONITOR) + public void onExplosion(EntityExplodeEvent e) { + for(Block block : e.blockList()) { + block.setType(Material.AIR); + } + e.blockList().clear(); } @EventHandler diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/listener/RunningWorldInteraction.java b/FightSystem_Core/src/de/steamwar/fightsystem/listener/RunningWorldInteraction.java index a2a9067..7c00a9f 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/listener/RunningWorldInteraction.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/listener/RunningWorldInteraction.java @@ -25,15 +25,11 @@ import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.fight.FightPlayer; import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.StateDependentListener; -import de.steamwar.fightsystem.utils.FlatteningWrapper; import net.md_5.bungee.api.ChatMessageType; import org.bukkit.Material; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; public class RunningWorldInteraction implements Listener { @@ -41,35 +37,6 @@ public class RunningWorldInteraction implements Listener { new StateDependentListener(ArenaMode.AntiReplay, FightState.Running, this); } - @EventHandler - public void onBlockBreak(BlockBreakEvent event) { - if(!Fight.fighting(event.getPlayer())) - return; - - Inventory inventory = event.getPlayer().getInventory(); - - ItemStack stack = FlatteningWrapper.impl.onBreak(event.getBlock()); - - for (int i = 0; i <= 35; i++) { //35 is the last normal inventory slot - ItemStack itemStack = inventory.getItem(i); - if (itemStack != null && itemStack.isSimilar(stack) && itemStack.getAmount() != itemStack.getMaxStackSize()) { - itemStack.setAmount(itemStack.getAmount() + 1); - inventory.setItem(i, itemStack); - event.getPlayer().updateInventory(); - return; - } - } - - for (int i = 0; i <= 35; i++) { //35 is the last normal inventory slot - ItemStack itemStack = inventory.getItem(i); - if (itemStack == null || itemStack.getType().equals(Material.AIR)) { - inventory.setItem(i, stack); - event.getPlayer().updateInventory(); - return; - } - } - } - @EventHandler public void onBlockPlace(BlockPlaceEvent e) { FightPlayer fp = Fight.getFightPlayer(e.getPlayer()); diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/utils/FlatteningWrapper.java b/FightSystem_Core/src/de/steamwar/fightsystem/utils/FlatteningWrapper.java index 57a9b27..5b13c84 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/utils/FlatteningWrapper.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/utils/FlatteningWrapper.java @@ -39,8 +39,6 @@ public interface FlatteningWrapper { boolean containsBlockMeta(ItemMeta meta); boolean hasAttributeModifier(ItemStack stack); - ItemStack onBreak(Block type); - boolean doRecord(BlockPhysicsEvent e); void forceLoadChunk(World world, int cX, int cZ);