1
0
mirror of https://github.com/Suiranoil/SkinRestorer.git synced 2026-01-16 04:42:12 +00:00

move refreshPlayer to PlayerUtils

This commit is contained in:
2024-06-27 19:21:27 +03:00
parent 03a694bde2
commit 1f9e1b8f1e
2 changed files with 41 additions and 38 deletions

View File

@@ -1,6 +1,5 @@
package net.lionarius.skinrestorer;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
@@ -9,12 +8,9 @@ import net.lionarius.skinrestorer.skin.SkinIO;
import net.lionarius.skinrestorer.skin.SkinResult;
import net.lionarius.skinrestorer.skin.SkinStorage;
import net.lionarius.skinrestorer.util.JsonUtils;
import net.minecraft.network.packet.s2c.play.*;
import net.lionarius.skinrestorer.util.PlayerUtils;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.PlayerManager;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerChunkManager;
import net.minecraft.server.world.ServerWorld;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -46,38 +42,6 @@ public class SkinRestorer {
SkinRestorer.skinStorage = new SkinStorage(new SkinIO(SkinRestorer.configDir));
}
public static void refreshPlayer(ServerPlayerEntity player) {
ServerWorld serverWorld = player.getServerWorld();
PlayerManager playerManager = serverWorld.getServer().getPlayerManager();
ServerChunkManager chunkManager = serverWorld.getChunkManager();
playerManager.sendToAll(new BundleS2CPacket(
List.of(
new PlayerRemoveS2CPacket(List.of(player.getUuid())),
PlayerListS2CPacket.entryFromPlayer(Collections.singleton(player))
)
));
if (!player.isDead()) {
chunkManager.unloadEntity(player);
chunkManager.loadEntity(player);
player.networkHandler.send(new BundleS2CPacket(
List.of(
new PlayerRespawnS2CPacket(player.createCommonPlayerSpawnInfo(serverWorld), PlayerRespawnS2CPacket.KEEP_ALL),
new GameStateChangeS2CPacket(GameStateChangeS2CPacket.INITIAL_CHUNKS_COMING, 0)
)
), null);
player.networkHandler.requestTeleport(player.getX(), player.getY(), player.getZ(), player.getYaw(), player.getPitch());
player.networkHandler.send(new EntityVelocityUpdateS2CPacket(player), null);
player.sendAbilitiesUpdate();
player.addExperience(0);
playerManager.sendCommandTree(player);
playerManager.sendWorldInfo(player, serverWorld);
playerManager.sendPlayerStatus(player);
playerManager.sendStatusEffects(player);
}
}
public static CompletableFuture<Pair<Collection<ServerPlayerEntity>, Collection<GameProfile>>> setSkinAsync(MinecraftServer server, Collection<GameProfile> targets, Supplier<SkinResult> skinSupplier) {
return CompletableFuture.<Pair<Property, Collection<GameProfile>>>supplyAsync(() -> {
SkinResult result = skinSupplier.get();
@@ -108,7 +72,7 @@ public class SkinRestorer {
continue;
applyRestoredSkin(player.getGameProfile(), skin);
refreshPlayer(player);
PlayerUtils.refreshPlayer(player);
acceptedPlayers.add(player);
}
return Pair.of(acceptedPlayers, acceptedProfiles);

View File

@@ -1,10 +1,49 @@
package net.lionarius.skinrestorer.util;
import net.minecraft.network.packet.s2c.play.*;
import net.minecraft.server.PlayerManager;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.server.world.ServerChunkManager;
import net.minecraft.server.world.ServerWorld;
import java.util.Collections;
import java.util.List;
public class PlayerUtils {
public static boolean isFakePlayer(ServerPlayerEntity player) {
return player.getClass() != ServerPlayerEntity.class; // if the player isn't a server player entity, it must be someone's fake player
}
public static void refreshPlayer(ServerPlayerEntity player) {
ServerWorld serverWorld = player.getServerWorld();
PlayerManager playerManager = serverWorld.getServer().getPlayerManager();
ServerChunkManager chunkManager = serverWorld.getChunkManager();
playerManager.sendToAll(new BundleS2CPacket(
List.of(
new PlayerRemoveS2CPacket(List.of(player.getUuid())),
PlayerListS2CPacket.entryFromPlayer(Collections.singleton(player))
)
));
if (!player.isDead()) {
chunkManager.unloadEntity(player);
chunkManager.loadEntity(player);
player.networkHandler.send(new BundleS2CPacket(
List.of(
new PlayerRespawnS2CPacket(player.createCommonPlayerSpawnInfo(serverWorld), PlayerRespawnS2CPacket.KEEP_ALL),
new GameStateChangeS2CPacket(GameStateChangeS2CPacket.INITIAL_CHUNKS_COMING, 0)
)
), null);
player.networkHandler.requestTeleport(player.getX(), player.getY(), player.getZ(), player.getYaw(), player.getPitch());
player.networkHandler.send(new EntityVelocityUpdateS2CPacket(player), null);
player.sendAbilitiesUpdate();
player.addExperience(0);
playerManager.sendCommandTree(player);
playerManager.sendWorldInfo(player, serverWorld);
playerManager.sendPlayerStatus(player);
playerManager.sendStatusEffects(player);
}
}
}