Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

[Решено] Disguise Block

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

Статус темы:
Закрыта.
  1. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Здравствуйте, уважаемые форумчане.

    Назрел вопрос.

    Цель:
    При попадании "projectile" по блоку, я должен заменять его на любую цветную шерсть на 5-10 секунд, после - возвращать старый блок назад.

    Насколько я знаю, это можно сделать несколькими методами.

    Я переговорил с одним человеком и он посоветовал мне делать это через мапу. (Заносить старый блок в мапу, менять его на шерсть, затем заменять шерсть, взяв из мапы старый блок.)
    Сложность в следующем:
    Что делать, если я попал "projectil"'ом в рамку, табличку, картину или цветочный горшок?

    Я же предложил использовать для этого пакет - PacketPlayOutBlockChange.

    Собственно, каким способом можно выполнить мою задачу как можно проще и удобнее?

    И как должен выглядить мой код?
     
    Последнее редактирование: 16 мар 2016
  2. Хостинг MineCraft
    <
  3. fall.us

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

    Баллы:
    76
    Имя в Minecraft:
    fallus
    Не надо себе забивать голову всякими пакетами. Bukkit все делает за вас.
    Я бы тоже посоветовал через мапу.

    Собственно, советую использовать мапу.)
     
  4. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Пакетами удобнее. Ведь мне не придётся хранить блок в который я попал. Просто посылаю пакет, и блок волшебным образом возвращается.
    К тому же, не будет конфликтов с цветочными горшками, картинами, рамками, табличками и т.д.
     
    Последнее редактирование: 15 июл 2016
  5. fall.us

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

    Баллы:
    76
    Имя в Minecraft:
    fallus
    Насколько я знаю, вам придется отправить два пакета, чтобы сначала сменить материал блока на шерсть, а потом вернуть его в исходное состояние. Это не так? Что значит "дестрою пакет"?
     
  6. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Ну вообще-то я об этом и сказал.
    Дестрою - уничтожаю. Destroy же.
    Сорян за сленг)
     
    Последнее редактирование: 16 мар 2016
  7. fall.us

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

    Баллы:
    76
    Имя в Minecraft:
    fallus
    Пакет это не сокет, или что-то в этом роде. Сервер отправляет пакет клиенту, тот его обрабатывает, что-то изменяет для себя и пакет уходит в мусор.
     
  8. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Я так не считаю. Поэтому и хочу услышать мнение "экспертов".
    https://www.spigotmc.org/threads/tutorial-quick-method-for-more-efficient-block-disguising.102606/
     
  9. fall.us

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

    Баллы:
    76
    Имя в Minecraft:
    fallus
    Тогда я хотел бы услышать ваше мнение.
     
  10. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Есть sendBlockChange()
     
  11. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Да, в той теме что я скинул один пользователь расписал метод sendBlockChange()
    Но, каким образом мне делать это лишь на 5-6 секунд, а потом возвращать старый блок? Пример кода желательно.
     
  12. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Код:
    Block b;
    p.sendBlockChange(b.getLocation(), Material.???, data);
    Bukkit.getScheluder().runTaskLater(plugin, () -> p.sendBlockChange(b.getLocation(), b.getType(), b.getData()), 5*20);
     
  13. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Тогда ещё вопрос - этот блок не увидят другие игроки, верно?
    Получается, нужно будет сначала:
    Player players = Bukkit.getOnlinePlayers();
    А потом уже
    players.sendBlockChange(b.getLocation(), Material.Wool 2);
    Bukkit.getScheluder().runTaskLater(plugin, () -> players.sendBlockChange(b.getLocation(), b.getType(), b.getData()), 5*20);
    Верно?
     
  14. fall.us

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

    Баллы:
    76
    Имя в Minecraft:
    fallus
    Быстро вы забыли про свои "длинные" пакеты.))
     
  15. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
    Перебирать список игроков можно циклом for:)) или через новый Stream API.
     
  16. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Посмотрите на реализацию метода sendBlockChange(), а потом пишите. Там используется тот же пакет.[DOUBLEPOST=1458153046,1458153014][/DOUBLEPOST]
    Можно чуточку подробнее?)
    Про StreamAPI.
     
  17. fall.us

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

    Баллы:
    76
    Имя в Minecraft:
    fallus
    Хах. Не надо на меня гнать)
    Я вам с самого начала сказал, что Bukkit делает все за вас.
     
  18. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    В любом случае метод реализуется с помощью пакета и реализуй я это через пакет ничего бы страшного не случилось. В той же теме ТС приводит свой "альтернативный" код этому методу.
     
  19. serega6531

    serega6531 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    shkurovs
  20. Автор темы
    CoolBoy

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
  21. fall.us

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

    Баллы:
    76
    Имя в Minecraft:
    fallus
    Конечно. Ведь пакет можно обрубить.)
     
Статус темы:
Закрыта.

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