forked from SteamWar/SteamWar
migrate to per material config
This commit is contained in:
@@ -411,7 +411,7 @@ public final class GameModeConfig<M, W> {
|
||||
}
|
||||
|
||||
@ToString
|
||||
public static final class ArenaConfig {
|
||||
public static final class ArenaConfig<M, W> {
|
||||
|
||||
public final boolean loaded;
|
||||
|
||||
@@ -461,18 +461,11 @@ public final class GameModeConfig<M, W> {
|
||||
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;
|
||||
|
||||
/**
|
||||
* Disable block generators such as cobblestone, stone, obsidian and basalt
|
||||
*
|
||||
* @implSpec {@code false} by default
|
||||
*/
|
||||
public final boolean DisableBlockGenerators;
|
||||
public final Set<M> BlockedFormedBlocks;
|
||||
|
||||
/**
|
||||
* Allow leaving the arena area as spectator
|
||||
@@ -495,7 +488,7 @@ public final class GameModeConfig<M, W> {
|
||||
*/
|
||||
public final boolean NoFloor;
|
||||
|
||||
private ArenaConfig(YMLWrapper loader, SchematicConfig.SizeConfig Size, List<Integer> EnterStages) {
|
||||
private ArenaConfig(YMLWrapper<M,W> loader, SchematicConfig.SizeConfig Size, List<Integer> EnterStages) {
|
||||
loaded = loader.canLoad();
|
||||
WaterDepth = loader.getInt("WaterDepth", 0);
|
||||
WaterDamage = loader.getBoolean("WaterDamage", true);
|
||||
@@ -504,8 +497,11 @@ public final class GameModeConfig<M, W> {
|
||||
BorderFromSchematic = loader.getInt("BorderFromSchematic", 21);
|
||||
GroundWalkable = loader.getBoolean("GroundWalkable", true);
|
||||
DisableSnowMelt = loader.getBoolean("DisableSnowMelt", false);
|
||||
DisableIceForm = loader.getBoolean("DisableIceForm", false);
|
||||
DisableBlockGenerators = loader.getBoolean("DisableBlockGenerators", false);
|
||||
Set<M> blockedFormedBlocks = new HashSet<>(loader.getMaterialList("BlockedFormedBlocks"));
|
||||
if (loader.getBoolean("DisableIceForm", false)) {
|
||||
blockedFormedBlocks.add(loader.materialMapper.apply("ICE"));
|
||||
}
|
||||
BlockedFormedBlocks = Collections.unmodifiableSet(blockedFormedBlocks);
|
||||
Leaveable = loader.getBoolean("Leaveable", false);
|
||||
AllowMissiles = loader.getBoolean("AllowMissiles", !EnterStages.isEmpty());
|
||||
NoFloor = loader.getBoolean("NoFloor", false);
|
||||
|
||||
@@ -48,10 +48,13 @@ Arena:
|
||||
GroundWalkable: true # defaults to true if missing
|
||||
# Disable snow and ice melting
|
||||
DisableSnowMelt: false # defaults to false if missing
|
||||
# Disable ice forming
|
||||
DisableIceForm: false # defaults to false if missing
|
||||
# Disable cobblestone, stone, obsidian and basalt generators
|
||||
DisableBlockGenerators: false # defaults to false if missing
|
||||
# Disabled blocks from forming
|
||||
BlockedFormedBlocks:
|
||||
# For Cobble Generators
|
||||
# - COBBLESTONE
|
||||
# - BASALT
|
||||
# - STONE
|
||||
# - OBSIDIAN
|
||||
# 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.
|
||||
|
||||
+3
-19
@@ -27,25 +27,13 @@ import org.bukkit.Material;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockFormEvent;
|
||||
import java.util.EnumSet;
|
||||
import java.util.Set;
|
||||
|
||||
@Linked
|
||||
public class BlockFormListener implements Listener {
|
||||
|
||||
private static final Set<Material> GENERATOR_BLOCKS = EnumSet.of(
|
||||
Material.COBBLESTONE,
|
||||
Material.STONE,
|
||||
Material.OBSIDIAN,
|
||||
Material.BASALT
|
||||
);
|
||||
|
||||
public BlockFormListener() {
|
||||
boolean enabled = Config.GameModeConfig.Arena.DisableIceForm
|
||||
|| Config.GameModeConfig.Arena.DisableBlockGenerators;
|
||||
new StateDependentListener(enabled,
|
||||
Config.GameModeConfig.Arena.DisableIceForm ? FightState.All : FightState.Running,
|
||||
this);
|
||||
boolean enabled = !Config.GameModeConfig.Arena.BlockedFormedBlocks.isEmpty();
|
||||
new StateDependentListener(enabled, FightState.All, this);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@@ -53,11 +41,7 @@ public class BlockFormListener implements Listener {
|
||||
if (!Config.ArenaRegion.inRegion(event.getBlock())) return;
|
||||
|
||||
Material material = event.getNewState().getType();
|
||||
if (Config.GameModeConfig.Arena.DisableIceForm && material == Material.ICE) {
|
||||
event.setCancelled(true);
|
||||
} else if (Config.GameModeConfig.Arena.DisableBlockGenerators
|
||||
&& FightState.infight()
|
||||
&& GENERATOR_BLOCKS.contains(material)) {
|
||||
if (Config.GameModeConfig.Arena.BlockedFormedBlocks.contains(material)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user