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.