Skip to content

Commit e6e5e78

Browse files
committed
Fix posibiility of aquireing an uninitialized player object
1 parent 2a93804 commit e6e5e78

File tree

15 files changed

+84
-54
lines changed

15 files changed

+84
-54
lines changed

implementations/fabric/src/main/java/de/bluecolored/bluemap/fabric/FabricMod.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ public Optional<ServerWorld> getServerWorld(Object world) {
182182
}
183183

184184
public ServerWorld getServerWorld(net.minecraft.server.world.ServerWorld serverWorld) {
185-
return worlds.get(serverWorld);
185+
return worlds.get(Objects.requireNonNull(serverWorld));
186186
}
187187

188188
@Override

implementations/fabric/src/main/java/de/bluecolored/bluemap/fabric/FabricPlayer.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public void update() {
134134
update(player);
135135
}
136136

137-
public void update(ServerPlayerEntity player) {
137+
private void update(ServerPlayerEntity player) {
138138
this.gamemode = GAMEMODE_MAP.get(player.interactionManager.getGameMode());
139139
if (this.gamemode == null) this.gamemode = Gamemode.SURVIVAL;
140140

@@ -148,10 +148,12 @@ public void update(ServerPlayerEntity player) {
148148
this.rotation = new Vector3d(player.getPitch(), player.getHeadYaw(), 0);
149149
this.sneaking = player.isSneaking();
150150

151-
this.skyLight = player.getWorld().getLightingProvider().get(LightType.SKY).getLightLevel(player.getBlockPos());
152-
this.blockLight = player.getWorld().getLightingProvider().get(LightType.BLOCK).getLightLevel(player.getBlockPos());
151+
net.minecraft.server.world.ServerWorld world = player.getServerWorld();
153152

154-
this.world = mod.getServerWorld(player.getServerWorld());
153+
this.skyLight = world.getLightingProvider().get(LightType.SKY).getLightLevel(player.getBlockPos());
154+
this.blockLight = world.getLightingProvider().get(LightType.BLOCK).getLightLevel(player.getBlockPos());
155+
156+
this.world = mod.getServerWorld(world);
155157
}
156158

157159
}

implementations/forge/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ public Optional<ServerWorld> getServerWorld(Object world) {
196196
}
197197

198198
public ServerWorld getServerWorld(ServerLevel world) {
199-
return worlds.get(world);
199+
return worlds.get(Objects.requireNonNull(world));
200200
}
201201

202202
@Override
@@ -211,10 +211,9 @@ public Optional<Path> getModsFolder() {
211211

212212
@SubscribeEvent
213213
public void onPlayerJoin(PlayerLoggedInEvent evt) {
214-
var playerInstance = evt.getEntity();
215-
if (!(playerInstance instanceof ServerPlayer)) return;
214+
if (!(evt.getEntity() instanceof ServerPlayer serverPlayer)) return;
216215

217-
ForgePlayer player = new ForgePlayer(playerInstance.getUUID(), this);
216+
ForgePlayer player = new ForgePlayer(serverPlayer, this);
218217
onlinePlayerMap.put(player.getUuid(), player);
219218
onlinePlayerList.add(player);
220219
}

implementations/forge/src/main/java/de/bluecolored/bluemap/forge/ForgePlayer.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import de.bluecolored.bluemap.common.serverinterface.ServerWorld;
3232
import net.minecraft.core.BlockPos;
3333
import net.minecraft.server.MinecraftServer;
34+
import net.minecraft.server.level.ServerLevel;
3435
import net.minecraft.server.level.ServerPlayer;
3536
import net.minecraft.world.effect.MobEffectInstance;
3637
import net.minecraft.world.effect.MobEffects;
@@ -65,11 +66,11 @@ public class ForgePlayer extends Player {
6566

6667
private final ForgeMod mod;
6768

68-
public ForgePlayer(UUID playerUuid, ForgeMod mod) {
69-
this.uuid = playerUuid;
69+
public ForgePlayer(ServerPlayer player, ForgeMod mod) {
70+
this.uuid = player.getUUID();
7071
this.mod = mod;
7172

72-
update();
73+
update(player);
7374
}
7475

7576
@Override
@@ -132,6 +133,10 @@ public void update() {
132133
ServerPlayer player = server.getPlayerList().getPlayer(uuid);
133134
if (player == null) return;
134135

136+
update(player);
137+
}
138+
139+
private void update(ServerPlayer player) {
135140
this.gamemode = GAMEMODE_MAP.getOrDefault(player.gameMode.getGameModeForPlayer(), Gamemode.SURVIVAL);
136141
if (this.gamemode == null) this.gamemode = Gamemode.SURVIVAL;
137142

@@ -145,10 +150,12 @@ public void update() {
145150
this.rotation = new Vector3d(player.getXRot(), player.getYHeadRot(), 0);
146151
this.sneaking = player.isCrouching();
147152

148-
this.skyLight = player.level().getChunkSource().getLightEngine().getLayerListener(LightLayer.SKY).getLightValue(new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()));
149-
this.blockLight = player.level().getChunkSource().getLightEngine().getLayerListener(LightLayer.BLOCK).getLightValue(new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()));
153+
ServerLevel world = player.serverLevel();
154+
155+
this.skyLight = world.getChunkSource().getLightEngine().getLayerListener(LightLayer.SKY).getLightValue(new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()));
156+
this.blockLight = world.getChunkSource().getLightEngine().getLayerListener(LightLayer.BLOCK).getLightValue(new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()));
150157

151-
this.world = mod.getServerWorld(player.serverLevel());
158+
this.world = mod.getServerWorld(world);
152159
}
153160

154161
}

implementations/neoforge/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -177,14 +177,14 @@ public Optional<ServerWorld> getServerWorld(Object world) {
177177
} catch (ClassCastException ignored) {}
178178
}
179179

180-
if (world instanceof ServerLevel)
181-
return Optional.of(getServerWorld((ServerLevel) world));
180+
if (world instanceof ServerLevel serverLevel)
181+
return Optional.of(getServerWorld(serverLevel));
182182

183183
return Optional.empty();
184184
}
185185

186186
public ServerWorld getServerWorld(ServerLevel world) {
187-
return worlds.get(world);
187+
return worlds.get(Objects.requireNonNull(world));
188188
}
189189

190190
@Override
@@ -199,19 +199,15 @@ public Optional<Path> getModsFolder() {
199199

200200
@SubscribeEvent
201201
public void onPlayerJoin(PlayerEvent.PlayerLoggedInEvent evt) {
202-
var playerInstance = evt.getEntity();
203-
if (!(playerInstance instanceof ServerPlayer)) return;
204-
205-
ForgePlayer player = new ForgePlayer(playerInstance.getUUID(), this);
202+
if (!(evt.getEntity() instanceof ServerPlayer serverPlayer)) return;
203+
ForgePlayer player = new ForgePlayer(serverPlayer, this);
206204
onlinePlayerMap.put(player.getUuid(), player);
207205
onlinePlayerList.add(player);
208206
}
209207

210208
@SubscribeEvent
211209
public void onPlayerLeave(PlayerEvent.PlayerLoggedOutEvent evt) {
212210
var player = evt.getEntity();
213-
if (!(player instanceof ServerPlayer)) return;
214-
215211
UUID playerUUID = player.getUUID();
216212
onlinePlayerMap.remove(playerUUID);
217213
synchronized (onlinePlayerList) {

implementations/neoforge/src/main/java/de/bluecolored/bluemap/forge/ForgePlayer.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import de.bluecolored.bluemap.common.serverinterface.ServerWorld;
3232
import net.minecraft.core.BlockPos;
3333
import net.minecraft.server.MinecraftServer;
34+
import net.minecraft.server.level.ServerLevel;
3435
import net.minecraft.server.level.ServerPlayer;
3536
import net.minecraft.world.effect.MobEffectInstance;
3637
import net.minecraft.world.effect.MobEffects;
@@ -65,11 +66,11 @@ public class ForgePlayer extends Player {
6566

6667
private final ForgeMod mod;
6768

68-
public ForgePlayer(UUID playerUuid, ForgeMod mod) {
69-
this.uuid = playerUuid;
69+
public ForgePlayer(ServerPlayer player, ForgeMod mod) {
70+
this.uuid = player.getUUID();
7071
this.mod = mod;
7172

72-
update();
73+
update(player);
7374
}
7475

7576
@Override
@@ -132,6 +133,10 @@ public void update() {
132133
ServerPlayer player = server.getPlayerList().getPlayer(uuid);
133134
if (player == null) return;
134135

136+
update(player);
137+
}
138+
139+
private void update(ServerPlayer player) {
135140
this.gamemode = GAMEMODE_MAP.getOrDefault(player.gameMode.getGameModeForPlayer(), Gamemode.SURVIVAL);
136141
if (this.gamemode == null) this.gamemode = Gamemode.SURVIVAL;
137142

@@ -145,10 +150,12 @@ public void update() {
145150
this.rotation = new Vector3d(player.getXRot(), player.getYHeadRot(), 0);
146151
this.sneaking = player.isCrouching();
147152

148-
this.skyLight = player.level().getChunkSource().getLightEngine().getLayerListener(LightLayer.SKY).getLightValue(new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()));
149-
this.blockLight = player.level().getChunkSource().getLightEngine().getLayerListener(LightLayer.BLOCK).getLightValue(new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()));
153+
ServerLevel world = player.serverLevel();
154+
155+
this.skyLight = world.getChunkSource().getLightEngine().getLayerListener(LightLayer.SKY).getLightValue(new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()));
156+
this.blockLight = world.getChunkSource().getLightEngine().getLayerListener(LightLayer.BLOCK).getLightValue(new BlockPos(player.getBlockX(), player.getBlockY(), player.getBlockZ()));
150157

151-
this.world = mod.getServerWorld(player.serverLevel());
158+
this.world = mod.getServerWorld(world);
152159
}
153160

154161
}

implementations/paper/src/main/java/de/bluecolored/bluemap/bukkit/BukkitCommandSource.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import io.papermc.paper.command.brigadier.CommandSourceStack;
3131
import net.kyori.adventure.text.Component;
3232
import org.bukkit.Location;
33+
import org.bukkit.World;
3334
import org.bukkit.command.ConsoleCommandSender;
3435

3536
import java.util.Optional;
@@ -65,8 +66,9 @@ public Optional<Vector3d> getPosition() {
6566
public Optional<ServerWorld> getWorld() {
6667
if (delegate.getSender() instanceof ConsoleCommandSender) return Optional.empty();
6768

68-
ServerWorld serverWorld = BukkitPlugin.getInstance().getServerWorld(delegate.getLocation().getWorld());
69-
return Optional.ofNullable(serverWorld);
69+
World world = delegate.getLocation().getWorld();
70+
if (world == null) return Optional.empty();
71+
return Optional.of(BukkitPlugin.getInstance().getServerWorld(world));
7072
}
7173

7274
}

implementations/paper/src/main/java/de/bluecolored/bluemap/bukkit/BukkitPlayer.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ public class BukkitPlayer extends Player {
6161
private boolean vanished;
6262
private Gamemode gamemode;
6363

64-
public BukkitPlayer(UUID playerUUID) {
65-
this.uuid = playerUUID;
66-
update();
64+
public BukkitPlayer(org.bukkit.entity.Player player) {
65+
this.uuid = player.getUniqueId();
66+
update(player);
6767
}
6868

6969
@Override
@@ -128,6 +128,10 @@ public void update() {
128128
org.bukkit.entity.Player player = Bukkit.getPlayer(uuid);
129129
if (player == null) return;
130130

131+
update(player);
132+
}
133+
134+
private void update(org.bukkit.entity.Player player) {
131135
this.gamemode = GAMEMODE_MAP.get(player.getGameMode());
132136
if (this.gamemode == null) this.gamemode = Gamemode.SURVIVAL;
133137

implementations/paper/src/main/java/de/bluecolored/bluemap/bukkit/BukkitPlugin.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ public Optional<ServerWorld> getServerWorld(Object world) {
201201
}
202202

203203
public ServerWorld getServerWorld(World world) {
204-
return worlds.get(world);
204+
return worlds.get(Objects.requireNonNull(world));
205205
}
206206

207207
@Override
@@ -242,15 +242,15 @@ public Collection<Player> getOnlinePlayers() {
242242
}
243243

244244
private void initPlayer(org.bukkit.entity.Player bukkitPlayer) {
245-
BukkitPlayer player = new BukkitPlayer(bukkitPlayer.getUniqueId());
245+
BukkitPlayer player = new BukkitPlayer(bukkitPlayer);
246246
onlinePlayerMap.put(bukkitPlayer.getUniqueId(), player);
247247
onlinePlayerList.add(player);
248248

249249
// update player every 20 seconds
250250
scheduledTasks.add(
251251
bukkitPlayer.getScheduler().runAtFixedRate(this, task -> {
252252
player.update();
253-
}, () -> {}, 20, 20)
253+
}, null, 20, 20)
254254
);
255255
}
256256

implementations/spigot/src/main/java/de/bluecolored/bluemap/bukkit/BukkitCommandSource.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
3333
import net.md_5.bungee.chat.ComponentSerializer;
3434
import org.bukkit.Location;
35+
import org.bukkit.World;
3536
import org.bukkit.command.BlockCommandSender;
3637
import org.bukkit.command.CommandSender;
3738
import org.bukkit.entity.Entity;
@@ -75,8 +76,9 @@ public Optional<ServerWorld> getWorld() {
7576
Location location = getLocation();
7677

7778
if (location != null) {
78-
ServerWorld serverWorld = BukkitPlugin.getInstance().getServerWorld(location.getWorld());
79-
return Optional.ofNullable(serverWorld);
79+
World world = location.getWorld();
80+
if (world == null) return Optional.empty();
81+
return Optional.of(BukkitPlugin.getInstance().getServerWorld(world));
8082
}
8183

8284
return Optional.empty();

0 commit comments

Comments
 (0)