1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Изменение скорости лодок

Тема в разделе "Запросы на разработку плагинов", создана пользователем Самость, 1 июл 2024.

  1. Автор темы
    Самость

    Самость Активный участник

    Баллы:
    61
    Версия сервера: Надо чтобы работало под 1.21

    Что я хочу: Возможность изменять скорость всех существующих и созданных в будущем лодок с помощью команды.
     
    Последнее редактирование: 1 июл 2024
  2. minecraft 1.8.10

    minecraft 1.8.10 Активный участник Пользователь

    Баллы:
    66
    Без модов нельзя поменять скорость
     
  3. Kalvo

    Kalvo Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TrolPro
    Ну кстати есть такой плагин, только на вагонетки
     
  4. minecraft 1.8.10

    minecraft 1.8.10 Активный участник Пользователь

    Баллы:
    66
    Нужны лодки
     
  5. Kalvo

    Kalvo Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TrolPro
    И кстати можно
     
  6. Kalvo

    Kalvo Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TrolPro
    https://dropmefiles.com/9qfD6
    Типо такого. Садишься, плывёшь с обычной скоростью, жмёшь пробел 2 раза и лодочка летит как новенький СУ-57, глушить моторную лодку так же через 2 пробела. (Костыль через проверку на флай.)
     
  7. Evolum

    Evolum Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Evolum
    Можно такое реализовать, но будет немного коряво выглядеть, но зато лодка быстрее плыть будет.
     
  8. devUniqueStudio

    devUniqueStudio Новичок

    Баллы:
    6
    @EventHandler
    public void onVehicleMove(VehicleMoveEvent e) {
    double speed = 1.5;
    org.bukkit.entity.Vehicle veh = e.getVehicle();
    if (veh instanceof Boat) {
    Boat b = (Boat) veh;
    Vector vc = b.getVelocity();
    double x = vc.getX() * speed;
    double y = vc.getY() * speed;
    double z = vc.getZ() * speed;
    Vector bv = new Vector(x, y, z);
    b.setVelocity(bv);
    }
    }
     
  9. Fagaset

    Fagaset Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Fagaset
    Код:
    package com.example.boatspeed;
    
    import org.bukkit.Bukkit;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.Player;
    import org.bukkit.entity.Boat;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityMoveEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class BoatSpeedPlugin extends JavaPlugin implements Listener {
    
        // Мапа для збереження швидкості лодки
        private final Map<Boat, Double> boatSpeedMap = new HashMap<>();
        private double defaultSpeed = 0.4; // стандартна швидкість лодки
    
        @Override
        public void onEnable() {
            // Реєстрація слухача подій
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
        }
    
        // Обробка команди для зміни швидкості лодок
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (cmd.getName().equalsIgnoreCase("boatspeed")) {
                if (args.length != 1) {
                    sender.sendMessage("Використання: /boatspeed <швидкість>");
                    return false;
                }
                try {
                    double newSpeed = Double.parseDouble(args[0]);
                    if (newSpeed <= 0) {
                        sender.sendMessage("Швидкість повинна бути більше 0.");
                        return false;
                    }
    
                    // Оновлення швидкості всіх лодок
                    defaultSpeed = newSpeed;
                    sender.sendMessage("Швидкість лодок встановлено на: " + newSpeed);
    
                    // Змінюємо швидкість вже існуючих лодок
                    for (Boat boat : boatSpeedMap.keySet()) {
                        boatSpeedMap.put(boat, newSpeed);
                    }
                    return true;
                } catch (NumberFormatException e) {
                    sender.sendMessage("Будь ласка, введіть дійсне число.");
                    return false;
                }
            }
            return false;
        }
    
        // Слухач для обробки руху лодки
        @EventHandler
        public void onEntityMove(EntityMoveEvent event) {
            Entity entity = event.getEntity();
            
            // Перевірка чи є це лодка
            if (entity instanceof Boat) {
                Boat boat = (Boat) entity;
                double speed = boatSpeedMap.getOrDefault(boat, defaultSpeed); // Якщо не збережена швидкість, використовуємо стандартну
                // Змінюємо швидкість руху лодки
                event.setTo(event.getTo().add(event.getFrom().getDirection().multiply(speed)));
            }
        }
    
        // Метод для додавання нових лодок в мапу
        public void registerBoat(Boat boat) {
            boatSpeedMap.put(boat, defaultSpeed);
        }
    }
    /boatspeed
     
  10. minecraft 1.8.10

    minecraft 1.8.10 Активный участник Пользователь

    Баллы:
    66
    Согласен, это было возможно сделать
     

Поделиться этой страницей