Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Открываешь мануал по ProtocolLib и начинаешь курить. Скуриваешь полностью и начинаешь накидывать то, что тебе нужно. Или тебе, по классике, готовый код нужен?)Добрый вечер, как можно заспавнить фейковый арморстенд который будет видеть только 1 игрок в течении 1 секунды(те невидимый, с ником, как голограмма)? Я знаю что это делается с помощью пакетов, но не знаю как.
Не, я хочу сделать отображение урона при попадании как в Apex или quake championsНадеюсь это не попытка на антиауру? Ибо бот не на столько отбитый, чтоб нападать на стенд вместо игрока.
Сначала ты полез в нмс, пытаясь создать EntityArmorStand, но так и не заспавнил его. Затем ты подтянул враппер пакета из протоколлиба и засендил его игроку.Попытался реализовать, но что то пошло не так. Как это можно исправить ?
Тебе вверху дали рабочий вариант, но вот еще парочка:Добрый вечер, как можно заспавнить фейковый арморстенд который будет видеть только 1 игрок в течении 1 секунды(те невидимый, с ником, как голограмма)? Я знаю что это делается с помощью пакетов, но не знаю как.
Я бы за такое бан дал, ЗА ТУПОСТЬ!Пакеты.
Я знаю что это делается с помощью пакетов, но не знаю как.
В HolographicDisplays есть менеджер видимости голограмм для опеределённых игроков
Тебе вверху дали рабочий вариант, но вот еще парочка:
1. Использовать holographic-displays.
2. Использовать https://www.spigotmc.org/resources/api-hologramapi.6766/ и https://www.spigotmc.org/resources/api-packetlistenerapi.2930/
Действительно, ничего.
Random rand = new Random();
int id = rand.nextInt(20000);
PacketContainer container = new PacketContainer(PacketType.Play.Server.SPAWN_ENTITY_LIVING) {{
getModifier().writeDefaults();
getIntegers().write(0, id);
getIntegers().write(1, 1);
getDoubles().write(0, spawnLoc.getX());
getDoubles().write(1, spawnLoc.getY());
getDoubles().write(2, spawnLoc.getZ());
}};
WrappedDataWatcher watcher = container.getDataWatcherModifier().read(0);
watcher.setObject(0, (byte) 0x20);
watcher.setObject(2, WrappedChatComponent.fromText("test"));
watcher.setObject(3, true);
watcher.setObject(5, true);
container.getDataWatcherModifier().write(0, watcher);
https://www.spigotmc.org/threads/pr...9-updating-code-dont-understand-error.131342/Есть следующий код:
Но при взаимодействии с полученным watcher он выдаёт следующую ошибку:PHP:Random rand = new Random(); int id = rand.nextInt(20000); PacketContainer container = new PacketContainer(PacketType.Play.Server.SPAWN_ENTITY_LIVING) {{ getModifier().writeDefaults(); getIntegers().write(0, id); getIntegers().write(1, 1); getDoubles().write(0, spawnLoc.getX()); getDoubles().write(1, spawnLoc.getY()); getDoubles().write(2, spawnLoc.getZ()); }}; WrappedDataWatcher watcher = container.getDataWatcherModifier().read(0); watcher.setObject(0, (byte) 0x20); watcher.setObject(2, WrappedChatComponent.fromText("test")); watcher.setObject(3, true); watcher.setObject(5, true); container.getDataWatcherModifier().write(0, watcher);
java.lang.IllegalArgumentException: You cannot register objects without a watcher object!
Как это можно исправить ?
public static void spawnTextArmorStand(String message, Player player, Location spawnLoc) {
Random rand = new Random();
int id = rand.nextInt();
PacketContainer container = new PacketContainer(PacketType.Play.Server.SPAWN_ENTITY_LIVING) {{
getModifier().writeDefaults();
getIntegers().write(0, id);
getIntegers().write(1, 1);
getDoubles().write(0, spawnLoc.getX());
getDoubles().write(1, spawnLoc.getY());
getDoubles().write(2, spawnLoc.getZ());
}};
WrappedDataWatcher.Serializer registry = WrappedDataWatcher.Registry.get(Boolean.class);
WrappedDataWatcher watcher = container.getDataWatcherModifier().read(0);
watcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(0, WrappedDataWatcher.Registry.get(Byte.class)), (byte) 0x20);
watcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(2, WrappedDataWatcher.Registry.getChatComponentSerializer(true)),
Optional.of(WrappedChatComponent.fromChatMessage(message)[0].getHandle()));
watcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(3, registry), true);
watcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(5, registry), true);
watcher.setObject(new WrappedDataWatcher.WrappedDataWatcherObject(11, WrappedDataWatcher.Registry.get(Byte.class)), (byte) (0x01 + 0x08));
container.getDataWatcherModifier().write(0, watcher);
try {
ProtocolLibrary.getProtocolManager().sendServerPacket(player, container);
} catch (InvocationTargetException e) {
e.printStackTrace();
}
PacketContainer move = new PacketContainer(PacketType.Play.Server.REL_ENTITY_MOVE) {{
getModifier().writeDefaults();
getIntegers().write(0, id);
getIntegers().write(2, 2500);
}};
try {
ProtocolLibrary.getProtocolManager().sendServerPacket(player, move);
} catch (InvocationTargetException e) {
e.printStackTrace();
}
Bukkit.getScheduler().runTaskLater(Quake.getPlugin(), () -> {
PacketContainer deSpawn = new PacketContainer(PacketType.Play.Server.ENTITY_DESTROY) {{
getModifier().writeDefaults();
getIntegerArrays().write(0, new int[]{id});
}};
try {
ProtocolLibrary.getProtocolManager().sendServerPacket(player, deSpawn);
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}, 10);
}