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

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

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(), все равно не пашет.
3lFS6.png

Заодно спрошу еще одно - как узнать стоит ли человек в привате? Сделал вот так:
Код:
 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
 
Настоятельно рекомендуется сесть за чтение литературы по изучению java.
"player" == "player"
Это не будет true, причины и следствия описаны в любой толковой книге.
 
Настоятельно рекомендуется сесть за чтение литературы по изучению java.
"player" == "player"
Это не будет true, причины и следствия описаны в любой толковой книге.
Я совсем тупой, или тут есть какой-то подвох? :D
3lMO4.png

Настоятельно рекомендуется сесть за чтение литературы по изучению java.
"player" == "player"
Это не будет true, причины и следствия описаны в любой толковой книге.
Все, разобрался, нашел на другом сайте)
В чем проблема во втором случае? Помогите, пожалуйста.
 
Я совсем тупой, или тут есть какой-то подвох? :D
3lMO4.png


Все, разобрался, нашел на другом сайте)
В чем проблема во втором случае? Помогите, пожалуйста.

C чем ты разобрался? я же сказал, чтобы начал осваивать язык с книги, а не с интернета.
Если ты задаешь вопросы по поводу сравнение строк, у которых сравниваются указатели, когда нужно сравнивать их специальной функций, то разговор не продуктивен.
Для WG есть своя документация и в ней написано как узнать "состоит ли в привате человек или нет"
 
Второй вопрос посмотри, у него ошибку выдает при использовании метода canBuild
No enclosing instance of the type WorldGuardPlugin is accessible in scope
 
Как хукаешь WorldGuard?
Собство цель довольно простая - запретит использовать посох огня из таумкравта на привате, где выключено пвп.
Вот весь код:
Код:
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)){
                     
                  }
          }
    }
   
}
 
Так нельзя:creeper:
При включении инициализируй глобальную переменную wg, например.
Код:
  public WorldGuardPlugin wg;
  ...
 
  @Override
  public void onEnable()
  {
    ...
    wg = (WorldGuardPlugin)getServer().getPluginManager().getPlugin(
      "WorldGuard");
  }
А потом уже используй
 
Так нельзя:creeper:
При включении инициализируй глобальную переменную wg, например.
Код:
  public WorldGuardPlugin wg;
  ...
 
  @Override
  public void onEnable()
  {
    ...
    wg = (WorldGuardPlugin)getServer().getPluginManager().getPlugin(
      "WorldGuard");
  }
А потом уже используй
Большое спасибо!
А теперь еще вопрос - как собственно блокировать то вещь? Я тыкаю на привате, мне в чат пишет, что нельзя юзать на привате, а юзать то могу :D
И еще. Примерно раз на 80-100 кликов в консоли такая ошибка -
3lU0g.png

Понял, такая фигня лезет при открытии предметов с интерфейсом. Что подправить в коде?
Код:
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("Этот предмет запрещено использовать в привате!"); 
                  }
          }
          }
   
      }
}
 
Большое спасибо!
А теперь еще вопрос - как собственно блокировать то вещь? Я тыкаю на привате, мне в чат пишет, что нельзя юзать на привате, а юзать то могу :D
И еще. Примерно раз на 80-100 кликов в консоли такая ошибка -
3lU0g.png

Понял, такая фигня лезет при открытии предметов с интерфейсом. Что подправить в коде?
Код:
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("Этот предмет запрещено использовать в привате!");
                  }
          }
          }
 
      }
}
Не надо каждый раз определять переменную wg.
 
Большое спасибо!
А теперь еще вопрос - как собственно блокировать то вещь? Я тыкаю на привате, мне в чат пишет, что нельзя юзать на привате, а юзать то могу :D
И еще. Примерно раз на 80-100 кликов в консоли такая ошибка -
3lU0g.png

Понял, такая фигня лезет при открытии предметов с интерфейсом. Что подправить в коде?
Код:
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("Этот предмет запрещено использовать в привате!");
                  }
          }
          }
 
      }
}

мб забыл дописать event.setCancelled(true); ?
 
Код:
  Location loc = new Location(event.getPlayer().getWorld(), event.getPlayer().getLocation().getX(), event.getPlayer().getLocation().getY(), event.getPlayer().getLocation().getZ());

Это лучший код, который я видел.
 
Исправил, но ошибка все равно спамит. Я какое-то исключение видимо не обрабатываю.

попробуй сделать так:
Код:
@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);
                }
}
}
Или это одно и тоже ?
по моему эта ошибка выходит когда на руке ничего нету.
 
Код:
  Location loc = new Location(event.getPlayer().getWorld(), event.getPlayer().getLocation().getX(), event.getPlayer().getLocation().getY(), event.getPlayer().getLocation().getZ());

Это лучший код, который я видел.
Зачем мне тратить лишние 24 байта на 3 переменные?
попробуй сделать так:
Код:
@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);
                }
}
}
Или это одно и тоже ?
по моему эта ошибка выходит когда на руке ничего нету.
Спасибо большое! Все, теперь нет ошибки)
 
Зачем мне тратить лишние 24 байта на 3 переменные?

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

Что значит "не работает". У меня каждый раз с getLocation() все в порядке, а у тебя "не работает".
Сделай дебаг и наведи на переменную, узнай, что с ней не так.
 
Что значит "не работает". У меня каждый раз с getLocation() все в порядке, а у тебя "не работает".
Сделай дебаг и наведи на переменную, узнай, что с ней не так.
Заработало уже все :D
Как вектор направления взгляда получить, не подскажешь?
Я вот только нашел вектор направления движения - event.getPlayer().getVelocity()
 
event.getPlayer().getEyeLocation().toVector()
 

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

Назад
Верх