ServerPlayerListModule class
Пакет: com.hypixel.hytale.server.core.modules.serverplayerlist
Файл: com/hypixel/hytale/server/core/modules/serverplayerlist/ServerPlayerListModule.java
extends: JavaPlugin
Поля (29)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
instance |
|
EventRegistry |
var1 |
|
Collection |
var1 |
|
HistoricMetric |
var1 |
|
boolean |
var1 |
|
HytaleServerConfig.Defaults |
var1 |
|
AddToServerPlayerList |
var11 |
|
AddToServerPlayerList |
var12 |
|
PlayerRef |
var2 |
|
PlayerRef |
var2 |
|
HytaleServerConfig.Defaults |
var2 |
|
PlayerRef |
var2 |
|
Object2IntOpenHashMap |
var2 |
|
double |
var2 |
|
PlayerLives |
var2 |
|
UUID |
var3 |
|
UUID |
var3 |
|
UUID |
var3 |
|
PlayerRef |
var3 |
|
UUID |
var3 |
|
int |
var3 |
|
PlayerRef[] |
var4 |
|
RemoveFromServerPlayerList |
var4 |
|
AddToServerPlayerList |
var4 |
|
PlayerRef[] |
var4 |
|
ServerPlayerListPlayer[] |
var5 |
|
ServerPlayerListPlayer[] |
var5 |
|
UpdateServerPlayerListPing |
var6 |
|
AddToServerPlayerList |
var7 |
Методы (20)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
void |
broadcastListEntryvoid broadcastListEntry(@Nonnull PlayerRef var1) |
public |
void |
broadcastListEntryvoid broadcastListEntry(@Nonnull PlayerRef var1, boolean var2) |
public |
void |
broadcastLivesChangevoid broadcastLivesChange(@Nonnull PlayerRef var1) |
private |
void |
broadcastPingUpdatesvoid broadcastPingUpdates() |
abstract |
return |
createServerPlayerListPlayerreturn createServerPlayerListPlayer(var0, var1) |
|
|
for for(int var6 = 0; var6 < var4.length; var6++) |
|
|
for for(PlayerRef var11 : var4) |
|
|
for for(int var6 = 0; var6 < var4.length; var6++) |
|
|
for for(PlayerRef var10 : var4) |
|
|
for for(PlayerRef var4 : var1) |
|
|
for for(PlayerRef var5 : var1) |
static |
int |
getPingValueint getPingValue(@Nonnull PacketHandler var0) |
|
|
if if(var3 != null) |
|
|
if if(var2 != null) |
private |
void |
onPlayerConnectvoid onPlayerConnect(@Nonnull PlayerConnectEvent var1) |
private |
void |
onPlayerDisconnectvoid onPlayerDisconnect(@Nonnull PlayerDisconnectEvent var1) |
public |
void |
onPlayerHiddenForViewervoid onPlayerHiddenForViewer(@Nonnull PlayerRef var1, @Nonnull UUID var2) |
private |
void |
onPlayerReadyvoid onPlayerReady(@Nonnull PlayerReadyEvent var1) |
public |
void |
onPlayerShownForViewervoid onPlayerShownForViewer(@Nonnull PlayerRef var1, @Nonnull UUID var2) |
abstract |
|
super super(var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.serverplayerlist;
class="kw">import com.hypixel.hytale.common.plugin.PluginManifest;
class="kw">import com.hypixel.hytale.event.EventRegistry;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.metrics.metric.HistoricMetric;
class="kw">import com.hypixel.hytale.protocol.packets.connection.PongType;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.AddToServerPlayerList;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.RemoveFromServerPlayerList;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.ServerPlayerListPlayer;
class="kw">import com.hypixel.hytale.protocol.packets.interface_.UpdateServerPlayerListPing;
class="kw">import com.hypixel.hytale.server.core.HytaleServer;
class="kw">import com.hypixel.hytale.server.core.HytaleServerConfig;
class="kw">import com.hypixel.hytale.server.core.event.events.player.PlayerConnectEvent;
class="kw">import com.hypixel.hytale.server.core.event.events.player.PlayerDisconnectEvent;
class="kw">import com.hypixel.hytale.server.core.event.events.player.PlayerReadyEvent;
class="kw">import com.hypixel.hytale.server.core.io.PacketHandler;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.PlayerLives;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Spectating;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPlugin;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.Universe;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
class="kw">import java.util.Collection;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class ServerPlayerListModule class="kw">extends JavaPlugin {
@Nonnull
class="kw">public class="kw">static class="kw">final PluginManifest MANIFEST = PluginManifest.corePlugin(ServerPlayerListModule.class).depends(Universe.class).build();
class="kw">private class="kw">static class="kw">final int PING_UPDATE_INTERVAL_SECONDS = 10;
class="kw">private class="kw">static ServerPlayerListModule instance;
@Nonnull
class="kw">public class="kw">static ServerPlayerListModule get() {
class="kw">return instance;
}
class="kw">public ServerPlayerListModule(@Nonnull JavaPluginInit var1) {
super(var1);
instance = this;
}
@Override
class="kw">protected void setup() {
EventRegistry var1 = this.getEventRegistry();
var1.register(PlayerConnectEvent.class, this::onPlayerConnect);
var1.register(PlayerDisconnectEvent.class, this::onPlayerDisconnect);
var1.registerGlobal(PlayerReadyEvent.class, this::onPlayerReady);
HytaleServer.SCHEDULED_EXECUTOR.scheduleWithFixedDelay(this::broadcastPingUpdates, 10L, 10L, TimeUnit.SECONDS);
}
class="kw">private void onPlayerConnect(@Nonnull PlayerConnectEvent var1) {
PlayerRef var2 = var1.getPlayerRef();
UUID var3 = var2.getUuid();
PlayerRef[] var4 = Universe.get().getPlayers().toArray(new PlayerRef[0]);
ServerPlayerListPlayer[] var5 = new ServerPlayerListPlayer[var4.length];
for (int var6 = 0; var6 < var4.length; var6++) {
var5[var6] = createServerPlayerListPlayer(var4[var6]);
}
AddToServerPlayerList var12 = new AddToServerPlayerList(var5);
var2.getPacketHandler().write(var12);
AddToServerPlayerList var7 = new AddToServerPlayerList(new ServerPlayerListPlayer[]{createServerPlayerListPlayer(var2)});
for (PlayerRef var11 : var4) {
if (!var11.getUuid().equals(var3) && !var11.getHiddenPlayersManager().isPlayerHidden(var3)) {
var11.getPacketHandler().write(var7);
}
}
}
class="kw">private void onPlayerDisconnect(@Nonnull PlayerDisconnectEvent var1) {
PlayerRef var2 = var1.getPlayerRef();
UUID var3 = var2.getUuid();
RemoveFromServerPlayerList var4 = new RemoveFromServerPlayerList(new UUID[]{var3});
for (PlayerRef var6 : Universe.get().getPlayers()) {
if (!var6.getUuid().equals(var3)) {
var6.getPacketHandler().write(var4);
}
}
}
class="kw">public void broadcastLivesChange(@Nonnull PlayerRef var1) {
HytaleServerConfig.Defaults var2 = HytaleServer.get().getConfig().getDefaults();
if (var2.getHardcoreMode().showsPersonalLives(var2.getHardcoreLives())) {
this.broadcastListEntry(var1);
}
}
class="kw">public void broadcastListEntry(@Nonnull PlayerRef var1) {
this.broadcastListEntry(var1, var1.getComponentConcurrent(Spectating.getComponentType()) != null);
}
class="kw">public void broadcastListEntry(@Nonnull PlayerRef var1, boolean var2) {
UUID var3 = var1.getUuid();
AddToServerPlayerList var4 = new AddToServerPlayerList(new ServerPlayerListPlayer[]{createServerPlayerListPlayer(var1, var2)});
for (PlayerRef var6 : Universe.get().getPlayers()) {
if (!var6.getHiddenPlayersManager().isPlayerHidden(var3)) {
var6.getPacketHandler().write(var4);
}
}
}
class="kw">public void onPlayerHiddenForViewer(@Nonnull PlayerRef var1, @Nonnull UUID var2) {
var1.getPacketHandler().write(new RemoveFromServerPlayerList(new UUID[]{var2}));
}
class="kw">public void onPlayerShownForViewer(@Nonnull PlayerRef var1, @Nonnull UUID var2) {
PlayerRef var3 = Universe.get().getPlayer(var2);
if (var3 != null) {
var1.getPacketHandler().write(new AddToServerPlayerList(new ServerPlayerListPlayer[]{createServerPlayerListPlayer(var3)}));
}
}
class="kw">private void onPlayerReady(@Nonnull PlayerReadyEvent var1) {
PlayerRef var2 = Universe.get().getPlayer(var1.getPlayer().getUuid());
if (var2 != null) {
UUID var3 = var2.getUuid();
PlayerRef[] var4 = Universe.get().getPlayers().toArray(new PlayerRef[0]);
ServerPlayerListPlayer[] var5 = new ServerPlayerListPlayer[var4.length];
for (int var6 = 0; var6 < var4.length; var6++) {
var5[var6] = createServerPlayerListPlayer(var4[var6]);
}
var2.getPacketHandler().write(new AddToServerPlayerList(var5));
AddToServerPlayerList var11 = new AddToServerPlayerList(new ServerPlayerListPlayer[]{createServerPlayerListPlayer(var2)});
for (PlayerRef var10 : var4) {
if (!var10.getUuid().equals(var3) && !var10.getHiddenPlayersManager().isPlayerHidden(var3)) {
var10.getPacketHandler().write(var11);
}
}
}
}
class="kw">private void broadcastPingUpdates() {
Collection var1 = Universe.get().getPlayers();
if (!var1.isEmpty()) {
Object2IntOpenHashMap var2 = new Object2IntOpenHashMap(var1.size());
for (PlayerRef var4 : var1) {
var2.put(var4.getUuid(), getPingValue(var4.getPacketHandler()));
}
UpdateServerPlayerListPing var6 = new UpdateServerPlayerListPing(var2);
for (PlayerRef var5 : var1) {
var5.getPacketHandler().writeNoCache(var6);
}
}
}
class="kw">private class="kw">static int getPingValue(@Nonnull PacketHandler var0) {
HistoricMetric var1 = var0.getPingInfo(PongType.Direct).getPingMetricSet();
double var2 = var1.getAverage(0);
class="kw">return (int)PacketHandler.PingInfo.TIME_UNIT.toMillis(MathUtil.fastCeil(var2));
}
@Nonnull
class="kw">private class="kw">static ServerPlayerListPlayer createServerPlayerListPlayer(@Nonnull PlayerRef var0) {
boolean var1 = var0.getComponentConcurrent(Spectating.getComponentType()) != null;
class="kw">return createServerPlayerListPlayer(var0, var1);
}
@Nonnull
class="kw">private class="kw">static ServerPlayerListPlayer createServerPlayerListPlayer(@Nonnull PlayerRef var0, boolean var1) {
class="kw">return new ServerPlayerListPlayer(
var0.getUuid(), var0.getUsername(), var0.getWorldUuid(), getPingValue(var0.getPacketHandler()), var1, livesRemaining(var0)
);
}
@Nullable
class="kw">private class="kw">static Integer livesRemaining(@Nonnull PlayerRef var0) {
HytaleServerConfig.Defaults var1 = HytaleServer.get().getConfig().getDefaults();
if (!var1.getHardcoreMode().showsPersonalLives(var1.getHardcoreLives())) {
class="kw">return null;
}
PlayerLives var2 = var0.getComponentConcurrent(PlayerLives.getComponentType());
int var3 = var2 != null ? var2.getRemaining() : var1.getHardcoreLives();
class="kw">return Math.max(var3, 0);
}
}