Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Спасибо, но хотелось кодом.Если с удобствами - то есть TagAPI, на деве есть документация
Не то.setDisplayName?
как раз-таки это то. Эта команда меняет отображаемое имя, во всяком случае это было так. TagApi - берёшь и открываешь страничку плагина, там будет примеры кодом.Спасибо, но хотелось кодом.
Не то.
Это меняет только в списке игроков и по-моему в чате, а мне надо так, чтобы над головой менялось.как раз-таки это то. Эта команда меняет отображаемое имя, во всяком случае это было так. TagApi - берёшь и открываешь страничку плагина, там будет примеры кодом.
Это меняет только в списке игроков и по-моему в чате, а мне надо так, чтобы над головой менялось.
И TagAPI не подходит, потому что мне нужно это релизовать в моем плагине без зависимостей(Без пакетов не обойтесь).
String realName = p.getName();
EntityPlayer ep = ((CraftPlayer) p).getHandle();
ep.displayName = args[0];
PacketPlayOutNamedEntitySpawn packet = new PacketPlayOutNamedEntitySpawn(ep);
try{
Field field = packet.getClass().getDeclaredField("b");
field.setAccessible(true);
Object gameProfile = field.get(packet);
Field name = gameProfile.getClass().getDeclaredField("name");
name.setAccessible(true);
name.set(gameProfile, args[0]);
}catch(Exception ex){
ex.printStackTrace();
}
for(Player p2 : Bukkit.getOnlinePlayers()){
if(p2 != p){
((CraftPlayer)p2).getHandle().playerConnection.sendPacket(packet);
}
}
ep.displayName = realName;
Спасибо!Нашёл это ↑ в комментах к одному видео.Код:String realName = p.getName(); EntityPlayer ep = ((CraftPlayer) p).getHandle(); ep.displayName = args[0]; PacketPlayOutNamedEntitySpawn packet = new PacketPlayOutNamedEntitySpawn(ep); try{ Field field = packet.getClass().getDeclaredField("b"); field.setAccessible(true); Object gameProfile = field.get(packet); Field name = gameProfile.getClass().getDeclaredField("name"); name.setAccessible(true); name.set(gameProfile, args[0]); }catch(Exception ex){ ex.printStackTrace(); } for(Player p2 : Bukkit.getOnlinePlayers()){ if(p2 != p){ ((CraftPlayer)p2).getHandle().playerConnection.sendPacket(packet); } } ep.displayName = realName;
в новых версиях всё так плохо?Нашёл это ↑ в комментах к одному видео.Код:String realName = p.getName(); EntityPlayer ep = ((CraftPlayer) p).getHandle(); ep.displayName = args[0]; PacketPlayOutNamedEntitySpawn packet = new PacketPlayOutNamedEntitySpawn(ep); try{ Field field = packet.getClass().getDeclaredField("b"); field.setAccessible(true); Object gameProfile = field.get(packet); Field name = gameProfile.getClass().getDeclaredField("name"); name.setAccessible(true); name.set(gameProfile, args[0]); }catch(Exception ex){ ex.printStackTrace(); } for(Player p2 : Bukkit.getOnlinePlayers()){ if(p2 != p){ ((CraftPlayer)p2).getHandle().playerConnection.sendPacket(packet); } } ep.displayName = realName;
Спасибо!
Почему же, наоборот. Появился GameProfile, который всё устроил по полочкам. На мой взгляд теперь стало лучше.в новых версиях всё так плохо?
Т.е. ты считаешь, что теперь мешать NMS и рефлексии стало нормой?![]()
Почему же, наоборот. Появился GameProfile, который всё устроил по полочкам. На мой взгляд теперь стало лучше.
Почему "теперь"? Раньше тоже так было.Т.е. ты считаешь, что теперь мешать NMS и рефлексии стало нормой?
Ничего подобного. Нормальные разработчики использовали либо рефлексию для поддержки разных версий, либо NMS, но никак не вместе(при использовании первого надобность во втором пропадает)Почему "теперь"? Раньше тоже так было.