Обновление текста на табличках

Discussion in 'Разработка плагинов' started by xBeeegsone, 10/10/16.

  1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
Dismiss Notice
We welcome you on our site. This site is devoted to the Nukkit project and all that is connected with him. Here you can communicate, download plugins, also many other things get acquainted! Register the account right now :3
  1. xBeeegsone

    xBeeegsone Пользователь

    Messages:
    2
    Likes Received:
    0
    Minecraft:
    xBeeegsone
    Здравствуйте! Не могу разобраться с одной вещью, а именно обновлением текста на табличках. Например, на второй строке узнать количество игроков, находящихся в определённом мире.
    Может кто-нибудь подскажет про то, как это реализовать?)
     

    Attached Files:

    • 1.png
      1.png
      File size:
      221.8 KB
      Views:
      8
    • 2.png
      2.png
      File size:
      177.5 KB
      Views:
      8
  2. fromgate

    fromgate Administrator

    Messages:
    675
    Likes Received:
    191
    В чём задача?
    Считывать данные с таблички? Или узнать количество игроков в каком-то мире?
     
  3. Pub4Game

    Pub4Game Модератор всея Nukkit.ru Moderator

    Messages:
    62
    Likes Received:
    32
    Minecraft:
    Pub4Game
    Ну вот небольшой пример обновления онлайна на табличках во всех мирах, если на первой строке - [test]


    Code:
    this.getServer().getScheduler().scheduleRepeatingTask(new Runnable() {
    @Override
    public void run() {
    for (Level level : getServer().getLevels().values()) {
    for (BlockEntity blockEntity : level.getBlockEntities().values()) {
    if (blockEntity instanceof BlockEntitySign) {
    BlockEntitySign blockEntitySign = (BlockEntitySign) blockEntity;
    String[] lines = blockEntitySign.getText();
    if (lines[0].equals("[test]")) {
    blockEntitySign.setText("[test]", String.valueOf(getServer().getOnlinePlayers().size()));
    }
    }
    }
    }
    }
    }, 20);
     
    fromgate likes this.
  4. Tee7even

    Tee7even Nukkit Coders Team

    Messages:
    126
    Likes Received:
    27
    Ну а вот ещё лучше:
    Code:
    Set<BlockEntitySign> signs = new HashSet<>();
    
    public void onEnable() {
    getServer().getScheduler().scheduleRepeatingTask(() -> {
    signs.forEach((sign) -> sign.setText("[Online]", String.valueOf(getServer().getOnlinePlayers().size())));
    }, 20);
    }
    
    @EventHandler
    public void onSignChange(SignChangeEvent event) {
    if (event.getLine(0).toLowerCase().equals("[test]")) {
    signs.add((BlockEntitySign) event.getBlock().getLevel().getBlockEntity(event.getBlock()));
    }
    }
    
    Конечно, их нужно сохранять и загружать здесь, но по крайней мере мы не перебираем все сущности на уровне каждую секунду. ;)
     
  5. Pub4Game

    Pub4Game Модератор всея Nukkit.ru Moderator

    Messages:
    62
    Likes Received:
    32
    Minecraft:
    Pub4Game
    Только в твоем случае нужно проверять существует ли такой BlockEntity или нет
     
  6. Tee7even

    Tee7even Nukkit Coders Team

    Messages:
    126
    Likes Received:
    27
    Надо бы, конечно, но я исхожу из суждения, что если табличку меняли, то оно, собственно, есть.
     

Share This Page