From 77f72db798f7dbcff6eedbb83be0cb6a20ccb62d Mon Sep 17 00:00:00 2001 From: Cat Core Date: Wed, 12 Aug 2020 12:07:53 +0200 Subject: [PATCH] Fix more possible NPE --- gradle.properties | 2 +- .../fr/catcore/deacoudre/game/DeACoudreActive.java | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 9339170..66a8792 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ minecraft_version=1.16.1 yarn_mappings=1.16.1+build.21 loader_version=0.9.0+build.204 # Mod Properties -mod_version=1.1.4 +mod_version=1.1.5 maven_group=fr.catcore archives_base_name=deacoudre # Dependencies diff --git a/src/main/java/fr/catcore/deacoudre/game/DeACoudreActive.java b/src/main/java/fr/catcore/deacoudre/game/DeACoudreActive.java index 7da11f6..1f76d11 100644 --- a/src/main/java/fr/catcore/deacoudre/game/DeACoudreActive.java +++ b/src/main/java/fr/catcore/deacoudre/game/DeACoudreActive.java @@ -101,6 +101,7 @@ public static void open(GameWorld gameWorld, DeACoudreMap map, DeACoudreConfig c builder.on(OfferPlayerListener.EVENT, player -> JoinResult.ok()); builder.on(PlayerAddListener.EVENT, active::addPlayer); + builder.on(PlayerRemoveListener.EVENT, active::eliminatePlayer); builder.on(GameTickListener.EVENT, active::tick); @@ -165,10 +166,16 @@ private void eliminatePlayer(ServerPlayerEntity player) { this.spawnSpectator(player); PlayerRef eliminated = PlayerRef.of(player); - this.nextJumper = nextPlayer(true); + for (PlayerRef playerRef : this.participants) { + if (playerRef == eliminated) { + eliminated = playerRef; + break; + } + } this.participants.remove(eliminated); this.lifeMap.remove(eliminated); this.blockStateMap.remove(eliminated); + this.nextJumper = nextPlayer(true); } private void broadcastMessage(Text message) { @@ -188,6 +195,10 @@ private void spawnSpectator(ServerPlayerEntity player) { } private void tick() { + if (this.nextJumper == null) { + this.nextJumper = nextPlayer(true); + return; + } this.ticks++; this.updateExperienceBar(); this.scoreboard.tick(); @@ -328,6 +339,7 @@ public PlayerRef nextPlayer(boolean newTurn) { } if (next == this.nextJumper && !this.ignoreWinState) { DeACoudre.LOGGER.warn("next is equals to nextJumper, something might be wrong!"); + return null; } return next; }