Creative+ Действительно то, что нужно добавить

pawsashatoy

Участник
Регистрация
2 Май 2023
Сообщения
7
В новом обновлении добавили События мира, которые несут не очень большую пользу...
Поэтому вот то, что должно быть добавлено в первую очередь. Начнем с...

То, что легко реализовать


if операции с массивами (если массив содержит и прочее)
Это ключевые и обязательные операции для такого рода данных, но... где они?
Как мне проверить есть ли какой либо объект в массиве? (адекватно).

"Игрок стоит на земле?"
Я не знаю почему это не добавили, в BukkitAPI есть player.isOnGround().
Позволяет получить с идеальной точностью состояния нахождения на поверхности
(клиент присылает серверу свое состояние, а не сервер проверяет есть ли под
ним блоки, это основное преимущество, которое позволит учитывать даже не полные блоки).
И еще игрок не может подделать своё состояние из-за анти-чита :)

"На %location% есть блок?"
Тоже очевидно. Как я знаю, нет адекватных методов проверки локации на отсутствие блока (AIR).

Векторы и трассировка лучей
1. Добавить переменную "Вектор" (можно еще "BoundingBox", это улучшит структуру,
например можно сделать "Получить BoundingBox с %location% и выполнить трассировку
-> %start_location%, %yaw%, %pitch%, %boundingbox%, %range%, %fast_math?%)
2. Прочие операции с ними (raytracing и подобное...)
Готовые решения есть в моей математической библиотеке
3. Было бы отлично добавить дополнительный функционал для углов Эйлера
https://github.com/kireikosasha/MX-Project/blob/master/src/main/java/kireiko/dev/millennium/math/Euler.java

Важные примечания
1. Должен записываться подробный результат трассировки
(место остановки луча, дистанция между началом и концом)
2. В моей библиотеке есть FastMath (это тот что в optifine).
Можно использовать... Хотя он мало где полезен.

"Событие отдачи (Velocity Event) [%vector%]"
Сервер присылает пакет ENTITY_VELOCITY (aka setmotion), когда
хочет придать тебе custom motion (например удар от моба, или подкидывание кодом).
Это может быть полезно. (Так-же нужно будет добавить игровую переменную с вектором отдачи)
* НО! VelocityEvent в BukkitAPI плохо работает, я бы сказал ужасно.
  • BukkitAPI предоставляет вектор отдачи не тот, что прислал сервер,
  • а текущее движение, что в 1 тик у игрока после получения отдачи. Ужас.
  • Нужно использовать ProtocolLib. Пример:
https://github.com/kireikosasha/MX-Project/blob/master/src/main/java/kireiko/dev/anticheat/listeners/VelocityListener.java

"Игрок изменил позицию [%from%, %to%]"
И тут можно сказать "но уже есть Событие передвижения!"...
Но Событие передвижения - настоящий hardcode. Триггер только на переходе
на другой блок, что делает точность ужасной (ты можешь даже чуть подвинуться
без триггера этого события). Сделайте обычный PlayerMoveEvent (BukkitApi), что будет
прослушивать малейшее передвижение. Что насчет оптимизации, 20 событий в секунду
довольно мало, и не должно нагружать (а и еще можно было бы добавить "Игрок повернулся").

Методы реализации:
Легкий (самый простой, но работает в главном потоке): Bukkit PlayerMoveEvent
Сложный (лучше оптимизация, можно проверить стоит ли игрок на месте, так-же есть проверка onGround): ProtocolLib Handler.
Пример: https://github.com/kireikosasha/MX-Project/blob/master/src/main/java/kireiko/dev/anticheat/listeners/RawMovementListener.java

Ох, а тут уже будет сложнее!

Не жизненно необходимые вещи, но...

"Отобразить фантомный блок [%location%, %block%]"
Интересная вещь для мини-игр, и проблема не в сложности отображения. Вот код:
PacketContainer packet = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.BLOCK_CHANGE);
packet.getBlockPositionModifier().write(0, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()));
packet.getBlockData().write(0, WrappedBlockData.createData(blockType));
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
Основная проблема в том, что анти-чит конфликтует с подобными блоками (не все, но тот что на Creative+ - да).

"Отобразить локальное время [%number%]"
Думаю, тут всё понятно. Установить custom время только для 1 игрока.
PacketContainer timePacket = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.UPDATE_TIME);
timePacket.getLongs().write(0, 0L);
timePacket.getLongs().write(1, time);
ProtocolLibrary.getProtocolManager().sendServerPacket(player, timePacket);

"Получить статистику [%array%, %type%]"
Это уже жесть. Нужно только в очень конкретных сценариях для 1% людей, поэтому оно в этой категории.
В общем о чем я: https://github.com/kireikosasha/MX-Project/blob/master/src/main/java/kireiko/dev/millennium/math/Statistics.java

"Интерполировать [%from_number%, %to_number%, %percent (0.0-1.0)%, %type%, %ease%]"
Тоже узконаправленная штука. Поможет сделать анимации плавнее.
Подробнее: https://github.com/kireikosasha/MX-Project/blob/master/src/main/java/kireiko/dev/millennium/math/Interpolation.java


Ну, на этом всё. Надеюсь хоть когда-то Creative+ обновят...
 

dock

Эксперт
Регистрация
12 Сен 2023
Сообщения
59
Векторы и трассировка лучей
1. Добавить переменную "Вектор" (можно еще "BoundingBox", это улучшит структуру,
например можно сделать "Получить BoundingBox с %location% и выполнить трассировку
-> %start_location%, %yaw%, %pitch%, %boundingbox%, %range%, %fast_math?%)
2. Прочие операции с ними (raytracing и подобное...)
Думаю что это было бы реально очень круто, но вряд ли кто-то это будет доводить до ума, 1. Ресурсы сервера 2. Баги и краши, если я не прав то поправь меня
 

pawsashatoy

Участник
Регистрация
2 Май 2023
Сообщения
7
Думаю что это было бы реально очень круто, но вряд ли кто-то это будет доводить до ума, 1. Ресурсы сервера 2. Баги и краши, если я не прав то поправь меня
я б не сказал что это затратно, особенно с fastmath
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
594
В новом обновлении добавили События мира, которые несут не очень большую пользу...
Поэтому вот то, что должно быть добавлено в первую очередь.
Это уже жесть. Нужно только в очень конкретных сценариях для 1% людей
Тоже узконаправленная штука. Поможет сделать анимации плавнее.
Противоречишь сам себе. Треть из твоего списка - узконаправленное ИЛИ никто не будет в этом разбираться(простой игрок увидит векторы, не осилит и не будет делать оружия или еще что-то)

Лично я за "больше действий с массивами". В идеале - Map, Set и List и переменные, связанные с ними. Как есть "игровые переменные", так добавить "переменные массивов" и поместить туда что-то нужное, например "длина массива"
 

pawsashatoy

Участник
Регистрация
2 Май 2023
Сообщения
7
Противоречишь сам себе. Треть из твоего списка - узконаправленное ИЛИ никто не будет в этом разбираться(простой игрок увидит векторы, не
События мира вообще ничего не дадут новичкам, и какой то минимум профи. В отличии от тех же векторов и рейкаст утилок. Не умеешь - твои проблемы
 

maxim34a

Эксперт
Регистрация
10 Июн 2023
Сообщения
594
Не умеешь - твои проблемы
Вот в том и проблема - никто не будет учиться. Векторы на серьезном уровне нужны паре человек, а остальным хватит скопировать код с форума.
Какие есть события мира?
 

pawsashatoy

Участник
Регистрация
2 Май 2023
Сообщения
7
Вот в том и проблема - никто не будет учиться. Векторы на серьезном уровне нужны паре человек, а остальным хватит скопировать код с форума.
Какие есть события мира?
"никто не будет учиться"... дальше читать нет смысла
 
Сверху