Giter Club home page Giter Club logo

firmament's Introduction

Firmament

Powered by NEU

Firmament will soon enter its early public alpha stage. While there is still much to be done in terms of usability, a lot of features are already ready.

In the meantime please do not ask for features to be added, instead check the TODO list (although bug reports are welcome).

This project is currently being renamed.

Forum Thread Discord Modrinth Github Releases

Currently working features

  • Item List of all SkyBlock Items
  • Grouping Items that belong together like minions
  • Recipe Viewer for Crafting Recipes
  • Recipe Viewer for Forge Recipes
  • Image Preview in chat
  • A storage overview (not a full on overlay that allows you to interact with all pages, but that is planned)
  • A crafting overlay when clicking the "Move Item" plus in a crafting recipe
  • Cursor position saver
  • Slot locking
  • Support for custom texture packs (loads item models from firmskyblock:<skyblock id> before the vanilla model gets loaded)
  • Fairy soul highlighter
  • A hud editor powered by Jarvis
  • Fishing Helper for Fishing particles (currently not working if you sneak because of 1.20 messing up positioning, but there will be a fix for that once i get confirmation by an admin that that fix is allowed)
  • Basic Config Gui (/firm config). Still needs improvement, but for the basics it's enough. You can also use /jarvis options to search through all config options

Installation

Firmament needs the following libraries to work:

You can download Firmament itself on Modrinth or on GitHub.

Usage

Everything is configurable via either /firm config, or via /jarvis options.

Recommendations

  • DulkirMod-Fabric, a versatile SkyBlock mod.
  • Sodium and Lithium, both excellent performance mods.
  • ModMenu, just to see which mods you have installed, and to configure some of them.
  • Zoomify, a very basic, but very tidy zoom mod.

Infos about the development

Building your own

Use Java 17.

Running ./gradlew :build will create a mod jar in build/libs

You will need the fabric api mod, the fabric kotlin language mod, the architectury mod and REI in your mods folder in order for this mod to work.

Licensing and contribution policy

This mod is licensed under a GPL 3.0 or Later license. To read a full license report of all dependencies, execute ./gradlew :printAllLicenses.

Contributions are tentatively welcomed. The mod is still in an early stage and lots of things will change and/or are not properly documented for other developers. If you would still like to try, make sure to add the proper copyright header to your file, or update existing copyright headers with your name and the current year. Pull requests are welcome through GitHub or via git send-email. Your code will be publicly available under a GPL license, so make sure that you have the appropriate permissions to grant that license, or if you are reusing code from somewhere else to properly credit the code and check if the original license is compatible with ours. If you want, you can license a specific file you write under a less restrictive non copyleft license with appropriate header, although it may at a later point be upgraded to a GPL licensed file, if another contributor edits that file.

Renaming

This method is in the process of being renamed to Firmament from NotEnoughUpdates1.19. As such some of the branding and code references may still refer to NEU or NotEnoughUpdates. This mod is not related to NEU (although I am at this point the most active and (by line count) second most prolific NEU dev (after only Moulberry himself)). This mod is also using NEU data and as such can be referred to as "Firmament powered by NEU". This mod exists outside the Moulberryverse of mods and is not integrated into the Moulberryverse of quality control and bureaucracy. Any references to Moulberry and most references to NEU are due to be removed. This mod is not representing NEU in 1.19, although it does have some of its features.

firmament's People

Contributors

nea89o avatar walkerselby 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

Watchers

 avatar

firmament's Issues

Missing recipe categories

  • Mob drops
  • Kat upgrades
  • Essence upgrades
  • NPC Shops
  • Villager trades (stranded)
  • Wiki data as an extra tab.

Fix DFU for banners

Log
[09:27:15] [DefaultDispatcher-worker-7 @Firmament#18/ERROR] (ItemCache) Could not data fix up {Count:1b,Damage:15s,id:"minecraft:banner",tag:{BlockEntityTag:{Base:15.0d,Patterns:[{Color:0.0d,Pattern:"b"},{Color:13.0d,Pattern:"cr"},{Color:5.0d,Pattern:"cbo"},{Color:5.0d,Pattern:"mc"},{Color:0.0d,Pattern:"flo"},{Color:0.0d,Pattern:"bts"},{Color:0.0d,Pattern:"tts"}]},ExtraAttributes:{id:"TOTEM_OF_CORRUPTION"},HideFlags:254.0d,display:{Lore:["§6Item Ability: Deploy","§7§7Place a totem down for §a2m","§a§7turning nearby mobs into their","§7§cCorrupted §7forms.","","§7§eNote: §7Only one Corrupted","§7Totem can be active at a time.","§8Mana Cost: §3200","","§a§lUNCOMMON"],Name:"§aTotem of Corruption"}}}
 java.lang.IllegalArgumentException: Unknown type Banner in net.minecraft.datafixer.TypeReferences$$Lambda$531/0x00000008005884b0@7dee5b4d 
	at net.minecraft.datafixer.fix.ChoiceTypesFix.method_15475(ChoiceTypesFix.java:40) ~[minecraft-clientonly-project-root-1.20.2-net.fabricmc.yarn.1_20_2.1.20.2+build.1-v2.jar:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at com.mojang.datafixers.FunctionType$Instance.lambda$first$1(FunctionType.java:81) ~[datafixerupper-6.0.8.jar:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at com.mojang.datafixers.util.Either.lambda$mapRight$1(Either.java:166) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.util.Either$Right.map(Either.java:99) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.util.Either.mapRight(Either.java:166) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.FunctionType$Instance.lambda$right$6(FunctionType.java:104) ~[datafixerupper-6.0.8.jar:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at com.mojang.datafixers.util.Either.lambda$mapRight$1(Either.java:166) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.util.Either$Right.map(Either.java:99) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.util.Either.mapRight(Either.java:166) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.FunctionType$Instance.lambda$right$6(FunctionType.java:104) ~[datafixerupper-6.0.8.jar:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at com.mojang.datafixers.util.Either.lambda$mapRight$1(Either.java:166) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.util.Either$Right.map(Either.java:99) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.util.Either.mapRight(Either.java:166) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.FunctionType$Instance.lambda$right$6(FunctionType.java:104) ~[datafixerupper-6.0.8.jar:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at com.mojang.datafixers.functions.Comp.applyUnchecked(Comp.java:126) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.functions.Comp.lambda$eval$2(Comp.java:118) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.functions.Fold.lambda$eval$2(Fold.java:89) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.functions.Comp.applyUnchecked(Comp.java:126) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.functions.Comp.lambda$eval$2(Comp.java:118) ~[datafixerupper-6.0.8.jar:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at com.mojang.datafixers.util.Either.lambda$mapRight$1(Either.java:166) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.util.Either$Right.map(Either.java:99) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.util.Either.mapRight(Either.java:166) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.FunctionType$Instance.lambda$right$6(FunctionType.java:104) ~[datafixerupper-6.0.8.jar:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at com.mojang.datafixers.FunctionType$Instance.lambda$first$1(FunctionType.java:81) ~[datafixerupper-6.0.8.jar:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at com.mojang.datafixers.functions.Comp.applyUnchecked(Comp.java:126) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.functions.Comp.lambda$eval$2(Comp.java:118) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.FunctionType$Instance.lambda$first$1(FunctionType.java:81) ~[datafixerupper-6.0.8.jar:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at com.mojang.datafixers.functions.Comp.applyUnchecked(Comp.java:126) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.functions.Comp.lambda$eval$2(Comp.java:118) ~[datafixerupper-6.0.8.jar:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at com.mojang.datafixers.util.Either.lambda$mapRight$1(Either.java:166) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.util.Either$Right.map(Either.java:99) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.util.Either.mapRight(Either.java:166) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.FunctionType$Instance.lambda$right$6(FunctionType.java:104) ~[datafixerupper-6.0.8.jar:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at com.mojang.datafixers.FunctionType$Instance.lambda$first$1(FunctionType.java:81) ~[datafixerupper-6.0.8.jar:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at com.mojang.datafixers.FunctionType$Instance.lambda$first$1(FunctionType.java:81) ~[datafixerupper-6.0.8.jar:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at com.mojang.datafixers.FunctionType$Instance.lambda$first$1(FunctionType.java:81) ~[datafixerupper-6.0.8.jar:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at java.util.function.Function.lambda$compose$0(Function.java:68) ~[?:?]
	at com.mojang.datafixers.functions.Comp.applyUnchecked(Comp.java:126) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.functions.Comp.lambda$eval$2(Comp.java:118) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.types.Type.capWrite(Type.java:165) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.types.Type.lambda$readAndWrite$10(Type.java:157) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.serialization.DataResult.lambda$flatMap$11(DataResult.java:139) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.util.Either$Left.map(Either.java:38) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.serialization.DataResult.flatMap(DataResult.java:137) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.types.Type.readAndWrite(Type.java:156) ~[datafixerupper-6.0.8.jar:?]
	at com.mojang.datafixers.DataFixerUpper.update(DataFixerUpper.java:78) ~[datafixerupper-6.0.8.jar:?]
	at moe.nea.firmament.repo.ItemCache.transformFrom10809ToModern(ItemCache.kt:62) ~[main/:?]
	at moe.nea.firmament.repo.ItemCache.asItemStackNow(ItemCache.kt:84) ~[main/:?]
	at moe.nea.firmament.repo.ItemCache.asItemStack-y8cp9ps(ItemCache.kt:101) ~[main/:?]
	at moe.nea.firmament.repo.ItemCache.asItemStack-y8cp9ps$default(ItemCache.kt:97) ~[main/:?]
	at moe.nea.firmament.repo.ItemCache$reload$1.invokeSuspend(ItemCache.kt:162) ~[main/:?]
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) ~[kotlin-stdlib-1.8.21.jar:?]
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) ~[kotlinx-coroutines-core-jvm-1.6.4.jar:?]
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570) ~[kotlinx-coroutines-core-jvm-1.6.4.jar:?]
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) ~[kotlinx-coroutines-core-jvm-1.6.4.jar:?]
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677) ~[kotlinx-coroutines-core-jvm-1.6.4.jar:?]
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664) ~[kotlinx-coroutines-core-jvm-1.6.4.jar:?]

Too many open files

When I launch the game and try to connect to hypixel I get this issue, unless I delete all data for the mod in folders. (Fresh install)

[04:09:53] [DefaultDispatcher-worker-6/INFO]: Download repository zip file to /tmp/firmament-repo9221032330668853189.zip. Deleting old repository [04:09:53] [DefaultDispatcher-worker-1/INFO]: Extracting new repository [04:09:53] [DefaultDispatcher-worker-1/ERROR]: Uncaught exception in thread "DefaultDispatcher-worker-1" java.nio.file.FileSystemException: .firmament/repo-extracted/items/PET_SKIN_PHOENIX_ICE.json: Too many open files at sun.nio.fs.UnixException.translateToIOException(UnixException.java:100) ~[?:?] at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:106) ~[?:?] at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:111) ~[?:?] at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:218) ~[?:?] at java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:484) ~[?:?] at java.nio.file.Files.newOutputStream(Files.java:228) ~[?:?] at moe.nea.firmament.repo.RepoDownloadManager.extractNewRepository(RepoDownloadManager.kt:117) ~[Firmament-1.1.0.jar:?] at moe.nea.firmament.repo.RepoDownloadManager.access$extractNewRepository(RepoDownloadManager.kt:28) ~[Firmament-1.1.0.jar:?] at moe.nea.firmament.repo.RepoDownloadManager$downloadUpdate$2$2.invokeSuspend(RepoDownloadManager.kt:92) ~[Firmament-1.1.0.jar:?] at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) ~[org_jetbrains_kotlin_kotlin-stdlib-1.9.10-322b6d1b226d3ad5.jar:?] at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108) ~[org_jetbrains_kotlinx_kotlinx-coe-jvm-1.7.3-cb5d5a55314c70b3.jar:?] at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:115) ~[org_jetbrains_kotlinx_kotlinx-coe-jvm-1.7.3-cb5d5a55314c70b3.jar:?] at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:103) ~[org_jetbrains_kotlinx_kotlinx-coe-jvm-1.7.3-cb5d5a55314c70b3.jar:?] at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:584) ~[org_jetbrains_kotlinx_kotlinx-coe-jvm-1.7.3-cb5d5a55314c70b3.jar:?] at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:793) ~[org_jetbrains_kotlinx_kotlinx-coe-jvm-1.7.3-cb5d5a55314c70b3.jar:?] at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:697) ~[org_jetbrains_kotlinx_kotlinx-coe-jvm-1.7.3-cb5d5a55314c70b3.jar:?] at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:684) ~[org_jetbrains_kotlinx_kotlinx-coe-jvm-1.7.3-cb5d5a55314c70b3.jar:?] Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException Failed to load cookie file from cookie: Too many open files Failed to load cookie file from cookie: Too many open files shared memfd open() failed: Too many open files [04:10:08] [IO-Worker-19/INFO]: System default audio device has changed! socket(): Too many open files [ALSOFT] (EE) Error enumerating devices: Context did not connect (Access denied) [04:10:09] [Render thread/WARN]: Missing sound for event: minecraft:item.goat_horn.play [04:10:09] [Render thread/WARN]: Missing sound for event: minecraft:entity.goat.screaming.horn_break Failed to load cookie file from cookie: Too many open files [04:10:09] [Render thread/INFO]: OpenAL initialized on device Analog Stereo [04:10:09] [Render thread/INFO]: Sound engine started shared memfd open() failed: Too many open files socket(): Too many open files [ALSOFT] (EE) Error enumerating devices: Context did not connect (Access denied) [04:10:10] [IO-Worker-19/INFO]: System default audio device has changed! [04:10:11] [Render thread/WARN]: Missing sound for event: minecraft:item.goat_horn.play [04:10:11] [Render thread/WARN]: Missing sound for event: minecraft:entity.goat.screaming.horn_break [04:10:11] [Render thread/INFO]: OpenAL initialized on device Analog Stereo [04:10:11] [Render thread/INFO]: Sound engine started [04:10:17] [Render thread/INFO]: Connecting to play.hypixel.net, 25565 [04:10:19] [Server Connector #1/ERROR]: Couldn't connect to server java.lang.IllegalStateException: failed to create a child event loop at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:88) ~[netty-common-4.1.97.Final.jar:?] at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:60) ~[netty-common-4.1.97.Final.jar:?] at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:49) ~[netty-common-4.1.97.Final.jar:?] at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:59) ~[netty-transport-4.1.97.Final.jar:?] at io.netty.channel.epoll.EpollEventLoopGroup.<init>(EpollEventLoopGroup.java:117) ~[netty-transport-classes-epoll-4.1.97.Final.jar:?] at io.netty.channel.epoll.EpollEventLoopGroup.<init>(EpollEventLoopGroup.java:104) ~[netty-transport-classes-epoll-4.1.97.Final.jar:?] at io.netty.channel.epoll.EpollEventLoopGroup.<init>(EpollEventLoopGroup.java:81) ~[netty-transport-classes-epoll-4.1.97.Final.jar:?] at net.minecraft.class_2535.method_10765(class_2535.java:80) ~[client-intermediary.jar:?] at com.google.common.base.Suppliers$NonSerializableMemoizingSupplier.get(Suppliers.java:181) ~[guava-32.1.2-jre.jar:?] at net.minecraft.class_2535.method_52271(class_2535.java:459) ~[client-intermediary.jar:?] at net.minecraft.class_412$1.run(class_412.java:98) ~[client-intermediary.jar:?] Caused by: io.netty.channel.ChannelException: epoll_create1() failed: Too many open files at io.netty.channel.epoll.Native.epollCreate(Native Method) ~[netty-transport-classes-epoll-4.1.97.Final.jar:?] at io.netty.channel.epoll.Native.newEpollCreate(Native.java:155) ~[netty-transport-classes-epoll-4.1.97.Final.jar:?] at io.netty.channel.epoll.EpollEventLoop.openFileDescriptors(EpollEventLoop.java:120) ~[netty-transport-classes-epoll-4.1.97.Final.jar:?] at io.netty.channel.epoll.EpollEventLoop.<init>(EpollEventLoop.java:106) ~[netty-transport-classes-epoll-4.1.97.Final.jar:?] at io.netty.channel.epoll.EpollEventLoopGroup.newChild(EpollEventLoopGroup.java:190) ~[netty-transport-classes-epoll-4.1.97.Final.jar:?] at io.netty.channel.epoll.EpollEventLoopGroup.newChild(EpollEventLoopGroup.java:37) ~[netty-transport-classes-epoll-4.1.97.Final.jar:?] at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:84) ~[netty-common-4.1.97.Final.jar:?] ... 10 more

Dungeons!

  • Dungeon Map + Dungeon Map Parser (standalone lib for that one)
  • Secret Waypoints
  • Puzzle Solvers
  • Score Calculation
  • Profit Calculation
  • Contemplating about making client side stonking public

Custom textures crashes in event handler with cacheDuration = 0

[19:55:21] [Render thread/ERROR]: Caught exception during processing event TickEvent(tickCount=1923) by Handler(invocation=(moe.nea.firmament.events.TickEvent) -> kotlin.Unit, receivesCancelled=false)
java.lang.ArithmeticException: / by zero
at moe.nea.firmament.features.texturepack.CustomSkyBlockTextures$onLoad$2.invoke(CustomSkyBlockTextures.kt:47) ~[Firmament-1.3.2.jar:?]
at moe.nea.firmament.features.texturepack.CustomSkyBlockTextures$onLoad$2.invoke(CustomSkyBlockTextures.kt:46) ~[Firmament-1.3.2.jar:?]
at moe.nea.firmament.events.FirmamentEventBus.publish(FirmamentEventBus.kt:34) ~[Firmament-1.3.2.jar:?]
at moe.nea.firmament.Firmament.onClientInitialize$lambda$2(Firmament.kt:128) ~[Firmament-1.3.2.jar:?]
at net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents.lambda$static$2(ClientTickEvents.java:43) ~[fabric-lifecycle-events-v1-2.3.0+a67ffb5d4f-509da73f0c38ec40.jar:?]
at net.minecraft.class_310.handler$zlp000$fabric-lifecycle-events-v1$onEndTick(class_310.java:6277) ~[client-intermediary.jar:?]
at net.minecraft.class_310.method_1574(class_310.java:2067) ~[client-intermediary.jar:?]
at net.minecraft.class_310.method_1523(class_310.java:1289) ~[client-intermediary.jar:?]
at net.minecraft.class_310.method_1514(class_310.java:888) ~[client-intermediary.jar:?]
at net.minecraft.client.main.Main.main(Main.java:265) ~[fabric-loader-0.15.6-1.20.4.jar:?]
at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:470) ~[fabric-loader-0.15.6.jar:?]
at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) ~[fabric-loader-0.15.6.jar:?]
at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23) ~[fabric-loader-0.15.6.jar:?]

[23:59:59] [Render thread/ERROR]: Caught exception during processing event TickEvent(tickCount=295039) by Handler(invocation=(moe.nea.firmament.events.TickEvent) -> kotlin.Unit, receivesCancelled=false)
java.lang.ArithmeticException: null

NEUItemEntryRenderer crashes when it gets to drills

The fuel trips them up real bad, it tries to read the formatting codes as part of the number:

	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
	at java.base/java.lang.Integer.parseInt(Integer.java:668)
	at java.base/java.lang.Integer.parseInt(Integer.java:786)
	at net.minecraft.class_332.betterinject$blg000$skyblocker$renderItemBar(class_332.java:1789)
	at net.minecraft.class_332.method_51432(class_332.java)
	at me.shedaniel.rei.plugin.client.entry.ItemEntryDefinition$ItemEntryRenderer.renderOverlay(ItemEntryDefinition.java:348)
	at me.shedaniel.rei.plugin.client.entry.ItemEntryDefinition$ItemEntryRenderer.render(ItemEntryDefinition.java:283)
	at me.shedaniel.rei.impl.common.entry.AbstractEntryStack.render(AbstractEntryStack.java:183)
	at moe.nea.firmament.rei.NEUItemEntryRenderer.render(NEUItemEntryRenderer.kt:26)
	at me.shedaniel.rei.impl.common.entry.AbstractEntryStack.render(AbstractEntryStack.java:183)
	at me.shedaniel.rei.impl.client.gui.widget.EntryWidget.drawCurrentEntry(EntryWidget.java:427)
	at me.shedaniel.rei.impl.client.gui.widget.EntryWidget.method_25394(EntryWidget.java:383)
	at me.shedaniel.rei.impl.client.gui.widget.MergedWidget.method_25394(MergedWidget.java:50)
	at me.shedaniel.rei.api.client.gui.widgets.DelegateWidget.method_25394(DelegateWidget.java:48)
	at me.shedaniel.rei.api.client.gui.widgets.DelegateWidget.method_25394(DelegateWidget.java:48)
	at me.shedaniel.rei.impl.client.gui.widget.DelegateWidgetWithTranslate.method_25394(DelegateWidgetWithTranslate.java:58)
	at me.shedaniel.rei.impl.client.gui.screen.DefaultDisplayViewingScreen.method_25394(DefaultDisplayViewingScreen.java:336)
	at net.minecraft.class_437.method_47413(class_437.java:110)
	at net.minecraft.class_757.method_3192(class_757.java:945)
	at net.minecraft.class_310.method_1523(class_310.java:1219)
	at net.minecraft.class_310.method_1514(class_310.java:802)
	at net.minecraft.client.main.Main.main(Main.java:250)
	at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:468)
	at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
	at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)```
	
	```Entry definition class name: me.shedaniel.rei.plugin.client.entry.ItemEntryDefinition
	Item Type: prismarine_shard
	Item Damage: 0
	Item NBT: {AttributeModifiers:[],Enchantments:[{}],ExtraAttributes:{drill_fuel:3000.0d,enchantments:{},id:"TITANIUM_DRILL_2",modifier:'originTag:"UNKNOWN"'},HideFlags:254.0d,display:{Lore:['{"text":"§8Breaking Power 8"}','{"text":""}','{"text":"§7Damage: §c+75"}','{"text":"§7Mining Speed: §a+900"}','{"text":"§7Mining Fortune: §a+40"}','{"text":" §8[§7⸕§8]"}','{"text":""}','{"text":"§7Fuel Tank: §cNot Installed"}','{"text":"§7§7Increases fuel capacity with"}','{"text":"§7part installed."}','{"text":""}','{"text":"§7Drill Engine: §cNot Installed"}','{"text":"§7§7Increases §6⸕ Mining Speed"}','{"text":"§6§7with part installed."}','{"text":""}','{"text":"§7Upgrade Module: §cNot Installed"}','{"text":"§7§7Applies a passive upgrade with"}','{"text":"§7part installed."}','{"text":""}','{"text":"§7Apply Drill Parts to this Drill"}','{"text":"§7by talking to a §2Drill"}','{"text":"§2Mechanic§7!"}','{"text":""}','{"text":"§7Fuel: §23,000§8/3k"}','{"text":""}','{"text":"§7§8This item can be reforged!"}','{"text":"§7§4❣ §cRequires §5Heart of the"}','{"text":"§5Mountain Tier 5§c."}','{"text":"§5§lEPIC DRILL"}'],Name:'{"text":"§5Titanium Drill DR-X455"}'},overrideMeta:1b}
	Item Foil: true```

Add DFU cache

Add a DFU cache to speed up start up / repo reloads.

Unreported exception thrown

Game crashes on "vanilla" (Fabric API, Fabric Language Kotlin, Firmament) Fabric 1.20.4 install when joining hypixel with the following error

java.lang.NoSuchMethodError: 'net.minecraft.class_2487 net.minecraft.class_2507.method_10629(java.io.InputStream)'
	at moe.nea.firmament.features.inventory.storageoverlay.VirtualInventory$Serializer.deserialize(VirtualInventory.kt:44) ~[Firmament-1.2.0.jar:?]
	at moe.nea.firmament.features.inventory.storageoverlay.VirtualInventory$Serializer.deserialize(VirtualInventory.kt:37) ~[Firmament-1.2.0.jar:?]
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:69) ~[org_jetbrains_kotlinx_kotlinx-sen-jvm-1.6.2-f395c4e1c18f8907.jar:?]
	at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:43) ~[org_jetbrains_kotlinx_kotlinx-see-jvm-1.6.2-d5203682a92600d9.jar:?]
	at kotlinx.serialization.encoding.AbstractDecoder.decodeNullableSerializableElement(AbstractDecoder.kt:78) ~[org_jetbrains_kotlinx_kotlinx-see-jvm-1.6.2-d5203682a92600d9.jar:?]
	at moe.nea.firmament.features.inventory.storageoverlay.StorageData$StorageInventory$$serializer.deserialize(StorageData.kt:19) ~[Firmament-1.2.0.jar:?]
	at moe.nea.firmament.features.inventory.storageoverlay.StorageData$StorageInventory$$serializer.deserialize(StorageData.kt:19) ~[Firmament-1.2.0.jar:?]
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:69) ~[org_jetbrains_kotlinx_kotlinx-sen-jvm-1.6.2-f395c4e1c18f8907.jar:?]
	at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:43) ~[org_jetbrains_kotlinx_kotlinx-see-jvm-1.6.2-d5203682a92600d9.jar:?]
	at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableElement(AbstractDecoder.kt:70) ~[org_jetbrains_kotlinx_kotlinx-see-jvm-1.6.2-d5203682a92600d9.jar:?]
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableElement(StreamingJsonDecoder.kt:168) ~[org_jetbrains_kotlinx_kotlinx-sen-jvm-1.6.2-f395c4e1c18f8907.jar:?]
	at kotlinx.serialization.encoding.CompositeDecoder$DefaultImpls.decodeSerializableElement$default(Decoding.kt:538) ~[org_jetbrains_kotlinx_kotlinx-see-jvm-1.6.2-d5203682a92600d9.jar:?]
	at kotlinx.serialization.internal.MapLikeSerializer.readElement(CollectionSerializers.kt:111) ~[org_jetbrains_kotlinx_kotlinx-see-jvm-1.6.2-d5203682a92600d9.jar:?]
	at kotlinx.serialization.internal.MapLikeSerializer.readElement(CollectionSerializers.kt:84) ~[org_jetbrains_kotlinx_kotlinx-see-jvm-1.6.2-d5203682a92600d9.jar:?]
	at kotlinx.serialization.internal.AbstractCollectionSerializer.readElement$default(CollectionSerializers.kt:51) ~[org_jetbrains_kotlinx_kotlinx-see-jvm-1.6.2-d5203682a92600d9.jar:?]
	at kotlinx.serialization.internal.AbstractCollectionSerializer.merge(CollectionSerializers.kt:36) ~[org_jetbrains_kotlinx_kotlinx-see-jvm-1.6.2-d5203682a92600d9.jar:?]
	at kotlinx.serialization.internal.AbstractCollectionSerializer.deserialize(CollectionSerializers.kt:43) ~[org_jetbrains_kotlinx_kotlinx-see-jvm-1.6.2-d5203682a92600d9.jar:?]
	at moe.nea.firmament.util.SortedMapSerializer.deserialize(SortedMapSerializer.kt:23) ~[Firmament-1.2.0.jar:?]
	at moe.nea.firmament.util.SortedMapSerializer.deserialize(SortedMapSerializer.kt:16) ~[Firmament-1.2.0.jar:?]
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:69) ~[org_jetbrains_kotlinx_kotlinx-sen-jvm-1.6.2-f395c4e1c18f8907.jar:?]
	at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableValue(AbstractDecoder.kt:43) ~[org_jetbrains_kotlinx_kotlinx-see-jvm-1.6.2-d5203682a92600d9.jar:?]
	at kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableElement(AbstractDecoder.kt:70) ~[org_jetbrains_kotlinx_kotlinx-see-jvm-1.6.2-d5203682a92600d9.jar:?]
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableElement(StreamingJsonDecoder.kt:168) ~[org_jetbrains_kotlinx_kotlinx-sen-jvm-1.6.2-f395c4e1c18f8907.jar:?]
	at moe.nea.firmament.features.inventory.storageoverlay.StorageData$$serializer.deserialize(StorageData.kt:15) ~[Firmament-1.2.0.jar:?]
	at moe.nea.firmament.features.inventory.storageoverlay.StorageData$$serializer.deserialize(StorageData.kt:15) ~[Firmament-1.2.0.jar:?]
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:69) ~[org_jetbrains_kotlinx_kotlinx-sen-jvm-1.6.2-f395c4e1c18f8907.jar:?]
	at kotlinx.serialization.json.Json.decodeFromString(Json.kt:107) ~[org_jetbrains_kotlinx_kotlinx-sen-jvm-1.6.2-f395c4e1c18f8907.jar:?]
	at moe.nea.firmament.util.data.ProfileSpecificDataHolder.readValues(ProfileSpecificDataHolder.kt:53) ~[Firmament-1.2.0.jar:?]
	at moe.nea.firmament.util.data.ProfileSpecificDataHolder.<init>(ProfileSpecificDataHolder.kt:37) ~[Firmament-1.2.0.jar:?]
	at moe.nea.firmament.features.inventory.storageoverlay.StorageOverlay$Data.<init>(StorageOverlay.kt:20) ~[Firmament-1.2.0.jar:?]
	at moe.nea.firmament.features.inventory.storageoverlay.StorageOverlay$Data.<clinit>(StorageOverlay.kt) ~[Firmament-1.2.0.jar:?]
	at moe.nea.firmament.features.inventory.storageoverlay.StorageOverlay.rememberContent(StorageOverlay.kt:55) ~[Firmament-1.2.0.jar:?]
	at moe.nea.firmament.features.inventory.storageoverlay.StorageOverlay.access$rememberContent(StorageOverlay.kt:17) ~[Firmament-1.2.0.jar:?]
	at moe.nea.firmament.features.inventory.storageoverlay.StorageOverlay$onLoad$2.invoke(StorageOverlay.kt:49) ~[Firmament-1.2.0.jar:?]
	at moe.nea.firmament.features.inventory.storageoverlay.StorageOverlay$onLoad$2.invoke(StorageOverlay.kt:48) ~[Firmament-1.2.0.jar:?]
	at moe.nea.firmament.events.FirmamentEventBus.publish(FirmamentEventBus.kt:34) ~[Firmament-1.2.0.jar:?]
	at moe.nea.firmament.Firmament.onClientInitialize$lambda$2(Firmament.kt:128) ~[Firmament-1.2.0.jar:?]
	at net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents.lambda$static$2(ClientTickEvents.java:43) ~[fabric-lifecycle-events-v1-2.2.3+78d798af4f-60d2bffc28d75ec1.jar:?]
	at net.minecraft.class_310.handler$zen000$fabric-lifecycle-events-v1$onEndTick(class_310.java:4277) ~[client-intermediary.jar:?]
	at net.minecraft.class_310.method_1574(class_310.java:2067) ~[client-intermediary.jar:?]
	at net.minecraft.class_310.method_1523(class_310.java:1289) ~[client-intermediary.jar:?]
	at net.minecraft.class_310.method_1514(class_310.java:888) ~[client-intermediary.jar:?]
	at net.minecraft.client.main.Main.main(Main.java:265) ~[minecraft-1.20.4-client.jar:?]
	at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:470) ~[fabric-loader-0.15.6.jar:?]
	at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) ~[fabric-loader-0.15.6.jar:?]
	at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23) ~[fabric-loader-0.15.6.jar:?]
	at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:578) ~[?:?]
	at org.multimc.onesix.OneSixLauncher.launchWithMainClass(OneSixLauncher.java:243) ~[NewLaunch.jar:?]
	at org.multimc.onesix.OneSixLauncher.launch(OneSixLauncher.java:278) ~[NewLaunch.jar:?]
	at org.multimc.EntryPoint.listen(EntryPoint.java:143) ~[NewLaunch.jar:?]
	at org.multimc.EntryPoint.main(EntryPoint.java:34) ~[NewLaunch.jar:?]```

Runes have wrong Skyblock ID in inventory

In an attempt to port Hypixel Plus to the Firmament texture pack format I encountered an issue when porting the rune textures.

Given a model file named redstone_rune__1 in /firmskyblock/models/, as per the ID given when using Copy Texture Pack Id keybind from the Power Users settings, the replaced texture will correctly show up in the REI menu:

javaw_2024-02-17_02-15-48

But in the inventory or any storage unit it will still show up as the head model:

javaw_2024-02-17_02-16-51

The issue seems to be that the rune, while in an inventory, has the id of just RUNE:

javaw_2024-02-17_02-17-47

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.