Initial commit: LoParkour v1.1.0

This commit is contained in:
loki 2026-02-24 22:07:03 +01:00
commit aecb03ccf8
120 changed files with 9668 additions and 0 deletions

View file

@ -0,0 +1,55 @@
package dev.loki.loparkour.mode;
import dev.loki.loparkour.config.Config;
import dev.loki.loparkour.config.Locales;
import dev.loki.loparkour.generator.ParkourGenerator;
import dev.loki.loparkour.leaderboard.Leaderboard;
import dev.loki.loparkour.player.ParkourPlayer;
import dev.loki.loparkour.session.Session;
import dev.efnilite.vilib.inventory.item.Item;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* The default parkour mode
*/
public class DefaultMode implements Mode {
private final Leaderboard leaderboard = new Leaderboard(getName(), Leaderboard.Sort.SCORE);
@Override
@NotNull
public String getName() {
return "default";
}
@Override
@Nullable
public Item getItem(String locale) {
return Locales.getItem(locale, "play.single.default");
}
@Override
@NotNull
public Leaderboard getLeaderboard() {
return leaderboard;
}
@Override
public void create(Player player) {
if (!Config.CONFIG.getBoolean("joining")) {
player.sendMessage("Joining is currently disabled.");
return;
}
ParkourPlayer pp = ParkourPlayer.getPlayer(player);
if (pp != null && pp.session.generator != null && pp.session.generator.getMode() instanceof DefaultMode) {
return;
}
player.closeInventory();
Session.create(ParkourGenerator::new, null, null, player);
}
}

View file

@ -0,0 +1,38 @@
package dev.loki.loparkour.mode;
import dev.loki.loparkour.leaderboard.Leaderboard;
import dev.efnilite.vilib.inventory.item.Item;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* Interface for all modes.
* Every registered mode needs to inherit this class, because it needs identifying functions.
*/
public interface Mode {
/**
* Method that gets called when a mode is clicked in the menu or joined using /parkour join.
*
* @param player The player.
*/
void create(Player player);
/**
* @param locale The locale of the menu, used to adjust the name.
* @return The item used in menus to show this mode. If this item is null, the mode won't be displayed.
*/
@Nullable Item getItem(String locale);
/**
* @return The {@link Leaderboard} that belongs to this mode
*/
@Nullable Leaderboard getLeaderboard();
/**
* @return The internal name used for this mode.
*/
@NotNull String getName();
}

View file

@ -0,0 +1,14 @@
package dev.loki.loparkour.mode;
import dev.loki.loparkour.api.Registry;
public class Modes {
public static DefaultMode DEFAULT;
public static SpectatorMode SPECTATOR;
public static void init() {
DEFAULT = (DefaultMode) Registry.getMode("default");
SPECTATOR = (SpectatorMode) Registry.getMode("spectator");
}
}

View file

@ -0,0 +1,29 @@
package dev.loki.loparkour.mode;
import dev.loki.loparkour.session.Session;
import org.bukkit.entity.Player;
/**
* Class for modes featuring multiple players.
*/
public interface MultiMode extends Mode {
/**
* Adds a player to this mode.
*
* @param player The player
*/
void join(Player player, Session session);
/**
* Removes a player from this mode.
*
* @param player The player
*/
void leave(Player player, Session session);
/**
* @return The max player count.
*/
int getMaxPlayers();
}

View file

@ -0,0 +1,67 @@
package dev.loki.loparkour.mode;
import dev.loki.loparkour.config.Config;
import dev.loki.loparkour.config.Locales;
import dev.loki.loparkour.leaderboard.Leaderboard;
import dev.loki.loparkour.menu.Menus;
import dev.loki.loparkour.menu.ParkourOption;
import dev.loki.loparkour.player.ParkourSpectator;
import dev.loki.loparkour.player.ParkourUser;
import dev.loki.loparkour.session.Session;
import dev.efnilite.vilib.inventory.item.Item;
import dev.efnilite.vilib.util.Strings;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class SpectatorMode implements Mode {
@Override
public @NotNull String getName() {
return "spectator";
}
@Override
@Nullable
public Item getItem(String locale) {
return null;
}
@Override
@Nullable
public Leaderboard getLeaderboard() {
return null;
}
@Override
public void create(Player player) {
Menus.SPECTATOR.open(player);
}
public void create(Player player, Session session) {
if (!Config.CONFIG.getBoolean("joining")) {
player.sendMessage(Strings.colour("<red><bold>Joining is currently disabled."));
return;
}
if (!ParkourOption.SPECTATOR.mayPerform(player)) {
player.sendMessage(Locales.getString(player, "other.no_do"));
return;
}
ParkourUser user = ParkourUser.getUser(player);
ParkourSpectator spectator;
if (session.getPlayers().isEmpty()) {
return;
}
if (user != null) {
ParkourUser.unregister(user, false, false, false);
spectator = new ParkourSpectator(player, session, user.previousData);
} else {
spectator = new ParkourSpectator(player, session, null);
}
session.addSpectators(spectator);
}
}