This commit is contained in:
p2vman 2025-04-30 23:58:06 +03:00
parent 19666020ed
commit 63310d6cb3
5 changed files with 87 additions and 12 deletions

1
.gitignore vendored
View File

@ -49,3 +49,4 @@ gradle-app.setting
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*
/build/

View File

@ -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<Event> events;
Event curent;
}
@EventHandler(priority = EventPriority.MONITOR)
@ -111,7 +124,7 @@ public final class Pilers extends JavaPlugin implements Listener {
public void stop(Optional<Player> win) {
LOGGER.info("stop");
taskMannager.cancel("second");
taskMannager.cancel("item", "event", "border");
state.start = false;
Collection<? extends Player> 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<? extends Player> 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<Player> 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<? extends Player> _players = Bukkit.getOnlinePlayers();
Stream<ItemStack> 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);
});

View File

@ -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<Void> runAsync(String id, Runnable runnable) {
cancel(id);
BukkitTask task = runTaskAsynchronously(plugin, runnable);
CompletableFuture<Void> 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) {

View File

@ -11,4 +11,8 @@ public abstract class Event implements Runnable {
public Component displayname() {
return Component.text(name);
}
public void broadcast() {
}
}

View File

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