- Баллы
- 173
- Имя в Minecraft
- Nick
Есть нужна создать в определенный момент границу мира персонально для одного игрока.
Шарился по гуглу, отыскал несколько методов и даже отдельное АПИ. Все вроде бы хорошо, да и придраться не к чему, но вот только не срабатывает. Доков не особо много, чтобы понять в чем может быть ошибка.
UPD/ Разобрался. Если кому интересно, то нужно отправлять минимум 3 пакета с настройками борда, а не один.
Шарился по гуглу, отыскал несколько методов и даже отдельное АПИ. Все вроде бы хорошо, да и придраться не к чему, но вот только не срабатывает. Доков не особо много, чтобы понять в чем может быть ошибка.
Код:
#Один
public void sendWorldBorderPacket(Player player, int warningBlocks) {
EntityPlayer nmsPlayer = ((CraftPlayer) player).getHandle();
WorldBorder playerWorldBorder = nmsPlayer.world.getWorldBorder();
PacketPlayOutWorldBorder worldBorder = new PacketPlayOutWorldBorder(playerWorldBorder, PacketPlayOutWorldBorder.EnumWorldBorderAction.SET_WARNING_BLOCKS);
try {
Field field = worldBorder.getClass().getDeclaredField("i");
field.setAccessible(true);
field.setInt(worldBorder, warningBlocks);
field.setAccessible(!field.isAccessible());
} catch (Exception e) {
e.printStackTrace();
}
nmsPlayer.playerConnection.sendPacket(worldBorder);
}
Код:
#Два
public void sendWorldBorder(Player player, Location center, int size){
WorldBorder border = new WorldBorder();
border.setCenter(center.getX(), center.getZ());
border.setSize(size);
PacketPlayOutWorldBorder packet = new PacketPlayOutWorldBorder(border, EnumWorldBorderAction.INITIALIZE);
send(player, packet);
}
public void send(Player p, Packet packet){
((CraftPlayer)p).getHandle().playerConnection.sendPacket(packet);
}
UPD/ Разобрался. Если кому интересно, то нужно отправлять минимум 3 пакета с настройками борда, а не один.
Последнее редактирование: