Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Как проверить наличие рамки на сундуке

Статус
Закрыто для дальнейших ответов.

Serega87

Активный участник
Пользователь
Баллы
61
Пожалуйста помогите. Уже все форумы пересмотрел и все перепробовал. Не могу проверить наличие рамки на сундуке при нажатии ЛКМ по табличке. Уже знаю что рамка это Entity. Так как в начале работал с событием PlayerInventoryEvent. Не выходит ни чего и с событием PlayerInteractEntityEvent. Нужно чтобы при нажатии ЛКМ по табличке мне написало сообщение ''Вы угадали", если в сундуке предмет соответствовал тому что в рамке.
Если код большой, напишите пожалуйста хотя бы код проверки наличия рамки на сундуке при нажатии ЛКМ по табличке. Spigot 1.12.2
3.jpg
 
Код:
@EventHandler
public void onInventoryClick(PlayerInteractEvent event) {
      if (event.getClickedBlock() == null) {
          return;
      }
      if (event.getAction() != Action.LEFT_CLICK_BLOCK) {
          return;
      }
      // TODO: Проверить, что кликнута табличка.
      final var clickedBlockLocation = event.getClickedBlock()
                                            .getLocation();
      // Find all frames nearby to the clicked sign.
      final var nearbyFrames = clickedBlockLocation.getNearbyEntitiesByType(ItemFrame.class, 2)
                                                   .stream()
                                                   // Filter item frames that not attached to chest.
                                                   // TODO: Все фильтры внизу требуют тестирования.
                                                   .filter(frame -> frame.getLocation()
                                                                         .getBlock()
                                                                         .getRelative(frame.getAttachedFace())
                                                                         .getType()
                                                                         .equals(Material.CHEST))
                                                   // Filter frames that not under the sign.
                                                   .filter(frame -> frame.getLocation()
                                                                         .getBlockY() == clickedBlockLocation.getBlockY() - 1)
                                                   // Filter frames that not directly under the sign.
                                                   // TODO: Можно сделать строже.
                                                   .filter(frame -> frame.getLocation()
                                                                         .getBlockX() == clickedBlockLocation.getBlockX()
                                                       || frame.getLocation()
                                                               .getBlockZ() == clickedBlockLocation.getBlockZ())
                                                   .toList();
      if (nearbyFrames.isEmpty()) {
          // Frames not found.
          return;
      }
      if (nearbyFrames.size() > 1) {
          // TODO: Если эта ситуация достигнута, то фильтры выше недостаточно строги.
          //  Писать в WARN об этом и выбирать ближайший frame, либо ничего не делать.
          return;
      }
      final var frame = nearbyFrames.get(0);
      // Если эта часть кода достигнута, то frame под табличкой найден (frame).
  }
 
Код:
@EventHandler
public void onInventoryClick(PlayerInteractEvent event) {
      if (event.getClickedBlock() == null) {
          return;
      }
      if (event.getAction() != Action.LEFT_CLICK_BLOCK) {
          return;
      }
      // TODO: Проверить, что кликнута табличка.
      final var clickedBlockLocation = event.getClickedBlock()
                                            .getLocation();
      // Find all frames nearby to the clicked sign.
      final var nearbyFrames = clickedBlockLocation.getNearbyEntitiesByType(ItemFrame.class, 2)
                                                   .stream()
                                                   // Filter item frames that not attached to chest.
                                                   // TODO: Все фильтры внизу требуют тестирования.
                                                   .filter(frame -> frame.getLocation()
                                                                         .getBlock()
                                                                         .getRelative(frame.getAttachedFace())
                                                                         .getType()
                                                                         .equals(Material.CHEST))
                                                   // Filter frames that not under the sign.
                                                   .filter(frame -> frame.getLocation()
                                                                         .getBlockY() == clickedBlockLocation.getBlockY() - 1)
                                                   // Filter frames that not directly under the sign.
                                                   // TODO: Можно сделать строже.
                                                   .filter(frame -> frame.getLocation()
                                                                         .getBlockX() == clickedBlockLocation.getBlockX()
                                                       || frame.getLocation()
                                                               .getBlockZ() == clickedBlockLocation.getBlockZ())
                                                   .toList();
      if (nearbyFrames.isEmpty()) {
          // Frames not found.
          return;
      }
      if (nearbyFrames.size() > 1) {
          // TODO: Если эта ситуация достигнута, то фильтры выше недостаточно строги.
          //  Писать в WARN об этом и выбирать ближайший frame, либо ничего не делать.
          return;
      }
      final var frame = nearbyFrames.get(0);
      // Если эта часть кода достигнута, то frame под табличкой найден (frame).
  }
Все в ошибках.
 
Последнее редактирование:
Код:
@EventHandler
    public void onInventoryClick(PlayerInteractEvent event) {
        if (event.getClickedBlock() == null) {
            return;
        }
        if (event.getAction() != Action.LEFT_CLICK_BLOCK) {
            return;
        }
        // TODO: Проверить, что кликнута табличка.
        final Location clickedBlockLocation = event.getClickedBlock()
                                                   .getLocation();
        // Find all frames nearby to the clicked sign.
        final List<ItemFrame> nearbyFrames =
            clickedBlockLocation.getNearbyEntitiesByType(ItemFrame.class, 2)
                                .stream()
                                // Filter item frames that not attached to chest.
                                // TODO: Все фильтры внизу требуют тестирования.
                                .filter(frame -> frame.getLocation()
                                                      .getBlock()
                                                      .getRelative(frame.getAttachedFace())
                                                      .getType()
                                                      .equals(Material.CHEST))
                                // Filter frames that not under the sign.
                                .filter(frame -> frame.getLocation()
                                                      .getBlockY() == clickedBlockLocation.getBlockY() - 1)
                                // Filter frames that not directly under the sign.
                                // TODO: Можно сделать строже.
                                .filter(frame -> frame.getLocation()
                                                      .getBlockX() == clickedBlockLocation.getBlockX()
                                    || frame.getLocation()
                                            .getBlockZ() == clickedBlockLocation.getBlockZ())
                                .toList();
        if (nearbyFrames.isEmpty()) {
            // Frames not found.
            return;
        }
        if (nearbyFrames.size() > 1) {
            // TODO: Если эта ситуация достигнута, то фильтры выше недостаточно строги.
            //  Писать в WARN об этом и выбирать ближайший frame, либо ничего не делать.
            return;
        }
        final ItemFrame frame = nearbyFrames.get(0);
        // Если эта часть кода достигнута, то frame под табличкой найден (frame).
    }
 
Код:
@EventHandler
    public void onInventoryClick(PlayerInteractEvent event) {
        if (event.getClickedBlock() == null) {
            return;
        }
        if (event.getAction() != Action.LEFT_CLICK_BLOCK) {
            return;
        }
        // TODO: Проверить, что кликнута табличка.
        final Location clickedBlockLocation = event.getClickedBlock()
                                                   .getLocation();
        // Find all frames nearby to the clicked sign.
        final List<ItemFrame> nearbyFrames =
            clickedBlockLocation.getNearbyEntitiesByType(ItemFrame.class, 2)
                                .stream()
                                // Filter item frames that not attached to chest.
                                // TODO: Все фильтры внизу требуют тестирования.
                                .filter(frame -> frame.getLocation()
                                                      .getBlock()
                                                      .getRelative(frame.getAttachedFace())
                                                      .getType()
                                                      .equals(Material.CHEST))
                                // Filter frames that not under the sign.
                                .filter(frame -> frame.getLocation()
                                                      .getBlockY() == clickedBlockLocation.getBlockY() - 1)
                                // Filter frames that not directly under the sign.
                                // TODO: Можно сделать строже.
                                .filter(frame -> frame.getLocation()
                                                      .getBlockX() == clickedBlockLocation.getBlockX()
                                    || frame.getLocation()
                                            .getBlockZ() == clickedBlockLocation.getBlockZ())
                                .toList();
        if (nearbyFrames.isEmpty()) {
            // Frames not found.
            return;
        }
        if (nearbyFrames.size() > 1) {
            // TODO: Если эта ситуация достигнута, то фильтры выше недостаточно строги.
            //  Писать в WARN об этом и выбирать ближайший frame, либо ничего не делать.
            return;
        }
        final ItemFrame frame = nearbyFrames.get(0);
        // Если эта часть кода достигнута, то frame под табличкой найден (frame).
    }
У меня версия jdk 1.8
Можно сказать что тоже самое как и выше. "Cannot resolve method 'getNearbyEntitiesByType' in 'Location'"
5.jpg
 
Последнее редактирование:
У меня версия jdk 1.8
Можно сказать что тоже самое как и выше. "Cannot resolve method 'getNearbyEntitiesByType' in 'Location'"

https://helpch.at/docs/1.12.2/org/b...ies-org.bukkit.Location-double-double-double-

Код:
@EventHandler
    public void onInventoryClick(PlayerInteractEvent event) {
        if (event.getClickedBlock() == null) {
            return;
        }
        if (event.getAction() != Action.LEFT_CLICK_BLOCK) {
            return;
        }
        // TODO: Проверить, что кликнута табличка.
        final Location clickedBlockLocation = event.getClickedBlock()
                                                   .getLocation();
        // Find all frames nearby to the clicked sign.
        final List<ItemFrame> nearbyFrames =
            clickedBlockLocation.getWorld().getNearbyEntities(clickedBlockLocation, 2, 2, 2)
                                .stream()
                                .filter(entity -> entity instanceof ItemFrame)
                                .map(entity -> (ItemFrame) entity)
                                // Filter item frames that not attached to chest.
                                // TODO: Все фильтры внизу требуют тестирования.
                                .filter(frame -> frame.getLocation()
                                                      .getBlock()
                                                      .getRelative(frame.getAttachedFace())
                                                      .getType()
                                                      .equals(Material.CHEST))
                                // Filter frames that not under the sign.
                                .filter(frame -> frame.getLocation()
                                                      .getBlockY() == clickedBlockLocation.getBlockY() - 1)
                                // Filter frames that not directly under the sign.
                                // TODO: Можно сделать строже.
                                .filter(frame -> frame.getLocation()
                                                      .getBlockX() == clickedBlockLocation.getBlockX()
                                    || frame.getLocation()
                                            .getBlockZ() == clickedBlockLocation.getBlockZ())
                                .toList();
        if (nearbyFrames.isEmpty()) {
            // Frames not found.
            return;
        }
        if (nearbyFrames.size() > 1) {
            // TODO: Если эта ситуация достигнута, то фильтры выше недостаточно строги.
            //  Писать в WARN об этом и выбирать ближайший frame, либо ничего не делать.
            return;
        }
        final ItemFrame frame = nearbyFrames.get(0);
        // Если эта часть кода достигнута, то frame под табличкой найден (frame).
    }
 
https://helpch.at/docs/1.12.2/org/b...ies-org.bukkit.Location-double-double-double-

Код:
@EventHandler
    public void onInventoryClick(PlayerInteractEvent event) {
        if (event.getClickedBlock() == null) {
            return;
        }
        if (event.getAction() != Action.LEFT_CLICK_BLOCK) {
            return;
        }
        // TODO: Проверить, что кликнута табличка.
        final Location clickedBlockLocation = event.getClickedBlock()
                                                   .getLocation();
        // Find all frames nearby to the clicked sign.
        final List<ItemFrame> nearbyFrames =
            clickedBlockLocation.getWorld().getNearbyEntities(clickedBlockLocation, 2, 2, 2)
                                .stream()
                                .filter(entity -> entity instanceof ItemFrame)
                                .map(entity -> (ItemFrame) entity)
                                // Filter item frames that not attached to chest.
                                // TODO: Все фильтры внизу требуют тестирования.
                                .filter(frame -> frame.getLocation()
                                                      .getBlock()
                                                      .getRelative(frame.getAttachedFace())
                                                      .getType()
                                                      .equals(Material.CHEST))
                                // Filter frames that not under the sign.
                                .filter(frame -> frame.getLocation()
                                                      .getBlockY() == clickedBlockLocation.getBlockY() - 1)
                                // Filter frames that not directly under the sign.
                                // TODO: Можно сделать строже.
                                .filter(frame -> frame.getLocation()
                                                      .getBlockX() == clickedBlockLocation.getBlockX()
                                    || frame.getLocation()
                                            .getBlockZ() == clickedBlockLocation.getBlockZ())
                                .toList();
        if (nearbyFrames.isEmpty()) {
            // Frames not found.
            return;
        }
        if (nearbyFrames.size() > 1) {
            // TODO: Если эта ситуация достигнута, то фильтры выше недостаточно строги.
            //  Писать в WARN об этом и выбирать ближайший frame, либо ничего не делать.
            return;
        }
        final ItemFrame frame = nearbyFrames.get(0);
        // Если эта часть кода достигнута, то frame под табличкой найден (frame).
    }
По ошибкам эта единственная.
5.jpg
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх