2016-01-11 4 views
0

Я попытался разработать что-то вроде TeleportSigns для моего Minecraft-Server. Но когда я пытаюсь изменить строку знака, ничего не происходит.Java - Spigot - Изменить строку знака

Это код для изменения строки:

// loadTpSign 
public static void loadTpSign(Sign sign) { 
    sign.setLine(0, "\2474[\2476Minepedia\2474]"); 
    sign.update(); 
    sign.setLine(1, "\247f\247l" + sign.getLine(1)); 
    sign.update(); 
    sign.setLine(2, "\2478\247l" + Server.getPlayer(sign.getLine(1)) + "/" + Server.getMaxPlayers(sign.getLine(1))); 
    sign.update(); 
    sign.setLine(3, Server.getStatus(sign.getLine(1).toLowerCase())); 
    sign.update(); 
} 

Я бегу метод loadTpSign в этом методе:

// createTpSign 
public static void createTpSign(Sign sign, String server) { 
    try { 
     PreparedStatement ps = MySQL.getConnection() 
       .prepareStatement("INSERT INTO TpSigns (world, x, y, z) VALUES (?,?,?,?)"); 
     ps.setString(1, sign.getWorld().getName()); 
     ps.setInt(2, sign.getX()); 
     ps.setInt(3, sign.getY()); 
     ps.setInt(4, sign.getZ()); 
     ps.executeUpdate(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    main.TpSignsList.add(new Location(sign.getWorld(), sign.getX(), sign.getY(), sign.getZ())); 
    TpSigns.loadTpSign(sign); 
} 

И этот метод я бегу в SignChangeEvent:

@EventHandler 
public void onSignChange(SignChangeEvent ev) { 
    if (ev.getPlayer() != null) { 
     Player p = ev.getPlayer(); 
     if (p.hasPermission("tpsign")) { 
      if (ev.getLine(0).equalsIgnoreCase("[TPSIGN]")) { 
       TpSigns.createTpSign((Sign) ev.getBlock().getState(), ev.getLine(1).toLowerCase()); 
      } 
     } 
    } 
} 

ответ

0

Я бы рекомендовал вам просто обновить знак один раз, после установки всех строк, + трудно помочь, пока мы не знаем, где вы это называете/в котором contex

+0

Я также пробовал его с запуском sign.update() только один раз. Но это тоже не сработало. Я также обновил свой вопрос, чтобы вы могли видеть, где я запускаю метод. – Nightfighter001

+0

TpSigns.createTpSign ((Sign) ev.getBlock(). GetState(), ev.getLine (1) .toLowerCase()); Почему именно вы бросаете его в блокстат? – AscendedKitten

+0

Я посмотрел «Блок» в JavaDoc и там было сказано, что вам нужно получить BlockState и передать его знаку, чтобы получить знак – Nightfighter001

Смежные вопросы