Пуля

svk

1,185
3
Пуля стоит на месте, хотя должна лететь -_-
[font=Verdana, Helvetica, Arial, sans-serif]http://pastebin.com/S8AjErUn[/font]
[font=Verdana, Helvetica, Arial, sans-serif]http://pastebin.com/abN7mtcv[/font]
[font=Verdana, Helvetica, Arial, sans-serif]http://pastebin.com/nYfNgS1k[/font]

После небольшого расследования, я понял, что все мои переменные равны на клиенте - null. Почему?
Вот так "запускаю" энтити:
Код:
                    if(!world.isRemote)
                    {
                        Vec3 movingobjectposition = player.getLookVec();
                        EntityBullet bullet = (EntityBullet) Class.forName(entity).getConstructor(World.class, EntityLivingBase.class).newInstance(world, (EntityLivingBase) player);
                        bullet.setPosition(bullet.posX + movingobjectposition.xCoord * 1.0D, bullet.posY+0.5 + movingobjectposition.yCoord * 1.0D, bullet.posZ + movingobjectposition.zCoord * 1.0D);
                        bullet.bylletMotionX = movingobjectposition.xCoord + scatterXZ() / (scatter+(scatter*nbt.getDouble("upScatter")));
                        bullet.bylletMotionY = movingobjectposition.yCoord + scatterY() / (scatter+(scatter*nbt.getDouble("upScatter")));
                        bullet.bylletMotionZ = movingobjectposition.zCoord + scatterXZ() / (scatter+(scatter*nbt.getDouble("upScatter")));
                        bullet.damage = bulletDamage+nbt.getInteger("upBulletDamage");
                        bullet.speed = bulletSpeed+nbt.getFloat("upBulletSpeed");
    
                        world.spawnEntityInWorld(bullet);
                    }
Но bylletMotion`ы равны нулю( Почему?
[merge_posts_bbcode]Добавлено: 20.06.2015 11:32:24[/merge_posts_bbcode]

Хотя не, оказалось что на клиенте все они равны null
[merge_posts_bbcode]Добавлено: 20.06.2015 11:34:49[/merge_posts_bbcode]

Может надо что-то писать, что-бы синхронизировать и мои переменные с клиентом?

[merge_posts_bbcode]Добавлено: 20.06.2015 11:35:57[/merge_posts_bbcode]

Та-же пытался заменить bylletMotion на стандартный motion, но в итоге тоже самое вышло.
 
Зачем пакет? Мне сказали, что синхронизация с клиентом идёт автоматически, и правда - партиклы энтити спавнит, но по теперь стоит на месте.
Если условие убрать, то энтити дублируется- одно стоит на месте, второе летит.
 
Вся проблема в том, что все переменные, которые я устанавливаю из класса оружия - идут на смарку.
Видимо они не синхронизируются с клиентом. Как их синхронизировать?

Ну, я пытался ещё поставить просто motionX, который дефолтный, но тоже не вышло. Я уж и не знаю что мне делать(
 
Во-первых, синхронизировать сущность целиком за тебя никто не будет. Майн синхронизирует лишь отдельные параметры, и для обычных Entity вроде только позицию. Почему у тебя не синхронизируется позиция - хз, покажи как регистрируешь сущность.
Во-вторых, если ты хочешь передавать клиентам дополнительные данные о сущности с сервера, то нужно реализовать интерфейс IAdditionalSpawnData. Впрочем, не уверен, что для пули это нужно.
В-третьих, ЕМНИП скорость сущности не отправляется, а скорость, записанная в твое левое поле - тем более. 

P.S: я очень хочу верить, что ты знаешь, что делаешь и тебе оно нужно: (EntityBullet) Class.forName(entity).getConstructor(World.class, EntityLivingBase.class).newInstance(world, (EntityLivingBase) player);
Для такого обычно используют паттерн "Factory", а не рефлексию, ну да как знаешь.
 
GloomyFolken написал(а):
Во-первых, синхронизировать сущность целиком за тебя никто не будет. Майн синхронизирует лишь отдельные параметры, и для обычных Entity вроде только позицию. Почему у тебя не синхронизируется позиция - хз, покажи как регистрируешь сущность.
Во-вторых, если ты хочешь передавать клиентам дополнительные данные о сущности с сервера, то нужно реализовать интерфейс IAdditionalSpawnData. Впрочем, не уверен, что для пули это нужно.
В-третьих, ЕМНИП скорость сущности не отправляется, а скорость, записанная в твое левое поле - тем более. 

P.S: я очень хочу верить, что ты знаешь, что делаешь и тебе оно нужно: (EntityBullet) Class.forName(entity).getConstructor(World.class, EntityLivingBase.class).newInstance(world, (EntityLivingBase) player);
Для такого обычно используют паттерн "Factory", а не рефлексию, ну да как знаешь.
Не знаю для чего эта фабрика, я понял, что она служит для распознания что объект поступил, и создаёт его экземпляр на выходе, с соотвецтвующим кастом.
Я мне это для того, что-бы я мог задать энтити из CommonProxy, и оно его спавнило. Это самый первый вариант который я нашел, не знаю, может можно передавать класс и запускать из него метод, я хз.

Лан, попробую передать свой объект со всеми параметрами в конструтор.
 
GloomyFolken написал(а):
А зачем задавать класс сущности из прокси?
Что-бы я передал аргумент (какое энтити спавнить) оружию, и он его спавнил.
[merge_posts_bbcode]Добавлено: 20.06.2015 13:35:04[/merge_posts_bbcode]

Придётся IAdditionalSpawnData создавать, ведь мне ещё надо переменная урона и доп. переменные, для уникальных энтити :(
 
Короче, я обязательно создам туториал, как сделать пулю :D
[merge_posts_bbcode]Добавлено: 20.06.2015 14:16:07[/merge_posts_bbcode]

Эм, ты имел ввиду IEntityAdditionalSpawnData?
Я симплементировал, а что дальше, просто дабавить в буффер мои переменные? А можно-ли целый объект туда пихнуть?

[merge_posts_bbcode]Добавлено: 20.06.2015 14:33:54[/merge_posts_bbcode]

Всё, пойду гайд писать :D
 
Назад
Сверху