Giter Club home page Giter Club logo

fastback's Introduction

FastBack

Fast, incremental Minecraft world backups powered by Git

Fastback is a Minecraft mod that backs up your world in incremental snapshots. When it does a backup, it only saves the parts of your world that changed.

This means backups are fast. It also means you can keep snapshots of your world without using up a lot of disk space.

Features

  • Now with Forge support!
  • Incrementally backup just the changed files
  • Faster, smaller backups than zipping
  • Back up locally
  • Back up remotely to any git server
  • Back up remotely to any network volume (no git server required)
  • Schedule backups to run automatically
  • Easily restore backup snapshots
  • Snapshot pruning, retention policies
  • Include mod jars and config files in backup snapshots
  • Broadcast server-wide notifications during backups
  • LuckPerms support
  • Works on clients and dedicated servers
  • Works on Linux, Mac and Windows
  • ..all with easy-to-use minecraft commands

Road Map

  • Support for restoring remote snapshots
  • Better management of remote snapshots
  • UI for managing backups from the title screen
  • Forge support (maybe)

Acknowledgements

Legal

FastBack is distributed under GNU Public License version 2.

You can put it in a modpack but please include attribution with a link to this page.

Questions?

Please start with the documentation. If you have more questions, please join "pcal's minecraft mods" on Discord:

https://discord.pcal.net

Note that Curseforge comments have been disabled and I will not reply to private messages.

fastback's People

Contributors

buiawpkgew1 avatar cmjnb avatar doritosxxx avatar felix14-v2 avatar j5155 avatar merith-tk avatar nopeprosonly avatar pcal43 avatar rmortes avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

fastback's Issues

scheduled backups

embed quartz? maybe overkill. just need some some basic configuration options. every n minutes. or every n ticks?

add /backup config

sets arbitrary git config settings. useful for undocumented features.

pre-commit world save randomly fails sometimes

[02:35:56] [pool-8-thread-2/ERROR]: Command execution failed.
java.util.NoSuchElementException: null
	at java.util.AbstractQueue.remove(AbstractQueue.java:117) ~[?:?]
	at net.minecraft.class_1255.method_16075(class_1255.java:131) ~[client-intermediary.jar:?]
	at net.minecraft.class_3215$class_4212.method_16075(class_3215.java:566) ~[client-intermediary.jar:?]
	at net.minecraft.class_1255.method_18857(class_1255.java:140) ~[client-intermediary.jar:?]
	at net.minecraft.class_3898.method_20584(class_3898.java:464) ~[client-intermediary.jar:?]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?]
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) ~[?:?]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?]
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[?:?]
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[?:?]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[?:?]
	at net.minecraft.class_3898.method_17242(class_3898.java:470) ~[client-intermediary.jar:?]
	at net.minecraft.class_3215.method_17298(class_3215.java:306) ~[client-intermediary.jar:?]
	at net.minecraft.class_3218.method_14176(class_3218.java:762) ~[client-intermediary.jar:?]
	at net.minecraft.server.MinecraftServer.method_3723(MinecraftServer.java:526) ~[client-intermediary.jar:?]
	at net.minecraft.server.MinecraftServer.method_39218(MinecraftServer.java:550) ~[client-intermediary.jar:?]
	at net.pcal.fastback.fabric.FabricServiceProvider.saveWorld(FabricServiceProvider.java:124) ~[fastback-0.2.0+1.19.2-prerelease.jar:?]
	at net.pcal.fastback.ModContext.saveWorld(ModContext.java:199) ~[fastback-0.2.0+1.19.2-prerelease.jar:?]
	at net.pcal.fastback.tasks.CommitTask.run(CommitTask.java:85) ~[fastback-0.2.0+1.19.2-prerelease.jar:?]
	at net.pcal.fastback.tasks.CommitAndPushTask.run(CommitAndPushTask.java:53) ~[fastback-0.2.0+1.19.2-prerelease.jar:?]
	at net.pcal.fastback.commands.FullCommand.lambda$run$1(FullCommand.java:55) ~[fastback-0.2.0+1.19.2-prerelease.jar:?]
	at net.pcal.fastback.commands.Commands.lambda$gitOp$1(Commands.java:107) ~[fastback-0.2.0+1.19.2-prerelease.jar:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
	at java.lang.Thread.run(Thread.java:833) [?:?]

finish i18n

still a number of usages of the deprecated notify(String)

support 'hourly' autosave action

Have a sepately-configurable action that runs after autosave when at least n minutes have passed since the previous autosave backup.

This way they can do localbackup on regular autosave and something heavier (push/gc) less frequently.

I think a two canned levels like this is sufficient. I don't really want to go the route of making it a full-on scheduler - just adds complexity. If they want something fancier, they should use cron or the built-in /schedule command.

ssh connections with `ed25519` keys fail with "Auth fail"

org.eclipse.jgit.api.errors.TransportException: [email protected]:pcal43/backup-test.git: Auth fail
	at org.eclipse.jgit.api.LsRemoteCommand.execute(LsRemoteCommand.java:192) ~[org.eclipse.jgit-6.2.0.202206071550-r.jar:?]
	at org.eclipse.jgit.api.LsRemoteCommand.call(LsRemoteCommand.java:131) ~[org.eclipse.jgit-6.2.0.202206071550-r.jar:?]
	at net.pcal.fastback.tasks.PushTask.run(PushTask.java:80) ~[main/:?]
	at net.pcal.fastback.tasks.CommitAndPushTask.run(CommitAndPushTask.java:54) ~[main/:?]
	at net.pcal.fastback.commands.FullCommand.lambda$run$1(FullCommand.java:64) ~[main/:?]
	at net.pcal.fastback.commands.Commands.lambda$gitOp$1(Commands.java:108) ~[main/:?]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
	at java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: org.eclipse.jgit.errors.TransportException: [email protected]:...: Auth fail
	at org.eclipse.jgit.transport.ssh.jsch.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:170) ~[org.eclipse.jgit.ssh.jsch-6.2.0.202206071550-r.jar:?]
	at org.eclipse.jgit.transport.SshTransport.getSession(SshTransport.java:107) ~[org.eclipse.jgit-6.2.0.202206071550-r.jar:?]
	at org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.<init>(TransportGitSsh.java:281) ~[org.eclipse.jgit-6.2.0.202206071550-r.jar:?]
	at org.eclipse.jgit.transport.TransportGitSsh.openFetch(TransportGitSsh.java:153) ~[org.eclipse.jgit-6.2.0.202206071550-r.jar:?]
	at org.eclipse.jgit.api.LsRemoteCommand.execute(LsRemoteCommand.java:170) ~[org.eclipse.jgit-6.2.0.202206071550-r.jar:?]
	... 10 more
Caused by: com.jcraft.jsch.JSchException: Auth fail
	at com.jcraft.jsch.Session.connect(Session.java:519) ~[jsch-0.1.55.jar:?]
	at org.eclipse.jgit.transport.ssh.jsch.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:123) ~[org.eclipse.jgit.ssh.jsch-6.2.0.202206071550-r.jar:?]
	at org.eclipse.jgit.transport.SshTransport.getSession(SshTransport.java:107) ~[org.eclipse.jgit-6.2.0.202206071550-r.jar:?]
	at org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.<init>(TransportGitSsh.java:281) ~[org.eclipse.jgit-6.2.0.202206071550-r.jar:?]
	at org.eclipse.jgit.transport.TransportGitSsh.openFetch(TransportGitSsh.java:153) ~[org.eclipse.jgit-6.2.0.202206071550-r.jar:?]
	at org.eclipse.jgit.api.LsRemoteCommand.execute(LsRemoteCommand.java:170) ~[org.eclipse.jgit-6.2.0.202206071550-r.jar:?]
	... 10 more

encourage/require shutdown backup first time

when they first enable, print out a message saying "looks like you haven't backed up, first one will be slow, need to do a shutdown backup first."

if we ever add a title screen gui then we can have a better ux

add annotation to snapshot branch name

after the date, just a note about the snapshot. could be provided by hand via commands or automatically

/backup now rebuilding in progress
  snapshot/4c04bd85-c2ab-402c-b6da-0a218d0e6d22/2022-09-08_18-21-06/scheduled-backup
  snapshot/4c04bd85-c2ab-402c-b6da-0a218d0e6d22/2022-09-08_18-18-31/finished-castle
  snapshot/4c04bd85-c2ab-402c-b6da-0a218d0e6d22/2022-09-08_18-20-20/creeper-destruction
  snapshot/4c04bd85-c2ab-402c-b6da-0a218d0e6d22/2022-09-08_18-21-06/shutdown
  snapshot/4c04bd85-c2ab-402c-b6da-0a218d0e6d22/2022-09-08_18-24-14/rebuilding-in-progress

noclassdef on shutdown backup

[02:47:52] [Server thread/INFO]: [NOTIFY] Saving local backup
[02:47:52] [Server thread/INFO]: Committing snapshots/bd867226-4959-4560-988c-540904a30871/2022-09-13_02-47-52
[02:47:53] [Server thread/INFO]: Local backup complete. Elapsed time: 0m 1s
[02:47:53] [Server thread/INFO]: [NOTIFY] Local backup complete
[02:47:53] [Server thread/INFO]: [NOTIFY] Starting remote backup
[02:47:53] [Server thread/INFO]: No detected/configured IoServiceFactoryFactory using Nio2ServiceFactoryFactory
[02:47:53] [sshd-JGitSshClient[4b185d7e]-nio2-thread-10/WARN]: globalRequest(ClientConnectionService[JGitClientSession[pcal@bigfrosty/192.168.1.10:22]])[[email protected], want-reply=false] failed (SshException) to process: EdDSA provider not supported
[02:47:53] [Server thread/INFO]: Pushing to ssh://192.168.1.10/git/CrazyDavesShipwreck
[02:47:53] [Server thread/INFO]: Using existing snapshot snapshots/bd867226-4959-4560-988c-540904a30871/2022-09-13_00-28-36 for common history
[02:47:54] [Server thread/INFO]: Opening connection
[02:47:54] [sshd-JGitSshClient[47fed937]-nio2-thread-10/WARN]: globalRequest(ClientConnectionService[JGitClientSession[pcal@bigfrosty/192.168.1.10:22]])[[email protected], want-reply=false] failed (SshException) to process: EdDSA provider not supported
[02:47:54] [Server thread/INFO]: [PROGRESS-COMPLETE] Opening connection
[02:47:54] [Server thread/INFO]: Counting objects
[02:47:54] [Server thread/ERROR]: Exception stopping the server
java.lang.NoClassDefFoundError: com/googlecode/javaewah/EWAHCompressedBitmap
at org.eclipse.jgit.internal.storage.file.PackBitmapIndexV1.readBitmap(PackBitmapIndexV1.java:285) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.internal.storage.file.PackBitmapIndexV1.(PackBitmapIndexV1.java:136) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.internal.storage.file.PackBitmapIndexV1.(PackBitmapIndexV1.java:77) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.internal.storage.file.PackBitmapIndex.read(PackBitmapIndex.java:98) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.internal.storage.file.PackBitmapIndex.open(PackBitmapIndex.java:65) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.internal.storage.file.Pack.getBitmapIndex(Pack.java:1129) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.internal.storage.file.WindowCursor.getBitmapIndex(WindowCursor.java:90) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.internal.storage.pack.PackWriter.findObjectsToPack(PackWriter.java:1915) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.internal.storage.pack.PackWriter.preparePack(PackWriter.java:1003) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.internal.storage.pack.PackWriter.preparePack(PackWriter.java:919) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.internal.storage.pack.PackWriter.preparePack(PackWriter.java:841) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.transport.BasePackPushConnection.writePack(BasePackPushConnection.java:327) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.transport.BasePackPushConnection.doPush(BasePackPushConnection.java:186) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.transport.BasePackPushConnection.push(BasePackPushConnection.java:137) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.transport.PushProcess.execute(PushProcess.java:179) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.transport.Transport.push(Transport.java:1389) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:149) ~[org_eclipse_jgit_org_eclipse_jgi206071550-r-b5710670b554bc80.jar:?]
at net.pcal.fastback.tasks.PushTask.doSmartPush(PushTask.java:135) ~[fastback-0.0.13+1.19.2.jar:?]
at net.pcal.fastback.tasks.PushTask.run(PushTask.java:82) ~[fastback-0.0.13+1.19.2.jar:?]
at net.pcal.fastback.tasks.BackupTask.run(BackupTask.java:56) ~[fastback-0.0.13+1.19.2.jar:?]
at net.pcal.fastback.LifecycleUtils.onWorldStop(LifecycleUtils.java:57) ~[fastback-0.0.13+1.19.2.jar:?]
at net.pcal.fastback.fabric.FastbackClientModInitializer.lambda$onInitializeClient$1(FastbackClientModInitializer.java:30) ~[fastback-0.0.13+1.19.2.jar:?]
at net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents.lambda$static$6(ServerLifecycleEvents.java:76) ~[fabric-lifecycle-events-v1-2.1.2+aeb40ebe90-3d9d1db039208512.jar:?]
at net.minecraft.server.MinecraftServer.handler$zgn000$afterShutdownServer(MinecraftServer.java:2811) ~[client-intermediary.jar:?]
at net.minecraft.server.MinecraftServer.method_3782(MinecraftServer.java:609) ~[client-intermediary.jar:?]
at net.minecraft.class_1132.method_3782(class_1132.java:195) ~[client-intermediary.jar:?]
at net.minecraft.server.MinecraftServer.method_29741(MinecraftServer.java:697) ~[client-intermediary.jar:?]
at net.minecraft.server.MinecraftServer.method_29739(MinecraftServer.java:257) ~[client-intermediary.jar:?]
at java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: java.lang.ClassNotFoundException: com.googlecode.javaewah.EWAHCompressedBitmap
at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?]
at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.loadClass(KnotClassDelegate.java:226) ~[fabric-loader-0.14.9.jar:?]
at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:145) ~[fabric-loader-0.14.9.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?]
... 29 more
[02:47:54] [Render thread/INFO]: Stopping worker threads
[02:47:54] [Render thread/INFO]: emissive suffixes loaded: {_e}

How to load a backup from deleted world ?

Hello guys, I'v tried creating a backup to my google drive with the create-file-remote command, I was wondering how do you go about loading the backup on another computer if the world directory is deleted on my main machine ?

The set-remote command does not list the snapshots from another world from the already existing folder.
The create-file-remote give me an error stating the backup folder already exist at the location.
Thanks.

BTW the discord invite link is broken on the documentation website.

add automatic purging strategies

need some canned strategies for more easily keeping backup size down.

maybe start with GFS and 'keep last n'. make pluggable in case someone wants to submit their own.

`gc` only repacks, does not delete loose objects

/backup gc is disabled in the public command list. Beacuse after pruning snapshots, it does not reduce repo size (and can actually increase it).

Need to dig in to the JGit code to figure out what it's doing.

Use filesystem level snapshots to 'freeze' the game directory before a backup

Many filesystems provide a 'snapshot' mechanism that can create local disk, well, snapshots. The snapshot is a read only view of the state of the filesystem at a prior point in time. It is cheap, as it does not need to copy blocks, it will just create new blocks for updates to the same data that is snapshot next time it is written to.

VSS for windows https://github.com/rclone/rclone/wiki/How-to-enable-VSS-for-rclone
ZFS snapshots https://ubuntu.com/tutorials/using-zfs-snapshots-clones
BTRFS https://linuxhint.com/use-btrfs-snapshots/
etc.

This mechanism can be used to create a super cheap and rapid instant picture of the filesystem, which can then let the backup process (here git) take its sweet time in the background, meanwhile the foreground process (i.e., the minecraft server) is free to resume normal operation (including save-on activities, as needed to reduce any rollback from crashes between two snapshots).

Game crash on startup

[15:11:47] [Render thread/FATAL]: Minecraft ran into a problem! Report saved to: C:\Users\Seba\Desktop\Gry\MultiMC\instances\Wildest-1.0\.minecraft\crash-reports\crash-2022-09-21_15.11.47-server.txt
---- Minecraft Crash Report ----
// Daisy, daisy...

Time: 2022-09-21 15:11:47
Description: Initializing game

java.lang.RuntimeException: Could not execute entrypoint stage 'client' due to errors, provided by 'fastback'!
	at Not Enough Crashes deobfuscated stack trace.(1.19.2+build.8)
	at net.fabricmc.loader.impl.entrypoint.EntrypointUtils.lambda$invoke0$0(EntrypointUtils.java:51)
	at net.fabricmc.loader.impl.util.ExceptionUtil.gatherExceptions(ExceptionUtil.java:33)
	at net.fabricmc.loader.impl.entrypoint.EntrypointUtils.invoke0(EntrypointUtils.java:49)
	at net.fabricmc.loader.impl.entrypoint.EntrypointUtils.invoke(EntrypointUtils.java:35)
	at net.fabricmc.loader.impl.game.minecraft.Hooks.startClient(Hooks.java:53)
	at fudge.notenoughcrashes.fabric.mixinhandlers.ModLoaders.fabricEntrypoints(ModLoaders.java:9)
	at net.minecraft.client.MinecraftClient.redirect$hle000$catchFabricInit(MinecraftClient:31454)
	at net.minecraft.client.MinecraftClient.<init>(MinecraftClient:459)
	at net.minecraft.client.main.Main.main(Main:205)
	at net.minecraft.client.main.Main.main(Main:51)
	at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:461)
	at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
	at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:568)
	at org.multimc.onesix.OneSixLauncher.launchWithMainClass(OneSixLauncher.java:210)
	at org.multimc.onesix.OneSixLauncher.launch(OneSixLauncher.java:245)
	at org.multimc.EntryPoint.listen(EntryPoint.java:143)
	at org.multimc.EntryPoint.main(EntryPoint.java:34)
Caused by: java.lang.RuntimeException: java.io.FileNotFoundException: Unable to load resource config\fastback\bin\enable
	at net.pcal.fastback.fabric.FabricClientModInitializer.onInitializeClient(FabricClientModInitializer.java:61)
	at net.fabricmc.loader.impl.entrypoint.EntrypointUtils.invoke0(EntrypointUtils.java:47)
	... 18 more
Caused by: java.io.FileNotFoundException: Unable to load resource config\fastback\bin\enable
	at net.pcal.fastback.utils.FileUtils.writeResourceToFile(FileUtils.java:60)
	at net.pcal.fastback.LifecycleUtils.copyConfigResources(LifecycleUtils.java:102)
	at net.pcal.fastback.LifecycleUtils.onClientStart(LifecycleUtils.java:42)
	at net.pcal.fastback.fabric.FabricClientModInitializer.onInitializeClient(FabricClientModInitializer.java:59)
	... 19 more


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Thread: Render thread
Stacktrace:
	at net.fabricmc.loader.impl.entrypoint.EntrypointUtils.lambda$invoke0$0(EntrypointUtils.java:51)
	at net.fabricmc.loader.impl.util.ExceptionUtil.gatherExceptions(ExceptionUtil.java:33)
	at net.fabricmc.loader.impl.entrypoint.EntrypointUtils.invoke0(EntrypointUtils.java:49)
	at net.fabricmc.loader.impl.entrypoint.EntrypointUtils.invoke(EntrypointUtils.java:35)
	at net.fabricmc.loader.impl.game.minecraft.Hooks.startClient(Hooks.java:53)
Mixins in Stacktrace: None found

-- Initialization --
Details:
Stacktrace:
	at fudge.notenoughcrashes.mixinhandlers.EntryPointCatcher.handleEntryPointError(EntryPointCatcher.java:28)
	at net.minecraft.class_310.redirect$hle000$catchFabricInit(class_310.java:31456)
	at net.minecraft.class_310.<init>(class_310.java:459)
	at net.minecraft.client.main.Main.method_44604(Main.java:205)
	at net.minecraft.client.main.Main.main(Main.java:51)
	at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:461)
	at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
	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(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.multimc.onesix.OneSixLauncher.launchWithMainClass(OneSixLauncher.java:210)
	at org.multimc.onesix.OneSixLauncher.launch(OneSixLauncher.java:245)
	at org.multimc.EntryPoint.listen(EntryPoint.java:143)
	at org.multimc.EntryPoint.main(EntryPoint.java:34)
Mixins in Stacktrace:
	net.minecraft.class_310:
		net.fabricmc.fabric.mixin.registry.sync.client.MinecraftClientMixin (fabric-registry-sync-v0.client.mixins.json)
		io.wispforest.owo.mixin.ui.MinecraftClientMixin (owo.mixins.json)
		alujjdnd.ngrok.lan.mixin.WindowTitleMixin (ngroklan.mixins.json)
		com.blamejared.ambientenvironment.mixin.MixinMinecraft (ambientenvironment.fabric.mixins.json)
		fudge.notenoughcrashes.mixins.client.MixinMinecraftClient (notenoughcrashes.mixins.json)
		net.minecraftforge.mixin.client.MinecraftMixin (forgeconfigapiport.fabric.mixins.json)
		net.bettercombat.mixin.client.MinecraftClientAccessor (bettercombat.mixins.json)
		fuzs.puzzleslib.mixin.client.accessor.MinecraftAccessor (puzzleslib.fabric.mixins.json)
		ladysnake.sincereloyalty.mixin.client.MinecraftClientMixin (sincereloyalty.mixins.json)
		fi.dy.masa.malilib.mixin.MixinMinecraftClient (mixins.malilib.json)
		fishcute.celestial.mixin.MinecraftMixin (celestial.mixins.json)
		io.github.lucaargolo.accuratemaps.mixin.MinecraftClientMixin (accuratemaps.mixin.json)
		com.replaymod.core.mixin.MixinMinecraft (mixins.core.replaymod.json)
		chrono.mods.compassribbon.mixin.client.MinecraftMixin (cr-compass-ribbon.mixins.json)
		net.coderbot.iris.mixin.MixinMinecraft_NoAuthInDev (mixins.iris.json)
		com.spanser.reacharound.mixin.client.MinecraftClientMixin (reacharound.mixins.json)
		net.coderbot.iris.mixin.MixinMinecraft_Images (mixins.iris.json)
		fuzs.stylisheffects.mixin.client.MinecraftMixin (stylisheffects.fabric.mixins.json)
		ca.fxco.memoryleakfix.mixin.customPayloadLeak.MinecraftClient_freeBufferMixin (memoryleakfix.mixins.json)
		wraith.harvest_scythes.mixin.ClientMixin (harvestscythes.mixins.json)
		io.wispforest.owo.mixin.MinecraftClientMixin (owo.mixins.json)
		net.coderbot.iris.mixin.MixinMinecraft_Keybinds (mixins.iris.json)
		dev.stashy.extrasounds.mixin.HotbarSlotSound (extrasounds.mixins.json)
		net.coderbot.iris.mixin.MixinMinecraft_PipelineManagement (mixins.iris.json)
		net.blay09.mods.balm.mixin.MinecraftMixin (balm.mixins.json)
		me.jellysquid.mods.sodium.mixin.core.MixinMinecraftClient (sodium.mixins.json)
		thecsdev.betterstats.client.mixin.MinecraftClientMixin (betterstats.client.mixins.json)
		draylar.omegaconfig.mixin.ClientMixin (omega-config.mixins.json)
		vazkii.patchouli.mixin.client.MixinMinecraft (patchouli_fabric.mixins.json)
		dev.architectury.mixin.fabric.client.MixinMinecraft (architectury.mixins.json)
		net.fabricmc.fabric.mixin.screen.MinecraftClientMixin (fabric-screen-api-v1.mixins.json)
		net.clayborn.accurateblockplacement.mixin.MinecraftClientMixin (accurateblockplacement.mixins.json)
		com.seibel.lod.fabric.mixins.events.MixinMinecraft (fabric.lod.mixins.json)
		ca.fxco.moreculling.mixin.blockstates.MinecraftClient_loadBlocksMixin (moreculling.mixins.json)
		jerozgen.languagereload.mixin.MinecraftClientMixin (languagereload.mixins.json)
		com.lodestar.aileron.mixin.MinecraftMixin (aileron-common.mixins.json)
		ca.fxco.moreculling.mixin.MinecraftClient_blockRenderManagerMixin (moreculling.mixins.json)
		ladysnake.satin.mixin.client.event.MinecraftClientMixin (mixins.satin.client.json)
		dev.huskcasaca.effortless.mixin.PlayerActionMixin (effortless.mixins.json)
		net.fabricmc.fabric.mixin.networking.accessor.MinecraftClientAccessor (fabric-networking-api-v1.client.mixins.json)
		ca.fxco.memoryleakfix.mixin.hugeScreenshotLeak.MinecraftClient_screenshotMixin (memoryleakfix.mixins.json)
		net.darkhax.bookshelf.mixin.client.AccessorMinecraft (bookshelf.common.mixins.json)
		net.bettercombat.mixin.client.MinecraftClientInject (bettercombat.mixins.json)
		net.dark_roleplay.gdarp.mixin.ClientPackFinderMixin (globaldataandresourcepacks.mixins.json)
		squeek.appleskin.mixin.MinecraftClientMixin (appleskin.mixins.json)
		malte0811.ferritecore.mixin.fabric.MinecraftMixin (ferritecore.fabric.mixin.json)
		eu.pb4.polymer.mixin.client.MinecraftClientMixin (polymer.mixins.json)
		net.fabricmc.fabric.mixin.event.interaction.client.MinecraftClientMixin (fabric-events-interaction-v0.client.mixins.json)
		net.fabricmc.fabric.mixin.datagen.client.MinecraftClientMixin (fabric-data-generation-api-v1.client.mixins.json)
		fudge.notenoughcrashes.fabric.mixins.client.CatchInitMInecraftClientMixin (notenoughcrashes.fabric.mixins.json)
		com.replaymod.core.mixin.MinecraftAccessor (mixins.core.replaymod.json)
		dev.stashy.extrasounds.mixin.inventory.InventoryScreenSounds (extrasounds.mixins.json)
		committee.nova.pkstmystench.mixin.MinecraftClientMixin (pkstmystench.mixins.json)
		net.F53.HorseBuff.mixin.Client.InventoryAccessor (horsebuff.mixins.json)
		me.lucko.spark.fabric.mixin.MinecraftClientAccessor (spark.mixins.json)
		moriyashiine.enchancement.mixin.vanillachanges.cooldownpreventsusage.client.MinecraftClientMixin (enchancement.mixins.json)
		io.socol.betterthirdperson.mixin.MinecraftClientMixin (betterthirdperson.mixins.json)
		com.anthonyhilyard.iceberg.mixin.MinecraftMixin (iceberg.mixins.json)
		zabi.minecraft.extraalchemy.mixin.client.MixinEntityOutline (extraalchemy.client.json)
		com.seibel.lod.fabric.mixins.MixinMinecraft (fabric.lod.mixins.json)
		dev.lambdaurora.spruceui.mixin.MinecraftClientMixin (spruceui.mixins.json)
		jerozgen.languagereload.mixin.MinecraftClientAccessor (languagereload.mixins.json)
		dev.huskcasaca.effortless.mixin.ScreenMixin (effortless.mixins.json)
		moriyashiine.enchancement.mixin.perception.client.MinecraftClientMixin (enchancement.mixins.json)
		com.replaymod.lib.de.johni0702.minecraft.gui.versions.mixin.MixinMinecraft (mixins.jgui.json)
		com.natamus.collective_fabric.fabric.mixin.MinecraftMixin (collective_fabric.mixins.json)
		org.betterx.bclib.mixin.client.MinecraftMixin (bclib.mixins.client.json)
		net.bunten.enderscape.client.mixin.MinecraftClientMixin (enderscape.client.mixins.json)
		dev.lambdaurora.lambdynlights.mixin.MinecraftClientMixin (lambdynlights.mixins.json)
		net.fabricmc.fabric.mixin.event.lifecycle.client.MinecraftClientMixin (fabric-lifecycle-events-v1.client.mixins.json)
		dev.isxander.debugify.client.mixins.basic.mc46766.MinecraftClientMixin (debugify.client.mixins.json)
		com.replaymod.render.mixin.Mixin_SuppressFramebufferResizeDuringRender (mixins.render.replaymod.json)
		net.medievalweapons.mixin.client.MinecraftClientMixin (medievalweapons.mixins.json)
		ca.fxco.memoryleakfix.mixin.targetEntityLeak.MinecraftClient_targetClearMixin (memoryleakfix.mixins.json)
		io.github.lucaargolo.slotlock.mixin.MinecraftClientMixin (slotlock.mixins.json)
		me.flashyreese.mods.sodiumextra.mixin.gui.MinecraftClientAccessor (sodium-extra.mixins.json)
		fi.dy.masa.minihud.mixin.MixinMinecraftClient (mixins.minihud.json)
	net.minecraft.client.main.Main:
		fudge.notenoughcrashes.fabric.mixins.client.MixinMain (notenoughcrashes.fabric.mixins.json)
		io.github.ultimateboomer.smoothboot.mixin.client.MainMixin (smoothboot.mixins.json)
		ca.fxco.memoryleakfix.mixin.spongePoweredLeak.Main_clientLoadedMixin (memoryleakfix.mixins.json)

provide workaround for gc issues

Until we figure out what JGit gc is doing exactly, offer a workaround with CLI git. Maybe include it in a script in the fastback dir.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.