- Баллы
- 123
.
Последнее редактирование:
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Русские буквы в методе...В общем ребят, я пытаюсь разобраться как работать с векторами и т.д.
Для начало решил сделать поднятия игрока в воздух типо эффекта левитации только своими немножечько кривыми ручками.
Так как джавадоки для слабаков (главное чтоб эту фразу не увидел Ларик..) то решил сделать наугад.
В итоге вышло вот так вот:
Но каждый раз подкидывает слишком резко, параметры влияют только на то насколько высоко подбросит (иди мне так кажется..)..Код:@EventHandler public void ловимСообщение(AsyncPlayerChatEvent event) { if (event.getMessage().startsWith("I WANT FUCK THE SKY")) { Bukkit.getScheduler().runTask(this, () -> { String[] args = event.getMessage().split("\\|"); Player player = event.getPlayer(); player.setAllowFlight(true); player.setFlying(true); player.setVelocity(player.getVelocity().add(new Vector(0, Integer.parseInt(args[1]), 0).multiply(Double.parseDouble(args[2])))); player.sendMessage("YOU CAN FUCK THE SKY"); }); } }
В общем, как сделать медленное поднятие вверх?)
Да это я по приколу сделал, я ведь сейчас все-равно тестирую..Русские буквы в методе....
А вот насчет кода - не совсем понял... Локации to & from в его коде - это локации из PlayerMoveEvent, или это локации откуда и куда надо двигать игрока?https://bukkit.org/threads/setvelocity-help.45299/
Последнее сообщение.
Откуда куда. Используй Vector в методе.Да это я по приколу сделал, я ведь сейчас все-равно тестирую..
А вот насчет кода - не совсем понял... Локации to & from в его коде - это локации из PlayerMoveEvent, или это локации откуда и куда надо двигать игрока?
Also, нет того метода что он юзает..
![]()
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, () ->
{
e.getPlayer().setVelocity(new Vector(0, 1, 0));
}, 0, 1);
Во, это уже то что надо спасибо, но пока еще не полностью работает.Чтобы игрока медленно поднимало вверх, нужно устанавливать ему постоянную скорость.
Что-то типа такого:
Java:Bukkit.getScheduler().scheduleSyncRepeatingTask(this, () -> { e.getPlayer().setVelocity(new Vector(0, 1, 0)); }, 0, 1);
public class Portal {
private String name;
private TextLocation location;
private boolean blocked;
public Portal(String name, TextLocation location) {
this.name = name;
this.location = location;
blocked = false;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public TextLocation getLocation() {
return new TextLocation(location.clone());
}
public void setLocation(TextLocation location) {
this.location = location;
}
public boolean isBlocked() {
return blocked;
}
public void setBlocked(boolean blocked) {
this.blocked = blocked;
}
}
public class MoveRunnable implements Runnable {
public Player player;
public double speed;
public MoveRunnable(Player player, double speed) {
this.player = player;
this.speed = speed;
}
@Override
public void run() {
player.setVelocity(new Vector(0, speed, 0));
}
}
portalIn.setBlocked(true);
portalOut.setBlocked(true);
player.setAllowFlight(true);
player.setFlying(true);
Bukkit.broadcastMessage("§0==================================");
Bukkit.broadcastMessage("§cПорталы заблочены. Полет включеен.");
MoveRunnable runnableUp = new MoveRunnable(player, 0.25);
Bukkit.broadcastMessage("§aСоздан таск полета вверх.");
BukkitTask taskUp = Bukkit.getScheduler().runTaskTimer(GWMServerPlugin.plugin, runnableUp, 0, 1);
Bukkit.broadcastMessage("§6Запущен таск полета вверх.");
Bukkit.getScheduler().runTaskLater(GWMServerPlugin.plugin, () -> {
Bukkit.broadcastMessage("§6Запущен таск отмены таска полета вверх.");
taskUp.cancel();
Bukkit.broadcastMessage("§cТаск полета вверх отменен.");
Location loc = portalOut.getLocation().clone();
loc.setY(loc.getY()+10);
player.teleport(loc);
Bukkit.broadcastMessage("§6Телепорт на второй портал Y+=10.");
MoveRunnable runnableDown = new MoveRunnable(player, -0.25);
Bukkit.broadcastMessage("§aСоздан таск полета вниз.");
BukkitTask taskDown = Bukkit.getScheduler().runTaskTimer(GWMServerPlugin.plugin, runnableDown, 0, 1);
Bukkit.broadcastMessage("§6Таск полета вниз запущен.");
Bukkit.getScheduler().runTaskLater(GWMServerPlugin.plugin, () -> {
Bukkit.broadcastMessage("§6Запущен таск отмены таска полета вниз.");
taskDown.cancel();
Bukkit.broadcastMessage("§cТаск полета вниз отменен.");
portalIn.setBlocked(false);
portalOut.setBlocked(false);
player.setAllowFlight(false);
player.setFlying(false);
Bukkit.broadcastMessage("§aПорталы разблокированы. Полет выключен.");
Bukkit.broadcastMessage("§0=======================================");
}, 40L);
}, 40L);
public class TextLocation extends Location {
public TextLocation(World world, double x, double y, double z) {
super(world, x, y, z);
}
public TextLocation(Location location) {
super(location.getWorld(), location.getX(), location.getY(), location.getZ());
}
public static TextLocation parse(String string) {
String[] params = string.split("\\|");
if (params.length != 4) throw new IllegalArgumentException("Чет не то с локацией");
World world = Bukkit.getWorld(params[0]);
double x = Double.valueOf(params[1]);
double y = Double.valueOf(params[2]);
double z = Double.valueOf(params[3]);
return new TextLocation(world, x, y, z);
}
@Override
public String toString() {
return getWorld().getName() + "|" + getBlockX() + "|" + getBlockY() + "|" + getBlockZ();
}
}

Задумка с порталами такая: порталов на карте около 10-30 штук, все они привязаны к месту, из любого портала можно попасть в любой портал..Если порталов не очень много и они физически привязаны к каким-то местам в мире, можно проще сделать анимацию для взлёта/посадки с помощью rscFirstJoinDemo?![]()

Хм, круто..Висишь ты в воздухе потому что обработка пакетов ещё не дошла до обработки пакетов установки скорости. (Ибо надо чанки переслать, данные мобов, и многое другое).
А ещё грустнее будет когда ты будешь тестировать плагин не на локали, а на реальном сервере и пинг будет за сотку скажем.
Нет. Не можешь.Хм, круто..
Все настолько страшно что нельзя бороться?
Или я могу например как только игрок начал телепортацию (т.е. подыматся вверх) принудительно прогрузить чанк куда он тпшится и это немного поможет?
Ммм... Кайф..Нет. Не можешь.
Бывает :LМмм... Кайф..
Пошел рыдать в подушку и делать простой телепорт..
Только вот при телепорте чанки всё равно попадут в очередь пакетов на отправку раньше чем ты сможешь послать пакет с установкой скорости. Можно конечно похимичить рутём слушания пакетов и вставки пакетов до него, но это очень большой гемор.Бывает :L
P.S.: если хочешь оставить предыдущую идею - подсказка - я задом чую, что нужно порыскать в ProtocolLib.
Т.к. эта фигнюшка умеет отправлять кастомные пакеты напрямую.