Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
никак. сохраняешь старый гм, включаешь гм 3 и player.setSpectatorTarget(target). Не знаю есть ли евент, но через шедулер можно чекать, если player.getSpectatorTarget() == null, то возвращать старый гм.но не выдавая при этом гм3
а что на счёт PacketPlayOutCamera ?никак. сохраняешь старый гм, включаешь гм 3 и player.setSpectatorTarget(target). Не знаю есть ли евент, но через шедулер можно чекать, если player.getSpectatorTarget() == null, то возвращать старый гм.
Тебе не нужен пакет для это есть метод Player#setSpectatorTarget(Player)а что на счёт PacketPlayOutCamera ?
Но ведь для него вроде как нужно выдавать гм3Тебе не нужен пакет для это есть метод Player#setSpectatorTarget(Player)
А в чём проблема выдать гм 3? Проверяй на таргета вот так:Но ведь для него вроде как нужно выдавать гм3
Не знаю есть ли евент, но через шедулер можно чекать, если player.getSpectatorTarget() == null, то возвращать старый гм.
очень много обходов, чтобы покинуть игрока и летать в гм3 свободно, да и + ещё хотбар СКМ никак не скрытьА в чём проблема выдать гм 3? Проверяй на таргета вот так:
а по другому никак. клиент только в гм3 умеет вселятся в игрока.очень много обходов, чтобы покинуть игрока и летать в гм3 свободно, да и + ещё хотбар СКМ никак не скрыть
на lastcraft & hypixel ведь реализовали без гм3а по другому никак. клиент только в гм3 умеет вселятся в игрока.
Ты думаешь там нету все тех же обходов чтоб летать?на lastcraft & hypixel ведь реализовали без гм3
а ты точно уверен что там гм3 не включается перед вселением в игрока?на lastcraft & hypixel ведь реализовали без гм3
Код ласта:Я бы посмотрел, как ты будешь таскать игрока в игроке без гм3.
Не думаю, что есть смысл это делать, просто выдавай гм3. Большинство игроков не смогут ничего сделать.
на lastcraft & hypixel ведь реализовали без гм3
if (command.getName().equalsIgnoreCase("test")) {
Field b = PacketPlayOutGameStateChange.class.getDeclaredField("b");
b.setAccessible(true);
Field c = PacketPlayOutGameStateChange.class.getDeclaredField("c");
c.setAccessible(true);
PacketPlayOutGameStateChange gamemodeChange = new PacketPlayOutGameStateChange();
b.set(gamemodeChange, 3);
c.set(gamemodeChange, 3f);
((CraftPlayer)p).getHandle().playerConnection.sendPacket(gamemodeChange);
ArmorStand toSpectate = (ArmorStand) p.getWorld()
.spawnEntity(p.getLocation(), EntityType.ARMOR_STAND); //тут просто игрок будет
toSpectate.setGravity(false);
new BukkitRunnable() {
boolean first = true;
@SneakyThrows
@Override
public void run() {
if (first) {
//если вызываем этот метод вместо использования PacketPlayOutCamera, то тогда сервер за нас будет обрабатывать шифт.
((CraftPlayer)p).getHandle().setSpectatorTarget(((CraftEntity) toSpectate).getHandle());
first = false;
}
toSpectate.teleport(toSpectate.getLocation().add(0, 0.6, 0));
if (toSpectate.getLocation().getY() > 255) {
c.set(gamemodeChange, 0f);
((CraftPlayer)p).getHandle().setSpectatorTarget(null);
((CraftPlayer)p).getHandle().playerConnection.sendPacket(gamemodeChange);
cancel();
toSpectate.remove();
}
}
}.runTaskTimer(this, 2, 1);
}
но без p.setGameMode(GameMode.ADVENTURE) телепортирует в камеру ведьp.setGameMode вызывает setSpectatorTarget(this), поэтому его просто телепортирует.
@SneakyThrows
@EventHandler
public void onSneak(PlayerToggleSneakEvent event) {
//if isSpectating(event.getPlayer()) {
sendPacket(event.getPlayer(), getCameraPacket(event.getPlayer()));
sendPacket(event.getPlayer(), getGamemodePacket(GameMode.SURVIVAL));
//}
}
@SneakyThrows
private PacketPlayOutGameStateChange getGamemodePacket(GameMode gameMode) {
PacketPlayOutGameStateChange gamemodeChange = new PacketPlayOutGameStateChange();
Field b = PacketPlayOutGameStateChange.class.getDeclaredField("b");
b.setAccessible(true);
Field c = PacketPlayOutGameStateChange.class.getDeclaredField("c");
c.setAccessible(true);
b.set(gamemodeChange, 3);
c.set(gamemodeChange, gameMode.ordinal());
return gamemodeChange;
}
@SneakyThrows
private PacketPlayOutCamera getCameraPacket(Entity entity) {
PacketPlayOutCamera camera = new PacketPlayOutCamera(((CraftEntity) entity).getHandle());
return camera;
}
private void sendPacket(Player player, Packet packet) {
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
}
sendPacket(player, getGamemodePacket(GameMode.SPECTATOR));
sendPacket(player, getCameraPacket(toSpectate));
sendPacket(player, getGamemodePacket(GameMode.SURVIVAL));
sendPacket(player, getCameraPacket(player));
Спасибо тебе большое, но когда я нажимаю на шифт, меня телепортирует на то место, где я вошел в камеру игрокаPHP:@SneakyThrows @EventHandler public void onSneak(PlayerToggleSneakEvent event) { //if isSpectating(event.getPlayer()) { sendPacket(event.getPlayer(), getCameraPacket(event.getPlayer())); sendPacket(event.getPlayer(), getGamemodePacket(GameMode.SURVIVAL)); //} } @SneakyThrows private PacketPlayOutGameStateChange getGamemodePacket(GameMode gameMode) { PacketPlayOutGameStateChange gamemodeChange = new PacketPlayOutGameStateChange(); Field b = PacketPlayOutGameStateChange.class.getDeclaredField("b"); b.setAccessible(true); Field c = PacketPlayOutGameStateChange.class.getDeclaredField("c"); c.setAccessible(true); b.set(gamemodeChange, 3); c.set(gamemodeChange, gameMode.ordinal()); return gamemodeChange; } @SneakyThrows private PacketPlayOutCamera getCameraPacket(Entity entity) { PacketPlayOutCamera camera = new PacketPlayOutCamera(((CraftEntity) entity).getHandle()); return camera; } private void sendPacket(Player player, Packet packet) { ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet); }
чтобы вселить игрока в когото:
PHP:sendPacket(player, getGamemodePacket(GameMode.SPECTATOR)); sendPacket(player, getCameraPacket(toSpectate));
чтобы выселить:
PHP:sendPacket(player, getGamemodePacket(GameMode.SURVIVAL)); sendPacket(player, getCameraPacket(player));
ну телепортни сам. сложно чтоли? Когда игрок вселяется в игрока, то по факту он стоит на месте, и просто камера меняется на камеру цели, и если цели например нет в зоне видимости, то тогда и вселятся не будет.Спасибо тебе большое, но когда я нажимаю на шифт, меня телепортирует на то место, где я вошел в камеру игрока