diff --git a/src/main/java/eu/mhsl/craftattack/spawn/Main.java b/src/main/java/eu/mhsl/craftattack/spawn/Main.java index 5145ba3..3b15891 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/Main.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/Main.java @@ -18,6 +18,7 @@ import eu.mhsl.craftattack.spawn.appliances.help.Help; import eu.mhsl.craftattack.spawn.appliances.hotbarRefill.HotbarRefill; import eu.mhsl.craftattack.spawn.appliances.kick.Kick; import eu.mhsl.craftattack.spawn.appliances.knockDoor.KnockDoor; +import eu.mhsl.craftattack.spawn.appliances.maintenance.Maintenance; import eu.mhsl.craftattack.spawn.appliances.outlawed.Outlawed; import eu.mhsl.craftattack.spawn.appliances.packSelect.PackSelect; import eu.mhsl.craftattack.spawn.appliances.panicBan.PanicBan; @@ -85,7 +86,8 @@ public final class Main extends JavaPlugin { new DoubleDoor(), new KnockDoor(), new PackSelect(), - new GlowingBerries() + new GlowingBerries(), + new Maintenance() ) .filter(appliance -> disabledAppliances.stream() .noneMatch(s -> s.equalsIgnoreCase(appliance.getClass().getSimpleName()))) diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliance/Appliance.java b/src/main/java/eu/mhsl/craftattack/spawn/appliance/Appliance.java index 960e6a3..f6c74f8 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliance/Appliance.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliance/Appliance.java @@ -72,7 +72,8 @@ public abstract class Appliance { */ @NotNull public ConfigurationSection localConfig() { - return Optional.ofNullable(Configuration.cfg.getConfigurationSection(localConfigPath)).orElse(Configuration.cfg); + return Optional.ofNullable(Configuration.cfg.getConfigurationSection(localConfigPath)) + .orElseGet(() -> Configuration.cfg.createSection(localConfigPath)); } public void onEnable() { diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/maintenance/Maintenance.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/maintenance/Maintenance.java new file mode 100644 index 0000000..26ad7af --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/maintenance/Maintenance.java @@ -0,0 +1,43 @@ +package eu.mhsl.craftattack.spawn.appliances.maintenance; + +import eu.mhsl.craftattack.spawn.appliance.Appliance; +import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; +import eu.mhsl.craftattack.spawn.config.Configuration; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class Maintenance extends Appliance { + private boolean isInMaintenance; + private final String configKey = "enabled"; + + public Maintenance() { + super("maintenance"); + } + + @Override + public void onEnable() { + this.isInMaintenance = localConfig().getBoolean(configKey, false); + } + + public void setState(boolean enabled) { + this.isInMaintenance = enabled; + localConfig().set(configKey, enabled); + Configuration.saveChanges(); + } + + public boolean isInMaintenance() { + return isInMaintenance; + } + + @Override + protected @NotNull List> commands() { + return List.of(new MaintenanceCommand()); + } + + @Override + protected @NotNull List listeners() { + return List.of(new PreventMaintenanceJoinListener()); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/maintenance/MaintenanceCommand.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/maintenance/MaintenanceCommand.java new file mode 100644 index 0000000..4e7ebfd --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/maintenance/MaintenanceCommand.java @@ -0,0 +1,22 @@ +package eu.mhsl.craftattack.spawn.appliances.maintenance; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; + +import java.util.Map; + +public class MaintenanceCommand extends ApplianceCommand { + public MaintenanceCommand() { + super("maintanance"); + } + + @Override + protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) throws Exception { + Map options = Map.of("enable", true, "disable", false); + if(args.length != 1 || !options.containsKey(args[0])) throw new Error("Argument 'enable' oder 'disable' gefordert!"); + getAppliance().setState(options.get(args[0])); + sender.sendMessage(String.format("Maintanance: %b", getAppliance().isInMaintenance())); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/maintenance/PreventMaintenanceJoinListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/maintenance/PreventMaintenanceJoinListener.java new file mode 100644 index 0000000..9990d23 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/maintenance/PreventMaintenanceJoinListener.java @@ -0,0 +1,23 @@ +package eu.mhsl.craftattack.spawn.appliances.maintenance; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; +import eu.mhsl.craftattack.spawn.util.text.DisconnectInfo; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerLoginEvent; + +public class PreventMaintenanceJoinListener extends ApplianceListener { + @EventHandler + public void onJoin(PlayerLoginEvent event) { + if(!getAppliance().isInMaintenance()) return; + if(event.getPlayer().hasPermission("bypassMaintainance")) return; + + DisconnectInfo disconnectInfo = new DisconnectInfo( + "Wartunsarbeiten", + "Zurzeit können nur Admins dem Server beitreten!", + "Bitte warte bis die Warungsarbeiten wieder deaktiviert werden.", + event.getPlayer().getUniqueId() + ); + + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, disconnectInfo.getComponent()); + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index bbbcec3..f1768ae 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -37,4 +37,5 @@ commands: panicBan: vogelfrei: settings: - texturepack: \ No newline at end of file + texturepack: + maintanance: \ No newline at end of file