Implement per player scoreboard
This commit is contained in:
parent
f10254f9ea
commit
26f9fd0cb0
@ -0,0 +1,40 @@
|
|||||||
|
package io.izzel.arclight.common.mixin.core.scoreboard;
|
||||||
|
|
||||||
|
import io.izzel.arclight.common.bridge.entity.player.ServerPlayerEntityBridge;
|
||||||
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
|
import net.minecraft.network.IPacket;
|
||||||
|
import net.minecraft.scoreboard.ServerScoreboard;
|
||||||
|
import net.minecraft.server.management.PlayerList;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Mixin(ServerScoreboard.class)
|
||||||
|
public class ServerScoreboardMixin {
|
||||||
|
|
||||||
|
@Redirect(method = "addObjective", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/management/PlayerList;getPlayers()Ljava/util/List;"))
|
||||||
|
private List<ServerPlayerEntity> arclight$filterAdd(PlayerList playerList) {
|
||||||
|
return filterPlayer(playerList.getPlayers());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Redirect(method = "sendDisplaySlotRemovalPackets", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/management/PlayerList;getPlayers()Ljava/util/List;"))
|
||||||
|
private List<ServerPlayerEntity> arclight$filterRemove(PlayerList playerList) {
|
||||||
|
return filterPlayer(playerList.getPlayers());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Redirect(method = "*", require = 11, at = @At(value = "INVOKE", target = "Lnet/minecraft/server/management/PlayerList;sendPacketToAllPlayers(Lnet/minecraft/network/IPacket;)V"))
|
||||||
|
private void arclight$sendToOwner(PlayerList playerList, IPacket<?> packetIn) {
|
||||||
|
for (ServerPlayerEntity entity : filterPlayer(playerList.getPlayers())) {
|
||||||
|
entity.connection.sendPacket(packetIn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<ServerPlayerEntity> filterPlayer(List<ServerPlayerEntity> list) {
|
||||||
|
return list.stream()
|
||||||
|
.filter(it -> ((ServerPlayerEntityBridge) it).bridge$getBukkitEntity().getScoreboard().getHandle() == (Object) this)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -358,6 +358,7 @@
|
|||||||
"network.rcon.RConConsoleSourceMixin",
|
"network.rcon.RConConsoleSourceMixin",
|
||||||
"network.status.ServerStatusNetHandlerMixin",
|
"network.status.ServerStatusNetHandlerMixin",
|
||||||
"potion.EffectMixin",
|
"potion.EffectMixin",
|
||||||
|
"scoreboard.ServerScoreboardMixin",
|
||||||
"server.CustomServerBossInfoMixin",
|
"server.CustomServerBossInfoMixin",
|
||||||
"server.MainMixin",
|
"server.MainMixin",
|
||||||
"server.MinecraftServerMixin",
|
"server.MinecraftServerMixin",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user