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

Помогите Табличка

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

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

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

    Баллы:
    66
    Имя в Minecraft:
    Stamorey
    Проблема:
    Есть табличка с текстом, он должен изменяться в зависимости от определенных событий, например при разрушении определенного блока или при телепортации игрока из одной локации в другую (то есть игрок не взаимодействует с ней напрямую).
    Что имею:
    Координаты таблички(возможно).
    Точно знаю, что написано в табличке в первой строке.

    Как же можно ее заставить менять свой текст?
    знаю только событие SignChangeEvent , но с его помощью можно изменить значение только при создании таблички игроком.
    (p.s. может как-то можно через другое событие вызвать событие SignChangeEvent? )
     
  2. Хостинг MineCraft
    <
  3. Mr_RoboMan

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

    Баллы:
    123
    Что мешает получить табличку по коордам и сделать с ней свои темный делишки?
     
  4. Автор темы
    Stamorey

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

    Баллы:
    66
    Имя в Minecraft:
    Stamorey
    так как это сделать:oops:[DOUBLEPOST=1478980854,1478980513][/DOUBLEPOST]Вот например событие - игрок крадется, как в него впихнуть получение таблички и изменение ее строк?
    @EventHandler
    public void Sneak(PlayerToggleSneakEvent e)
    {

    //
    //>>>> сюда <<<<<<
    //
    World loc2 = e.getPlayer().getLocation().getWorld();
    Player p = e.getPlayer();
    p.sendMessage("Ты крадешься в мире " + loc2);
    }
     
  5. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Чекай что блок гетМатериал == табличка и касть его
     
  6. Автор темы
    Stamorey

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

    Баллы:
    66
    Имя в Minecraft:
    Stamorey
    Если можно, напиши код, так ничего не понял...[DOUBLEPOST=1478982871,1478981344][/DOUBLEPOST]
    нашел как вставить блок(создать или получить его), что-то слишком просто оказалось....
    @EventHandler
    public void Sneak(PlayerToggleSneakEvent e)
    {

    World loc2 = e.getPlayer().getLocation().getWorld();
    Player p = e.getPlayer();

    World w_w = Bukkit.getWorld("world");
    Location loc = new Location(w_w,p.getLocation().getX(),p.getLocation().getY()+2,p.getLocation().getZ());
    loc.getBlock().setType(Material.ANVIL);
    p.sendMessage("Ты крадешься в мире " + loc2);
    }

    Но всетаки не понял как "кастить"- изменить поля таблички==блока.
     
  7. Zнамя Юности

    Zнамя Юности Активный участник Пользователь

    Баллы:
    46
    как-то так
    Код:
    final Block b = w.getBlockAt(loc);
    if (b instanceof Sign || b.getType() == Material.WALL_SIGN) {
        final Sign sign = (Sign)b.getState();
        sign.setLine(1, "zhopa");
        sign.update(true);
    }
    
     
  8. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    [​IMG]
     
  9. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Так всё-таки, b instanceof Sign или b.getState() instanceof Sign?
    Или у Sign s есть метод s.getState(), возвращающий тоже Sign?
     
  10. Автор темы
    Stamorey

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

    Баллы:
    66
    Имя в Minecraft:
    Stamorey
    Помогло, Спасибо огромное,

    (но так и не дошло как изменения созданного нами Sign влияют на сам блок, раньше встречался только с указателями в плюсах, наверное тут тот же принцип....... и еще одно по синтаксису- зачем здесь final , посмотрел что это значит - что-то типо констант.... , это для того, чтобы показать нубу , что sign и block никогда не меняются и работают как я предположил по типу указателей в плюсах?)
     
  11. Mr_RoboMan

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

    Баллы:
    123
    Чтоб выпендрится (нафиг оно не надо тут).
     
  12. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Чтобы показать, что эта переменная не меняется. Можно ставить, можно нет. Как понравится твоей пятке левой ноги.
     
  13. Автор темы
    Stamorey

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

    Баллы:
    66
    Имя в Minecraft:
    Stamorey
    белым текстом после своего сообщения это и написал)) :
    {
    это для того, чтобы показать нубу , что sign и block никогда не меняются и работают как я предположил по типу указателей в плюсах?)
    }[DOUBLEPOST=1479034709,1479034561][/DOUBLEPOST]Еще одна проблемка, есть какое-нибудь событие, которое вызывается каждый игровой тик или секунду?
    Нужно сделать изменение мира на сарвере, независимо от событий игроков(пока-что использовал только события по типу PlayerToggleSneakEvent или PlayerTeleportEvent)
     
  14. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Тот же шедулер.
    Значит подтвердил твою догадку.
     
  15. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    final не дает переопределять, для того и ставится.
     
  16. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Можно и так объяснить. Но ведь самому себе палки в колёса ставить не оч.
     
  17. Автор темы
    Stamorey

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

    Баллы:
    66
    Имя в Minecraft:
    Stamorey
    никогда с ним не работал...
    Нашел вот только такой пример :
    1. //активация таймера
    2. @Override
    3. public void onEnable()
    4. {
    5. Timer tp = new Timer();
    6. tp.runTaskTimer(this, 0L, 50L); //50 - переодичность
    7. }

    8. Создаем класс Timer

    9. в нем

    10. import org.bukkit.scheduler.BukkitRunnable;


    11. public class Timer extends BukkitRunnable
    12. {

    13. @Override
    14. public void run()
    15. {
    16. Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "say capone641694");
    17. }

    18. }
    как я понял здесь метод run вызывается каждые 50L(тоесть вроде как 2,5секунды),
    Не знаете, как запустить класс не в новом классе
    +++, как понял это просто правила хорошоге тона, для облегчения чтения кода, ну или в моем случае :
    {
    это для того, чтобы показать нубу , что sign и block никогда не меняются и работают как я предположил по типу указателей в плюсах.
    }
     
  18. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Палги и колеса тут не причем.[DOUBLEPOST=1479047028,1479046556][/DOUBLEPOST]
    Шедулер измеряется в тиках. 20 тиков = 1 сек, при условие 20 тпс.
     
    Последнее редактирование: 13 ноя 2016
  19. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Говно, а не код, он еще и в консоль шлет сообщение диспетчем...
    Код:
    new BukkitRunnable() {
    public void run() {
    //20 тиков - 1сек.
    }
    }.runTaskTimer(объявленный главный класс, 0L, 20L);
    [DOUBLEPOST=1479102259,1479102173][/DOUBLEPOST]Есть и другие типы таймеров, поищи.
     
  20. Автор темы
    Stamorey

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

    Баллы:
    66
    Имя в Minecraft:
    Stamorey
    ну, сообщение от консоли мне не нужно, я его вырезал, вместо него код - проверка онлайна и тд, после чего эта информация отображается на табличках

    (по сути для этого и искал таймер, чтобы сделать динамичные таблички, ну и еще пару проверок.)

    Но кроме такого таймер ничего не нашел, если знаете что-то лучше, напишите)
    (и все таки чем этот таймер так плох?:confused:)
     
  21. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    А в том, что на шедулеры не выделяют отдельные классы
     

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