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

I need this code to be around 6000 ticks plus a random 100 to 1000 ticks? Is there a way to do it or does it have to be a set amount.

    public int tickRate(World par1World)
    {
    	return 6000;
    }

Hi

 

From memory, tickRate does nothing unless you schedule the update yourself

i.e. you need to call scheduleBlockUpdate each time the block is ticked anyway?

 

If I've misunderstood your question, perhaps show us more of your code?

 

-TGG

 

 

 

  • Author

I have set this up and it works. (I don't know if it is the right way though)

    public void onBlockAdded(World par1World, int par2, int par3, int par4)
    {
            par1World.scheduleBlockUpdate(par2, par3, par4, this.blockID, this.tickRate(par1World));
    }

    public int tickRate(World par1World)
    {
    	return 6000;
    }

    public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)
    {
        par1World.setBlock(par2, par3, par4, Mod.Block.blockID);
                   
    }

 

Basically after about 5 minuets I am making my block change into a different block but I don't want it to be exactly 6000 ticks for each one. I have every thing setup and it works I just want to know if I can make the block change randomly after 6000 ticks.

  • Author

I have tried that but it doesn't work they just update almost instantly and they all update at the same rate?

Yeah I didn't look very closely at your full code, sorry about that. You are changing the block into a different block that doesn't update back or anything, just stays, correct?

I believe that every time you are placing a block, it is updating the tick rate for every block of that id in the world, which is why they are all the same, I could be wrong, but that's what it looks like to me, i'm thinking about how it could be fixed.

//declare this:
public int tickcount
//in the constructor:
this.setTickRandomly(true);
//and then add:
public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)
    {
if(tickcount < 50)
//Or a different value, you'll have to play around with it.
{
       tickcount++
}
else{
par1World.setBlock(par2, par3, par4, Mod.Block.blockID);
}
    }

That should be a lot more random than you have, still not sure if it's what you're looking for.

It's essentially the same as the code that farmland uses to decide if it is going to go back to being dirt, but with a counter in order to make it last longer.

  • Author

There were errors when I added it this is what I have now with no errors but nothing is happening?

//declare this
public int tickcount;

//In the Constructor
        this.setTickRandomly(true);

//----
public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)
        {
	if(tickcount < 50)
	{
		tickcount++;  // <--- it says  insert ";" to complete BlockStatements
	}
	else
	{
		par1World.setBlock(par2, par3, par4, Mod.Block.blockID);
	}
    }

Just change the value of 50 to way lower, every number will give you on average 47 seconds, so setting 5 instead of 50 will change the block in roughly 4 minutes, but it could be way less or way more than that, depending on when the random ticks get assigned to the blocks. I'm pretty tired, don't know why I put 50 there, that would take something like an hour to change.

  • Author

I worked! Thank you so much for sticking around and helping me! :):D

 

Just another thing when you said it could be way less if it was 7 could it still be only a few seconds and it would change?

Hi

 

Random ticks and scheduled ticks are not the same thing.  Random ticks occur randomly and are for things like leaves disappearing when not attached to a tree, farmland reverting to dirt, water turning to ice, etc.

 

Scheduled ticks are for things like water, buttons, etc.

 

I think your original code was pretty close already, i.e. you placed the block and 6000 ticks later it changes?

 

So what happened when you changed your 6000 to 6000 +Random.nextInt(100)?

 

-TGG

 

Although it's extremely unlikely, it is possible, if you want an absolute minimum value you should try the scheduled ticks again. add an @Override annotation above the tick rate, and see if that does anything.

  • Author

It then gives me this error.

 

The method tickRate(World, Random) of type BlockMod must override or implement a supertype method

is your block class extending Block?

This code is working perfect for me:

public class ExampleBlock extends Block 
	{
		public ExampleBlock (int id, Material material) 
		{
			super(id, material);
		}
		@Override
		public void onBlockAdded(World world, int x, int y, int z) {
			world.scheduleBlockUpdate(x, y, z, this.blockID, this.tickRate(world));
		}
		@Override
	    public int tickRate(World par1World)
	    {
	    	return 6000;
	    }

	    public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)
	    {
	        par1World.setBlock(par2, par3, par4, Block.dirt.blockID);
	                   
	    }
	}

Yeah but this way has a minimum value now, for instance:

public class ChemRack extends Block 
		{
			public ChemRack (int id, Material material) 
			{
				super(id, material);
			}

			@Override
			public void onBlockAdded(World world, int x, int y, int z) {

				world.scheduleBlockUpdate(x, y, z, this.blockID, this.tickRate(world));
			}

			@Override
		    public int tickRate(World par1World)
		    {
				Random random = new Random();
		    	return 4000+random.nextInt(2000);
		    }


		    public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)
		    {
		        par1World.setBlock(par2, par3, par4, Block.dirt.blockID);
		    }
		}

has a minimum tick value of 4000, and a maximum of 6000, you can adjust to what you'd like.

I was under the assumption that the tick value of 6000 worked fine, and adding the random integer made it go haywire, which is why I had you try the other way. this is much more reliable.

  • Author

YES! I think it works! As far as I can see it works like a treat! Thank you so much! :D

public int tickRate(World par1World, Random random)
    {
    	return 6000 + random.nextInt(100);
    }

You want something like that?

 

Bad modder!  No cookie!  That function is no longer an override.

 

public int tickRate(World par1World)
    {
    	return 6000 + par1World.rand.nextInt(100);
    }

 

Magic!

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

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.