diff --git a/CommonCore/SQL/src/de/steamwar/sql/GameModeConfig.java b/CommonCore/SQL/src/de/steamwar/sql/GameModeConfig.java index e2106380..f8b27f59 100644 --- a/CommonCore/SQL/src/de/steamwar/sql/GameModeConfig.java +++ b/CommonCore/SQL/src/de/steamwar/sql/GameModeConfig.java @@ -411,7 +411,7 @@ public final class GameModeConfig { } @ToString - public static final class ArenaConfig { + public static final class ArenaConfig { public final boolean loaded; @@ -461,11 +461,11 @@ public final class GameModeConfig { public final boolean DisableSnowMelt; /** - * Disable ice forming + * Disable the forming of certain blocks * - * @implSpec {@code false} by default + * @implSpec {@code empty} by default */ - public final boolean DisableIceForm; + public final Set DisabledBlockForms; /** * Allow leaving the arena area as spectator @@ -488,7 +488,7 @@ public final class GameModeConfig { */ public final boolean NoFloor; - private ArenaConfig(YMLWrapper loader, SchematicConfig.SizeConfig Size, List EnterStages) { + private ArenaConfig(YMLWrapper loader, SchematicConfig.SizeConfig Size, List EnterStages) { loaded = loader.canLoad(); WaterDepth = loader.getInt("WaterDepth", 0); WaterDamage = loader.getBoolean("WaterDamage", true); @@ -497,7 +497,11 @@ public final class GameModeConfig { BorderFromSchematic = loader.getInt("BorderFromSchematic", 21); GroundWalkable = loader.getBoolean("GroundWalkable", true); DisableSnowMelt = loader.getBoolean("DisableSnowMelt", false); - DisableIceForm = loader.getBoolean("DisableIceForm", false); + Set disabledBlockForms = new HashSet<>(loader.getMaterialList("DisabledBlockForms")); + if (loader.getBoolean("DisableIceForm", false)) { + disabledBlockForms.add(loader.materialMapper.apply("ICE")); + } + DisabledBlockForms = Collections.unmodifiableSet(disabledBlockForms); Leaveable = loader.getBoolean("Leaveable", false); AllowMissiles = loader.getBoolean("AllowMissiles", !EnterStages.isEmpty()); NoFloor = loader.getBoolean("NoFloor", false); diff --git a/FightSystem/FightSystem_Core/src/config.yml b/FightSystem/FightSystem_Core/src/config.yml index 46267a72..81620820 100644 --- a/FightSystem/FightSystem_Core/src/config.yml +++ b/FightSystem/FightSystem_Core/src/config.yml @@ -48,6 +48,16 @@ Arena: GroundWalkable: true # defaults to true if missing # Disable snow and ice melting DisableSnowMelt: false # defaults to false if missing + # Disabled blocks from forming + DisabledBlockForms: + # For Cobble Generators + # - COBBLESTONE + # - BASALT + # - STONE + # - OBSIDIAN + # Disable ice specifically from forming + # Deprecated, add ICE to DisabledBlockForms list instead + DisableIceForm: false # Allow leaving the arena area as spectator Leaveable: false # defaults to false if missing # Allow missiles to fly to the enemy and not stop at the schem border. diff --git a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/BlockFormListener.java b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/BlockFormListener.java index 29c6be82..55d58adb 100644 --- a/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/BlockFormListener.java +++ b/FightSystem/FightSystem_Core/src/de/steamwar/fightsystem/listener/BlockFormListener.java @@ -32,12 +32,16 @@ import org.bukkit.event.block.BlockFormEvent; public class BlockFormListener implements Listener { public BlockFormListener() { - new StateDependentListener(Config.GameModeConfig.Arena.DisableIceForm, FightState.All, this); + boolean enabled = !Config.GameModeConfig.Arena.DisabledBlockForms.isEmpty(); + new StateDependentListener(enabled, FightState.All, this); } @EventHandler public void onBlockForm(BlockFormEvent event) { - if (Config.ArenaRegion.inRegion(event.getBlock()) && event.getNewState().getType() == Material.ICE) { + if (!Config.ArenaRegion.inRegion(event.getBlock())) return; + + Material material = event.getNewState().getType(); + if (Config.GameModeConfig.Arena.DisabledBlockForms.contains(material)) { event.setCancelled(true); } }