Add bridge and rescue totem jokers and fix dark block displays during the transition

This commit is contained in:
MineTec committed 2026-10-08 00:17:00 +02:00
1 parent f56a3765c6
commit ef1662b144
4 files changed
+272 -28

No files matched your search

@@ -7,11 +7,17 @@ import net.minestom.server.coordinate.Pos;
import net.minestom.server.entity.Player;
import net.minestom.server.entity.PlayerSkin;
import net.minestom.server.event.GlobalEventHandler;
import net.minestom.server.event.item.ItemDropEvent;
import net.minestom.server.event.player.AsyncPlayerConfigurationEvent;
import net.minestom.server.event.player.PlayerBlockBreakEvent;
import net.minestom.server.event.player.PlayerBlockPlaceEvent;
import net.minestom.server.event.player.PlayerDisconnectEvent;
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.item.ItemStack;
import net.minestom.server.instance.InstanceContainer;
import net.minestom.server.instance.InstanceManager;
import net.minestom.server.instance.block.Block;
@@ -21,6 +27,7 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
public class EndlessJumper {
public static void main(String[] args) throws IOException {
@@ -65,8 +72,7 @@ public class EndlessJumper {
JumpGenerator generator = games.get(p);
//reset when falling down
if(p.getPosition().y() < generator.getNextLanding().y()-5 && p.getPosition().y() < generator.getCheckpoint().y()) generator.reset();
generator.checkFall();
Pos p1 = BlockMath.roundToBlock(event.getNewPosition().sub(0.0,1.0,0.0));
Pos p2 = BlockMath.roundToBlock(event.getNewPosition().sub(0.0, 2.0, 0.0));
@@ -81,14 +87,37 @@ public class EndlessJumper {
//if(p.getPosition().z() > target.z()+2) generator.highlight();
});
eventHandler.addListener(PlayerBlockBreakEvent.class, event -> event.setCancelled(true));
// nur Brücken- und Rettungsblöcke dürfen abgebaut werden (Notausgang), Sprungblöcke nie
eventHandler.addListener(PlayerBlockBreakEvent.class, event -> {
JumpGenerator generator = games.get(event.getPlayer());
if(generator == null || !generator.isBreakable(new Pos(event.getBlockPosition()))) event.setCancelled(true);
});
eventHandler.addListener(PlayerBlockPlaceEvent.class, event -> event.setCancelled(true));
eventHandler.addListener(ItemDropEvent.class, event -> event.setCancelled(true));
eventHandler.addListener(PlayerSwapItemEvent.class, event -> event.setCancelled(true));
// Rechtsklick auf Luft und auf Blöcke lösen beide aus; kurze Sperre gegen doppelte Nutzung
Map<Player, Long> lastJokerUse = new HashMap<>();
java.util.function.BiConsumer<Player, ItemStack> useJoker = (p, item) -> {
JumpGenerator generator = games.get(p);
if(generator == null || !Jokers.isBridge(item)) return;
long now = System.currentTimeMillis();
if(now - lastJokerUse.getOrDefault(p, 0L) < 500) return;
lastJokerUse.put(p, now);
if(generator.useBridge()) Jokers.takeBridge(p);
};
eventHandler.addListener(PlayerUseItemEvent.class, event -> useJoker.accept(event.getPlayer(), event.getItemStack()));
eventHandler.addListener(PlayerUseItemOnBlockEvent.class, event -> useJoker.accept(event.getPlayer(), event.getItemStack()));
eventHandler.addListener(PlayerSpawnEvent.class, event -> {
if(event.isFirstSpawn()) ScoreTab.join(event.getPlayer());
if(!event.isFirstSpawn()) return;
ScoreTab.join(event.getPlayer());
Jokers.giveStart(event.getPlayer());
});
eventHandler.addListener(PlayerDisconnectEvent.class, event -> {
games.remove(event.getPlayer());
lastJokerUse.remove(event.getPlayer());
ScoreTab.leave(event.getPlayer());
});