mirror of
https://github.com/Suiranoil/SkinRestorer.git
synced 2026-01-16 04:42:12 +00:00
Compare commits
6 Commits
b5bed1c441
...
v1.2.6+1.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
f9a7ad0c61
|
|||
|
96c761a5ee
|
|||
|
565e63de2c
|
|||
|
d0ac781d64
|
|||
|
dc09fbe01e
|
|||
|
da3543a17c
|
@@ -9,6 +9,6 @@ yarn_mappings=1.20.3+build.1
|
|||||||
loader_version=0.15.11
|
loader_version=0.15.11
|
||||||
|
|
||||||
# Mod Properties
|
# Mod Properties
|
||||||
mod_version=1.2.5
|
mod_version=1.2.6
|
||||||
maven_group=net.lionarius
|
maven_group=net.lionarius
|
||||||
archives_base_name=skin-restorer
|
archives_base_name=skin-restorer
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package net.lionarius.skinrestorer;
|
package net.lionarius.skinrestorer;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
@@ -8,12 +7,13 @@ import com.mojang.authlib.properties.Property;
|
|||||||
import it.unimi.dsi.fastutil.Pair;
|
import it.unimi.dsi.fastutil.Pair;
|
||||||
import net.fabricmc.api.DedicatedServerModInitializer;
|
import net.fabricmc.api.DedicatedServerModInitializer;
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
import net.minecraft.entity.EquipmentSlot;
|
|
||||||
import net.minecraft.entity.effect.StatusEffectInstance;
|
import net.minecraft.entity.effect.StatusEffectInstance;
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.network.packet.s2c.play.*;
|
import net.minecraft.network.packet.s2c.play.*;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import net.minecraft.server.PlayerManager;
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
|
import net.minecraft.server.world.ServerChunkManager;
|
||||||
|
import net.minecraft.server.world.ServerWorld;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -40,50 +40,34 @@ public class SkinRestorer implements DedicatedServerModInitializer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void refreshPlayer(ServerPlayerEntity player) {
|
public static void refreshPlayer(ServerPlayerEntity player) {
|
||||||
List<com.mojang.datafixers.util.Pair<EquipmentSlot, ItemStack>> equipment = Lists.newArrayList();
|
ServerWorld serverWorld = player.getServerWorld();
|
||||||
for (EquipmentSlot slot : EquipmentSlot.values()) {
|
PlayerManager playerManager = serverWorld.getServer().getPlayerManager();
|
||||||
ItemStack itemStack = player.getEquippedStack(slot);
|
ServerChunkManager chunkManager = serverWorld.getChunkManager();
|
||||||
if (!itemStack.isEmpty()) {
|
|
||||||
equipment.add(com.mojang.datafixers.util.Pair.of(slot, itemStack.copy()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (ServerPlayerEntity observer : player.server.getPlayerManager().getPlayerList()) {
|
playerManager.sendToAll(new BundleS2CPacket(
|
||||||
observer.networkHandler.sendPacket(new PlayerRemoveS2CPacket(List.of(player.getUuid())));
|
List.of(
|
||||||
observer.networkHandler.sendPacket(PlayerListS2CPacket.entryFromPlayer(Collections.singleton(player)));
|
new PlayerRemoveS2CPacket(List.of(player.getUuid())),
|
||||||
|
PlayerListS2CPacket.entryFromPlayer(Collections.singleton(player))
|
||||||
if (observer == player)
|
)
|
||||||
continue;
|
));
|
||||||
|
chunkManager.unloadEntity(player);
|
||||||
observer.networkHandler.sendPacket(new EntitiesDestroyS2CPacket(player.getId()));
|
chunkManager.loadEntity(player);
|
||||||
observer.networkHandler.sendPacket(new EntitySpawnS2CPacket(player));
|
player.networkHandler.sendPacket(new BundleS2CPacket(
|
||||||
observer.networkHandler.sendPacket(new EntityPositionS2CPacket(player));
|
List.of(
|
||||||
observer.networkHandler.sendPacket(new EntityTrackerUpdateS2CPacket(player.getId(), player.getDataTracker().getChangedEntries()));
|
new PlayerRespawnS2CPacket(player.createCommonPlayerSpawnInfo(serverWorld), PlayerRespawnS2CPacket.KEEP_ALL),
|
||||||
|
new GameStateChangeS2CPacket(GameStateChangeS2CPacket.INITIAL_CHUNKS_COMING, 0)
|
||||||
if (!equipment.isEmpty())
|
)
|
||||||
observer.networkHandler.sendPacket(new EntityEquipmentUpdateS2CPacket(player.getId(), equipment));
|
));
|
||||||
|
|
||||||
if (player.hasVehicle())
|
|
||||||
observer.networkHandler.sendPacket(new EntityPassengersSetS2CPacket(player.getVehicle()));
|
|
||||||
}
|
|
||||||
|
|
||||||
player.networkHandler.sendPacket(new PlayerRespawnS2CPacket(player.createCommonPlayerSpawnInfo(player.getServerWorld()), PlayerRespawnS2CPacket.KEEP_TRACKED_DATA));
|
|
||||||
player.networkHandler.sendPacket(new GameStateChangeS2CPacket(GameStateChangeS2CPacket.INITIAL_CHUNKS_COMING, 0));
|
|
||||||
player.networkHandler.requestTeleport(player.getX(), player.getY(), player.getZ(), player.getYaw(), player.getPitch());
|
player.networkHandler.requestTeleport(player.getX(), player.getY(), player.getZ(), player.getYaw(), player.getPitch());
|
||||||
player.networkHandler.sendPacket(new UpdateSelectedSlotS2CPacket(player.getInventory().selectedSlot));
|
player.networkHandler.sendPacket(new EntityVelocityUpdateS2CPacket(player));
|
||||||
player.networkHandler.sendPacket(new EntityTrackerUpdateS2CPacket(player.getId(), player.getDataTracker().getChangedEntries()));
|
|
||||||
|
|
||||||
player.sendAbilitiesUpdate();
|
player.sendAbilitiesUpdate();
|
||||||
player.playerScreenHandler.updateToClient();
|
player.addExperience(0);
|
||||||
|
playerManager.sendCommandTree(player);
|
||||||
player.networkHandler.sendPacket(new ExperienceBarUpdateS2CPacket(player.experienceProgress, player.totalExperience, player.experienceLevel));
|
playerManager.sendWorldInfo(player, serverWorld);
|
||||||
player.networkHandler.sendPacket(new HealthUpdateS2CPacket(player.getHealth(), player.getHungerManager().getFoodLevel(), player.getHungerManager().getSaturationLevel()));
|
playerManager.sendPlayerStatus(player);
|
||||||
|
for (StatusEffectInstance statusEffectInstance : player.getStatusEffects()) {
|
||||||
for (StatusEffectInstance instance : player.getStatusEffects())
|
player.networkHandler.sendPacket(new EntityStatusEffectS2CPacket(player.getId(), statusEffectInstance));
|
||||||
player.networkHandler.sendPacket(new EntityStatusEffectS2CPacket(player.getId(), instance));
|
}
|
||||||
|
|
||||||
if (player.hasVehicle())
|
|
||||||
player.networkHandler.sendPacket(new EntityPassengersSetS2CPacket(player.getVehicle()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CompletableFuture<Pair<Collection<ServerPlayerEntity>, Collection<GameProfile>>> setSkinAsync(MinecraftServer server, Collection<GameProfile> targets, Supplier<Property> skinSupplier) {
|
public static CompletableFuture<Pair<Collection<ServerPlayerEntity>, Collection<GameProfile>>> setSkinAsync(MinecraftServer server, Collection<GameProfile> targets, Supplier<Property> skinSupplier) {
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public class SkinCommand {
|
|||||||
.executes(context ->
|
.executes(context ->
|
||||||
skinAction(context.getSource(),
|
skinAction(context.getSource(),
|
||||||
() -> MojangSkinProvider.getSkin(StringArgumentType.getString(context, "skin_name"))))
|
() -> MojangSkinProvider.getSkin(StringArgumentType.getString(context, "skin_name"))))
|
||||||
.then(argument("targets", GameProfileArgumentType.gameProfile()).requires(source -> source.hasPermissionLevel(3))
|
.then(argument("targets", GameProfileArgumentType.gameProfile()).requires(source -> source.hasPermissionLevel(2))
|
||||||
.executes(context ->
|
.executes(context ->
|
||||||
skinAction(context.getSource(), GameProfileArgumentType.getProfileArgument(context, "targets"), true,
|
skinAction(context.getSource(), GameProfileArgumentType.getProfileArgument(context, "targets"), true,
|
||||||
() -> MojangSkinProvider.getSkin(StringArgumentType.getString(context, "skin_name")))))))
|
() -> MojangSkinProvider.getSkin(StringArgumentType.getString(context, "skin_name")))))))
|
||||||
@@ -42,7 +42,7 @@ public class SkinCommand {
|
|||||||
.executes(context ->
|
.executes(context ->
|
||||||
skinAction(context.getSource(),
|
skinAction(context.getSource(),
|
||||||
() -> MineskinSkinProvider.getSkin(StringArgumentType.getString(context, "url"), SkinVariant.CLASSIC)))
|
() -> MineskinSkinProvider.getSkin(StringArgumentType.getString(context, "url"), SkinVariant.CLASSIC)))
|
||||||
.then(argument("targets", GameProfileArgumentType.gameProfile()).requires(source -> source.hasPermissionLevel(3))
|
.then(argument("targets", GameProfileArgumentType.gameProfile()).requires(source -> source.hasPermissionLevel(2))
|
||||||
.executes(context ->
|
.executes(context ->
|
||||||
skinAction(context.getSource(), GameProfileArgumentType.getProfileArgument(context, "targets"), true,
|
skinAction(context.getSource(), GameProfileArgumentType.getProfileArgument(context, "targets"), true,
|
||||||
() -> MineskinSkinProvider.getSkin(StringArgumentType.getString(context, "url"), SkinVariant.CLASSIC))))))
|
() -> MineskinSkinProvider.getSkin(StringArgumentType.getString(context, "url"), SkinVariant.CLASSIC))))))
|
||||||
@@ -51,7 +51,7 @@ public class SkinCommand {
|
|||||||
.executes(context ->
|
.executes(context ->
|
||||||
skinAction(context.getSource(),
|
skinAction(context.getSource(),
|
||||||
() -> MineskinSkinProvider.getSkin(StringArgumentType.getString(context, "url"), SkinVariant.SLIM)))
|
() -> MineskinSkinProvider.getSkin(StringArgumentType.getString(context, "url"), SkinVariant.SLIM)))
|
||||||
.then(argument("targets", GameProfileArgumentType.gameProfile()).requires(source -> source.hasPermissionLevel(3))
|
.then(argument("targets", GameProfileArgumentType.gameProfile()).requires(source -> source.hasPermissionLevel(2))
|
||||||
.executes(context ->
|
.executes(context ->
|
||||||
skinAction(context.getSource(), GameProfileArgumentType.getProfileArgument(context, "targets"), true,
|
skinAction(context.getSource(), GameProfileArgumentType.getProfileArgument(context, "targets"), true,
|
||||||
() -> MineskinSkinProvider.getSkin(StringArgumentType.getString(context, "url"), SkinVariant.SLIM))))))))
|
() -> MineskinSkinProvider.getSkin(StringArgumentType.getString(context, "url"), SkinVariant.SLIM))))))))
|
||||||
@@ -59,7 +59,7 @@ public class SkinCommand {
|
|||||||
.executes(context ->
|
.executes(context ->
|
||||||
skinAction(context.getSource(),
|
skinAction(context.getSource(),
|
||||||
() -> DEFAULT_SKIN))
|
() -> DEFAULT_SKIN))
|
||||||
.then(argument("targets", GameProfileArgumentType.gameProfile()).executes(context ->
|
.then(argument("targets", GameProfileArgumentType.gameProfile()).requires(source -> source.hasPermissionLevel(2)).executes(context ->
|
||||||
skinAction(context.getSource(), GameProfileArgumentType.getProfileArgument(context, "targets"), true,
|
skinAction(context.getSource(), GameProfileArgumentType.getProfileArgument(context, "targets"), true,
|
||||||
() -> DEFAULT_SKIN))))
|
() -> DEFAULT_SKIN))))
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user