Начинающий
- Статус
- Оффлайн
- Регистрация
- 10 Янв 2025
- Сообщения
- 48
- Реакции
- 0
- Выберите загрузчик игры
- Прочие моды
взял за основу - (тык)
сделал под експу 3.1, чот добавил(четсно уже не помню) и вот что получилось
доделайте и будет пушка
сделал под експу 3.1, чот добавил(четсно уже не помню) и вот что получилось
Java:
@FunctionRegister(name = "AutoLoot", type = Category.Player)
public class TPLoot extends Function {
private final ModeSetting serverMode = new ModeSetting("Режим сервера", "ST Teleport", "ST Teleport", "Holyworld ship");
private final SliderSetting distance = new SliderSetting("Дистанция поиска", 15.0f, 8.0f, 20.0f, 1.0f);
private final SliderSetting accuracy = new SliderSetting("Аккуратность", 35.0f, 32.0f, 40.0f, 1.0f);
private final SliderSetting teleportStep = new SliderSetting("Скорость", 5.0f, 1.0f, 10.0f, 0.5f);
private final SliderSetting teleportDelay = new SliderSetting("Задержка", 100.0f, 0.0f, 500.0f, 10.0f);
private final ModeSetting afterLootCommand = new ModeSetting("После сбора", "Нет", "/hub", "/spawn");
private final ModeSetting lootItems = new ModeSetting("Предметы", "Все", "Только броня/оружие", "Только ресурсы", "Только особые", "Пользовательские");
private final BooleanSetting lootTotems = new BooleanSetting("Тотемы", true);
private final BooleanSetting lootNetheriteArmor = new BooleanSetting("Незеритовая броня", true);
private final BooleanSetting lootNetheriteTools = new BooleanSetting("Незеритовые инструменты", true);
private final BooleanSetting lootGoldenApples = new BooleanSetting("Золотые яблоки", true);
private final BooleanSetting lootPlayerHeads = new BooleanSetting("Головы игроков", true);
private final BooleanSetting lootShulkerBoxes = new BooleanSetting("Шалкеровые ящики", true);
private final BooleanSetting lootNetheriteIngots = new BooleanSetting("Незеритовые слитки", true);
private final BooleanSetting lootPotions = new BooleanSetting("Зелья", true);
private final BooleanSetting lootSpookyItems = new BooleanSetting("Особые предметы", true);
private List<UUID> collectedItems = new ArrayList<>();
private boolean commandSent = false;
private int waitTicks = 0;
private boolean itemsCollected = false;
private int activationDelay = 5;
private Vector3d teleportTarget = null;
private long lastTeleportTime = 0L;
private boolean isTeleporting = false;
private boolean allItemsCollected = false;
public TPLoot() {
addSettings(serverMode, distance, accuracy, teleportStep, teleportDelay, afterLootCommand, lootItems,
lootTotems, lootNetheriteArmor, lootNetheriteTools, lootGoldenApples, lootPlayerHeads,
lootShulkerBoxes, lootNetheriteIngots, lootPotions, lootSpookyItems);
// Скрываем ненужные настройки в зависимости от режима
distance.setVisible(() -> serverMode.is("ST Teleport"));
accuracy.setVisible(() -> serverMode.is("ST Teleport"));
teleportStep.setVisible(() -> serverMode.is("ST Teleport"));
teleportDelay.setVisible(() -> serverMode.is("ST Teleport"));
lootItems.setVisible(() -> !serverMode.is("Holyworld ship"));
lootTotems.setVisible(() -> lootItems.is("Пользовательские") && !serverMode.is("Holyworld ship"));
lootNetheriteArmor.setVisible(() -> lootItems.is("Пользовательские") && !serverMode.is("Holyworld ship"));
lootNetheriteTools.setVisible(() -> lootItems.is("Пользовательские") && !serverMode.is("Holyworld ship"));
lootGoldenApples.setVisible(() -> lootItems.is("Пользовательские") && !serverMode.is("Holyworld ship"));
lootPlayerHeads.setVisible(() -> lootItems.is("Пользовательские") && !serverMode.is("Holyworld ship"));
lootShulkerBoxes.setVisible(() -> lootItems.is("Пользовательские") && !serverMode.is("Holyworld ship"));
lootNetheriteIngots.setVisible(() -> lootItems.is("Пользовательские") && !serverMode.is("Holyworld ship"));
lootPotions.setVisible(() -> lootItems.is("Пользовательские") && !serverMode.is("Holyworld ship"));
lootSpookyItems.setVisible(() -> lootItems.is("Пользовательские") && !serverMode.is("Holyworld ship"));
}
@Subscribe
public void onUpdate(EventUpdate event) {
if (mc.player == null || mc.world == null) return;
if (activationDelay > 0) {
activationDelay--;
return;
}
handleUniversalLoot();
checkAndSendCommand();
}
private void handleUniversalLoot() {
if (serverMode.is("Holyworld ship")) {
handleHolyworldShip();
} else {
handleUniversalTeleport();
}
}
private void handleUniversalTeleport() {
if (isTeleporting && teleportTarget != null) {
performStepTeleport();
return;
}
List<ItemEntity> nearbyItems = mc.world.getEntitiesWithinAABB(ItemEntity.class,
mc.player.getBoundingBox().grow(distance.get()));
ItemEntity closestItem = null;
double closestDistance = Double.MAX_VALUE;
boolean foundNewItems = false;
for (ItemEntity itemEntity : nearbyItems) {
if (itemEntity.ticksExisted >= accuracy.get() &&
isValuableItem(itemEntity.getItem()) &&
!collectedItems.contains(itemEntity.getUniqueID())) {
foundNewItems = true;
double distanceToItem = mc.player.getDistanceSq(itemEntity);
if (distanceToItem < closestDistance) {
closestDistance = distanceToItem;
closestItem = itemEntity;
}
}
}
if (closestItem != null) {
teleportTarget = new Vector3d(closestItem.getPosX(), closestItem.getPosY(), closestItem.getPosZ());
collectedItems.add(closestItem.getUniqueID());
isTeleporting = true;
lastTeleportTime = System.currentTimeMillis();
} else if (!foundNewItems && !collectedItems.isEmpty()) {
allItemsCollected = true;
}
}
private void checkAndSendCommand() {
if (isTeleporting) return;
if (commandSent || afterLootCommand.is("Нет")) return;
List<ItemEntity> nearbyItems = mc.world.getEntitiesWithinAABB(ItemEntity.class,
mc.player.getBoundingBox().grow(distance.get()));
boolean foundValuableItems = false;
for (ItemEntity itemEntity : nearbyItems) {
if (isValuableItem(itemEntity.getItem()) && !collectedItems.contains(itemEntity.getUniqueID())) {
foundValuableItems = true;
break;
}
}
if (!foundValuableItems && !collectedItems.isEmpty()) {
itemsCollected = true;
}
if (itemsCollected) {
waitTicks++;
if (waitTicks >= 20) {
String command = afterLootCommand.get();
if (command.equals("/hub") || command.equals("/spawn")) {
if (isCommandSupported(command)) {
mc.player.sendChatMessage(command);
print("AutoLoot >> Ресурсы собраны. Отправляюсь " + command);mc.player.getUniqueID();
} else {
print("AutoLoot >> Команда не поддерживается на этом сервере"); mc.player.getUniqueID();
}
collectedItems.clear();
commandSent = false;
itemsCollected = false;
waitTicks = 0;
print("AutoLoot >> Ожидаю новые предметы..."); mc.player.getUniqueID();
}
}
}
}
private boolean isCommandSupported(String command) {
if (mc.isSingleplayer() || mc.getCurrentServerData() == null) {
return false;
}
return true;
}
private void handleHolyworldShip() {
AxisAlignedBB boundingBox = new AxisAlignedBB(
mc.player.getPosX() - 3.0, mc.player.getPosY() - 3.0, mc.player.getPosZ() - 3.0,
mc.player.getPosX() + 3.0, mc.player.getPosY() + 3.0, mc.player.getPosZ() + 3.0
);
for (Entity entity : mc.world.getEntitiesWithinAABB(VillagerEntity.class, boundingBox)) {
if (entity instanceof VillagerEntity) {
VillagerEntity villager = (VillagerEntity) entity;
if (villager.getHeldItemMainhand().getItem() == Items.TRIPWIRE_HOOK ||
villager.getHeldItemOffhand().getItem() == Items.TRIPWIRE_HOOK) {
mc.playerController.interactWithEntity(mc.player, villager, Hand.MAIN_HAND);
return;
}
}
}
}
private void performStepTeleport() {
if (teleportTarget == null || !isTeleporting) return;
long currentTime = System.currentTimeMillis();
long delay = (long) (float) teleportDelay.get();
if (currentTime - lastTeleportTime < delay) {
return;
}
Vector3d currentPos = mc.player.getPositionVec();
Vector3d direction = teleportTarget.subtract(currentPos);
double distToTarget = direction.length();
if (distToTarget < 1.0) {
mc.player.setPosition(teleportTarget.x, teleportTarget.y, teleportTarget.z);
teleportTarget = null;
isTeleporting = false;
pickUpNearbyItems();
return;
}
double stepSize = Math.min(teleportStep.get(), distToTarget);
Vector3d normalizedDirection = direction.normalize();
Vector3d nextPos = currentPos.add(normalizedDirection.scale(stepSize));
mc.player.setPosition(nextPos.x, nextPos.y, nextPos.z);
lastTeleportTime = currentTime;
}
private void pickUpNearbyItems() {
List<ItemEntity> nearbyItems = mc.world.getEntitiesWithinAABB(ItemEntity.class,
mc.player.getBoundingBox().grow(2.0));
for (ItemEntity item : nearbyItems) {
if (isValuableItem(item.getItem()) && !collectedItems.contains(item.getUniqueID())) {
collectedItems.add(item.getUniqueID());
}
}
}
private boolean isValuableItem(ItemStack itemStack) {
Item item = itemStack.getItem();
String lootMode = lootItems.get();
if (lootMode.equals("Все")) {
return true;
} else if (lootMode.equals("Только броня/оружие")) {
return item == Items.TOTEM_OF_UNDYING ||
item == Items.NETHERITE_HELMET || item == Items.NETHERITE_CHESTPLATE ||
item == Items.NETHERITE_LEGGINGS || item == Items.NETHERITE_BOOTS ||
item == Items.NETHERITE_SWORD || item == Items.NETHERITE_PICKAXE;
} else if (lootMode.equals("Только ресурсы")) {
return item == Items.NETHERITE_INGOT ||
item == Items.GOLDEN_APPLE || item == Items.ENCHANTED_GOLDEN_APPLE ||
item instanceof SplashPotionItem || item instanceof PotionItem;
} else if (lootMode.equals("Только особые")) {
return item == Items.PLAYER_HEAD ||
item == Items.SHULKER_BOX ||
(itemStack.hasTag() && itemStack.getTag().contains("spooky-item"));
} else if (lootMode.equals("Пользовательские")) {
if (item == Items.TOTEM_OF_UNDYING && lootTotems.get()) return true;
if ((item == Items.NETHERITE_HELMET || item == Items.NETHERITE_CHESTPLATE ||
item == Items.NETHERITE_LEGGINGS || item == Items.NETHERITE_BOOTS) && lootNetheriteArmor.get()) return true;
if ((item == Items.NETHERITE_SWORD || item == Items.NETHERITE_PICKAXE) && lootNetheriteTools.get()) return true;
if ((item == Items.GOLDEN_APPLE || item == Items.ENCHANTED_GOLDEN_APPLE) && lootGoldenApples.get()) return true;
if (item == Items.PLAYER_HEAD && lootPlayerHeads.get()) return true;
if (item == Items.SHULKER_BOX && lootShulkerBoxes.get()) return true;
if (item == Items.NETHERITE_INGOT && lootNetheriteIngots.get()) return true;
if ((item instanceof SplashPotionItem || item instanceof PotionItem) && lootPotions.get()) return true;
if ((itemStack.hasTag() && itemStack.getTag().contains("spooky-item")) && lootSpookyItems.get()) return true;
}
return false;
}
@Override
public void onEnable() {
collectedItems.clear();
commandSent = false;
waitTicks = 0;
itemsCollected = false;
teleportTarget = null;
isTeleporting = false;
lastTeleportTime = 0L;
allItemsCollected = false;
activationDelay = 5;
print("AutoLoot >> Функция включена. Режим: " + serverMode.get()); mc.player.getUniqueID();
}
@Override
public void onDisable() {
collectedItems.clear();
commandSent = false;
waitTicks = 0;
itemsCollected = false;
teleportTarget = null;
isTeleporting = false;
lastTeleportTime = 0L;
allItemsCollected = false;
print("AutoLoot >> Функция выключена"); mc.player.getUniqueID();
}
}