MCMTFabric - Minecraft Multi-Threading Mod Fabric Port
This mod is based on the amazing work on JMT-MCMT. Please check that repository for details.
Notice
This project is in its earlier stage. Any contribution is welcome.
This mod is based on the amazing work on JMT-MCMT. Please check that repository for details.
This project is in its earlier stage. Any contribution is welcome.
This is a dirty log of various errors I am coming across. Very possible they could be from other mods or the interaction between obscure mods and MCMT. Or from Lithium & MCMT. A few relate to fast util which we may have a clear path for fixing (related: #19).
Lithium phases: nb. Set references cannot be relied on; this was testing done with parents disabled largely.
Launching minecraft with MCMTFabric currently seems to leave memory to bubble up pretty quickly. I got to 14GB used in less than 5 minutes. While typing this, another 3 minutes has gone by and it's at 17GB. (also affects performance very noticably as one might reasonably expect) I've experienced something that feels very similar to this, with EssentialsCommands.
Link to trying to debug and solution with the developer of that: https://discord.com/channels/513219024927326211/857077956336943154/871488694530494535
I use a somewhat hacky library to fix the Nickname command issue with command parsing. It uses stuff like JNT (Java Native Tools).
Aha! I've managed to reproduce this issue on Linux. Can confirm that it 100% has something to do with the lib I mentioned. Will see what I can do about this.
https://discord.com/channels/513219024927326211/857077956336943154/871873153490624512
stale20:30:27] [main/FATAL]: Mixin apply failed mcmtfabric.mixins.json:ServerChunkManagerMixin -> net.minecraft.class_3215: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException @At("FIELD") on net/minecraft/class_3215::overwriteServerThread with priority 1000 cannot inject into net/minecraft/class_3215::method_12121(IILnet/minecraft/class_2806;Z)Lnet/minecraft/class_2791; merged by me.jellysquid.mods.lithium.mixin.world.chunk_access.ServerChunkManagerMixin with priority 1000 [PREINJECT Applicator Phase -> mcmtfabric.mixins.json:ServerChunkManagerMixin -> Prepare Injections -> -> redirect$bgm000$overwriteServerThread(Lnet/minecraft/class_3215;)Ljava/lang/Thread; -> Prepare]
org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: @At("FIELD") on net/minecraft/class_3215::overwriteServerThread with priority 1000 cannot inject into net/minecraft/class_3215::method_12121(IILnet/minecraft/class_2806;Z)Lnet/minecraft/class_2791; merged by me.jellysquid.mods.lithium.mixin.world.chunk_access.ServerChunkManagerMixin with priority 1000 [PREINJECT Applicator Phase -> mcmtfabric.mixins.json:ServerChunkManagerMixin -> Prepare Injections -> -> redirect$bgm000$overwriteServerThread(Lnet/minecraft/class_3215;)Ljava/lang/Thread; -> Prepare]
stale
Any idea what causes this? It seems to be fighting with the latest update of lithium. It says it cannot inject ServerChunkManager with prioriti 1000 over Lithium injection with priority 1000.
Example: Each dropper has 1 stack of items in it. But only some of them survived. Same when holding Q to rapidly drop items, Ctrl+Q crafting in carpet mod. It only happens when dropping the same type of item, if there are random items in the dropper the chance of it happens drops significantly. Example: Items in dropper: Items dropped from dropper then picked up from ground: IMO its the item stacking causing this, when lots of items are very close to each others, they will try to stack into a single item entity, but entities got multithreaded in this mod, so theres probably a race condition when stacking items, and using "disableEntity = true" can fix this issue but the mspt will rise significantly if there are lots of entities in the world, basically disables the most useful feature in this mod.
I am using latest actions commit of MCMTFabric - Fix tile entity injection. with latest fabric api version for 1.16.5 at this moment - fabric-api-0.33.1+1.16 Thats all the mods i used for testing.
After starting a single player world the internal server stops after a few seconds, as shown in the screenshots.
Chunks would also obviously stop loading. I have tried the same thing on a server and same thing happens.
Heres the server crash report:
crash-2021-05-01_13.03.03-server.txt
Keep up the Good Work!
https://mclo.gs/dXBGIwn
SO i went looking for an MultiThread MC mod for fabric because this trains mod just completely overwhelms my server (entity ticks alone) But my server has all the threads for multi-threadding so I thought I would give this an shot,
it does not work,
https://git.merith.xyz/modpacks/ultron/src/branch/server/.minecraft/mods
all of the mods on the server
staleCaused by: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: @At("FIELD") on net/minecraft/class_3215::overwriteServerThread with priority 1000 cannot inject into net/minecraft/class_3215::method_12121(IILnet/minecraft/class_2806;Z)Lnet/minecraft/class_2791; merged by me.jellysquid.mods.lithium.mixin.world.chunk_access.ServerChunkManagerMixin with priority 1000 [PREINJECT Applicator Phase -> mcmtfabric.mixins.json:ServerChunkManagerMixin -> Prepare Injections -> -> redirect$bcl000$overwriteServerThread(Lnet/minecraft/class_3215;)Ljava/lang/Thread; -> Prepare]
Here are some logs of the server: latest.log
here is a client log: latest.log this log is a fresh world generating
for information, I have: 32 gigs ram intel i99900k 5GHz 8 cores and 16 threads while starting and generating chunks 100% usage
after a few minutes in world 78% usage
the ram usage rises at around 95% the usage goes down with the CPU usage to like 15% CPU and 80% RAM
At that point the game is extremely unstable. Every command or even chat message can crash the client.
staleHello, my MCMTFabric has problems with some other Mods that i use. I pasted in the crash log and below that the list which mods i use.One of this mods that causes this is optifabric .i hope u can fix this and btw i am sorry for any mistakes English is not my native language.
Exception in thread "main" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at net.fabricmc.loader.game.MinecraftGameProvider.launch(MinecraftGameProvider.java:228)
at net.fabricmc.loader.launch.knot.Knot.launch(Knot.java:146)
at net.fabricmc.loader.launch.knot.KnotClient.main(KnotClient.java:28)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at net.fabricmc.loader.game.MinecraftGameProvider.launch(MinecraftGameProvider.java:226)
... 2 more
Caused by: org.spongepowered.asm.mixin.transformer.throwables.MixinTransformerError: An unexpected critical error was encountered
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:363)
at org.spongepowered.asm.mixin.transformer.HackedMixinTransformer.transform(HackedMixinTransformer.java:61)
at org.spongepowered.asm.mixin.transformer.HackedMixinTransformer.transformClass(HackedMixinTransformer.java:35)
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:178)
at org.spongepowered.asm.mixin.transformer.HackedMixinTransformer.transformClassBytes(HackedMixinTransformer.java:11)
at org.spongepowered.asm.mixin.transformer.FabricMixinTransformerProxy.transformClassBytes(FabricMixinTransformerProxy.java:23)
at net.fabricmc.loader.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:157)
at net.fabricmc.loader.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:150)
at net.fabricmc.loader.launch.knot.UnsafeKnotClassLoader.loadClass(UnsafeKnotClassLoader.java:67)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at net.optifine.reflect.Reflector.
OptiFine_1.16.4_HD_U_G7 mcmtfabric-1.0.2 optifabric-1.11.9 fabric-api-0.29.3+1.16
staleIncompatible mod set! net.fabricmc.loader.impl.FormattedException: Mod resolution encountered an incompatible mod set! A potential solution has been determined: - Install cloth-config2, version 5.0.34 or later. Unmet dependency listing: - Mod 'MCMTFabric' (mcmtfabric) 1.3.2 requires version 5.0.34 or later of cloth-config2, which is missing! at net.fabricmc.loader.impl.FabricLoaderImpl.load(FabricLoaderImpl.java:190) at net.fabricmc.loader.impl.launch.knot.Knot.init(Knot.java:148) at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:68) at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at oolloo.jlw.Wrapper.invokeMain(Wrapper.java:58) at oolloo.jlw.Wrapper.main(Wrapper.java:51)
Some mods change item behavior and may want to execute things when item are merged, the count is changed or when an entity is discarded, and may try to acquire another lock, but if a thread holding that lock causes an item merge (by moving items from world to world for example) the code will deadlock.
Simple solution to make this change safe for mods: if the lock is not free when attempting merging, just skip the merge. This barely ever happens in vanilla (and when it does, it doesn't matter because those rare cases will just be merged anyway the next tick), but at least the code can now never deadlock and give headaches in the future.
Seems no change from 1.19 to 1.19.1. Fixed MixinExtra not found issue. Should be OK to run in both 1.19 and 1.19.1.
Source code(tar.gz)Experimental release, expects bugs.
Source code(tar.gz)Fix piston issues by immediately executing PistonBlockEntity tick, along with client-side piston ticking. May still have a rare chance to see weird behaviour on pistons. That probably comes from deeper BlockEntity multithreading implications which have not been addressed yet. You may want to change the config to disableTileEntity = false
or /mcmt config toggle te
and /mcmt config save
if you have changed it earlier.
Fixed concurrent scheduling of block updates causes residual OrderedTick in queuedTicks that prevent other ticks from being added. Still, disable te multithreading, see last release.
Source code(tar.gz)Instead of smashing all Environment, Entity and BlockEntity ticks all into the pool at the same time, this release separates them into different phases. This sort of fixed issues like when sand is updated as a falling entity, piston head as a block entity is still there so they collide and drop sand. However, BlockEntity multithreading seems a big mess. Probably not gonna update it for a while so please change the config to disableTileEntity
or /mcmt config toggle te
and /mcmt config save
.
Try with caution. Backup before using. Don't know if it works on 1.18, could try.
Source code(tar.gz)Been busy for a while. Still busy though. This one should work but no guarantee of stability. Migrated from really gross GrossFabricHacks
to native Knot
lib class Mixin
. There should be a stability improvement on that. Config system is almost identical to JMT-MCMT
. Have fun and give me some feedback about stability so I can consider moving onto 1.18.
Coded config and command functionality. Fixed some concurrent bugs. Tested on 1.17.1. It may or may not work on 1.17.
Source code(tar.gz)Some fixes have been done.
Source code(tar.gz)Kinda working, not sure about performance, have fun.
Source code(tar.gz)Notice, due to the dependency of GrossFabricHacks
, this version only works on java 8.
Fixed mapping namespace. Notice: It conflicts with fabric-carpet
.
The first release of MCMT fabric port. Not yet done proper logging and configuration loading.
Source code(tar.gz)Fabric Example Mod Lorem ipsum dolor sit amet Example is a Minecraft mod that lorem ipsum dolor sit amet. Ut mi lectus, egestas a justo nec, hendrerit
Addon to the Minecraft Forge/Fabric mod InvMove that adds mod compatibilities
Fabric Example Mod with StationAPI and BIN Mappings for beta 1.7.3 server + client Setup See the StationAPI wiki. Common Issues Here. License This tem
MinecraftForge Forge is a free, open-source modding API all of your favourite mods use! Version Support 1.18.x Active 1.16.x LTS Download Forum Discor
DiscordSync Small mod for Minecraft Forge 1.16.5 that sends messages of in-game events to a channel in your Discord server. This mod also enables cros
Enhanced Block Entities EBE is a 100% client side mod for Minecraft on the Fabric mod loader which aims to increase the performance of block entity re
C^2M-Engine A Fabric mod designed to improve the chunk performance of Minecraft. So what is C2ME? C^2M-Engine, or C2ME for short, is a Fabric mod desi
rainbowify rainbowify is a Fabric mod for Minecraft 1.17 that adds a customizable rainbow background to many Minecraft HUDs. Discord: https://discord.
Automobility A Minecraft vehicle mod adding customizable cars. Made for ModFest 1.17 Screenshots Try it out! Recommended to use along with LambdaContr
Stacker Minecraft mod to change the stack size of all items. For Fabric 1.17 Note: This mod has a config that defaults to 64. Change it to be whatever
multiversion-fabric A client-side Fabric mod for Minecraft Beta 1.7.3 that allows you to connect to servers running almost any patch from Alpha v1.1.2
HotbarSwap Minecraft Fabric mod for Stardew Valley-inspired hotbar swapping. Developed for 1.18.1. Features Adds 2 keybinds: Swap Hotbar (Default: H):
HotbarCycle Minecraft Fabric mod for Stardew Valley-inspired hotbar cycling. Developed for 1.18.1. Features Adds 2 keybinds: Swap Hotbar (Default: H):
Minecraft Forge/Fabric mod that adds the ability to walk around while in inventories
Mesh is a cross-version minecraft mod development platform for Forge and Fabric. Supported Versions Mesh will eventually be able to run on most f
A legacy-fabric mod that makes minecraft versions older than 1.13 run using LWJGL 3 instead of the legacy LWJGL 2
RaknetFabric A Fabric mod that allows using RakNet as Minecraft networking backend. Features Higher reliability and lower latency under unreliable and
Copper Golem for Fabric ?? Sadly at Minecraft Live 2021 the Copper Golem did not win the vote to get added into 1.18. But this little golem is so cute
Splasher! ?? Customize Minecraft Splash Texts on Your Own! Contribute a Translation Translate assets/splasher/lang/en_us.json into your favorite langu