Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

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.

Just guessing, but you might want to limit the explosion to the server side. 

Long time Bukkit & Forge Programmer

Happy to try and help

  • 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.

 

 

 

 

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

  • 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;
    }

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/

  • Author

!this.worldObj.isRemote

 

It'll crash with the dirt background and

'Connection Lost'

'A fatal error has occured, this connection is terminatd'.

Show the code where you put that and everything around it.

Long time Bukkit & Forge Programmer

Happy to try and help

  • 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

 

 

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

  • 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:

2dr78eo.jpg

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

  • 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.

  • 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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

Important Information

By using this site, you agree to our Terms of Use.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.