use Location's World

This commit is contained in:
Kermina Awad 2020-07-09 09:48:40 -04:00
parent 3afca50930
commit 6882660286
3 changed files with 11 additions and 54 deletions

View File

@ -28,7 +28,6 @@ import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.World.Environment; import org.bukkit.World.Environment;
import org.bukkit.WorldType; import org.bukkit.WorldType;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.serialization.SerializableAs; import org.bukkit.configuration.serialization.SerializableAs;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.permissions.Permission; import org.bukkit.permissions.Permission;
@ -346,7 +345,7 @@ public class MVWorld implements MultiverseWorld {
@SerializableAs("MVNullLocation (It's a bug if you see this in your config file)") @SerializableAs("MVNullLocation (It's a bug if you see this in your config file)")
public static final class NullLocation extends SpawnLocation { public static final class NullLocation extends SpawnLocation {
public NullLocation() { public NullLocation() {
super(0, -1, 0); super(null, 0, -1, 0);
} }
@Override @Override

View File

@ -1,14 +1,10 @@
package com.onarandombox.MultiverseCore.configuration; package com.onarandombox.MultiverseCore.configuration;
import java.lang.ref.Reference;
import java.lang.ref.WeakReference;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.bukkit.Chunk;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.configuration.serialization.ConfigurationSerializable; import org.bukkit.configuration.serialization.ConfigurationSerializable;
import org.bukkit.configuration.serialization.SerializableAs; import org.bukkit.configuration.serialization.SerializableAs;
@ -18,54 +14,16 @@ import org.bukkit.configuration.serialization.SerializableAs;
*/ */
@SerializableAs("MVSpawnLocation") @SerializableAs("MVSpawnLocation")
public class SpawnLocation extends Location implements ConfigurationSerializable { public class SpawnLocation extends Location implements ConfigurationSerializable {
private Reference<World> worldRef; public SpawnLocation(World world, double x, double y, double z) {
super(world, x, y, z);
public SpawnLocation(double x, double y, double z) {
super(null, x, y, z);
} }
public SpawnLocation(double x, double y, double z, float yaw, float pitch) { public SpawnLocation(World world, double x, double y, double z, float yaw, float pitch) {
super(null, x, y, z, yaw, pitch); super(world, x, y, z, yaw, pitch);
} }
public SpawnLocation(Location loc) { public SpawnLocation(Location loc) {
this(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch()); super(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
}
/**
* {@inheritDoc}
*/
@Override
public World getWorld() {
return (this.worldRef != null) ? this.worldRef.get() : null;
}
/**
* {@inheritDoc}
*/
@Override
public void setWorld(World world) {
this.worldRef = new WeakReference<World>(world);
}
/**
* {@inheritDoc}
*/
@Override
public Chunk getChunk() {
if ((this.worldRef != null) && (this.worldRef.get() != null))
return this.worldRef.get().getChunkAt(this);
return null;
}
/**
* {@inheritDoc}
*/
@Override
public Block getBlock() {
if ((this.worldRef != null) && (this.worldRef.get() != null))
return this.worldRef.get().getBlockAt(this);
return null;
} }
/** /**
@ -93,6 +51,6 @@ public class SpawnLocation extends Location implements ConfigurationSerializable
double z = ((Number) args.get("z")).doubleValue(); double z = ((Number) args.get("z")).doubleValue();
float pitch = ((Number) args.get("pitch")).floatValue(); float pitch = ((Number) args.get("pitch")).floatValue();
float yaw = ((Number) args.get("yaw")).floatValue(); float yaw = ((Number) args.get("yaw")).floatValue();
return new SpawnLocation(x, y, z, yaw, pitch); return new SpawnLocation(null, x, y, z, yaw, pitch);
} }
} }

View File

@ -166,7 +166,7 @@ public class TestWorldProperties {
assertTrue(mvWorld.isKeepingSpawnInMemory()); assertTrue(mvWorld.isKeepingSpawnInMemory());
assertTrue(mvWorld.getBedRespawn()); assertTrue(mvWorld.getBedRespawn());
assertTrue(mvWorld.getAutoLoad()); assertTrue(mvWorld.getAutoLoad());
assertEquals(new SpawnLocation(0, 64, 0), mvWorld.getSpawnLocation()); assertEquals(new SpawnLocation(core.getServer().getWorld("world"), 0, 64, 0), mvWorld.getSpawnLocation());
/* ****************************************** * /* ****************************************** *
* Call some events and verify behavior * Call some events and verify behavior
@ -258,7 +258,7 @@ public class TestWorldProperties {
mvWorld.setAutoLoad(false); mvWorld.setAutoLoad(false);
assertEquals(false, mvWorld.getAutoLoad()); assertEquals(false, mvWorld.getAutoLoad());
mvWorld.setSpawnLocation(new Location(mvWorld.getCBWorld(), 1, 1, 1)); mvWorld.setSpawnLocation(new Location(mvWorld.getCBWorld(), 1, 1, 1));
assertEquals(new SpawnLocation(1, 1, 1), mvWorld.getSpawnLocation()); assertEquals(new SpawnLocation(core.getServer().getWorld("world"), 1, 1, 1), mvWorld.getSpawnLocation());
/* ****************************************** * /* ****************************************** *
@ -297,7 +297,7 @@ public class TestWorldProperties {
core.getPlayerListener().playerJoin(playerJoinEvent); core.getPlayerListener().playerJoin(playerJoinEvent);
verify(mockPlayer, never()).teleport(any(Location.class)); verify(mockPlayer, never()).teleport(any(Location.class));
core.getPlayerListener().playerJoin(playerNewJoinEvent); core.getPlayerListener().playerJoin(playerNewJoinEvent);
verify(mockNewPlayer).teleport(new SpawnLocation(1, 1, 1)); verify(mockNewPlayer).teleport(new SpawnLocation(core.getServer().getWorld("world"), 1, 1, 1));
// call player respawn events // call player respawn events
core.getPlayerListener().playerRespawn(playerRespawnBed); core.getPlayerListener().playerRespawn(playerRespawnBed);
@ -347,7 +347,7 @@ public class TestWorldProperties {
assertEquals(false, mvWorld.isKeepingSpawnInMemory()); assertEquals(false, mvWorld.isKeepingSpawnInMemory());
assertEquals(false, mvWorld.getBedRespawn()); assertEquals(false, mvWorld.getBedRespawn());
assertEquals(false, mvWorld.getAutoLoad()); assertEquals(false, mvWorld.getAutoLoad());
assertEquals(new SpawnLocation(1, 1, 1), mvWorld.getSpawnLocation()); assertEquals(new SpawnLocation(core.getServer().getWorld("world"), 1, 1, 1), mvWorld.getSpawnLocation());
} }
public void createEvents(MultiverseWorld mvWorld) { public void createEvents(MultiverseWorld mvWorld) {