1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Изменение блоков для одного игрока.

Тема в разделе "Разработка плагинов для новичков", создана пользователем OneKa, 9 авг 2020.

  1. Автор темы
    OneKa

    OneKa Участник

    Баллы:
    31
    Имя в Minecraft:
    OneKa
    Здравствуйте! У меня тут идейка появилась, пытался реализовать, появилось несколько багов, суть в чём - 1 регион заполненный блоками, с разной датой для каждого игрока. Пытался менять их через sendBlockChange но тут 2 проблемы: 1. При спавне и моментальной смене блока, блок не изменяется, остаётся тот который заспавнился изначально. 2. При пкм и лкм по блоку который изменён он так же становится изначальным блоком.
    Можно ли как-то реализовать это по другому?
    P.S. Важно чтобы блок стоял и на сервере, для того чтобы вести подсчёт сломанных блоков(если есть альтернатива, буду рад выслушать).
     
  2. ifxandy

    ifxandy Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    witwar
    Ну частично наверное смогу натолкнуть на решение, когда игрок интерактирует с блоком(пкм/лкм) он обновляется и насколько понимаю сервер переотправляет локацию клиенту. Возможным решением может стать PlayerInteractEvent.
     
  3. LuckyZeeRo

    LuckyZeeRo Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    Регион, заполненный блоками с разной датой для игроков (какой?)...
    Пытался менять их через sendBlockChange (зачем?)...
    Важно чтобы блок стоял и на сервере, для того чтобы вести подсчёт сломанных блоков(если есть альтернатива, буду рад выслушать)...


    Простите, но с этого я ничего толком не понял, можете обьяснить?
    Создается впечатление, что тут проблема XY.
     
  4. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    При нажатии ПКМ происходит ровно то же, что и при .sendBlockChange(), вот только уже с данными, из которых фактически состоит блок. Соответственно самый простой способ это исправить - заменять данные в пакете на свои. Можно вовсе отменять отправку пакета, но это не лучший способ.
    Кстати говоря, подмена данных поможет решить сразу обе проблемы.

    И ещё - если местность у разных игроков отличается сильно - её стоит отправлять пакетами чанков, которые как раз рассчитаны на большой объем данных.
    В ином случае можно получить некоторые неприятные эффекты - просадки сети при отправке данных, фризы на клиенте и так далее.

    По поводу разрушения - скорее всего, придется так же контролировать все самостоятельно на уровне пакетов. Сервер не рассчитан на подобные операции, поэтому вряд ли поймёт действия игрока правильно. Ну, и античит явно сообщит, что игрок ломает быстрее/медленнее нормы
     
  5. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Отменяй интеракт ивент и не будет возвращаться оригинальный блок. И вообще идея говно, лучше дай всем разные арены.
     
  6. Автор темы
    OneKa

    OneKa Участник

    Баллы:
    31
    Имя в Minecraft:
    OneKa
    Спасибо за адекватный ответ, блоки одинаковые, дата только меняется, можно узнать название пакета для отправки чанка?
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Слишком большой оверхед каждый раз весь чанк отправлять.
     
  8. Автор темы
    OneKa

    OneKa Участник

    Баллы:
    31
    Имя в Minecraft:
    OneKa
    Фикс я уже сделал, работает как часы, но вот саму арену хочу одним пакетом отправлять, ибо она довольно масштабная.
     
  9. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну тогда да.
     
  10. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth

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