From 96034d3b0edb2684e1395221c51de5122eec21c2 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Thu, 23 Dec 2021 17:50:26 +0100 Subject: [PATCH 1/3] Reactivating items Signed-off-by: Lixfel --- .../utils/FlatteningWrapper14.java | 17 --------- .../fightsystem/utils/FlatteningWrapper8.java | 5 --- .../de/steamwar/fightsystem/fight/Kit.java | 12 +++++++ .../fightsystem/listener/Permanent.java | 36 +++++++++++++++---- .../listener/RunningWorldInteraction.java | 30 ---------------- .../fightsystem/utils/FlatteningWrapper.java | 2 -- 6 files changed, 42 insertions(+), 60 deletions(-) diff --git a/FightSystem_14/src/de/steamwar/fightsystem/utils/FlatteningWrapper14.java b/FightSystem_14/src/de/steamwar/fightsystem/utils/FlatteningWrapper14.java index 3cd74c0..f5af2b2 100644 --- a/FightSystem_14/src/de/steamwar/fightsystem/utils/FlatteningWrapper14.java +++ b/FightSystem_14/src/de/steamwar/fightsystem/utils/FlatteningWrapper14.java @@ -83,23 +83,6 @@ public class FlatteningWrapper14 implements FlatteningWrapper.IFlatteningWrapper 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 e672541..733d895 100644 --- a/FightSystem_8/src/de/steamwar/fightsystem/utils/FlatteningWrapper8.java +++ b/FightSystem_8/src/de/steamwar/fightsystem/utils/FlatteningWrapper8.java @@ -62,11 +62,6 @@ public class FlatteningWrapper8 implements FlatteningWrapper.IFlatteningWrapper 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 89bdcf0..3944180 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/fight/Kit.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/fight/Kit.java @@ -149,6 +149,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 1b242a0..94d6453 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java @@ -23,24 +23,29 @@ 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; 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.entity.FoodLevelChangeEvent; 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 { @@ -107,7 +112,7 @@ public class Permanent implements Listener { } @EventHandler - public void onCrafting(CraftItemEvent e){ + public void onCrafting(CraftItemEvent e) { e.setCancelled(true); } @@ -117,13 +122,32 @@ public class Permanent implements Listener { } @EventHandler - public void onDropPickup(InventoryPickupItemEvent e){ - e.setCancelled(true); + public void onDropPickup(EntityPickupItemEvent e) { + if(!(e.getEntity() instanceof Player)) + 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){ - e.setCancelled(true); + public void onExplosion(EntityExplodeEvent e) { + for(Block block : e.blockList()) { + block.setType(Material.AIR); + } } @EventHandler diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/listener/RunningWorldInteraction.java b/FightSystem_Core/src/de/steamwar/fightsystem/listener/RunningWorldInteraction.java index 828fb31..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,32 +37,6 @@ public class RunningWorldInteraction implements Listener { new StateDependentListener(ArenaMode.AntiReplay, FightState.Running, this); } - @EventHandler - public void onBlockBreak(BlockBreakEvent event) { - 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 13a5ab1..5bf3a2b 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/utils/FlatteningWrapper.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/utils/FlatteningWrapper.java @@ -43,8 +43,6 @@ public class 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); -- 2.39.2 From b909371fed553fd8e883fa2e08b7bfaa9c8ce302 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Thu, 23 Dec 2021 17:50:26 +0100 Subject: [PATCH 2/3] Reactivating items Signed-off-by: Lixfel --- .../utils/FlatteningWrapper14.java | 17 -------- .../fightsystem/utils/FlatteningWrapper8.java | 5 --- .../de/steamwar/fightsystem/fight/Kit.java | 12 ++++++ .../fightsystem/listener/Permanent.java | 40 ++++++++++++++----- .../listener/RunningWorldInteraction.java | 33 --------------- .../fightsystem/utils/FlatteningWrapper.java | 2 - 6 files changed, 43 insertions(+), 66 deletions(-) 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); -- 2.39.2 From 1890471609a79f15b844dca8a592f59a03c6f441 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Tue, 28 Feb 2023 12:55:00 +0100 Subject: [PATCH 3/3] Fix Items bugs Signed-off-by: Lixfel --- .../de/steamwar/fightsystem/fight/FreezeWorld.java | 5 +++++ .../fightsystem/listener/DenyWorldInteraction.java | 9 +++++++++ .../steamwar/fightsystem/listener/Permanent.java | 14 +++++++++----- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FreezeWorld.java b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FreezeWorld.java index b94fc72..7b58543 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/fight/FreezeWorld.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/fight/FreezeWorld.java @@ -27,6 +27,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.event.block.*; +import org.bukkit.event.entity.ItemSpawnEvent; import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.player.PlayerInteractEvent; @@ -83,6 +84,10 @@ public class FreezeWorld implements Listener { public void onBlockExplosion(BlockExplodeEvent e){ e.setCancelled(true); } + @EventHandler + public void onBlockExplosion(ItemSpawnEvent e){ + e.setCancelled(true); + } @EventHandler(priority = EventPriority.LOW) public void handlePlayerInteract(PlayerInteractEvent event) { diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/listener/DenyWorldInteraction.java b/FightSystem_Core/src/de/steamwar/fightsystem/listener/DenyWorldInteraction.java index 4ad97c9..f494d0b 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/listener/DenyWorldInteraction.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/listener/DenyWorldInteraction.java @@ -35,6 +35,7 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; import org.bukkit.event.hanging.HangingBreakEvent; +import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerKickEvent; public class DenyWorldInteraction implements Listener { @@ -53,6 +54,14 @@ public class DenyWorldInteraction implements Listener { } } + @EventHandler + public void handleItemDrop(PlayerDropItemEvent event) { + Player player = event.getPlayer(); + if(Fight.fighting(player)) { + event.setCancelled(true); + } + } + @EventHandler public void handleHangingBreak(HangingBreakEvent event) { if(Config.ArenaRegion.inRegion(event.getEntity().getLocation())) { diff --git a/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java b/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java index 877e3e5..2cccdf9 100644 --- a/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java +++ b/FightSystem_Core/src/de/steamwar/fightsystem/listener/Permanent.java @@ -137,7 +137,7 @@ public class Permanent implements Listener { @EventHandler public void onDropPickup(EntityPickupItemEvent e) { - if(!(e.getEntity() instanceof Player || Config.ArenaRegion.inRegion(e.getItem().getLocation()))) + if(!(e.getEntity() instanceof Player) || !(Config.ArenaRegion.inRegion(e.getItem().getLocation()))) return; Player player = (Player) e.getEntity(); @@ -159,10 +159,14 @@ public class Permanent implements Listener { @EventHandler(priority = EventPriority.MONITOR) public void onExplosion(EntityExplodeEvent e) { - for(Block block : e.blockList()) { - block.setType(Material.AIR); - } - e.blockList().clear(); + e.blockList().removeIf(block -> { + if(block.getType() == Material.TNT) { + return false; + } else { + block.setType(Material.AIR); + return true; + } + }); } @EventHandler -- 2.39.2