Начинающий
- Статус
- Оффлайн
- Регистрация
- 4 Май 2025
- Сообщения
- 29
- Реакции
- 0
- Выберите загрузчик игры
- Fabric
Всем привет! Не видел подобных - адекватных тем на этом лучшем форуме.
Делюсь кодом с вами, код прост, он добавляет ванильный плащ с вашей png картинкой, также он показывается
и на друзьях.
Может и не очень, но вдруг кому пригодится
Делюсь кодом с вами, код прост, он добавляет ванильный плащ с вашей png картинкой, также он показывается
и на друзьях.
Может и не очень, но вдруг кому пригодится
Пожалуйста, авторизуйтесь для просмотра ссылки.
java:
package wtf.nowels.mixins;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.client.util.SkinTextures;
import net.minecraft.util.Identifier;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import wtf.nowels.api.repository.friend.FriendUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Mixin(AbstractClientPlayerEntity.class)
public class CustomCapeMixin {
@Unique
private static final Identifier CAPE_ID = Identifier.of("minecraft", "textures/cape.png");
@Unique
private static final Logger LOGGER = LoggerFactory.getLogger("CustomCape");
@Inject(method = "getSkinTextures", at = @At("RETURN"), cancellable = true)
private void replaceCape(CallbackInfoReturnable<SkinTextures> cir) {
AbstractClientPlayerEntity player = (AbstractClientPlayerEntity)(Object)this;
MinecraftClient client = MinecraftClient.getInstance();
if (client.player == null) return;
boolean isLocalPlayer = player.getUuid().equals(client.player.getUuid());
boolean isFriend = !isLocalPlayer && FriendUtils.isFriend(player);
if (!isLocalPlayer && !isFriend) {
LOGGER.debug("No cape for: {} (not friend)", player.getName().getString());
return;
}
LOGGER.info("Applying cape for: {} (local: {}, friend: {})",
player.getName().getString(), isLocalPlayer, isFriend);
SkinTextures old = cir.getReturnValue();
cir.setReturnValue(new SkinTextures(
old.texture(),
old.textureUrl(),
CAPE_ID,
CAPE_ID,
old.model(),
old.secure()
));
}
}
java:
package wtf.nowels.mixins;
import com.mojang.authlib.GameProfile;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.PlayerListEntry;
import net.minecraft.client.session.Session;
import net.minecraft.client.util.SkinTextures;
import net.minecraft.util.Identifier;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.Objects;
import java.util.UUID;
import java.util.function.Supplier;
@Environment(EnvType.CLIENT)
@Mixin(PlayerListEntry.class)
public abstract class PlayerListEntryMixin {
@Unique
private static final Identifier CAPE_TEXTURE =
Identifier.of("nowels", "textures/cape.png");
@Inject(method = "texturesSupplier", at = @At("RETURN"), cancellable = true)
private static void injectCapeTexture(
GameProfile profile,
CallbackInfoReturnable<Supplier<SkinTextures>> cir
) {
MinecraftClient client = MinecraftClient.getInstance();
if (client == null) return;
Session session = client.getSession();
if (session == null) return;
UUID sessionUuid = session.getUuidOrNull();
if (sessionUuid == null) return;
if (!Objects.equals(sessionUuid, profile.getId())) return;
Supplier<SkinTextures> originalSupplier = cir.getReturnValue();
if (originalSupplier == null) return;
SkinTextures originalTextures = originalSupplier.get();
if (originalTextures == null) return;
SkinTextures updatedTextures = new SkinTextures(
originalTextures.texture(),
originalTextures.textureUrl(),
CAPE_TEXTURE,
originalTextures.elytraTexture(),
originalTextures.model(),
true
);
cir.setReturnValue(() -> updatedTextures);
}
}
Последнее редактирование: