added maintenance mode

This commit is contained in:
Elias Müller 2024-09-25 14:49:30 +02:00
parent f4da7e7674
commit b2021d5815
6 changed files with 95 additions and 3 deletions

View File

@ -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())))

View File

@ -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() {

View File

@ -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<ApplianceCommand<?>> commands() {
return List.of(new MaintenanceCommand());
}
@Override
protected @NotNull List<Listener> listeners() {
return List.of(new PreventMaintenanceJoinListener());
}
}

View File

@ -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<Maintenance> {
public MaintenanceCommand() {
super("maintanance");
}
@Override
protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) throws Exception {
Map<String, Boolean> 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()));
}
}

View File

@ -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<Maintenance> {
@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());
}
}

View File

@ -37,4 +37,5 @@ commands:
panicBan:
vogelfrei:
settings:
texturepack:
texturepack:
maintanance: