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

CyberCrystal

Пользователь
Сообщения
6
Добрый день, пытался написать простой плагин для изменение скорости лодки в конфиге, в коде ошибки не подсвечиваются но на деле не работает.


Java:
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.*;
import org.bukkit.inventory.*;
import org.bukkit.inventory.meta.*;
import org.bukkit.event.vehicle.*;
import org.bukkit.util.*;
import org.bukkit.entity.*;
import org.bukkit.*;
import org.bukkit.event.*;

public class main extends JavaPlugin implements Listener {


    @Override
    public void onEnable() {
        this.getServer().getPluginManager().registerEvents((Listener) this, (Plugin) this);
        this.saveDefaultConfig();
        Bukkit.getPluginManager().registerEvents((Listener) this, (Plugin) this);
        this.getLogger().info("Load plugin");
}

    @Override
    public void onDisable() {
    }

    @EventHandler
    public void onVehicleBoats(final VehicleMoveEvent event) {
        final Vehicle vehicle = event.getVehicle();
        final Entity passenger = event.getVehicle().getPassenger();
        if (vehicle instanceof Boat && passenger instanceof Player && this.getConfig().getBoolean("BoatSpeed.amount")) {
            final Boat boat = (Boat) vehicle;
            final Player player = (Player) passenger;
            boat.setMaxSpeed(0.4 * this.getConfig().getInt("BoatSpeed.amount"));
            }
        }
    }
 
Java:
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.*;
import org.bukkit.inventory.*;
import org.bukkit.inventory.meta.*;
import org.bukkit.event.vehicle.*;
import org.bukkit.util.*;
import org.bukkit.entity.*;
import org.bukkit.*;
import org.bukkit.event.*;

public class main extends JavaPlugin implements Listener {


    @Override
    public void onEnable() {
        this.getServer().getPluginManager().registerEvents((Listener) this, (Plugin) this);
        this.saveDefaultConfig();
        Bukkit.getPluginManager().registerEvents((Listener) this, (Plugin) this);
        this.getLogger().info("Load plugin");
}

    @Override
    public void onDisable() {
    }

    @EventHandler
    public void onVehicleBoats(final VehicleMoveEvent event) {
        final Vehicle vehicle = event.getVehicle();
        final Entity passenger = event.getVehicle().getPassenger();
        if (vehicle instanceof Boat && passenger instanceof Player && this.getConfig().getBoolean("BoatSpeed.amount")) {
            final Boat boat = (Boat) vehicle;
            final Player player = (Player) passenger;
            boat.setMaxSpeed(100.0);
            boat.setVelocity(boat.getVelocity().multiply(this.getConfig().getInt("BoatSpeed.amount")));
            }
        }
    }
 
Не думаю, что это как-то повлияет на скорость. См. .
Вам необходимо зарегистрироваться для просмотра изображений-вложений
 
У тебя BoatSpeed.amount то ли boolean, то ли int, разве так можно?

Раньше плагинов почти не писал, и познания в джаве у меня весьма поверхностные,
Так как рабочих плагинов на такое в свободном доступе нету, единственным решением было пытаться самим что то сделать
Объединено

Проблема частично решена, рабочим способом оказалось изменение вектора лодки, (boat.setMaxSpeed и вправда не влияет на скорость)

Код:
    @EventHandler
    public void onVehicleBoats(final VehicleMoveEvent event) {
        final Vehicle vehicle = event.getVehicle();
        final Entity passenger = event.getVehicle().getPassenger();
        if (event.getVehicle() instanceof Boat && passenger instanceof Player) {
            final Boat boat = (Boat) event.getVehicle();
            final Player player = (Player)passenger;
            if (this.getConfig().getBoolean("BoatSpeed.enabled")) {
               // boat.setMaxSpeed((double)(5.0));
               // boat.setVelocity(boat.getVelocity().multiply(this.getConfig().getInt("BoatSpeed.amount")));
                boat.setVelocity(new Vector(boat.getLocation().getDirection().multiply(1).getX(), 0.0, boat.getLocation().getDirection().multiply(2).getZ()));

            }
        }
    }


Однако теперь проблемс в другом, лодка тупо едет вперёд как при зажатой W
Как заставить работать только если игрок нажимает W я даже хз...
 
Раньше плагинов почти не писал, и познания в джаве у меня весьма поверхностные,
Так как рабочих плагинов на такое в свободном доступе нету, единственным решением было пытаться самим что то сделать
Объединено

Проблема частично решена, рабочим способом оказалось изменение вектора лодки, (boat.setMaxSpeed и вправда не влияет на скорость)

Код:
    @EventHandler
    public void onVehicleBoats(final VehicleMoveEvent event) {
        final Vehicle vehicle = event.getVehicle();
        final Entity passenger = event.getVehicle().getPassenger();
        if (event.getVehicle() instanceof Boat && passenger instanceof Player) {
            final Boat boat = (Boat) event.getVehicle();
            final Player player = (Player)passenger;
            if (this.getConfig().getBoolean("BoatSpeed.enabled")) {
               // boat.setMaxSpeed((double)(5.0));
               // boat.setVelocity(boat.getVelocity().multiply(this.getConfig().getInt("BoatSpeed.amount")));
                boat.setVelocity(new Vector(boat.getLocation().getDirection().multiply(1).getX(), 0.0, boat.getLocation().getDirection().multiply(2).getZ()));

            }
        }
    }


Однако теперь проблемс в другом, лодка тупо едет вперёд как при зажатой W
Как заставить работать только если игрок нажимает W я даже хз...
Не создавать новый вектор, а получать текущий вектор лодки и умножать его. Тогда и плавный переход между скоростями получится (когда отпускаешь и лодка плывёт по инерции) и адекватное поведение при поворотах / движении назад.

Но, честно говоря, я не совсем уверен что это решит проблему бесконечного движения, так как ты в событии движения лодки усиливаешь вектор её движения. Она продолжает двигаться -> событие вызывается -> вектор усиливается вновь. Вот и получается бесконечный цикл.
 
Последнее редактирование:
Назад
Сверху Снизу