This commit is contained in:
loki 2026-03-01 22:43:37 +01:00
parent 547fe6d9bb
commit 8705cad578
118 changed files with 2714 additions and 4761 deletions

View file

@ -1,5 +1,9 @@
package dev.loki.loparkour.player;
import java.util.ArrayList;
import dev.lolib.scheduler.Scheduler;
import com.google.gson.annotations.Expose;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.config.Config;
@ -13,10 +17,8 @@ import dev.loki.loparkour.player.data.PreviousData;
import dev.loki.loparkour.session.Session;
import dev.loki.loparkour.storage.Storage;
import dev.loki.loparkour.world.Divider;
import dev.efnilite.vilib.inventory.Menu;
import dev.efnilite.vilib.inventory.item.Item;
import dev.efnilite.vilib.util.Colls;
import dev.efnilite.vilib.util.Task;
import dev.lolib.scheduler.Scheduler;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.entity.Player;
@ -190,7 +192,7 @@ public class ParkourPlayer extends ParkourUser {
Runnable write = () -> Storage.writePlayer(this);
if (async) {
Task.create(LoParkour.getPlugin()).async().execute(write).run();
Scheduler.get(LoParkour.getPlugin()).runAsync(write);
} else {
write.run();
}
@ -207,12 +209,12 @@ public class ParkourPlayer extends ParkourUser {
// -= Inventory =-
if (Config.CONFIG.getBoolean("options.inventory-handling")) {
Task.create(LoParkour.getPlugin()).delay(5).execute(() -> {
Scheduler.get(LoParkour.getPlugin()).runLater(() -> {
LoParkour.log("Setting up inventory for player %s".formatted(player.getName()));
player.getInventory().clear();
List<Item> items = new ArrayList<>();
List<dev.loki.loparkour.util.Item> items = new ArrayList<>();
if (ParkourOption.PLAY.mayPerform(player)) items.add(Locales.getItem(locale, "play.item"));
if (ParkourOption.COMMUNITY.mayPerform(player)) items.add(Locales.getItem(locale, "community.item"));
@ -221,9 +223,11 @@ public class ParkourPlayer extends ParkourUser {
if (ParkourOption.QUIT.mayPerform(player)) items.add(Locales.getItem(locale, "other.quit"));
List<Integer> slots = Menu.getEvenlyDistributedSlots(items.size());
Colls.range(0, items.size()).forEach(idx -> player.getInventory().setItem(slots.get(idx), items.get(idx).build()));
}).run();
List<Integer> slots = getEvenlyDistributedSlots(items.size());
for (int idx = 0; idx < items.size(); idx++) {
player.getInventory().setItem(slots.get(idx), items.get(idx).build());
}
}, 5);
} else {
sendTranslated("other.customize");
}
@ -232,4 +236,13 @@ public class ParkourPlayer extends ParkourUser {
public record OptionContainer(ParkourOption option, BiConsumer<ParkourPlayer, String> consumer) {
}
private List<Integer> getEvenlyDistributedSlots(int count) {
List<Integer> slots = new ArrayList<>();
int[] positions = {10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25};
for (int i = 0; i < Math.min(count, positions.length); i++) {
slots.add(positions[i]);
}
return slots;
}
}

View file

@ -1,17 +1,19 @@
package dev.loki.loparkour.player;
import dev.lolib.scheduler.Scheduler;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.api.event.ParkourSpectateEvent;
import dev.loki.loparkour.config.Locales;
import dev.loki.loparkour.player.data.PreviousData;
import dev.loki.loparkour.session.Session;
import dev.efnilite.vilib.util.Strings;
import dev.efnilite.vilib.util.Task;
import dev.loki.loparkour.util.ColorUtil;
import dev.lolib.scheduler.Scheduler;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitTask;
import dev.lolib.scheduler.ScheduledTask;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@ -24,7 +26,7 @@ import java.util.Comparator;
*/
public class ParkourSpectator extends ParkourUser {
private final BukkitTask closestChecker;
private final dev.lolib.scheduler.ScheduledTask closestChecker;
/**
* The closest player.
*/
@ -38,9 +40,7 @@ public class ParkourSpectator extends ParkourUser {
new ParkourSpectateEvent(this).call();
Task.create(LoParkour.getPlugin())
.delay(1)
.execute(() -> {
Scheduler.get(LoParkour.getPlugin()).runLater(() -> {
teleport(closest.getLocation());
sendTranslated("play.spectator.join");
@ -52,14 +52,9 @@ public class ParkourSpectator extends ParkourUser {
player.setInvisible(true);
player.setCollidable(false);
}
})
.run();
}, 1);
closestChecker = Task.create(LoParkour.getPlugin())
.async()
.delay(1)
.repeat(10)
.execute(() -> {
closestChecker = Scheduler.get(LoParkour.getPlugin()).runTimerAsync(() -> {
if (session.getPlayers().isEmpty()) {
return;
}
@ -67,15 +62,14 @@ public class ParkourSpectator extends ParkourUser {
closest = session.getPlayers().stream()
.min(Comparator.comparing(other -> other.getLocation().distanceSquared(player.getLocation()))) // x or x^2 doesn't matter in getting smallest
.orElse(closest);
})
.run();
}, 1, 10);
}
/**
* Updates the spectator's action bar, scoreboard and checks distance.
*/
public void update() {
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(Strings.colour(Locales.getString(player, "play.spectator.action_bar"))));
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(ColorUtil.color(Locales.getString(player, "play.spectator.action_bar"))));
player.setGameMode(GameMode.SPECTATOR);
updateScoreboard(session.generator);

View file

@ -19,8 +19,10 @@ import dev.loki.loparkour.player.data.PreviousData;
import dev.loki.loparkour.session.Session;
import dev.loki.loparkour.storage.Storage;
import dev.loki.loparkour.world.Divider;
import dev.efnilite.vilib.fastboard.FastBoard;
import dev.efnilite.vilib.util.Strings;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.DisplaySlot;
import dev.loki.loparkour.util.ColorUtil;
import io.papermc.lib.PaperLib;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.Bukkit;
@ -110,11 +112,13 @@ public abstract class ParkourUser {
try {
user.unregister();
if (user.board != null && !user.board.isDeleted()) {
user.board.delete();
}
// TODO: Implement scoreboard deletion with LoLib
// if (user.board != null) {
// user.board.delete();
// }
} catch (Exception ex) { // safeguard to prevent people from losing data
LoParkour.logging().stack("Error while trying to make player %s leave".formatted(user.getName()), ex);
LoParkour.getPlugin().getLogger().log(java.util.logging.Level.SEVERE,
"Error while trying to make player " + user.getName() + " leave", ex);
user.send("<red><bold>There was an error while trying to handle leaving.");
}
@ -129,7 +133,7 @@ public abstract class ParkourUser {
Mode mode = user.session.generator.getMode();
if (mode == null) {
LoParkour.logging().error("Mode is null for %s".formatted(user.getName()));
LoParkour.getPlugin().getLogger().severe("Mode is null for %s".formatted(user.getName()));
mode = Modes.DEFAULT;
}
@ -148,7 +152,7 @@ public abstract class ParkourUser {
try {
player.sendPluginMessage(LoParkour.getPlugin(), "BungeeCord", out.toByteArray());
} catch (ChannelNotRegisteredException ex) {
LoParkour.logging().stack("Error while trying to send %s to server %s. This server is not registered.".formatted(player.getName(), server), ex);
LoParkour.getPlugin().getLogger().severe("Error while trying to send %s to server %s. This server is not registered.".formatted(player.getName(), server) + " - " + ex.getMessage());
player.kickPlayer("Couldn't move you to %s. Please rejoin.".formatted(server));
}
}
@ -190,7 +194,7 @@ public abstract class ParkourUser {
/**
* This user's scoreboard
*/
public FastBoard board;
public Scoreboard board;
/**
* This user's PreviousData
@ -230,7 +234,7 @@ public abstract class ParkourUser {
this.previousData = previousData == null ? new PreviousData(player) : previousData;
if (Boolean.parseBoolean(Option.OPTIONS_DEFAULTS.get(ParkourOption.SCOREBOARD))) {
this.board = new FastBoard(player);
this.board = Bukkit.getScoreboardManager().getNewScoreboard();
}
}
@ -254,7 +258,7 @@ public abstract class ParkourUser {
* @param message The message
*/
public void send(String message) {
player.sendMessage(Strings.colour(message));
player.sendMessage(ColorUtil.color(message));
}
/**
@ -274,7 +278,7 @@ public abstract class ParkourUser {
*/
public void updateScoreboard(ParkourGenerator generator) {
// board can be null a few ticks after on player leave
if (board == null || board.isDeleted() || !generator.profile.get("showScoreboard").asBoolean()) {
if (board == null || false || !generator.profile.get("showScoreboard").asBoolean()) {
return;
}
@ -285,8 +289,8 @@ public abstract class ParkourUser {
top = new Score("?", "?", "?", 0);
}
board.updateTitle(replace(Locales.getString(locale, "scoreboard.title"), top, high, generator));
board.updateLines(replace(Locales.getStringList(locale, "scoreboard.lines"), top, high, generator));
// board.updateTitle(replace(Locales.getString(locale, "scoreboard.title"), top, high, generator));
// board.updateLines(replace(Locales.getStringList(locale, "scoreboard.lines"), top, high, generator));
}
private List<String> replace(List<String> s, Score top, Score high, ParkourGenerator generator) {
@ -294,7 +298,7 @@ public abstract class ParkourUser {
}
private String replace(String s, Score top, Score high, ParkourGenerator generator) {
return Strings.colour(translate(player, s)
return ColorUtil.color(translate(player, s)
.replace("%score%", Integer.toString(generator.score))
.replace("%time%", generator.getFormattedTime())
.replace("%difficulty%", Double.toString(generator.getDifficultyScore()))

View file

@ -1,8 +1,10 @@
package dev.loki.loparkour.player.data;
import dev.lolib.scheduler.Scheduler;
import dev.loki.loparkour.LoParkour;
import dev.loki.loparkour.config.Config;
import dev.efnilite.vilib.util.Task;
import dev.lolib.scheduler.Scheduler;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
@ -46,7 +48,7 @@ public class InventoryData {
return;
}
Task.create(LoParkour.getPlugin()).async().execute(() -> loadFile(onFinish)).run();
Scheduler.get(LoParkour.getPlugin()).runAsync(() -> loadFile(onFinish));
}
@SuppressWarnings("unchecked")
@ -56,7 +58,7 @@ public class InventoryData {
onFinish.accept(this);
} catch (IOException | ClassNotFoundException ex) {
LoParkour.logging().stack("Error while reading inventory of %s from file %s".formatted(player.getName(), file.getName()), ex);
LoParkour.getPlugin().getLogger().severe("Error while reading inventory of %s from file %s".formatted(player.getName(), file.getName()) + " - " + ex.getMessage());
onFinish.accept(null);
}
}
@ -84,7 +86,7 @@ public class InventoryData {
}
if (toFile) {
Task.create(LoParkour.getPlugin()).async().execute(this::saveFile).run();
Scheduler.get(LoParkour.getPlugin()).runAsync(this::saveFile);
}
}
@ -93,14 +95,14 @@ public class InventoryData {
file.getParentFile().mkdirs();
file.createNewFile();
} catch (IOException ex) {
LoParkour.logging().stack("Error while creating file to save inventory of %s to file %s".formatted(player.getName(), file.getName()), ex);
LoParkour.getPlugin().getLogger().severe("Error while creating file to save inventory of %s to file %s".formatted(player.getName(), file.getName()) + " - " + ex.getMessage());
}
try (ObjectOutputStream stream = new BukkitObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file)))) {
stream.writeObject(items);
stream.flush();
} catch (IOException ex) {
LoParkour.logging().stack("Error while saving inventory of %s to file %s".formatted(player.getName(), file.getName()), ex);
LoParkour.getPlugin().getLogger().severe("Error while saving inventory of %s to file %s".formatted(player.getName(), file.getName()) + " - " + ex.getMessage());
}
}
}

View file

@ -86,7 +86,7 @@ public class PreviousData {
player.setVelocity(new Vector(0, 0, 0));
player.setFallDistance(0f);
} catch (Exception ex) { // not the best way to do this... too bad!
LoParkour.logging().stack("Error while recovering stats of %s".formatted(player.getName()), ex);
LoParkour.getPlugin().getLogger().severe("Error while recovering stats of %s".formatted(player.getName()) + " - " + ex.getMessage());
}
if (inventoryData != null) {