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

Помогите Как сравнить ник игрока?

Тема в разделе "Разработка плагинов для новичков", создана пользователем Iggi6666, 22 июн 2013.

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

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Всем привет, и сегодня у меня очередной вопрос к нашему замечательному сообществу.
    Вот есть вот такой код -
    Код:
    sender.sendMessage("До сравнения: "+sender.getName());
                            if (sender.getName() == "Iggi666"){
                                sender.sendMessage("IGGI666");
                                sender.sendMessage("Сравнение пройдено: "+sender.getName());
                            }else{
                                sender.sendMessage("Сравнение не пройдено: "+sender.getName());
                            }
                            sender.sendMessage("После сравнения: "+sender.getName());
    Удивительным образом мне всегда пишет, что сравнение не пройдено.
    Пробовал я разные варианты - и trim() и toString(), все равно не пашет.
    [​IMG]

    Заодно спрошу еще одно - как узнать стоит ли человек в привате? Сделал вот так:
    Код:
     if ((event.getItem().getTypeId()) == 25284){
                      Location loc = new Location(event.getPlayer().getWorld(), event.getPlayer().getLocation().getX(), event.getPlayer().getLocation().getY(), event.getPlayer().getLocation().getZ());
                      if(WorldGuardPlugin.this.canBuild(event.getPlayer(), loc)){
                         
                      }
    Ошибка такая: No enclosing instance of the type WorldGuardPlugin is accessible in scope
     
  2. Хостинг MineCraft
    <
  3. ptnk

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

    Баллы:
    173
    Настоятельно рекомендуется сесть за чтение литературы по изучению java.
    "player" == "player"
    Это не будет true, причины и следствия описаны в любой толковой книге.
     
  4. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Я совсем тупой, или тут есть какой-то подвох? :D
    [​IMG][DOUBLEPOST=1371929195,1371928558][/DOUBLEPOST]
    Все, разобрался, нашел на другом сайте)
    В чем проблема во втором случае? Помогите, пожалуйста.
     
  5. ptnk

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

    Баллы:
    173
    C чем ты разобрался? я же сказал, чтобы начал осваивать язык с книги, а не с интернета.
    Если ты задаешь вопросы по поводу сравнение строк, у которых сравниваются указатели, когда нужно сравнивать их специальной функций, то разговор не продуктивен.
    Для WG есть своя документация и в ней написано как узнать "состоит ли в привате человек или нет"
     
  6. Revi

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

    Баллы:
    103
    Skype:
    misa9944
    Имя в Minecraft:
    useman
    Второй вопрос посмотри, у него ошибку выдает при использовании метода canBuild
    No enclosing instance of the type WorldGuardPlugin is accessible in scope
     
  7. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Как хукаешь WorldGuard?
     
  8. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Собство цель довольно простая - запретит использовать посох огня из таумкравта на привате, где выключено пвп.
    Вот весь код:
    Код:
    package me.iggi.firstplg;
     
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.World;
    import org.bukkit.block.Block;
    import org.bukkit.entity.Item;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.plugin.java.JavaPlugin;
     
    import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
     
     
    public class IggiProtection extends JavaPlugin implements Listener{
     
          @Override
          public void onEnable() {
              Bukkit.getPluginManager().registerEvents(this, this);
          }
          @EventHandler
          public void onInteract(PlayerInteractEvent event){
              if((event.getAction() == Action.LEFT_CLICK_AIR)||(event.getAction() == Action.LEFT_CLICK_BLOCK))
              {
           
                  if ((event.getItem().getTypeId()) == 25284){
                      Location loc = new Location(event.getPlayer().getWorld(), event.getPlayer().getLocation().getX(), event.getPlayer().getLocation().getY(), event.getPlayer().getLocation().getZ());
                      if(WorldGuardPlugin.this.canBuild(event.getPlayer(), loc)){
                         
                      }
              }
        }
       
    }
    
     
  9. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Так нельзя:creeper:
    При включении инициализируй глобальную переменную wg, например.
    Код:
      public WorldGuardPlugin wg;
      ...
     
      @Override
      public void onEnable()
      {
        ...
        wg = (WorldGuardPlugin)getServer().getPluginManager().getPlugin(
          "WorldGuard");
      }
    А потом уже используй
     
    Iggi6666 нравится это.
  10. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Большое спасибо!
    А теперь еще вопрос - как собственно блокировать то вещь? Я тыкаю на привате, мне в чат пишет, что нельзя юзать на привате, а юзать то могу :D
    И еще. Примерно раз на 80-100 кликов в консоли такая ошибка - [​IMG][DOUBLEPOST=1371938814,1371938383][/DOUBLEPOST]Понял, такая фигня лезет при открытии предметов с интерфейсом. Что подправить в коде?
    Код:
    package me.iggi.plugin;
     
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.plugin.java.JavaPlugin;
     
    import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
     
     
    public class IggiProtection extends JavaPlugin implements Listener{
          public WorldGuardPlugin wg;
          @Override
          public void onEnable() {
              Bukkit.getPluginManager().registerEvents(this, this);
          }
          @EventHandler
          public void onInteract(PlayerInteractEvent event){
              if((event.getAction() == Action.RIGHT_CLICK_AIR)||(event.getAction() == Action.RIGHT_CLICK_BLOCK))
              {
                  wg = (WorldGuardPlugin)getServer().getPluginManager().getPlugin("WorldGuard");
                  if ((event.getItem().getTypeId()) == 25284){
                      Location loc = new Location(event.getPlayer().getWorld(), event.getPlayer().getLocation().getX(), event.getPlayer().getLocation().getY(), event.getPlayer().getLocation().getZ());
                      if(wg.canBuild(event.getPlayer(), loc)){
                        event.getPlayer().sendMessage("Этот предмет запрещено использовать в привате!"); 
                      }
              }
              }
       
          }
    }
     
  11. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Не надо каждый раз определять переменную wg.
     
    Iggi6666 нравится это.
  12. BeYkeR

    BeYkeR Старожил Девелопер Пользователь

    Баллы:
    173
    мб забыл дописать event.setCancelled(true); ?
     
    Iggi6666 нравится это.
  13. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Исправил, но ошибка все равно спамит. Я какое-то исключение видимо не обрабатываю.
     
  14. ptnk

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

    Баллы:
    173
    Код:
      Location loc = new Location(event.getPlayer().getWorld(), event.getPlayer().getLocation().getX(), event.getPlayer().getLocation().getY(), event.getPlayer().getLocation().getZ());
    
    Это лучший код, который я видел.
     
    Пароль123456789, Сникерсни и ql_Nik_lp нравится это.
  15. BeYkeR

    BeYkeR Старожил Девелопер Пользователь

    Баллы:
    173
    попробуй сделать так:
    Код:
    @EventHandler
    public void onInteract(PlayerInteractEvent event){
    Player player = event.getPlayer();
    ItemStack item = player.getInventory().getItemInHand();
    if (item==null) return;
    if (item.getTypeId()!=25824) return;
    if((event.getAction() == Action.RIGHT_CLICK_AIR)||(event.getAction() == Action.RIGHT_CLICK_BLOCK))
    {
    wg = (WorldGuardPlugin)getServer().getPluginManager().getPlugin("WorldGuard");
    Location loc = new Location(event.getPlayer().getWorld(),event.getPlayer().getLocation().getX(),event.getPlayer().getLocation().getY(), event.getPlayer().getLocation().getZ());
                  if(wg.canBuild(event.getPlayer(), loc)){
                      event.getPlayer().sendMessage("Этот предмет запрещено использовать в привате!");
                      event.setCancelled(true);
                    }
    }
    }
    Или это одно и тоже ?[DOUBLEPOST=1371988346,1371987029][/DOUBLEPOST]по моему эта ошибка выходит когда на руке ничего нету.
     
  16. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Зачем мне тратить лишние 24 байта на 3 переменные?[DOUBLEPOST=1372009723,1372009691][/DOUBLEPOST]
    Спасибо большое! Все, теперь нет ошибки)
     
  17. ptnk

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

    Баллы:
    173
    О_о. За чем мне делать вызов 4 методов.
    Когда можно сделать
    loc = event.getPlayer().getLocation();
    Или когде можно сделать так, если кто боится ненароком случайных изменений
    loc = event.getPlayer().getLocation().clone();
    Да и если тут пошли переменные, да зачем вообще нужно заводить переменную loc, если так печетесь за за лишние байты? Когда везде можно было бы сувать event.getPlayer().getLocation().
     
  18. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    У меня не работало loc = event.getPlayer().getLocation(); :/
     
    ПриветОтМиднайта нравится это.
  19. ptnk

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

    Баллы:
    173
    Что значит "не работает". У меня каждый раз с getLocation() все в порядке, а у тебя "не работает".
    Сделай дебаг и наведи на переменную, узнай, что с ней не так.
     
  20. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Заработало уже все :D
    Как вектор направления взгляда получить, не подскажешь?
    Я вот только нашел вектор направления движения - event.getPlayer().getVelocity()
     
  21. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    event.getPlayer().getEyeLocation().toVector()
     
    Iggi6666 нравится это.

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