Jump to content

[1.12.2][SOLVED] Issue with update() in tile entity


Recommended Posts

Posted
  On 1/16/2018 at 12:45 AM, jabelar said:

Well it is a "cheat" in the sense that ITickable should not need any such silliness. Think about it -- a furnace happily cooks something as an ITickable and any animated tile entity is happily updated every tick. You should really find the root cause of the problem. But if it works I guess use it. Something is still wrong with your implementation in my opinion though and it might bite you later.

Expand  

 When I get deeper in to modding, I'll probably be able to find the root cause of my problem. Now i just want to continue my mod development.

 

Thank you all for help !

  • Like 1
Posted

Can it be ? Have I solved my problem ?!

I've added the following method to my tile entity, and update() hasn't failed yet!

 

@Override
public void onLoad() {
		 posB = this.getPos();
	 }

 

This code changes the way I get the BlockPos, which i used to get from a set method in tile entity i called from onBlockPlacedBy.

 @diesieben07

 

 

 

Posted
  On 1/16/2018 at 3:19 PM, uncleofbob said:

Can it be ? Have I solved my problem ?!

I've added the following method to my tile entity, and update() hasn't failed yet!

 

@Override
public void onLoad() {
		 posB = this.getPos();
	 }

 

This code changes the way I get the BlockPos, which i used to get from a set method in tile entity i called from onBlockPlacedBy.

 @diesieben07 ?

Expand  

Why the hell are you storing your TE's position? TEs already do this, that's what getPos() does.

  • Like 1

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.

Posted

I really don't get why this isn't working for you. I have tile entities in my mods and I simply implement the ITickable interface and I can watch them process things per tick exactly as expected. I don't do any of this scheduling updates stuff. You can try my example mod and look at the TileEntityCompactor here: https://github.com/jabelar/ExampleMod-1.12/blob/master/src/main/java/com/blogspot/jabelarminecraft/examplemod/tileentities/TileEntityCompactor.java

  • Like 1

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

Posted (edited)

Hi again! It's working now! It was all related to how I used the position wrong.

Somehow update() ran when the block was placed in certain quadrants related to the first block i placed. This made me change the way I get my Tile entity pos.

Now I just access "this.getPos()" in methods that need it. The onLoad() wasn't necessary either.

 

And yes, I scrapped the scheduleBlockUpdate workaround!

 

Again, thank you all for replies and using your time on my problem! :)

 

Edited by uncleofbob
Posted
  On 1/17/2018 at 7:49 AM, uncleofbob said:

Hi again! It's working now! It was all related to how I used the position wrong.

Somehow update() ran when the block was placed in certain quadrants related to the first block i placed. This made me change the way I get my Tile entity pos.

Now I just access "this.getPos()" in methods that need it. The onLoad() wasn't necessary either.

 

And yes, I scrapped the scheduleBlockUpdate workaround!

 

Again, thank you all for replies and using your time on my problem! :)

 

Expand  

I don't understand what you mean by this? I was testing with just System.out messages and got nothing in the logs (junk or server). Could you please show us the code involved?

Posted

I know the names of block and tile entity class is a bit odd. And my use of variables could be less. It will be changed.

 

Block:

public class JdwBlockBitumen extends Block implements IHasModel, ITileEntityProvider{
	
	public JdwBlockBitumen(String name, Material material) 
	{
		super(material);
		setUnlocalizedName(name);
		setRegistryName(name);
		setCreativeTab(CreativeTabs.MISC);
		setHarvestLevel("pick_axe", 1);
		
	}
	
	@Override
	public boolean hasTileEntity(IBlockState state) {
		return true;
	}
	
	@Override
	public TileEntity createNewTileEntity(final World worldIn, int meta) {
		return new JdwOSDigger();
	}
	
	@Override
	public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) {
	}
	

	@Override
	public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
    {
        if (!worldIn.isRemote )
        {
            final JdwOSDigger tileEntity = (JdwOSDigger) worldIn.getTileEntity(pos);
            
            if(tileEntity != null) {

            	tileEntity.toggleActive();  	
            }      
        }

            return true;
        
    }
	@Override
	public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
	
	}
  
	@Override
	public void breakBlock(World worldIn, BlockPos pos, IBlockState state) {
		super.breakBlock(worldIn, pos, state);
	}
	
	
	//registers model
	@Override
	public void registerModels() 
	{
		DerpWorld.proxy.registerItemRenderer(Item.getItemFromBlock(this), 0, "inventory");
	}


}

Tile Entity:

public class JdwOSDigger extends TileEntity implements ITickable{

	
	private boolean aktivitas;
	private List<BlockPos> AREA = new ArrayList<BlockPos>();
	private int radi;
	private int index;
	private int tickCounter;
	
	public JdwOSDigger() {
		radi = 0;
		index = 0;
		tickCounter = 0;
		aktivitas = false;		
	}

	
	public void toggleActive() {
		if (aktivitas) {
			aktivitas = false;
			System.out.println("Activated: " + aktivitas + ",   Is valid?: " + !this.isInvalid());
		}
		else {
			aktivitas = true;
			System.out.println("Activated: " + aktivitas + " ,   Is valid? " + !this.isInvalid());
			mapQuarry(6, this.getPos());  //here is where I call the Tile Entity pos
			
		}
	}
	
	
	public void mapQuarry (int radi, BlockPos pos) {
	
		List<BlockPos> l = new ArrayList<BlockPos>();
		int[] squares = new int[radi];
		BlockPos qC = null; 
		int bx, by, bz = 0;

		for(int k = 0; k<4; k++) {

			switch(k){
			case 0: qC = pos.add(radi+1, 0, radi+1); 
					break;
			case 1: qC = pos.add(-(radi+1), 0, radi+1); 
					break;
			case 2: qC = pos.add(radi+1, 0, -(radi+1)); 
					break;
			case 3: qC = pos.add(-(radi+1), 0, -(radi+1)); 
					break;
			}
			
			for(int e = 0; e<radi/2; e++) {
				for(int i = -radi+e; i <= radi-e; i++) {
					for (int j = -radi+e; j<=radi-e; j++) {
						bx = qC.getX() + i;
						bz = qC.getZ() + j;
						by = qC.getY() - 1 - e;
						
						BlockPos pos2 = new BlockPos( bx , by, bz );
						l.add(pos2);

					}
				}
			}
		}
		
		AREA.addAll(l);	
		System.out.println("map quarry finished, Testing AREA[4] : " + AREA.get(4));
	}	
  
	public void readFromNBT(NBTTagCompound compound)
    {
        super.readFromNBT(compound);
        aktivitas = compound.getBoolean("hore");
       tickCounter = compound.getInteger("kuse");
       index = compound.getInteger("lespe");
    }
	
    public NBTTagCompound writeToNBT(NBTTagCompound compound)
    {
        super.writeToNBT(compound);
        //compound.setByte();
       compound.setInteger("lespe", index);
       compound.setInteger("kuse", tickCounter);
       compound.setBoolean("hore", aktivitas);
        return compound;
    }

    @Override
	public void update() 
	{
		if (!world.isRemote){
			if(aktivitas)  {
				tickCounter++;
				if (tickCounter==20) {
					world.destroyBlock(AREA.get(index), false);
					System.out.println("Destroyed block at:  " + AREA.get(index) );
					index++;
					tickCounter = 0;
				}
			}
		}
	}

 

 

 

  • Like 1
Posted
  On 1/17/2018 at 10:19 AM, uncleofbob said:

@Override public void update() { if (!world.isRemote){ if(aktivitas) { tickCounter++; if (tickCounter==20) { world.destroyBlock(AREA.get(index), false); System.out.println("Destroyed block at: " + AREA.get(index) ); index++; tickCounter = 0; } } } }

Expand  

This was the part I was interested in. But after reading your post again I think I understood and replaced everything with the get methods in my update method. I'm getting it to work with the classes now as well. If your's breaks again, try replacing the world member with the getWorld method too.

 

Thanks for keeping on this, I had to write almost a hundred recipe files today so I haven't had time to dig more on it. lol It didn't occur to me to look at the members being referenced in the functions.

  • Like 1

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

    • Verified user can get a $300 off TℰℳU Coupon code using the code ((“{{ '[''com31844'']}}”)). This TℰℳU $100Off code is specifically for new and existing customers both and can be redeemed to receive a $100discount on your purchase. Our exclusive TℰℳU Coupon code offers a flat $100off your purchase, plus an additional 100% discount on top of that. You can slash prices by up to $100as a new TℰℳU customer using code ((“{{ '[''com31844'']}}”)). Existing users can enjoy $100off their next haul with this code. But that’s not all! With our TℰℳU Coupon codes for 2025, you can get up to 90% discount on select items and clearance sales. Whether you’re a new customer or an existing shopper, our TℰℳU codes provide extra discounts tailored just for you. Save up to 100% with these current TℰℳU Coupons ["^"{{ '[''com31844'']}} "^"] for April 2025. The latest TℰℳU coupon codes at here. New users at TℰℳU receive a $100discount on orders over $100Use the code ((“{{ '[''com31844'']}}”)) during checkout to get TℰℳU Coupon $100Off For New Users. You can save $100Off your first order with the coupon code available for a limited time only. TℰℳU 90% Off promo code ((“{{ '[''com31844'']}}”)) will save you $100on your order. To get a discount, click on the item to purchase and enter the coe. Yes, offers $100Off coupon code “{{ '[''com31844'']}}” for first time users. You can get a $100bonus plus $100Off any purchase at TℰℳU with the $100Coupon Bundle at TℰℳU if you sign up with the referral code ((“{{ '[''com31844'']}}”)) and make a first purchase of $100or more. Free TℰℳU codes $100off — ((“{{ '[''com31844'']}}”)) Get a $100discount on your TℰℳU order with the promo code "{{ '[''com31844'']}}". You can get a discount by clicking on the item to purchase and entering this TℰℳU Coupon code $100off ((“{{ '[''com31844'']}}”)). ŢℰNew User Coupon ((“{{ '[''com31844'']}})): Up To $100OFF For First-Time Users Our TℰℳU first-time user coupon codes are designed just for new customers, offering the biggest discounts and the best deals currently available on TℰℳU To maximize your savings, download the TℰℳU app and apply our TℰℳU new user coupon during checkout. TℰℳU Coupon Codes For Existing Users ((“{{ '[''com31844'']}}”)): $100Price Slash Have you been shopping on TℰℳU or a while? Our TℰℳU Coupon for existing customers is here to reward you for your continued support, offering incredible discounts on your favorite products. TℰℳU Coupon For $100Off ((“{{ '[''com31844'']}}”)): Get A Flat $100Discount On Order Value Get ready to save big with our incredible TℰℳU Coupon for $100off! Our amazing ŢℰM$100off coupon code will give you a flat $100discount on your order value, making your shopping experience even more rewarding. TℰℳU Coupon Code For $100Off ((“{{ '[''com31844'']}}”)): For Both New And Existing Customers Our incredible TℰℳU Coupon code for $100off is here to help you save big on your purchases. Whether you’re a new user or an existing customer, our $100off code for TℰℳU will give you an additional discount! TℰℳU Coupon Bundle ((“{{ '[''com31844'']}}”)): Flat $100Off + Up To $100Discount Get ready for an unbelievable deal with our TℰℳU Coupon bundle for 2025! Our TℰℳU Coupon bundles will give you a flat $100discount and an additional $100off on top of it. Free TℰℳU Coupons ((“{{ '[''com31844'']}}”)): Unlock Unlimited Savings! Get ready to unlock a world of savings with our free TℰℳU Coupons! We’ve got you covered with a wide range of TℰℳU Coupon code options that will help you maximize your shopping experience. 100% Off TℰℳU Coupons, Promo Codes + 25% Cash Back ((“{{ '[''com31844'']}}”)) Redeem TℰℳU Coupon Code ((“{{ '[''com31844'']}}”)) TℰℳU Coupon $100OFF ((“{{ '[''com31844'']}}”)) TℰℳU Coupon $100OFF FOR EXISTING CUSTOMERS ((“{{ '[''com31844'']}}”)) TℰℳU Coupon $100OFF FIRST ORDER ((“{{ '[''com31844'']}}”)) TℰℳU Coupon $100OFF REDDIT ((“{{ '[''com31844'']}}”)) TℰℳU Coupon $100OFF FOR EXISTING CUSTOMERS REDDIT ((“{{ '[''com31844'']}}”)) TℰℳU $100OFF CODE ((“{{ '[''com31844'']}}”)) TℰℳU 70 OFF COUPON 2025 ((“{{ '[''com31844'']}}”)) DOMINOS 70 RS OFF COUPON CODE ((“{{ '[''com31844'']}}”)) WHAT IS A COUPON RATE ((“{{ '[''com31844'']}}”)) TℰℳU $100OFF FOR EXISTING CUSTOMERS ((“{{ '[''com31844'']}}”)) TℰℳU $100OFF FIRST ORDER ((“{{ '[''com31844'']}}”)) TℰℳU $100OFF FREE SHIPPING ((“{{ '[''com31844'']}}”)) You can get an exclusive $100off discount on your TℰℳU purchase with the code [{{ '[''com31844'']}}] Or [{{ '[''com31844'']}}].This code is specially designed for new customers and offers a significant price cut on your shopping. Make your first purchase on TℰℳU more rewarding by using this code to get $100off instantly.   TℰℳU Coupon Code For $100Off [{{ '[''com31844'']}}] Or [{{ '[''com31844'']}}]: Get A Flat $100Discount On Order Value Get ready to save big with our incredible TℰℳU coupon for $100off! Our coupon code will give you a flat $100discount on your order value, making your shopping experience even more rewarding.   Exclusive TℰℳU Discount Code [{{ '[''com31844'']}}] Or [{{ '[''com31844'']}}]: Flat $300 OFF for New and Existing Customers Using our TℰℳU promo code you can get A$ 200 off your order and 100% off using our TℰℳU promo code [{{ '[''com31844'']}}] Or [{{ '[''com31844'']}}]. As a new TℰℳU customer, you can save up to $100using this promo code. For returning users, our TℰℳU promo code offers a $100price slash on your next shopping spree. This is our way of saying thank you for shopping with us! Get ready to save big with our incredible TℰℳU Coupon code for $300 off! Our amazing TℰℳU $300 off coupon code will give you a flat $300 discount on your order value, making your shopping experience even more rewarding.   TℰℳU Coupon Code For 40% Off ["{com31844}"] For Both New And Existing Customers   Our incredible TℰℳU Coupon code for 40% off is here to help you save big on your purchases. Whether you’re a new user or an existing customer, our 40% off code for TℰℳU will give you an additional discount!   TℰℳU Coupon Bundle ["{com31844}"]: Flat $300 Off + Up To 90% Discount   Get ready for an unbelievable deal with our TℰℳU Coupon bundle for 2025! Our TℰℳU Coupon bundles will give you a flat $300 discount and an additional 40% off on top of it.   Free TℰℳU Coupons ["{com31844}"]: Unlock Unlimited Savings!   Get ready to unlock a world of savings with our free TℰℳU Coupons! We’ve got you covered with a wide range of TℰℳU Coupon code options that will help you maximize your shopping experience.   50% Off TℰℳU Coupons, Promo Codes + 25% Cash Back ["{com31844}"]   Redeem TℰℳU Coupon Code ["{com31844}"]   TℰℳU Coupon $300 OFF ["{com31844}"]   TℰℳU Coupon $300 OFF ["{com31844}"]   TℰℳU Coupon $300 OFF FOR EXISTING CUSTOMERS ["{com31844}"]   TℰℳU Coupon $300 OFF FIRST ORDER ["{com31844}"]   TℰℳU Coupon $300 OFF FIRST ORDER ["{com31844}"]   TℰℳU Coupon $300 OFF FOR EXISTING CUSTOMERS FREE SHIPPING USA ["{com31844}"]   TℰℳU Coupon $300 OFF HOW DOES IT WORK ["{com31844}"]   TℰℳU Coupon $300 OFF FOR EXISTING CUSTOMERS CANADA ["{com31844}"]   TℰℳU Coupon $300 OFF 2025 ["{com31844}"]   TℰℳU Coupon $300 OFF FOR NEW CUSTOMERS ["{com31844}"]   TℰℳU Coupon $300 OFF CANADA ["{com31844}"]   TℰℳU Coupon $300 OFF FOR EXISTING CUSTOMERS FIRST ORDER ["{com31844}"]   TℰℳU 300 OFF COUPON BUNDLE ["{com31844}"]   This TℰℳU coupon $300 off is designed to provide substantial savings on your purchases, making shopping for your favorite items easier than ever. With our $300 off TℰℳU coupon, you'll be amazed at how much you can save on your next order. Here are the key benefits you can expect when using our coupon code {com31844} "OR" {com31844}: {com31844} "OR" {com31844}: Flat $300 off on your purchase {com31844} "OR" {com31844}: $300 coupon pack for multiple uses {com31844} "OR" {com31844}: $300 flat discount for new customers {com31844} "OR" {com31844}: Extra $300 promo code for existing customers {com31844} "OR" {com31844}: $300 coupon exclusively for USA/Canada users H2: TℰℳU Coupon Code $300 Off For New Users In 2024 New users can reap the highest benefits by using our coupon code on the TℰℳU app. This TℰℳU coupon $300 off is specifically designed to welcome new customers with incredible savings  
    • Now the serve runs for a bit, then crashes after 20 minutes of running, what's the issue here? apologies if I need to start a new post and didn't https://pastebin.com/uBpp5bCz  
    • I am trying to play on a friend's modded server but have been experiencing a lot of difficulty.  Whenever I try to connect, it gets stuck on "Joining World" for an extremely long time (10-20 minutes) and will often disconnect in the process, showing either a "Timed Out" or "Internal Exception: java.io.IOException: An established connection was aborted by the software in your host machine" error.  On the few occasions that I am able to get in, the FPS is horrifically bad. The issue seems to be related to ScheduledExecutables since viewing the pie graph reveals that 100% of it is occupied by that. Pressing [1] shows that around 99% of ScheduledExecutables is "Unspecified." VERY rarely, this clears up after ~10 minutes, but most frequently I just end up timing out, or I have to kill the Minecraft process because it freezes in excess of 5 minutes. Things I've tried already: Setting render distance much lower (around 6 to 8 ) Lowering a bunch of other settings, including particles, leaf quality, weather, dynamic lighting, smooth lighting, etc. Limiting FPS to 60 or even 30 Turning off Distant Horizons rendering from the in-game config Updating drivers Tried connecting both with and without a VPN Cleared DNS cache through Windows terminal Downloaded and forced Minecraft to use Java 17 through ATLauncher's settings And probably a few other things I'm forgetting.  Minecraft version is 1.20.1, Forge version is 47.3.12. Related log: https://paste.atlauncher.com/view/95c27d52-93f6-4a9e-930e-d91ad61cfe26 Screenshot of Shift+f3 of when I was able to get into the server (NOT the same as the above log): 
    • This worked, thank you so much!
  • Topics

×
×
  • Create New...

Important Information

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