From 6c0fc1f3dc534781ccd47840f9e902e60dd10110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sat, 21 Jun 2025 20:19:02 +0200 Subject: [PATCH] added admin-passthrough added time-lock --- .../eu/mhsl/craftattack/teamLobby/Lobby.java | 16 +++++++++++-- .../craftattack/teamLobby/LobbyManager.java | 20 +++++++++++++++- .../eu/mhsl/craftattack/teamLobby/Main.java | 23 +++++++++++-------- 3 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/main/java/eu/mhsl/craftattack/teamLobby/Lobby.java b/src/main/java/eu/mhsl/craftattack/teamLobby/Lobby.java index e3d4f60..3e75fca 100644 --- a/src/main/java/eu/mhsl/craftattack/teamLobby/Lobby.java +++ b/src/main/java/eu/mhsl/craftattack/teamLobby/Lobby.java @@ -30,6 +30,8 @@ import net.minestom.server.world.DimensionType; import org.spongepowered.configurate.ConfigurationNode; import java.nio.file.Path; +import java.time.LocalTime; +import java.time.ZoneId; import java.util.UUID; import java.util.function.Consumer; import java.util.stream.Collectors; @@ -73,7 +75,6 @@ public class Lobby extends InstanceContainer { MinecraftServer.getInstanceManager().registerInstance(this); this.team = team; - //noinspection UnstableApiUsage this.eventNode() .addListener(PlayerBlockBreakEvent.class, CommonHandler::cancel) .addListener(AddEntityToInstanceEvent.class, this::onPlayerChange) @@ -124,11 +125,23 @@ public class Lobby extends InstanceContainer { private synchronized void onBlockInteract(PlayerBlockInteractEvent event) { if(!event.getBlockPosition().sameBlock(this.buttonLocation)) return; if(this.isJoining) return; + + LocalTime now = LocalTime.now(ZoneId.of("Europe/Berlin")); + LocalTime start = LocalTime.of(16, 0); + LocalTime end = LocalTime.of(21, 0); + + if (now.isBefore(start) || now.isAfter(end)) { + event.getPlayer().sendActionBar(Component.text("Der Beitritt ist nur zwischen 16 und 21 Uhr möglich.", NamedTextColor.RED)); + event.getPlayer().playSound(Sound.sound(SoundEvent.BLOCK_NOTE_BLOCK_BASS, Sound.Source.PLAYER, 1f, 0.5f)); + return; + } + if(!this.isComplete) { event.getPlayer().playSound(Sound.sound(SoundEvent.UI_BUTTON_CLICK, Sound.Source.PLAYER, 1f, 1f)); this.everyMember(p -> p.sendActionBar(Component.text("Dein Team ist nicht vollständig!", NamedTextColor.RED))); return; } + this.isJoining = true; this.connect(); this.update(); @@ -169,7 +182,6 @@ public class Lobby extends InstanceContainer { private void particleTick() { if(!this.isComplete) return; - this.everyMember(p -> p.sendPacket(this.isJoining ? this.progressParticles : this.availableParticles)); } diff --git a/src/main/java/eu/mhsl/craftattack/teamLobby/LobbyManager.java b/src/main/java/eu/mhsl/craftattack/teamLobby/LobbyManager.java index 2beefa8..1768bd6 100644 --- a/src/main/java/eu/mhsl/craftattack/teamLobby/LobbyManager.java +++ b/src/main/java/eu/mhsl/craftattack/teamLobby/LobbyManager.java @@ -2,9 +2,12 @@ package eu.mhsl.craftattack.teamLobby; import com.google.common.reflect.TypeToken; import eu.mhsl.craftattack.teamLobby.data.Team; +import eu.mhsl.craftattack.teamLobby.http.ReqResp; import eu.mhsl.craftattack.teamLobby.http.Request; +import eu.mhsl.craftattack.teamLobby.util.PluginMessageUtil; import net.minestom.server.MinecraftServer; import net.minestom.server.entity.Player; +import net.minestom.server.instance.InstanceContainer; import net.minestom.server.timer.TaskSchedule; import org.jetbrains.annotations.NotNull; @@ -34,9 +37,24 @@ public class LobbyManager { } } - public @NotNull Lobby getPlayerInstance(Player player) { + public @NotNull InstanceContainer getPlayerInstance(Player player) { UUID playerId = player.getUuid(); + HttpRequest request = Request.builder(Request.server( + "adminmarker/isAdmin", + uriBuilder -> uriBuilder.addParameter("player", player.getUuid().toString()) + )).GET().build(); + + record Status(String status, boolean response) {} + ReqResp ticket = Request.execute(request, Status.class); + if(ticket.data().response) { + MinecraftServer.getSchedulerManager().scheduleTask( + () -> PluginMessageUtil.connect(player, "server"), + TaskSchedule.seconds(1), + TaskSchedule.stop()); + return MinecraftServer.getInstanceManager().createInstanceContainer(); + } + Team targetTeam; synchronized(this.teamLock) { targetTeam = this.teams.stream() diff --git a/src/main/java/eu/mhsl/craftattack/teamLobby/Main.java b/src/main/java/eu/mhsl/craftattack/teamLobby/Main.java index 142a646..896c5cc 100644 --- a/src/main/java/eu/mhsl/craftattack/teamLobby/Main.java +++ b/src/main/java/eu/mhsl/craftattack/teamLobby/Main.java @@ -5,6 +5,7 @@ import eu.mhsl.craftattack.teamLobby.util.DisconnectInfo; import net.minestom.server.MinecraftServer; import net.minestom.server.entity.Player; import net.minestom.server.event.player.AsyncPlayerConfigurationEvent; +import net.minestom.server.instance.InstanceContainer; import net.minestom.server.timer.TaskSchedule; import org.spongepowered.configurate.ConfigurateException; import org.spongepowered.configurate.ConfigurationNode; @@ -64,16 +65,18 @@ public class Main { try { Player p = event.getPlayer(); System.out.printf("Player %s joined: %s%n", p.getUsername(), p.getUuid()); - Lobby lobby = lobbyManager.getPlayerInstance(p); - event.setSpawningInstance(lobby); - p.setRespawnPoint(lobby.spawnPoint); - MinecraftServer.getSchedulerManager().scheduleTask( - () -> { - ConnectInfo.tickets(lobby.team.name(), p); - }, - TaskSchedule.seconds(3), - TaskSchedule.stop() - ); + InstanceContainer container = lobbyManager.getPlayerInstance(p); + event.setSpawningInstance(container); + if(container instanceof Lobby lobby) { + p.setRespawnPoint(lobby.spawnPoint); + MinecraftServer.getSchedulerManager().scheduleTask( + () -> { + ConnectInfo.tickets(lobby.team.name(), p); + }, + TaskSchedule.seconds(3), + TaskSchedule.stop() + ); + } } catch(Exception e) { new DisconnectInfo( "Login abgelehnt",