Начинающий
- Статус
- Оффлайн
- Регистрация
- 13 Ноя 2023
- Сообщения
- 6
- Реакции
- 0
- Выберите загрузчик игры
- Прочие моды
Сливаю свой Elytra Target, не хватает всяких инвентори утил и булиана? ChatGPT в помощь, он вам все сгенерирует
Код:
package ghostware.module.impl.combat;
import com.google.common.eventbus.Subscribe;
import ghostware.control.events.Event;
import ghostware.control.events.impl.player.EventUpdate;
import ghostware.module.api.Module;
import ghostware.module.api.ModuleAnnotation;
import ghostware.module.api.Type;
import ghostware.module.settings.imp.BooleanSetting;
import ghostware.module.settings.imp.SliderSetting;
import ghostware.utils.player.InventoryUtil;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Items;
import net.minecraft.network.play.client.CHeldItemChangePacket;
import net.minecraft.network.play.client.CPlayerTryUseItemPacket;
import net.minecraft.util.Hand;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.vector.Vector2f;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@ModuleAnnotation(name = "ElytraTarget", type = Type.COMBAT)
public class ElytraTarget extends Module {
private final Set<PlayerEntity> targetedPlayers = new HashSet<>();
private boolean isTargeting = false;
private long lastFireworkTime = 0L;
private long fireworkCooldown = 750L;
private long lastChatMessageTime = 0L;
private final long chatMessageInterval = 5000L;
public Vector2f rotate = new Vector2f(0.0F, 0.0F);
private final BooleanSetting save = new BooleanSetting("Save Mode", true);
private final BooleanSetting autofirework = new BooleanSetting("Auto Firework", true);
private final BooleanSetting deadtoggle = new BooleanSetting("Disable On Death", true);
private final SliderSetting distanse = new SliderSetting("Target Distance", 50.0F, 5.0F, 50.0F, 1.0F);
private final SliderSetting hptoggle = new SliderSetting("Min HP", 6.0F, 0.0F, 20.0F, 1.0F).setVisible(() -> save.isEnabled());
public ElytraTarget() {
addSettings(save, autofirework, deadtoggle, distanse, hptoggle);
}
@Override
public boolean onEvent(Event event) {
return false;
}
@Subscribe
private void onUpdate(EventUpdate e) {
if (mc.player == null || mc.world == null) return;
if (mc.player.isElytraFlying()) {
if (!isTargeting) {
targetPlayer();
} else {
updateRotationToPlayer();
useFirework();
checkChatMessage();
}
} else if (isTargeting) {
stopTargeting();
}
}
private void targetPlayer() {
ClientWorld clientWorld = mc.world;
List<Entity> entities = clientWorld.getEntitiesWithinAABBExcludingEntity(mc.player,
new AxisAlignedBB(
mc.player.getPosX() - 10, mc.player.getPosY() - 5, mc.player.getPosZ() - 10,
mc.player.getPosX() + 10, mc.player.getPosY() + 5, mc.player.getPosZ() + 10
));
for (Entity entity : entities) {
if (entity instanceof PlayerEntity && entity.isAlive()) {
PlayerEntity target = (PlayerEntity) entity;
if (!targetedPlayers.contains(target)) {
targetedPlayers.clear();
targetedPlayers.add(target);
isTargeting = true;
setRotationToPlayer(target);
return;
}
}
}
}
private void setRotationToPlayer(PlayerEntity player) {
if (player != null) {
double dx = player.getPosX() - mc.player.getPosX();
double dy = player.getPosY() - mc.player.getPosY();
double dz = player.getPosZ() - mc.player.getPosZ();
double yaw = Math.toDegrees(Math.atan2(dz, dx)) - 90.0D;
double pitch = -Math.toDegrees(Math.atan2(dy, Math.sqrt(dx * dx + dz * dz)));
mc.player.rotationYaw = (float) yaw;
mc.player.rotationPitch = (float) pitch;
}
}
private void updateRotationToPlayer() {
if (!targetedPlayers.isEmpty()) {
PlayerEntity target = targetedPlayers.iterator().next();
setRotationToPlayer(target);
}
}
private void useFirework() {
long currentTime = System.currentTimeMillis();
if (autofirework.isEnabled() && currentTime - lastFireworkTime >= fireworkCooldown) {
int hbSlot = InventoryUtil.getInstance().getSlotInInventoryOrHotbar(Items.FIREWORK_ROCKET, true);
int invSlot = InventoryUtil.getInstance().getSlotInInventoryOrHotbar(Items.FIREWORK_ROCKET, false);
if (hbSlot == -1 && invSlot == -1) return;
int currentSlot = mc.player.inventory.currentItem;
mc.player.connection.sendPacket(new CHeldItemChangePacket(hbSlot));
mc.player.connection.sendPacket(new CPlayerTryUseItemPacket(Hand.MAIN_HAND));
mc.player.connection.sendPacket(new CHeldItemChangePacket(currentSlot));
lastFireworkTime = currentTime;
PlayerEntity target = targetedPlayers.iterator().next();
double distance = mc.player.getDistance(target);
// Здесь сравниваем distance (double) с distanse.getValue() (Number), приведём к double
double distValue = distanse.getValue().doubleValue();
fireworkCooldown = distance > distValue ? 300L : 200L;
}
}
private void stopTargeting() {
targetedPlayers.clear();
isTargeting = false;
}
private void checkChatMessage() {
long currentTime = System.currentTimeMillis();
if (currentTime - lastChatMessageTime >= chatMessageInterval) {
if (!targetedPlayers.isEmpty()) {
PlayerEntity target = targetedPlayers.iterator().next();
if (target.getHealth() <= 0.01F) {
targetedPlayers.clear();
onDisable();
}
}
lastChatMessageTime = currentTime;
}
if (save.isEnabled()) {
// Приведём значение хп игрока к float и сравним с hptoggle.getValue() (Number)
float playerHp = mc.player.getHealth();
float hpValue = hptoggle.getValue().floatValue();
if (playerHp < hpValue) {
mc.player.rotationYaw += 180.0F;
stopTargeting();
onDisable();
}
}
}
public PlayerEntity[] getTargetedPlayers() {
return targetedPlayers.toArray(new PlayerEntity[0]);
}
@Override
public void onDisable() {
stopTargeting();
super.onDisable();
}
}