mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2024-11-28 05:35:44 +01:00
Fixed NPE on portal use when there is no Nether world
https://github.com/BentoBoxWorld/bentobox/issues/365
This commit is contained in:
parent
a1076dfc3f
commit
33c374c52d
@ -110,6 +110,7 @@ public class NetherPortals implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
World overWorld = Util.getWorld(e.getFrom().getWorld());
|
World overWorld = Util.getWorld(e.getFrom().getWorld());
|
||||||
|
|
||||||
// If entering a portal in the end, teleport home if you have one, else do nothing
|
// If entering a portal in the end, teleport home if you have one, else do nothing
|
||||||
if (e.getFrom().getWorld().getEnvironment().equals(Environment.THE_END)) {
|
if (e.getFrom().getWorld().getEnvironment().equals(Environment.THE_END)) {
|
||||||
if (plugin.getIslands().hasIsland(overWorld, e.getPlayer().getUniqueId())) {
|
if (plugin.getIslands().hasIsland(overWorld, e.getPlayer().getUniqueId())) {
|
||||||
@ -194,7 +195,8 @@ public class NetherPortals implements Listener {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
World fromWorld = e.getFrom().getWorld();
|
World fromWorld = e.getFrom().getWorld();
|
||||||
if (!e.getCause().equals(TeleportCause.NETHER_PORTAL) || !plugin.getIWM().inWorld(e.getFrom())) {
|
if (!e.getCause().equals(TeleportCause.NETHER_PORTAL) || !plugin.getIWM().inWorld(e.getFrom())
|
||||||
|
|| !plugin.getIWM().isNetherGenerate(fromWorld)) {
|
||||||
// Do nothing special
|
// Do nothing special
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -163,7 +163,7 @@ public class IslandsManager {
|
|||||||
* @return true if safe, otherwise false
|
* @return true if safe, otherwise false
|
||||||
*/
|
*/
|
||||||
public boolean isSafeLocation(Location l) {
|
public boolean isSafeLocation(Location l) {
|
||||||
if (l == null) {
|
if (l == null || l.getWorld() == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Block ground = l.getBlock().getRelative(BlockFace.DOWN);
|
Block ground = l.getBlock().getRelative(BlockFace.DOWN);
|
||||||
|
@ -88,8 +88,10 @@ public class NetherPortalsTest {
|
|||||||
end = mock(World.class);
|
end = mock(World.class);
|
||||||
when(end.getEnvironment()).thenReturn(Environment.THE_END);
|
when(end.getEnvironment()).thenReturn(Environment.THE_END);
|
||||||
when(iwm.getEndWorld(Mockito.any())).thenReturn(end);
|
when(iwm.getEndWorld(Mockito.any())).thenReturn(end);
|
||||||
|
when(iwm.isEndGenerate(Mockito.any())).thenReturn(true);
|
||||||
when(iwm.getIslandWorld(Mockito.any())).thenReturn(world);
|
when(iwm.getIslandWorld(Mockito.any())).thenReturn(world);
|
||||||
when(iwm.getNetherWorld(Mockito.any())).thenReturn(nether);
|
when(iwm.getNetherWorld(Mockito.any())).thenReturn(nether);
|
||||||
|
when(iwm.isNetherGenerate(Mockito.any())).thenReturn(true);
|
||||||
when(iwm.inWorld(any(World.class))).thenReturn(true);
|
when(iwm.inWorld(any(World.class))).thenReturn(true);
|
||||||
when(iwm.inWorld(any(Location.class))).thenReturn(true);
|
when(iwm.inWorld(any(Location.class))).thenReturn(true);
|
||||||
when(iwm.getNetherSpawnRadius(Mockito.any())).thenReturn(100);
|
when(iwm.getNetherSpawnRadius(Mockito.any())).thenReturn(100);
|
||||||
@ -267,13 +269,47 @@ public class NetherPortalsTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testOnEndIslandPortalNotEnd() {
|
public void testOnEndIslandPortalNotEnd() {
|
||||||
|
Location from = mock(Location.class);
|
||||||
|
// Teleport from world to nether
|
||||||
|
when(from.getWorld()).thenReturn(world);
|
||||||
|
when(from.toVector()).thenReturn(new Vector(1,2,3));
|
||||||
NetherPortals np = new NetherPortals(plugin);
|
NetherPortals np = new NetherPortals(plugin);
|
||||||
// Wrong cause
|
// Wrong cause
|
||||||
PlayerPortalEvent e = new PlayerPortalEvent(null, null, null, null, TeleportCause.CHORUS_FRUIT);
|
PlayerPortalEvent e = new PlayerPortalEvent(null, from, null, null, TeleportCause.CHORUS_FRUIT);
|
||||||
np.onEndIslandPortal(e);
|
np.onEndIslandPortal(e);
|
||||||
assertFalse(e.isCancelled());
|
assertFalse(e.isCancelled());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link world.bentobox.bentobox.listeners.NetherPortals#onEndIslandPortal(org.bukkit.event.player.PlayerPortalEvent)}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testOnEndIslandPortalNoEndWorldGenerated() {
|
||||||
|
Location from = mock(Location.class);
|
||||||
|
// Teleport from world to nether
|
||||||
|
when(from.getWorld()).thenReturn(world);
|
||||||
|
when(from.toVector()).thenReturn(new Vector(1,2,3));
|
||||||
|
// No end world
|
||||||
|
when(iwm.isEndGenerate(Mockito.any())).thenReturn(false);
|
||||||
|
NetherPortals np = new NetherPortals(plugin);
|
||||||
|
PlayerPortalEvent e = new PlayerPortalEvent(null, from, null, null, TeleportCause.END_PORTAL);
|
||||||
|
np.onEndIslandPortal(e);
|
||||||
|
assertFalse(e.isCancelled());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link world.bentobox.bentobox.listeners.NetherPortals#onEndIslandPortal(org.bukkit.event.player.PlayerPortalEvent)}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testOnNetherIslandPortalNoNetherWorldGenerated() {
|
||||||
|
// No nether world
|
||||||
|
when(iwm.isNetherGenerate(Mockito.any())).thenReturn(false);
|
||||||
|
NetherPortals np = new NetherPortals(plugin);
|
||||||
|
PlayerPortalEvent e = new PlayerPortalEvent(null, null, null, null, TeleportCause.NETHER_PORTAL);
|
||||||
|
np.onNetherPortal(e);
|
||||||
|
assertFalse(e.isCancelled());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test method for {@link world.bentobox.bentobox.listeners.NetherPortals#onEndIslandPortal(org.bukkit.event.player.PlayerPortalEvent)}.
|
* Test method for {@link world.bentobox.bentobox.listeners.NetherPortals#onEndIslandPortal(org.bukkit.event.player.PlayerPortalEvent)}.
|
||||||
*/
|
*/
|
||||||
|
@ -136,6 +136,7 @@ public class IslandsManagerTest {
|
|||||||
ground = mock(Block.class);
|
ground = mock(Block.class);
|
||||||
space2 = mock(Block.class);
|
space2 = mock(Block.class);
|
||||||
when(location.getBlock()).thenReturn(space1);
|
when(location.getBlock()).thenReturn(space1);
|
||||||
|
when(location.getWorld()).thenReturn(world);
|
||||||
when(space1.getRelative(BlockFace.DOWN)).thenReturn(ground);
|
when(space1.getRelative(BlockFace.DOWN)).thenReturn(ground);
|
||||||
when(space1.getRelative(BlockFace.UP)).thenReturn(space2);
|
when(space1.getRelative(BlockFace.UP)).thenReturn(space2);
|
||||||
// A safe spot
|
// A safe spot
|
||||||
@ -194,6 +195,16 @@ public class IslandsManagerTest {
|
|||||||
assertFalse(manager.isSafeLocation(null));
|
assertFalse(manager.isSafeLocation(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link world.bentobox.bentobox.managers.IslandsManager#isSafeLocation(org.bukkit.Location)}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testIsSafeLocationNullWorld() {
|
||||||
|
when(location.getWorld()).thenReturn(null);
|
||||||
|
IslandsManager manager = new IslandsManager(plugin);
|
||||||
|
assertFalse(manager.isSafeLocation(location));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test method for {@link world.bentobox.bentobox.managers.IslandsManager#isSafeLocation(org.bukkit.Location)}.
|
* Test method for {@link world.bentobox.bentobox.managers.IslandsManager#isSafeLocation(org.bukkit.Location)}.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user