#LethalLib
3484 messages · Page 4 of 4 (latest)
But yeah LT being broken isn't surprising
I just wonder if one of the enemy mods is doing something they shouldn't
try Scophobia
Scopophobia needs to move to the new native spawning method Hamunii added for LL in the last update
I'll see if it's that
I disabled a few of your mods and one of them started making monsters working and it seems to be that but I might just be blind
yeah I've wanted to change how that works for a while but haven't had time to
If it is that I'll lyk then the dev needs to be made aware of it
Well
I have mines and turrets now
Good sign
should just be able to check logs for it to be easier tbh
but yeah it seems to be Scopophobia
Yes it was
own pack isn't spawning enemies after adding it
I have a Redwood!!!!
So yeah
it's Scopophobia
Lmfao rip Siren Head
I'm gonna guess it's due to the same stuff that breaks Xu's Giant, the LOS related code
Could mistake it for a tree T-T
I'm gonna try LethalThings again and see if enemies spawn or not
Snail seems to work, also fun fact Old Birds don't care about the snail at all
Something for @austere dagger to fix
c;
I mean Snail IS an invincible enemy so it'd be, odd, for it trying to kill an otherwise unkillable enemy
Would be funny
lol
The one time I'm actually happy Embrion existing since it's an easy place to guarantee Old Birds for testing
oof
Pretty sure star wants unkillable enemies to not be targetted, and it seems thats already a thing
Ahhh
yep
The Old Birds are kind of like an exception though since they attack everything
But it does make sense
I wouldn't be surprised if Zeekers hardcoded for it to target Masked/Baboon/Dog/Giant/Players
Yeah, itll need a lot more code to make all enemies killable but only by old birds
Hopefully zeekers just coded for it to kill killable enemies xD
@tough path could a similar fix be done for LLL btw for the time being for custom interiors and moons to work on V50?
If he did code it to only try to kill any killable entities, then that'd be a cool futureproof way if he ever wanted to add even more killable outdoor enemies, and by proxy any modder that adds indoor enemies to the outdoors like Hoarding Bugs
no
Okay I wanted to ask
Ye, or just killable modded enemies
hopefully, I am hoping zeekers is trying to accomodate for the modding community
Hard to say how Zeekers did it without looking at the code cause the only outdoor enemy that's unkillable now is worms and I don't recall Old Bird ever bothering to try and attack them when they do the nom leap
Yeah
Someone should go and check the code for the old birds xD
Probably not, its like 100< lines long
maybe more I cant remember
And dormant worms are placed so far down underground that they probably avoid detection by them natively
looks like it uses an interface
Hey @tough path is it possible to make it so v49 switches from int to float for the enemypowerlevels since a lot of mods are updating to float for v50?
That way that bridge can be gapped til V50 fully launches lol
is that not working
Well I was using the updated version of CoilHeadSettings by Zehs earlier on V49, and cus it switched from int to float I had a funny bug where after killing some enemies like Baboon Hawks they would come back from the dead
Lmfao
I mean with the new LethalLib update maybe that won't happen XD but it was funny af
It also threw a lot of errors so I wonder if a mod could be made that just switches it to float like in V50 but not sure
It had like 15 consecutive logs, don't be a baby
Also, not my code so nothing I can do about it
sifting through logs just kinda comes with the territory imo
do you know if the new update will break v49?
Batby said that it should work
So probably not
I’ll let you know
It works fine with V49
We had a game earlier where like 7-8 dogs spawned outside on Titan, power unchanged (so 2) and Titan with a max outside power of 7. Was wondering if this could be caused somehow by LethalLib and it's power calculations?
(Using KeepEnemyPower so when one is killed its power remains counting towards the max, so dead dogs aren't the cause)
@tough path If you're wondering I was the one who thought this might be the case, since you mentioned LethalLib has some problematic power level code that needs to be fixed lol
Since no enemy mods we use should be touching anything to cause this
XD
this is the strangest thing ive seen it seems to be with my asset bundle but nothing is null so its all loaded "[Error : Unity Log] NullReferenceException: Object reference not set to an instance of an object
Stack trace:
LethalLib.Modules.Enemies.FinalizeRegisterEnemy (LethalLib.Modules.Enemies+SpawnableEnemy spawnableEnemy) (at <c68aa40cbbae4bd69cd2fcd50c8f1ae1>:0)
LethalLib.Modules.Enemies.RegisterEnemy (EnemyType enemy, System.Int32 rarity, LethalLib.Modules.Levels+LevelTypes levelFlags, LethalLib.Modules.Enemies+SpawnType spawnType, System.String[] spawnLevelOverrides, TerminalNode infoNode, TerminalKeyword infoKeyword) (at <c68aa40cbbae4bd69cd2fcd50c8f1ae1>:0)
LethalLib.Modules.Enemies.RegisterEnemy (EnemyType enemy, System.Int32 rarity, LethalLib.Modules.Levels+LevelTypes levelFlags, LethalLib.Modules.Enemies+SpawnType spawnType, TerminalNode infoNode, TerminalKeyword infoKeyword) (at <c68aa40cbbae4bd69cd2fcd50c8f1ae1>:0)
DroneEnemy.Plugin.Awake () (at C:/Users/tabwe/source/repos/DroneEnemy/src/Plugin.cs:64)
UnityEngine.GameObject:AddComponent(Type)
BepInEx.Bootstrap.Chainloader:Start()
UnityEngine.Rendering.HighDefinition.HDRenderPipelineAsset:OnEnable()" i can't get it to register though if i use my old asset bundle it works fine
all i did was update my mod to v50
it works with the old one but not the new one
private void Awake() {
MainAssetBundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "droneenemyassets"));
InitializeConfig();
DroneEnemy = MainAssetBundle.LoadAsset<EnemyType>("DroneEnemy");
var TerminalNode = MainAssetBundle.LoadAsset<TerminalNode>("DroneEnemyTN");
var TerminalKeyword = MainAssetBundle.LoadAsset<TerminalKeyword>("DroneEnemyTK");
NetworkPrefabs.RegisterNetworkPrefab(DroneEnemy.enemyPrefab);
RegisterEnemy(DroneEnemy, spawnWeight.Value, LevelTypes.All, SpawnType.Default, TerminalNode, TerminalKeyword);
Logger.LogInfo($"Plugin {PluginInformation.PLUGIN_GUID} is loaded!");
}```
@tough path @crimson mauve you guys got any ideas?
Figured it out it was due to the HDRP settings not being correctly set
its supposed to be ```3 HDRP assets included in build:
- HDRP High Fidelity
- HDRP Balanced
- HDRP Performant``` not
- HDRenderSettings```
huh, interesting issue
Now that LLL has taken over functionality from LL.
Is there anything left in LL that LLL still cannot do?
Would LL be getting deprecated at some point / soon?
I recall this only being updated for major bugs from now on but could be mistaken
yeah, that's what I've heard as well.
I'm rather asking if there are still reasons to use it over going to LLL directly?
Is it just a matter of supporting legacy mods, that won't receive an upgrade.
Or is there some LL exclusive functionality left, which would mean that a direct port to LLL is unfeasible for mods that use that functionality.
Might want to ask batby
yeah, It's low priority, he'll come across this thread at some point
I dont think LLL has furniture etc support yet
Yet..., so is that planned?
So Ship Decor mods should remain on LL for now, but they could eventually also migrate to LLL, by update or get forked.
Also the future delivery bot from LT was planned to classify as a ship decor. So if it was implemented that way, soon, that would make LT depend on both LLL and LL...
And I'm assuming that furniture is the last feature of LL to move over?
LLL has l lib as a dependancy
already
Only so LL doesn't explode
Hmm, good point. So when LLL is installed, the support for ship decor is also installed by proxy of having LL in the background
Ehhh
Im guessing l lib is gonna be phased out and there may just be a patch for mods that use it laying around like what LE had
The switch from LL to LLL is much smoother than LE, there isn't a real need for a porting tool like what we have for LE
Oh I just mean for mods that arent gonna be updated
although weve been seeing several unoffical updates now
I'm guessing that the method signatures match, and you only need to change which api the mod is pointing at?
Uhhhh no, LL and LLL use a very similar system in that they utilise vanilla features to register their things, they're not very different
Ohh,
OOOH...
So an old LL mod, could work with LLL even without any porting?, It would be unaware that the vanilla feature is being powered by a different backend?
I guess? As long as vanilla doesn't change anything destructive LL will still work fine, minus any bugs that LL itself has
I would like batby to either confirm or deny this! But later when he doesn't have an explosive mailbox disorder.
Thanks for this info anyway. Details like this help a lot when planning out what to include in a modpack!
:p he'll tell you exactly what I said, except prob with bias sprinkled in because ofc
Maybe, but he wouldn't be guessing
😭
It's a figure of speech I'm not actually guessing, LL and LLL work really well because they use the vanilla system to register their shit
Alright, i thought you were actually guessing. Ty again and lol
is lethal lib gonna be getting the new moons as leveltypes any time soon?
it not a priority since u can technically set em through the same way as custom moons so i doubt the maintainers will bother with it
oh, alright
I'll get to this soon(tm), I just don't know how changing an enum's values affects things, but it's probably not gonna cause issues
it's a super simple change, but yeah the though of accidentally breaking something is just very scary
furniture and hazard support isn't in LLL yet yeah
but super duper easy for me to add
just gotta get other new stuff stable first
will be easy to port over too ofc
My jetpack is gone after i turned on the item saving in config
This one from LethalLib's config? Yeah I wouldn't trust it working based on the description, so probably better left disabled
[Items]
## Allow for LethalLib to store/reorder the item list, which should fix issues where items get reshuffled when loading an old save. This is experimental and may cause save corruptions occasionally.
# Setting type: Boolean
# Default value: false
EnableItemSaveFix = false
I saw someone suggesting that this update broke enemy spawns somehow, but no, the fix isn't related to anything closely resembling enemy spawns.
say i wanted to make a mod suing this lib that simply adds some scrap and thats it, is there a wiki teaching how to use this lib or any tutorials on how to use this lib?
keep in mind i HAVE made games in unity before but ive never modified someone else game so anything beyond the basics im totally lost
thx
With that mod in the API can you make a scrap mod?
You could either use Lethal Lib or Lethal Level Loader
If I would like to use the lethal lib, does much have to be done in visual studio?
Would it be possible to fix the PluginInfo.GUID ?
Isn't LethalLib registering PlainItems too late for the save system ? Like shouldn't items be added to AllItemsList in a postfix of StartOfRound.Start ?
It's actually using Terminal.Awake
I don't really know when save data is loaded
Terminal.Awake is before StartOfRound.Start
neither are before that
They are very much after that
GameNetworkManager.Start is when you load the main menu
I see
oof, yeah LethalLib is using PluginInfoProps but doesn't actually use it...
LethalLib [0.16.3]
Fixed
GetLLLNameOfLevelfunction now returns a lowercase level name so input is no longer case sensitive.
forgor to post this here
LethalLib [1.0.0]
[!NOTE] Despite the major version jump from 0.16.4 to 1.0.0, no major or breaking changes were made.
This change was made to properly follow SemVer to show that LethalLib's public API is stable.
Added
- Ability for items, levels, outside and inside mapobjects to register to levels through their LethalLevelLoader content tag.
Fixed
- mapobjects maybe having the same issues that items and enemies had the previous two versions with case sensitivity and leveltype validation.
ye, item weights being higher than a certain value or lower than a certain value cause weight bugs to occur
i just force em to a weight of 1 if they're under 1 or higher than 4, though ig in hindsight i shoulda just clamped
peak
ye
though maybe it's better not to clamp so it's very noticeable that the values are in an invalid range?
i think a warning is enough just so that the gameplay effect of the weight stays but like it's clear that something would've gone wrong otherwise
but up to you
i think that'll always sadly be a problem
it will be a problem as long as LL doesn't spit out a massive error message and not register the item, but not sure if we should do that
probably shouldnt because it's been a problem for a long time and some devs just arent here anymore
fair
https://github.com/EvaisaDev/LethalLib/pull/100 made the PR just incase you want it
the warning message is wrong
anything below 1 or above 4 gets reset to 1
Hello! Not sure if it's related, but linked it to DemonMae's interior channel too.
In their map of scrap generation, I did get an error thrown. Don't know if it's related, but lethallib was indeed the only thing that's changed. Linking just in case
ReXuvination and CodeRebirth seem to be be broken, and the only thing LethalLib should be changing is:
[03:26:16.4781103] [Warning: LethalLib] Item Data PC has an invalid weight of 0, resetting to weight of 1, please check the lethal.wiki for the weight calculation and give it a valid number, anything below 1 or above 4 gets forced to be 1 or 4.
[03:26:16.5043981] [Warning: LethalLib] Item Pentagram has an invalid weight of 333, resetting to weight of 1, please check the lethal.wiki for the weight calculation and give it a valid number, anything below 1 or above 4 gets forced to be 1 or 4.
copy that! thank you for the information
also seems that MysteryDice, JLL, LethalSettings and NightVision also all threw in the logs, including CentralConfig when disconnecting
note that all of that might be incompatibilities with other mods
It may have been an unlucky combination of scrap generation at that exact moment if not due to LL; errors abound but havent had it break in the past
It seems that StartOfRound.Instance is null which is causing CodeRebirth and ReXuvination to break
which basically means something has gone catastrophically wrong
fair! please don't troubleshoot tons!!!! 
Also other notable stuff
[03:26:16.6452621] [Error :More Ship Upgrades] [Tools] DropAllHeldItems method went missing.
[03:26:31.7776921] [Debug :BepInExFasterLoadAssetBundlesPatcher] Loading uncompressed bundle "pjonkgooseassets_-1789359388.assetbundle"
[03:26:31.8041086] [Debug :BepInExFasterLoadAssetBundlesPatcher] Loading uncompressed bundle "pjonkturkeyassets_657334770.assetbundle"
[03:26:31.8060760] [Error : Unity Log] The AssetBundle 'C:\Program Files (x86)\Steam\steamapps\common\Lethal Company\Cache\AssetBundles\pjonkturkeyassets_657334770.assetbundle' can't be loaded because another AssetBundle with the same files is already loaded.
[03:26:31.8060760] [Error :PjonkGoose] Failed to load pjonk turkey assets.
[03:26:31.8060760] [Error :PjonkGoose] Failed to load pjonk goose assets.
I don't want to waste your time on it if not related, I promise!! and is not the right channel as well!
yeah that one Idk how I'm managing to doubleload that.
yeah I'm just looking at all kinds of errors to see if there's anything I should be potentially worried about, since it's not unheard of that a LethalLib update breaks things but yeah I don't think it's LL's fault this time 😅
@low lichen oh one thing, do you know which mod the Pentagram item might be from?
pentagram might be from an LGU contract
okay, thanks!
uhm, do you have a link to a thread for LGU? I can't find one
Aligned with that; it's not in my centralconfig setup which means it was not supposed to occur that way
thanks!
not sure what you mean
It's not in my scrap spawn tables
so another mod decided to inject*
which, yeah, 99% sure is LGU
ah yeah that's fine, I'm just interested in why the mod has a scrap with such an absurd weight
^
I'm waiting on lordfire to publish new gamelibs packages
i see
and he's probably asleep
and I'll go sleep soon too
if you want to fix this right now by doing reflection feel free to do so and you can ping batby and hope he's online to push an update
wait, was this fixed in the recent update that claims to update to V70? I still got it
uh ask @crimson mauve
It's not LethalLib on it's own. Must be a dependent that's causing it. Will keep looking
Moonswept
or TestAccountCore maybe
and I believe it is what's breaking the monitor up front somehow, causing it to be blank
i mean i changed the csproj to v70 so what else could i have done lol
I dunno
Just made a profile of only Moonswept and dependencies and that's the issue.
I'm going to try just TestAccountCore and see if it's that
because that's a dependency so it could be in there
Yeah, ok. TestAccountCore is actually where the issue is I believe
Someone beat me to reporting it to them
Does LL have a class for all content registered with it like the lists found in LLLs PatchedContent Class?
afaik not really
it does have some internal lists somewhere maybe per thing but that's kinda it
LethalLib is not really designed... at all
I was able to get a list of enemies with Enemies.spawnableEnemies
My only issue with this now is that the modName property is just LethalLib, not the mod that added them
lethallib does store the calling assembly somewhere
didnt this mod add safeguards to prevent the weight bug from happening?
i still got it last night, i gotta see what precisely caused it
mightve been this actually
yeah any LL item is forced to be inbetween 2 very specific values
the fix wont entirely work if you have more than 4 slots
but that's only for going above the normal lethal limit
negative weight should be completely fixed
(for LL items)
it wasnt negative weight, more like after a certain point i had 80 lbs passively
yeah thats negative weight
basically the scrap has negative weight, when you pick it up it doesnt increase your weight, andf when u drop it it increases your weight
o
cuz it ends up decreasing by a negative value
it started after putting a bunch of stuff in the beltbag
maybe one of the scraps had a negative weight and it messed up the weightedbeltbag code
maybe? easiest way is to just make a mod that logs all item weights and seeing if there are any with weights below 1 (1 is 0 dont question it)
i'm looking more into it, i think it is just a weighted belt bag problem
all the stuff i picked up in that round had valid weights
at some point after picking up an item from a dead mask it just stopped reducing the weight when dropping things out of the bag
maybe they could add a patch to just reset the weight to the belt bag's default when drop all items is called
@brittle marsh i need you to accept the PR and update LL
oh actually the PR build doesn't like what i did to the csproj
well, i dont know what to do about that, lol, there is no nuget package but seems like the github actions need it
you can figure that out
fixed it actually
i've been pushing updates to LL for a while, i should probably just get the maintainer perms at some point instead of pinging hamunii everytime lol
Yeah I think you're trustworthy as a maintainer, though considering that eba is not really around anymore, maybe LCM should maintain a fork (where you are also a maintainer)?
Because rn we are relying on eba's NuGet and TS keys, both of which in theory are in danger of being leaked by whoever can make the GH actions run. The TS key is more dangerous to leak since it has no limits on what it can be used for afaik
well, i do plan to eventually hollow out LL and just replace its called to DawnLib, a more maintained library
Yeah I think it still makes sense to maintain a fork of it. Or idk actually
Because yeah it's in like life support rn, nothing new is really gonna be added to the API
But yeah just ask eba to make you a maintainer and that's one way to solve the issue
Anyways I'm gonna take about an hour or so before I can push an update
sure
@brittle marsh poke
yep I am still alive, had some stuff before I could get to it
@crimson mauve just to confirm, this version doesn't work with v73 right? I'll probably add a note about that to the readme
and v80 is still beta, right?
actually fuck it, I don't care enough since many mods probably don't specify what they support and don't
fucking Thunderstore
also btw LethalLib's repo has /lib/ directory already
but that can be fixed later if anyone cares
I'll just merge and push it, I trust that it works
it should be up anytime now
nice
hi hamunii o/
also yes, fucking thunderstore 😭
hi lordfirespeed 👋
It's quite hard to get GitHub actions to leak a secret
It's possible sure, but they'd have to have push permission to a branch which triggers an on push workflow
I am mostly referring to an account of a maintainer getting compromised one way or another, or a maintainer deciding to just leak it for some reason
but yeah it's not something I'd expect to happen, but the possibility is still there
she does that for me on netcodepatcher each time I ask
could also probably add you as a maintainer for the nuget package and you could use your own key?
ye it's quite nice, if only thunderstore had anything like that
Teams sort of
actually yeah, but it kinda still sucks
yeah it does lmao
I do wonder though if there is any way for the community to ever move off of thunderstore if/when a good alternative comes to existence. Everything kinda sucks ngl, and I did earlier mention about possibly coming up with my thunderstore but the probability of that becoming anything is quite small
If they paid I'm sure others would move
Damon's concrete had promise but I think it's been left by the wayside
would be interesting at least if a few people here attempted to make a thunderstore alternative to just make things better
the problem with making a package repository is that hosting is expensive
Yeah I do wonder if that project could be continued in a serious way
that's also probably fair. Though I guess damon's system at least would work with github as the hosting provider? (users would upload their mod packages on their own github releases). So it could probably start off that way and then later have its own hosting
torrent-based package repo when?
holy shit
ZeroNet tried torrent based websites. Guess where it went
using GitHub to serve the bigger files does help significantly but there are problems
You still have significant hosting costs reqd to provide APIs that enable dependency resolution
and
can't release artifacts on GitHub releases be edited/removed after the fact?
that's fair. The hollow knight (not silksong though) community has a solution though using GitHub https://github.com/hk-modding/modlinks so it's definitely possible to create a working system
hashing files and checking the hash matches is a way to work around that
ITS ALL IN ONE FILE?!
uh, appears so
true, removal is still a concern but I guess allowable
not sure if that's what people work against, or if it's produced by github actions
damn lol
On the one hand: idiots can't add mods to the list, yay
On the other hand, if lethal company used this system, that file would be unbelievably massive
On the order of a few gibibytes I think
would kinda be the equivalent of the package index file the API gives you
Yes
I pulled the whole thing into a local sqlite database at one point
it was chonky and took ages
notepad shudders to think about opening that file
btw this would be the holy grail if mythic would do his append only log thing
except that is separated into about 1.2-1.7 MB zips, which are about 14 mb of json each
cause then you could build the database from scratch once and then keep it up to date by applying the operations from the logs since you last updated
doesn't it give you one big file?
uh there are probably multiple APIs, but this one API gives you a list of zip files which all have a certain sized json file so it's separated into many, probably so you don't need one massive file
huh I'm not sure that existed when I last dealt with thunderstore api
so something like LC has 24 of those files, R.E.P.O. has 3, and silksong has 1
the one I'm thinking of is /c/whatevs/api/v1/package/
gives something like this
okay discord doesn't render that file for whatever reason, probably file extension, but it's just json
I like how it's not documented on their API docs lol
oh yeah I looked at how gale uses it to do it properly lol
i'm hearing abt Modrinth supporting other games in the future, and i've only heard good things abt them
mayhaps?
from my cursory looks at the site they have stuff like version control and dependencies a lot better than TS
modrinth's official modmanager kinda sucks ngl but otherwise I'm assuming it's good
it has quite terrible UX, I wrote about it a bit, I'll try to find it
as a mod repository modrinth is very good though
and they have funding (somewhat)
making a mod manager to use their repository is fairly easy and does not require funding
the main problem they would run into is malware scanning
#1387178791444549633 message
Also, Thunderstore is really great with how it handles modpacks, and on modrinth, it's just a terrible experience trying to use modpacks because you can't simply add a modpack to an existing profile. Also modrinth makes viewing what mods a modpack has so hard that you have to google it or something to figure it out. I just resorted to installing a modpack to see what it contained.
This is a client problem and not a repository problem
ye, it was about the official mod manager
It's a problem that most Minecraft mod managers has
Including prism, the best one
The problem with treating a modpack as a dependency is that you can't remove things from it very easily
Most people prefer having that flexibility
I'd say that is also a client problem, as long as there is some way to detect if a package is a modpack (it's a tag in TS's case)
how would you even model it?
but yeah the reason I pointed this out is that it does give me some worry about their competency, as before I had experienced the mod manger, I thought it (modrinth as a whole) was the greatest thing ever
what is the significant difference between a modpack and a mod?
that is not a rhetorical question btw
a modpack consists of a bunch of files that get unpacked into the Minecraft directory plus a bunch of dependencies (mods, resource packs, etc.)
Treating modpacks as dependencies of a game instance raises some problems
isn't that what a mod is too though?
oh so minecraft has it's own strict definition of what a mod is?
All the resources it needs are bundled inside
It's a de facto standard
okay wait I'm not quite understanding. Can't a modpack be modeled the same exact way as a mod?
No
just let me type for a minute
modpacks in MC are better thought of as templates for game instances
if you try to treat them as dependencies instead of templates you run into really hard to solve problems
like what happens if they both contribute the same file? how do you try to merge it?
and what if a user wants to install a modpack and then remove a mod which that modpack includes from their game instance? (this is a very common usecase)
they shouldn't be able to contribute the same file, like how Thunderstore mods can't (well I guess though that BepInEx/config/ is an exception, in which case idk what happens)
this should probably be considered a feature of a modmanager. Being able to disable mods (or "deny" from being installed) would solve this, which I believe gale can do
and if we want, we could only allow that feature if a dependant package is tagged as a modpack
so from what little I understand, I'd assume that minecraft modpacks are modeled in an inherently problematic way
because we have none of those problems on thunderstore, right?
and if there is a conflict, that's up to the APIs (which parse the files) to decide how they are resolved
in thunderstore a modpack can only be a collection of mods
we absolutely do
configuration files
because otherwise it's a mod, right?
you can't install two modpacks that contribute different versions of the config files for a particular mod
No, because there's no 'shared' place that a mod/modpack can put files
All files associated with a thunderstore package are installed in a package-specific place
This is not the case with minecraft modpacks
Except config files
that is very true actually, and the exception I mentioned above (which I didn't consider just now)
Minecraft modpacks commonly also edit the main menu UI / splash art
which is another thing you would certainly get conflicting behaviour/files with
this would be up to the API that modfies the splash art to resolve, not a limitation inherent to modpacks
yes but it's almost certainly controlled by 'place your splash art image at XYZ location'
and if it's not that, it's a config file which contains the splash art image path
and that's the same problem as we just mentioned
technically a conflict resolver for config files could be made (in thunderstore's case) which would at least allow a user to select for example which modpack's splash art they want
the bottom line is that there is no benefit to treating modpacks as fully qualified dependencies
It is not a feature that anyone would use
No user is going to use such a thing
And on Thunderstore, it would kinda just work because other than that, everything needs to implement support for resolving conflicts (aka you shouldn't design an API which don't take multiple inputs into account)
Someone who creates modpacks would do the merge resolution manually and submit a new modpack
that's not true though
basically every mod in christendom uses the default bepinex config
so how would you just install two modpacks as a user? With the Thunderstore way + potential conflict resolver in a mod manager, it's almost expected to work, except if two or more different config files depend on each other and the user mixes those with alternating versions per modpack
you don't, there is no scenario where you want to do that
you can make a new modpack which includes elements/dependencies from both
but that is something that someone experienced must do manually and carefully, especially merging of the config files
could also be said about installing multiple different mods, there will likely be conflicts there already
But yeah this is actually fair
In Minecraft at least, it is quite unlikely
At the filesystem level it is (basically) impossible
At the registry level, yes, there can be conflicts, but the mod loader tells you about these before the game loads
there can only be conflicts in the filesystem once the game has been launched once
before the game is launched, two mods will only conflict in the filesystem if their .jar has the exact same filename
so anyway: I don't think fully-fledged modpacks should be treated as fully-qualified dependencies
I do think they shouldn't be treated as templates
but something kind of in between the two
Ugh, it's just such a nightmare
The modifying of config files is actually a very good point, and as of right now, I'm unsure what to think about it
(from a thunderstore perpective)
I think there should be a distinction between a collection of mods and a modpack
Actually: On Thunderstore, a mod can also ship config files (they shouldn't if they generate them themselves). And honestly, in such a case, a conflict resolver would already be useful
so in that sense, there isn't much difference between a mod and a modpack on TS
it would be useful to you or me and unusable by 99.9% of the userbase
a conflict resolver, i mean
but yeah it is necessary to have one
it doesn't need to be complicated. If it worked like:
- you update a mod
- the mod manager asks if you want to keep the old file or the new file
- success
There could be a more advanced option in 2 in addition to the whole file which would be great, but the system doesn't need to be complicated
sure, yeah
the relationship between 'game instance' and 'mods installed' is one-to-many
though, then you have modified a mod... but Thunderstore mod mangers allow this per package version
i think the relationship between 'game instance' and 'modpack used as template' should be one-to-one
(it is presently also one-to-many, on thunderstore)
on Modrinth/Prism it is one-to-one but the launcher forgets what template you used
so updating your customised instance when the modpack gets updated is often not trivial
I believe it actually should be this way. But the mod manager should be able to tell which would conflict with your already installed mod(pack)s
i mean
there are vanishingly few cases where someone would have more than 1 modpack which provides config files installed
a modpack is meant to be a curated/highly customised experience which consists of a bunch of mods and configuration which ties them all together
it doesn't make sense to install more than one of those
Wait, what happens when I install a modpack on modrinth and do modifications on it, and then the modpack updates?
Like I said it's not trivial
I don't think there's an 'update modpack' button
mm I see
The most reliable thing to do is make a new game instance, do your modifications again, copy across files which contain local settings
And if this was thunderstore, we would only need a conflict resolver for config files. Though idk if it's actually much different for modrinth
oh?
No lockfiles!
So the best way to update a game instance is exactly the same as I described for Minecraft
This means transitive dependencies which are removed from the modpack get left behind when you update.
wait so what would the lockfiles do in this case?
get left behind, as in, stay in your mod profile?
Without a lockfile:
install foo which depends on bar, baz
now your dependencies look like: foo, bar, baz
foo updates and only depends on bar
now your dependencies still look like foo, bar, baz because there is no distinction between top-level dependencies and transitive, resolved dependencies
With a lockfile:
install foo which depends on bar, baz
now your dependencies look like: foo
and your lockfile looks like: foo, bar, baz
Yes
I've solved this in my cli mod manager which supports TS because what I have is I guess somewhat of a lockfile? It tracks which packages you added explicitly and which are purely transitive dependencies
you should look at the format of e.g. pnpm-lock.yaml, package-lock.json, uv.lock (lockfiles for some well known/engineered package managers)
I guess my lockfile is basically integrated into the mod profile data
so I could separate it
they should be kept seperate
ye I've seen those, though never looked too deep into how exactly they are engineered to work
The idea is that into your package.json or analogous file goes your top-level dependency spec
i.e. version ranges are allowed
oh right yeah that actually makes complete sense, and is something I need to implement
then you run a command like blabla resolve to resolve specific package versions which satisfy the dependency spec (or fail if unresolvable)
the resolved package set and their versions go into the lockfile
then finally blabla sync to install based on the existing lockfile
yep!
so if you want to 'bump' dependencies you can just rerun blabla resolve + blabla sync again to update your dependencies while adhering to the version ranges you already defined in your main dependency spec
in my cli the adding of mods actually only updates the profile data and I a update command to update and actually install the packages. It's mostly temporary for now as I just implemented it, but yeah
i am using the uv names for these commands, i recommend sticking to them because they do make a lot of sense
actually uv uses lock instead of resolve, but either works well
Commands:
auth Manage authentication
run Run a command or script
init Create a new project
add Add dependencies to the project
remove Remove dependencies from the project
version Read or update the project's version
sync Update the project's environment
lock Update the project's lockfile
export Export the project's lockfile to an alternate format
tree Display the project's dependency tree
format Format Python code in the project
tool Run and install commands provided by Python packages
python Manage Python versions and installations
pip Manage Python packages with a pip-compatible interface
venv Create a virtual environment
build Build Python packages into source distributions and wheels
publish Upload distributions to an index
cache Manage uv's cache
self Manage the uv executable
help Display documentation for a command
Note add does automatically run lock and sync, at least somewhat
I guess though that for a cli mod manager, it doesn't need to- well actually, why not. It should already at the very least install mods on trying to launch the game, though idk if that is a good idea or not to delay installing mods, but it does make building a mod profile a bit faster
thanks a lot for the info btw!
that's ok :)
Is the new lethalLib version (1.2.0) compatible with v73 too or only V80? The changelog doesn't say anything about that
Only v80
Alright, thank you
How do I go about registering a map hazard in the v80 version? I'm attempting to port the Missile Turrets mod but it registers them via "SpawnableMapObject", and in practice none of them are spawning on any moon, so I presume that's outdated.
I think you’d have to use another lib
And I presume LLL doesn't have a way to register indoor map hazards atp?
i dont see anything in LLL's github that mentions map objects
