Add feather fall and spring jokers, drop jokers on checkpoints with 10% chance and only give a totem when starting from zero

This commit is contained in:
MineTec committed 2026-10-10 13:09:02 +02:00
1 parent 555f4024e4
commit 38bb9c6dc8
3 files changed
+54 -21

No files matched your search

@@ -19,11 +19,9 @@ import net.minestom.server.event.player.PlayerMoveEvent;
import net.minestom.server.event.player.PlayerSpawnEvent;
import net.minestom.server.event.player.PlayerSwapItemEvent;
import net.minestom.server.event.player.PlayerUseItemEvent;
import net.minestom.server.event.player.PlayerUseItemOnBlockEvent;
import net.minestom.server.instance.Instance;
import net.minestom.server.instance.InstanceContainer;
import net.minestom.server.instance.block.Block;
import net.minestom.server.item.ItemStack;
import java.io.IOException;
import java.nio.file.Files;
@@ -54,7 +52,7 @@ public class EndlessJumper {
Player p = event.getPlayer();
p.setCanPickupItem(true);
ScoreTab.join(p);
Jokers.giveStart(p);
Jokers.clear(p);
// sobald der Spieler in der Welt steht, geht es los
games.put(p, new JumpGenerator(START, Progress.checkpoint(p.getUuid()), p, p.getInstance()));
});
@@ -70,9 +68,13 @@ public class EndlessJumper {
eventHandler.addListener(ItemDropEvent.class, event -> event.setCancelled(true));
eventHandler.addListener(PlayerSwapItemEvent.class, event -> event.setCancelled(true));
// Rechtsklick auf Luft und auf Blöcke: useBridge() baut beim zweiten Event nichts doppelt
eventHandler.addListener(PlayerUseItemEvent.class, event -> useJoker(event.getPlayer(), event.getItemStack()));
eventHandler.addListener(PlayerUseItemOnBlockEvent.class, event -> useJoker(event.getPlayer(), event.getItemStack()));
// der Client meldet Rechtsklicks auch auf Blöcke als Item-Nutzung, solange der Block sie nicht
// selbst verarbeitet (auf der Strecke nie) – ein Event genügt, Joker werden nicht doppelt verbraucht
eventHandler.addListener(PlayerUseItemEvent.class, event -> {
JumpGenerator generator = games.get(event.getPlayer());
Jokers joker = Jokers.of(event.getItemStack());
if(generator != null && joker != null && generator.useJoker(joker)) joker.take(event.getPlayer());
});
eventHandler.addListener(PickupItemEvent.class, event -> {
Jokers joker = Jokers.of(event.getItemStack());
@@ -119,17 +121,12 @@ public class EndlessJumper {
InstanceContainer world = createWorld();
player.setVelocity(Vec.ZERO);
player.setInstance(world, SPAWN).thenRun(() -> {
Jokers.giveStart(player);
Jokers.clear(player);
games.put(player, new JumpGenerator(START, 0, player, world));
releaseLater(oldWorld);
});
}
private static void useJoker(Player player, ItemStack item) {
JumpGenerator generator = games.get(player);
if(generator != null && Jokers.BRIDGE.matches(item) && generator.useBridge()) Jokers.BRIDGE.take(player);
}
// Wie bei Velocity: Secret aus forwarding.secret im Arbeitsverzeichnis, alternativ per Umgebungsvariable
private static String readForwardingSecret() throws IOException {
String fromEnv = System.getenv("VELOCITY_FORWARDING_SECRET");