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

Не получается сделать такое

  • Автор темы Автор темы Tyzun
  • Дата начала Дата начала

Tyzun

Старожил
Баллы
153
Имя в Minecraft
_Tyzun_
Вот написал код, которым хотел заблочит разрушение рамки в сурвивале.
Код:
 @EventHandler
      public void onBreak(HangingBreakByEntityEvent event)
      {
        Player entity = (Player)event.getRemover();
 
 
          if (!hasPerm(entity, "cl.if") && entity.getGameMode() == GameMode.SURVIVAL);
          {
            entity.sendMessage("Перейдите в креатив режим чтоб разрушить это");
            event.setCancelled(true);
          }
        }
Но оно не дает разрушить ни в креате, ни в сурвивале.

И еще, каким образом блокируется ложение определенных вещей в сундук с использованием Shiftа, и почему делая вот так
Код:
    @EventHandler
      public void onInventoryClick(InventoryClickEvent event)
      {
        Player player = (Player)event.getWhoClicked();
 
        if ((event.getInventory().getType().equals(InventoryType.CHEST)) || (event.getInventory().getType().equals(InventoryType.FURNACE)) || (event.getInventory().getType().equals(InventoryType.DISPENSER)) || (event.getInventory().getType().equals(InventoryType.DROPPER)) || (event.getInventory().getType().equals(InventoryType.HOPPER)) || (event.getInventory().getType().equals(InventoryType.BREWING))){
            if (!hasPerm(player, "cl.inventories")) {
            if(event.getCursor().getType().equals(Material.EXP_BOTTLE)){
            player.sendMessage("Вам нельзя ложить это в данный контейнер");
            event.setCancelled(true);
            }
            }
        }
При многократных попытках положить вещь в контейнер наступает момент когда получается это сделать(раз с 20-30 в один слот жмеш и жмеш и в один момент вещь всетаки остается в слоту)?
 
Код:
    @EventHandler
    public void EntityInteractEvent (PlayerInteractEntityEvent event)
    {
        Entity entity = event.getRightClicked();
        Player player = event.getPlayer();
     
        if ( entity.getType() == EntityType.ITEM_FRAME ) {
            player.sendMessage("Перейдите в креатив режим чтоб разрушить это");
 
            event.setCancelled(true);
 
        }
    }
 
Вот написал код, которым хотел заблочит разрушение рамки в сурвивале.
Код:
 @EventHandler
      public void onBreak(HangingBreakByEntityEvent event)
      {
        Player entity = (Player)event.getRemover();
 
 
          if (!hasPerm(entity, "cl.if") && entity.getGameMode() == GameMode.SURVIVAL);
          {
            entity.sendMessage("Перейдите в креатив режим чтоб разрушить это");
            event.setCancelled(true);
          }
        }
Но оно не дает разрушить ни в креате, ни в сурвивале.


if (!hasPerm(entity, "cl.if") && entity.getGameMode() == GameMode.SURVIVAL);
точку с запятой убери в конце. ей ты оторвал if от всего остального, что за ним, и оно выполняется в любом случае.
 
Спасибо, незаметил.
А на второй вопрос про контейнеры ответа все же не нашел.
 
Спасибо, незаметил.
А на второй вопрос про контейнеры ответа все же не нашел.

ты уверен, что она на самом деле там остается? это может быть визуальный глюк только на стороне игрока.
 
ты уверен, что она на самом деле там остается? это может быть визуальный глюк только на стороне игрока.
возможно, но я всеравно неразобрался как блочить шифт
 
Я проверил, и это не визуальный баг, и что же с этим делать
Можно инвентарь обновлять, но будет ещё страшнее. Можно проверять содержимое сундука(или иного инвентаря)
 
невыходит все же, быстрым кликом за 30 секунд выложил в сундук стак алмов
 
И еще, каким образом блокируется ложение определенных вещей в сундук с использованием Shiftа, и почему делая вот так
Код:
    @EventHandler
      public void onInventoryClick(InventoryClickEvent event)
      {
        Player player = (Player)event.getWhoClicked();
 
        if ((event.getInventory().getType().equals(InventoryType.CHEST)) || (event.getInventory().getType().equals(InventoryType.FURNACE)) || (event.getInventory().getType().equals(InventoryType.DISPENSER)) || (event.getInventory().getType().equals(InventoryType.DROPPER)) || (event.getInventory().getType().equals(InventoryType.HOPPER)) || (event.getInventory().getType().equals(InventoryType.BREWING))){
            if (!hasPerm(player, "cl.inventories")) {
            if(event.getCursor().getType().equals(Material.EXP_BOTTLE)){
            player.sendMessage("Вам нельзя ложить это в данный контейнер");
            event.setCancelled(true);
            }
            }
        }
При многократных попытках положить вещь в контейнер наступает момент когда получается это сделать(раз с 20-30 в один слот жмеш и жмеш и в один момент вещь всетаки остается в слоту)?


может getInventory().getType() тебе возвращает не инвентарь сундука или еще чего, а инвентарь игрока? поэтому условие не срабатывает и ничего не происходит.
 
Незнаю, оно срабатывает, но на каждые 10-15 попыток дает осечку
Код:
@EventHandler
    public void onInventoryClick(InventoryClickEvent event)
    {
          if ((event.getInventory().getType().equals(InventoryType.CHEST)) || (event.getInventory().getType().equals(InventoryType.FURNACE)) || (event.getInventory().getType().equals(InventoryType.DISPENSER)) || (event.getInventory().getType().equals(InventoryType.DROPPER)) || (event.getInventory().getType().equals(InventoryType.HOPPER)) || (event.getInventory().getType().equals(InventoryType.BREWING)) || (event.getInventory().getType().equals(InventoryType.DROPPER))){
              Player player = (Player)event.getWhoClicked();
              boolean noput = false;
           
              if (event.getRawSlot() < event.getInventory().getSize()) {
                  if((event.getCursor().getType().equals(Material.ВЕЩЬ)) || event.isShiftClick()){
                  noput = true;
                  }
              }
         
          if(noput && !(hasPerm(player, "cl.inventories"))){
              event.getInventory().setItem(event.getRawSlot(), new ItemStack(Material.AIR));
              event.getWhoClicked().getInventory().addItem(new ItemStack[] { new ItemStack(event.getCursor().getType(), event.getCursor().getAmount()) });
              event.getCursor().setAmount(0);
              event.setCursor(new ItemStack(Material.AIR));
              player.updateInventory();
              return;
          }
      }
    }
Вроде нашел решение, хоть и сложное
Не подскажите хороший урок по созданию конфигов(желательно не видео), а то я задолблюсь вписывать все нужные вещи и инвентари.
Да блин, что ж за неудача, протестил этот вариант: добиться того. чтоб вещь осталась теперь сложнее, но все же возможно.
+ второй вариант лишает зачара вещей
Алилуйя, уже аж голова болит, но у меня вышло это
Код:
 public void onInventoryClick(InventoryClickEvent event)
    {
      Player player = (Player)event.getWhoClicked();
      ItemStack holding = event.getCurrentItem();
      Inventory inv = event.getInventory();
      if ((inv.getType().equals(InventoryType.CHEST)) || (inv.getType().equals(InventoryType.FURNACE)) || (inv.getType().equals(InventoryType.DISPENSER)) || (inv.getType().equals(InventoryType.DROPPER)) || (inv.getType().equals(InventoryType.HOPPER)) || (inv.getType().equals(InventoryType.BREWING))){
          if (!hasPerm(player, "cl.inventories")) {
          if((holding.getType().equals(Material.ВЕЩЬ))){
          player.sendMessage("Вам нельзя ложить это в данный контейнер");
          event.setCancelled(true);
          }
          }
          }
      }
 
Назад
Верх