Add fall detection and fix access modifiers

- Added Y-coordinate fall detection (spawn.Y - 30)
- Players now respawn when falling below threshold
- Fixed fall() access modifier (protected -> public)
- Added debug logging for locale loading issues
This commit is contained in:
loki 2026-04-09 12:22:03 +02:00
parent c142d21a26
commit 03ee678b68
4 changed files with 34 additions and 7 deletions

View file

@ -90,9 +90,15 @@ public class Locales {
@NotNull
public static Item getItem(@NotNull String locale, @NotNull String path, String... replace) {
synchronized (locales) {
if (locales.isEmpty()) return new Item(Material.STONE, "");
if (locales.isEmpty()) {
LoParkour.getPlugin().getLogger().warning("Locales are empty! Returning STONE item for path: " + path);
return new Item(Material.STONE, "");
}
FileConfiguration config = locales.get(locale);
if (config == null) return new Item(Material.STONE, "");
if (config == null) {
LoParkour.getPlugin().getLogger().warning("Locale '" + locale + "' not found! Available: " + locales.keySet() + ". Returning STONE for path: " + path);
return new Item(Material.STONE, "");
}
return buildItem(config, path, replace);
}
}

View file

@ -72,7 +72,7 @@ public class ParkourGenerator {
// Lifecycle methods
public void startTick() { lifecycle.startTick(); }
public void tick() { lifecycle.tick(); }
protected void fall() { lifecycle.fall(); }
public void fall() { lifecycle.fall(); }
protected void score() { lifecycle.score(); }
public void reset(boolean regenerate) {

View file

@ -44,20 +44,41 @@ public class LifecycleTickManager {
*/
public void tick() {
tickCounter++;
// Check if players fell below threshold
checkPlayerFall();
if (tickCounter % Option.CLEANUP_INTERVAL == 0) {
cleanup.cleanupDistantBlocks();
}
if (tickCounter % TIME_UI_INTERVAL == 0) {
visualUpdater.updateTimeDisplays();
}
// Generate more blocks if needed
maintainBlockLead();
// Update player visuals
visualUpdater.updateAllPlayers();
}
/**
* Check if any player fell below the threshold.
*/
private void checkPlayerFall() {
if (generator.state.playerSpawn == null) {
return;
}
double fallThreshold = generator.state.playerSpawn.getY() - 30;
for (var player : generator.getPlayers()) {
if (player.player.getLocation().getY() < fallThreshold) {
generator.fall();
break; // Only trigger once per tick
}
}
}
/**
* Reset tick counter.

View file

@ -163,7 +163,7 @@ public class CoopMode implements MultiMode {
}
@Override
protected void fall() {
public void fall() {
// Show each player their individual contribution before reset
getPlayers().forEach(pp -> {
int contrib = contributions.getOrDefault(pp.getUUID(), 0);