package net.pivipi; import net.minestom.server.coordinate.Pos; import net.minestom.server.entity.GameMode; import net.minestom.server.entity.Player; import net.minestom.server.entity.attribute.Attribute; import net.minestom.server.event.GlobalEventHandler; import net.minestom.server.event.player.AsyncPlayerConfigurationEvent; import net.minestom.server.event.player.PlayerDisconnectEvent; import net.minestom.server.event.player.PlayerSpawnEvent; import net.minestom.server.instance.Instance; import net.pivipi.ball.Ball; import net.pivipi.ball.BallKicker; import net.pivipi.world.Stadium; public class LoginHandler { private final Instance spawningInstance; private final Stadium stadium = new Stadium(); public LoginHandler(Instance spawningInstance) { this.spawningInstance = spawningInstance; } public void setup(GlobalEventHandler globalEventHandler) { globalEventHandler.addListener(AsyncPlayerConfigurationEvent.class, event -> onLogin(event)); globalEventHandler.addListener(PlayerDisconnectEvent.class, event -> onQuit(event)); globalEventHandler.addListener(PlayerSpawnEvent.class, event -> onSpawn(event)); new BallKicker(stadium).setup(globalEventHandler); } private void onLogin(AsyncPlayerConfigurationEvent event) { Player player = event.getPlayer(); event.setSpawningInstance(spawningInstance); event.setHardcore(true); player.setRespawnPoint(new Pos(5, 5, 0)); stadium.players.add(player); } private void onQuit(PlayerDisconnectEvent event) { stadium.players.remove(event.getPlayer()); } private void onSpawn(PlayerSpawnEvent event) { Player player = event.getPlayer(); player.setGameMode(GameMode.CREATIVE); player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).setBaseValue(0.2); player.getAttribute(Attribute.GENERIC_JUMP_STRENGTH).setBaseValue(0.36813); // just enough to jump a block if (stadium.ball == null) { Ball ball = new Ball(stadium); ball.setInstance(event.getInstance()); ball.teleport(new Pos(0, 15, 0)); stadium.ball = ball; } } }