Начинающий
- Статус
- Онлайн
- Регистрация
- 25 Окт 2025
- Сообщения
- 6
- Реакции
- 0
- Выберите загрузчик игры
- Fabric
Не знаю надо ли кому то это но ладно
код полностью написан гемини потому что я очень крутой селфкодер
MixinAbstractClientPlayerEntity:
package fun.rich.mixins.player.cape;
import fun.rich.features.impl.render.Cape;
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.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(AbstractClientPlayerEntity.class)
public abstract class MixinAbstractClientPlayerEntity {
@Inject(method = "getSkinTextures", at = @At("RETURN"), cancellable = true)
private void onGetSkinTextures(CallbackInfoReturnable<SkinTextures> cir) {
// Получаем объект игрока, для которого вызывается этот метод
AbstractClientPlayerEntity player = (AbstractClientPlayerEntity) (Object) this;
// Проверяем:
// 1. Включен ли модуль Cape
// 2. Является ли этот игрок ТВОИМ персонажем (isMainPlayer)
if (Cape.isEnabled() && player.isMainPlayer()) {
Identifier customCape = Cape.getInstance().getCape();
if (customCape != null) {
// Получаем оригинальные текстуры (чтобы не сбросить скин)
SkinTextures original = cir.getReturnValue();
// Возвращаем новый объект текстур, где меняем только плащ и элитры
cir.setReturnValue(new SkinTextures(
original.texture(),
original.textureUrl(),
customCape, // Твой кастомный плащ
customCape, // Твои кастомные элитры
original.model(),
original.secure()
));
}
}
}
}
Cape:
package fun.rich.features.impl.render;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.experimental.FieldDefaults;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.texture.NativeImage;
import net.minecraft.client.texture.NativeImageBackedTexture;
import net.minecraft.util.Identifier;
import fun.rich.features.module.Module;
import fun.rich.features.module.ModuleCategory;
import fun.rich.utils.client.Instance;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class Cape extends Module {
public static Cape getInstance() {
return Instance.get(Cape.class);
}
// Переменная для хранения текстуры
Identifier customCapeTexture = null;
final String CAPE_PATH = "C:\\Users\\Кирилл\\Desktop\\VibeCode\\src\\main\\resources\\assets\\minecraft\\textures\\cape\\oblachko.png";
public Cape() {
super("Cape", "Отображает кастомный плащ", ModuleCategory.RENDER);
}
// Тот самый метод, который ищет миксин
public Identifier getCape() {
if (customCapeTexture == null) {
loadCape();
}
return customCapeTexture;
}
private void loadCape() {
try {
File file = new File(CAPE_PATH);
if (file.exists()) {
InputStream is = new FileInputStream(file);
NativeImage image = NativeImage.read(is);
NativeImageBackedTexture texture = new NativeImageBackedTexture(image);
// Для 1.21+
Identifier id = Identifier.of("rich", "custom_cape");
MinecraftClient.getInstance().getTextureManager().registerTexture(id, texture);
customCapeTexture = id;
System.out.println("[Cape] Успешно загружено!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static boolean isEnabled() {
return getInstance() != null && getInstance().isState();
}
}
код полностью написан гемини потому что я очень крутой селфкодер