Jump to content

how to call non random updateTick for blocks Forge [1.12]


JavaMan7

Recommended Posts

I want to make a block despawn after a time. but the update is called randomly so i can not control  the time for the block to despawn. i tried scheduleUpdate method but that dose not seem to work. 

 

package com.javaman.subterranean.blocks;

import java.util.Random;

import org.w3c.dom.css.ElementCSSInlineStyle;

import com.javaman.subterranean.SubterraneanCreaturesMod;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.init.Blocks;
import net.minecraft.util.DamageSource;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

public class LapisCobblestone extends Block {
	public long timelast = 0;
	public long time = 0;
	public boolean l = true;
	
	public LapisCobblestone() {
		super(Material.ROCK);
		this.setUnlocalizedName("simie_cobblestone");
		this.setRegistryName(SubterraneanCreaturesMod.MODID+":"+"simie_cobblestone");
		this.setCreativeTab(CreativeTabs.BUILDING_BLOCKS);
		this.setTickRandomly(true);
		  // this.setTickRandomly(true);
	}
	@Override
	 public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand)
	    {
		
		 worldIn.scheduleUpdate(pos, this, 1);
		 if(l) {
			 timelast =	Minecraft.getMinecraft().getSystemTime();
			 
			 l=false;
		 }else {
			 
			 System.out.println("hi");
			 time =Minecraft.getMinecraft().getSystemTime();
			 
			 if(timelast - time >= 5000) {
				 worldIn.setBlockState(pos, Blocks.AIR.getDefaultState());
				 
				 l=true;
				 
			 }
			 
			
			// worldIn.setBlockState(pos, Blocks.AIR.getDefaultState());
		 }
			
			
		
		
		
		
	    }
	@Override
	  public void onEntityWalk(World worldIn, BlockPos pos, Entity entityIn)
	    {
	        if (!entityIn.isImmuneToFire() && entityIn instanceof EntityLivingBase && !EnchantmentHelper.hasFrostWalkerEnchantment((EntityLivingBase)entityIn))
	        {
	            entityIn.attackEntityFrom(DamageSource.HOT_FLOOR, 1.0F);
	           
	        }

	        super.onEntityWalk(worldIn, pos, entityIn);
	    }
	@Override
	public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn)
    {
        entityIn.motionX *= 0.4D;
        entityIn.motionZ *= 0.4D;
    }
	@Override
	 public int tickRate(World worldIn)
	    {
	        return 10;
	    }
	@Override
	 public boolean requiresUpdates()
	    {
	        return true;
	    }
}

 

Link to comment
Share on other sites

First of all, your LapisCobblestone is a Block, and blocks are singletons, meaning that only one instance of them is made (the instance you use when you register it).

 

Therefore, all of your variables (timelast, time, l) will be the same for every LapisCobblestone block placed in the world. You don't really want to do that.

 

I'd add a tile entity to the block that extends ITickable, personally (see vanilla tile entities such as the furnace)

 

Link to comment
Share on other sites

You have to remember that any Minecraft world ends up with literally millions of block positions. Each chunk alone has 65k block positions! So for performance and memory/storage reasons, only a little bit can be done with blocks. So you can't have lots of blocks ticking or it will cause a performance problem. Of course it is nice to have some blocks that change over time so there are two options -- tile entities (which really just means a "ticking block position that can contain extra data") or random ticks. Of course you can try to do your own ticking by handling a world tick event and scanning blocks but that would cause performance problems.

 

So the main way to have your block tick is to assign a tile entity. However, it sounds like you want to replace a lot of blocks since you're calling it "dirt". That will still be a problem because a lot of tile entities will have same problem with performance.

 

Basically I'm saying there isn't really any way you can have a lot of blocks (like dirt) ticking constantly without a serious performance impact.

 

But if you want to try, you should use tile entities as that is the optimized way of ticking a block position.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Link to comment
Share on other sites

Cough.

There's also scheduled block ticks. Which is what redstone uses.

 

And TEs are not always ticking. You can have non-ticking TEs.

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.

Link to comment
Share on other sites

8 minutes ago, Draco18s said:

Cough.

There's also scheduled block ticks. Which is what redstone uses.

 

And TEs are not always ticking. You can have non-ticking TEs.

I never said TEs have to tick.

 

Regarding scheduled ticks, you're right I forgot about that mechanism. But again none of these save him anything. Ticking a block is easy -- at least five simple ways come to mind to do it. But there is a reason why there are special mechanisms for ticking -- anything that tries to tick a lot of blocks will have potential performance problems.

 

My answer is mostly reacting to fact he's talking about "dirt" blocks which I assume would form a lot of surface. If he's only placing these occasionally like redstone-based things, then sure use scheduled.

 

Also, I would suggest that random isn't necessarily that bad. Vanilla ice blocks melt randomly, so turning a "frozen dirt" to "dirt" with random ticking is very consistent with way Minecraft already treats melting blocks.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Link to comment
Share on other sites

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

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Mengapa Memilih LadangToto? LadangToto adalah pilihan terbaik bagi Anda yang mencari pengalaman bermain slot gacor WD Maxwin dengan transaksi mudah menggunakan Bank BNI. Berikut adalah beberapa alasan mengapa Anda harus memilih LadangToto: Slot Gacor WD Maxwin Terbaik Kami menyajikan koleksi slot gacor WD Maxwin terbaik yang menawarkan kesenangan bermain dan peluang kemenangan besar. Dengan fitur-fitur unggulan dan tema-tema menarik, setiap putaran permainan akan memberikan Anda pengalaman yang tak terlupakan. Transaksi Mudah dengan Bank BNI Kami menyediakan layanan transaksi mudah melalui Bank BNI untuk kenyamanan dan keamanan Anda. Dengan proses yang cepat dan efisien, Anda dapat melakukan deposit dan penarikan dana dengan lancar dan tanpa hambatan.    
    • Akun Pro Kamboja adalah pilihan terbaik bagi Anda yang mencari pengalaman bermain slot Maxwin dengan transaksi mudah menggunakan Bank Lampung. Berikut adalah beberapa alasan mengapa Anda harus memilih Akun Pro Kamboja: Slot Maxwin Terbaik Kami menyajikan koleksi slot Maxwin terbaik yang menawarkan kesenangan bermain dan peluang kemenangan besar. Dengan fitur-fitur unggulan dan tema-tema menarik, setiap putaran permainan akan memberikan Anda pengalaman yang tak terlupakan. Transaksi Mudah dengan Bank Lampung Kami menyediakan layanan transaksi mudah melalui Bank Lampung untuk kenyamanan dan keamanan Anda. Dengan proses yang cepat dan efisien, Anda dapat melakukan deposit dan penarikan dana dengan lancar dan tanpa hambatan. Anti Rungkat Akun Pro Kamboja memberikan jaminan "anti rungkat" kepada para pemainnya. Dengan fitur ini, Anda dapat merasakan sensasi bermain dengan percaya diri, karena kami memastikan pengalaman bermain yang adil dan menyenangkan bagi semua pemain.  
    • BINGO188: Destinasi Terbaik untuk Pengalaman Slot yang Terjamin Selamat datang di BINGO188, tempat terbaik bagi para pecinta slot yang mencari pengalaman bermain yang terjamin dan penuh kemenangan. Di sini, kami menawarkan fitur unggulan yang dirancang untuk memastikan kepuasan dan keamanan Anda. Situs Slot Garansi Kekalahan 100 Kami memahami bahwa kadang-kadang kekalahan adalah bagian dari permainan. Namun, di BINGO188, kami memberikan jaminan keamanan dengan fitur garansi kekalahan 100. Jika Anda mengalami kekalahan, kami akan mengembalikan saldo Anda secara penuh. Kemenangan atau uang kembali, kami memastikan Anda tetap merasa aman dan nyaman. Bebas IP Tanpa TO Nikmati kebebasan bermain tanpa batasan IP dan tanpa harus khawatir tentang TO (Turn Over) di BINGO188. Fokuslah pada permainan Anda dan rasakan sensasi kemenangan tanpa hambatan. Server Thailand Paling Gacor Hari Ini Bergabunglah dengan server terbaik di Thailand hanya di BINGO188! Dengan tingkat kemenangan yang tinggi dan pengalaman bermain yang lancar, server kami dijamin akan memberikan Anda pengalaman slot yang tak tertandingi. Kesimpulan BINGO188 adalah pilihan terbaik bagi Anda yang menginginkan pengalaman bermain slot yang terjamin dan penuh kemenangan. Dengan fitur situs slot garansi kekalahan 100, bebas IP tanpa TO, dan server Thailand paling gacor hari ini, kami siap memberikan Anda pengalaman bermain yang aman, nyaman, dan menguntungkan. Bergabunglah sekarang dan mulailah petualangan slot Anda di BINGO188!
    • Mengapa Memilih AlibabaSlot? AlibabaSlot adalah pilihan terbaik bagi Anda yang mencari slot gacor dari Pgsoft dengan transaksi mudah menggunakan Bank Panin. Berikut adalah beberapa alasan mengapa Anda harus memilih AlibabaSlot: Slot Gacor dari Pgsoft Kami menyajikan koleksi slot gacor terbaik dari Pgsoft. Dengan fitur-fitur unggulan dan peluang kemenangan yang tinggi, setiap putaran permainan akan memberikan Anda kesenangan dan keuntungan yang maksimal. Transaksi Mudah dengan Bank Panin Kami menyediakan layanan transaksi mudah melalui Bank Panin untuk kenyamanan dan keamanan Anda. Dengan proses yang cepat dan efisien, Anda dapat melakukan deposit dan penarikan dana dengan lancar dan tanpa masalah.  
    • Delete the jei-server.toml file in your config folder and test it again
  • Topics

×
×
  • Create New...

Important Information

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