#General & Development Help
1 messages · Page 6 of 1
and starbuncles AI will need a bit of rework since i added side sentivity to the wand
oh, that one too exists right. Don't know how breaking that is
[ The wand methods now can carry the side of the block clicked, but it's not currently used by their AI ]
Damage Types and the boolean return on attemptDamage thing have been also added
Ars Oscura is so basic right now it shouldnt matter much but I wanna move to 1.20 asap because porting is pain (Almost gave up on blood magic this time around)
I want to move to 1.20 so that I can play with context manipulation
I don't remember the scope of your mod but you can probably start porting, at least for testing
Worst case, real breaking changes all together when it needs to happen
But maybe wait for release until those two PRs are merged
are 1.19 versions of Ars Nouveau still maintained? if not, then i have a rather bizarre proposition that i may need some advice on
i'm currently having another go at this old add-on concept i wanted to try for integration between Ars Nouveau and AE2, and in order to implement some functionality to do with storing and accessing Source on an ME network i would need to ideally make use of capabilities which Ars doesn't actually natively provide
#1041655048574349342 message
would it somehow be possible to create these capabilities myself and somehow add support to Ars for these caps via mixins? i grant you that this sounds fucking ridiculous already
Why do you need caps ?
Bailey's usually gracious with PRs as well, if it doesn't break existing functionalities
AE2 on Forge makes use of them heavily for import/export/storage strategies of different "key types" such as items and fluids
and as far as i am able to tell i probably wouldn't even be able to implement something like a Source P2P Tunnel without some capability in place
random question but does botania mana also use caps ?
it does
that's what Applied Botanics makes use of for its own integration such as mana P2P tunnels allowing mana transfer with sparks, among other things
another question, since caps are just data binding, why cant you just attach it without mixin ?
(as you can see, I have not played with caps much :P )
You can attach caps via event
i imagine i would need to account for other things in Ars being able to recognise the caps i'm attaching
I attach fluid caps to containment jars for example in StarbuncleMania
You would basically make the cap rely on the interface methods
like let's say i have a Source P2P tunnel and i want to be able to have sourcelinks fire source into the P2P tunnel which would then output to another tunnel next to a jar
or rather, a jar sending source through a P2P tunnel that then goes to an enchanting apparatus or some ritual setup
But if the issue is "I want my block to be recognized by Ars stuff" then it requires stuff upstream I think
yeah, that's what i'm asking for
Or a mixin to source manager or what's called?
You can also attach interfaces via mixins, on the P2P
lol I have seen that before
F I got confused between sourcelink and spellturrent
Anyway for the main question, 1.19 is still maintained for backports of fixes and co.
But breaking changes to existing stuff should only be made to 1.20
i see
@ashen grail does an energy acceptor that runs on source instead of RF/FE fit your addon ? Would be cool to have a full magic ae setup
also if possible wireless ae using source relay like system would also be pretty amazing :P
ae2 is fun
i would definitely need to play a lot further with Ars myself to explore those possibilities, since i'll concede i've so far only used things like spellbooks as a utility for moving around and the sort
As for source to RF there's already enigmatic, but direct conversion to AE energy is different
my main interest first was to get source working as a key type that AE could manipulate like it already does for Mekanism chemicals and Botania mana via their respective add-ons
Oh goodness I didn't know I needed this but now I really really want it
by the way, why is it that i'm simply unable to run my dev env after switching to 1.20?
i expect that Ars would have MixinExtras bundled within itself already when adding it as a dependency but pretty much all of my runs instantly crash saying they can't find the MixinExtras bootstrapper, even when trying to set up MixinExtras as an extra dep
GeckoLib also seems to be missing from this version pulled off of the Maven
[20:52:21] [main/ERROR] [ne.mi.fm.lo.ModSorter/LOADING]: Missing or unsupported mandatory dependencies:
Mod ID: 'geckolib', Requested by: 'ars_nouveau', Expected range: '[4.2.1,)', Actual version: '[MISSING]'
Are you sure you're using the latest on maven, right?
i just now added geckolib so that one's fine
but i need to try again with MixinExtras, i was just using the latest stable release of 0.1.1
Shadowed jars aren’t in the maven file so you have to add them as deps as well
okay yeah, there we go
are Source Jars still the only thing that can hold source or are there any plans for a general "source item" API feature?
that's fine, i just needed to know what to refer to when re-writing the container item strategy for AE2
now i will concede i'm not the most well-versed in Forge's capability system so i will need some guidance as to how to proceed further here if necessary
i have a local copy of Ars currently open and i've overridden the following two methods in the AbstractSourceMachine class in order to attach the new capability for ISourceTile, where sourceHandler = LazyOptional.of(() -> this):
@Override
public @NotNull <T> LazyOptional<T> getCapability(@NotNull Capability<T> cap, @Nullable Direction side) {
return CapabilityRegistry.SOURCE_TILE.orEmpty(cap, sourceHandler);
}
@Override
public void invalidateCaps() {
super.invalidateCaps();
sourceHandler.invalidate();
}
now just before this, AbstractSourceMachine has a few methods which take ISourceTile arguments, so i imagine these should somehow be adapted to check if this SOURCE_TILE capability is actually present before attempting to do anything involving source
actually, was i instead meant to be looking at the SourceUtil and SourceManager classes in this case?
is my current assessment correct at all, and if so how might i be able to adapt them easily?
does anyone have some sort of existing test setup/world with which i could make sure i haven't broken anything by integrating the new capability within SourceUtil in place of the hardcoded instanceof SourceJarTile checks?
this might not even be necessary upstream actually!
i just tried creating the capability directly within my add-on and attaching it to Ars's block entities via the relevant event instead, and everything still seems to work exactly the same so far!
Question: if another addon adds a block that stores source how would they add compat for your addon?
as long as it implements ISourceTile it shouldn't matter much since i'm just attaching the cap to all instances of ISourceTile
as you can see here #1041655048574349342 message this already works well enough for storage and IO of source
also SourceUtil literally does direct instanceof checks against only SourceJarTile so in the end i'm not sure how important it would even be for the source system to internally make use of the capability over that
(i already tried replacing those checks with retrieving the cap from any such BEs and that briefly ended up breaking sourcelinks sending source into jars altogether)
here's the relevant commit for Ars Énergistique with the cap and everything if you wanna see how it works so far
https://github.com/62832/ArsEnergistique/commit/a265a2fb1256d17d1b6d2292e1fb7be4a20450ca
Oh for real? Awesome!
i'm assuming that's not the message you wanted to reply to? 😄
I tried to reply to the first comment, no idea what happened lol 😄
lol all g
same thing is currently happening when i try to use a mixin to do the same thing again, it seems as though sourcelinks simply refuse to send source out to nearby jars once that is in place
my current guess would be that this might be because i'm attaching the relevant cap to any and all instances of ISourceTile, which just so happens to include sourcelinks themselves
hence this could simply be sourcelinks being stuck trying to send out source to themselves over and over again?
my assumption seems to have been mostly correct given that right now i'm able to attach a storage bus directly to the now maxed-out sourcelink and see an extra 5,000 source present within the ME network
with this in mind, it might be worth considering some sort of extra separation in the current API between block entities capable of holding source and block entities capable of receiving source, then simply having the source jar be an implementation of both of these at once (this suggestion might not be entirely correct)
i should probably specify that the end goal of this currently is to have a working P2P tunnel for source with which to be able to, among other things, distribute source generated by sourcelinks to any number of points where a source jar might be nearby
also, if i'm somehow shitting this channel up a bit too much with my monologues about this then please let me know
Can't you simply exclude the Sourcelink tile from the attach cap event?
i suppose that would be an option, yes
Or attach a send-only
would there be any other such block entities that i'd need to exclude from the cap attachment?
Iirc the only ones that can produce source are the Sourcelinks
Which should all share the parent class
Just make sure the relays work correctly?
so something like this should be sufficient, then?
It should
i'm afraid i haven't really played around with source relays at all so i wouldn't entirely know what this should look like
though i should guess it would work for a sourcelink to send source to a relay, which then sends source out to a jar?
Basic and Splitter Relays only send to linked source stuff (with wand)
Depositor and Collectors pull or push from nearby
oh they override the relevant methods for sending source out, don't they
so i should in theory be good already?
I have no idea how you implemented it and I'm too tired to look at it rn. So I hope so
i'll give it a try
yeah i don't think that's gonna cut it unfortunately, so i might just have to shelve this for tonight
though i'd be very grateful for any insight that anyone else might have tomorrow on how to accomplish this part of the add-on in the end
would it be helpful for me to push my current attempt at the P2P tunnel to the add-on repo for anyone else to have a potential look at?
could someone clarify what the significance of the ISourceTile::getTransferRate method is and how i should be overriding it?
I notice there's no 3.17.10 on maven... was 3.17.9.554 promoted or something?
i've got an attempt here at implementing a proper P2P tunnel for source but it still seems to be stuck currently doing sweet fuck-all. would anyone else here happen to be experienced enough to tell me where i might have gone wrong with it?
https://github.com/62832/ArsEnergistique/commit/0ac0fc8b72ea6837b204dcc0ae5d44ee15528ef9#diff-96cb800f200d023be324bfd978345f568dfe8e6f2985c737a0db1713601972e4
test setup currently looks like this with the assumption that the sourcelink would be able to fire into the input tunnel next to it, followed by the output tunnel further away firing source into the jar near it
How much source is given/taken at each transfer?
maybe i'm confused on the specifics of what a transfer is supposed to look like then
as in, what sort of blocks are even involved in a transfer that aren't, say, relays
I'm kinda interested in taking a look if you don't figure it out soon
Unfortunately I'm kinda busy for the next couple days
that's quite alright
most likely what i might have a go at next instead of the P2P tunnel is a spell focus and Glyph of Access ME Network
What would the focus do?
would be the thing to actually link to the ME network similarly to a wireless terminal
unless i'm misunderstanding what a spell focus is/does 😅
A spell focus usually changes how spells act when you cast them or buffs them in some way
Not sure what yours would do unless you mean using source as mana in which case baaaad idea
nonono
so you know how in order to access an ME network through a wireless terminal you first need to link the terminal via a wireless access point (formerly a security terminal)?
for the spell to work for a given network you'd in theory be using a spell focus linked to the network you want to access
is there any way of retrieving the Hand of the player holding a spell book and casting a spell?
I don't think so
You could compare the item in each hand to the casting item in the context though
trying to roughly cobble together an "Access ME Network" spell and i'm getting hit with the following so far
oh, there's a getUsedItemHand method
Wait except that's for getting the menu right
Oh nice
are we not going to talk about that theme?
it's just the logo for an old-ish cancelled TV show i like
No we are not
i see
well shit
java.lang.IllegalArgumentException: Can only use this class with subclasses of WirelessTerminalItem
i don't think this spell will be possible in the end
I'm sure it is with enough hackyness determination
I can give it a shot this weekend because it also sounds cool
be my guest lol
how do you plan to bind the glyphs to the network?
Can't you still make it a subclass of WirelessTerminal?
^ the focus
the spell book itself? probably not
i was thinking it would be possible to just link the spell book directly using AE2's IGridLinkableHandler
cutting out the middleman and everything
Hmm
dunno, it'll take a lot of thought in general
But what would you do about non-spellbook casting items?
I mean if you can access any network wirelessly, how do you specify which network to connect to?
There's also the option of retrieving the casting item from spellcontext then checking it against items in both hands
But well, curio casting things exists
I thought the issue is the item in the hand isn't the terminal anyway
I'd love to try and help but today and tomorrow I'm busy, and then Thursday and Friday I'm working on my Ars PR
no rush at all man, seriously
Idk what forHand should return
if you figure out a technique, please let me know as well. I will try to use the same technique for Occultism storage for consistency
no guarantees that the technique used here would be applicable to Occultism given the difference in APIs
accessing network is a non issue. just need a way to bind it to correct network
an AE2 MenuLocator if that's something you care enough to look into
some sort of network marker curio or something
Why not make it a new curio slot? Network focus?
Like a focus but without wasting the focus slot
Ez fix
Curios lets you do it easily
true
this would be the place for an IGridLinkableHandler but for now i'm quite tired and i tried to cobble it together one step at a time first seeing if it was possible to even call the relevant menu-opening methods
sounds good enough for me :)
I don't get to work on my addon till the weekend. hopefully would have finished port by then
Vot der dumboozle? How did this end up in glyph_amplify.toml? I didn't put it there.
#Range: > 1
per_spell_limit = 2147483647```
That’s provided by the base mod config
Oh wait... I'm trying to figure out why the amp limit in harm isn't applying.
Or is there no longer a validator limit?
In glyph_harm.toml:
#Example entry: "glyph_amplify=5"
augment_limits = []```
I'm trying to figure out if my configs are out of whack somehow or what.
I think so - nuking the common config directory seems to have restored the limit.
Upgrading Ars within a single Minecraft installation can lead to weirdness, I guess.
It's entirely possible the versioning scheme changed.
Is anyone else having trouble with uploads to curseforge?
only method ive found to nail down a gradle error like that is to remove dependencies one by one until gradle builds, then you know which dependency is not resolving
unless you really are missing patchouli, but ive had it show the wrong dep many times when it was some other one
yeah gradle is weird like that
aaaaaa gradle is soo stupid
fixed this issue and got a build success. updated geckolib and now it stopped working again
bruh the geckolib maven is dead
Where did all the discount methods move to in 1.20 ?
addDiscount() , getNoDiscountCost() and getFinalCostAndReset()
They're an event
can someone confirm that this is the new versioning format?
^^
More likely my fault that an extra .0 popped into existence
Not Bailey intentional
um
I can't get the ars dependency on gradle to work, I'm trying to port my mod to 1.19
Caused by: org.gradle.internal.resolve.ModuleVersionResolveException: Could not resolve com.hollingsworth.ars_nouveau:ars_nouveau-1.19.2:3.17.2.511.
what's the maven I'm supposed to get it from?
hmm yea I have that so it must be another issue
what do I do then? take out all dependencies and put them in 1 at a time until I find the actual error?
That’s what I did heh
Also if you have prog maven delete it
Progml
Er something like that
ok
well, got to the point where the game boots
how do discounts work on 1.19.2?
how do I add a discount to a spell that's going to be cast?
like seriously'
discounts applied to the spell object don't actually apply on cast
and it looks like an Ars bug but I'm not sure
and it's driving me mad
😭
That might work too
@zealous zenith can I please have the source files for the spellbook textures ? I would like to create custom inlay/onlay textures while retaining the original base colors
They are on GitHub
not the final images but source files with layers etc (if such files exist)
It's one texture with all the layers
One file for each color
Then the model (in .geo) hides the layers based on the tier
You can see it in action with my netherite inlays
not like that 😅
I want to create custom designed books but want to keep the colors like the original (replace the gold pattern with something else to make it different)
so if I had the original project files with layers etc, it would be a great help
Open the .geo model with the texture and you'll see
I am aware of the texture and I already use it :)
I am talking about photoshop files or something
So what you actually want (probably) is the blockbench file?
Not even sure there are Photoshop files
The texture was most likely made with the model editor
Yep, @rugged urchin
If actually split files exists, it's worth pinging
But don't expect a fast answer due to timezones
Yeah no issues :)
There aren't any design files for just the spell book textures. There isn't anything really complicated going on with the textures. It's just the 16 exported color variants.
If you download Blockbench and import the json and textures, you should be able to recreate the BB model file I use.
did you directly paint the inlay on the top of the texture or do you have a photoshop/project files with layers and such ?
how can I force configs to be regenerated?
afaik you can’t unless you change the key
...
would deleting the files force them to be regenerated? lol
could always do that on startup
I want one of those "regenerate configs" flags in my config
so I can have multiple config presets
(and possibly that affect not just the addon but Ars too. )
Why do you need to reset something
well, almost all the ars balancing is based on configs lol
Not very user friendly to overwrite their wishes; just make a new key if it’s something totally different
I want built in presets
By inlay do you mean the gold trim? It's not a layer because the same gold trim is on every single color of book
well, yea, the user has to trigger it manually
the idea was to nuke the ars configs with new presets
if they trigger it
cause the alternative is to bundle a configs zip file with the jar
which, I mean, works
but it just feels so jank tbh
I hoped it was a layer since I want to change the pattern and I need to keep to book texture intact
no worries
Need to make 16 different copies sadly
Fortunately Tier 1 books dont have inlays so I dont need to make the base textures/gradients myself (I had forgotten about tier 1 lol)
Still gonna be alot of work though
Make one, then copy paste the mask?
Yep thats the plan
@radiant depot you once said something about attaching a capablility to containment jar. Can know how to do that ?
It should be in Starbuncle Mania sourcecode
okay got it! Thanks for the help!
you could have also had a look at Ars Énergistique to see how we currently attach our own cap to source jars and the like
What, the cap?
Once whatever cap is attached, you can use getCapability to retrieve it
It's basically data saved to nbt
In the tank example, I'm using Forge premade capability and handler
for fluid cap, you created a fluid tank, what do you use for items ?
FluidHandlerItemstack or similar
For fluids and energy there are few templates
And the capability is different for items
With the fluid jar I made a subclass of it to redirect the cap methods to the tileEntityData inside the item
But that's more like a little hack to simplify
I see
I am attaching a capability for items so that Occultism spirits can interact with it
Can I do it so that the capability is only exposed for special types of mobs inside ?
would something like this work ?
so it wont expose the cap if there isnt a spiritEntity
quick question: is the Amethyst Golem supposed to keep firing the particles it does when converting amethyst to budding amethyst even when the block in that place is already a budding block?
i assume that's meant to be for accelerating the growth of a cluster, actually
is there a way to override getCapability of ContainmentJars only for specific behaviours/mobs ?
I am assuming there isnt. Any other way to achieve this maybe?
No, you have no context when it's called
the thing is, the spirits already have an exposed item cap. I wanted to just pass this on to the Jar in some way if possible
nearby ? no I want connect the cap of a spirit stored inside the jar to the jar itself
Can you modifiy the ritual of containment to check for spirits and attach the cap to the jar then?
Or maybe add an API method for registerCapabilities when a jar is created, and then implement that for the spirit entities custom mob jar behaviour
Ah, you mean the spirit inside it?
I was thinking to transporters
You should be able to access the tile fields in the cap provider
You know, for the "only starbies and co can extract" you talked about earlier
Shouldn't be hard if you just need to redirect
for that I will have to create and attach a new capability not the same one as spirit
I think this might be the way. Will add few methods to JarBehaviour class
I'll use my code as quick example
ICapabilityProvider provider = new ICapabilityProvider() {
@Override
public <T> LazyOptional<T> getCapability(Capability<T> cap, @Nullable Direction direction) {
if (cap == ForgeCapabilities.ITEM_HANDLER && tile.entity instanceof Spirit) {
redirect to spirit#getCapability;
}
return LazyOptional.empty();
}
};
event.addCapability(prefix("extra_item_handler"), provider);
Wouldn't this work?
oh
I'm not at pc so I can't neither check nor write actual code
yeah that should work lol
But you should get the idea
you could simplify that a bit by going
if (entity instanceof Spirit spirit) {
return ForgeCapabilities.ITEM_HANDLER.orEmpty(cap, spirit.getCapability(cap, direction);
}
well actually it would be redundant since you still need to return empty for other entities
are starbucles bugged on 1.20 ?
I cant seem to set a chest as input for latest version
ok so dumb question but
why are there 2 fluid capabilities yet only 1 item or energy capability? in forge?
probably since one is item and one is normal
but, like, items can have capabilities
and they use the same item inventory and energy capabilities
and yet this implies items and blocks might use different fluid capabilities?
oh yea it's because buckets can be emptied and become a different item
so the item fluid handler extends the fluid handler so it can give it an itemstack
it returns the new stack
When I use .length() on spell.spellResolver.spellContext.getSpell().serialize()
it outputs 17? altough the array is clearly 2 as seen
the first debug message is the actuall array
and the second is the length
It seems to be counting the Character length?
okay im stupid lol
serialize gives a string
Okay so ignoring my blunder from just now
how can I give a spell a lot of pierce
Like a lot
im using this to clear the spells effects
((EntityProjectileSpell) entity).spellResolver.spellContext.withSpell(Spell.EMPTY);
I assume inside .withSpell I can do something that would give it the desired spell?
Ya just set the new spell in that
Though you may need a new resolver if you change the length of it, like how linger and burst work
sorry, but how is that done?
Heres me failing
((EntityProjectileSpell) entity).spellResolver.spellContext.withSpell(Spell.deserialize("pierce"));
I guess I should specify
I am trying to give the spells im targetting basically no clip
Look at the spell object and it’s just a list of spell parts
Make a new spell with the contents of the original one, modified to what you are trying to achieve
Deserialize is for nbt
aha
Right so,inorder for me to construct a spell. I have to pass in a AbstractSpellPart right?
If so, i am terribly failing at that
Since I am terribly failing at constructing AbstractSpellPart
Well, it's abstract lol
As a general rule each glyph you wanna add should extend the correct glyph type class
So effects should extend AbstractEffect and override On resolve block and on resolve entity
Then construct an instance of that and register it
See how all the effects in ars have a static instance?
The ars API class has a register method on 1.19 and I think there's a registry util in 1.20 but IDK for sure
I think its probably my java knowledge crippling me
imma go learn some more
as Im definetly going into the wrong direction lol. im nott trying to make a glyph or anything. just want to add pierce to a existing spell entity
Oh
Then you get the pierce instance and add it to the spell which is a list
I think
Well, spell wraps a list
I assume thats what ive been trying to do?
((EntityProjectileSpell) entity).spellResolver.spellContext.withSpell(spll.add(pierce,100));
spll and AbstractSpellParts are just placeholders. where spll is just a Spell spll = new Spell()
And pierce is me trying to do the AbstractSpellPart thing
but me doing the AbstractSpellPart part is clearly BS
how do I get the pierce instance?
AugmentPierce.INSTANCE
Or do you mean as part of a spell?
That should be fine I think
ye
what should be fine?
What's pierce here?
You should be able to use AugmentPierce.INSTANCE
Like I said earlier all the glyphs in ars have a static instance you can use
Can you summarise what your actual goal with this code is?
Is this for an apotheosis-level op spell prism?
And BTW if you want the projectile to go further you need to increase the pierce property if the spell projectile not modify the spell
https://www.youtube.com/watch?v=EpS3nPNzGgk
Im reworking this block, and one of the issues was, that the orbiting spells are vulnerable to being destroyed by surrounding blocks. So I wanted to give them noclip. and A comical amount of pierce seems to do the job
Create Arcane Engineering is a sequel pack to Above and Beyond, currently being developed for 1.18 by Me and PigTurtle#2891.
In this video, the Source Time Crystal is shown, it requires a combination of set spells that make it transform into something otherworldy, yet to be seen...
Come join us on our development journey!
https://discord.gg/h4...
could i ask one of the admins to change the title of my thread for Ars Énergistique to remove the [WIP] from the title now that it's been approved for release on CurseForge?
#1041655048574349342 message
I think you can do that with the edit post option lol, can't you?
oooh
uhm
Lol
i've tried, i seem to not have perms for it somehow
can you do it now?
((EntityProjectileSpell) entity).spellResolver.spellContext.getSpell().add(AugmentPierce.INSTANCE,100);
So i guess this is complete bs im doing here
assuming I just want to change the pierce property
pierce only affects certain effects, so you would need to append it to the proper one
If you use the getSpell().recipe.add(spellpart, index) the index specifies where the spellpart will be placed, the rest of the spell will shift to the right
But that doesn't help once the spell is in the air I thought
right
okay I think its almost figured out
[pierce, pierce, pierce, pierce, pierce, pierce, pierce, pierce, pierce, pierce, pierce, pierce, pierce, pierce, pierce, pierce, pierce, pierce, pierce, pierce, pie...
is the spell right now lol
I just to add projectile into the first entry it seems
Right,but that needs AbstractSpellPart again
does anyone know what id have to do to get the projectile instance?
Oh, for that you just access to the projectile entity's field for piercesLeft
I have an example in my piercing lens
Right
I solved my problem
by just changing the spell NBT
lol
and completely scrapping all of that jank I did before
Thanks for trying to help me
Create Arcane Engineering is a 1.18 Innovation focussed Expert Modpack.
https://www.curseforge.com/minecraft/modpacks/create-arcane-engineering
right here this is lol
can I post sneak peeks in #addon-announcements ?
There's #addon-showcase for that
I am blind :/
is the event firing
pretty sure you are missing the mod bus specifider
@Mod.EventBusSubscriber(value = Dist.CLIENT, modid = ArsNouveau.MODID, bus = Mod.EventBusSubscriber.Bus.MOD)
Not sure how you do it without the annotation
FMLJavaModLoadingContext.get().getModEventBus().register(ClientEventHandler.class);
Got it working! :)
I am assuming I will have to make recipes for Dyeing myself ?
I will do that after I make new textures
Just make a recipe of each piece with the dye recipe type (the Ars one)
yeah thats pretty straightforward
is it possible to export modules as separate jars/mods or should I just make separate mod repos ?
If you know gradle enough, maybe?
Mekanism uses the same repo for main mod and its modules
I'd just say use different repos, but idk what you actually mean for modules
I am considering whether to break down my addon into separate mods so that players can pick and choose mods and I get a better dev experience
Hey so I have decided to break down my addon into 3 mods (as I said in #off-topic ). can you please update the links in #addon-index ?
(I wont be spamming #addon-announcements . Will just drop a message when other 2 are done)
for now Ars Ocultas is Occutlism integration. Both 1.19.2 and 1.20.1 are supported
Blood Magic addon will release when the BM releases on 1.20 directly
um @radiant depot ? (not in a hurry, just need a confirmation lol )
Write an actual description so I can just copy paste?
Not sure about the plans otherwise
hm okay. How about I will just give you a big message with everything later on then ? Instead of updating it twice, you do it just once with the whole message ? sounds good ?
I did a little update before, to add Occult
But it is better for you to write your own presentation
Even if the char limit is kinda annoying to squish more mods in one
I could think about making an addendum message just for you, like the other devs that came before
@zealous zenith how did you sync all versions of Ars Nouveau from Curseforge to Modrinth ?
He got special help from a modrinth developer
I see
Did it happen? It was waiting on code changes lol
Ars Creo looks like its done
Code changes?
Ye their tool can’t update existing projects it has to create a brand new one
So ars is stuck since I made it and published it not realizing
Delete and redo is not an option?
Would break any existing modpacks that use Ars I think
crap, you're probably right
that one version of ars nouveau already has 2k downloads
Forgive me if this is a bad question/doesn't belong, but I'm playing in a server with a bunch of mods with only base ars and ars creo (Create compatibility I think which I don't tinker with create anyways) are there any additional ars mods that work with 1.20?
Was told Elemental couldn't work because it was 1.19
There's pins of most addons in #1123778156386590770 , but they aren't officially released yet because they're still in testing
Ah okay I'll check it out, thanks!
is there an easy way to sync data on a ritual from server to client?
do i need some kind of permission to start making an addon for this mod? Or is it just grab the example repo and make it?
just grab the example repo and make it
that said it's considered good manners to check out the other threads in #1019655289873641555 and make sure you aren't copying somethign someone else already made
sure, ty 🙂
I want to make a Builder's AOE augment, which should only apply to Effects that i consider to be used for building. Is there a way to set within the augment which Effects it can be used on? (or is it only the other way around, where i can only set within the effect which augments are compatible with it?)
Other way around
Which means iterate over said effects, then add your custom augment to their "compatible augments list"
where (which file, in which method) should i add the augment to the compatible effects? i'm already adding to the effects that i created using the getCompatibleAugments(), but i want to add the augment to already existing effects like mageblock
@zealous zenith you should talk to Prospector from Modrinth if possible. They just moved all blood magic versions over to Modrinth on request
They had to delete old project and recreate one but it was pretty fast and automatic
hey, i'm working on basically the equivalent of the ars wiki for hex casting's patchi book, and someone suggested having it be possible to see addon content on the main book page instead of having to look at each addon's web book individually. so - how does the ars wiki fetch addon data?
(i did look around for the repo with the ars wiki code and couldn't find it, though i may just be blind)
@shadow helm
It fetches from git links afaik
I've got a Svelte Store (think Redux Store, or RX-JS observable) that contains the addons to be loaded. It's synced with the users LocalStorage and manipulated here:
https://github.com/Sarenor/arsnouveau-wiki/blob/dev/src/lib/components/addonMenu/AddonSelectionModal.svelte
It's defined here:
https://github.com/Sarenor/arsnouveau-wiki/blob/dev/src/lib/stores/addonStore.ts
And the difference between loaded and selected addons is checked and reconciled here:
https://github.com/Sarenor/arsnouveau-wiki/blob/bf2a4efbbdaf89041ba4d1b9923f01e39a95745b/src/lib/setup/loadAddonFiles.ts#L2
Basically I've got a lot of other Stores for all the patchouli Data (pages, textures, translations...) and whenever an addon gets selected, I pull the zip file for said Addon from Github, parse the zip file until I have only the data remaining that I need and then append said data to the stores for patchouli data, translations, etc.
Svelte Reactivity automatically updates everything as soon as a store changes and boom, Addons are loaded 🙂
voodoo magic
Hope that helps Object 🙂
Definitely less voodoo magic than Minecraft Particle or UI code 😁
hmm
If it doesn't, shoot me a message. I'll even be happy to jump on a voice call as soon as the coffee has hit and I'm no longer a walking corpse 🙂
I understand the concept, I think (thanks for the details!)
i'll take some time to stare at it a bit more
the thing about hexdoc is that we (mostly) generate static pages ahead of time, and it's written in python, so all the page rendering is in jinja templates, and it all turns into a static html file served by github pages
it seems like your stuff is happening a lot more in the browser?
All addon stuff is browser only, yeah.
The Ars Nouveau pages are loaded and generated serverside and are actual html when they reach the client, but addons are only ever clientside
SvelteKit is cool as in that it lets you give out html to requesting clients, but once there, javascript will take over and turn the page into more of an SPA
hmm, interesting
this definitely helps, at least it's giving me a concrete direction to go in
somewhat thinking out loud, but - with how hexdoc is structured, i'm thinking it might be easiest to prerender each category heading and entry separately, serve them as a data file or zipped file structure or something, and assemble them based on whichever addons are selected
links will be interesting. it probably shouldn't be an external link if the target is available on the current page
ok this is great, ty for the info 
i guess while i'm here, here's a bonus screenshot from some testing i did a few days ago 
(i wanted to see if it would work for a non-hex-based patchi book, ars was a convenient target)
This is probably a stupid question but how do I use ars nouveau items for my recipes?
use ItemsRegistry
I'm finally getting around to documenting Ars Artifice, how do I get my patchouli pages to show in the worn notebook?
I have a PatchouliProvider producing the pages and as far as I can see it's the same as Ars-Nouveau-Example-Addon and same as AE
Is that still possible in 1.20? @radiant depot
Patchouli did something with the book addon system
I'm still 1.19.2
Yeah, needs the book.json to tell it
While for 1.20 you don't need it and instead need to move all the patchouli stuff to same directories as Ars
thx
how can i create new threads with effects from other mods ex. malum scythe proficiency
You would need an addon for that, you could follow the perk classes in Ars nouveau
mmk
Are there some changes for the armor rendering in ars?
I will look into it but I am very busy right now.
I got some crash reports for my armor.
Seems like the texture path is null.
Oh might have been one of Alex’s PRa but not sure
Probably need to update to latest AN
I haven’t been very active lately
Maybe caused by this. I think these lines are new.
I will try
Because I found the old lines in the armor item itself.
I will change it maybe it could fix it.
Ah yeah
It's because they were causing the texture not found error
It's only a 1.20 issue
Geckolib said it's weird but we should pass a texture anyway with the getter override
Just override your armor's get texture to something
It shouldn't be used by anything
Except maybe optifine
Which shifts their bug from rendering purple squares to render the texture wrong
thats what I did already but it keeps crashing
https://mclo.gs/YaM9tGn thats what I got
is it because of my mappings?
Did you override getArmorTexture in your ArmorItem class?
Cause I was obv crashing too with Elemental after the change
But now that's solved too?
is this the right way
I think I got it
Thank you
@radiant depot any chance you could include Ars Énergistique under the "other compat/integration mods" message in #addon-index?
Did it finally release?
How would I use source as a requirement for a custom recipe? Is it forge energy or liquid or something else?
ok so it's not FE or a fluid, it's actually it's own thing
and it doesn't have a capability either, but Ars provides a utility class called something like SourceUtils or whatever which has a function to get source in an area. Probably take a look at the ritual brazier or something, IDK
as far as recipes goes though you'd need custom code for it since I don't think you have any datapack-related options
(unless it's an enchanting apparatus recipe in which case it's just an integer value you set but I forget the name)
I used source for my recipe in the enchanting apparatus
it's been released for quite some time now
i suppose i could have been much clearer about it though
do you mind if I put this discord server's link on CF/Modrinth pages for #1131511198156857495 ?
for support and stuff ?
That’s fine
@neat mango this is the static folder with all the addon logos, Minecraft assets and the Ars nouveau zip:
https://github.com/Sarenor/arsnouveau-wiki/tree/dev/static
Ehis is the central function that loads the zipped information into svelte stores:
https://github.com/Sarenor/arsnouveau-wiki/blob/dev/src/lib/setup/initializeStores.ts
The pages then just use their path to determine which information to load out of the stores
Sounds backwards, but front loading the initialization once and keeping it loaded and accessible is faster and easier than going to the zip file again and again
In other news, my gate's changed and the flight delayed.
Yaaay, air travel
Safe flight Sarenor!
okay! that helps a lot!
can it automatically fetch the zip files somehow ? or how do you update the docs ?
The main docs are integrated during build.
I mean to build a github action to automate that after bailey releases a new version
can't dynamically fetch it from github since traffic costs are horrible. Might be something to try with github pages, maybe that works better
But it still uses a fetch call to get the zip so you can switch locations easily
https://github.com/Sarenor/arsnouveau-wiki/blob/dev/src/lib/setup/loadAddonFiles.ts#L56
Is the fetch for the addons that are dynamically loaded upon user selection
This is the main one: https://github.com/Sarenor/arsnouveau-wiki/blob/dev/src/lib/setup/initializeStores.ts#L21
You can replace /arsnouveau.zip with another URL that's going to give you the zip for your mod.
You might run into cors issues though, so keep those in mind
Also thanks Jarva 🙂
Made it home safe and sound and even nearly on time!
Welcome home
can I know your thoughts about #1110758496045121688 ?
is it going to make into the base mod ?
I'm not 100% sure if there's a final consensus, but I think I remember the general sentiment of
"it's not worth it, people just use it for more
/
/
spam instead of finding cool/unique combinations, so the 10 glyph limit is fine"
Which, since I couldn't think of something that isn't just "the same thing just bigger" with more than 10 glyphs either, is quite understandable.
Only exception there is maybe bigger sequences of filters or other meta glyphs, that's still a problem without a solution afaik
I think putting more caps on aoe and amp and delay, instead of limiting the glyph amount would be better
Don't say that where normal users read, I fear you'd get to meet some torches and pitchforks otherwise 😉
Perhaps yeah
Not a bad thought though. Max 2-3
s per spell seems valid, max 2-3
/
per glyph or even spell seems valid as well

should still work since it's a beatifully efficient spell.
So, max 3 aoe/pierce per glyph it is 😁
so I was thinking of how we could get #1110758496045121688 in a meaningful way and the first thought to me was a Gun + spellbullet system. A bullet is a normal 10 glyph spell and multiple bullets could be combined to create a compound bullet
but at the same time if people use it to spam AOEs or amplifies, it will be very boring
I mean we have the ability to limit augments or say a glyph conflicts with another (linger/wall), a way to configure a limit of amount of delays in a spell, especially alongside damage glyphs like harm, etc.
Could also then create abstract parent glyphs like "DamageGlyph" that harm and explode extend, which inherit all this configs by default
I think half this server has either thought about how to implement a spell gun or is salivating at the thought of a spell gun at this point 😁
I know
I actually got the idea from you and SadieLuna talking about Wizard with a gun ( i tried the demo)
I would 100% clear any recipe for a spell gun in an SMP
what does that mean ?
That it's a recipe for Shenanigans and Jarva doesn't trust his players with it, so he's going to make the recipe invalid and the gun therefore unobtainable (at a guess)
The 1.20 demo is also an opt-in as opposed to the 1.19 that was forced infinity
oh dont worry. I dislike game breaking mechanics and OP stuff as well ( unbalanced OP stuff) . I will make sure that it is balanced
So maybe that's a point in favor of it as not standard play?
Since spell bullets are distinct from spells (kind of like how Jarvas Ars Artifice's contingencies are distinct) you can introduce your own table, gui and spell bullet validator.
If you don't want to allow more than 1-2
s per bullet and have a special validator for compound bullets, that's completely fine!
Even better than a special validator for compound bullets, make it logic that prints out a message a la "a bullet can't contain this much spell pow(d)er, the overall area of effect has been reduced to 2
" and just consume the additional
s.
Wanna also point out that in 1.20 we have augment cost overrides
Aka make augments more expensive for specific glyphs
how about instead letting you combine any arbitrary spell bullets, you could have 1 main spell bullet and add augment spell bullets to it ?
I want to add infinite spells but it needs its own system and rules
I can merge Alex’s stuff behind a config though
Also a completely valid way of doing it. Might be more that you're augmenting the spell powder charge or inscribe runes onto the bullets or something.
As long as you're careful about the balancing 😁
do you guys like the concept though ?
I want this to be the first addition to Ars Oscura but I wanna make sure this go well with the base mod and addons. Dont want to ruin experiences
If I still had paid days off left over, I'd have blocked of the <t:1697637120:d> - <t:1697809920:d> because I'm so hyped for wizard with a gun.
Of course I like the concept of crafting spell bullets and having powerful single shots to ruin someones day!
It is behind a config
We can hide it more by switching the book gui class tho
If it is used only in few instances
@mossy hollow do you know what in the heck is wrong on the 1.20 publish action? I added the exact resolver and the 1.19 one published correctly but 1.20 still published to 1.0 
name: Ars Nouveau 1.20.1-${{ inputs.version }}
version: ars_nouveau-1.20.1-${{ inputs.version }}
game-version: 1.20.1
changelog: ""
version-resolver: exact
Curseforge and modrinth or just curseforge?
Both
I know why
I'm pretty sure, lemme double check
game-version isn't a variable mc-publish accepts
So I'm pretty sure it publishing/determining 1.19 was a fluke
Lemme PR
yes, plural
interesting
If you wanna give it another try after "fixing it", I have an hotfix PR laying around.
(Talking to Bailey)
Made two PRs
pushed two more commits to remove all hardcoded versions other than the env var
Let's not forget the gravity ritual
it was changing to dice right?
Yeah it's just a picture of a die face and the name is changing to Randomize instead of shuffle to keep the term more general since it's been developed to have more and more use cases
@zealous zenith I am talking to klikli about alternate styles (other than graphs) like traditional pages . Is there something you would like ? for modonomicon
does 1.20 ars nouveau uses the new patchouli system ?
New patchouli?
you mean the planned one?
resource pack system or something
This guides describes how to upgrade Patchouli books from 1.19.x to 1.20.x.
this one
ah yeah, just let the datagen do its thing
I am looking into how to add entries
if you were overriding the getPath, don't
not for glyphs. I want to add a new category
What does patchouli do when you exceed their category count?
Ars omega adds a handful too
i can't remember if i saw that happening
with old arsenal + omega it was either happening or close to
cycro's mods also added categories
so you would probably discover that with a 1.16 instance
Need to get Archouli going again
I'm still bamboozled by the fact that i managed to un-hardcode the Ars Ecclesia recipe pages
but it would be a long way to make it as data driven as patchouli
starting directly from its serializers might make it way less annoying than we all think
hey addon devs, is there a convention you guys follow for patchouli documentation ?
I was going to add a new category entirely but it would have been cool if there was an "Addon" Category and we all could add our content there as a subcategory
(for things dont belong in other categories or if you simply wish to have a different place for documentation)
my patchouli documentation is sort of... cluttered (for Omega)
I added nested categories as much as I could, to reduce clutter on the main page, but I still add 3 new categories (tier 4 glyphs, sigils, and demon realm) which is kind of a lot. As far as subcategories, I have 3 in my own categories, and 1 in magical equipment.
That said, Omega is sort of unique because of how the progression and systems are structured requires this.
For a more normal addon, I imagine the convention is to create a single new category for the addon as that's what I've seen things like elemental do. You can include a summary of changes/new things there, but put anything like glyphs/machines/etc in the base ars category it would go in. This is what I plan to do for Industria, since it is a pretty normal addon akin to scaelas actually.
I don't make categories but straight up add pages to the right one
I made the summary of misc stuff in the intro chapter since it did not fit anywhere else
[06Oct2023 22:58:28.332] [Server thread/ERROR] [net.minecraft.server.MinecraftServer/]: Encountered an unexpected exception
net.minecraft.ReportedException: Ticking entity
at net.minecraft.server.MinecraftServer.m_5703_(MinecraftServer.java:897) ~[server-1.20.1-20230612.114412-srg.jar%23537!/:?]
at net.minecraft.server.dedicated.DedicatedServer.m_5703_(DedicatedServer.java:283) ~[server-1.20.1-20230612.114412-srg.jar%23537!/:?]
at net.minecraft.server.MinecraftServer.m_5705_(MinecraftServer.java:814) ~[server-1.20.1-20230612.114412-srg.jar%23537!/:?]
at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:661) ~[server-1.20.1-20230612.114412-srg.jar%23537!/:?]
at net.minecraft.server.MinecraftServer.m_206580_(MinecraftServer.java:251) ~[server-1.20.1-20230612.114412-srg.jar%23537!/:?]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
Caused by: java.lang.NoSuchMethodError: 'void com.mystchonky.tomeofblood.common.glyphs.SentientHarmEffect.attemptDamage(net.minecraft.world.level.Level, net.minecraft.world.entity.LivingEntity, com.hollingsworth.arsnouveau.api.spell.SpellStats, com.hollingsworth.arsnouveau.api.spell.SpellContext, com.hollingsworth.arsnouveau.api.spell.SpellResolver, net.minecraft.world.entity.Entity, net.minecraft.world.damagesource.DamageSource, float)'
at com.mystchonky.tomeofblood.common.glyphs.SentientHarmEffect.onResolveEntity(SentientHarmEffect.java:69) ~[tomeofblood-1.20.1-0.1.2-all.jar%23520!/:1.20.1-0.1.2]
at com.hollingsworth.arsnouveau.api.spell.AbstractEffect.onResolve(AbstractEffect.java:55) ~[ars_nouveau-1.20.1-4.4.0-all.jar%23334!/:4.4.0]
at com.hollingsworth.arsnouveau.api.spell.SpellResolver.resolveAllEffects(SpellResolver.java:188) ~[ars_nouveau-1.20.1-4.4.0-all.jar%23334!/:4.4.0]
at com.hollingsworth.arsnouveau.api.spell.SpellResolver.onResolveEffect(SpellResolver.java:153) ~[ars_nouveau-1.20.1-4.4.0-all.jar%23334!/:4.4.0]
any clue why this could be causing a crash ?
SentientHarm implements IDamageEffect already so it should have that method
(I simply implement the interface and do not override the default methods )
I don't know when it was merged tbh
I believed it was already changed two months ago
It basically carries over the result of hurt()
Yeah I still am on forge version since the neo version were super unstable then
Or of canDamage if that one fails
@shadow helm do you happen to know why the dynamic-wiki works on chrome and not on firefox when testing locally ?
Since I usually use a chrome derivate: no clue.
I can check once I'm done with cleaning and can sit down at my pc without getting shot by my partner though
oh no issues
it probably something wrong from my side. maybe I messed up my hosts file or something
How hard is it to add an armor material to ars?
I am planing an addon with a higher than heavy
It would be dyeable
pretty straightforward
armor material is separate from ars perk system.
in your armor class, just supply with a predefined material or a custom impl
Yeah, I'm confused on why are you asking this
You already made Ars armors with your add-on Verox
I know but it uses heavy. I only wanted to know if I have to pay attention to something
Materials are basically records to store repair material, armor stats etc.
Only vanilla features use that
I did it like that
Couldn't recreate it on a fresh install of Firefox.
Kind of a depressing confession, I've built this PC months ago and only just now installed Firefox.
Used to be my default browser, long, long ago
then it is definitely something wrong from my side
Respect 📉
Vivaldi gang for life, I'm sorry. Didn't need to debug browser specific issues since then
well its not browser specific issues when chrome abuses its power lol
Vivaldi? I think I used that once upon a time
on another note, is it possible to generate markdown files via some sort of buildstep in NodeJS ?
I have never done web/JS stuff before
Definitely
What are you generating markdown from?
okay awesome. I am gonna experiment a bit and see if I can generate documentation from patchouli
patchouli json
I have this website which I would like to automate instead of manual
how do you do it ? Got any advice ?
With a quick search I didn't find any generic packages.
Since a JSON object can contain whatever, that makes a certain amount of sence.
Markdown's just text with a bit of #### magic thrown in anyways, so you're probably served best doing it from hand
no I think generating files should be straight forward with something like fs module.
but how do run JS as a build step
also should I try/learn TS instead? Is that better ?
yes
so much yes
it's just JS with a bit of paint anyways
and you can write whatever you want/need in your package.json scripts so you can do something like:
"generateDocs": "node /path/to/generate/docs/file"
oh cool
I am doing it this way because this feels simpler. I just read and convert patchouli Json into a markdown/mdx based folder tree and docusaurus will handle everything (static site + algolia search)
if you're statically building, that's completely correct.
The initial idea behind the wiki was for it to be always up to date by always fetching all the data from github when needed
Sadly, traffic costs made that impossible
JS/TS is very annoying for scripting. running simple commands like download and delete files is hard
At least for deleting, you can do things like
"deleteDocs": "rimraf /build/docs"
But yeah, for something called XScript, it's not really a scripting language as you'd expect shellscripts or ruby or groovy to be.
Exaggerated, but it's the result of someone dynamicallifying the web browser in 10 days and millions of people building on top of that.
Never really intended for simple shell scripting tasks.
But, with the same spirit that humanity made Doom run on fridges, toasters, etc, Software Engineers have used JavaScript for everything from frontend, to backends to databases to using a js framework for infrastructure
I was using fs.rmdir() till now. is that not good ?
No it's perfect.
Rimraf is just if you want do do it quickly without writing a script for it.
If you already have a script that does everything (delete, build, etc) no need to change it
should I move this conversation to somewhere else? Its not exactly addon chat anymore :P
Ehhhhhh.... With a bit of good will it's still General & Development Help/Conversation.
Just ignore the addon category wrapped around it!
lol okay
I wanted to ask is TS actually the next iteraction of web? are there no alternatives ?
There's people using https://webassembly.org/ and rust to build websites.
Not saying that they're right or that's the future of web, but js/ts aren't the only way.
And since TS is just JS with a bit of paint, anyways it's not the next step of anything. You're still running JS when writing TS. It's just less painful to write
I find TS harder since the syntax is very different (like for imports)
It's a learning curve, but it's a lot better than a couple of years ago, I'd say.
It used to be that you need to add third party types for everything since most libraries didn't ship their own.
Now you mostly get types shipped with the library, making imports easier again.
Keep at it, it's going to be better 🙂
Working in ts for 4 years and couldn’t do an import without ide help still probably
So confusing with all the different ways
Damn it Bailey, I'm trying to be encouraging here! 
Webstorm is based, never remember silly details 🙏
how do I wait for https.get() to finish ?
And now you're into the weeds.
Modern way is to declare your function async and then just await the get
Const response = await https.get()
alternatively you can do promise then callback if that's more familiar and welcome:
https.get().then(
GetReturn => { /* do the thing */}
)
Js async is fun!
I want to wait the for the process to finish and then continue with rest of the script. The second method would mean that I would dump all the code into a then block which is kinda ugly
And if I keep telling myself that, I'll eventually believe it. Hopefully.
Yep.
SyntaxError: await is only valid in async functions and the top level bodies of modules
aaaaa this is annoying
I am gonna imitate python and create a fake main() method and dump everything in that
It's just easy tho
Async function main() {
/* do the thing */
}
Should work
yeah thats what I am doing now
Once you grok it, yes.
Still sometimes messy and annoying, but yes.
now I am just failing to download a zip. I am just gonna call it a day
If you're downloading it from github, be careful about CORS and API Quotas.
Depending with what you download it, you'll need to do something about CORS and depending on how often you attempted to download it you only have 50 requests (unauthenticated)
Especiallx those one's, yeah. One of the biggest problem with the early wiki was running into quota limits until I bumbed it with an access token. Even after that we still sometimts hit th quota before I internalized the zip
@shadow helm Do you have any stats on the wiki's storage, bandwidth, etc. usage?
Like any analytics on page views or anything to judge how many requests are served in it's every day use
I should have some, yeah. Let me finish this meeting and I'll grab them
Much appreciated
I'd be curious for what though 🙂
I cant seem to find the quota anywhere
the script to fetch sources will be manual so I dont have to worry about limits but will be still nice to know how frequently I can update
With Chonky's investigation into setting up a wiki, I've been thinking about ways it could be re-architectured using various free-tiers, but need to know the requirements for the applications operation to see how it's spread
Turns out, my analytics are shit/nonexistent. Going to take a bit longer, sorry
Thought I'd get a bit more from vercel without throwing more money at them
It's all good, if it's not possible to get don't worry about it
I can at least give you the google search statistics pretty easily
That'd be about 1k visitors a day, with the current SK setup they shouldn't hit the backend after the first loads, either.
Account for bookmarks & cache and call it an even 2k per day?
@shadow helm
do you know where it is ?
also I am gonna scrap TS code lol. I will use shell scripts for download and unpack zips along with raw file management and use python or something to generate MDX
rip ts
jep, just forgot to get the docs for you, give me a bit, work meeting right now
its just harder to perform actions like downloading zips and organising files and such
json to mdx might be easier for js/ts but I will look at it later
It really shouldn't be
wot
oh
https://docs.github.com/en/rest/overview/resources-in-the-rest-api?apiVersion=2022-11-28#rate-limiting
for general rate limiting docs
I want to simply download zip, unpack it, get rid of all code and move all assets and stuff into a correct folder
You can use something like axios to download the file and node-stream-zip for unzipping it
yeah I already tried so many packages but honestly wget + tar is simpler lmao
then use them
you can do that in js/ts too
With Node, we can run shell commands and process their I/O using JavaScript, instead of the shell scripting language. This makes the application easier to maintain and develop as we stay in the same environment.
I did do that as well. but I am gonna use normal shell for raw files atleast
why use abstractions/packages when shell script is faster and easier.
that is for REST GitHub API. the source zip download doesnt use the API I think
this will get me the correct branch source zip without API calls I think
Even a Get request is a REST API call as far as I kow
So here's my current idea, a service that triggers on a webhook after each add-on is built or uploaded to modrinth/Curseforge, alongside a Cron that checks latest versions on modrinth and CF for each version, this service then builds the documentation files into one single repository that can be depended on for the docsite, additionally have webhooks available for docsites to trigger builds from
Docsites can be statically built when needed, without requiring hitting the GitHub API
got a small shell script to download zip and extract required files from it (patchouli_books and assets)
now I just need to simply parse it and spit out md/x in the relevant format/structure. Sounds easy to me, I hope its not too hard
Definitely more sane than the current version 😁 
This is where the fun starts 😁
what changed in these ?
neoforge right? or did we revert back to forge. asking because I updating the base minimum version required
did enchantment apparatus recipe builder withSource() method get removed ?
probably neoforge, forge is abandoned I thought. But not 100% sure
just got renamed. it is withSourceCost() now
Keep in mind that as long as we remain in 1.20.1 Forge and Neo are the same userwise
If you build against one, it will still work with the other
I thought Forge after .3 started merging all sorts of crazy changes the last remaining contributor felt like doing?
Yeah, there was a little period of chaos
But iirc the changes are not noticeable by most
Yeah, only forge builds against 47.1.3 are compatible with each other
Like, there was a change in a projectile event iirc. That broke compat for sure
But as long as all mods in your pack did not touch that piece of code, doesn't matter too much on which one you are
Some fixes made in Neo were also applied to old Forge
Don't ask me why on this, consider it etiquette until full split of 1.21
Forge is still very much alive but dialled down to "something that helps pay off Lex's mortgage and then a hobby project again"
which i'm not saying to be derisive, it's just how he himself has put it candidly
Are there also still people explicitily building and planning for Forge? I'd have assumed that most if not all modders will stop caring about Forge and focus on Neoforge.
As long as Neo keeps compatibility all is well but as soon as that changes, Forge is dead in the water. At least in my mind
it's up in the air, some people are actually building on top of both loaders until the consensus is in on which one turns out more popular
i believe there was at least a small contingent of modders still sticking to Forge over Neo
but first-hand i only know of the dev for ModernFix and Embeddium doing the first thing i mentioned of building for both
Architectury also explicitly supports both Forge and Neo
but why
There's always traditionalists, I suppose?
i don't necessarily fault them, i'm still very much on the "wait and see" camp
although practically speaking since i'm primarily an AE2 add-on dev i can only follow with what AE2 decides to do, which is to eventually go NeoForge-only and even forego Fabric support
I mean Technici4n is kinda the lead on neoforge refactors right now
damn forego fabric!? that is news to me
Isnt Technici4n exclusive fabric dev along with their own mods like Modern Industrialization and stuff
Until 1.21, it's all just community siding because there is little difference aside eho runs it
With 1.20.2+ the Registry changes are where the road split
1.20.2 will have more those changes. Caps are changing and lot of internal refactoring and removal of old code
Setting aside yeeting DefRegs
There were few vanilla changes
Lex chose to not reimplement what was removed by Mojang with a Forge hook, I don't recall exactly what
yeah, he has a lot of faith in NF
Faith in NF is one thing, but that's a lot
I may be getting an early build of 1.20.x Tetra i can use to update Ars Armiger
Though it'll only come out alongside tetra not before for obvious reasons
so, I'm getting into modding and I'm trying to animate a staff I made using geckolib, but can't find any example code for 1.19.2, kinda lost here
tutorials I was following jumped from 1.18 to 1.19.4 too...
nvm, I can just follow ars noveau as an example...forgot the bow and crossbow are animated
example code should be almost identical between 1.18 and 1.19 for geckolib
From 1.19.4 onward it differs
well..it's different, even if slightly
https://github.com/bernie-g/geckolib/wiki/ there is also this
what is StructureRitual and why is it unused
also am I meant to do anything in particular so my ritual saves to nbt? I'm overriding read and write but it's not even saving that the ritual was started lol nevermind works now
I think it's used in Ars Caelum
oh yea that makes sense
@rugged urchin did you make the tier 3 book slightly bigger than tier 2 and 1 on purpose ?
blue is tier 1/2 and grey is 3
this is a better example
this is tier 3
this is tier 1/2. it just hides that golden part
the book covers are 1 pixel inside for them
Oh good grief
Yeah... I .. don't know how I did that 😅
Which is wild, because the closed version does not do that
Ok... I think I remember why it's like this
So if I "fix" that one pixel issue, what happens is I lose the gold detailing texture on the cover where the cover meets the spine when the book is open
So to preserve the texture and that detail from closed book to open book, I cheated and shifted the covers out 1 unit on each side. So technically it's on purpose
Your book doesn't have that detail, so you could just move those covers back in one unit each in blockbench and you're good to go
I don't use a different model
I think you should pull the tier 1 and 2 books 1 pixel outside so that you don't lose on the inner gold accent
honestly looking back at it now, I never really liked the inner gold detail part that you can only see on the tier 3. I shaded it because it looked weird if that line was the same bright gold.
Now I'm wondering if I should just get over losing the gold detail on the book and shove the covers back in lol
lmao
if you do that let me know because the new ToB texture would break because of that
@radiant depot is it possible to have a custom model for when a cat is in the mob jar ?
keeping cats in jar is cruel (lol) so I want to replace with a cat model, holding the jar in its hand or something
Maybe the laying down model of the cat with the jar between it's legs?
oh that would be cute yes
alright, I don't know if I'm doing something stupid (have mercy), but I added cooldown logic to ars nouveau's SpellResolver using mixins.
Now I wanted to do held spell forms that basically ignore this cooldown logic untill the spell is released, which means I need to tell normal cast methods and held ones apart.
I think I have to edit the AbstractCastMethod or AbstractSpellPart classes, so I thought about mixins again, but I'm not sure if this is the best approach or if the IDE is even able to recognize this convoluted mess 
Use a mixin that simply add an interface?
Oh wait, it wouldn't probably work for inheritance
Are there vanilla forms among the held spell forms you want?
Or only forms added by you?
forms added by me
Cause in the second case you simply need to add an interface to them or have a subclass of AbstractCastMethod
And then do the class check?
mind that I started modding like 2 weeks ago, but I tried making a subclass of AbstractCastMethod and making the form glyph using that
ars kind of uses AbstractCastMethod everywhere though, the glyph doesn't even pop up in the spellbook without heavily modifying other stuff as far as I know
Are you registering your glyphs?
yes, glyph works fine if I just make one normally
Having a subclass instead of directly ACM shouldn't change anything
I use subclasses just to prefix my glyphs without problems
Is your code on GitHub?
yeah, it's private atm though
for the form glyph atm I just yoinked TMG's ray form and how it was implemented, not sure which of you made the addon but I hope that's not a problem
No I was more like trying to understand what the "heavily modifying other stuff meant"
Also how the cooldown was checked
Since if you have the spell, just checking at index 0 should give you the form glyph. By doing the instanceof you then check if that glyph skips the cooldown
yes, I could just have a hardcoded list of all glyphs that are held, but I thought that was kind of a stupid solution? i dunno
You can check Ars Artifice code if you want, I implement a new glyph type, that I have to explicitly hide from appearing in the spellbook
I might've just approached it the wrong way then, checking out ars elemental's repo rn
will do, thank you
yeah I'm dumb, honestly don't know what I did different but extending AbstractCastMethod works now :)
@rugged urchin do you have source files for src/main/resources/assets/ars_nouveau/textures/gui/entries/battlemage_diagram.png ?
(did you make the image or was it someone else ?)
Yes I made those. There is a diagram for each armor set (sorcerer, arcanist, and battlemage)
The source file is an aseprite file that I export from to png
works for me. can I have the aseprite file please ?
thanks a lot!
Jeez IntelliJ, way to call me toxic...
bruh intellij that's a stretch
Possible idea: some kind of herbicide glyph ...
"Glyph of Osate"? 😆
Is the example mod not updated for 1.20?
https://github.com/Alexthw46/Ars-Nouveau-Example-Addon/tree/1.20.x i think even this one is outdated
I'm trying to get over the gradle hump to migrate to 1.20.
doing the last check before pushing the gradle changes to the example repo
alr, pushed
tilting wildly at this windmill...
downloading a small mountain of projects, apparently ...
some projects have moved to jitpack.io?
iirc it's MixinExtras
okay... errors mostly mopped up except for changes in how things get registered
is there already a block in base Ars that reflects spells back in the exact direction they came?
if not I wanna add that in Omega since I have a "reflective coating" item already used in a recipe
my glyph recipes show up in JEI but not in the scribing table?
Recipes sorted, now it's the item images broken.
Any suggestions on troubleshooting a missing texture?
Got it. Something is less forgiving about paths, and doesn't like me using items instead of item in the glyph texture path.
are you porting TMG?
yeah... think I've just about got it now
Spell Prisms, Elemental's Spell Mirrors
Those mirrors make an angled bounce tho, not a direct reverse
spell mirrors only have 1 face though, right?
and prisms don't reflect stuff
Is it possible to add a new category to Patchouli? Or is that a bad idea?
I'm still 1.19.2, but my category isn't showing 😦
I was going to try finish off writing documentation (or at least get some pages) and then upgrade to 1.20.1
I think we've got working new categories in Omega if you want to take a look at that
Yes please, ty
Okay I got the category working ty, I made the wrong assumption of it would be under the AN namespace
going to go with a sub-category on Magical Equipment for Artificing
for 1.20+, everything is under AN namespace
Ah right
Yea 1.19 and 1.20 are sort of opposites in that sense
Is it possible to make a relations page to a category?
I've added a sub-category for Artificing on Magical Equipment, but wanted to put a page in Getting Started to link to the category
yeah you can use a link
I want to perform an action when this recipe is crafted. What can I do ?
Like have an event occur?
no I want to edit the NBT of the resultant item stack
Like how the reactive recipe works?
I dont know how reactive works


🔨
.... Ouch! 🩹