Jump to content

[1.15.2] Getting a block position as soon as block is placed, and storing in NBT for later use


MistaOmega

Recommended Posts

Gwanin fellas, guess who?

itbelikethat.png

 

Right, so I'm making a quarry which you can find the important code for here: https://github.com/MistaOmega/Opes/blob/master/src/main/java/mistaomega/opes/tiles/TerraEngineTile.java

It works fine, pls ignore the mess, I haven't tidied it yet, just got it basically functional

 

So the issue I'm having is storing the block position for where it last mined, so if it's broken, and replaced, it can keep going

I've tried getting the x, y and z coords, storing them in an int array and putting that in NBT and that's all well and good but the problem is that when placed, the constructor won't be able to instantiate a starting position (blockpos comes up as null, because it's being constructed), so I need a boolean flag to get the block pos first tick (runOnFirstTick) (i've got rid of that saving btw, but I pinky promise it was there)

Which then becomes an issue after making the block because whatever I saved just gets replaced, or at worst, comes out as null because "currentMiningBlockPos" is null from beforehand.

 

At this point all I'm wondering is, is there a simpler way to go about this that I'm missing.

 

Thank you all as always ❤️

Link to comment
Share on other sites

You see this method?

https://github.com/MistaOmega/Opes/blob/master/src/main/java/mistaomega/opes/tiles/TerraEngineTile.java#L198

Do you see any code related to the mining position there?
No?

Why not?

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

Link to comment
Share on other sites

3 hours ago, Draco18s said:

You see this method?

https://github.com/MistaOmega/Opes/blob/master/src/main/java/mistaomega/opes/tiles/TerraEngineTile.java#L198

Do you see any code related to the mining position there?
No?

Why not?

So I tried that before, I was storing the blockpos as an int array. but you see in my tick method, where I have the runOnFirstTick, that resets whatever I put as a stored value, and I need it because without it, it breaks as it can't get it's own position I'll try storing the boolean flag aswell, it might help my problem, I'll have another shot at it when I finish work 

 

Thank you

Link to comment
Share on other sites

1) Because you don't save that variable either and

2) You could do without it entirely by storing garbage data in the BlockPos by default (say, a y value of -1) and if the data is garbage after read has been called, do the thing you currently do in first tick.

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

Link to comment
Share on other sites

3 hours ago, diesieben07 said:

Uh, yes it can.

TileEntity#getPos. You already use it...

Doing it on the construction phase returns null because it hasn't been placed yet, apologies, was at work rushed the response. I stated about it in the original post 

3 hours ago, Draco18s said:

1) Because you don't save that variable either and

2) You could do without it entirely by storing garbage data in the BlockPos by default (say, a y value of -1) and if the data is garbage after read has been called, do the thing you currently do in first tick.

See this is why you're the smart people here, thank you for the help, I'll give it a go, see how it ends up 

Edited by MistaOmega
Link to comment
Share on other sites

6 hours ago, Draco18s said:

1) Because you don't save that variable either and

2) You could do without it entirely by storing garbage data in the BlockPos by default (say, a y value of -1) and if the data is garbage after read has been called, do the thing you currently do in first tick.

Turned out not to need the garbage data, kept with using checks for null positions, just ditched the run once flag for a check if the mining pos was null although I might still add it for "cleanliness" made sure I implemented the getUpdatePacket method for reading and writing the NBT value on entity tick and it works a treat, thank you again :D

Edited by MistaOmega
Link to comment
Share on other sites

3 minutes ago, diesieben07 said:

Yes, doing anything in a TE constructor is pretty pointless and leads to confusing things happening.

I'll be sure to avoid it in the future, ended up realising "oh yeah, it won't know where it is, doesn't even exist yet" and felt like an idiot for a solid 10 minutes :D

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



×
×
  • Create New...

Important Information

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