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

Compare commits

...

6 Commits

Author SHA1 Message Date
f189322e03 bump version 2024-06-25 14:44:57 +03:00
6f441d5d58 fix no method sendStatusEffects 2024-06-25 14:27:50 +03:00
5def32e4b4 better skin refresh 2024-06-25 14:20:37 +03:00
05e421e24c allow command blocks to execute commands 2024-06-25 12:02:38 +03:00
9617102600 fix no permission level for clear command targets 2024-06-25 12:02:31 +03:00
0e9ceccc47 downgrade version to 1.2.5 2024-06-25 06:46:44 +03:00
2 changed files with 32 additions and 48 deletions

View File

@@ -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, false));
player.networkHandler.sendPacket(new EntityStatusEffectS2CPacket(player.getId(), instance, false)); }
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) {

View File

@@ -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))))
); );