Posted January 29, 20214 yr Hello. Before explanation want to notice that my Eng is not good enough, sorry if I misspelled something. So, my main problem is that I can't set entity motion similar to snowball/enderpearl/etc. In a general I'm trying to catch that minimal amount of code, which I need to create a basic projectile entity. So, now I have this: public class SupernovaBowItem extends ItemBase { @Override public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { SupernovaBurstEntity burst = new SupernovaBurstEntity(worldIn, playerIn); burst.func_234612_a_(playerIn, playerIn.rotationPitch, playerIn.rotationYaw, 0.0F, 1.5F, 1.0F); worldIn.addEntity(burst); return super.onItemRightClick(worldIn, playerIn, handIn); } } Here is just a basic item, which creates a simple entity and applies motion (via func_234612_a_()) based on player current pitch and yaw. Also tried with shoot() method, which already used by a mentioned earlier - same result. Here is my entity: public class SupernovaBurstEntity extends ProjectileItemEntity { public SupernovaBurstEntity(EntityType<? extends SupernovaBurstEntity> type, World worldIn) { super(type, worldIn); } public SupernovaBurstEntity(World worldIn, LivingEntity throwerIn) { super(EntityRegistry.SUPERNOVA_BURST.get(), throwerIn, worldIn); } public SupernovaBurstEntity(World worldIn, double x, double y, double z) { super(EntityRegistry.SUPERNOVA_BURST.get(), x, y, z, worldIn); } @Override public void tick() { if (this.ticksExisted % 200 == 0) this.remove(); SoulSparkData soulSparkData = new SoulSparkData( new Color(0.4F, 0.05F, 0.7F), 0.4, 80, 0.95F, false); world.addParticle(soulSparkData, getPosX(), getPosY(), getPosZ(), 0F, 0F, 0F); } @Override protected void onImpact(RayTraceResult result) { super.onImpact(result); } @Override protected Item getDefaultItem() { return ItemRegistry.SUPERNOVA_BOW.get(); } @Override public IPacket<?> createSpawnPacket() { return NetworkHooks.getEntitySpawningPacket(this); } } I don't rly need to use ProjectileItemEntity here, and I already make regular ProjectileEntity public (it's private by default for unknown reason), but just for example (compared to vanilla snowball/enderpearl/etc) I tried to do it via ProjectileItemEntity (also tried with ThrowableEntity, which is superclass for ProjectilItemEntity). What I get in result: My entity doesn't have any motion at all, it just spawns and floating in air like this: https://prnt.sc/xtoqrv Also noticed that I can't apply any motion to an entity at all and can move it only via move() method, but this thing makes all my previous code useless and with it I should make own implementation of movement, which is not a good thing. As a result I want to make something like an arrow that doesn't have any gravity and just moves towards one direction.
January 29, 20214 yr You need to call super.tick() in your tick method as it is where it updates its motion/position. Edited January 29, 20214 yr by poopoodice
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.