• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Часть функционала | CreeperFarm | Expensive | 3.1 | first job |

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
18 Апр 2025
Сообщения
107
Реакции
1
Выберите загрузчик игры
  1. Vanilla
Instructions copy CreeperFarm create the CreeperFarm class in Misc or anywhere Ctrl+A + Ctrl+V then follow the path net.minecraft.entity.monster and look for CreeperEntity and add it to the getSwelling code now go to FunctionRegistry and write to the private CreeperFarm creeperFarm;
then we write in init creeperFarm = new CreeperFarm(),
HOORAY we did it all
Пожалуйста, авторизуйтесь для просмотра ссылки.


CreeperFarm:
Expand Collapse Copy
package im.expensive.functions.impl.misc;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventUpdate;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.BooleanSetting;
import im.expensive.functions.settings.impl.ModeSetting;
import im.expensive.functions.settings.impl.SliderSetting;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.monster.CreeperEntity;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceContext;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.vector.Vector3d;

@FunctionRegister(name = "CreeperFarm", type = Category.Misc)
public class CreeperFarm extends Function {
    //TechSystem
    private final ModeSetting modeSetting = new ModeSetting("Mode", "Usual", "Usual", "Farmilka");
    private final SliderSetting distanceSetting = new SliderSetting("Distance", 10.0f, 5.0f, 200.0f, 0.5f);
    private final BooleanSetting runModeSetting = new BooleanSetting("Running mode", true);
    private final ModeSetting movementMode = new ModeSetting("Type of movement", "Keybinds", "Keybinds", "Move")
            .setVisible(() -> runModeSetting.get());
    private final BooleanSetting autoReconnectSetting = new BooleanSetting("Auto-Reconnect", false);
    private final SliderSetting reconnectIntervalSetting = new SliderSetting("Re-entry interval (min)", 5.0f, 1.0f, 60.0f, 1.0f)
            .setVisible(() -> autoReconnectSetting.get());
    private final BooleanSetting retreatSetting = new BooleanSetting("Run away from the explosion", true);
    private final SliderSetting retreatDistanceSetting = new SliderSetting("Running distance", 7.0f, 3.0f, 15.0f, 0.5f)
            .setVisible(() -> retreatSetting.get());

    private static final Minecraft mc = Minecraft.getInstance();
    private CreeperEntity targetCreeper;
    private ItemEntity targetGunpowder;
    private long lastReconnectTime = 0;
    private long lastAttackTime = 0;
    private boolean isRetreating = false;
    private int retreatTicks = 0;

    public CreeperFarm() {
        addSettings(modeSetting, distanceSetting, runModeSetting, movementMode, retreatSetting, retreatDistanceSetting, autoReconnectSetting, reconnectIntervalSetting);
    }

    //TechSystem
    [USER=1474073]@Subscribe[/USER]
    public void onUpdate(EventUpdate event) {
        if (mc.world == null || mc.player == null) return;

        targetGunpowder = findClosestGunpowder();
        if (targetGunpowder != null) {
            runGunpowder(targetGunpowder);
            isRetreating = false;
            retreatTicks = 0;
            return;
        }

        targetCreeper = findClosestCreeper();
        if (targetCreeper == null) {
            resetMovement();
            isRetreating = false;
            retreatTicks = 0;
            return;
        }

        double distanceSq = mc.player.getDistanceSq(targetCreeper);
        if (distanceSq > distanceSetting.get() * distanceSetting.get()) {
            resetMovement();
            isRetreating = false;
            retreatTicks = 0;
            return;
        }

        if (!hasLine(targetCreeper)) {
            resetMovement();
            return;
        }

        float swell = targetCreeper.getSwelling(1.0f);
        float retreatThreshold = modeSetting.get().equals("Usual") ? 0.2f : 0.5f;
        if (retreatSetting.get() && swell > retreatThreshold) {
            retFromCreeper(targetCreeper);
            isRetreating = true;
            retreatTicks++;
            if (retreatTicks >= 40) {
                isRetreating = false;
                retreatTicks = 0;
            }
        } else {
            if (runModeSetting.get()) {
                runCreeper(targetCreeper);
            } else {
                pullCreeper(targetCreeper);
            }
            attackCreeper(targetCreeper);
            isRetreating = false;
        }

        if (autoReconnectSetting.get()) {
            AutoReconnect();
        }
    }

    //TechSystem
    private CreeperEntity findClosestCreeper() {
        CreeperEntity closestCreeper = null;
        double closestDistanceSq = Double.MAX_VALUE;

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof CreeperEntity creeper && creeper.isAlive()) {
                double distanceSq = mc.player.getDistanceSq(creeper);
                if (distanceSq < closestDistanceSq && distanceSq <= distanceSetting.get() * distanceSetting.get() && hasLine(creeper)) {
                    closestCreeper = creeper;
                    closestDistanceSq = distanceSq;
                }
            }
        }
        return closestCreeper;
    }

    private ItemEntity findClosestGunpowder() {
        ItemEntity closestGunpowder = null;
        double closestDistanceSq = Double.MAX_VALUE;

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof ItemEntity item && item.getItem().getItem() == Items.GUNPOWDER && item.isAlive()) {
                double distanceSq = mc.player.getDistanceSq(item);
                if (distanceSq < closestDistanceSq && distanceSq <= distanceSetting.get() * distanceSetting.get() && hasLine(item)) {
                    closestGunpowder = item;
                    closestDistanceSq = distanceSq;
                }
            }
        }
        return closestGunpowder;
    }

    private boolean hasLine(Entity entity) {
        Vector3d start = mc.player.getEyePosition(1.0F);
        Vector3d end = entity.getEyePosition(1.0F);
        RayTraceContext context = new RayTraceContext(start, end, RayTraceContext.BlockMode.COLLIDER, RayTraceContext.FluidMode.NONE, mc.player);
        RayTraceResult result = mc.world.rayTraceBlocks(context);
        return result.getType() == RayTraceResult.Type.MISS;
    }

    private boolean hasObstacle() {
        Vector3d start = mc.player.getEyePosition(1.0F);
        Vector3d forward = mc.player.getForward().scale(1.5);
        Vector3d end = start.add(forward);
        RayTraceContext context = new RayTraceContext(start, end, RayTraceContext.BlockMode.COLLIDER, RayTraceContext.FluidMode.NONE, mc.player);
        RayTraceResult result = mc.world.rayTraceBlocks(context);
        return result.getType() == RayTraceResult.Type.BLOCK;
    }

    //TechSystem
    private void runCreeper(CreeperEntity creeper) {
        float[] rotations = Rotations(creeper);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);

        if (movementMode.get().equals("Keybinds")) {
            runCreeperKeybinds(creeper);
        } else {
            runCreeperKeybinds(creeper);
        }
    }

    private void runCreeperKeybinds(CreeperEntity creeper) {
        double dx = creeper.getPosX() - mc.player.getPosX();
        double dz = creeper.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 2.0) {
            mc.gameSettings.keyBindForward.setPressed(true);
            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.gameSettings.keyBindSprint.setPressed(true);
            }
            if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
                mc.gameSettings.keyBindJump.setPressed(true);
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
                adjustedStrafeKeybinds(dx, dz);
            } else {
                adjustedStrafeKeybinds(dx, dz);
            }
        } else {
            resetMovementKeybinds();
        }
    }

    private void runCreeperMove(CreeperEntity creeper) {
        double dx = creeper.getPosX() - mc.player.getPosX();
        double dz = creeper.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 2.0) {
            double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
            double moveX = Math.sin(angle);
            double moveZ = Math.cos(angle);

            mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
            mc.player.moveStrafing = (float) moveX;

            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.player.setSprinting(true);
            } else {
                mc.player.setSprinting(false);
            }

            if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
                mc.player.jump();
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
            }
        } else {
            resetMovementMove();
        }
    }

    private void runGunpowder(ItemEntity gunpowder) {
        float[] rotations = Rotations(gunpowder);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);

        if (movementMode.get().equals("Keybinds")) {
            runGunpowderKeybinds(gunpowder);
        } else {
            runGunpowderMove(gunpowder);
        }
    }

    //TechSystem
    private void runGunpowderKeybinds(ItemEntity gunpowder) {
        double dx = gunpowder.getPosX() - mc.player.getPosX();
        double dz = gunpowder.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 1.0) {
            mc.gameSettings.keyBindForward.setPressed(true);
            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.gameSettings.keyBindSprint.setPressed(true);
            }
            if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
                mc.gameSettings.keyBindJump.setPressed(true);
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
                adjustedStrafeKeybinds(dx, dz);
            } else {
                adjustedStrafeKeybinds(dx, dz);
            }
        } else {
            resetMovementKeybinds();
        }
    }

    private void runGunpowderMove(ItemEntity gunpowder) {
        double dx = gunpowder.getPosX() - mc.player.getPosX();
        double dz = gunpowder.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 1.0) {
            double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
            double moveX = Math.sin(angle);
            double moveZ = Math.cos(angle);

            mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
            mc.player.moveStrafing = (float) moveX;

            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.player.setSprinting(true);
            } else {
                mc.player.setSprinting(false);
            }

            if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
                mc.player.jump();
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
            }
        } else {
            resetMovementMove();
        }
    }

    private void retFromCreeper(CreeperEntity creeper) {
        Vector3d playerPos = mc.player.getPositionVec();
        Vector3d creeperPos = creeper.getPositionVec();
        Vector3d direction = playerPos.subtract(creeperPos).normalize();

        float[] rotations = RotationsAway(creeper);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.8f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.8f);

        if (movementMode.get().equals("Keybinds")) {
            retFromCreeperKeybinds(direction);
        } else {
            retFromCreeperMove(direction);
        }
    }

    private void retFromCreeperKeybinds(Vector3d direction) {
        double retreatX = mc.player.getPosX() + direction.x * retreatDistanceSetting.get();
        double retreatZ = mc.player.getPosZ() + direction.z * retreatDistanceSetting.get();
        double dx = retreatX - mc.player.getPosX();
        double dz = retreatZ - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 0.1) {
            mc.gameSettings.keyBindForward.setPressed(true);
            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.gameSettings.keyBindSprint.setPressed(true);
            }
            if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
                mc.gameSettings.keyBindJump.setPressed(true);
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
                adjustedStrafeKeybinds(dx, dz);
            } else {
                adjustedStrafeKeybinds(dx, dz);
            }
        } else {
            resetMovementKeybinds();
        }
    }

    //TechSystem
    private void retFromCreeperMove(Vector3d direction) {
        double retreatX = mc.player.getPosX() + direction.x * retreatDistanceSetting.get();
        double retreatZ = mc.player.getPosZ() + direction.z * retreatDistanceSetting.get();
        double dx = retreatX - mc.player.getPosX();
        double dz = retreatZ - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 0.1) {
            double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
            double moveX = Math.sin(angle);
            double moveZ = Math.cos(angle);

            mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
            mc.player.moveStrafing = (float) moveX;

            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.player.setSprinting(true);
            } else {
                mc.player.setSprinting(false);
            }

            if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
                mc.player.jump();
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
            }
        } else {
            resetMovementMove();
        }
    }

    private void adjustedStrafeKeybinds(double dx, double dz) {
        float yaw = mc.player.rotationYaw;
        double strafe = 0;

        double angleToTarget = Math.toDegrees(Math.atan2(dz, dx)) - 90 - yaw;
        angleToTarget = MathHelper.wrapDegrees((float) angleToTarget);

        if (Math.abs(angleToTarget) > 45 && Math.abs(angleToTarget) < 135) {
            strafe = angleToTarget > 0 ? 1.0 : -1.0;
        }

        mc.gameSettings.keyBindLeft.setPressed(strafe < -0.1);
        mc.gameSettings.keyBindRight.setPressed(strafe > 0.1);
    }

    private void resetMovementKeybinds() {
        mc.gameSettings.keyBindForward.setPressed(false);
        mc.gameSettings.keyBindBack.setPressed(false);
        mc.gameSettings.keyBindLeft.setPressed(false);
        mc.gameSettings.keyBindRight.setPressed(false);
        mc.gameSettings.keyBindSprint.setPressed(false);
        mc.gameSettings.keyBindJump.setPressed(false);
    }

    private void resetMovementMove() {
        mc.player.moveForward = 0.0f;
        mc.player.moveStrafing = 0.0f;
        mc.player.setSprinting(false);
    }

    private void pullCreeper(CreeperEntity creeper) {
        float[] rotations = Rotations(creeper);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);

        if (movementMode.get().equals("Keybinds")) {
            resetMovementKeybinds();
        } else {
            resetMovementMove();
        }
    }

    private void resetMovement() {
        if (movementMode.get().equals("Keybinds")) {
            resetMovementKeybinds();
        } else {
            resetMovementMove();
        }
    }

    //TechSystem
    private void attackCreeper(CreeperEntity creeper) {
        long currentTime = System.currentTimeMillis();
        if (currentTime - lastAttackTime >= 500) {
            double distance = mc.player.getDistance(creeper);
            if (distance <= 3.0 && creeper.getSwelling(1.0f) <= 0.5f) {
                mc.playerController.attackEntity(mc.player, creeper);
                mc.player.swingArm(Hand.MAIN_HAND);
                lastAttackTime = currentTime;
            }
        }
    }

    private void AutoReconnect() {
        long currentTime = System.currentTimeMillis();
        float intervalMinutes = reconnectIntervalSetting.get();
        long intervalMillis = (long) (intervalMinutes * 60 * 1000);

        if (currentTime - lastReconnectTime >= intervalMillis) {
            if (mc.player != null) {
                mc.player.sendChatMessage(".rct");
                lastReconnectTime = currentTime;
            }
        }
    }

    private float[] Rotations(Entity entity) {
        double x = entity.getPosX() - mc.player.getPosX();
        double y = entity.getPosY() - mc.player.getPosY() + entity.getEyeHeight() - mc.player.getEyeHeight();
        double z = entity.getPosZ() - mc.player.getPosZ();
        double dist = Math.sqrt(x * x + z * z);
        float yaw = (float) ((Math.atan2(z, x) * 180 / Math.PI) - 90);
        float pitch = (float) (-(Math.atan2(y, dist) * 180 / Math.PI));
        return new float[]{yaw, pitch};
    }

    private float[] RotationsAway(Entity entity) {
        double x = mc.player.getPosX() - entity.getPosX();
        double y = mc.player.getPosY() - entity.getPosY() + mc.player.getEyeHeight() - entity.getEyeHeight();
        double z = mc.player.getPosZ() - entity.getPosZ();
        double dist = Math.sqrt(x * x + z * z);
        float yaw = (float) ((Math.atan2(z, x) * 180 / Math.PI) - 90);
        float pitch = (float) (-(Math.atan2(y, dist) * 180 / Math.PI));
        return new float[]{yaw, pitch};
    }

    private float Rotation(float current, float target, float factor) {
        float delta = MathHelper.wrapDegrees(target - current);
        return current + delta * factor;
    }

    [USER=1367676]@override[/USER]
    public void onEnable() {
        super.onEnable();
        lastReconnectTime = System.currentTimeMillis();
        lastAttackTime = 0;
        isRetreating = false;
        retreatTicks = 0;
    }

    [USER=1367676]@override[/USER]
    public void onDisable() {
        super.onDisable();
        resetMovement();
        isRetreating = false;
        retreatTicks = 0;
        targetCreeper = null;
        targetGunpowder = null;
    }
}
---------------------------------

CreeperEntity:
Expand Collapse Copy
package net.minecraft.entity.monster;

import java.util.Collection;
import net.minecraft.entity.AreaEffectCloudEntity;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.IChargeableMob;
import net.minecraft.entity.ai.attributes.AttributeModifierMap;
import net.minecraft.entity.ai.attributes.Attributes;
import net.minecraft.entity.ai.goal.AvoidEntityGoal;
import net.minecraft.entity.ai.goal.CreeperSwellGoal;
import net.minecraft.entity.ai.goal.HurtByTargetGoal;
import net.minecraft.entity.ai.goal.LookAtGoal;
import net.minecraft.entity.ai.goal.LookRandomlyGoal;
import net.minecraft.entity.ai.goal.MeleeAttackGoal;
import net.minecraft.entity.ai.goal.NearestAttackableTargetGoal;
import net.minecraft.entity.ai.goal.SwimGoal;
import net.minecraft.entity.ai.goal.WaterAvoidingRandomWalkingGoal;
import net.minecraft.entity.effect.LightningBoltEntity;
import net.minecraft.entity.passive.CatEntity;
import net.minecraft.entity.passive.OcelotEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.datasync.DataParameter;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.network.datasync.EntityDataManager;
import net.minecraft.potion.EffectInstance;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Hand;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.Explosion;
import net.minecraft.world.GameRules;
import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;

public class CreeperEntity extends MonsterEntity implements IChargeableMob
{
    private static final DataParameter<Integer> STATE = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.VARINT);
    private static final DataParameter<Boolean> POWERED = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.BOOLEAN);
    private static final DataParameter<Boolean> IGNITED = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.BOOLEAN);
    private int lastActiveTime;
    private int timeSinceIgnited;
    private int fuseTime = 30;
    private int explosionRadius = 3;
    private int droppedSkulls;

    public CreeperEntity(EntityType <? extends CreeperEntity > type, World worldIn)
    {
        super(type, worldIn);
    }

    protected void registerGoals()
    {
        this.goalSelector.addGoal(1, new SwimGoal(this));
        this.goalSelector.addGoal(2, new CreeperSwellGoal(this));
        this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, OcelotEntity.class, 6.0F, 1.0D, 1.2D));
        this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, CatEntity.class, 6.0F, 1.0D, 1.2D));
        this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0D, false));
        this.goalSelector.addGoal(5, new WaterAvoidingRandomWalkingGoal(this, 0.8D));
        this.goalSelector.addGoal(6, new LookAtGoal(this, PlayerEntity.class, 8.0F));
        this.goalSelector.addGoal(6, new LookRandomlyGoal(this));
        this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, PlayerEntity.class, true));
        this.targetSelector.addGoal(2, new HurtByTargetGoal(this));
    }

    public static AttributeModifierMap.MutableAttribute registerAttributes()
    {
        return MonsterEntity.func_234295_eP_().createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.25D);
    }

    public int getMaxFallHeight()
    {
        return this.getAttackTarget() == null ? 3 : 3 + (int)(this.getHealth() - 1.0F);
    }

    public boolean onLivingFall(float distance, float damageMultiplier)
    {
        boolean flag = super.onLivingFall(distance, damageMultiplier);
        this.timeSinceIgnited = (int)((float)this.timeSinceIgnited + distance * 1.5F);

        if (this.timeSinceIgnited > this.fuseTime - 5)
        {
            this.timeSinceIgnited = this.fuseTime - 5;
        }

        return flag;
    }

    protected void registerData()
    {
        super.registerData();
        this.dataManager.register(STATE, -1);
        this.dataManager.register(POWERED, false);
        this.dataManager.register(IGNITED, false);
    }

    public void writeAdditional(CompoundNBT compound)
    {
        super.writeAdditional(compound);

        if (this.dataManager.get(POWERED))
        {
            compound.putBoolean("powered", true);
        }

        compound.putShort("Fuse", (short)this.fuseTime);
        compound.putByte("ExplosionRadius", (byte)this.explosionRadius);
        compound.putBoolean("ignited", this.hasIgnited());
    }

    public void readAdditional(CompoundNBT compound)
    {
        super.readAdditional(compound);
        this.dataManager.set(POWERED, compound.getBoolean("powered"));

        if (compound.contains("Fuse", 99))
        {
            this.fuseTime = compound.getShort("Fuse");
        }

        if (compound.contains("ExplosionRadius", 99))
        {
            this.explosionRadius = compound.getByte("ExplosionRadius");
        }

        if (compound.getBoolean("ignited"))
        {
            this.ignite();
        }
    }

    public void tick()
    {
        if (this.isAlive())
        {
            this.lastActiveTime = this.timeSinceIgnited;

            if (this.hasIgnited())
            {
                this.setCreeperState(1);
            }

            int i = this.getCreeperState();

            if (i > 0 && this.timeSinceIgnited == 0)
            {
                this.playSound(SoundEvents.ENTITY_CREEPER_PRIMED, 1.0F, 0.5F);
            }

            this.timeSinceIgnited += i;

            if (this.timeSinceIgnited < 0)
            {
                this.timeSinceIgnited = 0;
            }

            if (this.timeSinceIgnited >= this.fuseTime)
            {
                this.timeSinceIgnited = this.fuseTime;
                this.explode();
            }
        }

        super.tick();
    }

    protected SoundEvent getHurtSound(DamageSource damageSourceIn)
    {
        return SoundEvents.ENTITY_CREEPER_HURT;
    }

    protected SoundEvent getDeathSound()
    {
        return SoundEvents.ENTITY_CREEPER_DEATH;
    }

    protected void dropSpecialItems(DamageSource source, int looting, boolean recentlyHitIn)
    {
        super.dropSpecialItems(source, looting, recentlyHitIn);
        Entity entity = source.getTrueSource();

        if (entity != this && entity instanceof CreeperEntity)
        {
            CreeperEntity creeperentity = (CreeperEntity)entity;

            if (creeperentity.ableToCauseSkullDrop())
            {
                creeperentity.incrementDroppedSkulls();
                this.entityDropItem(Items.CREEPER_HEAD);
            }
        }
    }

    public boolean attackEntityAsMob(Entity entityIn)
    {
        return true;
    }

    public boolean isCharged()
    {
        return this.dataManager.get(POWERED);
    }

    public float getCreeperFlashIntensity(float partialTicks)
    {
        return MathHelper.lerp(partialTicks, (float)this.lastActiveTime, (float)this.timeSinceIgnited) / (float)(this.fuseTime - 2);
    }

    public int getCreeperState()
    {
        return this.dataManager.get(STATE);
    }

    public void setCreeperState(int state)
    {
        this.dataManager.set(STATE, state);
    }

    public void func_241841_a(ServerWorld p_241841_1_, LightningBoltEntity p_241841_2_)
    {
        super.func_241841_a(p_241841_1_, p_241841_2_);
        this.dataManager.set(POWERED, true);
    }

    protected ActionResultType func_230254_b_(PlayerEntity p_230254_1_, Hand p_230254_2_)
    {
        ItemStack itemstack = p_230254_1_.getHeldItem(p_230254_2_);

        if (itemstack.getItem() == Items.FLINT_AND_STEEL)
        {
            this.world.playSound(p_230254_1_, this.getPosX(), this.getPosY(), this.getPosZ(), SoundEvents.ITEM_FLINTANDSTEEL_USE, this.getSoundCategory(), 1.0F, this.rand.nextFloat() * 0.4F + 0.8F);

            if (!this.world.isRemote)
            {
                this.ignite();
                itemstack.damageItem(1, p_230254_1_, (player) ->
                {
                    player.sendBreakAnimation(p_230254_2_);
                });
            }

            return ActionResultType.func_233537_a_(this.world.isRemote);
        }
        else
        {
            return super.func_230254_b_(p_230254_1_, p_230254_2_);
        }
    }

    private void explode()
    {
        if (!this.world.isRemote)
        {
            Explosion.Mode explosion$mode = this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING) ? Explosion.Mode.DESTROY : Explosion.Mode.NONE;
            float f = this.isCharged() ? 2.0F : 1.0F;
            this.dead = true;
            this.world.createExplosion(this, this.getPosX(), this.getPosY(), this.getPosZ(), (float)this.explosionRadius * f, explosion$mode);
            this.remove();
            this.spawnLingeringCloud();
        }
    }

    private void spawnLingeringCloud()
    {
        Collection<EffectInstance> collection = this.getActivePotionEffects();

        if (!collection.isEmpty())
        {
            AreaEffectCloudEntity areaeffectcloudentity = new AreaEffectCloudEntity(this.world, this.getPosX(), this.getPosY(), this.getPosZ());
            areaeffectcloudentity.setRadius(2.5F);
            areaeffectcloudentity.setRadiusOnUse(-0.5F);
            areaeffectcloudentity.setWaitTime(10);
            areaeffectcloudentity.setDuration(areaeffectcloudentity.getDuration() / 2);
            areaeffectcloudentity.setRadiusPerTick(-areaeffectcloudentity.getRadius() / (float)areaeffectcloudentity.getDuration());

            for (EffectInstance effectinstance : collection)
            {
                areaeffectcloudentity.addEffect(new EffectInstance(effectinstance));
            }

            this.world.addEntity(areaeffectcloudentity);
        }
    }

    public boolean hasIgnited()
    {
        return this.dataManager.get(IGNITED);
    }

    public void ignite()
    {
        this.dataManager.set(IGNITED, true);
    }

    public boolean ableToCauseSkullDrop()
    {
        return this.isCharged() && this.droppedSkulls < 1;
    }

    public void incrementDroppedSkulls()
    {
        ++this.droppedSkulls;
    }
    public float getSwelling(float partialTicks) {
        float previousSwell = (float) this.lastActiveTime;
        float currentSwell = (float) this.timeSinceIgnited;
        float interpolatedSwell = MathHelper.lerp(partialTicks, previousSwell, currentSwell);
        float swell = interpolatedSwell / (float) this.fuseTime;
        return MathHelper.clamp(swell, 0.0F, 1.0F);
    }
}
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
сколько вам повторять,если он сделан не баритоном то он ужасен
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Instructions copy CreeperFarm create the CreeperFarm class in Misc or anywhere Ctrl+A + Ctrl+V then follow the path net.minecraft.entity.monster and look for CreeperEntity and add it to the getSwelling code now go to FunctionRegistry and write to the private CreeperFarm creeperFarm;
then we write in init creeperFarm = new CreeperFarm(),
HOORAY we did it all
Пожалуйста, авторизуйтесь для просмотра ссылки.


CreeperFarm:
Expand Collapse Copy
package im.expensive.functions.impl.misc;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventUpdate;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.BooleanSetting;
import im.expensive.functions.settings.impl.ModeSetting;
import im.expensive.functions.settings.impl.SliderSetting;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.monster.CreeperEntity;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceContext;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.vector.Vector3d;

@FunctionRegister(name = "CreeperFarm", type = Category.Misc)
public class CreeperFarm extends Function {
    //TechSystem
    private final ModeSetting modeSetting = new ModeSetting("Mode", "Usual", "Usual", "Farmilka");
    private final SliderSetting distanceSetting = new SliderSetting("Distance", 10.0f, 5.0f, 200.0f, 0.5f);
    private final BooleanSetting runModeSetting = new BooleanSetting("Running mode", true);
    private final ModeSetting movementMode = new ModeSetting("Type of movement", "Keybinds", "Keybinds", "Move")
            .setVisible(() -> runModeSetting.get());
    private final BooleanSetting autoReconnectSetting = new BooleanSetting("Auto-Reconnect", false);
    private final SliderSetting reconnectIntervalSetting = new SliderSetting("Re-entry interval (min)", 5.0f, 1.0f, 60.0f, 1.0f)
            .setVisible(() -> autoReconnectSetting.get());
    private final BooleanSetting retreatSetting = new BooleanSetting("Run away from the explosion", true);
    private final SliderSetting retreatDistanceSetting = new SliderSetting("Running distance", 7.0f, 3.0f, 15.0f, 0.5f)
            .setVisible(() -> retreatSetting.get());

    private static final Minecraft mc = Minecraft.getInstance();
    private CreeperEntity targetCreeper;
    private ItemEntity targetGunpowder;
    private long lastReconnectTime = 0;
    private long lastAttackTime = 0;
    private boolean isRetreating = false;
    private int retreatTicks = 0;

    public CreeperFarm() {
        addSettings(modeSetting, distanceSetting, runModeSetting, movementMode, retreatSetting, retreatDistanceSetting, autoReconnectSetting, reconnectIntervalSetting);
    }

    //TechSystem
    [USER=1474073]@Subscribe[/USER]
    public void onUpdate(EventUpdate event) {
        if (mc.world == null || mc.player == null) return;

        targetGunpowder = findClosestGunpowder();
        if (targetGunpowder != null) {
            runGunpowder(targetGunpowder);
            isRetreating = false;
            retreatTicks = 0;
            return;
        }

        targetCreeper = findClosestCreeper();
        if (targetCreeper == null) {
            resetMovement();
            isRetreating = false;
            retreatTicks = 0;
            return;
        }

        double distanceSq = mc.player.getDistanceSq(targetCreeper);
        if (distanceSq > distanceSetting.get() * distanceSetting.get()) {
            resetMovement();
            isRetreating = false;
            retreatTicks = 0;
            return;
        }

        if (!hasLine(targetCreeper)) {
            resetMovement();
            return;
        }

        float swell = targetCreeper.getSwelling(1.0f);
        float retreatThreshold = modeSetting.get().equals("Usual") ? 0.2f : 0.5f;
        if (retreatSetting.get() && swell > retreatThreshold) {
            retFromCreeper(targetCreeper);
            isRetreating = true;
            retreatTicks++;
            if (retreatTicks >= 40) {
                isRetreating = false;
                retreatTicks = 0;
            }
        } else {
            if (runModeSetting.get()) {
                runCreeper(targetCreeper);
            } else {
                pullCreeper(targetCreeper);
            }
            attackCreeper(targetCreeper);
            isRetreating = false;
        }

        if (autoReconnectSetting.get()) {
            AutoReconnect();
        }
    }

    //TechSystem
    private CreeperEntity findClosestCreeper() {
        CreeperEntity closestCreeper = null;
        double closestDistanceSq = Double.MAX_VALUE;

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof CreeperEntity creeper && creeper.isAlive()) {
                double distanceSq = mc.player.getDistanceSq(creeper);
                if (distanceSq < closestDistanceSq && distanceSq <= distanceSetting.get() * distanceSetting.get() && hasLine(creeper)) {
                    closestCreeper = creeper;
                    closestDistanceSq = distanceSq;
                }
            }
        }
        return closestCreeper;
    }

    private ItemEntity findClosestGunpowder() {
        ItemEntity closestGunpowder = null;
        double closestDistanceSq = Double.MAX_VALUE;

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof ItemEntity item && item.getItem().getItem() == Items.GUNPOWDER && item.isAlive()) {
                double distanceSq = mc.player.getDistanceSq(item);
                if (distanceSq < closestDistanceSq && distanceSq <= distanceSetting.get() * distanceSetting.get() && hasLine(item)) {
                    closestGunpowder = item;
                    closestDistanceSq = distanceSq;
                }
            }
        }
        return closestGunpowder;
    }

    private boolean hasLine(Entity entity) {
        Vector3d start = mc.player.getEyePosition(1.0F);
        Vector3d end = entity.getEyePosition(1.0F);
        RayTraceContext context = new RayTraceContext(start, end, RayTraceContext.BlockMode.COLLIDER, RayTraceContext.FluidMode.NONE, mc.player);
        RayTraceResult result = mc.world.rayTraceBlocks(context);
        return result.getType() == RayTraceResult.Type.MISS;
    }

    private boolean hasObstacle() {
        Vector3d start = mc.player.getEyePosition(1.0F);
        Vector3d forward = mc.player.getForward().scale(1.5);
        Vector3d end = start.add(forward);
        RayTraceContext context = new RayTraceContext(start, end, RayTraceContext.BlockMode.COLLIDER, RayTraceContext.FluidMode.NONE, mc.player);
        RayTraceResult result = mc.world.rayTraceBlocks(context);
        return result.getType() == RayTraceResult.Type.BLOCK;
    }

    //TechSystem
    private void runCreeper(CreeperEntity creeper) {
        float[] rotations = Rotations(creeper);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);

        if (movementMode.get().equals("Keybinds")) {
            runCreeperKeybinds(creeper);
        } else {
            runCreeperKeybinds(creeper);
        }
    }

    private void runCreeperKeybinds(CreeperEntity creeper) {
        double dx = creeper.getPosX() - mc.player.getPosX();
        double dz = creeper.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 2.0) {
            mc.gameSettings.keyBindForward.setPressed(true);
            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.gameSettings.keyBindSprint.setPressed(true);
            }
            if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
                mc.gameSettings.keyBindJump.setPressed(true);
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
                adjustedStrafeKeybinds(dx, dz);
            } else {
                adjustedStrafeKeybinds(dx, dz);
            }
        } else {
            resetMovementKeybinds();
        }
    }

    private void runCreeperMove(CreeperEntity creeper) {
        double dx = creeper.getPosX() - mc.player.getPosX();
        double dz = creeper.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 2.0) {
            double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
            double moveX = Math.sin(angle);
            double moveZ = Math.cos(angle);

            mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
            mc.player.moveStrafing = (float) moveX;

            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.player.setSprinting(true);
            } else {
                mc.player.setSprinting(false);
            }

            if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
                mc.player.jump();
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
            }
        } else {
            resetMovementMove();
        }
    }

    private void runGunpowder(ItemEntity gunpowder) {
        float[] rotations = Rotations(gunpowder);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);

        if (movementMode.get().equals("Keybinds")) {
            runGunpowderKeybinds(gunpowder);
        } else {
            runGunpowderMove(gunpowder);
        }
    }

    //TechSystem
    private void runGunpowderKeybinds(ItemEntity gunpowder) {
        double dx = gunpowder.getPosX() - mc.player.getPosX();
        double dz = gunpowder.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 1.0) {
            mc.gameSettings.keyBindForward.setPressed(true);
            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.gameSettings.keyBindSprint.setPressed(true);
            }
            if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
                mc.gameSettings.keyBindJump.setPressed(true);
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
                adjustedStrafeKeybinds(dx, dz);
            } else {
                adjustedStrafeKeybinds(dx, dz);
            }
        } else {
            resetMovementKeybinds();
        }
    }

    private void runGunpowderMove(ItemEntity gunpowder) {
        double dx = gunpowder.getPosX() - mc.player.getPosX();
        double dz = gunpowder.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 1.0) {
            double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
            double moveX = Math.sin(angle);
            double moveZ = Math.cos(angle);

            mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
            mc.player.moveStrafing = (float) moveX;

            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.player.setSprinting(true);
            } else {
                mc.player.setSprinting(false);
            }

            if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
                mc.player.jump();
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
            }
        } else {
            resetMovementMove();
        }
    }

    private void retFromCreeper(CreeperEntity creeper) {
        Vector3d playerPos = mc.player.getPositionVec();
        Vector3d creeperPos = creeper.getPositionVec();
        Vector3d direction = playerPos.subtract(creeperPos).normalize();

        float[] rotations = RotationsAway(creeper);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.8f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.8f);

        if (movementMode.get().equals("Keybinds")) {
            retFromCreeperKeybinds(direction);
        } else {
            retFromCreeperMove(direction);
        }
    }

    private void retFromCreeperKeybinds(Vector3d direction) {
        double retreatX = mc.player.getPosX() + direction.x * retreatDistanceSetting.get();
        double retreatZ = mc.player.getPosZ() + direction.z * retreatDistanceSetting.get();
        double dx = retreatX - mc.player.getPosX();
        double dz = retreatZ - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 0.1) {
            mc.gameSettings.keyBindForward.setPressed(true);
            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.gameSettings.keyBindSprint.setPressed(true);
            }
            if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
                mc.gameSettings.keyBindJump.setPressed(true);
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
                adjustedStrafeKeybinds(dx, dz);
            } else {
                adjustedStrafeKeybinds(dx, dz);
            }
        } else {
            resetMovementKeybinds();
        }
    }

    //TechSystem
    private void retFromCreeperMove(Vector3d direction) {
        double retreatX = mc.player.getPosX() + direction.x * retreatDistanceSetting.get();
        double retreatZ = mc.player.getPosZ() + direction.z * retreatDistanceSetting.get();
        double dx = retreatX - mc.player.getPosX();
        double dz = retreatZ - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 0.1) {
            double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
            double moveX = Math.sin(angle);
            double moveZ = Math.cos(angle);

            mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
            mc.player.moveStrafing = (float) moveX;

            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.player.setSprinting(true);
            } else {
                mc.player.setSprinting(false);
            }

            if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
                mc.player.jump();
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
            }
        } else {
            resetMovementMove();
        }
    }

    private void adjustedStrafeKeybinds(double dx, double dz) {
        float yaw = mc.player.rotationYaw;
        double strafe = 0;

        double angleToTarget = Math.toDegrees(Math.atan2(dz, dx)) - 90 - yaw;
        angleToTarget = MathHelper.wrapDegrees((float) angleToTarget);

        if (Math.abs(angleToTarget) > 45 && Math.abs(angleToTarget) < 135) {
            strafe = angleToTarget > 0 ? 1.0 : -1.0;
        }

        mc.gameSettings.keyBindLeft.setPressed(strafe < -0.1);
        mc.gameSettings.keyBindRight.setPressed(strafe > 0.1);
    }

    private void resetMovementKeybinds() {
        mc.gameSettings.keyBindForward.setPressed(false);
        mc.gameSettings.keyBindBack.setPressed(false);
        mc.gameSettings.keyBindLeft.setPressed(false);
        mc.gameSettings.keyBindRight.setPressed(false);
        mc.gameSettings.keyBindSprint.setPressed(false);
        mc.gameSettings.keyBindJump.setPressed(false);
    }

    private void resetMovementMove() {
        mc.player.moveForward = 0.0f;
        mc.player.moveStrafing = 0.0f;
        mc.player.setSprinting(false);
    }

    private void pullCreeper(CreeperEntity creeper) {
        float[] rotations = Rotations(creeper);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);

        if (movementMode.get().equals("Keybinds")) {
            resetMovementKeybinds();
        } else {
            resetMovementMove();
        }
    }

    private void resetMovement() {
        if (movementMode.get().equals("Keybinds")) {
            resetMovementKeybinds();
        } else {
            resetMovementMove();
        }
    }

    //TechSystem
    private void attackCreeper(CreeperEntity creeper) {
        long currentTime = System.currentTimeMillis();
        if (currentTime - lastAttackTime >= 500) {
            double distance = mc.player.getDistance(creeper);
            if (distance <= 3.0 && creeper.getSwelling(1.0f) <= 0.5f) {
                mc.playerController.attackEntity(mc.player, creeper);
                mc.player.swingArm(Hand.MAIN_HAND);
                lastAttackTime = currentTime;
            }
        }
    }

    private void AutoReconnect() {
        long currentTime = System.currentTimeMillis();
        float intervalMinutes = reconnectIntervalSetting.get();
        long intervalMillis = (long) (intervalMinutes * 60 * 1000);

        if (currentTime - lastReconnectTime >= intervalMillis) {
            if (mc.player != null) {
                mc.player.sendChatMessage(".rct");
                lastReconnectTime = currentTime;
            }
        }
    }

    private float[] Rotations(Entity entity) {
        double x = entity.getPosX() - mc.player.getPosX();
        double y = entity.getPosY() - mc.player.getPosY() + entity.getEyeHeight() - mc.player.getEyeHeight();
        double z = entity.getPosZ() - mc.player.getPosZ();
        double dist = Math.sqrt(x * x + z * z);
        float yaw = (float) ((Math.atan2(z, x) * 180 / Math.PI) - 90);
        float pitch = (float) (-(Math.atan2(y, dist) * 180 / Math.PI));
        return new float[]{yaw, pitch};
    }

    private float[] RotationsAway(Entity entity) {
        double x = mc.player.getPosX() - entity.getPosX();
        double y = mc.player.getPosY() - entity.getPosY() + mc.player.getEyeHeight() - entity.getEyeHeight();
        double z = mc.player.getPosZ() - entity.getPosZ();
        double dist = Math.sqrt(x * x + z * z);
        float yaw = (float) ((Math.atan2(z, x) * 180 / Math.PI) - 90);
        float pitch = (float) (-(Math.atan2(y, dist) * 180 / Math.PI));
        return new float[]{yaw, pitch};
    }

    private float Rotation(float current, float target, float factor) {
        float delta = MathHelper.wrapDegrees(target - current);
        return current + delta * factor;
    }

    [USER=1367676]@override[/USER]
    public void onEnable() {
        super.onEnable();
        lastReconnectTime = System.currentTimeMillis();
        lastAttackTime = 0;
        isRetreating = false;
        retreatTicks = 0;
    }

    [USER=1367676]@override[/USER]
    public void onDisable() {
        super.onDisable();
        resetMovement();
        isRetreating = false;
        retreatTicks = 0;
        targetCreeper = null;
        targetGunpowder = null;
    }
}
---------------------------------

CreeperEntity:
Expand Collapse Copy
package net.minecraft.entity.monster;

import java.util.Collection;
import net.minecraft.entity.AreaEffectCloudEntity;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.IChargeableMob;
import net.minecraft.entity.ai.attributes.AttributeModifierMap;
import net.minecraft.entity.ai.attributes.Attributes;
import net.minecraft.entity.ai.goal.AvoidEntityGoal;
import net.minecraft.entity.ai.goal.CreeperSwellGoal;
import net.minecraft.entity.ai.goal.HurtByTargetGoal;
import net.minecraft.entity.ai.goal.LookAtGoal;
import net.minecraft.entity.ai.goal.LookRandomlyGoal;
import net.minecraft.entity.ai.goal.MeleeAttackGoal;
import net.minecraft.entity.ai.goal.NearestAttackableTargetGoal;
import net.minecraft.entity.ai.goal.SwimGoal;
import net.minecraft.entity.ai.goal.WaterAvoidingRandomWalkingGoal;
import net.minecraft.entity.effect.LightningBoltEntity;
import net.minecraft.entity.passive.CatEntity;
import net.minecraft.entity.passive.OcelotEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.datasync.DataParameter;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.network.datasync.EntityDataManager;
import net.minecraft.potion.EffectInstance;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Hand;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.Explosion;
import net.minecraft.world.GameRules;
import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;

public class CreeperEntity extends MonsterEntity implements IChargeableMob
{
    private static final DataParameter<Integer> STATE = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.VARINT);
    private static final DataParameter<Boolean> POWERED = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.BOOLEAN);
    private static final DataParameter<Boolean> IGNITED = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.BOOLEAN);
    private int lastActiveTime;
    private int timeSinceIgnited;
    private int fuseTime = 30;
    private int explosionRadius = 3;
    private int droppedSkulls;

    public CreeperEntity(EntityType <? extends CreeperEntity > type, World worldIn)
    {
        super(type, worldIn);
    }

    protected void registerGoals()
    {
        this.goalSelector.addGoal(1, new SwimGoal(this));
        this.goalSelector.addGoal(2, new CreeperSwellGoal(this));
        this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, OcelotEntity.class, 6.0F, 1.0D, 1.2D));
        this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, CatEntity.class, 6.0F, 1.0D, 1.2D));
        this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0D, false));
        this.goalSelector.addGoal(5, new WaterAvoidingRandomWalkingGoal(this, 0.8D));
        this.goalSelector.addGoal(6, new LookAtGoal(this, PlayerEntity.class, 8.0F));
        this.goalSelector.addGoal(6, new LookRandomlyGoal(this));
        this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, PlayerEntity.class, true));
        this.targetSelector.addGoal(2, new HurtByTargetGoal(this));
    }

    public static AttributeModifierMap.MutableAttribute registerAttributes()
    {
        return MonsterEntity.func_234295_eP_().createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.25D);
    }

    public int getMaxFallHeight()
    {
        return this.getAttackTarget() == null ? 3 : 3 + (int)(this.getHealth() - 1.0F);
    }

    public boolean onLivingFall(float distance, float damageMultiplier)
    {
        boolean flag = super.onLivingFall(distance, damageMultiplier);
        this.timeSinceIgnited = (int)((float)this.timeSinceIgnited + distance * 1.5F);

        if (this.timeSinceIgnited > this.fuseTime - 5)
        {
            this.timeSinceIgnited = this.fuseTime - 5;
        }

        return flag;
    }

    protected void registerData()
    {
        super.registerData();
        this.dataManager.register(STATE, -1);
        this.dataManager.register(POWERED, false);
        this.dataManager.register(IGNITED, false);
    }

    public void writeAdditional(CompoundNBT compound)
    {
        super.writeAdditional(compound);

        if (this.dataManager.get(POWERED))
        {
            compound.putBoolean("powered", true);
        }

        compound.putShort("Fuse", (short)this.fuseTime);
        compound.putByte("ExplosionRadius", (byte)this.explosionRadius);
        compound.putBoolean("ignited", this.hasIgnited());
    }

    public void readAdditional(CompoundNBT compound)
    {
        super.readAdditional(compound);
        this.dataManager.set(POWERED, compound.getBoolean("powered"));

        if (compound.contains("Fuse", 99))
        {
            this.fuseTime = compound.getShort("Fuse");
        }

        if (compound.contains("ExplosionRadius", 99))
        {
            this.explosionRadius = compound.getByte("ExplosionRadius");
        }

        if (compound.getBoolean("ignited"))
        {
            this.ignite();
        }
    }

    public void tick()
    {
        if (this.isAlive())
        {
            this.lastActiveTime = this.timeSinceIgnited;

            if (this.hasIgnited())
            {
                this.setCreeperState(1);
            }

            int i = this.getCreeperState();

            if (i > 0 && this.timeSinceIgnited == 0)
            {
                this.playSound(SoundEvents.ENTITY_CREEPER_PRIMED, 1.0F, 0.5F);
            }

            this.timeSinceIgnited += i;

            if (this.timeSinceIgnited < 0)
            {
                this.timeSinceIgnited = 0;
            }

            if (this.timeSinceIgnited >= this.fuseTime)
            {
                this.timeSinceIgnited = this.fuseTime;
                this.explode();
            }
        }

        super.tick();
    }

    protected SoundEvent getHurtSound(DamageSource damageSourceIn)
    {
        return SoundEvents.ENTITY_CREEPER_HURT;
    }

    protected SoundEvent getDeathSound()
    {
        return SoundEvents.ENTITY_CREEPER_DEATH;
    }

    protected void dropSpecialItems(DamageSource source, int looting, boolean recentlyHitIn)
    {
        super.dropSpecialItems(source, looting, recentlyHitIn);
        Entity entity = source.getTrueSource();

        if (entity != this && entity instanceof CreeperEntity)
        {
            CreeperEntity creeperentity = (CreeperEntity)entity;

            if (creeperentity.ableToCauseSkullDrop())
            {
                creeperentity.incrementDroppedSkulls();
                this.entityDropItem(Items.CREEPER_HEAD);
            }
        }
    }

    public boolean attackEntityAsMob(Entity entityIn)
    {
        return true;
    }

    public boolean isCharged()
    {
        return this.dataManager.get(POWERED);
    }

    public float getCreeperFlashIntensity(float partialTicks)
    {
        return MathHelper.lerp(partialTicks, (float)this.lastActiveTime, (float)this.timeSinceIgnited) / (float)(this.fuseTime - 2);
    }

    public int getCreeperState()
    {
        return this.dataManager.get(STATE);
    }

    public void setCreeperState(int state)
    {
        this.dataManager.set(STATE, state);
    }

    public void func_241841_a(ServerWorld p_241841_1_, LightningBoltEntity p_241841_2_)
    {
        super.func_241841_a(p_241841_1_, p_241841_2_);
        this.dataManager.set(POWERED, true);
    }

    protected ActionResultType func_230254_b_(PlayerEntity p_230254_1_, Hand p_230254_2_)
    {
        ItemStack itemstack = p_230254_1_.getHeldItem(p_230254_2_);

        if (itemstack.getItem() == Items.FLINT_AND_STEEL)
        {
            this.world.playSound(p_230254_1_, this.getPosX(), this.getPosY(), this.getPosZ(), SoundEvents.ITEM_FLINTANDSTEEL_USE, this.getSoundCategory(), 1.0F, this.rand.nextFloat() * 0.4F + 0.8F);

            if (!this.world.isRemote)
            {
                this.ignite();
                itemstack.damageItem(1, p_230254_1_, (player) ->
                {
                    player.sendBreakAnimation(p_230254_2_);
                });
            }

            return ActionResultType.func_233537_a_(this.world.isRemote);
        }
        else
        {
            return super.func_230254_b_(p_230254_1_, p_230254_2_);
        }
    }

    private void explode()
    {
        if (!this.world.isRemote)
        {
            Explosion.Mode explosion$mode = this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING) ? Explosion.Mode.DESTROY : Explosion.Mode.NONE;
            float f = this.isCharged() ? 2.0F : 1.0F;
            this.dead = true;
            this.world.createExplosion(this, this.getPosX(), this.getPosY(), this.getPosZ(), (float)this.explosionRadius * f, explosion$mode);
            this.remove();
            this.spawnLingeringCloud();
        }
    }

    private void spawnLingeringCloud()
    {
        Collection<EffectInstance> collection = this.getActivePotionEffects();

        if (!collection.isEmpty())
        {
            AreaEffectCloudEntity areaeffectcloudentity = new AreaEffectCloudEntity(this.world, this.getPosX(), this.getPosY(), this.getPosZ());
            areaeffectcloudentity.setRadius(2.5F);
            areaeffectcloudentity.setRadiusOnUse(-0.5F);
            areaeffectcloudentity.setWaitTime(10);
            areaeffectcloudentity.setDuration(areaeffectcloudentity.getDuration() / 2);
            areaeffectcloudentity.setRadiusPerTick(-areaeffectcloudentity.getRadius() / (float)areaeffectcloudentity.getDuration());

            for (EffectInstance effectinstance : collection)
            {
                areaeffectcloudentity.addEffect(new EffectInstance(effectinstance));
            }

            this.world.addEntity(areaeffectcloudentity);
        }
    }

    public boolean hasIgnited()
    {
        return this.dataManager.get(IGNITED);
    }

    public void ignite()
    {
        this.dataManager.set(IGNITED, true);
    }

    public boolean ableToCauseSkullDrop()
    {
        return this.isCharged() && this.droppedSkulls < 1;
    }

    public void incrementDroppedSkulls()
    {
        ++this.droppedSkulls;
    }
    public float getSwelling(float partialTicks) {
        float previousSwell = (float) this.lastActiveTime;
        float currentSwell = (float) this.timeSinceIgnited;
        float interpolatedSwell = MathHelper.lerp(partialTicks, previousSwell, currentSwell);
        float swell = interpolatedSwell / (float) this.fuseTime;
        return MathHelper.clamp(swell, 0.0F, 1.0F);
    }
}
your OBS is in Russian
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Instructions copy CreeperFarm create the CreeperFarm class in Misc or anywhere Ctrl+A + Ctrl+V then follow the path net.minecraft.entity.monster and look for CreeperEntity and add it to the getSwelling code now go to FunctionRegistry and write to the private CreeperFarm creeperFarm;
then we write in init creeperFarm = new CreeperFarm(),
HOORAY we did it all
Пожалуйста, авторизуйтесь для просмотра ссылки.


CreeperFarm:
Expand Collapse Copy
package im.expensive.functions.impl.misc;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventUpdate;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.BooleanSetting;
import im.expensive.functions.settings.impl.ModeSetting;
import im.expensive.functions.settings.impl.SliderSetting;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.monster.CreeperEntity;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceContext;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.vector.Vector3d;

@FunctionRegister(name = "CreeperFarm", type = Category.Misc)
public class CreeperFarm extends Function {
    //TechSystem
    private final ModeSetting modeSetting = new ModeSetting("Mode", "Usual", "Usual", "Farmilka");
    private final SliderSetting distanceSetting = new SliderSetting("Distance", 10.0f, 5.0f, 200.0f, 0.5f);
    private final BooleanSetting runModeSetting = new BooleanSetting("Running mode", true);
    private final ModeSetting movementMode = new ModeSetting("Type of movement", "Keybinds", "Keybinds", "Move")
            .setVisible(() -> runModeSetting.get());
    private final BooleanSetting autoReconnectSetting = new BooleanSetting("Auto-Reconnect", false);
    private final SliderSetting reconnectIntervalSetting = new SliderSetting("Re-entry interval (min)", 5.0f, 1.0f, 60.0f, 1.0f)
            .setVisible(() -> autoReconnectSetting.get());
    private final BooleanSetting retreatSetting = new BooleanSetting("Run away from the explosion", true);
    private final SliderSetting retreatDistanceSetting = new SliderSetting("Running distance", 7.0f, 3.0f, 15.0f, 0.5f)
            .setVisible(() -> retreatSetting.get());

    private static final Minecraft mc = Minecraft.getInstance();
    private CreeperEntity targetCreeper;
    private ItemEntity targetGunpowder;
    private long lastReconnectTime = 0;
    private long lastAttackTime = 0;
    private boolean isRetreating = false;
    private int retreatTicks = 0;

    public CreeperFarm() {
        addSettings(modeSetting, distanceSetting, runModeSetting, movementMode, retreatSetting, retreatDistanceSetting, autoReconnectSetting, reconnectIntervalSetting);
    }

    //TechSystem
    [USER=1474073]@Subscribe[/USER]
    public void onUpdate(EventUpdate event) {
        if (mc.world == null || mc.player == null) return;

        targetGunpowder = findClosestGunpowder();
        if (targetGunpowder != null) {
            runGunpowder(targetGunpowder);
            isRetreating = false;
            retreatTicks = 0;
            return;
        }

        targetCreeper = findClosestCreeper();
        if (targetCreeper == null) {
            resetMovement();
            isRetreating = false;
            retreatTicks = 0;
            return;
        }

        double distanceSq = mc.player.getDistanceSq(targetCreeper);
        if (distanceSq > distanceSetting.get() * distanceSetting.get()) {
            resetMovement();
            isRetreating = false;
            retreatTicks = 0;
            return;
        }

        if (!hasLine(targetCreeper)) {
            resetMovement();
            return;
        }

        float swell = targetCreeper.getSwelling(1.0f);
        float retreatThreshold = modeSetting.get().equals("Usual") ? 0.2f : 0.5f;
        if (retreatSetting.get() && swell > retreatThreshold) {
            retFromCreeper(targetCreeper);
            isRetreating = true;
            retreatTicks++;
            if (retreatTicks >= 40) {
                isRetreating = false;
                retreatTicks = 0;
            }
        } else {
            if (runModeSetting.get()) {
                runCreeper(targetCreeper);
            } else {
                pullCreeper(targetCreeper);
            }
            attackCreeper(targetCreeper);
            isRetreating = false;
        }

        if (autoReconnectSetting.get()) {
            AutoReconnect();
        }
    }

    //TechSystem
    private CreeperEntity findClosestCreeper() {
        CreeperEntity closestCreeper = null;
        double closestDistanceSq = Double.MAX_VALUE;

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof CreeperEntity creeper && creeper.isAlive()) {
                double distanceSq = mc.player.getDistanceSq(creeper);
                if (distanceSq < closestDistanceSq && distanceSq <= distanceSetting.get() * distanceSetting.get() && hasLine(creeper)) {
                    closestCreeper = creeper;
                    closestDistanceSq = distanceSq;
                }
            }
        }
        return closestCreeper;
    }

    private ItemEntity findClosestGunpowder() {
        ItemEntity closestGunpowder = null;
        double closestDistanceSq = Double.MAX_VALUE;

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof ItemEntity item && item.getItem().getItem() == Items.GUNPOWDER && item.isAlive()) {
                double distanceSq = mc.player.getDistanceSq(item);
                if (distanceSq < closestDistanceSq && distanceSq <= distanceSetting.get() * distanceSetting.get() && hasLine(item)) {
                    closestGunpowder = item;
                    closestDistanceSq = distanceSq;
                }
            }
        }
        return closestGunpowder;
    }

    private boolean hasLine(Entity entity) {
        Vector3d start = mc.player.getEyePosition(1.0F);
        Vector3d end = entity.getEyePosition(1.0F);
        RayTraceContext context = new RayTraceContext(start, end, RayTraceContext.BlockMode.COLLIDER, RayTraceContext.FluidMode.NONE, mc.player);
        RayTraceResult result = mc.world.rayTraceBlocks(context);
        return result.getType() == RayTraceResult.Type.MISS;
    }

    private boolean hasObstacle() {
        Vector3d start = mc.player.getEyePosition(1.0F);
        Vector3d forward = mc.player.getForward().scale(1.5);
        Vector3d end = start.add(forward);
        RayTraceContext context = new RayTraceContext(start, end, RayTraceContext.BlockMode.COLLIDER, RayTraceContext.FluidMode.NONE, mc.player);
        RayTraceResult result = mc.world.rayTraceBlocks(context);
        return result.getType() == RayTraceResult.Type.BLOCK;
    }

    //TechSystem
    private void runCreeper(CreeperEntity creeper) {
        float[] rotations = Rotations(creeper);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);

        if (movementMode.get().equals("Keybinds")) {
            runCreeperKeybinds(creeper);
        } else {
            runCreeperKeybinds(creeper);
        }
    }

    private void runCreeperKeybinds(CreeperEntity creeper) {
        double dx = creeper.getPosX() - mc.player.getPosX();
        double dz = creeper.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 2.0) {
            mc.gameSettings.keyBindForward.setPressed(true);
            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.gameSettings.keyBindSprint.setPressed(true);
            }
            if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
                mc.gameSettings.keyBindJump.setPressed(true);
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
                adjustedStrafeKeybinds(dx, dz);
            } else {
                adjustedStrafeKeybinds(dx, dz);
            }
        } else {
            resetMovementKeybinds();
        }
    }

    private void runCreeperMove(CreeperEntity creeper) {
        double dx = creeper.getPosX() - mc.player.getPosX();
        double dz = creeper.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 2.0) {
            double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
            double moveX = Math.sin(angle);
            double moveZ = Math.cos(angle);

            mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
            mc.player.moveStrafing = (float) moveX;

            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.player.setSprinting(true);
            } else {
                mc.player.setSprinting(false);
            }

            if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
                mc.player.jump();
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
            }
        } else {
            resetMovementMove();
        }
    }

    private void runGunpowder(ItemEntity gunpowder) {
        float[] rotations = Rotations(gunpowder);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);

        if (movementMode.get().equals("Keybinds")) {
            runGunpowderKeybinds(gunpowder);
        } else {
            runGunpowderMove(gunpowder);
        }
    }

    //TechSystem
    private void runGunpowderKeybinds(ItemEntity gunpowder) {
        double dx = gunpowder.getPosX() - mc.player.getPosX();
        double dz = gunpowder.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 1.0) {
            mc.gameSettings.keyBindForward.setPressed(true);
            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.gameSettings.keyBindSprint.setPressed(true);
            }
            if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
                mc.gameSettings.keyBindJump.setPressed(true);
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
                adjustedStrafeKeybinds(dx, dz);
            } else {
                adjustedStrafeKeybinds(dx, dz);
            }
        } else {
            resetMovementKeybinds();
        }
    }

    private void runGunpowderMove(ItemEntity gunpowder) {
        double dx = gunpowder.getPosX() - mc.player.getPosX();
        double dz = gunpowder.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 1.0) {
            double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
            double moveX = Math.sin(angle);
            double moveZ = Math.cos(angle);

            mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
            mc.player.moveStrafing = (float) moveX;

            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.player.setSprinting(true);
            } else {
                mc.player.setSprinting(false);
            }

            if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
                mc.player.jump();
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
            }
        } else {
            resetMovementMove();
        }
    }

    private void retFromCreeper(CreeperEntity creeper) {
        Vector3d playerPos = mc.player.getPositionVec();
        Vector3d creeperPos = creeper.getPositionVec();
        Vector3d direction = playerPos.subtract(creeperPos).normalize();

        float[] rotations = RotationsAway(creeper);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.8f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.8f);

        if (movementMode.get().equals("Keybinds")) {
            retFromCreeperKeybinds(direction);
        } else {
            retFromCreeperMove(direction);
        }
    }

    private void retFromCreeperKeybinds(Vector3d direction) {
        double retreatX = mc.player.getPosX() + direction.x * retreatDistanceSetting.get();
        double retreatZ = mc.player.getPosZ() + direction.z * retreatDistanceSetting.get();
        double dx = retreatX - mc.player.getPosX();
        double dz = retreatZ - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 0.1) {
            mc.gameSettings.keyBindForward.setPressed(true);
            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.gameSettings.keyBindSprint.setPressed(true);
            }
            if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
                mc.gameSettings.keyBindJump.setPressed(true);
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
                adjustedStrafeKeybinds(dx, dz);
            } else {
                adjustedStrafeKeybinds(dx, dz);
            }
        } else {
            resetMovementKeybinds();
        }
    }

    //TechSystem
    private void retFromCreeperMove(Vector3d direction) {
        double retreatX = mc.player.getPosX() + direction.x * retreatDistanceSetting.get();
        double retreatZ = mc.player.getPosZ() + direction.z * retreatDistanceSetting.get();
        double dx = retreatX - mc.player.getPosX();
        double dz = retreatZ - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 0.1) {
            double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
            double moveX = Math.sin(angle);
            double moveZ = Math.cos(angle);

            mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
            mc.player.moveStrafing = (float) moveX;

            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.player.setSprinting(true);
            } else {
                mc.player.setSprinting(false);
            }

            if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
                mc.player.jump();
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
            }
        } else {
            resetMovementMove();
        }
    }

    private void adjustedStrafeKeybinds(double dx, double dz) {
        float yaw = mc.player.rotationYaw;
        double strafe = 0;

        double angleToTarget = Math.toDegrees(Math.atan2(dz, dx)) - 90 - yaw;
        angleToTarget = MathHelper.wrapDegrees((float) angleToTarget);

        if (Math.abs(angleToTarget) > 45 && Math.abs(angleToTarget) < 135) {
            strafe = angleToTarget > 0 ? 1.0 : -1.0;
        }

        mc.gameSettings.keyBindLeft.setPressed(strafe < -0.1);
        mc.gameSettings.keyBindRight.setPressed(strafe > 0.1);
    }

    private void resetMovementKeybinds() {
        mc.gameSettings.keyBindForward.setPressed(false);
        mc.gameSettings.keyBindBack.setPressed(false);
        mc.gameSettings.keyBindLeft.setPressed(false);
        mc.gameSettings.keyBindRight.setPressed(false);
        mc.gameSettings.keyBindSprint.setPressed(false);
        mc.gameSettings.keyBindJump.setPressed(false);
    }

    private void resetMovementMove() {
        mc.player.moveForward = 0.0f;
        mc.player.moveStrafing = 0.0f;
        mc.player.setSprinting(false);
    }

    private void pullCreeper(CreeperEntity creeper) {
        float[] rotations = Rotations(creeper);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);

        if (movementMode.get().equals("Keybinds")) {
            resetMovementKeybinds();
        } else {
            resetMovementMove();
        }
    }

    private void resetMovement() {
        if (movementMode.get().equals("Keybinds")) {
            resetMovementKeybinds();
        } else {
            resetMovementMove();
        }
    }

    //TechSystem
    private void attackCreeper(CreeperEntity creeper) {
        long currentTime = System.currentTimeMillis();
        if (currentTime - lastAttackTime >= 500) {
            double distance = mc.player.getDistance(creeper);
            if (distance <= 3.0 && creeper.getSwelling(1.0f) <= 0.5f) {
                mc.playerController.attackEntity(mc.player, creeper);
                mc.player.swingArm(Hand.MAIN_HAND);
                lastAttackTime = currentTime;
            }
        }
    }

    private void AutoReconnect() {
        long currentTime = System.currentTimeMillis();
        float intervalMinutes = reconnectIntervalSetting.get();
        long intervalMillis = (long) (intervalMinutes * 60 * 1000);

        if (currentTime - lastReconnectTime >= intervalMillis) {
            if (mc.player != null) {
                mc.player.sendChatMessage(".rct");
                lastReconnectTime = currentTime;
            }
        }
    }

    private float[] Rotations(Entity entity) {
        double x = entity.getPosX() - mc.player.getPosX();
        double y = entity.getPosY() - mc.player.getPosY() + entity.getEyeHeight() - mc.player.getEyeHeight();
        double z = entity.getPosZ() - mc.player.getPosZ();
        double dist = Math.sqrt(x * x + z * z);
        float yaw = (float) ((Math.atan2(z, x) * 180 / Math.PI) - 90);
        float pitch = (float) (-(Math.atan2(y, dist) * 180 / Math.PI));
        return new float[]{yaw, pitch};
    }

    private float[] RotationsAway(Entity entity) {
        double x = mc.player.getPosX() - entity.getPosX();
        double y = mc.player.getPosY() - entity.getPosY() + mc.player.getEyeHeight() - entity.getEyeHeight();
        double z = mc.player.getPosZ() - entity.getPosZ();
        double dist = Math.sqrt(x * x + z * z);
        float yaw = (float) ((Math.atan2(z, x) * 180 / Math.PI) - 90);
        float pitch = (float) (-(Math.atan2(y, dist) * 180 / Math.PI));
        return new float[]{yaw, pitch};
    }

    private float Rotation(float current, float target, float factor) {
        float delta = MathHelper.wrapDegrees(target - current);
        return current + delta * factor;
    }

    [USER=1367676]@override[/USER]
    public void onEnable() {
        super.onEnable();
        lastReconnectTime = System.currentTimeMillis();
        lastAttackTime = 0;
        isRetreating = false;
        retreatTicks = 0;
    }

    [USER=1367676]@override[/USER]
    public void onDisable() {
        super.onDisable();
        resetMovement();
        isRetreating = false;
        retreatTicks = 0;
        targetCreeper = null;
        targetGunpowder = null;
    }
}
---------------------------------

CreeperEntity:
Expand Collapse Copy
package net.minecraft.entity.monster;

import java.util.Collection;
import net.minecraft.entity.AreaEffectCloudEntity;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.IChargeableMob;
import net.minecraft.entity.ai.attributes.AttributeModifierMap;
import net.minecraft.entity.ai.attributes.Attributes;
import net.minecraft.entity.ai.goal.AvoidEntityGoal;
import net.minecraft.entity.ai.goal.CreeperSwellGoal;
import net.minecraft.entity.ai.goal.HurtByTargetGoal;
import net.minecraft.entity.ai.goal.LookAtGoal;
import net.minecraft.entity.ai.goal.LookRandomlyGoal;
import net.minecraft.entity.ai.goal.MeleeAttackGoal;
import net.minecraft.entity.ai.goal.NearestAttackableTargetGoal;
import net.minecraft.entity.ai.goal.SwimGoal;
import net.minecraft.entity.ai.goal.WaterAvoidingRandomWalkingGoal;
import net.minecraft.entity.effect.LightningBoltEntity;
import net.minecraft.entity.passive.CatEntity;
import net.minecraft.entity.passive.OcelotEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.datasync.DataParameter;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.network.datasync.EntityDataManager;
import net.minecraft.potion.EffectInstance;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Hand;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.Explosion;
import net.minecraft.world.GameRules;
import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;

public class CreeperEntity extends MonsterEntity implements IChargeableMob
{
    private static final DataParameter<Integer> STATE = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.VARINT);
    private static final DataParameter<Boolean> POWERED = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.BOOLEAN);
    private static final DataParameter<Boolean> IGNITED = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.BOOLEAN);
    private int lastActiveTime;
    private int timeSinceIgnited;
    private int fuseTime = 30;
    private int explosionRadius = 3;
    private int droppedSkulls;

    public CreeperEntity(EntityType <? extends CreeperEntity > type, World worldIn)
    {
        super(type, worldIn);
    }

    protected void registerGoals()
    {
        this.goalSelector.addGoal(1, new SwimGoal(this));
        this.goalSelector.addGoal(2, new CreeperSwellGoal(this));
        this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, OcelotEntity.class, 6.0F, 1.0D, 1.2D));
        this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, CatEntity.class, 6.0F, 1.0D, 1.2D));
        this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0D, false));
        this.goalSelector.addGoal(5, new WaterAvoidingRandomWalkingGoal(this, 0.8D));
        this.goalSelector.addGoal(6, new LookAtGoal(this, PlayerEntity.class, 8.0F));
        this.goalSelector.addGoal(6, new LookRandomlyGoal(this));
        this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, PlayerEntity.class, true));
        this.targetSelector.addGoal(2, new HurtByTargetGoal(this));
    }

    public static AttributeModifierMap.MutableAttribute registerAttributes()
    {
        return MonsterEntity.func_234295_eP_().createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.25D);
    }

    public int getMaxFallHeight()
    {
        return this.getAttackTarget() == null ? 3 : 3 + (int)(this.getHealth() - 1.0F);
    }

    public boolean onLivingFall(float distance, float damageMultiplier)
    {
        boolean flag = super.onLivingFall(distance, damageMultiplier);
        this.timeSinceIgnited = (int)((float)this.timeSinceIgnited + distance * 1.5F);

        if (this.timeSinceIgnited > this.fuseTime - 5)
        {
            this.timeSinceIgnited = this.fuseTime - 5;
        }

        return flag;
    }

    protected void registerData()
    {
        super.registerData();
        this.dataManager.register(STATE, -1);
        this.dataManager.register(POWERED, false);
        this.dataManager.register(IGNITED, false);
    }

    public void writeAdditional(CompoundNBT compound)
    {
        super.writeAdditional(compound);

        if (this.dataManager.get(POWERED))
        {
            compound.putBoolean("powered", true);
        }

        compound.putShort("Fuse", (short)this.fuseTime);
        compound.putByte("ExplosionRadius", (byte)this.explosionRadius);
        compound.putBoolean("ignited", this.hasIgnited());
    }

    public void readAdditional(CompoundNBT compound)
    {
        super.readAdditional(compound);
        this.dataManager.set(POWERED, compound.getBoolean("powered"));

        if (compound.contains("Fuse", 99))
        {
            this.fuseTime = compound.getShort("Fuse");
        }

        if (compound.contains("ExplosionRadius", 99))
        {
            this.explosionRadius = compound.getByte("ExplosionRadius");
        }

        if (compound.getBoolean("ignited"))
        {
            this.ignite();
        }
    }

    public void tick()
    {
        if (this.isAlive())
        {
            this.lastActiveTime = this.timeSinceIgnited;

            if (this.hasIgnited())
            {
                this.setCreeperState(1);
            }

            int i = this.getCreeperState();

            if (i > 0 && this.timeSinceIgnited == 0)
            {
                this.playSound(SoundEvents.ENTITY_CREEPER_PRIMED, 1.0F, 0.5F);
            }

            this.timeSinceIgnited += i;

            if (this.timeSinceIgnited < 0)
            {
                this.timeSinceIgnited = 0;
            }

            if (this.timeSinceIgnited >= this.fuseTime)
            {
                this.timeSinceIgnited = this.fuseTime;
                this.explode();
            }
        }

        super.tick();
    }

    protected SoundEvent getHurtSound(DamageSource damageSourceIn)
    {
        return SoundEvents.ENTITY_CREEPER_HURT;
    }

    protected SoundEvent getDeathSound()
    {
        return SoundEvents.ENTITY_CREEPER_DEATH;
    }

    protected void dropSpecialItems(DamageSource source, int looting, boolean recentlyHitIn)
    {
        super.dropSpecialItems(source, looting, recentlyHitIn);
        Entity entity = source.getTrueSource();

        if (entity != this && entity instanceof CreeperEntity)
        {
            CreeperEntity creeperentity = (CreeperEntity)entity;

            if (creeperentity.ableToCauseSkullDrop())
            {
                creeperentity.incrementDroppedSkulls();
                this.entityDropItem(Items.CREEPER_HEAD);
            }
        }
    }

    public boolean attackEntityAsMob(Entity entityIn)
    {
        return true;
    }

    public boolean isCharged()
    {
        return this.dataManager.get(POWERED);
    }

    public float getCreeperFlashIntensity(float partialTicks)
    {
        return MathHelper.lerp(partialTicks, (float)this.lastActiveTime, (float)this.timeSinceIgnited) / (float)(this.fuseTime - 2);
    }

    public int getCreeperState()
    {
        return this.dataManager.get(STATE);
    }

    public void setCreeperState(int state)
    {
        this.dataManager.set(STATE, state);
    }

    public void func_241841_a(ServerWorld p_241841_1_, LightningBoltEntity p_241841_2_)
    {
        super.func_241841_a(p_241841_1_, p_241841_2_);
        this.dataManager.set(POWERED, true);
    }

    protected ActionResultType func_230254_b_(PlayerEntity p_230254_1_, Hand p_230254_2_)
    {
        ItemStack itemstack = p_230254_1_.getHeldItem(p_230254_2_);

        if (itemstack.getItem() == Items.FLINT_AND_STEEL)
        {
            this.world.playSound(p_230254_1_, this.getPosX(), this.getPosY(), this.getPosZ(), SoundEvents.ITEM_FLINTANDSTEEL_USE, this.getSoundCategory(), 1.0F, this.rand.nextFloat() * 0.4F + 0.8F);

            if (!this.world.isRemote)
            {
                this.ignite();
                itemstack.damageItem(1, p_230254_1_, (player) ->
                {
                    player.sendBreakAnimation(p_230254_2_);
                });
            }

            return ActionResultType.func_233537_a_(this.world.isRemote);
        }
        else
        {
            return super.func_230254_b_(p_230254_1_, p_230254_2_);
        }
    }

    private void explode()
    {
        if (!this.world.isRemote)
        {
            Explosion.Mode explosion$mode = this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING) ? Explosion.Mode.DESTROY : Explosion.Mode.NONE;
            float f = this.isCharged() ? 2.0F : 1.0F;
            this.dead = true;
            this.world.createExplosion(this, this.getPosX(), this.getPosY(), this.getPosZ(), (float)this.explosionRadius * f, explosion$mode);
            this.remove();
            this.spawnLingeringCloud();
        }
    }

    private void spawnLingeringCloud()
    {
        Collection<EffectInstance> collection = this.getActivePotionEffects();

        if (!collection.isEmpty())
        {
            AreaEffectCloudEntity areaeffectcloudentity = new AreaEffectCloudEntity(this.world, this.getPosX(), this.getPosY(), this.getPosZ());
            areaeffectcloudentity.setRadius(2.5F);
            areaeffectcloudentity.setRadiusOnUse(-0.5F);
            areaeffectcloudentity.setWaitTime(10);
            areaeffectcloudentity.setDuration(areaeffectcloudentity.getDuration() / 2);
            areaeffectcloudentity.setRadiusPerTick(-areaeffectcloudentity.getRadius() / (float)areaeffectcloudentity.getDuration());

            for (EffectInstance effectinstance : collection)
            {
                areaeffectcloudentity.addEffect(new EffectInstance(effectinstance));
            }

            this.world.addEntity(areaeffectcloudentity);
        }
    }

    public boolean hasIgnited()
    {
        return this.dataManager.get(IGNITED);
    }

    public void ignite()
    {
        this.dataManager.set(IGNITED, true);
    }

    public boolean ableToCauseSkullDrop()
    {
        return this.isCharged() && this.droppedSkulls < 1;
    }

    public void incrementDroppedSkulls()
    {
        ++this.droppedSkulls;
    }
    public float getSwelling(float partialTicks) {
        float previousSwell = (float) this.lastActiveTime;
        float currentSwell = (float) this.timeSinceIgnited;
        float interpolatedSwell = MathHelper.lerp(partialTicks, previousSwell, currentSwell);
        float swell = interpolatedSwell / (float) this.fuseTime;
        return MathHelper.clamp(swell, 0.0F, 1.0F);
    }
}
yes bro u are very english!!!!!
 
Instructions copy CreeperFarm create the CreeperFarm class in Misc or anywhere Ctrl+A + Ctrl+V then follow the path net.minecraft.entity.monster and look for CreeperEntity and add it to the getSwelling code now go to FunctionRegistry and write to the private CreeperFarm creeperFarm;
then we write in init creeperFarm = new CreeperFarm(),
HOORAY we did it all
Пожалуйста, авторизуйтесь для просмотра ссылки.


CreeperFarm:
Expand Collapse Copy
package im.expensive.functions.impl.misc;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventUpdate;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.BooleanSetting;
import im.expensive.functions.settings.impl.ModeSetting;
import im.expensive.functions.settings.impl.SliderSetting;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.monster.CreeperEntity;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceContext;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.vector.Vector3d;

@FunctionRegister(name = "CreeperFarm", type = Category.Misc)
public class CreeperFarm extends Function {
    //TechSystem
    private final ModeSetting modeSetting = new ModeSetting("Mode", "Usual", "Usual", "Farmilka");
    private final SliderSetting distanceSetting = new SliderSetting("Distance", 10.0f, 5.0f, 200.0f, 0.5f);
    private final BooleanSetting runModeSetting = new BooleanSetting("Running mode", true);
    private final ModeSetting movementMode = new ModeSetting("Type of movement", "Keybinds", "Keybinds", "Move")
            .setVisible(() -> runModeSetting.get());
    private final BooleanSetting autoReconnectSetting = new BooleanSetting("Auto-Reconnect", false);
    private final SliderSetting reconnectIntervalSetting = new SliderSetting("Re-entry interval (min)", 5.0f, 1.0f, 60.0f, 1.0f)
            .setVisible(() -> autoReconnectSetting.get());
    private final BooleanSetting retreatSetting = new BooleanSetting("Run away from the explosion", true);
    private final SliderSetting retreatDistanceSetting = new SliderSetting("Running distance", 7.0f, 3.0f, 15.0f, 0.5f)
            .setVisible(() -> retreatSetting.get());

    private static final Minecraft mc = Minecraft.getInstance();
    private CreeperEntity targetCreeper;
    private ItemEntity targetGunpowder;
    private long lastReconnectTime = 0;
    private long lastAttackTime = 0;
    private boolean isRetreating = false;
    private int retreatTicks = 0;

    public CreeperFarm() {
        addSettings(modeSetting, distanceSetting, runModeSetting, movementMode, retreatSetting, retreatDistanceSetting, autoReconnectSetting, reconnectIntervalSetting);
    }

    //TechSystem
    [USER=1474073]@Subscribe[/USER]
    public void onUpdate(EventUpdate event) {
        if (mc.world == null || mc.player == null) return;

        targetGunpowder = findClosestGunpowder();
        if (targetGunpowder != null) {
            runGunpowder(targetGunpowder);
            isRetreating = false;
            retreatTicks = 0;
            return;
        }

        targetCreeper = findClosestCreeper();
        if (targetCreeper == null) {
            resetMovement();
            isRetreating = false;
            retreatTicks = 0;
            return;
        }

        double distanceSq = mc.player.getDistanceSq(targetCreeper);
        if (distanceSq > distanceSetting.get() * distanceSetting.get()) {
            resetMovement();
            isRetreating = false;
            retreatTicks = 0;
            return;
        }

        if (!hasLine(targetCreeper)) {
            resetMovement();
            return;
        }

        float swell = targetCreeper.getSwelling(1.0f);
        float retreatThreshold = modeSetting.get().equals("Usual") ? 0.2f : 0.5f;
        if (retreatSetting.get() && swell > retreatThreshold) {
            retFromCreeper(targetCreeper);
            isRetreating = true;
            retreatTicks++;
            if (retreatTicks >= 40) {
                isRetreating = false;
                retreatTicks = 0;
            }
        } else {
            if (runModeSetting.get()) {
                runCreeper(targetCreeper);
            } else {
                pullCreeper(targetCreeper);
            }
            attackCreeper(targetCreeper);
            isRetreating = false;
        }

        if (autoReconnectSetting.get()) {
            AutoReconnect();
        }
    }

    //TechSystem
    private CreeperEntity findClosestCreeper() {
        CreeperEntity closestCreeper = null;
        double closestDistanceSq = Double.MAX_VALUE;

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof CreeperEntity creeper && creeper.isAlive()) {
                double distanceSq = mc.player.getDistanceSq(creeper);
                if (distanceSq < closestDistanceSq && distanceSq <= distanceSetting.get() * distanceSetting.get() && hasLine(creeper)) {
                    closestCreeper = creeper;
                    closestDistanceSq = distanceSq;
                }
            }
        }
        return closestCreeper;
    }

    private ItemEntity findClosestGunpowder() {
        ItemEntity closestGunpowder = null;
        double closestDistanceSq = Double.MAX_VALUE;

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof ItemEntity item && item.getItem().getItem() == Items.GUNPOWDER && item.isAlive()) {
                double distanceSq = mc.player.getDistanceSq(item);
                if (distanceSq < closestDistanceSq && distanceSq <= distanceSetting.get() * distanceSetting.get() && hasLine(item)) {
                    closestGunpowder = item;
                    closestDistanceSq = distanceSq;
                }
            }
        }
        return closestGunpowder;
    }

    private boolean hasLine(Entity entity) {
        Vector3d start = mc.player.getEyePosition(1.0F);
        Vector3d end = entity.getEyePosition(1.0F);
        RayTraceContext context = new RayTraceContext(start, end, RayTraceContext.BlockMode.COLLIDER, RayTraceContext.FluidMode.NONE, mc.player);
        RayTraceResult result = mc.world.rayTraceBlocks(context);
        return result.getType() == RayTraceResult.Type.MISS;
    }

    private boolean hasObstacle() {
        Vector3d start = mc.player.getEyePosition(1.0F);
        Vector3d forward = mc.player.getForward().scale(1.5);
        Vector3d end = start.add(forward);
        RayTraceContext context = new RayTraceContext(start, end, RayTraceContext.BlockMode.COLLIDER, RayTraceContext.FluidMode.NONE, mc.player);
        RayTraceResult result = mc.world.rayTraceBlocks(context);
        return result.getType() == RayTraceResult.Type.BLOCK;
    }

    //TechSystem
    private void runCreeper(CreeperEntity creeper) {
        float[] rotations = Rotations(creeper);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);

        if (movementMode.get().equals("Keybinds")) {
            runCreeperKeybinds(creeper);
        } else {
            runCreeperKeybinds(creeper);
        }
    }

    private void runCreeperKeybinds(CreeperEntity creeper) {
        double dx = creeper.getPosX() - mc.player.getPosX();
        double dz = creeper.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 2.0) {
            mc.gameSettings.keyBindForward.setPressed(true);
            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.gameSettings.keyBindSprint.setPressed(true);
            }
            if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
                mc.gameSettings.keyBindJump.setPressed(true);
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
                adjustedStrafeKeybinds(dx, dz);
            } else {
                adjustedStrafeKeybinds(dx, dz);
            }
        } else {
            resetMovementKeybinds();
        }
    }

    private void runCreeperMove(CreeperEntity creeper) {
        double dx = creeper.getPosX() - mc.player.getPosX();
        double dz = creeper.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 2.0) {
            double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
            double moveX = Math.sin(angle);
            double moveZ = Math.cos(angle);

            mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
            mc.player.moveStrafing = (float) moveX;

            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.player.setSprinting(true);
            } else {
                mc.player.setSprinting(false);
            }

            if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
                mc.player.jump();
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
            }
        } else {
            resetMovementMove();
        }
    }

    private void runGunpowder(ItemEntity gunpowder) {
        float[] rotations = Rotations(gunpowder);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);

        if (movementMode.get().equals("Keybinds")) {
            runGunpowderKeybinds(gunpowder);
        } else {
            runGunpowderMove(gunpowder);
        }
    }

    //TechSystem
    private void runGunpowderKeybinds(ItemEntity gunpowder) {
        double dx = gunpowder.getPosX() - mc.player.getPosX();
        double dz = gunpowder.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 1.0) {
            mc.gameSettings.keyBindForward.setPressed(true);
            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.gameSettings.keyBindSprint.setPressed(true);
            }
            if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
                mc.gameSettings.keyBindJump.setPressed(true);
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
                adjustedStrafeKeybinds(dx, dz);
            } else {
                adjustedStrafeKeybinds(dx, dz);
            }
        } else {
            resetMovementKeybinds();
        }
    }

    private void runGunpowderMove(ItemEntity gunpowder) {
        double dx = gunpowder.getPosX() - mc.player.getPosX();
        double dz = gunpowder.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 1.0) {
            double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
            double moveX = Math.sin(angle);
            double moveZ = Math.cos(angle);

            mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
            mc.player.moveStrafing = (float) moveX;

            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.player.setSprinting(true);
            } else {
                mc.player.setSprinting(false);
            }

            if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
                mc.player.jump();
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
            }
        } else {
            resetMovementMove();
        }
    }

    private void retFromCreeper(CreeperEntity creeper) {
        Vector3d playerPos = mc.player.getPositionVec();
        Vector3d creeperPos = creeper.getPositionVec();
        Vector3d direction = playerPos.subtract(creeperPos).normalize();

        float[] rotations = RotationsAway(creeper);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.8f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.8f);

        if (movementMode.get().equals("Keybinds")) {
            retFromCreeperKeybinds(direction);
        } else {
            retFromCreeperMove(direction);
        }
    }

    private void retFromCreeperKeybinds(Vector3d direction) {
        double retreatX = mc.player.getPosX() + direction.x * retreatDistanceSetting.get();
        double retreatZ = mc.player.getPosZ() + direction.z * retreatDistanceSetting.get();
        double dx = retreatX - mc.player.getPosX();
        double dz = retreatZ - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 0.1) {
            mc.gameSettings.keyBindForward.setPressed(true);
            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.gameSettings.keyBindSprint.setPressed(true);
            }
            if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
                mc.gameSettings.keyBindJump.setPressed(true);
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
                adjustedStrafeKeybinds(dx, dz);
            } else {
                adjustedStrafeKeybinds(dx, dz);
            }
        } else {
            resetMovementKeybinds();
        }
    }

    //TechSystem
    private void retFromCreeperMove(Vector3d direction) {
        double retreatX = mc.player.getPosX() + direction.x * retreatDistanceSetting.get();
        double retreatZ = mc.player.getPosZ() + direction.z * retreatDistanceSetting.get();
        double dx = retreatX - mc.player.getPosX();
        double dz = retreatZ - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 0.1) {
            double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
            double moveX = Math.sin(angle);
            double moveZ = Math.cos(angle);

            mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
            mc.player.moveStrafing = (float) moveX;

            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.player.setSprinting(true);
            } else {
                mc.player.setSprinting(false);
            }

            if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
                mc.player.jump();
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
            }
        } else {
            resetMovementMove();
        }
    }

    private void adjustedStrafeKeybinds(double dx, double dz) {
        float yaw = mc.player.rotationYaw;
        double strafe = 0;

        double angleToTarget = Math.toDegrees(Math.atan2(dz, dx)) - 90 - yaw;
        angleToTarget = MathHelper.wrapDegrees((float) angleToTarget);

        if (Math.abs(angleToTarget) > 45 && Math.abs(angleToTarget) < 135) {
            strafe = angleToTarget > 0 ? 1.0 : -1.0;
        }

        mc.gameSettings.keyBindLeft.setPressed(strafe < -0.1);
        mc.gameSettings.keyBindRight.setPressed(strafe > 0.1);
    }

    private void resetMovementKeybinds() {
        mc.gameSettings.keyBindForward.setPressed(false);
        mc.gameSettings.keyBindBack.setPressed(false);
        mc.gameSettings.keyBindLeft.setPressed(false);
        mc.gameSettings.keyBindRight.setPressed(false);
        mc.gameSettings.keyBindSprint.setPressed(false);
        mc.gameSettings.keyBindJump.setPressed(false);
    }

    private void resetMovementMove() {
        mc.player.moveForward = 0.0f;
        mc.player.moveStrafing = 0.0f;
        mc.player.setSprinting(false);
    }

    private void pullCreeper(CreeperEntity creeper) {
        float[] rotations = Rotations(creeper);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);

        if (movementMode.get().equals("Keybinds")) {
            resetMovementKeybinds();
        } else {
            resetMovementMove();
        }
    }

    private void resetMovement() {
        if (movementMode.get().equals("Keybinds")) {
            resetMovementKeybinds();
        } else {
            resetMovementMove();
        }
    }

    //TechSystem
    private void attackCreeper(CreeperEntity creeper) {
        long currentTime = System.currentTimeMillis();
        if (currentTime - lastAttackTime >= 500) {
            double distance = mc.player.getDistance(creeper);
            if (distance <= 3.0 && creeper.getSwelling(1.0f) <= 0.5f) {
                mc.playerController.attackEntity(mc.player, creeper);
                mc.player.swingArm(Hand.MAIN_HAND);
                lastAttackTime = currentTime;
            }
        }
    }

    private void AutoReconnect() {
        long currentTime = System.currentTimeMillis();
        float intervalMinutes = reconnectIntervalSetting.get();
        long intervalMillis = (long) (intervalMinutes * 60 * 1000);

        if (currentTime - lastReconnectTime >= intervalMillis) {
            if (mc.player != null) {
                mc.player.sendChatMessage(".rct");
                lastReconnectTime = currentTime;
            }
        }
    }

    private float[] Rotations(Entity entity) {
        double x = entity.getPosX() - mc.player.getPosX();
        double y = entity.getPosY() - mc.player.getPosY() + entity.getEyeHeight() - mc.player.getEyeHeight();
        double z = entity.getPosZ() - mc.player.getPosZ();
        double dist = Math.sqrt(x * x + z * z);
        float yaw = (float) ((Math.atan2(z, x) * 180 / Math.PI) - 90);
        float pitch = (float) (-(Math.atan2(y, dist) * 180 / Math.PI));
        return new float[]{yaw, pitch};
    }

    private float[] RotationsAway(Entity entity) {
        double x = mc.player.getPosX() - entity.getPosX();
        double y = mc.player.getPosY() - entity.getPosY() + mc.player.getEyeHeight() - entity.getEyeHeight();
        double z = mc.player.getPosZ() - entity.getPosZ();
        double dist = Math.sqrt(x * x + z * z);
        float yaw = (float) ((Math.atan2(z, x) * 180 / Math.PI) - 90);
        float pitch = (float) (-(Math.atan2(y, dist) * 180 / Math.PI));
        return new float[]{yaw, pitch};
    }

    private float Rotation(float current, float target, float factor) {
        float delta = MathHelper.wrapDegrees(target - current);
        return current + delta * factor;
    }

    [USER=1367676]@override[/USER]
    public void onEnable() {
        super.onEnable();
        lastReconnectTime = System.currentTimeMillis();
        lastAttackTime = 0;
        isRetreating = false;
        retreatTicks = 0;
    }

    [USER=1367676]@override[/USER]
    public void onDisable() {
        super.onDisable();
        resetMovement();
        isRetreating = false;
        retreatTicks = 0;
        targetCreeper = null;
        targetGunpowder = null;
    }
}
---------------------------------

CreeperEntity:
Expand Collapse Copy
package net.minecraft.entity.monster;

import java.util.Collection;
import net.minecraft.entity.AreaEffectCloudEntity;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.IChargeableMob;
import net.minecraft.entity.ai.attributes.AttributeModifierMap;
import net.minecraft.entity.ai.attributes.Attributes;
import net.minecraft.entity.ai.goal.AvoidEntityGoal;
import net.minecraft.entity.ai.goal.CreeperSwellGoal;
import net.minecraft.entity.ai.goal.HurtByTargetGoal;
import net.minecraft.entity.ai.goal.LookAtGoal;
import net.minecraft.entity.ai.goal.LookRandomlyGoal;
import net.minecraft.entity.ai.goal.MeleeAttackGoal;
import net.minecraft.entity.ai.goal.NearestAttackableTargetGoal;
import net.minecraft.entity.ai.goal.SwimGoal;
import net.minecraft.entity.ai.goal.WaterAvoidingRandomWalkingGoal;
import net.minecraft.entity.effect.LightningBoltEntity;
import net.minecraft.entity.passive.CatEntity;
import net.minecraft.entity.passive.OcelotEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.datasync.DataParameter;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.network.datasync.EntityDataManager;
import net.minecraft.potion.EffectInstance;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Hand;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.Explosion;
import net.minecraft.world.GameRules;
import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;

public class CreeperEntity extends MonsterEntity implements IChargeableMob
{
    private static final DataParameter<Integer> STATE = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.VARINT);
    private static final DataParameter<Boolean> POWERED = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.BOOLEAN);
    private static final DataParameter<Boolean> IGNITED = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.BOOLEAN);
    private int lastActiveTime;
    private int timeSinceIgnited;
    private int fuseTime = 30;
    private int explosionRadius = 3;
    private int droppedSkulls;

    public CreeperEntity(EntityType <? extends CreeperEntity > type, World worldIn)
    {
        super(type, worldIn);
    }

    protected void registerGoals()
    {
        this.goalSelector.addGoal(1, new SwimGoal(this));
        this.goalSelector.addGoal(2, new CreeperSwellGoal(this));
        this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, OcelotEntity.class, 6.0F, 1.0D, 1.2D));
        this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, CatEntity.class, 6.0F, 1.0D, 1.2D));
        this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0D, false));
        this.goalSelector.addGoal(5, new WaterAvoidingRandomWalkingGoal(this, 0.8D));
        this.goalSelector.addGoal(6, new LookAtGoal(this, PlayerEntity.class, 8.0F));
        this.goalSelector.addGoal(6, new LookRandomlyGoal(this));
        this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, PlayerEntity.class, true));
        this.targetSelector.addGoal(2, new HurtByTargetGoal(this));
    }

    public static AttributeModifierMap.MutableAttribute registerAttributes()
    {
        return MonsterEntity.func_234295_eP_().createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.25D);
    }

    public int getMaxFallHeight()
    {
        return this.getAttackTarget() == null ? 3 : 3 + (int)(this.getHealth() - 1.0F);
    }

    public boolean onLivingFall(float distance, float damageMultiplier)
    {
        boolean flag = super.onLivingFall(distance, damageMultiplier);
        this.timeSinceIgnited = (int)((float)this.timeSinceIgnited + distance * 1.5F);

        if (this.timeSinceIgnited > this.fuseTime - 5)
        {
            this.timeSinceIgnited = this.fuseTime - 5;
        }

        return flag;
    }

    protected void registerData()
    {
        super.registerData();
        this.dataManager.register(STATE, -1);
        this.dataManager.register(POWERED, false);
        this.dataManager.register(IGNITED, false);
    }

    public void writeAdditional(CompoundNBT compound)
    {
        super.writeAdditional(compound);

        if (this.dataManager.get(POWERED))
        {
            compound.putBoolean("powered", true);
        }

        compound.putShort("Fuse", (short)this.fuseTime);
        compound.putByte("ExplosionRadius", (byte)this.explosionRadius);
        compound.putBoolean("ignited", this.hasIgnited());
    }

    public void readAdditional(CompoundNBT compound)
    {
        super.readAdditional(compound);
        this.dataManager.set(POWERED, compound.getBoolean("powered"));

        if (compound.contains("Fuse", 99))
        {
            this.fuseTime = compound.getShort("Fuse");
        }

        if (compound.contains("ExplosionRadius", 99))
        {
            this.explosionRadius = compound.getByte("ExplosionRadius");
        }

        if (compound.getBoolean("ignited"))
        {
            this.ignite();
        }
    }

    public void tick()
    {
        if (this.isAlive())
        {
            this.lastActiveTime = this.timeSinceIgnited;

            if (this.hasIgnited())
            {
                this.setCreeperState(1);
            }

            int i = this.getCreeperState();

            if (i > 0 && this.timeSinceIgnited == 0)
            {
                this.playSound(SoundEvents.ENTITY_CREEPER_PRIMED, 1.0F, 0.5F);
            }

            this.timeSinceIgnited += i;

            if (this.timeSinceIgnited < 0)
            {
                this.timeSinceIgnited = 0;
            }

            if (this.timeSinceIgnited >= this.fuseTime)
            {
                this.timeSinceIgnited = this.fuseTime;
                this.explode();
            }
        }

        super.tick();
    }

    protected SoundEvent getHurtSound(DamageSource damageSourceIn)
    {
        return SoundEvents.ENTITY_CREEPER_HURT;
    }

    protected SoundEvent getDeathSound()
    {
        return SoundEvents.ENTITY_CREEPER_DEATH;
    }

    protected void dropSpecialItems(DamageSource source, int looting, boolean recentlyHitIn)
    {
        super.dropSpecialItems(source, looting, recentlyHitIn);
        Entity entity = source.getTrueSource();

        if (entity != this && entity instanceof CreeperEntity)
        {
            CreeperEntity creeperentity = (CreeperEntity)entity;

            if (creeperentity.ableToCauseSkullDrop())
            {
                creeperentity.incrementDroppedSkulls();
                this.entityDropItem(Items.CREEPER_HEAD);
            }
        }
    }

    public boolean attackEntityAsMob(Entity entityIn)
    {
        return true;
    }

    public boolean isCharged()
    {
        return this.dataManager.get(POWERED);
    }

    public float getCreeperFlashIntensity(float partialTicks)
    {
        return MathHelper.lerp(partialTicks, (float)this.lastActiveTime, (float)this.timeSinceIgnited) / (float)(this.fuseTime - 2);
    }

    public int getCreeperState()
    {
        return this.dataManager.get(STATE);
    }

    public void setCreeperState(int state)
    {
        this.dataManager.set(STATE, state);
    }

    public void func_241841_a(ServerWorld p_241841_1_, LightningBoltEntity p_241841_2_)
    {
        super.func_241841_a(p_241841_1_, p_241841_2_);
        this.dataManager.set(POWERED, true);
    }

    protected ActionResultType func_230254_b_(PlayerEntity p_230254_1_, Hand p_230254_2_)
    {
        ItemStack itemstack = p_230254_1_.getHeldItem(p_230254_2_);

        if (itemstack.getItem() == Items.FLINT_AND_STEEL)
        {
            this.world.playSound(p_230254_1_, this.getPosX(), this.getPosY(), this.getPosZ(), SoundEvents.ITEM_FLINTANDSTEEL_USE, this.getSoundCategory(), 1.0F, this.rand.nextFloat() * 0.4F + 0.8F);

            if (!this.world.isRemote)
            {
                this.ignite();
                itemstack.damageItem(1, p_230254_1_, (player) ->
                {
                    player.sendBreakAnimation(p_230254_2_);
                });
            }

            return ActionResultType.func_233537_a_(this.world.isRemote);
        }
        else
        {
            return super.func_230254_b_(p_230254_1_, p_230254_2_);
        }
    }

    private void explode()
    {
        if (!this.world.isRemote)
        {
            Explosion.Mode explosion$mode = this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING) ? Explosion.Mode.DESTROY : Explosion.Mode.NONE;
            float f = this.isCharged() ? 2.0F : 1.0F;
            this.dead = true;
            this.world.createExplosion(this, this.getPosX(), this.getPosY(), this.getPosZ(), (float)this.explosionRadius * f, explosion$mode);
            this.remove();
            this.spawnLingeringCloud();
        }
    }

    private void spawnLingeringCloud()
    {
        Collection<EffectInstance> collection = this.getActivePotionEffects();

        if (!collection.isEmpty())
        {
            AreaEffectCloudEntity areaeffectcloudentity = new AreaEffectCloudEntity(this.world, this.getPosX(), this.getPosY(), this.getPosZ());
            areaeffectcloudentity.setRadius(2.5F);
            areaeffectcloudentity.setRadiusOnUse(-0.5F);
            areaeffectcloudentity.setWaitTime(10);
            areaeffectcloudentity.setDuration(areaeffectcloudentity.getDuration() / 2);
            areaeffectcloudentity.setRadiusPerTick(-areaeffectcloudentity.getRadius() / (float)areaeffectcloudentity.getDuration());

            for (EffectInstance effectinstance : collection)
            {
                areaeffectcloudentity.addEffect(new EffectInstance(effectinstance));
            }

            this.world.addEntity(areaeffectcloudentity);
        }
    }

    public boolean hasIgnited()
    {
        return this.dataManager.get(IGNITED);
    }

    public void ignite()
    {
        this.dataManager.set(IGNITED, true);
    }

    public boolean ableToCauseSkullDrop()
    {
        return this.isCharged() && this.droppedSkulls < 1;
    }

    public void incrementDroppedSkulls()
    {
        ++this.droppedSkulls;
    }
    public float getSwelling(float partialTicks) {
        float previousSwell = (float) this.lastActiveTime;
        float currentSwell = (float) this.timeSinceIgnited;
        float interpolatedSwell = MathHelper.lerp(partialTicks, previousSwell, currentSwell);
        float swell = interpolatedSwell / (float) this.fuseTime;
        return MathHelper.clamp(swell, 0.0F, 1.0F);
    }
}
If it's not on Baritone then it's terrible.
 
Master perevodchika, specialno tak pisal chtob be zasrali za govno kod?
 
Instructions copy CreeperFarm create the CreeperFarm class in Misc or anywhere Ctrl+A + Ctrl+V then follow the path net.minecraft.entity.monster and look for CreeperEntity and add it to the getSwelling code now go to FunctionRegistry and write to the private CreeperFarm creeperFarm;
then we write in init creeperFarm = new CreeperFarm(),
HOORAY we did it all
1745073546973.png
oh nooo, you really eu boy??
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Instructions copy CreeperFarm create the CreeperFarm class in Misc or anywhere Ctrl+A + Ctrl+V then follow the path net.minecraft.entity.monster and look for CreeperEntity and add it to the getSwelling code now go to FunctionRegistry and write to the private CreeperFarm creeperFarm;
then we write in init creeperFarm = new CreeperFarm(),
HOORAY we did it all
Пожалуйста, авторизуйтесь для просмотра ссылки.


CreeperFarm:
Expand Collapse Copy
package im.expensive.functions.impl.misc;

import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventUpdate;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.BooleanSetting;
import im.expensive.functions.settings.impl.ModeSetting;
import im.expensive.functions.settings.impl.SliderSetting;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.monster.CreeperEntity;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceContext;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.vector.Vector3d;

@FunctionRegister(name = "CreeperFarm", type = Category.Misc)
public class CreeperFarm extends Function {
    //TechSystem
    private final ModeSetting modeSetting = new ModeSetting("Mode", "Usual", "Usual", "Farmilka");
    private final SliderSetting distanceSetting = new SliderSetting("Distance", 10.0f, 5.0f, 200.0f, 0.5f);
    private final BooleanSetting runModeSetting = new BooleanSetting("Running mode", true);
    private final ModeSetting movementMode = new ModeSetting("Type of movement", "Keybinds", "Keybinds", "Move")
            .setVisible(() -> runModeSetting.get());
    private final BooleanSetting autoReconnectSetting = new BooleanSetting("Auto-Reconnect", false);
    private final SliderSetting reconnectIntervalSetting = new SliderSetting("Re-entry interval (min)", 5.0f, 1.0f, 60.0f, 1.0f)
            .setVisible(() -> autoReconnectSetting.get());
    private final BooleanSetting retreatSetting = new BooleanSetting("Run away from the explosion", true);
    private final SliderSetting retreatDistanceSetting = new SliderSetting("Running distance", 7.0f, 3.0f, 15.0f, 0.5f)
            .setVisible(() -> retreatSetting.get());

    private static final Minecraft mc = Minecraft.getInstance();
    private CreeperEntity targetCreeper;
    private ItemEntity targetGunpowder;
    private long lastReconnectTime = 0;
    private long lastAttackTime = 0;
    private boolean isRetreating = false;
    private int retreatTicks = 0;

    public CreeperFarm() {
        addSettings(modeSetting, distanceSetting, runModeSetting, movementMode, retreatSetting, retreatDistanceSetting, autoReconnectSetting, reconnectIntervalSetting);
    }

    //TechSystem
    [USER=1474073]@Subscribe[/USER]
    public void onUpdate(EventUpdate event) {
        if (mc.world == null || mc.player == null) return;

        targetGunpowder = findClosestGunpowder();
        if (targetGunpowder != null) {
            runGunpowder(targetGunpowder);
            isRetreating = false;
            retreatTicks = 0;
            return;
        }

        targetCreeper = findClosestCreeper();
        if (targetCreeper == null) {
            resetMovement();
            isRetreating = false;
            retreatTicks = 0;
            return;
        }

        double distanceSq = mc.player.getDistanceSq(targetCreeper);
        if (distanceSq > distanceSetting.get() * distanceSetting.get()) {
            resetMovement();
            isRetreating = false;
            retreatTicks = 0;
            return;
        }

        if (!hasLine(targetCreeper)) {
            resetMovement();
            return;
        }

        float swell = targetCreeper.getSwelling(1.0f);
        float retreatThreshold = modeSetting.get().equals("Usual") ? 0.2f : 0.5f;
        if (retreatSetting.get() && swell > retreatThreshold) {
            retFromCreeper(targetCreeper);
            isRetreating = true;
            retreatTicks++;
            if (retreatTicks >= 40) {
                isRetreating = false;
                retreatTicks = 0;
            }
        } else {
            if (runModeSetting.get()) {
                runCreeper(targetCreeper);
            } else {
                pullCreeper(targetCreeper);
            }
            attackCreeper(targetCreeper);
            isRetreating = false;
        }

        if (autoReconnectSetting.get()) {
            AutoReconnect();
        }
    }

    //TechSystem
    private CreeperEntity findClosestCreeper() {
        CreeperEntity closestCreeper = null;
        double closestDistanceSq = Double.MAX_VALUE;

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof CreeperEntity creeper && creeper.isAlive()) {
                double distanceSq = mc.player.getDistanceSq(creeper);
                if (distanceSq < closestDistanceSq && distanceSq <= distanceSetting.get() * distanceSetting.get() && hasLine(creeper)) {
                    closestCreeper = creeper;
                    closestDistanceSq = distanceSq;
                }
            }
        }
        return closestCreeper;
    }

    private ItemEntity findClosestGunpowder() {
        ItemEntity closestGunpowder = null;
        double closestDistanceSq = Double.MAX_VALUE;

        for (Entity entity : mc.world.getAllEntities()) {
            if (entity instanceof ItemEntity item && item.getItem().getItem() == Items.GUNPOWDER && item.isAlive()) {
                double distanceSq = mc.player.getDistanceSq(item);
                if (distanceSq < closestDistanceSq && distanceSq <= distanceSetting.get() * distanceSetting.get() && hasLine(item)) {
                    closestGunpowder = item;
                    closestDistanceSq = distanceSq;
                }
            }
        }
        return closestGunpowder;
    }

    private boolean hasLine(Entity entity) {
        Vector3d start = mc.player.getEyePosition(1.0F);
        Vector3d end = entity.getEyePosition(1.0F);
        RayTraceContext context = new RayTraceContext(start, end, RayTraceContext.BlockMode.COLLIDER, RayTraceContext.FluidMode.NONE, mc.player);
        RayTraceResult result = mc.world.rayTraceBlocks(context);
        return result.getType() == RayTraceResult.Type.MISS;
    }

    private boolean hasObstacle() {
        Vector3d start = mc.player.getEyePosition(1.0F);
        Vector3d forward = mc.player.getForward().scale(1.5);
        Vector3d end = start.add(forward);
        RayTraceContext context = new RayTraceContext(start, end, RayTraceContext.BlockMode.COLLIDER, RayTraceContext.FluidMode.NONE, mc.player);
        RayTraceResult result = mc.world.rayTraceBlocks(context);
        return result.getType() == RayTraceResult.Type.BLOCK;
    }

    //TechSystem
    private void runCreeper(CreeperEntity creeper) {
        float[] rotations = Rotations(creeper);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);

        if (movementMode.get().equals("Keybinds")) {
            runCreeperKeybinds(creeper);
        } else {
            runCreeperKeybinds(creeper);
        }
    }

    private void runCreeperKeybinds(CreeperEntity creeper) {
        double dx = creeper.getPosX() - mc.player.getPosX();
        double dz = creeper.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 2.0) {
            mc.gameSettings.keyBindForward.setPressed(true);
            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.gameSettings.keyBindSprint.setPressed(true);
            }
            if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
                mc.gameSettings.keyBindJump.setPressed(true);
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
                adjustedStrafeKeybinds(dx, dz);
            } else {
                adjustedStrafeKeybinds(dx, dz);
            }
        } else {
            resetMovementKeybinds();
        }
    }

    private void runCreeperMove(CreeperEntity creeper) {
        double dx = creeper.getPosX() - mc.player.getPosX();
        double dz = creeper.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 2.0) {
            double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
            double moveX = Math.sin(angle);
            double moveZ = Math.cos(angle);

            mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
            mc.player.moveStrafing = (float) moveX;

            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.player.setSprinting(true);
            } else {
                mc.player.setSprinting(false);
            }

            if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
                mc.player.jump();
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
            }
        } else {
            resetMovementMove();
        }
    }

    private void runGunpowder(ItemEntity gunpowder) {
        float[] rotations = Rotations(gunpowder);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);

        if (movementMode.get().equals("Keybinds")) {
            runGunpowderKeybinds(gunpowder);
        } else {
            runGunpowderMove(gunpowder);
        }
    }

    //TechSystem
    private void runGunpowderKeybinds(ItemEntity gunpowder) {
        double dx = gunpowder.getPosX() - mc.player.getPosX();
        double dz = gunpowder.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 1.0) {
            mc.gameSettings.keyBindForward.setPressed(true);
            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.gameSettings.keyBindSprint.setPressed(true);
            }
            if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
                mc.gameSettings.keyBindJump.setPressed(true);
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
                adjustedStrafeKeybinds(dx, dz);
            } else {
                adjustedStrafeKeybinds(dx, dz);
            }
        } else {
            resetMovementKeybinds();
        }
    }

    private void runGunpowderMove(ItemEntity gunpowder) {
        double dx = gunpowder.getPosX() - mc.player.getPosX();
        double dz = gunpowder.getPosZ() - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 1.0) {
            double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
            double moveX = Math.sin(angle);
            double moveZ = Math.cos(angle);

            mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
            mc.player.moveStrafing = (float) moveX;

            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.player.setSprinting(true);
            } else {
                mc.player.setSprinting(false);
            }

            if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
                mc.player.jump();
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
            }
        } else {
            resetMovementMove();
        }
    }

    private void retFromCreeper(CreeperEntity creeper) {
        Vector3d playerPos = mc.player.getPositionVec();
        Vector3d creeperPos = creeper.getPositionVec();
        Vector3d direction = playerPos.subtract(creeperPos).normalize();

        float[] rotations = RotationsAway(creeper);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.8f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.8f);

        if (movementMode.get().equals("Keybinds")) {
            retFromCreeperKeybinds(direction);
        } else {
            retFromCreeperMove(direction);
        }
    }

    private void retFromCreeperKeybinds(Vector3d direction) {
        double retreatX = mc.player.getPosX() + direction.x * retreatDistanceSetting.get();
        double retreatZ = mc.player.getPosZ() + direction.z * retreatDistanceSetting.get();
        double dx = retreatX - mc.player.getPosX();
        double dz = retreatZ - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 0.1) {
            mc.gameSettings.keyBindForward.setPressed(true);
            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.gameSettings.keyBindSprint.setPressed(true);
            }
            if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
                mc.gameSettings.keyBindJump.setPressed(true);
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
                adjustedStrafeKeybinds(dx, dz);
            } else {
                adjustedStrafeKeybinds(dx, dz);
            }
        } else {
            resetMovementKeybinds();
        }
    }

    //TechSystem
    private void retFromCreeperMove(Vector3d direction) {
        double retreatX = mc.player.getPosX() + direction.x * retreatDistanceSetting.get();
        double retreatZ = mc.player.getPosZ() + direction.z * retreatDistanceSetting.get();
        double dx = retreatX - mc.player.getPosX();
        double dz = retreatZ - mc.player.getPosZ();
        double distance = Math.sqrt(dx * dx + dz * dz);

        if (distance > 0.1) {
            double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
            double moveX = Math.sin(angle);
            double moveZ = Math.cos(angle);

            mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
            mc.player.moveStrafing = (float) moveX;

            if (mc.player.getFoodStats().getFoodLevel() > 6) {
                mc.player.setSprinting(true);
            } else {
                mc.player.setSprinting(false);
            }

            if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
                mc.player.jump();
                if (modeSetting.get().equals("Farmilka")) {
                    mc.player.jumpTicks = 0;
                }
            }
        } else {
            resetMovementMove();
        }
    }

    private void adjustedStrafeKeybinds(double dx, double dz) {
        float yaw = mc.player.rotationYaw;
        double strafe = 0;

        double angleToTarget = Math.toDegrees(Math.atan2(dz, dx)) - 90 - yaw;
        angleToTarget = MathHelper.wrapDegrees((float) angleToTarget);

        if (Math.abs(angleToTarget) > 45 && Math.abs(angleToTarget) < 135) {
            strafe = angleToTarget > 0 ? 1.0 : -1.0;
        }

        mc.gameSettings.keyBindLeft.setPressed(strafe < -0.1);
        mc.gameSettings.keyBindRight.setPressed(strafe > 0.1);
    }

    private void resetMovementKeybinds() {
        mc.gameSettings.keyBindForward.setPressed(false);
        mc.gameSettings.keyBindBack.setPressed(false);
        mc.gameSettings.keyBindLeft.setPressed(false);
        mc.gameSettings.keyBindRight.setPressed(false);
        mc.gameSettings.keyBindSprint.setPressed(false);
        mc.gameSettings.keyBindJump.setPressed(false);
    }

    private void resetMovementMove() {
        mc.player.moveForward = 0.0f;
        mc.player.moveStrafing = 0.0f;
        mc.player.setSprinting(false);
    }

    private void pullCreeper(CreeperEntity creeper) {
        float[] rotations = Rotations(creeper);
        mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
        mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);

        if (movementMode.get().equals("Keybinds")) {
            resetMovementKeybinds();
        } else {
            resetMovementMove();
        }
    }

    private void resetMovement() {
        if (movementMode.get().equals("Keybinds")) {
            resetMovementKeybinds();
        } else {
            resetMovementMove();
        }
    }

    //TechSystem
    private void attackCreeper(CreeperEntity creeper) {
        long currentTime = System.currentTimeMillis();
        if (currentTime - lastAttackTime >= 500) {
            double distance = mc.player.getDistance(creeper);
            if (distance <= 3.0 && creeper.getSwelling(1.0f) <= 0.5f) {
                mc.playerController.attackEntity(mc.player, creeper);
                mc.player.swingArm(Hand.MAIN_HAND);
                lastAttackTime = currentTime;
            }
        }
    }

    private void AutoReconnect() {
        long currentTime = System.currentTimeMillis();
        float intervalMinutes = reconnectIntervalSetting.get();
        long intervalMillis = (long) (intervalMinutes * 60 * 1000);

        if (currentTime - lastReconnectTime >= intervalMillis) {
            if (mc.player != null) {
                mc.player.sendChatMessage(".rct");
                lastReconnectTime = currentTime;
            }
        }
    }

    private float[] Rotations(Entity entity) {
        double x = entity.getPosX() - mc.player.getPosX();
        double y = entity.getPosY() - mc.player.getPosY() + entity.getEyeHeight() - mc.player.getEyeHeight();
        double z = entity.getPosZ() - mc.player.getPosZ();
        double dist = Math.sqrt(x * x + z * z);
        float yaw = (float) ((Math.atan2(z, x) * 180 / Math.PI) - 90);
        float pitch = (float) (-(Math.atan2(y, dist) * 180 / Math.PI));
        return new float[]{yaw, pitch};
    }

    private float[] RotationsAway(Entity entity) {
        double x = mc.player.getPosX() - entity.getPosX();
        double y = mc.player.getPosY() - entity.getPosY() + mc.player.getEyeHeight() - entity.getEyeHeight();
        double z = mc.player.getPosZ() - entity.getPosZ();
        double dist = Math.sqrt(x * x + z * z);
        float yaw = (float) ((Math.atan2(z, x) * 180 / Math.PI) - 90);
        float pitch = (float) (-(Math.atan2(y, dist) * 180 / Math.PI));
        return new float[]{yaw, pitch};
    }

    private float Rotation(float current, float target, float factor) {
        float delta = MathHelper.wrapDegrees(target - current);
        return current + delta * factor;
    }

    [USER=1367676]@override[/USER]
    public void onEnable() {
        super.onEnable();
        lastReconnectTime = System.currentTimeMillis();
        lastAttackTime = 0;
        isRetreating = false;
        retreatTicks = 0;
    }

    [USER=1367676]@override[/USER]
    public void onDisable() {
        super.onDisable();
        resetMovement();
        isRetreating = false;
        retreatTicks = 0;
        targetCreeper = null;
        targetGunpowder = null;
    }
}
---------------------------------

CreeperEntity:
Expand Collapse Copy
package net.minecraft.entity.monster;

import java.util.Collection;
import net.minecraft.entity.AreaEffectCloudEntity;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.IChargeableMob;
import net.minecraft.entity.ai.attributes.AttributeModifierMap;
import net.minecraft.entity.ai.attributes.Attributes;
import net.minecraft.entity.ai.goal.AvoidEntityGoal;
import net.minecraft.entity.ai.goal.CreeperSwellGoal;
import net.minecraft.entity.ai.goal.HurtByTargetGoal;
import net.minecraft.entity.ai.goal.LookAtGoal;
import net.minecraft.entity.ai.goal.LookRandomlyGoal;
import net.minecraft.entity.ai.goal.MeleeAttackGoal;
import net.minecraft.entity.ai.goal.NearestAttackableTargetGoal;
import net.minecraft.entity.ai.goal.SwimGoal;
import net.minecraft.entity.ai.goal.WaterAvoidingRandomWalkingGoal;
import net.minecraft.entity.effect.LightningBoltEntity;
import net.minecraft.entity.passive.CatEntity;
import net.minecraft.entity.passive.OcelotEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.datasync.DataParameter;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.network.datasync.EntityDataManager;
import net.minecraft.potion.EffectInstance;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Hand;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.Explosion;
import net.minecraft.world.GameRules;
import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;

public class CreeperEntity extends MonsterEntity implements IChargeableMob
{
    private static final DataParameter<Integer> STATE = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.VARINT);
    private static final DataParameter<Boolean> POWERED = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.BOOLEAN);
    private static final DataParameter<Boolean> IGNITED = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.BOOLEAN);
    private int lastActiveTime;
    private int timeSinceIgnited;
    private int fuseTime = 30;
    private int explosionRadius = 3;
    private int droppedSkulls;

    public CreeperEntity(EntityType <? extends CreeperEntity > type, World worldIn)
    {
        super(type, worldIn);
    }

    protected void registerGoals()
    {
        this.goalSelector.addGoal(1, new SwimGoal(this));
        this.goalSelector.addGoal(2, new CreeperSwellGoal(this));
        this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, OcelotEntity.class, 6.0F, 1.0D, 1.2D));
        this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, CatEntity.class, 6.0F, 1.0D, 1.2D));
        this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0D, false));
        this.goalSelector.addGoal(5, new WaterAvoidingRandomWalkingGoal(this, 0.8D));
        this.goalSelector.addGoal(6, new LookAtGoal(this, PlayerEntity.class, 8.0F));
        this.goalSelector.addGoal(6, new LookRandomlyGoal(this));
        this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, PlayerEntity.class, true));
        this.targetSelector.addGoal(2, new HurtByTargetGoal(this));
    }

    public static AttributeModifierMap.MutableAttribute registerAttributes()
    {
        return MonsterEntity.func_234295_eP_().createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.25D);
    }

    public int getMaxFallHeight()
    {
        return this.getAttackTarget() == null ? 3 : 3 + (int)(this.getHealth() - 1.0F);
    }

    public boolean onLivingFall(float distance, float damageMultiplier)
    {
        boolean flag = super.onLivingFall(distance, damageMultiplier);
        this.timeSinceIgnited = (int)((float)this.timeSinceIgnited + distance * 1.5F);

        if (this.timeSinceIgnited > this.fuseTime - 5)
        {
            this.timeSinceIgnited = this.fuseTime - 5;
        }

        return flag;
    }

    protected void registerData()
    {
        super.registerData();
        this.dataManager.register(STATE, -1);
        this.dataManager.register(POWERED, false);
        this.dataManager.register(IGNITED, false);
    }

    public void writeAdditional(CompoundNBT compound)
    {
        super.writeAdditional(compound);

        if (this.dataManager.get(POWERED))
        {
            compound.putBoolean("powered", true);
        }

        compound.putShort("Fuse", (short)this.fuseTime);
        compound.putByte("ExplosionRadius", (byte)this.explosionRadius);
        compound.putBoolean("ignited", this.hasIgnited());
    }

    public void readAdditional(CompoundNBT compound)
    {
        super.readAdditional(compound);
        this.dataManager.set(POWERED, compound.getBoolean("powered"));

        if (compound.contains("Fuse", 99))
        {
            this.fuseTime = compound.getShort("Fuse");
        }

        if (compound.contains("ExplosionRadius", 99))
        {
            this.explosionRadius = compound.getByte("ExplosionRadius");
        }

        if (compound.getBoolean("ignited"))
        {
            this.ignite();
        }
    }

    public void tick()
    {
        if (this.isAlive())
        {
            this.lastActiveTime = this.timeSinceIgnited;

            if (this.hasIgnited())
            {
                this.setCreeperState(1);
            }

            int i = this.getCreeperState();

            if (i > 0 && this.timeSinceIgnited == 0)
            {
                this.playSound(SoundEvents.ENTITY_CREEPER_PRIMED, 1.0F, 0.5F);
            }

            this.timeSinceIgnited += i;

            if (this.timeSinceIgnited < 0)
            {
                this.timeSinceIgnited = 0;
            }

            if (this.timeSinceIgnited >= this.fuseTime)
            {
                this.timeSinceIgnited = this.fuseTime;
                this.explode();
            }
        }

        super.tick();
    }

    protected SoundEvent getHurtSound(DamageSource damageSourceIn)
    {
        return SoundEvents.ENTITY_CREEPER_HURT;
    }

    protected SoundEvent getDeathSound()
    {
        return SoundEvents.ENTITY_CREEPER_DEATH;
    }

    protected void dropSpecialItems(DamageSource source, int looting, boolean recentlyHitIn)
    {
        super.dropSpecialItems(source, looting, recentlyHitIn);
        Entity entity = source.getTrueSource();

        if (entity != this && entity instanceof CreeperEntity)
        {
            CreeperEntity creeperentity = (CreeperEntity)entity;

            if (creeperentity.ableToCauseSkullDrop())
            {
                creeperentity.incrementDroppedSkulls();
                this.entityDropItem(Items.CREEPER_HEAD);
            }
        }
    }

    public boolean attackEntityAsMob(Entity entityIn)
    {
        return true;
    }

    public boolean isCharged()
    {
        return this.dataManager.get(POWERED);
    }

    public float getCreeperFlashIntensity(float partialTicks)
    {
        return MathHelper.lerp(partialTicks, (float)this.lastActiveTime, (float)this.timeSinceIgnited) / (float)(this.fuseTime - 2);
    }

    public int getCreeperState()
    {
        return this.dataManager.get(STATE);
    }

    public void setCreeperState(int state)
    {
        this.dataManager.set(STATE, state);
    }

    public void func_241841_a(ServerWorld p_241841_1_, LightningBoltEntity p_241841_2_)
    {
        super.func_241841_a(p_241841_1_, p_241841_2_);
        this.dataManager.set(POWERED, true);
    }

    protected ActionResultType func_230254_b_(PlayerEntity p_230254_1_, Hand p_230254_2_)
    {
        ItemStack itemstack = p_230254_1_.getHeldItem(p_230254_2_);

        if (itemstack.getItem() == Items.FLINT_AND_STEEL)
        {
            this.world.playSound(p_230254_1_, this.getPosX(), this.getPosY(), this.getPosZ(), SoundEvents.ITEM_FLINTANDSTEEL_USE, this.getSoundCategory(), 1.0F, this.rand.nextFloat() * 0.4F + 0.8F);

            if (!this.world.isRemote)
            {
                this.ignite();
                itemstack.damageItem(1, p_230254_1_, (player) ->
                {
                    player.sendBreakAnimation(p_230254_2_);
                });
            }

            return ActionResultType.func_233537_a_(this.world.isRemote);
        }
        else
        {
            return super.func_230254_b_(p_230254_1_, p_230254_2_);
        }
    }

    private void explode()
    {
        if (!this.world.isRemote)
        {
            Explosion.Mode explosion$mode = this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING) ? Explosion.Mode.DESTROY : Explosion.Mode.NONE;
            float f = this.isCharged() ? 2.0F : 1.0F;
            this.dead = true;
            this.world.createExplosion(this, this.getPosX(), this.getPosY(), this.getPosZ(), (float)this.explosionRadius * f, explosion$mode);
            this.remove();
            this.spawnLingeringCloud();
        }
    }

    private void spawnLingeringCloud()
    {
        Collection<EffectInstance> collection = this.getActivePotionEffects();

        if (!collection.isEmpty())
        {
            AreaEffectCloudEntity areaeffectcloudentity = new AreaEffectCloudEntity(this.world, this.getPosX(), this.getPosY(), this.getPosZ());
            areaeffectcloudentity.setRadius(2.5F);
            areaeffectcloudentity.setRadiusOnUse(-0.5F);
            areaeffectcloudentity.setWaitTime(10);
            areaeffectcloudentity.setDuration(areaeffectcloudentity.getDuration() / 2);
            areaeffectcloudentity.setRadiusPerTick(-areaeffectcloudentity.getRadius() / (float)areaeffectcloudentity.getDuration());

            for (EffectInstance effectinstance : collection)
            {
                areaeffectcloudentity.addEffect(new EffectInstance(effectinstance));
            }

            this.world.addEntity(areaeffectcloudentity);
        }
    }

    public boolean hasIgnited()
    {
        return this.dataManager.get(IGNITED);
    }

    public void ignite()
    {
        this.dataManager.set(IGNITED, true);
    }

    public boolean ableToCauseSkullDrop()
    {
        return this.isCharged() && this.droppedSkulls < 1;
    }

    public void incrementDroppedSkulls()
    {
        ++this.droppedSkulls;
    }
    public float getSwelling(float partialTicks) {
        float previousSwell = (float) this.lastActiveTime;
        float currentSwell = (float) this.timeSinceIgnited;
        float interpolatedSwell = MathHelper.lerp(partialTicks, previousSwell, currentSwell);
        float swell = interpolatedSwell / (float) this.fuseTime;
        return MathHelper.clamp(swell, 0.0F, 1.0F);
    }
}
вери вери вери шит код мабой, ю джаб ис полная хуйня
 
зделай на баритоне
 
ему вообще пох на крипера, гвно
 

Похожие темы

Назад
Сверху Снизу