Jump to content

Recommended Posts

Posted

Forge version: 49.1.0
Minecraft version: 1.20.4

Downloads:

Intro:

We're pleased to announce the first recommended build for 1.20.4. Following the spirit of significant improvements from 1.20.2, we're continuing to iterate on improving performance, code quality, features and ease of use. 1.20.4 brings various enhancements, focused on improving user experience.

Some highlights:

We've brought back the option of executable server jar - just like the olden days. The run scripts remain an option for those who prefer it, and we've added Java version checks and a readme to make it easier to setup your own server. We also collaborated with various third-party server panels to ensure compatibility with our new setup.

Client-side-only mods crashing dedicated servers and mod devs needing to employ special care to avoid such has been solved by the new clientSideOnly switch in the mods.toml file. This feature results in better performance and makes it easier for mod devs to write client-side mods.

The config system has gotten some love, too. There's been a big clean-up to its internals, various optimisations and support for new data types - ByteValue, ShortValue and FloatValue. On the topic of clean-up and optimisation, the DisplayTest and ConfigScreen extension points now have simpler APIs and many parts of the mod loading process have seen optimisations along with improved error messages for non-Forge mods.

New:

  • Revive the option of executable jars for the dedicated server
    • You're no longer forced to use the supplied run scripts!
    • All existing JPMS features are preserved - you can have your cake and eat it too
  • Add impl. of IModFileInfo#showAsDataPack (#9802)
  • Add clientSideOnly feature to mods.toml (#9804)
    • Setting this to true in the root of your mods.toml will tell Forge to skip loading your mod on dedicated servers and set an appropriate DisplayTest for you
    • This is recommended for all client-side-only mods, as it is a trivial and performance way to prevent your mod from crashing servers or causing it to incorrectly show up as incompatible on the multiplayer server list
  • Optimise ForgeConfigSpec and make Range public (#9810)
  • Support pack overlay system. Closes #9818
  • Clean-up Explosion patch but keep bin compatibility by using asm hacks. Closes #9817
  • Make common DisplayTest registration tasks easier (#9822)
    • Before: 
      ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> "ANY", (remote, isServer) -> true));
    • After: 
      ModLoadingContext.get().registerDisplayTest(IExtensionPoint.DisplayTest.IGNORE_ALL_VERSION);
    • The old method still works for backwards-compatibility. The new method has also been backported to 1.20.1, 1.19.4, 1.19.2 and 1.18.2.
  • Improve server panel compatibility (#9836)
  • Criterion test mod + unit test (#9744)
  • Show a more helpful error message when attempting to start the server with old Java
  • Improve the UX of server setup and usage, add a readme with instructions, tips and advice
  • Readded DatapackBuiltinEntriesProvider (#9848)
  • Add CPU usage config option to early window, hide it by default (#9866)
    • New cleaner look, slightly improved client mod loading performance
  • Make common config screen registration tasks easier (#9884)
    • Before: 
      ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> new ConfigScreenHandler.ConfigScreenFactory((mc, modsScreen) -> new MyConfigScreen(modsScreen));
    • After: 
      MinecraftForge.registerConfigScreen(modsScreen -> new MyConfigScreen(modsScreen));
    • The old method still works for backwards-compatibility. The new method has also been backported to 1.20.1, 1.19.4, 1.19.2 and 1.18.2.
  • Optimize capabilities (#9886)
  • Add Leaves method to ModelProvider.java (#9887)
  • Add ByteValue, ShortValue and FloatValue to ForgeConfigSpec, cleanup code (#9902)
  • Add helper method to `OnDatapackSyncEvent` (#9901)
  • Prevent registering null tiers (#9895)
    • Makes it easier to identify broken mods, as it moves the crash to when the broken mod in question registers the tier, rather than when any mod tries getting the tier.
  • Improve mod loading errors (#9870)
  • Add ClientPauseChangeEvent (#9905)
  • Add config option for optionally disabling non-Forge mods.toml detection (#9943)

Fixed:

  • Fix java version check in bootstrap shim
  • Fix Server bundle
  • Bump SecureModules to fix conflict between AccessTransformers and Mixins, Closes #9820
  • Only add sorted/deduplicated mods to the classpath.
    • Fixes some mods causing the Forge error displays to break. Closes #9833
  • Bump JarJar and SecureModule to fix issue with jars containing [] in their name. Closes #9842
  • Fix launcher version name missing - between `forge` and the version. Closes #9843
  • Fixed Spelling error in credits.txt (#9694)
  • Fix background music looping when it shouldn't
  • Fix cases where LivingConversionEvents were not fired for vanilla conversions. Closes #9850
  • Add null check to DimensionDataStorage. Fixes #9859
  • Fix DNS SRV record lookup not working by hacking the module system. Closes #9846
  • Fix slightly offset mods screen link positioning (#9860)
  • Fix DatapackBuiltinEntriesProvider issues with forge registries, Fixes #9874
  • Fix modlist size
  • Fix level data not loading from existing worlds. Whole system needs a re-write.
  • Fix NPE when acceptableValues in defineInList() does not allow nulls, fixes #9300 (#9903)
  • Early display fixes/workarounds for buggy drivers (#9921)
  • Fix edge-case regression with single-jar multiloader mods (#9931)
  • Fix early window crash when parsing some forms of options.txt (#9933)
  • Make non-Forge mods.toml detection more robust (#9935)
  • Filter paths discovered by ServiceProvider in ClasspathLocator. Closes #9899

Removed:

  • LibraryFinder

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hello all. I'm currently grappling with the updateShape method in a custom class extending Block.  My code currently looks like this: The conditionals in CheckState are there to switch blockstate properties, which is working fine, as it functions correctly every time in getStateForPlacement.  The problem I'm running into is that when I update a state, the blocks seem to call CheckState with the position of the block which was changed updated last.  If I build a wall I can see the same change propagate across. My question thus is this: is updateShape sending its return to the neighbouring block?  Is each block not independently executing the updateShape method, thus inserting its own current position?  The first statement appears to be true, and the second false (each block is not independently executing the method). I have tried to fix this by saving the block's own position to a variable myPos at inception, and then feeding this in as CheckState(myPos) but this causes a worse outcome, where all blocks take the update of the first modified block, rather than just their neighbour.  This raises more questions than it answers, obviously: how is a different instance's variable propagating here?  I also tried changing it so that CheckState did not take a BlockPos, but had myPos built into the body - same problem. I have previously looked at neighbourUpdate and onNeighbourUpdate, but could not find a way to get this to work at all.  One post on here about updatePostPlacement and other methods has proven itself long superceded.  All other sources on the net seem to be out of date. Many thanks in advance for any help you might offer me, it's been several days now of trying to get this work and several weeks of generally trying to get round this roadblock.  - Sandermall
    • sorry, I might be stupid, but how do I open it? because the only options I have are too X out, copy it, which doesn't work and send crash report, which doesn't show it to me, also, sorry for taking so long.
    • Can you reproduce this with version 55.0.21? A whole lot of plant placement issues were just fixed in this PR.
    • Necro'ing that thread to ask if you found a solution ? I'm encountering the same crash on loading the world. I created the world in Creative to test my MP, went into survival to test combat, died, crashed on respawn and since then crash on loading the world. Deactivating Oculus isn't fixing it either, and I don't have Optifine (Twilight forest is incompatible)
  • Topics

×
×
  • Create New...

Important Information

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