Начинающий
			
			
				
					
				
			
		- Статус
 - Оффлайн
 
- Регистрация
 - 8 Май 2024
 
- Сообщения
 - 14
 
- Реакции
 - 0
 
- Выберите загрузчик игры
 - Vanilla
 
	Пожалуйста, авторизуйтесь для просмотра ссылки.
На эту тему темы уже были, но они были не полными как по мне. Скажу сразу, да это с Excellent! Просто есть люди которые не могут это спастить, да
Для начала качаем
	Пожалуйста, авторизуйтесь для просмотра ссылки.
 и кидаем в удобную директорию. Вот так выглядит у меня:Далее переходим в основной ваш клас и вставляем это:
			
				Expensive.java:
			
		
		
		import eblan.svin.utils.waveycapes.WaveyCapesBase;
[USER=270918]@Getter[/USER]
@FieldDefaults(level = AccessLevel.PRIVATE)
public class Expensive {
    //код до...
    private WaveyCapesBase waveyCapes;
    private void initWaveyCapes() {
        this.waveyCapes = new WaveyCapesBase();
        this.waveyCapes.init();
    }
    private void clientLoad() {
        //код до...
        try {
            initWaveyCapes();
        } catch (Exception e) {
            e.printStackTrace();
        }
        //код после...
    }
    //код после...
}
	после этого net.minecraft.client.entity.player.AbstractClientPlayerEntity заменяем полностью на:
			
				AbstractClientPlayerEntity:
			
		
		
		package net.minecraft.client.entity.player;
import com.google.common.hash.Hashing;
import com.mojang.authlib.GameProfile;
import eblan.svin.command.friends.FriendStorage;
import lombok.Getter;
import lombok.Setter;
import net.minecraft.client.Minecraft;
import net.minecraft.client.network.play.NetworkPlayerInfo;
import net.minecraft.client.renderer.texture.DownloadingTexture;
import net.minecraft.client.renderer.texture.Texture;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.resources.DefaultPlayerSkin;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.ai.attributes.Attributes;
import net.minecraft.entity.passive.ShoulderRidingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BowItem;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StringUtils;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.world.GameType;
import net.optifine.Config;
import net.optifine.player.CapeUtils;
import net.optifine.player.PlayerConfigurations;
import net.optifine.reflect.Reflector;
import eblan.svin.events.PlayerLookEvent;
import eblan.svin.utils.waveycapes.interfaces.CapeHolder;
import eblan.svin.utils.waveycapes.sim.StickSimulation;
import net.minecraft.util.math.vector.Vector2f;
import javax.annotation.Nullable;
public abstract class AbstractClientPlayerEntity extends PlayerEntity implements CapeHolder {
    private final StickSimulation stickSimulation;
    private final ResourceLocation CAPE_LOCATION = new ResourceLocation("expensive/images/cape.png");
    private NetworkPlayerInfo playerInfo;
    public float rotateElytraX;
    public float rotateElytraY;
    public float rotateElytraZ;
    public final ClientWorld worldClient;
    [USER=270918]@Getter[/USER]
    [USER=1132491]@setter[/USER]
    private ResourceLocation locationOfCape = null;
    [USER=270918]@Getter[/USER]
    [USER=1132491]@setter[/USER]
    private long reloadCapeTimeMs = 0L;
    [USER=270918]@Getter[/USER]
    [USER=1132491]@setter[/USER]
    private boolean elytraOfCape = false;
    [USER=270918]@Getter[/USER]
    private String nameClear = null;
    public ShoulderRidingEntity entityShoulderLeft;
    public ShoulderRidingEntity entityShoulderRight;
    public float capeRotateX;
    public float capeRotateY;
    public float capeRotateZ;
    private static final ResourceLocation TEXTURE_ELYTRA = new ResourceLocation("textures/entity/elytra.png");
    public AbstractClientPlayerEntity(ClientWorld world, GameProfile profile) {
        super(world, world.func_239140_u_(), world.func_243489_v(), profile);
        this.worldClient = world;
        this.nameClear = profile.getName();
        if (this.nameClear != null && !this.nameClear.isEmpty()) {
            this.nameClear = StringUtils.stripControlCodes(this.nameClear);
        }
        CapeUtils.downloadCape(this);
        PlayerConfigurations.getPlayerConfiguration(this);
        this.stickSimulation = new StickSimulation();
    }
    /**
     * Returns true if the player is in spectator mode.
     */
    public boolean isSpectator() {
        if (Minecraft.getInstance().getConnection() == null) return false;
        NetworkPlayerInfo networkplayerinfo = Minecraft.getInstance().getConnection().getPlayerInfo(this.getGameProfile().getId());
        return networkplayerinfo != null && networkplayerinfo.getGameType() == GameType.SPECTATOR;
    }
    public boolean isCreative() {
        if (Minecraft.getInstance().getConnection() == null) return false;
        NetworkPlayerInfo networkplayerinfo = Minecraft.getInstance().getConnection().getPlayerInfo(this.getGameProfile().getId());
        return networkplayerinfo != null && networkplayerinfo.getGameType() == GameType.CREATIVE;
    }
    /**
     * Checks if this instance of AbstractClientPlayer has any associated player data.
     */
    public boolean hasPlayerInfo() {
        return this.getPlayerInfo() != null;
    }
    [USER=1265501]@nullable[/USER]
    protected NetworkPlayerInfo getPlayerInfo() {
        if (this.playerInfo == null) {
            this.playerInfo = Minecraft.getInstance().getConnection().getPlayerInfo(this.getUniqueID());
        }
        return this.playerInfo;
    }
    /**
     * Returns true if the player has an associated skin.
     */
    public boolean hasSkin() {
        NetworkPlayerInfo networkplayerinfo = this.getPlayerInfo();
        return networkplayerinfo != null && networkplayerinfo.hasLocationSkin();
    }
    /**
     * Returns the ResourceLocation associated with the player's skin
     */
    public ResourceLocation getLocationSkin() {
        NetworkPlayerInfo networkplayerinfo = this.getPlayerInfo();
        return networkplayerinfo == null ? DefaultPlayerSkin.getDefaultSkin(this.getUniqueID()) : networkplayerinfo.getLocationSkin();
    }
    [USER=1265501]@nullable[/USER]
    public ResourceLocation getLocationCape() {
        if (this.hasCustomCape()) {
//            System.out.println("Дабавляю");
            return CAPE_LOCATION;
        }
        if (!Config.isShowCapes()) {
            return null;
        } else {
            if (this.reloadCapeTimeMs != 0L && System.currentTimeMillis() > this.reloadCapeTimeMs) {
                CapeUtils.reloadCape(this);
                this.reloadCapeTimeMs = 0L;
            }
            if (this.locationOfCape != null) {
                return this.locationOfCape;
            } else {
                NetworkPlayerInfo networkplayerinfo = this.getPlayerInfo();
                return networkplayerinfo == null ? null : networkplayerinfo.getLocationCape();
            }
        }
    }
    [USER=1367676]@override[/USER]
    protected void updateCape() {
        if (this.hasCustomCape()) {
//            System.out.println("Абанавляю");
            this.simulate(this);
        }
        super.updateCape();
    }
    public boolean hasCustomCape() {
        return this instanceof ClientPlayerEntity || FriendStorage.isFriend(nameClear);
    }
    public boolean isPlayerInfoSet() {
        return this.getPlayerInfo() != null;
    }
    [USER=1265501]@nullable[/USER]
    /**
     * Gets the special Elytra texture for the player.
     */
    public ResourceLocation getLocationElytra() {
        NetworkPlayerInfo networkplayerinfo = this.getPlayerInfo();
        return networkplayerinfo == null ? null : networkplayerinfo.getLocationElytra();
    }
    public static DownloadingTexture getDownloadImageSkin(ResourceLocation resourceLocationIn, String username) {
        TextureManager texturemanager = Minecraft.getInstance().getTextureManager();
        Texture texture = texturemanager.getTexture(resourceLocationIn);
        if (texture == null) {
            texture = new DownloadingTexture(null, String.format("http://skins.minecraft.net/MinecraftSkins/%s.png", StringUtils.stripControlCodes(username)), DefaultPlayerSkin.getDefaultSkin(getOfflineUUID(username)), true, null);
            texturemanager.loadTexture(resourceLocationIn, texture);
        }
        return (DownloadingTexture) texture;
    }
    /**
     * Returns true if the username has an associated skin.
     */
    public static ResourceLocation getLocationSkin(String username) {
        return new ResourceLocation("skins/" + Hashing.sha1().hashUnencodedChars(StringUtils.stripControlCodes(username)));
    }
    public String getSkinType() {
        NetworkPlayerInfo networkplayerinfo = this.getPlayerInfo();
        return networkplayerinfo == null ? DefaultPlayerSkin.getSkinType(this.getUniqueID()) : networkplayerinfo.getSkinType();
    }
    public float getFovModifier() {
        float f = 1.0F;
        if (this.abilities.isFlying) {
            f *= 1.1F;
        }
        f = (float) ((double) f * ((this.getAttributeValue(Attributes.MOVEMENT_SPEED) / (double) this.abilities.getWalkSpeed() + 1.0D) / 2.0D));
        if (this.abilities.getWalkSpeed() == 0.0F || Float.isNaN(f) || Float.isInfinite(f)) {
            f = 1.0F;
        }
        if (this.isHandActive() && this.getActiveItemStack().getItem() instanceof BowItem) {
            int i = this.getItemInUseMaxCount();
            float f1 = (float) i / 20.0F;
            if (f1 > 1.0F) {
                f1 = 1.0F;
            } else {
                f1 = f1 * f1;
            }
            f *= 1.0F - f1 * 0.15F;
        }
        return Reflector.ForgeHooksClient_getOffsetFOV.exists() ? Reflector.callFloat(Reflector.ForgeHooksClient_getOffsetFOV, this, f) : MathHelper.lerp(Minecraft.getInstance().gameSettings.fovScaleEffect, 1.0F, f);
    }
    public boolean hasElytraCape() {
        if (this.hasCustomCape()) {
            return false;
        }
        ResourceLocation resourcelocation = this.getLocationCape();
        if (resourcelocation == null) {
            return false;
        } else {
            return resourcelocation != this.locationOfCape || this.elytraOfCape;
        }
    }
    public Vector3d getLook(float partialTicks) {
        float yaw = this.rotationYaw;
//        System.out.println("Абзор миняю");
        float pitch = this.rotationPitch;
        PlayerLookEvent playerLookEvent = new PlayerLookEvent(new Vector2f(yaw, pitch));
        yaw = playerLookEvent.getRotation().x;
        pitch = playerLookEvent.getRotation().y;
        return this.getVectorForRotation(pitch, yaw);
    }
    [USER=1367676]@override[/USER]
    public StickSimulation getSimulation() {
        return this.stickSimulation;
    }
    public String getNameClear() {
        return this.nameClear;
    }
}
	потом в net.minecraft.client.renderer.entity.PlayerRenderer заменяем public PlayerRenderer(EntityRendererManager renderManager, boolean useSmallArms) на:
			
				PlayerRenderer:
			
		
		
		public PlayerRenderer(EntityRendererManager renderManager, boolean useSmallArms)
{
    super(renderManager, new PlayerModel<>(0.0F, useSmallArms), 0.5F);
    this.addLayer(new BipedArmorLayer<>(this, new BipedModel(0.5F), new BipedModel(1.0F)));
    this.addLayer(new HeldItemLayer<>(this));
    this.addLayer(new ArrowLayer<>(this));
    this.addLayer(new Deadmau5HeadLayer(this));
    this.addLayer(new CustomCapeRenderLayer(this));
    this.addLayer(new HeadLayer<>(this));
    this.addLayer(new ElytraLayer<>(this));
    this.addLayer(new ParrotVariantLayer<>(this));
    this.addLayer(new SpinAttackEffectLayer<>(this));
    this.addLayer(new BeeStingerLayer<>(this));
}
	И последнее, создаем PlayerLookEvent в eblan.svin.events (или expensive.events) и туда:
			
				PlayerLookEvent.java:
			
		
		
		package eblan.svin.events;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import net.minecraft.util.math.vector.Vector2f;
[USER=270918]@Getter[/USER]
[USER=1132491]@setter[/USER]
[USER=1484803]@AllArgsConstructor[/USER]
public final class PlayerLookEvent {
    private Vector2f rotation;
    public Vector2f getRotation() {
        return rotation;
    }
}
	Надеюсь тем кому надо я помог :)
			
				Последнее редактирование: 
			
		
	
								
								
									
	
								
							
							
				
	
