Skip to content

Commit 5ad398f

Browse files
committed
Fix fabric and probably forge,neoforge throwing an NPE when a player joins. Fixes: #761
1 parent ed46ee6 commit 5ad398f

File tree

6 files changed

+23
-15
lines changed

6 files changed

+23
-15
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,15 +77,15 @@ public boolean hasPermission(String permission) {
7777
public Optional<Vector3d> getPosition() {
7878
if (!delegate.isExecutedByPlayer() && delegate.getName().equals("Server")) return Optional.empty();
7979

80-
Vec3d pos = delegate.getPosition();
81-
return Optional.of(new Vector3d(pos.x, pos.y, pos.z));
80+
return Optional.ofNullable(delegate.getPosition())
81+
.map(pos -> new Vector3d(pos.x, pos.y, pos.z));
8282
}
8383

8484
@Override
8585
public Optional<ServerWorld> getWorld() {
8686
if (!delegate.isExecutedByPlayer() && delegate.getName().equals("Server")) return Optional.empty();
8787

88-
return Optional.of(delegate.getWorld())
88+
return Optional.ofNullable(delegate.getWorld())
8989
.map(mod::getServerWorld);
9090
}
9191

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,17 @@ public boolean hasPermission(String permission) {
6868
public Optional<Vector3d> getPosition() {
6969
if (!delegate.isPlayer() && delegate.getTextName().equals("Server")) return Optional.empty();
7070

71-
var pos = delegate.getPosition();
72-
return Optional.of(new Vector3d(pos.x, pos.y, pos.z));
71+
//noinspection OptionalOfNullableMisuse
72+
return Optional.ofNullable(delegate.getPosition())
73+
.map(pos -> new Vector3d(pos.x, pos.y, pos.z));
7374
}
7475

7576
@Override
7677
public Optional<ServerWorld> getWorld() {
7778
if (!delegate.isPlayer() && delegate.getTextName().equals("Server")) return Optional.empty();
7879

79-
return Optional.of(delegate.getLevel())
80+
//noinspection OptionalOfNullableMisuse
81+
return Optional.ofNullable(delegate.getLevel())
8082
.map(mod::getServerWorld);
8183
}
8284

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,17 @@ public boolean hasPermission(String permission) {
6969
public Optional<Vector3d> getPosition() {
7070
if (!delegate.isPlayer() && delegate.getTextName().equals("Server")) return Optional.empty();
7171

72-
var pos = delegate.getPosition();
73-
return Optional.of(new Vector3d(pos.x, pos.y, pos.z));
72+
//noinspection OptionalOfNullableMisuse
73+
return Optional.ofNullable(delegate.getPosition())
74+
.map(pos -> new Vector3d(pos.x, pos.y, pos.z));
7475
}
7576

7677
@Override
7778
public Optional<ServerWorld> getWorld() {
7879
if (!delegate.isPlayer() && delegate.getTextName().equals("Server")) return Optional.empty();
7980

80-
return Optional.of(delegate.getLevel())
81+
//noinspection OptionalOfNullableMisuse
82+
return Optional.ofNullable(delegate.getLevel())
8183
.map(mod::getServerWorld);
8284
}
8385

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.flowpowered.math.vector.Vector3d;
2828
import de.bluecolored.bluemap.common.serverinterface.CommandSource;
2929
import de.bluecolored.bluemap.common.serverinterface.ServerWorld;
30+
import de.bluecolored.bluemap.core.logger.Logger;
3031
import io.papermc.paper.command.brigadier.CommandSourceStack;
3132
import net.kyori.adventure.text.Component;
3233
import org.bukkit.Location;

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
import com.destroystokyo.paper.event.player.PlayerPostRespawnEvent;
2828
import com.github.benmanes.caffeine.cache.LoadingCache;
29+
import com.mojang.brigadier.tree.LiteralCommandNode;
2930
import de.bluecolored.bluecommands.brigadier.BrigadierBridge;
3031
import de.bluecolored.bluemap.common.commands.BrigadierExecutionHandler;
3132
import de.bluecolored.bluemap.common.commands.Commands;
@@ -39,6 +40,7 @@
3940
import de.bluecolored.bluemap.core.util.Caches;
4041
import de.bluecolored.bluemap.core.util.Key;
4142
import io.papermc.paper.ServerBuildInfo;
43+
import io.papermc.paper.command.brigadier.CommandSourceStack;
4244
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
4345
import io.papermc.paper.threadedregions.scheduler.ScheduledTask;
4446
import org.bstats.bukkit.Metrics;
@@ -109,12 +111,17 @@ public void onEnable() {
109111
//noinspection UnstableApiUsage
110112
this.getLifecycleManager().registerEventHandler(LifecycleEvents.COMMANDS, commands -> {
111113

112-
//noinspection UnstableApiUsage
113114
BrigadierBridge.createCommandNodes(
114115
Commands.create(pluginInstance),
115116
new BrigadierExecutionHandler(pluginInstance),
116117
BukkitCommandSource::new
117-
).forEach(commands.registrar().getDispatcher().getRoot()::addChild);
118+
).forEach(command -> {
119+
//noinspection UnstableApiUsage
120+
if (command instanceof LiteralCommandNode<CommandSourceStack> literal) {
121+
//noinspection UnstableApiUsage
122+
commands.registrar().register(literal);
123+
}
124+
});
118125

119126
});
120127

implementations/sponge/src/main/java/de/bluecolored/bluemap/sponge/SpongeCommands.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,6 @@ public List<CommandCompletion> complete(CommandCause cause, ArgumentReader.Mutab
102102
String input = label + " " + arguments.input();
103103
int position = input.lastIndexOf(' ') + 1;
104104

105-
//noinspection resource
106-
InputReader inputReader = new InputReader(input);
107-
inputReader.setPosition(position);
108-
109105
SpongeCommandSource context = new SpongeCommandSource(cause.audience(), cause.subject());
110106
ParseResult<CommandSource, Object> result = commands.parse(context, input);
111107

0 commit comments

Comments
 (0)