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

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

Discussion in 'Разработка плагинов для новичков' started by Stamorey, Nov 12, 2016.

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

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

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

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

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

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

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

    Trophy Points:
    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 Активный участник Пользователь

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

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

    Trophy Points:
    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намя Юности Активный участник Пользователь

    Trophy Points:
    46
    как-то так
    Code:
    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 Старожил

    Trophy Points:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    [​IMG]
     
  9. Reality_SC

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

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

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

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

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

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

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

    Dereku Старожил

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

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

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

    Dereku Старожил

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

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

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

    Dereku Старожил

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

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

    Trophy Points:
    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 Администратор

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

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

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

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

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

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

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

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

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

Share This Page