Начинающий
- Статус
- Оффлайн
- Регистрация
- 11 Май 2025
- Сообщения
- 12
- Реакции
- 0
- Выберите загрузчик игры
- Прочие моды
Всем привет, югейм, впервые что то заливаю на этот форум.
Не видел ни какой функции на этом форуме связанной с баритоном, поэтому решил сделать криперфарм как в нурике(noad) омг
Работает он через команду + функцию, гпт код присутствует
можно доработать, ведь есть 2 главные проблемы
1. Иногда пытается пройти через полублоки, секунды 2-3
2. Время от времени флагает и тепает назад на секунд 5
!!Важно!!
- Это не гайд по установке баритона
которенький гайд.
1. создаете файлик CreeperFarm.java в misc
2. регаете ее в FunctionRegistry (Надеюсь вопросов не будет
)
3. идете по пути im.expensive.command.imp.feature и создаете файлик CreeperFarmCommand.java
4. Заходите в Expensive.java и в войде initCommands вставляете
Модеры одобрите пж
Не видел ни какой функции на этом форуме связанной с баритоном, поэтому решил сделать криперфарм как в нурике(noad) омг

Пожалуйста, авторизуйтесь для просмотра ссылки.
Работает он через команду + функцию, гпт код присутствует
можно доработать, ведь есть 2 главные проблемы
1. Иногда пытается пройти через полублоки, секунды 2-3
2. Время от времени флагает и тепает назад на секунд 5

!!Важно!!
- Это не гайд по установке баритона
CreeperFarm.java:
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.main.baritone.api.BaritoneAPI;
import im.expensive.main.baritone.api.IBaritone;
import im.expensive.main.baritone.api.Settings;
import im.expensive.main.baritone.api.pathing.goals.GoalBlock;
import im.expensive.main.baritone.api.pathing.goals.GoalXZ;
import im.expensive.utils.math.StopWatch;
import net.minecraft.block.TrapDoorBlock;
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.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.vector.Vector3d;
import java.util.List;
@FunctionRegister(
name = "Auto Creeper Farm",
description = "Автоматически фармит криперов и собирает порох/опыт",
type = Category.Misc
)
public class CreeperFarm extends Function {
private static BlockPos pos1;
private static BlockPos pos2;
public static void setPos1(BlockPos pos) { pos1 = pos; }
public static void setPos2(BlockPos pos) { pos2 = pos; }
public static void clearPositions() {
pos1 = null;
pos2 = null;
}
private static final double ATTACK_DISTANCE = 3.5;
private static final double RETREAT_DISTANCE = 15;
private static final double SAFE_Loot_RADIUS = 4.0;
private static final long ATTACK_COOLDOWN = 500;
private enum State {
SEARCH, APPROACH, ATTACK, RETREAT, PATROL, LOOTING
}
private State state = State.SEARCH;
private final StopWatch attackTimer = new StopWatch();
private BlockPos[] patrolPoints;
private int patrolIndex = 0;
@Override
public boolean onEnable() {
if (mc.player == null || mc.world == null) return false;
Settings s = BaritoneAPI.getSettings();
s.allowPlace.value = false;
s.allowBreak.value = false;
s.legitMine.value = true;
buildPatrolPoints();
patrolIndex = 0;
state = State.SEARCH;
attackTimer.reset();
return super.onEnable();
}
@Subscribe
public void onUpdate(EventUpdate e) {
if (mc.player == null || mc.world == null || pos1 == null || pos2 == null) return;
IBaritone baritone = BaritoneAPI.getProvider().getPrimaryBaritone();
handleTrapdoorJump();
CreeperEntity exploding = findExplodingCreeper();
if (exploding != null) {
Vector3d dir = mc.player.getPositionVec().subtract(exploding.getPositionVec()).normalize();
Vector3d retreat = mc.player.getPositionVec().add(dir.scale(RETREAT_DISTANCE));
state = State.RETREAT;
move(baritone, retreat);
lookWaypoint(retreat);
return;
}
ItemEntity loot = findSafeLoot();
if (loot != null) {
state = State.LOOTING;
Vector3d pos = loot.getPositionVec();
move(baritone, pos);
lookWaypoint(pos);
return;
}
CreeperEntity creeper = findClosestCreeper();
if (creeper != null) {
double dist = mc.player.getDistance(creeper);
if (dist <= ATTACK_DISTANCE) {
state = State.ATTACK;
baritone.getPathingBehavior().cancelEverything();
if (attackTimer.isReached(ATTACK_COOLDOWN)) {
mc.playerController.attackEntity(mc.player, creeper);
mc.player.swingArm(Hand.MAIN_HAND);
attackTimer.reset();
}
} else {
state = State.APPROACH;
Vector3d pos = creeper.getPositionVec();
move(baritone, pos);
lookWaypoint(pos);
}
return;
}
patrol(baritone);
}
private ItemEntity findSafeLoot() {
ItemEntity item = findClosestItem(Items.GUNPOWDER);
if (item == null) item = findClosestItem(Items.EXPERIENCE_BOTTLE);
if (item != null) {
List<CreeperEntity> nearbyCreepers = mc.world.getEntitiesWithinAABB(
CreeperEntity.class,
item.getBoundingBox().grow(SAFE_Loot_RADIUS)
);
if (nearbyCreepers.isEmpty()) {
return item;
}
}
return null;
}
private void patrol(IBaritone baritone) {
if (patrolPoints == null || patrolPoints.length == 0) return;
BlockPos target = patrolPoints[patrolIndex];
double distSq = mc.player.getDistanceSq(target.getX() + 0.5, target.getY(), target.getZ() + 0.5);
if (distSq < 2.0) {
patrolIndex = (patrolIndex + 1) % patrolPoints.length;
target = patrolPoints[patrolIndex];
}
state = State.PATROL;
baritone.getCustomGoalProcess().setGoalAndPath(new GoalBlock(target));
lookWaypoint(new Vector3d(target.getX() + 0.5, target.getY(), target.getZ() + 0.5));
}
private void buildPatrolPoints() {
if (pos1 == null || pos2 == null) return;
int minX = Math.min(pos1.getX(), pos2.getX());
int maxX = Math.max(pos1.getX(), pos2.getX());
int minZ = Math.min(pos1.getZ(), pos2.getZ());
int maxZ = Math.max(pos1.getZ(), pos2.getZ());
int y = (int) mc.player.getPosY();
patrolPoints = new BlockPos[]{
new BlockPos(minX, y, minZ),
new BlockPos(maxX, y, minZ),
new BlockPos(maxX, y, maxZ),
new BlockPos(minX, y, maxZ)
};
}
private void move(IBaritone baritone, Vector3d pos) {
baritone.getCustomGoalProcess().setGoalAndPath(new GoalXZ((int) pos.x, (int) pos.z));
}
private void lookWaypoint(Vector3d target) {
if (target == null) return;
double dx = target.x - mc.player.getPosX();
double dz = target.z - mc.player.getPosZ();
float yaw = (Math.abs(dx) > Math.abs(dz)) ? (dx > 0 ? -90f : 90f) : (dz > 0 ? 0f : 180f);
float finalYaw = yaw + (float) ((Math.random() * 4.0) - 2.0);
mc.player.rotationYaw = finalYaw;
mc.player.prevRotationYaw = finalYaw;
mc.player.rotationPitch = (float) ((Math.random() * 1.0) - 0.5);
}
private void handleTrapdoorJump() {
BlockPos head = new BlockPos(mc.player.getPosX(), mc.player.getPosY() + mc.player.getEyeHeight(), mc.player.getPosZ());
if ((mc.world.getBlockState(head).getBlock() instanceof TrapDoorBlock || mc.world.getBlockState(head.up()).getBlock() instanceof TrapDoorBlock) && mc.player.isOnGround()) {
mc.player.jump();
}
}
private CreeperEntity findExplodingCreeper() {
List<CreeperEntity> list = mc.world.getEntitiesWithinAABB(CreeperEntity.class, mc.player.getBoundingBox().grow(RETREAT_DISTANCE));
for (CreeperEntity c : list) {
if (c.isAlive() && c.getCreeperState() > 0) return c;
}
return null;
}
private CreeperEntity findClosestCreeper() {
AxisAlignedBB box = new AxisAlignedBB(pos1, pos2).grow(1);
List<CreeperEntity> list = mc.world.getEntitiesWithinAABB(CreeperEntity.class, box);
CreeperEntity best = null;
double bestDist = Double.MAX_VALUE;
for (CreeperEntity c : list) {
if (!c.isAlive()) continue;
double d = mc.player.getDistance(c);
if (d < bestDist) {
bestDist = d;
best = c;
}
}
return best;
}
private ItemEntity findClosestItem(net.minecraft.item.Item item) {
AxisAlignedBB box = new AxisAlignedBB(pos1, pos2).grow(1);
List<ItemEntity> list = mc.world.getEntitiesWithinAABB(ItemEntity.class, box);
ItemEntity best = null;
double bestDist = Double.MAX_VALUE;
for (ItemEntity it : list) {
if (it.isAlive() && it.getItem().getItem() == item) {
double d = mc.player.getDistance(it);
if (d < bestDist) {
bestDist = d;
best = it;
}
}
}
return best;
}
@Override
public boolean onDisable() {
BaritoneAPI.getProvider().getPrimaryBaritone().getPathingBehavior().cancelEverything();
Settings s = BaritoneAPI.getSettings();
s.allowPlace.value = true;
s.allowBreak.value = true;
s.legitMine.value = false;
return super.onDisable();
}
}
CreeperFarmCommand.java:
package im.expensive.command.impl.feature;
import im.expensive.Expensive;
import im.expensive.command.*;
import im.expensive.command.impl.CommandException;
import im.expensive.functions.impl.misc.CreeperFarm;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import java.util.List;
import static im.expensive.utils.client.IMinecraft.mc;
@RequiredArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class CreeperFarmCommand implements Command, CommandWithAdvice {
final Prefix prefix;
final Logger logger;
@Override
public void execute(Parameters parameters) {
String commandType = parameters.asString(0).orElse("");
switch (commandType.toLowerCase()) {
case "pos1" -> setPosition1(parameters, logger);
case "pos2" -> setPosition2(parameters, logger);
case "clear" -> clearPositions(logger);
default -> showUsage(logger);
}
}
private void setPosition1(Parameters parameters, Logger logger) {
if (mc.player == null) {
logger.log(TextFormatting.RED + "Вы должны быть в игре!");
return;
}
BlockPos pos = mc.player.getPosition();
CreeperFarm.setPos1(pos);
logger.log(TextFormatting.GREEN + "Pos1 установлен: " + pos.getX() + ", " + pos.getY() + ", " + pos.getZ());
}
private void setPosition2(Parameters parameters, Logger logger) {
if (mc.player == null) {
logger.log(TextFormatting.RED + "Вы должны быть в игре!");
return;
}
BlockPos pos = mc.player.getPosition();
CreeperFarm.setPos2(pos);
logger.log(TextFormatting.GREEN + "Pos2 установлен: " + pos.getX() + ", " + pos.getY() + ", " + pos.getZ());
}
private void clearPositions(Logger logger) {
CreeperFarm.clearPositions();
logger.log(TextFormatting.YELLOW + "Координаты Creeper Farm очищены");
}
private void showUsage(Logger logger) {
logger.log(TextFormatting.GRAY + "Использование:");
logger.log(TextFormatting.GRAY + prefix.get() + "creeper pos1" + TextFormatting.WHITE + " - установить первую позицию");
logger.log(TextFormatting.GRAY + prefix.get() + "creeper pos2" + TextFormatting.WHITE + " - установить вторую позицию");
logger.log(TextFormatting.GRAY + prefix.get() + "creeper clear" + TextFormatting.WHITE + " - очистить позиции");
}
@Override
public String name() {
return "creeper";
}
@Override
public String description() {
return "Управление координатами для Creeper Farm";
}
@Override
public List<String> adviceMessage() {
return List.of();
}
}
которенький гайд.
1. создаете файлик CreeperFarm.java в misc
2. регаете ее в FunctionRegistry (Надеюсь вопросов не будет
)3. идете по пути im.expensive.command.imp.feature и создаете файлик CreeperFarmCommand.java
4. Заходите в Expensive.java и в войде initCommands вставляете
Код:
commands.add(new CreeperFarmCommand(prefix, logger));
Модеры одобрите пж
