Jump to content

[1.16] what approach should I take to implement a custom crafting system?


Recommended Posts

Posted

In my mod, I'm going to have a custom crafting system. But I don't  know how I should go about implementing this.

for the vanilla recipes, I'm using the data generators, so I thought about making my crafting system be data oriented, and then I could look at the minecraft code to see how they do their systems. but I think it may be more hassle than it's worth. But if not data oriented, then how should I do it? (and if I want to have an api for my mod later on so other devs could make addons, would data oriented with the data generators be the best way to implement?)

I'd appreciate guidance on this, thank you

Posted
  On 12/18/2020 at 6:57 PM, Beethoven92 said:

I guess you would have to make your own custom recipe type for this..could you describe how your custom crafting system would work?

Expand  

it would be much like the crafting recipes, with a 3x3 matrix. but with an additional ingredient that would be consumed, the recipe would have the crafting pattern, and an extra int. the extra item would be a mod specific item that would hold an int in a nbt, and the recipe would consume what it needed to from this item

 

the crafting would be done in an custom tile entity, I already have implemented the tile entity, and it is able to craft vanilla recipes at the moment.

so to get the vanilla recipes I use world.getRecipeManager.getRecipe(), so I suppose I would need my own instance of a custom recipe manager? maybe I can register my recipe type to the world recipe manager?

Posted

You would need to implement your own IRecipe, its IRecipeSerializer to write/read your recipes and define a new IRecipeType. Notice that you you need to register your recipe serializer, this can be done through registry events or a DeferredRegister<IRecipeSerializer<?>>. You can see an example on how vanilla implements recipes and seralizers by looking at the AbtractCookingRecipe and its subclasses, and the CookingRecipeSerializer class. There should be almost everything you would need in order to implement your custom recipe. Other interesting classes to look at are the SpecialRecipe class and its subclasses

Check out the port of the BetterEnd fabric mod (WIP): https://www.curseforge.com/minecraft/mc-mods/betterend-forge-port

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

    • I am playing a mod (1.16.5) that is heavily modded. I played it for a few hours completely fine but now that I am trying to load in again 6 hours later I crash. I  have 32 gigs of dedicated ram to this mod, and Ive gone into my world save, serverconfigs, and deleted usefulbackpacks-server.toml                 What do I do from here   This is my full crash log from Curseforge at net.minecraftforge.fml.config.ConfigFileTypeHandler.lambda$reader$1(ConfigFileTypeHandler.java:61) ~[?:?] at net.minecraftforge.fml.config.ConfigFileTypeHandler$$Lambda$14819/1243247982.apply(Unknown Source) ~[?:?] at net.minecraftforge.fml.config.ConfigTracker.openConfig(ConfigTracker.java:104) ~[?:?] at net.minecraftforge.fml.config.ConfigTracker.lambda$loadConfigs$1(ConfigTracker.java:83) ~[?:?] at net.minecraftforge.fml.config.ConfigTracker$$Lambda$14818/841663910.accept(Unknown Source) ~[?:?] at java.lang.Iterable.forEach(Iterable.java:75) ~[?:1.8.0_51] at java.util.Collections$SynchronizedCollection.forEach(Collections.java:2062) ~[?:1.8.0_51] at net.minecraftforge.fml.config.ConfigTracker.loadConfigs(ConfigTracker.java:83) ~[?:?] at net.minecraftforge.fml.server.ServerLifecycleHooks.handleServerAboutToStart(ServerLifecycleHooks.java:94) ~[?:?] at net.minecraft.server.integrated.IntegratedServer.func_71197_b(IntegratedServer.java:59) ~[?:?] at net.minecraft.server.MinecraftServer.func_240802_v_(MinecraftServer.java:621) [?:?] at net.minecraft.server.MinecraftServer.func_240783_a_(MinecraftServer.java:232) [?:?] at net.minecraft.server.MinecraftServer$$Lambda$21132/2071546526.run(Unknown Source) [?:?] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_51] Caused by: com.electronwill.nightconfig.core.io.ParsingException: Not enough data available at com.electronwill.nightconfig.core.io.ParsingException.notEnoughData(ParsingException.java:22) ~[core-3.6.3.jar:?] at com.electronwill.nightconfig.core.io.ReaderInput.directReadChar(ReaderInput.java:36) ~[core-3.6.3.jar:?] at com.electronwill.nightconfig.core.io.AbstractInput.readChar(AbstractInput.java:49) ~[core-3.6.3.jar:?] at com.electronwill.nightconfig.core.io.AbstractInput.readCharsUntil(AbstractInput.java:123) ~[core-3.6.3.jar:?] at com.electronwill.nightconfig.toml.TableParser.parseKey(TableParser.java:166) ~[toml-3.6.3.jar:?] at com.electronwill.nightconfig.toml.TableParser.parseDottedKey(TableParser.java:145) ~[toml-3.6.3.jar:?] at com.electronwill.nightconfig.toml.TableParser.parseNormal(TableParser.java:55) ~[toml-3.6.3.jar:?] at com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java:44) ~[toml-3.6.3.jar:?] at com.electronwill.nightconfig.toml.TomlParser.parse(TomlParser.java:37) ~[toml-3.6.3.jar:?] at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:113) ~[core-3.6.3.jar:?] at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:219) ~[core-3.6.3.jar:?] at com.electronwill.nightconfig.core.io.ConfigParser.parse(ConfigParser.java:202) ~[core-3.6.3.jar:?] at com.electronwill.nightconfig.core.file.WriteSyncFileConfig.load(WriteSyncFileConfig.java:73) ~[core-3.6.3.jar:?] at com.electronwill.nightconfig.core.file.AutosaveCommentedFileConfig.load(AutosaveCommentedFileConfig.java:85) ~[core-3.6.3.jar:?] at net.minecraftforge.fml.config.ConfigFileTypeHandler.lambda$reader$1(ConfigFileTypeHandler.java:57) ~[?:?] ... 13 more [23:26:44] [Server thread/FATAL]:Preparing crash report with UUID a1e4c58d-8019-4653-affd-236e2af63d55
    • The server just disconnect me and sent me this error message [01:29:54] [Server thread/ERROR] [minecraft/ServerLoginPacketListenerImpl]: Couldn't place player in world, this is my latest log https://pastebin.com/J300TKP6, I don't know exactly how this started but just yesterday I was playing perfectly.
    • Sorry, didn't work. Still getting the message. Is there anything else I can show you guys that might help more? that Debug Log screen doesn't show much....
    • These 2 mods are the same, remove one of them.
    • I havent played in a while and updated all mod packs and resource packs that required updating, after i updated everything when i would launch the mod it would crash?   [12:20:57] [main/ERROR]:Found duplicate mods: Mod ID: 'rubidium' from mod files: xenon-0.3.31+mc1.20.1.jar, embeddium-0.3.31+mc1.20.1.jar Mod ID: 'embeddium' from mod files: xenon-0.3.31+mc1.20.1.jar, embeddium-0.3.31+mc1.20.1.jar [12:20:57] [main/ERROR]:Failed to build unique mod list after mod discovery. net.minecraftforge.fml.loading.EarlyLoadingException: Duplicate mods found at net.minecraftforge.fml.loading.UniqueModListBuilder.buildUniqueList(UniqueModListBuilder.java:87) ~[fmlloader-1.20.1-47.3.7.jar:1.0] at net.minecraftforge.fml.loading.moddiscovery.ModDiscoverer.discoverMods(ModDiscoverer.java:106) ~[fmlloader-1.20.1-47.3.7.jar:?] at net.minecraftforge.fml.loading.FMLLoader.beginModScan(FMLLoader.java:164) ~[fmlloader-1.20.1-47.3.7.jar:1.0] at net.minecraftforge.fml.loading.FMLServiceProvider.beginScanning(FMLServiceProvider.java:86) ~[fmlloader-1.20.1-47.3.7.jar:1.0] at cpw.mods.modlauncher.TransformationServiceDecorator.runScan(TransformationServiceDecorator.java:112) ~[modlauncher-10.0.9.jar:?] at cpw.mods.modlauncher.TransformationServicesHandler.lambda$runScanningTransformationServices$8(TransformationServicesHandler.java:100) ~[modlauncher-10.0.9.jar:?] at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?] at java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1779) ~[?:?] at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?] at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?] at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) ~[?:?] at java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) ~[?:?] at java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) ~[?:?] at java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) ~[?:?] at java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) ~[?:?] at cpw.mods.modlauncher.TransformationServicesHandler.runScanningTransformationServices(TransformationServicesHandler.java:102) ~[modlauncher-10.0.9.jar:?] at cpw.mods.modlauncher.TransformationServicesHandler.initializeTransformationServices(TransformationServicesHandler.java:55) ~[modlauncher-10.0.9.jar:?] at cpw.mods.modlauncher.Launcher.run(Launcher.java:88) ~[modlauncher-10.0.9.jar:?] at cpw.mods.modlauncher.Launcher.main(Launcher.java:78) ~[modlauncher-10.0.9.jar:?] at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) ~[modlauncher-10.0.9.jar:?] at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) ~[modlauncher-10.0.9.jar:?] at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) ~[bootstraplauncher-1.1.2.jar:?] [12:20:57] [main/ERROR]:Mod Discovery failed. Skipping dependency discovery.
  • Topics

×
×
  • Create New...

Important Information

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