Posted June 2, 201411 yr Hey, I made a projectile and wanted it to explode on impact (I extended EntityThrowable). Code: protected void onImpact(MovingObjectPosition movingobjectposition) { this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 4.5F, true); this.setDead(); } But the blocks are buggy. If I fly into the crater there will be invisible blocks, which should be exploded.
June 2, 201411 yr Just guessing, but you might want to limit the explosion to the server side. Long time Bukkit & Forge Programmer Happy to try and help
June 2, 201411 yr Author I tried to use @SideOnly(Side.CLIENT) , but there was the same problem. I also tried public void onImpact(MovingObjectPosition movingobjectposition) { if(!this.worldObj.isRemote) { this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 4.5F, true); this.setDead(); } } but there was no explosion.
June 2, 201411 yr Get rid of the SideOnly stuff. From your description you are using it inproperly. Put some markers in your code for debugging so you can tell if it worked or not. System.out.println("blah blah blah"); Put something at start of your method, at the first if, ect so you know it fired. By watching the debug screen you will also know if it happend on server/client/both. // Working code snipet from something I have. if (!this.worldObj.isRemote) { // Create Explosion - flag is boolean for whether you want it to damage the environment. this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, (float)this.explosionRadius, flag); // Set the mob to dead this.setDead(); } Long time Bukkit & Forge Programmer Happy to try and help
June 2, 201411 yr Author @Override public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { world.playSoundAtEntity(player, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); if (world.isRemote) { world.spawnEntityInWorld(new MyEntityProjectile(world, player)); itemStack.damageItem(1, player); } return itemStack; }
June 2, 201411 yr You are spawning it client side. try inverting the if world.isRemote check Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
June 2, 201411 yr Author !this.worldObj.isRemote It'll crash with the dirt background and 'Connection Lost' 'A fatal error has occured, this connection is terminatd'.
June 2, 201411 yr Show the code where you put that and everything around it. Long time Bukkit & Forge Programmer Happy to try and help
June 2, 201411 yr Author public class MyItem extends Item { public MyItem() { super(); this.setMaxDamage(50); this.setMaxStackSize(1); this.setFull3D(); } @Override public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { world.playSoundAtEntity(player, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); if (world.isRemote) { world.spawnEntityInWorld(new MyEntityProjectile(world, player)); itemStack.damageItem(1, player); } return itemStack; } public class MyEntityProjectile extends EntityThrowable { public MyEntityProjectile(World world, EntityLivingBase entity) { super(world, entity); } public void onImpact(MovingObjectPosition movingobjectposition) { if (!this.worldObj.isRemote) { this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 4.5F, true); } } As it is now, there will be NO explosion on impact. If i remove the ! in the projectile class it will explode, but the blocks will be buggy
June 2, 201411 yr As they told you before, chante this to "!world.isRemote" if (world.isRemote) { world.spawnEntityInWorld(new MyEntityProjectile(world, player)); itemStack.damageItem(1, player); } You are generating your projectile on the client side only, so obviously it won't create an explosion on the server. Lastly, as I said before add some log points in your code so you can see where it is derailing. Long time Bukkit & Forge Programmer Happy to try and help
June 2, 201411 yr Author Like I told you before.. !this.worldObj.isRemote It'll crash with the dirt background and 'Connection Lost' 'A fatal error has occured, this connection is terminatd'. It looks like this:
June 2, 201411 yr And as before, we stated to post your code. You keep saying "!this.worldObj.isRemote" but there is no way to know how or where you typed it and made a mistake. Long time Bukkit & Forge Programmer Happy to try and help
June 3, 201411 yr Author @EventHandler public void preInit(FMLPreInitializationEvent event) { EntityRegistry.registerModEntity(MyEntityProjectile.class, "MyProjectile", entityIndex++, this, 64, 10, true); } If I use public MyEntityProjectile(World world) { super(world); } instead of public MyEntityProjectile(World world, EntityLivingBase player) { super(world, player); } the entity isn't spawning.
June 3, 201411 yr Author All works fine now. public class MyEntityProjectile extends EntityThrowable { public MyEntityProjectile(World par1World) { super(par1World); } public MyEntityProjectile(World par1World, EntityLivingBase par2EntityLivingBase) { super(par1World, par2EntityLivingBase); } public MyEntityProjectile(World par1World, double par2, double par4, double par6) { super(par1World, par2, par4, par6); } protected void onImpact(MovingObjectPosition movingobjectposition) { if (!this.worldObj.isRemote) { this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 4.5F, true); } } public class MyItem extends Item { public MyItem() { super(); this.setMaxDamage(50); this.setMaxStackSize(1); this.setFull3D(); } @Override public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { world.playSoundAtEntity(player, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); if (!world.isRemote) { world.spawnEntityInWorld(new MyEntityProjectile(world, player)); itemStack.damageItem(1, player); } return itemStack; } I've found my old code
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.