From 63310d6cb33323076a156b1ff00dea58a9398bc9 Mon Sep 17 00:00:00 2001 From: p2vman Date: Wed, 30 Apr 2025 23:58:06 +0300 Subject: [PATCH] abc --- .gitignore | 3 +- src/main/java/io/p2vman/pilers/Pilers.java | 49 +++++++++++++++---- .../java/io/p2vman/pilers/TaskMannager.java | 21 +++++++- .../java/io/p2vman/pilers/events/Event.java | 4 ++ .../io/p2vman/pilers/events/TestEvent.java | 22 +++++++++ 5 files changed, 87 insertions(+), 12 deletions(-) create mode 100644 src/main/java/io/p2vman/pilers/events/TestEvent.java diff --git a/.gitignore b/.gitignore index 4a2c699..52ef583 100644 --- a/.gitignore +++ b/.gitignore @@ -48,4 +48,5 @@ gradle-app.setting # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* -replay_pid* \ No newline at end of file +replay_pid* +/build/ diff --git a/src/main/java/io/p2vman/pilers/Pilers.java b/src/main/java/io/p2vman/pilers/Pilers.java index b86cec6..b802802 100644 --- a/src/main/java/io/p2vman/pilers/Pilers.java +++ b/src/main/java/io/p2vman/pilers/Pilers.java @@ -4,6 +4,9 @@ import cloud.commandframework.CommandManager; import cloud.commandframework.execution.CommandExecutionCoordinator; import cloud.commandframework.paper.PaperCommandManager; +import io.p2vman.pilers.events.Event; +import io.p2vman.pilers.events.TestEvent; +import it.unimi.dsi.fastutil.Pair; import lombok.AllArgsConstructor; import lombok.Getter; @@ -23,6 +26,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.util.logging.Logger; import java.util.stream.Stream; @@ -37,7 +41,16 @@ public final class Pilers extends JavaPlugin implements Listener { Builder builder; String id; boolean start; - int give_time; + RandomConfig rc; + @AllArgsConstructor + @Getter + public static class RandomConfig { + int second_toitem; + int min_items; + int max_items; + } + List events; + Event curent; } @EventHandler(priority = EventPriority.MONITOR) @@ -111,7 +124,7 @@ public final class Pilers extends JavaPlugin implements Listener { public void stop(Optional win) { LOGGER.info("stop"); - taskMannager.cancel("second"); + taskMannager.cancel("item", "event", "border"); state.start = false; Collection players = Bukkit.getOnlinePlayers(); Bukkit.getWorlds().get(0).setType(0,-1,0, Material.STONE); @@ -129,7 +142,7 @@ public final class Pilers extends JavaPlugin implements Listener { } win.ifPresentOrElse((w) -> { - w.setLevel(1); + }, () -> { }); @@ -149,16 +162,19 @@ public final class Pilers extends JavaPlugin implements Listener { .handler((ctx) -> { Builder builder = new Builder(); ItemRandom random = new ItemRandom(); - taskMannager.cancel("second"); + Server server = getServer(); + World world = Bukkit.getWorlds().get(0); + taskMannager.cancel("item", "event", "border"); + byte[] buff = new byte[12]; random.nextBytes(buff); Collection players = Bukkit.getOnlinePlayers(); - state = new GameState(random, builder, Base64.getEncoder().encodeToString(buff), false, 10); + state = new GameState(random, builder, Base64.getEncoder().encodeToString(buff), false, new GameState.RandomConfig(10, 2, 4), new ArrayList<>(), null); + state.events.add(new TestEvent()); builder.build(players.size(), (p) -> { - World world = Bukkit.getWorlds().get(0); ctx.getSender().sendMessage("End"); List players_ = new ArrayList<>(Bukkit.getOnlinePlayers()); @@ -181,17 +197,32 @@ public final class Pilers extends JavaPlugin implements Listener { state.start = true; - taskMannager.runRepeating("second", () -> { + taskMannager.runRepeating("item", () -> { Collection _players = Bukkit.getOnlinePlayers(); Stream stackStream = random.itemStackStream(0, 0, ItemRandom.ITEM); _players.forEach((p_) -> { if (p_.getGameMode() == GameMode.SURVIVAL) { - stackStream.limit(random.nextInt(2)+1).forEach(p_.getInventory()::addItem); + stackStream + .limit(random.nextInt(state.rc.min_items, state.rc.max_items)) + .forEach(p_.getInventory()::addItem); } }); - }, 0, 20L * state.give_time); + }, 0, 20L * state.rc.second_toitem); + taskMannager.runRepeating("event", () -> { + taskMannager.cancel("event_run"); + state.curent = state.events.get(random.nextInt(state.events.size())); + LOGGER.info("Event start"); + taskMannager.runAsync("event_run", state.curent) + .thenRun(() -> { + LOGGER.info("Event end"); + }); + }, 20L * 60, 20L * 60); + + taskMannager.runRepeating("border", () -> { + + }, 20L * 60, 20L * 10); }, (c) -> { ctx.getSender().sendMessage(c); }); diff --git a/src/main/java/io/p2vman/pilers/TaskMannager.java b/src/main/java/io/p2vman/pilers/TaskMannager.java index f97886c..a99bdf7 100644 --- a/src/main/java/io/p2vman/pilers/TaskMannager.java +++ b/src/main/java/io/p2vman/pilers/TaskMannager.java @@ -7,6 +7,7 @@ import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.scheduler.BukkitTask; import java.util.Map; +import java.util.concurrent.CompletableFuture; public class TaskMannager implements BukkitScheduler { @Delegate @@ -27,6 +28,13 @@ public class TaskMannager implements BukkitScheduler { if (task != null) task.cancel(); } + public void cancel(String... ids) { + for (String id : ids) { + BukkitTask task = tasks.remove(id); + if (task != null) task.cancel(); + } + } + public void cancelAll() { for (BukkitTask task : tasks.values()) { task.cancel(); @@ -46,10 +54,19 @@ public class TaskMannager implements BukkitScheduler { tasks.put(id, task); } - public void runAsync(String id, Runnable runnable) { + public CompletableFuture runAsync(String id, Runnable runnable) { cancel(id); - BukkitTask task = runTaskAsynchronously(plugin, runnable); + CompletableFuture future = new CompletableFuture<>(); + BukkitTask task = runTaskAsynchronously(plugin, () -> { + try { + runnable.run(); + future.complete(null); + } catch (Exception e) { + future.completeExceptionally(e); + } + }); tasks.put(id, task); + return future; } public void runAsyncRepeating(String id, Runnable runnable, long delayTicks, long periodTicks) { diff --git a/src/main/java/io/p2vman/pilers/events/Event.java b/src/main/java/io/p2vman/pilers/events/Event.java index b1394d0..55f5506 100644 --- a/src/main/java/io/p2vman/pilers/events/Event.java +++ b/src/main/java/io/p2vman/pilers/events/Event.java @@ -11,4 +11,8 @@ public abstract class Event implements Runnable { public Component displayname() { return Component.text(name); } + + public void broadcast() { + + } } diff --git a/src/main/java/io/p2vman/pilers/events/TestEvent.java b/src/main/java/io/p2vman/pilers/events/TestEvent.java new file mode 100644 index 0000000..d452912 --- /dev/null +++ b/src/main/java/io/p2vman/pilers/events/TestEvent.java @@ -0,0 +1,22 @@ +package io.p2vman.pilers.events; + + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.title.TitlePart; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +public class TestEvent extends Event { + public TestEvent() { + super("test"); + } + @Override + public void run() { + Component title = displayname(); + Component subtitle = Component.text("Event"); + for (Player player : Bukkit.getOnlinePlayers()) { + player.sendTitlePart(TitlePart.TITLE, title); + player.sendTitlePart(TitlePart.SUBTITLE, subtitle); + } + } +}