diff --git a/core/src/main/java/tc/oc/pgm/spawns/states/Observing.java b/core/src/main/java/tc/oc/pgm/spawns/states/Observing.java index ddf6dbf7c0..261ca9974a 100644 --- a/core/src/main/java/tc/oc/pgm/spawns/states/Observing.java +++ b/core/src/main/java/tc/oc/pgm/spawns/states/Observing.java @@ -1,10 +1,7 @@ package tc.oc.pgm.spawns.states; -import java.util.EnumSet; -import java.util.Set; import org.bukkit.GameMode; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.inventory.InventoryClickEvent; @@ -12,7 +9,6 @@ import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; -import org.bukkit.material.Door; import tc.oc.pgm.api.match.event.MatchStartEvent; import tc.oc.pgm.api.party.Competitor; import tc.oc.pgm.api.player.MatchPlayer; @@ -26,11 +22,6 @@ public class Observing extends State { - // A set of item types which, when used to interact with the match environment by non-playing - // users, can potentially cause client-server de-sync - private static final Set BAD_TYPES = - EnumSet.of(Materials.LILY_PAD, Material.BUCKET, Material.LAVA_BUCKET, Material.WATER_BUCKET); - private static final double VOID_HEIGHT = -64; private final boolean reset; @@ -131,7 +122,7 @@ public void onEvent(InventoryClickEvent event) { || event.getCursor() == null) return; ItemStack item = event.getCursor(); - if (BAD_TYPES.contains(item.getType()) || item.getData() instanceof Door) { + if (Materials.FORBIDDEN_OBSERVER_TYPES.matches(item)) { event.setCancelled(true); } } diff --git a/util/src/main/java/tc/oc/pgm/util/material/Materials.java b/util/src/main/java/tc/oc/pgm/util/material/Materials.java index 11eed97621..587048fa2f 100644 --- a/util/src/main/java/tc/oc/pgm/util/material/Materials.java +++ b/util/src/main/java/tc/oc/pgm/util/material/Materials.java @@ -52,6 +52,17 @@ public interface Materials { .addNullable(Material.getMaterial("MACE")) .build(); + MaterialMatcher DOOR_ITEMS = MaterialMatcher.builder() + .addAll(m -> m.name().contains("_DOOR") && !m.isBlock()) + .build(); + + // A set of item types which, when used to interact with the match environment by non-playing + // users, can potentially cause client-server de-sync + MaterialMatcher FORBIDDEN_OBSERVER_TYPES = MaterialMatcher.builder() + .addAll(m -> DOOR_ITEMS.matches(m)) + .addAll(Materials.LILY_PAD, Material.BUCKET, Material.LAVA_BUCKET, Material.WATER_BUCKET) + .build(); + MaterialMatcher SOLID_EXCLUSIONS = MaterialMatcher.builder() .add(parse("SIGN_POST", "LEGACY_SIGN_POST")) // on modern, it's just *_SIGN .addAll(m -> m.name().endsWith("_PLATE") || m.name().endsWith("_SIGN"))