Jump to content

Codec purpose?


Recommended Posts

Howdy folks


While converting particles I've run into the Minecraft Codec.  It appears to be a convenient way to serialise and deserialise objects without having to hard code a readNBT() and writeNBT()?

But I don't understand why Particles have both Codec and DESERIALIZER as well, whereas in 1.15.3 there was no Codec.

Likewise, ItemStack has both a Codec and write(CompoundNBT), but they are different- capability info in NBT but not in Codec.  And the Codec appears to write .tag but to construct with .capNBT


Is this just a work-in-progress thing?  (i.e. eventually Codecs will replace NBT?)  Or is there some difference in usage I'm not seeing?  The Codecs are bristling with so many lambdas and wrappers I haven't been able to track down where they are actually used / what they're actually used for.  Google has been surprisingly silent on the topic.





public static final Codec<ItemStack> field_234691_a_ = RecordCodecBuilder.create((p_234698_0_) -> {
   return p_234698_0_.group(Registry.ITEM.fieldOf("id").forGetter((p_234706_0_) -> {
      return p_234706_0_.item;
   }), Codec.INT.fieldOf("Count").forGetter((p_234705_0_) -> {
      return p_234705_0_.count;
   }), CompoundNBT.field_240597_a_.optionalFieldOf("tag").forGetter((p_234704_0_) -> {
      return Optional.ofNullable(p_234704_0_.tag);
   })).apply(p_234698_0_, ItemStack::new);


public ItemStack(IItemProvider itemIn, int count, @Nullable CompoundNBT capNBT) {   // doesn't appear to properly match the Codec?  i.e. tag vs capNBT?
  ... etc ...


 * Write the stack fields to a NBT object. Return the new NBT object.
public CompoundNBT write(CompoundNBT nbt) {
   ResourceLocation resourcelocation = Registry.ITEM.getKey(this.getItem());
   nbt.putString("id", resourcelocation == null ? "minecraft:air" : resourcelocation.toString());
   nbt.putByte("Count", (byte)this.count);
   if (this.tag != null) {
      nbt.put("tag", this.tag.copy());
   CompoundNBT cnbt = this.serializeCaps();
   if (cnbt != null && !cnbt.isEmpty()) {
      nbt.put("ForgeCaps", cnbt);
   return nbt;


Link to comment
Share on other sites

7 hours ago, TheGreyGhost said:

Is this just a work-in-progress thing?  (i.e. eventually Codecs will replace NBT?)  Or is there some difference in usage I'm not seeing?  The Codecs are bristling with so many lambdas and wrappers I haven't been able to track down where they are actually used / what they're actually used for.  Google has been surprisingly silent on the topic.

From my (limited) understanding, Codec is not a replacement for NBT, but rather a new system for coding and decoding NBT (and other formats, such as json) via an appropriate instance of DynamicOps. For example, a Codec is used in CompassItem to save/load a RegistryKey<World> to/from NBT. The new Codec system seems to be heavily used in the new data driven dimension and world gen system.

Link to comment
Share on other sites

Ah, that makes more sense.

I guess that will allow the serialisation of object instances to be coded in a much more high-level (and error-proof) way, rather than hard-coding (eg nbtCompound.putInt(xxx) etc) for each type of serialisation you want.  Sounds like a good idea to me..


It looks like they have written a platform for it and are just dipping their toe in the water for refactoring the existing code, which explains why some of the defined codecs don't appear to be used anywhere yet.


thx for the tip




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.

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.

  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hi, I'm trying to hide specific vanilla effects such as levitation or slow falling from the inventory GUI, but I haven't been able to figure out how to do this. I need this because they are triggered by another effect and I don't need them all showing up. Unfortunately, I don't know of any mods that include this feature, and I couldn't find any documentation on the process. I've already looked into the IClientMobEffectExtensions interface, but I'm uncertain about how to implement it in my own effect, let alone in any existing vanilla effect. Please help I am using Forge 47.2.0. for Minecraft 1.20.1
    • Also wondering how to create these manually.  First time creating a forge server.
    • Exception in thread "main" java.lang.IllegalStateException: Could not find forge-1.19-41.1.0 in classpath at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.targets.CommonDevLaunchHandler.lambda$findJarOnClasspath$3(CommonDevLaunchHandler.java:90) at java.base/java.util.Optional.orElseThrow(Optional.java:403) at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.targets.CommonDevLaunchHandler.findJarOnClasspath(CommonDevLaunchHandler.java:90) at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.targets.ForgeUserdevLaunchHandler.processStreams(ForgeUserdevLaunchHandler.java:17) at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.targets.CommonUserdevLaunchHandler.getMinecraftPaths(CommonUserdevLaunchHandler.java:32) at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator.scanMods(MinecraftLocator.java:36) at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.moddiscovery.ModDiscoverer.discoverMods(ModDiscoverer.java:74) at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.FMLLoader.beginModScan(FMLLoader.java:166) at MC-BOOTSTRAP/fmlloader@1.19.2-43.3.5/net.minecraftforge.fml.loading.FMLServiceProvider.beginScanning(FMLServiceProvider.java:86) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.TransformationServiceDecorator.runScan(TransformationServiceDecorator.java:112) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.TransformationServicesHandler.lambda$runScanningTransformationServices$8(TransformationServicesHandler.java:100) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1779) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.TransformationServicesHandler.runScanningTransformationServices(TransformationServicesHandler.java:102) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.TransformationServicesHandler.initializeTransformationServices(TransformationServicesHandler.java:55) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.Launcher.run(Launcher.java:88) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.Launcher.main(Launcher.java:78) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) at MC-BOOTSTRAP/cpw.mods.modlauncher@10.0.9/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) at cpw.mods.bootstraplauncher@1.1.2/cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) I tried to make a minecraft mod but this error appears every time I click on the RunClient button and it won't start. Does anyone know how to get rid of this? (btw. I'm using version 1.19.2-43.3.5) https://pastebin.com/mQ3q4SwW
    • Maybe switch to a pre-configured modpack and use it as working base Add new mods one by one
    • Pure CBD Gummies Dr Oz:Pure CBD Gummies Dr Ozare designed with the help of natural and herbal ingredients and you will get 100% safe and powerful results. This formula is chemical-free that helps you gain many profits at the same time. Some of the main ingredients are discussed below.   ➥ ✅Official Website: https://gummiestoday.com/Pure-CBD-Gummies-Dr-Oz/ ➥ Product Name: Pure CBD Gummies Dr Oz ➥ Benefits: Pure CBD Gummies Dr Oz Helps you to get Pain Relief ➥ Healthy Benefits :Control your hormone levels ➥ Category:Pain Relief Supplement ➥ Rating: ★★★★☆ (4.5/5.0) ➥ Side Effects: No Major Side Effects ➥ Availability: In Stock Voted #1 Product in the United States   ✔Hurry Up – Limited Time Offer – Order Now✔ ✔Hurry Up – Limited Time Offer – Order Now✔ ✔Hurry Up – Limited Time Offer – Order Now✔   Official Facebook Page:- https://www.facebook.com/GreenVibeCBDGummiesForDiabetes https://www.facebook.com/PureCBDGummiesDrOzHowToUse   FOR MORE INFO VISIT OUR WATCH OTHER LINKS :- https://groups.google.com/g/mozilla.dev.platform/c/C4eizlPz3IA https://groups.google.com/a/chromium.org/g/chromium-reviews/c/C4Wqjz6oMOI https://groups.google.com/g/comp.protocols.time.ntp/c/ud96F7mnPIE https://groups.google.com/g/comp.os.vms/c/IfkdfXo_S70 https://groups.google.com/g/drone-dev-platform/c/oOY2NerylW8 https://groups.google.com/g/comp.mobile.android/c/EkBeTeULnTc Other Reference Pages JIMDO@ https://pure-c-b-d-gummies-dr-oz.jimdosite.com/ GROUP GOOGLE@ https://groups.google.com/g/pure-cbd-gummies-dr-oz-advantage/c/YL6pkh7EPac GOOGLE SITE@ https://pure-cbd-gummies-dr-oz-formula.company.site/ GAMMA APP@ https://gamma.app/docs/Pure-CBD-Gummies-Dr-Oz-Beware-Must-Watch-Exposed-Side-Effects-Off-340voj0byn1w4xd Company sites@ https://pure-cbd-gummies-dr-oz-formula.company.site/   Recent Searches:- @@PureCBDGummiesDrOz💲 #PureCBDGummiesDrOzReviews,🥳🥳 #PureCBDGummiesDrOzLifestyle,☘️☘️ #PureCBDGummiesDrOzBenefits,👌 #PureCBDGummiesDrOzBuy,😱😝😱 #PureCBDGummiesDrOzCost,☘📣 #PureCBDGummiesDrOzIngredients,💥💞 #PureCBDGummiesDrOzOrder,👌👀😍 #PureCBDGummiesDrOzPrice,💲 #PureCBDGummiesDrOzWebsite,🔥🔥 #PureCBDGummiesDrOzResults,🔥🔥 #PureCBDGummiesDrOzSideEffects,😱😝😱 #PureCBDGummiesDrOzAdvantage,👌👀😍 #PureCBDGummiesDrOzOffers,,☘📣 #PureCBDGummiesDrOzSupplement,😱😝😱 #PureCBDGummiesDrOzBuyNow,,☘️☘️ #PureCBDGummiesDrOzFormula,💥💞 #PureCBDGummiesDrOzHowToUse,🥳   Our Official Blog Link Below:- BLOGSPOT==>>https://pure-cbd-gummies-dr-oz-ingredients.blogspot.com/2023/12/blog-post.html Sunflower==>>https://www.sunflower-cissp.com/glossary/cissp/7042/pure-cbd-gummies-dr-oz-reviews-warning-controversy-2023-dont-buy-before-reading Lawfully ==>>https://www.lawfully.com/community/posts/pure-cbd-gummies-dr-oz-is-fake-or-real-read-about-100-natural-product-nSNgMm5NlZCC0hvT-5tGWA%3D%3D DIBIZ==>>https://www.dibiz.com/morrislymorales   Medium==>>https://medium.com/@morrislymorales/pure-cbd-gummies-dr-oz-a-review-of-the-most-trusted-and-effective-cbd-product-in-the-market-71cfba6319ca   Devfolio==>>https://devfolio.co/projects/pure-cbd-gummies-dr-oz-3341      
  • Topics

  • Create New...

Important Information

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