Add starting changes for a new flag

This commit is contained in:
Ryder Belserion committed 2024-12-02 14:37:43 -05:00
1 parent 3e12cfea67
commit 68bc2d563f
5 files changed
+107 -5

No files matched your search

@@ -6,6 +6,7 @@ import com.ryderbelserion.simpleflags.commands.types.CommandHelp;
import com.ryderbelserion.simpleflags.commands.types.CommandReload;
import com.ryderbelserion.simpleflags.config.ConfigManager;
import com.ryderbelserion.simpleflags.flags.FlagManager;
import com.ryderbelserion.simpleflags.flags.types.CapacityFlag;
import com.ryderbelserion.simpleflags.flags.types.DrownFlag;
import com.ryderbelserion.simpleflags.flags.types.NaturalFlag;
import com.ryderbelserion.simpleflags.listeners.DrowningListener;
@@ -34,7 +35,9 @@ public class SimpleFlags extends Vital {
List.of(
new DrownFlag(),
new NaturalFlag()
new NaturalFlag(),
new CapacityFlag()
).forEach(this.flagManager::addFlag);
}
@@ -13,6 +13,9 @@ public class Config implements SettingsHolder {
@Comment("The flag prevent_drowning as you guessed it, it prevents drowning if enabled.")
public static final Property<Boolean> drowning_flag = newProperty("flags.drowning-flag", false);
@Comment("The flag max_players only allows a set amount of players in a region.")
public static final Property<Boolean> max_players_flag = newProperty("flags.max-players-flag", false);
@Comment("The flag prevent_natural_spawning prevents natural mob spawns in regions.")
public static final Property<Boolean> natural_spawning_flag = newProperty("flags.natural-spawning-flag", false);
@@ -8,7 +8,7 @@ import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
import com.sk89q.worldguard.protection.regions.RegionQuery;
import org.bukkit.plugin.java.JavaPlugin;
public abstract class FlagBuilder<T extends Flag> {
public abstract class FlagBuilder<F extends Flag> {
protected SimpleFlags plugin = JavaPlugin.getPlugin(SimpleFlags.class);
@@ -18,14 +18,14 @@ public abstract class FlagBuilder<T extends Flag> {
public abstract String getName();
public abstract T getFlag();
public abstract F getFlag();
public abstract boolean isEnabled();
/**
* @return A query of regions.
*/
protected RegionQuery getQuery() {
public RegionQuery getQuery() {
return this.plugin.getRegions().createQuery();
}
@@ -35,5 +35,4 @@ public abstract class FlagBuilder<T extends Flag> {
protected FlagRegistry getRegistry() {
return this.plugin.getWorldGuard().getFlagRegistry();
}
}
@@ -0,0 +1,54 @@
package com.ryderbelserion.simpleflags.flags.types;
import com.ryderbelserion.simpleflags.config.impl.Config;
import com.ryderbelserion.simpleflags.flags.builders.IntegerFlagBuilder;
import com.ryderbelserion.simpleflags.flags.enums.CustomFlags;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.IntegerFlag;
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
import java.util.logging.Level;
public class CapacityFlag extends IntegerFlagBuilder {
private static final Number[] values = {0, 5, 10, 20};
private IntegerFlag flag;
@Override
public void register() {
if (!isEnabled()) return;
try {
this.flag = new IntegerFlag("max-players");
this.flag.setSuggestedValues(values); //todo() might break in the future
getRegistry().register(this.flag);
} catch (FlagConflictException exception) {
Flag<?> existingFlag = getRegistry().get("max-players");
if (existingFlag instanceof IntegerFlag integerFlag) {
this.flag = integerFlag;
return;
}
this.plugin.getLogger().log(Level.WARNING, "An error has occurred registering " + getName() + " flag.", exception);
}
}
@Override
public String getName() {
return CustomFlags.CAPACITY_FLAG.getName();
}
@Override
public IntegerFlag getFlag() {
return this.flag;
}
@Override
public boolean isEnabled() {
return this.config.getProperty(Config.max_players_flag);
}
}
@@ -0,0 +1,43 @@
package com.ryderbelserion.simpleflags.listeners;
import com.ryderbelserion.simpleflags.SimpleFlags;
import com.ryderbelserion.simpleflags.flags.builders.IntegerFlagBuilder;
import com.ryderbelserion.simpleflags.flags.FlagManager;
import com.ryderbelserion.simpleflags.flags.enums.CustomFlags;
import com.sk89q.worldguard.protection.flags.IntegerFlag;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.plugin.java.JavaPlugin;
public class CapacityListener implements Listener {
private final SimpleFlags plugin = JavaPlugin.getPlugin(SimpleFlags.class);
private final FlagManager flagManager = this.plugin.getFlagManager();
@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
final Location location = event.getTo();
if (location == event.getFrom()) return; // don't run if they didn't move.
final String flagName = CustomFlags.CAPACITY_FLAG.getName();
if (!this.flagManager.hasFlag(flagName)) return;
final IntegerFlagBuilder flag = (IntegerFlagBuilder) this.flagManager.getFlag(flagName);
if (!flag.isEnabled()) return;
final IntegerFlag integerFlag = flag.getFlag();
if (integerFlag == null) return;
final Player player = event.getPlayer();
final String query = flag.getQuery().queryValue(location, player, integerFlag);
}
}