You are viewing a potentially older version of this package. View all versions.
extraes-JeviLibBL_Debug-2.0.0 icon

JeviLibBL Debug

A multifunction library for code modders, containing patching, preferences, tweening, easy barcodes, and other utilities.

Date uploaded 3 years ago
Version 2.0.0
Download link extraes-JeviLibBL_Debug-2.0.0.zip
Downloads 452
Dependency string extraes-JeviLibBL_Debug-2.0.0

This mod requires the following mods to function

gnonme-BoneLib-3.1.2 icon
gnonme-BoneLib

A BONELAB mod for making life easier for other mod creators.

Preferred version: 3.1.2

README

JeviLib Debug

A multifunction library for code modders, containing serialization utilities and tweening.

What's the difference between "Debug" and "Normal"?

This version was built with the DEBUG compiler flag. This means that there are extra checks and log points. This means slightly decreased performance, but you will be warned when you attempt to perform invalid operations.

You should not rely on the increased checks for your code. This version should not be the version you depend on. You should depend on the normal version of JeviLib.

Developer notices

  • JeviLib v2.0.0 has been pre-released only as a Debug build for a reason. This is because it contains advanced processes that fix Coroutines and makes UniTasks usable, and I need more time to make sure these processes work on everyone's computers.

  • In using this pre-release version of JeviLib, you are able to use JeviLib's modifications to get your mods ready. If the Coroutine and UniTask fixer works fine on your machine (Quest 2 or PC), please tell me! I need to know if it works so I know I can upload the Release build. (And if it doesn't, please tell me that too! I need to know so I can improve compatibility)

  • If the fixer process does not properly execute, you may need to download it manually and run it.

  • JeviLib v2.0.0's advanced processes that may get it flagged by antivirus programs. To learn more, expand the dropdown below.

Why does JeviLib v2.0.0 get flagged by antivirus programs? - To be honest? **I don't know.** I ran it through VirusTotal THREE times and the only "warning" I got was that something had a *weird timestamp.*
  • As far as the advanced processes go, JeviLib v2.0.0 includes an embedded resource process that I called "JevilFixer.exe" (or "JevilForkedProcess")

    • This process will be opened if the type Cysharp.Threading.Tasks.UniTask.Awaiter does not implement the INotifyCompletion interface and/or MelonLoader.Support.MonoEnumeratorWrapper (from the IL2CPP support module) does not have the field waitTime.

    • The process has been packed into a single executable using the Costura.Fody assemblyweaver. This may be something that sets off antivirus programs. (I would have used the Produce Single File option in Publish, except I made it use .NET Framework to not balloon install size or force users to install the .NET Core runtime)

    • This process will reopen itself if it detects it is a child of the BONELAB process. This is so that will not close when BONELAB does. It must do this so it can modify the IL2CPP support module and unhollowed UniTask assembly after the game has exited. If it does not wait, it will be unable to delete or overwrite Il2Cpp.dll or UniTask.dll because MelonLoader locks those files when loading them.

    • Somehow, the user on Quest will have a better user experience, as they don't have to deal with dumbass programs like NORTON false-flagging my lib. Since Quest throws errors out the wazoo when I replace the support module, a Harmony-based solution has been developed instead. It has the same functionality. UniTask.dll is able to be modified during runtime because LemonLoader doesn't lock files.

What does it do?

This library holds a bunch of utilities I found necessary to create whilst I created BW Chaos, and that continues to remain useful on other projects. In these utilities are my Prefs system, numerous extension methods, and my serialization utilities (byte array lossless joiner and separator, Vector3 byte converter).

JeviLib also includes many extra utilities I created because I can see others having a use for them, organized by namespace.

  • Jevil: Contains countless utilities and extension methods I created during development of Chaos, maps, and other parts of JeviLib.
  • Jevil.Prefs: Described above, a way to quickly and easily create MelonPreferences and BoneMenu entries.
  • Jevil.Tweening: An extensible tweener that modders can use to smoothly transition the state of values from a starting value to another, with multiple tweeners built in.
  • Jevil.IMGUI: Contains utilities for drawing quick debug things to IMGUI. Use via DebugDraw class's methods.
  • Jevil.Patching: Easily hook/replace/disable methods using Actions and Funcs (And disable methods using namespace, type name, and method names).
  • Jevil.Waiting: Replacements for WaitUntil and WaitDuring, as well as a WaitForSceneInit awaitable. As well as CallDelayed to invoke things at a later time.

Thanks

  • WNP78: Making FieldInjector & telling me about (and helping me with) System.Linq.Expressions, used extensively in Jevil.Patching.
  • Adi: Carrying the code modding category while I waste a bunch of time fucking with Unity for Septic Survival and other things. Also bringing a seafaring misnomer to my attention.
  • Simpleflips: Shoutouts to simpleflips. Its a meme you dip.

Changelog

  • 2.0.0

    • Make mod development easier!
    • UniTasks and Coroutines now work how they should (UniTasks are now awaitable, you still must set your return type to Task though)
    • Added utility methods to check if the coroutine/unitask fixes have already been applied and restart the game to apply them if not.
    • Brought the debug build back after testing and fixing Tweening and Barcodes (mostly)
    • Fixed scene initialization error(s)
    • Added Hook.OntoComponentInit
    • Improved documentation for Redirect and Hook
  • 1.1.0

    • Add more functionality to Preferences, for Nichrome (which I need to fix a part of before releasing) and likely for Chaos, eventually.
    • Fixed Const.RigManagerName (oops! theres a reason i said you probably shouldn't use it)
  • 1.0.0

    • Initial BONELAB port