Помогите Как отправить игроку пакет спавна моба.

  • Автор темы Автор темы Stamorey
  • Дата начала Дата начала

Stamorey

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Stamorey
Сам вопрос в названии темы, есть ProtocolLib, ядро 1.7.10...

С помощью такого кода могу отправить игроку фейковый взрыв:
JavaScript:
ProtocolManager manager = ProtocolLibrary.getProtocolManager();
PacketContainer fakeSpawn = manager.createPacket(PacketType.Play.Server.EXPLOSION);
        fakeSpawn.getDoubles().
                write(0, p.getLocation().getX()).
                write(1, p.getLocation().getY()).
                write(2, p.getLocation().getZ());
        fakeSpawn.getFloat().write(0, 3.0F);
     
            manager.sendServerPacket(p, fakeSpawn);
Как таким же способом можно заспавнить моба?
Тут: JavaDocs http://ci.dmulloy2.net/job/ProtocolLib/javadoc/index.html?overview-summary.html
нашел только название самого пакета SPAWN_ENTITY
 
Специально для ленивых есть же готовый врапер https://github.com/aadnk/PacketWrapper
Готовый? его же еще собрать надо...:oops: хотел без него, щас методом тыка пытаюсь понять какие пакеты отправляются сервером клиенту при спавне моба, и хочу попробовать записать в какоц-нибудь файл все данные из этого пакета. Пока только понял что отправляется пакет PacketType.Play.Server.ENTITY_TELEPORT после него отправляются пакеты с передвижениями, скорее всего PacketType.Play.Server.ENTITY_VELOCITY
 
Готовый? его же еще собрать надо...:oops: хотел без него, щас методом тыка пытаюсь понять какие пакеты отправляются сервером клиенту при спавне моба, и хочу попробовать записать в какоц-нибудь файл все данные из этого пакета. Пока только понял что отправляется пакет PacketType.Play.Server.ENTITY_TELEPORT после него отправляются пакеты с передвижениями, скорее всего PacketType.Play.Server.ENTITY_VELOCITY
facepalm.jpg
 
Что ты имел ввиду?
Действительно муть какую-то написал) посмотрел из чего состоит пакет телепорта, там интовые координаты вместо double(как написано на вики должны быть именно дабл) и к тому же больше реальных координат приблизительно в 30 раз, и вместо ID типа моба отправляется уникальный ID... да и вообще видимо этот пакет мне не нужен, Пытался ловить отправку пакета SPAWN_ENTITY ,не получалось(при спавне моба он не отправлялся) но оказалось что он отправляется для вещей...
Проблемка появилась с PacketPlayOutSpawnEntityLiving

INT ???? они же double должны быть (и как писал выше, отличаются от реальных примерно в 30 раз)
а именно x примерно в *36-38 раз, y почти всегда ровно в *32 z в *28
 
так у меня 1.8
а еще вчера было 1.7.10:good:
На нем вообще пустой net.minecraft.server ...
Не хотелось бы 1.11 ставить:oops:
Может знает кто-нибудь что с этими странными координатами делать
нашел это)
JavaScript:
public PacketPlayOutSpawnEntityLiving(EntityLiving entityliving) {
        this.a = entityliving.getId();
        this.b = (byte) EntityTypes.a(entityliving);
        this.c = MathHelper.floor(entityliving.locX * 32.0D);
        this.d = MathHelper.floor(entityliving.locY * 32.0D);
        this.e = MathHelper.floor(entityliving.locZ * 32.0D);
        this.i = (byte) ((int) (entityliving.yaw * 256.0F / 360.0F));
        this.j = (byte) ((int) (entityliving.pitch * 256.0F / 360.0F));
        this.k = (byte) ((int) (entityliving.aK * 256.0F / 360.0F));
        double d0 = 3.9D;
        double d1 = entityliving.motX;
        double d2 = entityliving.motY;
        double d3 = entityliving.motZ;

Если не сложно скиньте информацию по работе с метаданными, спавню летучую мышь, а вместо нее какой-то зародишь висит в воздухе, хотел по идее тоже самое только в другом состоянии (с анимацией полета на месте)...
JavaScript:
PacketContainer fakeSpawn = Pm.createPacket(PacketType.Play.Server.SPAWN_ENTITY_LIVING);
        fakeSpawn.getIntegers().
                write(0,228).
                write(1,65).
                write(2, (int)(p.getLocation().getX()*32.0D)).
                write(3, (int)(p.getLocation().getY()*32.0D)).
                write(4, (int)(p.getLocation().getZ()*32.0D));
        fakeSpawn.getBytes().
                write(0,(byte)((int)(p.getEyeLocation().getYaw()* 256.0F / 360.0F))).
                write(1,(byte)((int)(p.getEyeLocation().getPitch()* 256.0F / 360.0F))).
                write(2,(byte)((int)(p.getEyeLocation().getPitch()* 256.0F / 360.0F)));
        Pm.sendServerPacket(p, fakeSpawn);

Разобрался с метаданными пакета PacketPlayOutSpawnEntityLiving , который у меня посылается через PacketWrapper, но не в этом суть, после него должны отправляться другие пакеты, вопрос - какие?
Иначе получается чучело моба со скрина...
UP
Помогите понять, пожалуйста, какие и в каком порядке отправляются пакеты при спавне мобов.:eek:
Или скиньте мануал какой-нибудь, ссылочку...
 
Последнее редактирование:
Обычно PacketPlayOutSpawnEntity, а затем PacketPlayOutEntityMetadata. Можешь ещё глянуть PacketPlayOutEntityHeadRotation.
 
Спасибо, уже сам разобрался, прослушивая отправку пакетов, без PacketPlayOutEntityMetadata летучая мышь спавнится в виде зародыша) осталось только понять что делать с List<WrappedWatchableObject> который передается в этом пакете:cry:
Вроде как тоже самое. что и WrappedDataWatcher, только не пойму зачем нужны були, при спавне моба отправляется всегда два пакета PacketPlayOutEntityMetadata , в первом все були==true , во втором наоборот,
=========================
ID:25>>>11<<<
I+++_16<<<
I+++_DataWatcherItem[index=16, value=1, dirty=true]<<<
I+++_15<<<
I+++_DataWatcherItem[index=15, value=0, dirty=true]<<<
I+++_9<<<
I+++_DataWatcherItem[index=9, value=0, dirty=true]<<<
I+++_8<<<
I+++_DataWatcherItem[index=8, value=0, dirty=true]<<<
I+++_7<<<
I+++_DataWatcherItem[index=7, value=0, dirty=true]<<<
I+++_6<<<
I+++_DataWatcherItem[index=6, value=6.0, dirty=true]<<<
I+++_4<<<
I+++_DataWatcherItem[index=4, value=0, dirty=true]<<<
I+++_3<<<
I+++_DataWatcherItem[index=3, value=0, dirty=true]<<<
I+++_2<<<
I+++_DataWatcherItem[index=2, value=, dirty=true]<<<
I+++_1<<<
I+++_DataWatcherItem[index=1, value=300, dirty=true]<<<
I+++_0<<<
I+++_DataWatcherItem[index=0, value=0, dirty=true]<<<
=========================
ID:25>>>11<<<
I+++_16<<<
I+++_DataWatcherItem[index=16, value=0, dirty=false]<<<
I+++_15<<<
I+++_DataWatcherItem[index=15, value=0, dirty=false]<<<
I+++_9<<<
I+++_DataWatcherItem[index=9, value=0, dirty=false]<<<
I+++_8<<<
I+++_DataWatcherItem[index=8, value=0, dirty=false]<<<
I+++_7<<<
I+++_DataWatcherItem[index=7, value=0, dirty=false]<<<
I+++_6<<<
I+++_DataWatcherItem[index=6, value=6.0, dirty=false]<<<
I+++_4<<<
I+++_DataWatcherItem[index=4, value=0, dirty=false]<<<
I+++_3<<<
I+++_DataWatcherItem[index=3, value=0, dirty=false]<<<
I+++_2<<<
I+++_DataWatcherItem[index=2, value=, dirty=false]<<<
I+++_1<<<
I+++_DataWatcherItem[index=1, value=300, dirty=false]<<<
I+++_0<<<
I+++_DataWatcherItem[index=0, value=0, dirty=false]<<<
=========================
 
Идиоты которые не знают что такое баккит меня больше радуют. Баккит это враппер на ванильном майне. Следовательно эти "приколюхи" самого майна.
А кто сказал, что пакеты NMS отправляет? Вполне вероятно, что это делает сам баккит. Да они и зафиксить могли бы этот кал при желании, думаю...
 
А кто сказал, что пакеты NMS отправляет? Вполне вероятно, что это делает сам баккит. Да они и зафиксить могли бы этот кал при желании, думаю...
Неа. в ведре лишь абстракт обертка над сервером.
Протоколлиб же обертка над всеми пакетами.
 
Они ж вроде делают патчи NMS, нет? Ну, Спигот как минимум...
Внедряют ивенты в код майна, и ведроапи на абстрактных методах. Крафтведро прослойка между апи и сервером.
nms, это переменные после обфускации майна.
 
Внедряют ивенты в код майна, и ведроапи на абстрактных методах. Крафтведро прослойка между апи и сервером.
nms, это переменные после обфускации майна.
Я к NMS отношу весь пакет net.minecraft.server со всем его содержимым...
 
Назад
Верх