- Регистрация
- 2 Май 2023
- Сообщения
- 7
В новом обновлении добавили События мира, которые несут не очень большую пользу...
Поэтому вот то, что должно быть добавлено в первую очередь. Начнем с...
if операции с массивами (если массив содержит и прочее)
Это ключевые и обязательные операции для такого рода данных, но... где они?
Как мне проверить есть ли какой либо объект в массиве? (адекватно).
"Игрок стоит на земле?"
Я не знаю почему это не добавили, в BukkitAPI есть player.isOnGround().
Позволяет получить с идеальной точностью состояния нахождения на поверхности
(клиент присылает серверу свое состояние, а не сервер проверяет есть ли под
ним блоки, это основное преимущество, которое позволит учитывать даже не полные блоки).
И еще игрок не может подделать своё состояние из-за анти-чита
"На %location% есть блок?"
Тоже очевидно. Как я знаю, нет адекватных методов проверки локации на отсутствие блока (AIR).
Векторы и трассировка лучей
1. Добавить переменную "Вектор" (можно еще "BoundingBox", это улучшит структуру,
например можно сделать "Получить BoundingBox с %location% и выполнить трассировку
-> %start_location%, %yaw%, %pitch%, %boundingbox%, %range%, %fast_math?%)
2. Прочие операции с ними (raytracing и подобное...)
Готовые решения есть в моей математической библиотеке
github.com
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 плохо работает, я бы сказал ужасно.
"Игрок изменил позицию [%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%]"
Интересная вещь для мини-игр, и проблема не в сложности отображения. Вот код:
"Отобразить локальное время [%number%]"
Думаю, тут всё понятно. Установить custom время только для 1 игрока.
"Получить статистику [%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+ обновят...
Поэтому вот то, что должно быть добавлено в первую очередь. Начнем с...
То, что легко реализовать
if операции с массивами (если массив содержит и прочее)
Это ключевые и обязательные операции для такого рода данных, но... где они?
Как мне проверить есть ли какой либо объект в массиве? (адекватно).
"Игрок стоит на земле?"
Я не знаю почему это не добавили, в BukkitAPI есть player.isOnGround().
Позволяет получить с идеальной точностью состояния нахождения на поверхности
(клиент присылает серверу свое состояние, а не сервер проверяет есть ли под
ним блоки, это основное преимущество, которое позволит учитывать даже не полные блоки).
И еще игрок не может подделать своё состояние из-за анти-чита
"На %location% есть блок?"
Тоже очевидно. Как я знаю, нет адекватных методов проверки локации на отсутствие блока (AIR).
Векторы и трассировка лучей
1. Добавить переменную "Вектор" (можно еще "BoundingBox", это улучшит структуру,
например можно сделать "Получить BoundingBox с %location% и выполнить трассировку
-> %start_location%, %yaw%, %pitch%, %boundingbox%, %range%, %fast_math?%)
2. Прочие операции с ними (raytracing и подобное...)
Готовые решения есть в моей математической библиотеке
MX-Project/src/main/java/kireiko/dev/millennium at master · kireikosasha/MX-Project
Complex minecraft anticheat for detection of aim hacks (1.8-1.21) - kireikosasha/MX-Project
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. Пример:
"Игрок изменил позицию [%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%]"
Интересная вещь для мини-игр, и проблема не в сложности отображения. Вот код:
Основная проблема в том, что анти-чит конфликтует с подобными блоками (не все, но тот что на Creative+ - да).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);
"Отобразить локальное время [%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+ обновят...