Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Самость

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

Что я хочу: Возможность изменять скорость всех существующих и созданных в будущем лодок с помощью команды.
 
Последнее редактирование:
https://dropmefiles.com/9qfD6
Типо такого. Садишься, плывёшь с обычной скоростью, жмёшь пробел 2 раза и лодочка летит как новенький СУ-57, глушить моторную лодку так же через 2 пробела. (Костыль через проверку на флай.)
 
Можно такое реализовать, но будет немного коряво выглядеть, но зато лодка быстрее плыть будет.
 
Без модов нельзя поменять скорость
@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);
}
}
 
Версия сервера: Надо чтобы работало под 1.21

Что я хочу: Возможность изменять скорость всех существующих и созданных в будущем лодок с помощью команды.
Код:
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
 
@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);
}
}
Согласен, это было возможно сделать
 

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

Назад
Верх