Compare commits
1
Commits
main
...
flag/max-players
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
68bc2d563f |
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);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user