mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2025-02-11 01:41:51 +01:00
Handles null player world better on joining server
In theory, this should not be required, but it seems that a player's world might be null in some edge cases. Alternatively, the Util.getWorld function can return a null if the player was in a nether or end but that does not have a corresponding overworld. Addresses #2057
This commit is contained in:
parent
7aa1e2da89
commit
69fa951907
@ -16,6 +16,7 @@ import org.bukkit.event.player.PlayerChangedWorldEvent;
|
|||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.eclipse.jdt.annotation.NonNull;
|
import org.eclipse.jdt.annotation.NonNull;
|
||||||
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
|
|
||||||
import world.bentobox.bentobox.BentoBox;
|
import world.bentobox.bentobox.BentoBox;
|
||||||
import world.bentobox.bentobox.api.addons.GameModeAddon;
|
import world.bentobox.bentobox.api.addons.GameModeAddon;
|
||||||
@ -142,7 +143,7 @@ public class JoinLeaveListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This event will clean players inventor
|
* This event will clean players inventory
|
||||||
* @param event SwitchWorld event.
|
* @param event SwitchWorld event.
|
||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
@ -161,8 +162,8 @@ public class JoinLeaveListener implements Listener {
|
|||||||
* @param world World where cleaning must occur.
|
* @param world World where cleaning must occur.
|
||||||
* @param user Targeted user.
|
* @param user Targeted user.
|
||||||
*/
|
*/
|
||||||
private void clearPlayersInventory(World world, @NonNull User user) {
|
private void clearPlayersInventory(@Nullable World world, @NonNull User user) {
|
||||||
if (user.getUniqueId() == null) return;
|
if (user.getUniqueId() == null || world == null) return;
|
||||||
// Clear inventory if required
|
// Clear inventory if required
|
||||||
Players playerData = players.getPlayer(user.getUniqueId());
|
Players playerData = players.getPlayer(user.getUniqueId());
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package world.bentobox.bentobox.listeners;
|
package world.bentobox.bentobox.listeners;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyString;
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
@ -235,6 +236,29 @@ public class JoinLeaveListenerTest {
|
|||||||
verify(player, never()).sendMessage(anyString());
|
verify(player, never()).sendMessage(anyString());
|
||||||
// Verify resets
|
// Verify resets
|
||||||
verify(pm).setResets(eq(world), any(), eq(0));
|
verify(pm).setResets(eq(world), any(), eq(0));
|
||||||
|
// Verify inventory clear because of kick
|
||||||
|
// Check inventory cleared
|
||||||
|
verify(chest).clear();
|
||||||
|
verify(inv).clear();
|
||||||
|
assertTrue(set.isEmpty());
|
||||||
|
verify(pm, times(2)).save(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link world.bentobox.bentobox.listeners.JoinLeaveListener#onPlayerJoin(org.bukkit.event.player.PlayerJoinEvent)}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testOnPlayerJoinNullWorld() {
|
||||||
|
when(player.getWorld()).thenReturn(null); // Null
|
||||||
|
when(Util.getWorld(any())).thenReturn(null); // Make null
|
||||||
|
PlayerJoinEvent event = new PlayerJoinEvent(player, "");
|
||||||
|
jll.onPlayerJoin(event);
|
||||||
|
// Verify inventory clear because of kick
|
||||||
|
// Check inventory cleared
|
||||||
|
verify(chest, never()).clear();
|
||||||
|
verify(inv, never()).clear();
|
||||||
|
assertFalse(set.isEmpty());
|
||||||
|
verify(pm).save(any());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -334,13 +358,29 @@ public class JoinLeaveListenerTest {
|
|||||||
public void testOnPlayerSwitchWorld() {
|
public void testOnPlayerSwitchWorld() {
|
||||||
PlayerChangedWorldEvent event = new PlayerChangedWorldEvent(player, world);
|
PlayerChangedWorldEvent event = new PlayerChangedWorldEvent(player, world);
|
||||||
jll.onPlayerSwitchWorld(event);
|
jll.onPlayerSwitchWorld(event);
|
||||||
// Player was kicked so check
|
// Check inventory cleared
|
||||||
verify(chest).clear();
|
verify(chest).clear();
|
||||||
verify(inv).clear();
|
verify(inv).clear();
|
||||||
assertTrue(set.isEmpty());
|
assertTrue(set.isEmpty());
|
||||||
verify(pm).save(any());
|
verify(pm).save(any());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link world.bentobox.bentobox.listeners.JoinLeaveListener#onPlayerSwitchWorld(org.bukkit.event.player.PlayerChangedWorldEvent)}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testOnPlayerSwitchWorldNullWorld() {
|
||||||
|
when(Util.getWorld(any())).thenReturn(null);
|
||||||
|
PlayerChangedWorldEvent event = new PlayerChangedWorldEvent(player, world);
|
||||||
|
jll.onPlayerSwitchWorld(event);
|
||||||
|
// These should not happen
|
||||||
|
verify(chest, never()).clear();
|
||||||
|
verify(inv, never()).clear();
|
||||||
|
assertFalse(set.isEmpty());
|
||||||
|
verify(pm, never()).save(any());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test method for {@link world.bentobox.bentobox.listeners.JoinLeaveListener#onPlayerQuit(org.bukkit.event.player.PlayerQuitEvent)}.
|
* Test method for {@link world.bentobox.bentobox.listeners.JoinLeaveListener#onPlayerQuit(org.bukkit.event.player.PlayerQuitEvent)}.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user