Skip to content

Commit 3e849d9

Browse files
committed
Cherry-pick fix for #1713
1 parent eceb1fc commit 3e849d9

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

arclight-common/src/main/java/io/izzel/arclight/common/mixin/bukkit/CraftServerMixin.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import com.mojang.brigadier.ParseResults;
44
import com.mojang.brigadier.StringReader;
5+
import com.google.common.collect.Lists;
56
import io.izzel.arclight.common.bridge.bukkit.CraftServerBridge;
67
import io.izzel.arclight.common.bridge.core.world.WorldBridge;
78
import io.izzel.arclight.common.mod.server.ArclightServer;
9+
import io.izzel.arclight.common.bridge.core.entity.player.ServerPlayerEntityBridge;
810
import jline.console.ConsoleReader;
911
import net.minecraft.commands.CommandSourceStack;
1012
import net.minecraft.server.dedicated.DedicatedPlayerList;
@@ -21,6 +23,7 @@
2123
import org.bukkit.craftbukkit.v.command.CraftBlockCommandSender;
2224
import org.bukkit.craftbukkit.v.command.CraftCommandMap;
2325
import org.bukkit.craftbukkit.v.entity.CraftEntity;
26+
import org.bukkit.craftbukkit.v.entity.CraftPlayer;
2427
import org.bukkit.craftbukkit.v.help.SimpleHelpMap;
2528
import org.bukkit.craftbukkit.v.scheduler.CraftScheduler;
2629
import org.bukkit.event.server.ServerLoadEvent;
@@ -44,9 +47,7 @@
4447

4548
import java.io.File;
4649
import java.io.IOException;
47-
import java.util.List;
48-
import java.util.Locale;
49-
import java.util.Map;
50+
import java.util.*;
5051
import java.util.logging.Level;
5152
import java.util.logging.Logger;
5253

@@ -62,6 +63,7 @@ public abstract class CraftServerMixin implements CraftServerBridge {
6263
@Shadow @Final protected DedicatedServer console;
6364
@Shadow @Final @Mutable private String serverName;
6465
@Shadow @Final @Mutable protected DedicatedPlayerList playerList;
66+
@Shadow @Final @Mutable private List<CraftPlayer> playerView;
6567
@Shadow @Final private Map<String, World> worlds;
6668
@Shadow public int reloadCount;
6769
@Shadow private YamlConfiguration configuration;
@@ -77,6 +79,7 @@ public abstract class CraftServerMixin implements CraftServerBridge {
7779
@Shadow public abstract void loadPlugins();
7880
@Shadow public abstract void enablePlugins(PluginLoadOrder type);
7981
@Shadow public abstract PluginManager getPluginManager();
82+
@Shadow@Final private String serverVersion;
8083
@Accessor("logger") @Mutable public abstract void setLogger(Logger logger);
8184
// @formatter:on
8285

@@ -97,6 +100,9 @@ public String getName() {
97100
@Override
98101
public void bridge$setPlayerList(PlayerList playerList) {
99102
this.playerList = (DedicatedPlayerList) playerList;
103+
this.playerView = Collections.unmodifiableList(Lists.transform(playerList.players, player ->
104+
((ServerPlayerEntityBridge)player).bridge$getBukkitEntity()
105+
));
100106
}
101107

102108
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.izzel.arclight.common.mixin.core.server.management;
2+
3+
import io.izzel.arclight.common.bridge.bukkit.CraftServerBridge;
4+
import net.minecraft.server.dedicated.DedicatedPlayerList;
5+
import org.bukkit.Bukkit;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.Inject;
9+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
10+
11+
/*
12+
* Fix adventure-platform-fabric replacing List<ServerPlayer> causing
13+
* Bukkit#getOnlinePlayers returns nothing
14+
*/
15+
@Mixin(DedicatedPlayerList.class)
16+
public class DedicatedPlayerListMixin {
17+
@Inject(method = "<init>", at = @At(value = "INVOKE", shift = At.Shift.AFTER, target = "Lnet/minecraft/server/players/PlayerList;<init>(Lnet/minecraft/server/MinecraftServer;Lnet/minecraft/core/LayeredRegistryAccess;Lnet/minecraft/world/level/storage/PlayerDataStorage;I)V"))
18+
private void arclight$afterSuper(CallbackInfo ci) {
19+
((CraftServerBridge)Bukkit.getServer()).bridge$setPlayerList((DedicatedPlayerList)(Object) this);
20+
}
21+
}

arclight-common/src/main/resources/mixins.arclight.core.json

+1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
"server.level.ServerLevelMixin",
7575
"server.level.TicketTypeMixin",
7676
"server.management.BanEntryMixin",
77+
"server.management.DedicatedPlayerListMixin",
7778
"server.management.PlayerListMixin",
7879
"server.management.ServerPlayerGameModeMixin",
7980
"server.management.UserListMixin",

0 commit comments

Comments
 (0)