applied code styling

This commit is contained in:
Elias Müller 2024-08-24 11:02:28 +02:00
parent 78ba105291
commit 3dc25d63fd
56 changed files with 554 additions and 490 deletions

@ -1,28 +1,28 @@
package eu.mhsl.craftattack.spawn; package eu.mhsl.craftattack.spawn;
import eu.mhsl.craftattack.spawn.appliances.displayName.DisplayName;
import eu.mhsl.craftattack.spawn.api.HttpServer; import eu.mhsl.craftattack.spawn.api.HttpServer;
import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliance.Appliance;
import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarker; import eu.mhsl.craftattack.spawn.appliances.adminMarker.AdminMarker;
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
import eu.mhsl.craftattack.spawn.appliances.fleischerchest.Fleischerchest;
import eu.mhsl.craftattack.spawn.appliances.kick.Kick;
import eu.mhsl.craftattack.spawn.appliances.chatMessages.ChatMessages; import eu.mhsl.craftattack.spawn.appliances.chatMessages.ChatMessages;
import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancements;
import eu.mhsl.craftattack.spawn.appliances.debug.Debug;
import eu.mhsl.craftattack.spawn.appliances.displayName.DisplayName;
import eu.mhsl.craftattack.spawn.appliances.event.Event;
import eu.mhsl.craftattack.spawn.appliances.fleischerchest.Fleischerchest;
import eu.mhsl.craftattack.spawn.appliances.help.Help;
import eu.mhsl.craftattack.spawn.appliances.kick.Kick;
import eu.mhsl.craftattack.spawn.appliances.outlawed.Outlawed; import eu.mhsl.craftattack.spawn.appliances.outlawed.Outlawed;
import eu.mhsl.craftattack.spawn.appliances.panicBan.PanicBan; import eu.mhsl.craftattack.spawn.appliances.panicBan.PanicBan;
import eu.mhsl.craftattack.spawn.appliances.projectStart.ProjectStart;
import eu.mhsl.craftattack.spawn.appliances.debug.Debug;
import eu.mhsl.craftattack.spawn.appliances.event.Event;
import eu.mhsl.craftattack.spawn.appliances.help.Help;
import eu.mhsl.craftattack.spawn.appliances.playerlimit.PlayerLimit; import eu.mhsl.craftattack.spawn.appliances.playerlimit.PlayerLimit;
import eu.mhsl.craftattack.spawn.appliances.projectStart.ProjectStart;
import eu.mhsl.craftattack.spawn.appliances.report.Report; import eu.mhsl.craftattack.spawn.appliances.report.Report;
import eu.mhsl.craftattack.spawn.appliances.restart.Restart; import eu.mhsl.craftattack.spawn.appliances.restart.Restart;
import eu.mhsl.craftattack.spawn.appliances.settings.Settings; import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
import eu.mhsl.craftattack.spawn.appliances.tablist.Tablist; import eu.mhsl.craftattack.spawn.appliances.tablist.Tablist;
import eu.mhsl.craftattack.spawn.appliances.titleClear.TitleClear; import eu.mhsl.craftattack.spawn.appliances.titleClear.TitleClear;
import eu.mhsl.craftattack.spawn.appliances.whitelist.Whitelist; import eu.mhsl.craftattack.spawn.appliances.whitelist.Whitelist;
import eu.mhsl.craftattack.spawn.config.Configuration;
import eu.mhsl.craftattack.spawn.appliances.worldmuseum.WorldMuseum; import eu.mhsl.craftattack.spawn.appliances.worldmuseum.WorldMuseum;
import eu.mhsl.craftattack.spawn.config.Configuration;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@ -35,6 +35,7 @@ public final class Main extends JavaPlugin {
private List<Appliance> appliances; private List<Appliance> appliances;
private HttpServer httpApi; private HttpServer httpApi;
@Override @Override
public void onEnable() { public void onEnable() {
instance = this; instance = this;

@ -15,6 +15,7 @@ public class HttpServer {
protected final Gson gson = new Gson(); protected final Gson gson = new Gson();
public static Object nothing = null; public static Object nothing = null;
public HttpServer() { public HttpServer() {
Spark.port(8080); Spark.port(8080);
@ -41,6 +42,7 @@ public class HttpServer {
} }
private final String applianceName; private final String applianceName;
private ApiBuilder(Appliance appliance) { private ApiBuilder(Appliance appliance) {
this.applianceName = appliance.getClass().getSimpleName().toLowerCase(); this.applianceName = appliance.getClass().getSimpleName().toLowerCase();
} }

@ -24,10 +24,12 @@ public abstract class Appliance {
private List<Listener> listeners; private List<Listener> listeners;
private List<ApplianceCommand<?>> commands; private List<ApplianceCommand<?>> commands;
public Appliance() {} public Appliance() {
}
/** /**
* Use this constructor to specify a config sub-path for use with the localConfig() method. * Use this constructor to specify a config sub-path for use with the localConfig() method.
*
* @param localConfigPath sub path, if not found, the whole config will be used * @param localConfigPath sub path, if not found, the whole config will be used
*/ */
public Appliance(String localConfigPath) { public Appliance(String localConfigPath) {
@ -36,6 +38,7 @@ public abstract class Appliance {
/** /**
* Provides a list of listeners for the appliance. All listeners will be automatically registered. * Provides a list of listeners for the appliance. All listeners will be automatically registered.
*
* @return List of listeners * @return List of listeners
*/ */
@NotNull @NotNull
@ -45,6 +48,7 @@ public abstract class Appliance {
/** /**
* Provides a list of commands for the appliance. All commands will be automatically registered. * Provides a list of commands for the appliance. All commands will be automatically registered.
*
* @return List of commands * @return List of commands
*/ */
@NotNull @NotNull
@ -55,12 +59,15 @@ public abstract class Appliance {
/** /**
* Called on initialization to add all needed API Routes. * Called on initialization to add all needed API Routes.
* The routeBuilder can be used to get the correct Path prefixes * The routeBuilder can be used to get the correct Path prefixes
*
* @param apiBuilder holds data for needed route prefixes. * @param apiBuilder holds data for needed route prefixes.
*/ */
public void httpApi(HttpServer.ApiBuilder apiBuilder) {} public void httpApi(HttpServer.ApiBuilder apiBuilder) {
}
/** /**
* Provides a localized config section. Path can be set in appliance constructor. * Provides a localized config section. Path can be set in appliance constructor.
*
* @return Section of configuration for your appliance * @return Section of configuration for your appliance
*/ */
@NotNull @NotNull
@ -68,8 +75,11 @@ public abstract class Appliance {
return Optional.ofNullable(Configuration.cfg.getConfigurationSection(localConfigPath)).orElse(Configuration.cfg); return Optional.ofNullable(Configuration.cfg.getConfigurationSection(localConfigPath)).orElse(Configuration.cfg);
} }
public void onEnable() {} public void onEnable() {
public void onDisable() {} }
public void onDisable() {
}
public void initialize(@NotNull JavaPlugin plugin) { public void initialize(@NotNull JavaPlugin plugin) {
this.listeners = eventHandlers(); this.listeners = eventHandlers();

@ -20,6 +20,7 @@ import java.util.Optional;
public abstract class ApplianceCommand<T extends Appliance> extends ApplianceSupplier<T> implements TabCompleter, CommandExecutor { public abstract class ApplianceCommand<T extends Appliance> extends ApplianceSupplier<T> implements TabCompleter, CommandExecutor {
public String commandName; public String commandName;
protected Component errorMessage = Component.text("Fehler: ").color(NamedTextColor.RED); protected Component errorMessage = Component.text("Fehler: ").color(NamedTextColor.RED);
public ApplianceCommand(String command) { public ApplianceCommand(String command) {
this.commandName = command; this.commandName = command;
} }
@ -61,6 +62,7 @@ public abstract class ApplianceCommand<T extends Appliance> extends ApplianceSup
public static abstract class PlayerChecked<T extends Appliance> extends ApplianceCommand<T> { public static abstract class PlayerChecked<T extends Appliance> extends ApplianceCommand<T> {
private Player player; private Player player;
private Component notPlayerMessage = Component.text("Dieser Command kann nur von Spielern ausgeführt werden!").color(NamedTextColor.RED); private Component notPlayerMessage = Component.text("Dieser Command kann nur von Spielern ausgeführt werden!").color(NamedTextColor.RED);
public PlayerChecked(String command) { public PlayerChecked(String command) {
super(command); super(command);
} }

@ -5,6 +5,7 @@ import org.bukkit.event.Listener;
/** /**
* Utility class which provides a specific, type save appliance. * Utility class which provides a specific, type save appliance.
* You can access the appliance with the protected 'appliance' field. * You can access the appliance with the protected 'appliance' field.
*
* @param <T> the type of your appliance * @param <T> the type of your appliance
*/ */
public abstract class ApplianceListener<T extends Appliance> extends ApplianceSupplier<T> implements Listener { public abstract class ApplianceListener<T extends Appliance> extends ApplianceSupplier<T> implements Listener {

@ -11,7 +11,8 @@ import java.util.List;
public class AdminMarker extends Appliance { public class AdminMarker extends Appliance {
public TextColor getPlayerColor(Player player) { public TextColor getPlayerColor(Player player) {
if (player.hasPermission("chatcolor")) return TextColor.color(Color.AQUA.asRGB()); // TODO read permission from config if(player.hasPermission("chatcolor"))
return TextColor.color(Color.AQUA.asRGB()); // TODO read permission from config
return TextColor.color(Color.WHITE.asRGB()); return TextColor.color(Color.WHITE.asRGB());
} }

@ -7,7 +7,8 @@ import org.bukkit.entity.Player;
public class AdminMarkerListener extends ApplianceListener<AdminMarker> { public class AdminMarkerListener extends ApplianceListener<AdminMarker> {
private TextColor getPlayerColor(Player player) { private TextColor getPlayerColor(Player player) {
if (player.hasPermission("chatcolor")) return TextColor.color(Color.AQUA.asRGB()); // TODO read permission from config if(player.hasPermission("chatcolor"))
return TextColor.color(Color.AQUA.asRGB()); // TODO read permission from config
return TextColor.color(Color.WHITE.asRGB()); return TextColor.color(Color.WHITE.asRGB());
} }
} }

@ -7,6 +7,7 @@ import eu.mhsl.craftattack.spawn.appliances.debug.command.UserInfoCommand;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.List; import java.util.List;
public class Debug extends Appliance { public class Debug extends Appliance {
@Override @Override
@NotNull @NotNull

@ -9,9 +9,9 @@ import eu.mhsl.craftattack.spawn.appliances.event.command.*;
import eu.mhsl.craftattack.spawn.appliances.event.listener.ApplyPendingRewardsListener; import eu.mhsl.craftattack.spawn.appliances.event.listener.ApplyPendingRewardsListener;
import eu.mhsl.craftattack.spawn.util.IteratorUtil; import eu.mhsl.craftattack.spawn.util.IteratorUtil;
import eu.mhsl.craftattack.spawn.util.entity.DisplayVillager; import eu.mhsl.craftattack.spawn.util.entity.DisplayVillager;
import eu.mhsl.craftattack.spawn.util.server.PluginMessage;
import eu.mhsl.craftattack.spawn.util.listener.DismissInventoryOpenFromHolder; import eu.mhsl.craftattack.spawn.util.listener.DismissInventoryOpenFromHolder;
import eu.mhsl.craftattack.spawn.util.listener.PlayerInteractAtEntityEventListener; import eu.mhsl.craftattack.spawn.util.listener.PlayerInteractAtEntityEventListener;
import eu.mhsl.craftattack.spawn.util.server.PluginMessage;
import eu.mhsl.craftattack.spawn.util.text.ComponentUtil; import eu.mhsl.craftattack.spawn.util.text.ComponentUtil;
import eu.mhsl.craftattack.spawn.util.text.Countdown; import eu.mhsl.craftattack.spawn.util.text.Countdown;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
@ -39,6 +39,7 @@ public class Event extends Appliance {
ADVERTISED, ADVERTISED,
DONE DONE
} }
Countdown advertiseCountdown = new Countdown( Countdown advertiseCountdown = new Countdown(
120, 120,
announcementData -> Component.text() announcementData -> Component.text()
@ -57,8 +58,12 @@ public class Event extends Appliance {
private final HttpClient eventServerClient = HttpClient.newHttpClient(); private final HttpClient eventServerClient = HttpClient.newHttpClient();
private final List<Reward> pendingRewards = new ArrayList<>(); private final List<Reward> pendingRewards = new ArrayList<>();
record RewardConfiguration(String memorialMaterial, String memorialTitle, String memorialLore, List<UUID> memorials, String material, Map<UUID, Integer> rewards) {} record RewardConfiguration(String memorialMaterial, String memorialTitle, String memorialLore, List<UUID> memorials,
record Reward(UUID playerUuid, ItemStack itemStack) {} String material, Map<UUID, Integer> rewards) {
}
record Reward(UUID playerUuid, ItemStack itemStack) {
}
public Event() { public Event() {
super("event"); super("event");
@ -86,9 +91,11 @@ public class Event extends Appliance {
.build(); .build();
HttpResponse<String> rawResponse = eventServerClient.send(createRoomRequest, HttpResponse.BodyHandlers.ofString()); HttpResponse<String> rawResponse = eventServerClient.send(createRoomRequest, HttpResponse.BodyHandlers.ofString());
if(rawResponse.statusCode() != 200) throw new ApplianceCommand.Error("Event-Server meldet Fehler: " + rawResponse.statusCode()); if(rawResponse.statusCode() != 200)
throw new ApplianceCommand.Error("Event-Server meldet Fehler: " + rawResponse.statusCode());
record Response(UUID uuid) {} record Response(UUID uuid) {
}
Response response = new Gson().fromJson(rawResponse.body(), Response.class); Response response = new Gson().fromJson(rawResponse.body(), Response.class);
isOpen = true; isOpen = true;
@ -114,14 +121,16 @@ public class Event extends Appliance {
try { try {
Main.instance().getLogger().info("Verbinde mit eventserver: " + p.getName()); Main.instance().getLogger().info("Verbinde mit eventserver: " + p.getName());
p.sendMessage(Component.text("Authentifiziere...", NamedTextColor.GREEN)); p.sendMessage(Component.text("Authentifiziere...", NamedTextColor.GREEN));
record Request(UUID player, UUID room) {} record Request(UUID player, UUID room) {
}
Request request = new Request(p.getUniqueId(), this.roomId); Request request = new Request(p.getUniqueId(), this.roomId);
HttpRequest queueRoomRequest = HttpRequest.newBuilder() HttpRequest queueRoomRequest = HttpRequest.newBuilder()
.uri(new URI(localConfig().getString("api") + "/queueRoom")) .uri(new URI(localConfig().getString("api") + "/queueRoom"))
.POST(HttpRequest.BodyPublishers.ofString(new Gson().toJson(request))) .POST(HttpRequest.BodyPublishers.ofString(new Gson().toJson(request)))
.build(); .build();
record Response(String error) {} record Response(String error) {
}
HttpResponse<String> rawResponse = eventServerClient.send(queueRoomRequest, HttpResponse.BodyHandlers.ofString()); HttpResponse<String> rawResponse = eventServerClient.send(queueRoomRequest, HttpResponse.BodyHandlers.ofString());
Main.instance().getLogger().info("Response: " + rawResponse.body()); Main.instance().getLogger().info("Response: " + rawResponse.body());
Response response = new Gson().fromJson(rawResponse.body(), Response.class); Response response = new Gson().fromJson(rawResponse.body(), Response.class);

@ -12,13 +12,15 @@ import java.util.Objects;
public class SpawnCommand extends ApplianceCommand<Help> { public class SpawnCommand extends ApplianceCommand<Help> {
private static final String spawnKey = "spawn"; private static final String spawnKey = "spawn";
public SpawnCommand() { public SpawnCommand() {
super("spawn"); super("spawn");
} }
@Override @Override
protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
if(!getAppliance().localConfig().isString(spawnKey)) throw new ApplianceCommand.Error("Es wurde kein Spawnbereich hinterlegt!"); if(!getAppliance().localConfig().isString(spawnKey))
throw new ApplianceCommand.Error("Es wurde kein Spawnbereich hinterlegt!");
sender.sendMessage(Component.text(Objects.requireNonNull(getAppliance().localConfig().getString(spawnKey)), NamedTextColor.GOLD)); sender.sendMessage(Component.text(Objects.requireNonNull(getAppliance().localConfig().getString(spawnKey)), NamedTextColor.GOLD));
} }
} }

@ -10,13 +10,15 @@ import org.jetbrains.annotations.NotNull;
public class TeamspeakCommand extends ApplianceCommand<Help> { public class TeamspeakCommand extends ApplianceCommand<Help> {
private static final String teamspeakKey = "teamspeak"; private static final String teamspeakKey = "teamspeak";
public TeamspeakCommand() { public TeamspeakCommand() {
super("teamspeak"); super("teamspeak");
} }
@Override @Override
protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
if(!getAppliance().localConfig().isString(teamspeakKey)) throw new ApplianceCommand.Error("Es wurde kein Teamspeak hinterlegt!"); if(!getAppliance().localConfig().isString(teamspeakKey))
throw new ApplianceCommand.Error("Es wurde kein Teamspeak hinterlegt!");
sender.sendMessage( sender.sendMessage(
Component.text() Component.text()
.append(Component.text("Joine unserem Teamspeak: ", NamedTextColor.GOLD)) .append(Component.text("Joine unserem Teamspeak: ", NamedTextColor.GOLD))

@ -1,9 +1,9 @@
package eu.mhsl.craftattack.spawn.appliances.outlawed; package eu.mhsl.craftattack.spawn.appliances.outlawed;
import eu.mhsl.craftattack.spawn.Main; import eu.mhsl.craftattack.spawn.Main;
import eu.mhsl.craftattack.spawn.appliances.displayName.DisplayName;
import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliance.Appliance;
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
import eu.mhsl.craftattack.spawn.appliances.displayName.DisplayName;
import eu.mhsl.craftattack.spawn.appliances.whitelist.Whitelist; import eu.mhsl.craftattack.spawn.appliances.whitelist.Whitelist;
import eu.mhsl.craftattack.spawn.config.Configuration; import eu.mhsl.craftattack.spawn.config.Configuration;
import eu.mhsl.craftattack.spawn.util.text.DisconnectInfo; import eu.mhsl.craftattack.spawn.util.text.DisconnectInfo;
@ -20,6 +20,7 @@ import java.util.*;
public class Outlawed extends Appliance { public class Outlawed extends Appliance {
public final int timeoutInMs = 1000 * 60 * 60 * 6; public final int timeoutInMs = 1000 * 60 * 60 * 6;
private final Map<UUID, Long> timeouts = new HashMap<>(); private final Map<UUID, Long> timeouts = new HashMap<>();
public enum Status { public enum Status {
DISABLED, DISABLED,
VOLUNTARILY, VOLUNTARILY,
@ -66,7 +67,8 @@ public class Outlawed extends Appliance {
public Status getLawStatus(Player player) { public Status getLawStatus(Player player) {
return playerStatusMap.computeIfAbsent(player, p -> { return playerStatusMap.computeIfAbsent(player, p -> {
if(localConfig().getStringList(voluntarilyEntry).contains(p.getUniqueId().toString())) return Status.VOLUNTARILY; if(localConfig().getStringList(voluntarilyEntry).contains(p.getUniqueId().toString()))
return Status.VOLUNTARILY;
return Status.DISABLED; return Status.DISABLED;
}); });
} }

@ -8,7 +8,10 @@ import org.bukkit.entity.Player;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.*; import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class PanicBan extends Appliance { public class PanicBan extends Appliance {
private final Map<UUID, Long> panicBans = new HashMap<>(); private final Map<UUID, Long> panicBans = new HashMap<>();

@ -12,6 +12,7 @@ import java.util.List;
public class PlayerLimit extends Appliance { public class PlayerLimit extends Appliance {
private static final String playerLimitKey = "maxPlayers"; private static final String playerLimitKey = "maxPlayers";
private int limit; private int limit;
public PlayerLimit() { public PlayerLimit() {
super("playerLimit"); super("playerLimit");
this.limit = localConfig().getInt(playerLimitKey); this.limit = localConfig().getInt(playerLimitKey);

@ -8,11 +8,11 @@ import eu.mhsl.craftattack.spawn.appliances.projectStart.command.ProjectStartRes
import eu.mhsl.craftattack.spawn.appliances.projectStart.listener.NoAdvancementsListener; import eu.mhsl.craftattack.spawn.appliances.projectStart.listener.NoAdvancementsListener;
import eu.mhsl.craftattack.spawn.appliances.projectStart.listener.PlayerInvincibleListener; import eu.mhsl.craftattack.spawn.appliances.projectStart.listener.PlayerInvincibleListener;
import eu.mhsl.craftattack.spawn.config.Configuration; import eu.mhsl.craftattack.spawn.config.Configuration;
import eu.mhsl.craftattack.spawn.util.IteratorUtil;
import eu.mhsl.craftattack.spawn.util.entity.PlayerUtils; import eu.mhsl.craftattack.spawn.util.entity.PlayerUtils;
import eu.mhsl.craftattack.spawn.util.world.BlockCycle;
import eu.mhsl.craftattack.spawn.util.text.ComponentUtil; import eu.mhsl.craftattack.spawn.util.text.ComponentUtil;
import eu.mhsl.craftattack.spawn.util.text.Countdown; import eu.mhsl.craftattack.spawn.util.text.Countdown;
import eu.mhsl.craftattack.spawn.util.IteratorUtil; import eu.mhsl.craftattack.spawn.util.world.BlockCycle;
import net.kyori.adventure.sound.Sound; import net.kyori.adventure.sound.Sound;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;

@ -35,13 +35,17 @@ public class Report extends Appliance {
} }
private final URI apiEndpoint; private final URI apiEndpoint;
public Report() { public Report() {
super("report"); super("report");
this.apiEndpoint = URI.create(Objects.requireNonNull(localConfig().getString("api"))); this.apiEndpoint = URI.create(Objects.requireNonNull(localConfig().getString("api")));
} }
private record Request(@NotNull UUID reporter, @Nullable UUID reported, String reason) {} private record Request(@NotNull UUID reporter, @Nullable UUID reported, String reason) {
private record Response(@NotNull String url) {} }
private record Response(@NotNull String url) {
}
public void reportToUnknown(@NotNull Player issuer) { public void reportToUnknown(@NotNull Player issuer) {
Request request = new Request(issuer.getUniqueId(), null, ""); Request request = new Request(issuer.getUniqueId(), null, "");

@ -1,7 +1,6 @@
package eu.mhsl.craftattack.spawn.appliances.report; package eu.mhsl.craftattack.spawn.appliances.report;
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
import eu.mhsl.craftattack.spawn.appliances.report.Report;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;

@ -4,9 +4,9 @@ import eu.mhsl.craftattack.spawn.appliance.Appliance;
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
import eu.mhsl.craftattack.spawn.appliances.restart.command.CancelRestartCommand; import eu.mhsl.craftattack.spawn.appliances.restart.command.CancelRestartCommand;
import eu.mhsl.craftattack.spawn.appliances.restart.command.ScheduleRestartCommand; import eu.mhsl.craftattack.spawn.appliances.restart.command.ScheduleRestartCommand;
import eu.mhsl.craftattack.spawn.util.IteratorUtil;
import eu.mhsl.craftattack.spawn.util.text.Countdown; import eu.mhsl.craftattack.spawn.util.text.Countdown;
import eu.mhsl.craftattack.spawn.util.text.DisconnectInfo; import eu.mhsl.craftattack.spawn.util.text.DisconnectInfo;
import eu.mhsl.craftattack.spawn.util.IteratorUtil;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;

@ -26,7 +26,9 @@ public class Settings extends Appliance {
return Main.instance().getAppliance(Settings.class); return Main.instance().getAppliance(Settings.class);
} }
public record OpenSettingsInventory(Inventory inventory, List<Setting<?>> settings) {} public record OpenSettingsInventory(Inventory inventory, List<Setting<?>> settings) {
}
private final WeakHashMap<Player, OpenSettingsInventory> openSettingsInventories = new WeakHashMap<>(); private final WeakHashMap<Player, OpenSettingsInventory> openSettingsInventories = new WeakHashMap<>();
private final WeakHashMap<Player, List<Setting<?>>> settingsCache = new WeakHashMap<>(); private final WeakHashMap<Player, List<Setting<?>>> settingsCache = new WeakHashMap<>();
@ -49,8 +51,10 @@ public class Settings extends Appliance {
.findFirst() .findFirst()
.orElseThrow(); .orElseThrow();
if(!clazz.equals(setting.dataType())) throw new IllegalStateException("Tried to retrieve Setting with Datatype " + clazz.getSimpleName() + " but expected " + setting.dataType().getSimpleName()); if(!clazz.equals(setting.dataType()))
if(!clazz.isInstance(setting.state())) throw new ClassCastException(clazz.getSimpleName() + " is not an instance of " + setting.dataType().getSimpleName()); throw new IllegalStateException("Tried to retrieve Setting with Datatype " + clazz.getSimpleName() + " but expected " + setting.dataType().getSimpleName());
if(!clazz.isInstance(setting.state()))
throw new ClassCastException(clazz.getSimpleName() + " is not an instance of " + setting.dataType().getSimpleName());
return clazz.cast(setting.state()); return clazz.cast(setting.state());
} }

@ -4,9 +4,9 @@ import eu.mhsl.craftattack.spawn.Main;
import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliance.Appliance;
import eu.mhsl.craftattack.spawn.appliances.report.Report; import eu.mhsl.craftattack.spawn.appliances.report.Report;
import eu.mhsl.craftattack.spawn.appliances.settings.Settings; import eu.mhsl.craftattack.spawn.appliances.settings.Settings;
import eu.mhsl.craftattack.spawn.util.IteratorUtil;
import eu.mhsl.craftattack.spawn.util.statistics.NetworkMonitor; import eu.mhsl.craftattack.spawn.util.statistics.NetworkMonitor;
import eu.mhsl.craftattack.spawn.util.text.ComponentUtil; import eu.mhsl.craftattack.spawn.util.text.ComponentUtil;
import eu.mhsl.craftattack.spawn.util.IteratorUtil;
import eu.mhsl.craftattack.spawn.util.text.RainbowComponent; import eu.mhsl.craftattack.spawn.util.text.RainbowComponent;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;

@ -11,6 +11,7 @@ public class TitleClear extends Appliance {
public void clearTitle(Player player) { public void clearTitle(Player player) {
player.clearTitle(); player.clearTitle();
} }
@Override @Override
@NotNull @NotNull
protected List<Listener> eventHandlers() { protected List<Listener> eventHandlers() {

@ -23,11 +23,16 @@ import java.time.Instant;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import java.util.logging.Level; import java.util.logging.Level;
public class Whitelist extends Appliance { public class Whitelist extends Appliance {
private record UserData(UUID uuid, String username, String firstname, String lastname, Long banned_until, Long outlawed_until) {} private record UserData(UUID uuid, String username, String firstname, String lastname, Long banned_until,
Long outlawed_until) {
}
private final URI apiEndpoint = URI.create(Objects.requireNonNull(localConfig().getString("api"))); private final URI apiEndpoint = URI.create(Objects.requireNonNull(localConfig().getString("api")));
@ -122,7 +127,8 @@ public class Whitelist extends Appliance {
@Override @Override
public void httpApi(HttpServer.ApiBuilder apiBuilder) { public void httpApi(HttpServer.ApiBuilder apiBuilder) {
record User(UUID user) {} record User(UUID user) {
}
apiBuilder.post("update", User.class, (user, request) -> { apiBuilder.post("update", User.class, (user, request) -> {
Main.instance().getLogger().info(String.format("API Triggered Profile update for %s", user.user)); Main.instance().getLogger().info(String.format("API Triggered Profile update for %s", user.user));
Player player = Bukkit.getPlayer(user.user); Player player = Bukkit.getPlayer(user.user);

@ -1,7 +1,6 @@
package eu.mhsl.craftattack.spawn.appliances.worldmuseum; package eu.mhsl.craftattack.spawn.appliances.worldmuseum;
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
import eu.mhsl.craftattack.spawn.appliances.worldmuseum.WorldMuseum;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;

@ -3,15 +3,16 @@ package eu.mhsl.craftattack.spawn.appliances.worldmuseum;
import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliance.Appliance;
import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
import eu.mhsl.craftattack.spawn.util.entity.DisplayVillager; import eu.mhsl.craftattack.spawn.util.entity.DisplayVillager;
import eu.mhsl.craftattack.spawn.util.server.Floodgate;
import eu.mhsl.craftattack.spawn.util.server.PluginMessage;
import eu.mhsl.craftattack.spawn.util.listener.DismissInventoryOpenFromHolder; import eu.mhsl.craftattack.spawn.util.listener.DismissInventoryOpenFromHolder;
import eu.mhsl.craftattack.spawn.util.listener.PlayerInteractAtEntityEventListener; import eu.mhsl.craftattack.spawn.util.listener.PlayerInteractAtEntityEventListener;
import eu.mhsl.craftattack.spawn.util.server.Floodgate;
import eu.mhsl.craftattack.spawn.util.server.PluginMessage;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.*; import org.bukkit.entity.Player;
import org.bukkit.entity.Villager;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.geysermc.cumulus.form.SimpleForm; import org.geysermc.cumulus.form.SimpleForm;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -36,6 +37,7 @@ public class WorldMuseum extends Appliance {
} }
); );
} }
public void updateVillagerPosition(Location location) { public void updateVillagerPosition(Location location) {
this.villager.updateLocation(location); this.villager.updateLocation(location);
} }

@ -51,6 +51,7 @@ public class DisplayVillager {
public static class ConfigBound { public static class ConfigBound {
private final DisplayVillager villager; private final DisplayVillager villager;
private final ConfigurationSection config; private final ConfigurationSection config;
public ConfigBound(ConfigurationSection configurationSection, Consumer<Villager> villagerCreator) { public ConfigBound(ConfigurationSection configurationSection, Consumer<Villager> villagerCreator) {
this.config = configurationSection; this.config = configurationSection;

@ -26,7 +26,8 @@ public class PlayerUtils {
try { try {
player.setStatistic(statistic, 0); player.setStatistic(statistic, 0);
} catch (IllegalArgumentException ignored){} } catch(IllegalArgumentException ignored) {
}
} }
} }
} }

@ -8,6 +8,7 @@ import java.util.function.Consumer;
public class Floodgate { public class Floodgate {
private static final FloodgateApi instance = FloodgateApi.getInstance(); private static final FloodgateApi instance = FloodgateApi.getInstance();
public static boolean isBedrock(Player p) { public static boolean isBedrock(Player p) {
return instance.isFloodgatePlayer(p.getUniqueId()); return instance.isFloodgatePlayer(p.getUniqueId());
} }

@ -37,8 +37,11 @@ public class NetworkMonitor {
); );
} }
public record Traffic(long rxBytes, long txBytes) {} public record Traffic(long rxBytes, long txBytes) {
public record Packets(long rxCount, long txCount) {} }
public record Packets(long rxCount, long txCount) {
}
public Traffic getTraffic() { public Traffic getTraffic() {
return new Traffic(rxBytesLastDuration, txBytesLastDuration); return new Traffic(rxBytesLastDuration, txBytesLastDuration);

@ -21,8 +21,11 @@ public class Countdown {
private final Runnable onDone; private final Runnable onDone;
public record AnnouncementData(int count, String unit) {} public record AnnouncementData(int count, String unit) {
public record CustomAnnouncements(Function<Integer, Boolean> test, Consumer<Integer> task) {} }
public record CustomAnnouncements(Function<Integer, Boolean> test, Consumer<Integer> task) {
}
public Countdown(int countdownFrom, Function<AnnouncementData, Component> announcementBuilder, Consumer<Component> announcementConsumer, Runnable onDone) { public Countdown(int countdownFrom, Function<AnnouncementData, Component> announcementBuilder, Consumer<Component> announcementConsumer, Runnable onDone) {
this.countdownFrom = countdownFrom; this.countdownFrom = countdownFrom;

@ -12,6 +12,7 @@ public record DisconnectInfo(String error, String description, String help, UUID
public void applyKick(Player player) { public void applyKick(Player player) {
Bukkit.getScheduler().runTask(Main.instance(), () -> player.kick(this.getComponent())); Bukkit.getScheduler().runTask(Main.instance(), () -> player.kick(this.getComponent()));
} }
public Component getComponent() { public Component getComponent() {
return Component.text() return Component.text()
.appendNewline().appendNewline() .appendNewline().appendNewline()

@ -4,7 +4,8 @@ import org.bukkit.Chunk;
import org.bukkit.Location; import org.bukkit.Location;
public class ChunkUtils { public class ChunkUtils {
public record ChunkPos(int x, int z) {} public record ChunkPos(int x, int z) {
}
public static Chunk loadChunkAtLocation(Location location) { public static Chunk loadChunkAtLocation(Location location) {
ChunkPos chunkPos = locationToChunk(location); ChunkPos chunkPos = locationToChunk(location);