Помогите Как открыть игроку табличку с уже набранным текстом

OJIEKCAHDP

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
OJIEKCAHDP
Как открыть игроку табличку с уже набранным текстом, знаю, что можно через пакет, но там пустая табличка, подскажите пожалуйста :)
 
Последнее редактирование:
Да, спасибо конечно, но я не хочу качать 2 плагина, которые будут использоваться раз в год и то лишь мелкая их часть. Мне нужен вариант без прочих плагинов.
Раз решил идти в протоколы сам - будь готов изучать всё вручную. Для отправки текста в табличке тебе нужно сначала отправить на клиент блок с этой самой табличкой с текстом. По ссылке, которую тебе отправили, это и делают - за тобой остается адаптировать код без PL.
 
Да, спасибо конечно, но я не хочу качать 2 плагина, которые будут использоваться раз в год и то лишь мелкая их часть. Мне нужен вариант без прочих плагинов.
А кто тебе сказал устанавливать какие-то плагины? В треде написан исходный код того, что тебе нужно, достаточно просто изучить его и сделать что-то подобное.


Код:
        public void open(Player player) {
            Objects.requireNonNull(player, "player");
            if (!player.isOnline()) {
                return;
            }
            Location location = player.getLocation();
            this.position = new BlockPosition(location.getBlockX(), location.getBlockY() + (255 - location.getBlockY()), location.getBlockZ());

            player.sendBlockChange(this.position.toLocation(location.getWorld()), Material.OAK_SIGN.createBlockData());

            PacketContainer openSign = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.OPEN_SIGN_EDITOR);
            PacketContainer signData = ProtocolLibrary.getProtocolManager().createPacket(PacketType.Play.Server.TILE_ENTITY_DATA);

            openSign.getBlockPositionModifier().write(0, this.position);

            NbtCompound signNBT = (NbtCompound) signData.getNbtModifier().read(0);

            for (int line = 0; line < SIGN_LINES; line++) {
                signNBT.put("Text" + (line + 1), this.text.size() > line ? String.format(NBT_FORMAT, color(this.text.get(line))) : "");
            }

            signNBT.put("x", this.position.getX());
            signNBT.put("y", this.position.getY());
            signNBT.put("z", this.position.getZ());
            signNBT.put("id", NBT_BLOCK_ID);

            signData.getBlockPositionModifier().write(0, this.position);
            signData.getIntegers().write(0, ACTION_INDEX);
            signData.getNbtModifier().write(0, signNBT);

            try {
                ProtocolLibrary.getProtocolManager().sendServerPacket(player, signData);
                ProtocolLibrary.getProtocolManager().sendServerPacket(player, openSign);
            } catch (InvocationTargetException exception) {
                exception.printStackTrace();
            }
            inputs.put(player, this);
        }
 
постоянно вижу эти бессмысленые проверки isOnline(). Это метод из оффлайн плеера (интерфейс Player просто наследует его), и он для него и создан и работает так:

Bukkit.getPlayer(uuid) != null

Из чего следует, что если игрок оффлайн, то в мапе игроков его нет, т. е. он null. Другое дело, если передаете оффлайн плеера
 
постоянно вижу эти бессмысленые проверки isOnline(). Это метод из оффлайн плеера (интерфейс Player просто наследует его), и он для него и создан и работает так:

Bukkit.getPlayer(uuid) != null

Из чего следует, что если игрок оффлайн, то в мапе игроков его нет, т. е. он null. Другое дело, если передаете оффлайн плеера
А в чем проблема то, лол? Если запуск в асинхроне, или вовсе отложен, то проверка позволит не делать лишнего просчета.
 
лишняя итерация по игрокам. гет игрока тогда уж лучше делать в этом самом потоке. но, да. так то верно, прогадал. но часто встречал плагинах, где этот метод юзается в основном потоке не единожды
 
лишняя итерация по игрокам. гет игрока тогда уж лучше делать в этом самом потоке. но, да. так то верно, прогадал. но часто встречал плагинах, где этот метод юзается в основном потоке не единожды
Итераций нет - там самая обычная мапа <UUID, EntityPlayer>.
 
Назад
Верх