From 184617e9c3d234eade020e529118ef4069d9e4d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Mon, 16 Dec 2024 00:30:38 +0100 Subject: [PATCH] added EventRepository --- .../client/repositories/EventRepository.java | 29 ++++++ .../repositories/FeedbackRepository.java | 4 +- .../client/repositories/ReportRepository.java | 4 +- .../repositories/WhitelistRepository.java | 4 +- .../spawn/appliances/event/Event.java | 98 +++++++------------ .../spawn/util/api/EventApiUtil.java | 23 +++++ .../api/{ApiUtil.java => WebsiteApiUtil.java} | 2 +- 7 files changed, 94 insertions(+), 70 deletions(-) create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/EventRepository.java create mode 100644 src/main/java/eu/mhsl/craftattack/spawn/util/api/EventApiUtil.java rename src/main/java/eu/mhsl/craftattack/spawn/util/api/{ApiUtil.java => WebsiteApiUtil.java} (96%) diff --git a/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/EventRepository.java b/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/EventRepository.java new file mode 100644 index 0000000..b3a6ada --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/EventRepository.java @@ -0,0 +1,29 @@ +package eu.mhsl.craftattack.spawn.api.client.repositories; + +import eu.mhsl.craftattack.spawn.api.client.HttpRepository; +import eu.mhsl.craftattack.spawn.api.client.ReqResp; +import eu.mhsl.craftattack.spawn.util.api.EventApiUtil; + +import java.util.UUID; + +public class EventRepository extends HttpRepository { + public EventRepository() { + super(EventApiUtil.getBaseUri()); + } + + public record CreatedRoom(UUID uuid) { + } + + public record QueueRoom(UUID player, UUID room) { + public record Response(String error) { + } + } + + public ReqResp createSession() { + return this.post("room", null, CreatedRoom.class); + } + + public ReqResp queueRoom(QueueRoom request) { + return this.post("queueRoom", request, QueueRoom.Response.class); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/FeedbackRepository.java b/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/FeedbackRepository.java index f3eed1c..da70b9c 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/FeedbackRepository.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/FeedbackRepository.java @@ -3,7 +3,7 @@ package eu.mhsl.craftattack.spawn.api.client.repositories; import com.google.common.reflect.TypeToken; import eu.mhsl.craftattack.spawn.api.client.HttpRepository; import eu.mhsl.craftattack.spawn.api.client.ReqResp; -import eu.mhsl.craftattack.spawn.util.api.ApiUtil; +import eu.mhsl.craftattack.spawn.util.api.WebsiteApiUtil; import java.lang.reflect.Type; import java.util.List; @@ -12,7 +12,7 @@ import java.util.UUID; public class FeedbackRepository extends HttpRepository { public FeedbackRepository() { - super(ApiUtil.getBaseUri(), ApiUtil::withAuthorizationSecret); + super(WebsiteApiUtil.getBaseUri(), WebsiteApiUtil::withAuthorizationSecret); } public record Request(String event, List users) {} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/ReportRepository.java b/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/ReportRepository.java index c967e12..be92875 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/ReportRepository.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/ReportRepository.java @@ -2,7 +2,7 @@ package eu.mhsl.craftattack.spawn.api.client.repositories; import eu.mhsl.craftattack.spawn.api.client.HttpRepository; import eu.mhsl.craftattack.spawn.api.client.ReqResp; -import eu.mhsl.craftattack.spawn.util.api.ApiUtil; +import eu.mhsl.craftattack.spawn.util.api.WebsiteApiUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -11,7 +11,7 @@ import java.util.UUID; public class ReportRepository extends HttpRepository { public ReportRepository() { - super(ApiUtil.getBaseUri(), ApiUtil::withAuthorizationSecret); + super(WebsiteApiUtil.getBaseUri(), WebsiteApiUtil::withAuthorizationSecret); } public record ReportCreationInfo(@NotNull UUID reporter, @Nullable UUID reported, String reason) { diff --git a/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/WhitelistRepository.java b/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/WhitelistRepository.java index 414e1b3..9b889f9 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/WhitelistRepository.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/api/client/repositories/WhitelistRepository.java @@ -2,13 +2,13 @@ package eu.mhsl.craftattack.spawn.api.client.repositories; import eu.mhsl.craftattack.spawn.api.client.HttpRepository; import eu.mhsl.craftattack.spawn.api.client.ReqResp; -import eu.mhsl.craftattack.spawn.util.api.ApiUtil; +import eu.mhsl.craftattack.spawn.util.api.WebsiteApiUtil; import java.util.UUID; public class WhitelistRepository extends HttpRepository { public WhitelistRepository() { - super(ApiUtil.getBaseUri(), ApiUtil::withAuthorizationSecret); + super(WebsiteApiUtil.getBaseUri(), WebsiteApiUtil::withAuthorizationSecret); } public record UserData( diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/Event.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/Event.java index 93bfc38..3b6e5db 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/Event.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/Event.java @@ -1,7 +1,8 @@ package eu.mhsl.craftattack.spawn.appliances.event; -import com.google.gson.Gson; import eu.mhsl.craftattack.spawn.Main; +import eu.mhsl.craftattack.spawn.api.client.ReqResp; +import eu.mhsl.craftattack.spawn.api.client.repositories.EventRepository; import eu.mhsl.craftattack.spawn.api.server.HttpServer; import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; @@ -10,6 +11,7 @@ import eu.mhsl.craftattack.spawn.appliances.customAdvancements.CustomAdvancement import eu.mhsl.craftattack.spawn.appliances.event.command.*; import eu.mhsl.craftattack.spawn.appliances.event.listener.ApplyPendingRewardsListener; import eu.mhsl.craftattack.spawn.util.IteratorUtil; +import eu.mhsl.craftattack.spawn.util.api.HttpStatus; import eu.mhsl.craftattack.spawn.util.entity.DisplayVillager; import eu.mhsl.craftattack.spawn.util.listener.DismissInventoryOpenFromHolder; import eu.mhsl.craftattack.spawn.util.listener.PlayerInteractAtEntityEventListener; @@ -27,12 +29,6 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; import java.util.*; public class Event extends Appliance { @@ -57,7 +53,6 @@ public class Event extends Appliance { private boolean isOpen = false; private AdvertisementStatus advertiseStatus = AdvertisementStatus.BEFORE; private UUID roomId; - private final HttpClient eventServerClient = HttpClient.newHttpClient(); private final List pendingRewards = new ArrayList<>(); record RewardConfiguration(String memorialMaterial, String memorialTitle, String memorialLore, List memorials, @@ -74,85 +69,62 @@ public class Event extends Appliance { @Override public void onEnable() { this.villager = new DisplayVillager.ConfigBound( - localConfig(), + this.localConfig(), villager -> { villager.customName(Component.text("Events", NamedTextColor.GOLD)); villager.setProfession(Villager.Profession.LIBRARIAN); villager.setVillagerType(Villager.Type.SNOW); } ); - this.isOpen = localConfig().getBoolean("enabled", false); - if(this.isOpen) this.roomId = UUID.fromString(localConfig().getString("roomId", "")); + this.isOpen = this.localConfig().getBoolean("enabled", false); + if(this.isOpen) this.roomId = UUID.fromString(this.localConfig().getString("roomId", "")); } - public void openEvent() throws URISyntaxException, IOException, InterruptedException { - if(isOpen) throw new ApplianceCommand.Error("Es läuft derzeit bereits ein Event!"); - HttpRequest createRoomRequest = HttpRequest.newBuilder() - .uri(new URI(localConfig().getString("api") + "/room")) - .POST(HttpRequest.BodyPublishers.noBody()) - .build(); + public void openEvent() { + if(this.isOpen) throw new ApplianceCommand.Error("Es läuft derzeit bereits ein Event!"); - HttpResponse rawResponse = eventServerClient.send(createRoomRequest, HttpResponse.BodyHandlers.ofString()); - if(rawResponse.statusCode() != 200) - throw new ApplianceCommand.Error("Event-Server meldet Fehler: " + rawResponse.statusCode()); + ReqResp sessionResponse = this.queryRepository(EventRepository.class).createSession(); - record Response(UUID uuid) { - } - Response response = new Gson().fromJson(rawResponse.body(), Response.class); + if(sessionResponse.status() != HttpStatus.OK) + throw new ApplianceCommand.Error("Event-Server meldet Fehler: " + sessionResponse.status()); - isOpen = true; - roomId = response.uuid; + this.isOpen = true; + this.roomId = sessionResponse.data().uuid(); } public void joinEvent(Player p) { - if(!isOpen) { + if(!this.isOpen) { p.sendMessage(Component.text("Zurzeit ist kein Event geöffnet.", NamedTextColor.RED)); return; } - if(!p.hasPermission("admin") && advertiseStatus == AdvertisementStatus.BEFORE) { + if(!p.hasPermission("admin") && this.advertiseStatus == AdvertisementStatus.BEFORE) { p.sendMessage(Component.text("Die Event befinden sich noch in der Vorbereitung.", NamedTextColor.RED)); return; } - if(!p.hasPermission("admin") && advertiseStatus == AdvertisementStatus.DONE) { + if(!p.hasPermission("admin") && this.advertiseStatus == AdvertisementStatus.DONE) { p.sendMessage(Component.text("Die Events laufen bereits. Ein nachträgliches Beitreten ist nicht möglich.", NamedTextColor.RED)); return; } - try { - Main.instance().getLogger().info("Verbinde mit eventserver: " + p.getName()); - p.sendMessage(Component.text("Authentifiziere...", NamedTextColor.GREEN)); - record Request(UUID player, UUID room) { - } - Request request = new Request(p.getUniqueId(), this.roomId); - HttpRequest queueRoomRequest = HttpRequest.newBuilder() - .uri(new URI(localConfig().getString("api") + "/queueRoom")) - .POST(HttpRequest.BodyPublishers.ofString(new Gson().toJson(request))) - .build(); + Main.instance().getLogger().info("Verbinde mit eventserver: " + p.getName()); + p.sendMessage(Component.text("Authentifiziere...", NamedTextColor.GREEN)); + ReqResp queueRespone = this.queryRepository(EventRepository.class) + .queueRoom(new EventRepository.QueueRoom(p.getUniqueId(), this.roomId)); - record Response(String error) { - } - HttpResponse rawResponse = eventServerClient.send(queueRoomRequest, HttpResponse.BodyHandlers.ofString()); - Main.instance().getLogger().info("Response: " + rawResponse.body()); - Response response = new Gson().fromJson(rawResponse.body(), Response.class); - - if(rawResponse.statusCode() != 200 || response.error != null) { - p.sendMessage(Component.text("Fehler beim Betreten: " + response.error, NamedTextColor.RED)); - return; - } - - p.sendMessage(Component.text("Betrete...", NamedTextColor.GREEN)); - PluginMessage.connect(p, localConfig().getString("connect-server-name")); - - } catch(URISyntaxException | IOException | InterruptedException e) { - throw new RuntimeException(e); + if(queueRespone.status() != HttpStatus.OK || queueRespone.data().error() != null) { + p.sendMessage(Component.text("Fehler beim Betreten: " + queueRespone.data().error(), NamedTextColor.RED)); + return; } + + p.sendMessage(Component.text("Betrete...", NamedTextColor.GREEN)); + PluginMessage.connect(p, this.localConfig().getString("connect-server-name")); } public void endEvent() { - if(!isOpen) throw new ApplianceCommand.Error("Es läuft derzeit kein Event!"); - isOpen = false; + if(!this.isOpen) throw new ApplianceCommand.Error("Es läuft derzeit kein Event!"); + this.isOpen = false; } private void rewardPlayers(RewardConfiguration rewardConfiguration) { @@ -160,10 +132,10 @@ public class Event extends Appliance { Reward reward = new Reward(uuid, new ItemStack(Objects.requireNonNull(Material.matchMaterial(rewardConfiguration.material)), amount)); if(Bukkit.getPlayer(uuid) == null) { - pendingRewards.add(reward); + this.pendingRewards.add(reward); return; } - giveReward(reward); + this.giveReward(reward); }); rewardConfiguration.memorials.forEach(uuid -> { @@ -177,10 +149,10 @@ public class Event extends Appliance { Main.instance().getAppliance(CustomAdvancements.class).grantAdvancement(Advancements.participateEvent, uuid); if(Bukkit.getPlayer(uuid) == null) { - pendingRewards.add(memorial); + this.pendingRewards.add(memorial); return; } - giveReward(memorial); + this.giveReward(memorial); }); rewardConfiguration.rewards.keySet().stream() @@ -208,7 +180,7 @@ public class Event extends Appliance { } public void advertise() { - advertiseCountdown.cancelIfRunning(); + this.advertiseCountdown.cancelIfRunning(); this.advertiseStatus = AdvertisementStatus.ADVERTISED; IteratorUtil.onlinePlayers(player -> player.sendMessage( Component.text() @@ -219,7 +191,7 @@ public class Event extends Appliance { .append(Component.text(", um dem Event beizutreten!")).appendNewline() .append(Component.text("-".repeat(10), NamedTextColor.GRAY)).appendNewline() )); - advertiseCountdown.start(); + this.advertiseCountdown.start(); } @Override @@ -247,7 +219,7 @@ public class Event extends Appliance { protected List listeners() { return List.of( new ApplyPendingRewardsListener(), - new PlayerInteractAtEntityEventListener(this.villager.getUniqueId(), playerInteractAtEntityEvent -> joinEvent(playerInteractAtEntityEvent.getPlayer())), + new PlayerInteractAtEntityEventListener(this.villager.getUniqueId(), playerInteractAtEntityEvent -> this.joinEvent(playerInteractAtEntityEvent.getPlayer())), new DismissInventoryOpenFromHolder(this.villager.getUniqueId()) ); } diff --git a/src/main/java/eu/mhsl/craftattack/spawn/util/api/EventApiUtil.java b/src/main/java/eu/mhsl/craftattack/spawn/util/api/EventApiUtil.java new file mode 100644 index 0000000..ff69ec5 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/util/api/EventApiUtil.java @@ -0,0 +1,23 @@ +package eu.mhsl.craftattack.spawn.util.api; + +import eu.mhsl.craftattack.spawn.config.Configuration; +import org.bukkit.configuration.ConfigurationSection; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Objects; + +public class EventApiUtil { + private final static ConfigurationSection apiConfig = Objects.requireNonNull(Configuration.cfg.getConfigurationSection("event")); + public final static String basePath = apiConfig.getString("api"); + + public static URI getBaseUri() { + Objects.requireNonNull(basePath); + try { + return new URI(basePath); + } catch(URISyntaxException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/util/api/ApiUtil.java b/src/main/java/eu/mhsl/craftattack/spawn/util/api/WebsiteApiUtil.java similarity index 96% rename from src/main/java/eu/mhsl/craftattack/spawn/util/api/ApiUtil.java rename to src/main/java/eu/mhsl/craftattack/spawn/util/api/WebsiteApiUtil.java index 0fe700c..091c467 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/util/api/ApiUtil.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/util/api/WebsiteApiUtil.java @@ -8,7 +8,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.Objects; -public class ApiUtil { +public class WebsiteApiUtil { private final static ConfigurationSection apiConfig = Objects.requireNonNull(Configuration.cfg.getConfigurationSection("api")); public final static String basePath = apiConfig.getString("baseurl"); public final static String apiSecret = apiConfig.getString("secret");