Jump to content

Level.setBlock doesn't work


Kipama

Recommended Posts

I'm trying to add new copper blocks and am working on waxing them right now.

As I couldn't figure out how to add my new items to the BiMap in the Vannilla Honeycomb class, I'm now using PlayerInteractEvent.RightClickBlock, to:

1. Check if the player is holding honeycomb

2. Check if the clicked block is a new copper block

3. Replace new copper block with waxed version.

Step 1 and 2 work fine, but I can't get step 3 to work.
Right now I'm trying to use Level.setBlock(), but as the event is static, I can only use Minecraft.getInstance().Level.setBlock(), where the change is only made for a fraction of a second.

If anyone has an idea how to fix this, or if this is a different problem entirely, any help is appreciated.

Link to comment
Share on other sites

Duplicate post:

https://forums.minecraftforge.net/topic/125931-need-help-modifying-a-vanilla-item/#comment-542688

 

As explained there, you should do your processing in Block.use() which passes you the Level.

 

You should never use client classes like the "Minecraft" class in code that can be called on the server. You will crash the game.

 

To make a change to the game state you need to modify the state on the server.

Modifying it only on the client will just create a "ghost block" that will vanish the next time threre is a chunk update from the server.

If you follow what vanilla does in HoneycombItem.useOn(), it modifies the state on both the client and server which improves responsiveness.

Technically only changes on the server are required, provided to you set the Block.UPDATE_CLIENTS mask in the flags passed to setBlock() - or just use Level.setBlockAndUpdate() instead.

 

NOTE: If you don't want your questions to be ignored, you need to provide a simple build that reproduces your problem.

Code snippets out of context or English descriptions of your code usually provide little to no information.

Most people will not waste their time asking you for more information.

Edited by warjort

Boilerplate:

If you don't post your logs/debug.log we can't help you. For curseforge you need to enable the forge debug.log in its minecraft settings. You should also post your crash report if you have one.

If there is no error in the log file and you don't have a crash report then post the launcher_log.txt from the minecraft folder. Again for curseforge this will be in your curseforge/minecraft/Install

Large files should be posted to a file sharing site like https://gist.github.com  You should also read the support forum sticky post.

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.



×
×
  • Create New...

Important Information

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