Dont cache the player-object.

Tentative fix for #76
This commit is contained in:
Blue (Lukas Rieger) 2020-08-30 14:27:34 +02:00
parent 591e105c05
commit 93dae9648f
16 changed files with 89 additions and 143 deletions

View File

@ -171,7 +171,7 @@ public File getConfigFolder() {
public void onPlayerJoin(MinecraftServer server, ServerPlayerEntity playerInstance) {
if (this.serverInstance != server) return;
FabricPlayer player = new FabricPlayer(this, playerInstance);
FabricPlayer player = new FabricPlayer(this, playerInstance.getUuid());
onlinePlayerMap.put(player.getUuid(), player);
onlinePlayerList.add(player);
}

View File

@ -25,7 +25,6 @@
package de.bluecolored.bluemap.fabric;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.EnumMap;
import java.util.Map;
import java.util.UUID;
@ -65,12 +64,10 @@ public class FabricPlayer implements Player {
private Gamemode gamemode;
private FabricMod mod;
private WeakReference<ServerPlayerEntity> delegate;
public FabricPlayer(FabricMod mod, ServerPlayerEntity delegate) {
this.uuid = delegate.getUuid();
public FabricPlayer(FabricMod mod, UUID playerUuid) {
this.uuid = playerUuid;
this.mod = mod;
this.delegate = new WeakReference<>(delegate);
update();
}
@ -119,19 +116,16 @@ public Gamemode getGamemode() {
* Only call on server thread!
*/
public void update() {
ServerPlayerEntity player = delegate.get();
MinecraftServer server = mod.getServer();
if (server == null) {
this.online = false;
return;
}
ServerPlayerEntity player = server.getPlayerManager().getPlayer(uuid);
if (player == null) {
MinecraftServer server = mod.getServer();
if (server != null) {
player = server.getPlayerManager().getPlayer(uuid);
}
if (player == null) {
this.online = false;
return;
}
delegate = new WeakReference<>(player);
this.online = false;
return;
}
this.gamemode = GAMEMODE_MAP.get(player.interactionManager.getGameMode());

View File

@ -175,8 +175,8 @@ public File getConfigFolder() {
public void onPlayerJoin(MinecraftServer server, ServerPlayerEntity playerInstance) {
if (this.serverInstance != server) return;
FabricPlayer player = new FabricPlayer(this, playerInstance);
FabricPlayer player = new FabricPlayer(this, playerInstance.getUuid());
onlinePlayerMap.put(player.getUuid(), player);
onlinePlayerList.add(player);
}

View File

@ -25,7 +25,6 @@
package de.bluecolored.bluemap.fabric;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.EnumMap;
import java.util.Map;
import java.util.UUID;
@ -65,12 +64,10 @@ public class FabricPlayer implements Player {
private Gamemode gamemode;
private FabricMod mod;
private WeakReference<ServerPlayerEntity> delegate;
public FabricPlayer(FabricMod mod, ServerPlayerEntity delegate) {
this.uuid = delegate.getUuid();
public FabricPlayer(FabricMod mod, UUID playerUuid) {
this.uuid = playerUuid;
this.mod = mod;
this.delegate = new WeakReference<>(delegate);
update();
}
@ -119,19 +116,16 @@ public Gamemode getGamemode() {
* Only call on server thread!
*/
public void update() {
ServerPlayerEntity player = delegate.get();
MinecraftServer server = mod.getServer();
if (server == null) {
this.online = false;
return;
}
ServerPlayerEntity player = server.getPlayerManager().getPlayer(uuid);
if (player == null) {
MinecraftServer server = mod.getServer();
if (server != null) {
player = server.getPlayerManager().getPlayer(uuid);
}
if (player == null) {
this.online = false;
return;
}
delegate = new WeakReference<>(player);
this.online = false;
return;
}
this.gamemode = GAMEMODE_MAP.get(player.interactionManager.getGameMode());

View File

@ -175,8 +175,8 @@ public File getConfigFolder() {
public void onPlayerJoin(MinecraftServer server, ServerPlayerEntity playerInstance) {
if (this.serverInstance != server) return;
FabricPlayer player = new FabricPlayer(this, playerInstance);
FabricPlayer player = new FabricPlayer(this, playerInstance.getUuid());
onlinePlayerMap.put(player.getUuid(), player);
onlinePlayerList.add(player);
}

View File

@ -25,7 +25,6 @@
package de.bluecolored.bluemap.fabric;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.EnumMap;
import java.util.Map;
import java.util.UUID;
@ -65,12 +64,10 @@ public class FabricPlayer implements Player {
private Gamemode gamemode;
private FabricMod mod;
private WeakReference<ServerPlayerEntity> delegate;
public FabricPlayer(FabricMod mod, ServerPlayerEntity delegate) {
this.uuid = delegate.getUuid();
public FabricPlayer(FabricMod mod, UUID playerUuid) {
this.uuid = playerUuid;
this.mod = mod;
this.delegate = new WeakReference<>(delegate);
update();
}
@ -119,19 +116,16 @@ public Gamemode getGamemode() {
* Only call on server thread!
*/
public void update() {
ServerPlayerEntity player = delegate.get();
MinecraftServer server = mod.getServer();
if (server == null) {
this.online = false;
return;
}
ServerPlayerEntity player = server.getPlayerManager().getPlayer(uuid);
if (player == null) {
MinecraftServer server = mod.getServer();
if (server != null) {
player = server.getPlayerManager().getPlayer(uuid);
}
if (player == null) {
this.online = false;
return;
}
delegate = new WeakReference<>(player);
this.online = false;
return;
}
this.gamemode = GAMEMODE_MAP.get(player.interactionManager.getGameMode());

View File

@ -194,7 +194,7 @@ public void onPlayerJoin(PlayerLoggedInEvent evt) {
PlayerEntity playerInstance = evt.getPlayer();
if (!(playerInstance instanceof ServerPlayerEntity)) return;
ForgePlayer player = new ForgePlayer(this, (ServerPlayerEntity) playerInstance);
ForgePlayer player = new ForgePlayer(this, playerInstance.getUniqueID());
onlinePlayerMap.put(player.getUuid(), player);
onlinePlayerList.add(player);
}

View File

@ -25,7 +25,6 @@
package de.bluecolored.bluemap.forge;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.EnumMap;
import java.util.Map;
import java.util.UUID;
@ -65,12 +64,10 @@ public class ForgePlayer implements Player {
private Gamemode gamemode;
private ForgeMod mod;
private WeakReference<ServerPlayerEntity> delegate;
public ForgePlayer(ForgeMod mod, ServerPlayerEntity delegate) {
this.uuid = delegate.getUniqueID();
public ForgePlayer(ForgeMod mod, UUID playerUuid) {
this.uuid = playerUuid;
this.mod = mod;
this.delegate = new WeakReference<>(delegate);
update();
}
@ -119,19 +116,16 @@ public Gamemode getGamemode() {
* Only call on server thread!
*/
public void update() {
ServerPlayerEntity player = delegate.get();
MinecraftServer server = mod.getServer();
if (server == null) {
this.online = false;
return;
}
ServerPlayerEntity player = server.getPlayerList().getPlayerByUUID(uuid);
if (player == null) {
MinecraftServer server = mod.getServer();
if (server != null) {
player = server.getPlayerList().getPlayerByUUID(uuid);
}
if (player == null) {
this.online = false;
return;
}
delegate = new WeakReference<>(player);
this.online = false;
return;
}
this.gamemode = GAMEMODE_MAP.get(player.interactionManager.getGameType());

View File

@ -193,8 +193,8 @@ public File getConfigFolder() {
public void onPlayerJoin(PlayerLoggedInEvent evt) {
PlayerEntity playerInstance = evt.getPlayer();
if (!(playerInstance instanceof ServerPlayerEntity)) return;
ForgePlayer player = new ForgePlayer(this, (ServerPlayerEntity) playerInstance);
ForgePlayer player = new ForgePlayer(this, playerInstance.getUniqueID());
onlinePlayerMap.put(player.getUuid(), player);
onlinePlayerList.add(player);
}

View File

@ -25,7 +25,6 @@
package de.bluecolored.bluemap.forge;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.EnumMap;
import java.util.Map;
import java.util.UUID;
@ -65,12 +64,10 @@ public class ForgePlayer implements Player {
private Gamemode gamemode;
private ForgeMod mod;
private WeakReference<ServerPlayerEntity> delegate;
public ForgePlayer(ForgeMod mod, ServerPlayerEntity delegate) {
this.uuid = delegate.getUniqueID();
public ForgePlayer(ForgeMod mod, UUID playerUuid) {
this.uuid = playerUuid;
this.mod = mod;
this.delegate = new WeakReference<>(delegate);
update();
}
@ -119,19 +116,16 @@ public Gamemode getGamemode() {
* Only call on server thread!
*/
public void update() {
ServerPlayerEntity player = delegate.get();
MinecraftServer server = mod.getServer();
if (server == null) {
this.online = false;
return;
}
ServerPlayerEntity player = server.getPlayerList().getPlayerByUUID(uuid);
if (player == null) {
MinecraftServer server = mod.getServer();
if (server != null) {
player = server.getPlayerList().getPlayerByUUID(uuid);
}
if (player == null) {
this.online = false;
return;
}
delegate = new WeakReference<>(player);
this.online = false;
return;
}
this.gamemode = GAMEMODE_MAP.get(player.interactionManager.getGameType());

View File

@ -191,8 +191,8 @@ public File getConfigFolder() {
public void onPlayerJoin(PlayerLoggedInEvent evt) {
PlayerEntity playerInstance = evt.getPlayer();
if (!(playerInstance instanceof ServerPlayerEntity)) return;
ForgePlayer player = new ForgePlayer(this, (ServerPlayerEntity) playerInstance);
ForgePlayer player = new ForgePlayer(this, playerInstance.getUniqueID());
onlinePlayerMap.put(player.getUuid(), player);
onlinePlayerList.add(player);
}

View File

@ -25,7 +25,6 @@
package de.bluecolored.bluemap.forge;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.EnumMap;
import java.util.Map;
import java.util.UUID;
@ -64,12 +63,10 @@ public class ForgePlayer implements Player {
private Gamemode gamemode;
private ForgeMod mod;
private WeakReference<ServerPlayerEntity> delegate;
public ForgePlayer(ForgeMod mod, ServerPlayerEntity delegate) {
this.uuid = delegate.getUniqueID();
public ForgePlayer(ForgeMod mod, UUID playerUuid) {
this.uuid = playerUuid;
this.mod = mod;
this.delegate = new WeakReference<>(delegate);
update();
}
@ -118,19 +115,16 @@ public Gamemode getGamemode() {
* Only call on server thread!
*/
public void update() {
ServerPlayerEntity player = delegate.get();
MinecraftServer server = mod.getServer();
if (server == null) {
this.online = false;
return;
}
ServerPlayerEntity player = server.getPlayerList().getPlayerByUUID(uuid);
if (player == null) {
MinecraftServer server = mod.getServer();
if (server != null) {
player = server.getPlayerList().getPlayerByUUID(uuid);
}
if (player == null) {
this.online = false;
return;
}
delegate = new WeakReference<>(player);
this.online = false;
return;
}
this.gamemode = GAMEMODE_MAP.get(player.interactionManager.getGameType());

View File

@ -24,7 +24,6 @@
*/
package de.bluecolored.bluemap.bukkit;
import java.lang.ref.WeakReference;
import java.util.EnumMap;
import java.util.Map;
import java.util.UUID;
@ -58,12 +57,9 @@ public class BukkitPlayer implements Player {
private boolean sneaking;
private boolean invisible;
private Gamemode gamemode;
private WeakReference<org.bukkit.entity.Player> delegate;
public BukkitPlayer(org.bukkit.entity.Player delegate) {
this.uuid = delegate.getUniqueId();
this.delegate = new WeakReference<>(delegate);
public BukkitPlayer(UUID playerUUID) {
this.uuid = playerUUID;
update();
}
@ -111,15 +107,10 @@ public Gamemode getGamemode() {
* API access, only call on server thread!
*/
public void update() {
org.bukkit.entity.Player player = delegate.get();
org.bukkit.entity.Player player = Bukkit.getPlayer(uuid);
if (player == null) {
player = Bukkit.getPlayer(uuid);
if (player == null) {
this.online = false;
return;
}
delegate = new WeakReference<>(player);
this.online = false;
return;
}
this.gamemode = GAMEMODE_MAP.get(player.getGameMode());

View File

@ -132,7 +132,7 @@ public void onEnable() {
this.onlinePlayerList.clear();
this.onlinePlayerMap.clear();
for (org.bukkit.entity.Player player : getServer().getOnlinePlayers()) {
BukkitPlayer bukkitPlayer = new BukkitPlayer(player);
BukkitPlayer bukkitPlayer = new BukkitPlayer(player.getUniqueId());
onlinePlayerMap.put(player.getUniqueId(), bukkitPlayer);
onlinePlayerList.add(bukkitPlayer);
}
@ -235,7 +235,7 @@ public static BukkitPlugin getInstance() {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerJoin(PlayerJoinEvent evt) {
BukkitPlayer player = new BukkitPlayer(evt.getPlayer());
BukkitPlayer player = new BukkitPlayer(evt.getPlayer().getUniqueId());
onlinePlayerMap.put(evt.getPlayer().getUniqueId(), player);
onlinePlayerList.add(player);
}

View File

@ -24,7 +24,6 @@
*/
package de.bluecolored.bluemap.sponge;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -63,12 +62,9 @@ public class SpongePlayer implements Player {
private boolean sneaking;
private boolean invisible;
private Gamemode gamemode;
private WeakReference<org.spongepowered.api.entity.living.player.Player> delegate;
public SpongePlayer(org.spongepowered.api.entity.living.player.Player delegate) {
this.uuid = delegate.getUniqueId();
this.delegate = new WeakReference<>(delegate);
public SpongePlayer(UUID playerUUID) {
this.uuid = playerUUID;
update();
}
@ -116,15 +112,10 @@ public Gamemode getGamemode() {
* API access, only call on server thread!
*/
public void update() {
org.spongepowered.api.entity.living.player.Player player = delegate.get();
org.spongepowered.api.entity.living.player.Player player = Sponge.getServer().getPlayer(uuid).orElse(null);
if (player == null) {
player = Sponge.getServer().getPlayer(uuid).orElse(null);
if (player == null) {
this.online = false;
return;
}
delegate = new WeakReference<>(player);
this.online = false;
return;
}
this.gamemode = GAMEMODE_MAP.get(player.get(Keys.GAME_MODE).orElse(GameModes.NOT_SET));

View File

@ -163,7 +163,7 @@ public void onServerReload(GameReloadEvent evt) {
@Listener
public void onPlayerJoin(ClientConnectionEvent.Join evt) {
SpongePlayer player = new SpongePlayer(evt.getTargetEntity());
SpongePlayer player = new SpongePlayer(evt.getTargetEntity().getUniqueId());
onlinePlayerMap.put(evt.getTargetEntity().getUniqueId(), player);
onlinePlayerList.add(player);
}