Jump to content

Recommended Posts

Posted (edited)

Before I start explaining my situation, I am aware of similar questions on the forum, but so far haven't found a solution.

I am working on a mod that adds new copper blocks, and struggle with making them waxable. (New blocks exist, age, and have waxed counterparts already.)

Waxable blocks, and their waxed counterparts, are stored in an ImmutableBiMap in the HoneycombItem class, as a static variable.
So far I tried creating a new honeycomb item that extends the original, and then registering it using the same name and a separate DeferredRegister with "minecraft" as modid, but that doesn't work, as I can't modify a static variable in retrospect.
I also looked into mixIn and bytecode manipulation, but I'm hoping to find an easier solution.

If additional info is needed, I can gladly provide that, but I dont think the code of my failed attempt would be useful here.

Also apologies if this is a stupid question, while I'm not new to Java or programming in general, I am new to modding minecraft.

 

Edit: Forgot to add, im working with Minecraft version 1.20

Edited by Kipama
Forgot Minecraft version
Posted

You can use PlayerInteractEvent.RightClickBlock to detect if the player has clicked on the block with a certain item, and modify the block accordingly.

I'm not good at modding, but at least I can read a crash report (well enough). That's something, right?

Posted (edited)

 

10 hours ago, Hipposgrumm said:

You can use PlayerInteractEvent.RightClickBlock to detect if the player has clicked on the block with a certain item, and modify the block accordingly.

Thanks for putting me on the right track!

I was able to use the RightClickBlock event to check for the held item being honeycomb already.

However, I have 2 remaining issues:
1. Checking the clicked block. I know I have to look up the block using the pos provided in the event, but don't know how to do that yet.
2. If the block is waxable, how to actually replace it with the waxed version.

 

I hope you'll be able to help me with this, and sorry once again for these basic questions.

Edited by Kipama
Posted (edited)

You do not put your processing in the RightClickBlock event handler.

 

The purpose of that event is so you can choose which action is performed if the event matches your criteria, either

* setUseItem => Item.useOn() - in your example the processing in the HoneycombItem.useOn()

* setUseBlock => Block.use() - for you, the processing you define in YourBlock.use()

 

The block is passed to you in the event as a raytrace result:

https://github.com/MinecraftForge/MinecraftForge/blob/ab70bde1d648125acee073a93a25d4b8f08985c9/src/main/java/net/minecraftforge/event/entity/player/PlayerInteractEvent.java#L169

Read the rest of the docs of that event for all the details you need to know.

 

As mentioned above, HoneycombItem.useOn() has the vanilla processing for changing the block amongst other things.

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.

Posted
10 hours ago, warjort said:

setUseBlock => Block.use() - for you, the processing you define in YourBlock.use()

First off, thanks for taking the time to reply, your comments already helped me a lot!

I do however still have a few problems with actually triggering the use() function in my block.

I tried the following:

 @SubscribeEvent
public static void PlayerInteractEvent(PlayerInteractEvent.RightClickBlock event) {
    if(event.getItemStack().getItem() == Items.HONEYCOMB) {
        if(targetedBlock.equals(ModBlocks.SWIFT_POWERED_RAIL.get())){
            event.setResult(Event.Result.ALLOW);

            event.setUseBlock(event.getResult());
		}
	}
}

I tried to set the result to allow, and triggered setUseBlock with the Allow result.

I also tried this, which is probably really stupid but I tried it anyways:

instance.level.getBlockState(pos).getBlock().use(blockstate, level, pos, player, event.getHand(),event.getHitVec());

 

Any advice on how I can actually trigger the use() function in my block?

Posted (edited)

https://forums.minecraftforge.net/topic/125952-levelsetblock-doesnt-work/#comment-542689

Quote

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

Preferably on github.

Do not post code in the forums (especially incomplete code snippets).

e.g. what is "targettedBlock"? It is neither defined in that code nor what you should be using

Quote

 

You also do not DENY the item path (although it is probably not relevant in this case?)

Quote

Read the rest of the docs of that event for all the details you need to know.

 

Personally, I will ignore all your posts if you are one of those people that don't read my answers and force me to keep repeating myself.

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.

Posted
45 minutes ago, warjort said:
Quote

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

Preferably on github.

Here is a link to my repository. The linked branch should contain everything you might need.

The relevant classes are

1. src/main/java/net/lordkipama/modernminecarts/event/ModEvents.java   This is where I implemented PlayerInteractEvent.RightClickBlock

2. src/main/java/net/lordkipama/modernminecarts/block/Custom/SwiftPoweredRailBlock.java

 

There you can also so where targetedBlock comes from. It is simply a variable for instance.level.getBlockState(pos).getBlock();
Are there any benefits to using getHitVec() over what I did?
Apologies for not including that in the snipped.

Additionally, I added the result DENY to useItem(), although this doesn't impact my problem, as useItem should do nothing in this case.

 

Now to my current issue:

How to reproduce:
Start Minecraft, place Swift Powered Rail, rightClick with Honeycomb in hand.

Expected Behaviour:
For SwiftPoweredRailblock.use() to trigger, therefore replacing the Block with a Waxed Exposed Swift Rail.

Actual Behaviour:
Nothing happens, the use function never gets called.

 

I hope reproducing the issue works, and that I followed your advice sufficiently this time. If not, please tell me what to improve, I get that its tiresome to respond to people who don't seem to listen, but I'm genuinely trying to improve.

Posted

There is no link?

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.

Posted
1 hour ago, warjort said:

There is no link?

FML...

I did manage to find my error though!

For anyone finding this in the future, I didn't pass use() in my block the right parameters. They should be (BlockState state, Level level, BlockPos pos, Player player, InteractionHand interactionHand, BlockHitResult blockHitResult).

 

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

    • Minecraft 1.21.4 requires a new model definition file for each item, which you don't have. These can be created through Data Generation, specifically the ModelProvider, BlockModelGenerators and ItemModelGenerators classes.
    • Hi,  I'm using Forge 47.3.0 for Minecraft 1.20.1 I apologise if this is obvious I am very new to modding for Minecraft. I sucessfully made a mod that launched without errors or crashes (without it doing anything) but in order to add the features I need, I need to add "Custom Portal API [Forge]" as a dependency. However no matter the way I've tried to acheive this, it crashes. I am pretty sure it's not the way I'm putting it in the repositories, the dependencies or the way I'm refrencing it, as I've a hundred diffrent combinations and multiple Maven methods. And on all those diffrent variations I still get this crash: pastebin.com/UhumzZCZ Any tips would be invaluable as I've been loosing my mind over this!
    • Hi, i'm really having problems trying to set the texture to my custom item. I thought i'm doing everything correctly, but all i see is the missing texture block for my item. I am trying this for over a week now and getting really frustrated. The only time i could make the texture work, was when i used an older Forge version (52.0.1) for Minecraft (1.21.4). Was there a fundamental change for textures and models somewhere between versions that i'm missing? I started with Forge 54.1.0 and had this problem, so in my frustration i tried many things: Upgrading to Forge 54.1.1, created multiple new projects, workspaces, redownloaded everything and setting things up multiple times, as it was suggested in an older thread. Therea are no errors in the console logs, but maybe i'm blind, so i pasted the console logs to pastebin anyway: https://pastebin.com/zAM8RiUN The only time i see an error is when i change the models JSON file to an incorrect JSON which makes sense and that suggests to me it is actually reading the JSON file.   I set the github repository to public, i would be so thankful if anyone could take a look and tell me what i did wrong: https://github.com/xLorkin/teleport_pug_forge   As a note: i'm pretty new to modding, this is my first mod ever. But i'm used to programming. I had some up and downs, but through reading the documentation, using google and experimenting, i could solve all other problems. I only started modding for Minecraft because my son is such a big fan and wanted this mod.
    • Please read the FAQ (link in orange bar at top of page), and post logs as described there.
    • Hello fellow Minecrafters! I recently returned to Minecraft and realized I needed a wiki that displays basic information easily and had great user navigation. That’s why I decided to build: MinecraftSearch — a site by a Minecraft fan, for Minecraft fans. Key Features So Far Straight-to-the-Point Info: No extra fluff; just the essentials on items, mobs, recipes, loot and more. Clean & Intuitive Layout: Easy navigation so you spend less time scrolling and more time playing. Optimized Search: Search for anything—items, mobs, blocks—and get results instantly. What I’m Thinking of Adding More data/information: Catch chances for fishing rod, traveling villager trades, biomes info and a lot more. The website is still under development and need a lot more data added. Community Contributions: Potential for user-uploaded tips for items/mobs/blocks in the future. Feature Requests Welcome: Your ideas could shape how the wiki evolves! You can see my roadmap at the About page https://minecraftsearch.com/about I’d love for you to check out MinecraftSearch and see if it helps you find the info you need faster. Feedback is crucial—I want to develop this further based on what the community needs most, so please let me know what you think. Thanks, and happy crafting!
  • Topics

×
×
  • Create New...

Important Information

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