Начинающий
- Статус
- Оффлайн
- Регистрация
- 17 Июл 2024
- Сообщения
- 78
- Реакции
- 0
- Выберите загрузчик игры
- Fabric
Выложил потому-что не видел на рекод версию тестил на хв (Жирни зака пойдет фиксить) моя первая работа не пинайте( (и небыло сета проверить в пвп но пинал твинка и чела который пришел)
Пожалуйста, авторизуйтесь для просмотра ссылки.
Код:
package zenith.zov.client.modules.impl.movement;
import com.darkmagician6.eventapi.EventTarget;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.vehicle.BoatEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.Box;
import net.minecraft.util.math.Vec3d;
import zenith.zov.base.events.impl.player.EventUpdate;
import zenith.zov.client.modules.api.Category;
import zenith.zov.client.modules.api.Module;
import zenith.zov.client.modules.api.ModuleAnnotation;
import zenith.zov.client.modules.api.setting.impl.BooleanSetting;
import zenith.zov.client.modules.api.setting.impl.ModeSetting;
import zenith.zov.client.modules.api.setting.impl.NumberSetting;
import zenith.zov.utility.game.player.MovingUtil;
@ModuleAnnotation(name = "Speed", category = Category.MOVEMENT, description = "Увеличивает скорость при соприкосновении с сущностями")
public final class Speed extends Module {
public static final Speed INSTANCE = new Speed();
private Speed() {}
private final ModeSetting mode = new ModeSetting("Режимы");
private final ModeSetting.Value entityMode = new ModeSetting.Value(mode, "Ентиты").select();
private final NumberSetting speed = new NumberSetting("Скорость", 8.0f, 1.0f, 20.0f, 0.1f);
private final NumberSetting range = new NumberSetting("Дальность", 3.0f, 0.5f, 10.0f, 0.1f);
private final NumberSetting expand = new NumberSetting("Расширение", 0.5f, 0.1f, 2.0f, 0.1f);
private final BooleanSetting onlyPlayers = new BooleanSetting("Только игроки", true);
private final BooleanSetting requireMoving = new BooleanSetting("Требуется движение", true);
@EventTarget
public void onUpdate(EventUpdate e) {
if (mc.player == null || mc.world == null) return;
int collisions = 0;
Box expandedBox = mc.player.getBoundingBox().expand((float) expand.getCurrent());
for (Entity ent : mc.world.getEntities()) {
if (ent == mc.player) continue;
if (onlyPlayers.isEnabled() && !(ent instanceof PlayerEntity)) continue;
if ((ent instanceof LivingEntity) || (ent instanceof BoatEntity)) {
if (expandedBox.intersects(ent.getBoundingBox())) {
collisions++;
}
}
}
double finalSpeed = speed.getCurrent() * 0.01 * collisions;
if (finalSpeed <= 0.0) return;
if (entityMode.isSelected()) {
if (collisions <= 0) return;
if (requireMoving.isEnabled() && !MovingUtil.hasPlayerMovement()) return;
Entity nearest = null;
double bestSq = Double.MAX_VALUE;
double maxRangeSq = range.getCurrent() * range.getCurrent();
for (Entity ent : mc.world.getEntities()) {
if (ent == mc.player) continue;
if (onlyPlayers.isEnabled() && !(ent instanceof PlayerEntity)) continue;
if (!(ent instanceof LivingEntity) && !(ent instanceof BoatEntity)) continue;
double dx = ent.getX() - mc.player.getX();
double dz = ent.getZ() - mc.player.getZ();
double sq = dx * dx + dz * dz;
if (sq <= maxRangeSq && sq < bestSq) {
bestSq = sq;
nearest = ent;
}
}
if (nearest != null) {
double[] dir = getDirectionToPoint(mc.player.getPos(), nearest.getPos(), finalSpeed);
mc.player.addVelocity(dir[0], 0.0, dir[1]);
}
}
}
private double[] getDirectionToPoint(Vec3d from, Vec3d to, double spd) {
double dx = to.x - from.x;
double dz = to.z - from.z;
double len = Math.sqrt(dx * dx + dz * dz);
if (len == 0) return new double[]{0.0, 0.0};
return new double[]{dx / len * spd, dz / len * spd};
}
}
