#General & Development Help

1 messages · Page 4 of 1

shadow helm
#

a very apt description of curse maven

mossy hollow
#

Curse Maven is using the files uploaded to curseforge, it's not ideal but it works if it's not pushed to a proper repo

#

I physically cringe when I have to use it, but sometimes there's no other choice

radiant depot
#

what's the big deal?

shadow helm
#

Curse breaking the API and my build breaking because curse was bored

quartz stump
#

iirc tetra 1.19.x is not on a repo

#

only 1.18.x

radiant depot
#

it's probably because it's an alpha

quartz stump
#

maybe?

#

But it doesn't even have a branch on the github

#

what does the generated folder do btw?

#

Is that an auto-generated thing?

mossy hollow
#

it's assets/data generated from code

quartz stump
#

Ah gotcha

shadow helm
#

Minecraft has lots of json configuration that's automatically generated via the runData Gradle task

#

Textures, language mapping, recipes,...

radiant depot
#

if you do runData, it will generate some example stuff

quartz stump
#

so it's safe to delete it and do runData to re-generate things with the new project name?

shadow helm
#

yep

mossy hollow
#

Yep

quartz stump
#

I think I changed all instances of the example project name

radiant depot
#

runData should also delete all the stale stuff under generated

shadow helm
#

If you're using intelliJ and not familiar with the keybinds: CTRL+SHIFT+R is global find & replace

radiant depot
#

empty folders might remain

quartz stump
#

yay it builds!

#

Let's just slap the datapack stuff in first

#

build and then see if it runs

#

and see if it still has the new materials

#

holy shit it just works™️ let's go

#

well kind of, the lang files are not loading in

#

The rest of the datapack is loading in though

#

The materials are there without a hitch

#

I assume you can only add assets from your own modpack?

#

so i gotta move all of the en_us.json data from tetra\lang to ars_armiger\lang?

radiant depot
#

yeah

#

i'm not sure how the assets priority work, but usually they replace eachother

#

unlike the datapacks

#

so you need to keep them in a different file

quartz stump
#

Can confirm

#

Tetra side working flawlessly baby

#

just gotta add the hooks

#

time to figure out how subscribing to forge events work lmao

radiant depot
#

isn't there an image in the pins?

#

the .png in bailey's pin

quartz stump
#

here? not really

#

oh

radiant depot
#

moved the pin to the main msg

quartz stump
#

So basically here (which i think this is when the mod is being instanced?) I register my event handler class?

#

How do i determine what event i'm listening to?

#

is it based on the name of the method?

#

Or is it by the arguments the event takes?

zealous zenith
#

The event that is registered is the parameter in the function

#

so setup takes an FMLStartupEvent (or whatever is called), so that function will be called when the event fires

radiant depot
#

client stuff is pretty nasty, better not register like that

#

safest way is to use the subscriber on top of the class and specify value = client

#

or use the sided supplier

zealous zenith
#

thats the way forge example mod loads it iirc

#

its fine as long as you dont class load client files via that method in your mod file

quartz stump
#

also to get intellisence stuff

#

do i manually add all of my mod dependencies to external libraries?

#

cause i'm not getting like

radiant depot
#

no?

quartz stump
#

suggestions for code completion or anything

#

like one would in say, VSC or VS

#

Not sure if there's something else i should be doing

#

I do get basic java completion tho

shadow helm
#

There's a minecraft development plugin

quartz stump
#

i'm using Intellij for context

#

since it was recommended here before

shadow helm
#

yeah. the plugin is for intellij

#

technically you should get decent completion already though. Worst case, you'll have to restart IntelliJ and if that doesn't work, quickly press shift twice, like a double click, type invalidate and restart and hope to god that the reindexing improves things

radiant depot
#

I don't think i ever needed to touch dependencies tabs in IJ

#

Did you run genIntelliJRuns ?

quartz stump
shadow helm
#

yep

radiant depot
#

gradle tab on the right

quartz stump
#

yep that did it

#

thanks

shadow helm
#

Good that that worked. Re-indexing can take ages

quartz stump
#

So this is all i have to do?

#

I'm note quite sure i follow the image example

zealous zenith
#

The top level class needs an annotation or registered

#

since I see its unused there

quartz stump
#

so this?

zealous zenith
#

yep that looks right to me

quartz stump
#

and it'll automatically know that it's listening on the AttackEntityEvent?

zealous zenith
#

yep, annotation magic

quartz stump
#

Based and forgepilled tbh

#

time to get these events going then

zealous zenith
#

If you download the minecraft development plugin you also get an icon next to a valid event

quartz stump
#

time to get that plugin asap

zealous zenith
#

its critical for mixins too

#

lets you auto generate references to methods or lines

quartz stump
#

question: does an Entity also apply to a block?

#

EntityHitResult only has GetEntity() regardless of whether it hit a block or an entity

#

does doing GetEntity() on it cause it to return the block it hit?

#

I'm not well versed as to what does and doesn't count as an entity in minecraft lmao

zealous zenith
#

No

#

BlockEntity is blocks, or referred to as tile entities

quartz stump
#

Ah I see, HitResult has GetLocation() which i think I would use to target a block instead?

#

it returns a Vector3

mossy hollow
#

It would be a BlockHitResult

#

For blocks, at least should be

bright shore
#

Block entities are unrelated to entities as far as code goes

#

The only thing they share is the name and the fact they use nbt

#

But yea like Jarva said it's a whole different type of hit result you'll need. You can check if there's a block entity for the block from the world using the position

mossy hollow
#

Model for my Artificer's Workstation, so happy with it

quartz stump
#

oh huh

#

the resolver's method for casting on a block just takes in the BlockHitResult

#

that makes my life easier

shadow helm
quartz stump
mossy hollow
#

Man me too, I commissioned this

quartz stump
#

I want to create my Caster's Gauntlet that lets you charge up spells to add Amplify on it by holding the charge

#

but am artistically inept

mossy hollow
#

Yeah, I couldn't have done this on my own

zealous zenith
#

ooo that does look fancy

shadow helm
#

Knowing good artists is a giant boon to mod development.

mossy hollow
#

It really is, I'm keeping contact with this guy

rugged urchin
#

That table turned out really nice!

quartz stump
#
                LazyOptional<IManaCap> manaCap = CapabilityRegistry.getMana((Player) source);
                if (manaCap.isPresent()) {
                    IManaCap mana = manaCap.resolve().get();
                    int maxMana = mana.getMaxMana();
                    double recover = Math.floor(maxMana/(sourceLeech/100));
                    mana.addMana(recover);
                }
#

is this safe?

#

Idk if this is safe

shadow helm
#

I don't see anything unsafe

quartz stump
#

Even doing .resolve().get()?

#

I just want to avoid nullrefs

radiant depot
#

The capabilities have double wrap, but most of the time it's not necessary to check both

quartz stump
#

Also anyone know if there is a defined event for like

#

post-initialization?

radiant depot
#

If it's present, it's very very likely it's not null

#

FMLSetupEvent?

quartz stump
#

Then again, i may not need it since my mod loads after Tetra

#

I know that with KubeJS i had to do post-init because i would otherwise error out trying to load the Tetra classes that hold all of the status bars

radiant depot
#

You want to be sure it doesn't clash in any way, FMLCommonSetupEvent

#

With event.enqueueWork(() ->
{ code to exec} )

#

It will make sure the code runs at the end of the post-init

quartz stump
#

so something like this

    @SubscribeEvent
    public static void onFMLCommonSetupEvent(@NotNull FMLCommonSetupEvent event){
        event.enqueueWork(() -> {TetraIntegrations.RegisterNewBars();});
    }```
#

this is out of an absurd amount of caution

#

I'm literally just calling static classes

#

but with KubeJS, i could actually end up calling these static classes/methods before they even existed

#

so I'm being 1000% safe just in case wheeze2

radiant depot
#

You should be very safe in that event anyway

#

The enqueue is to avoid concurrency problems

#

Idk how Tetra handle it, but better to enqueue something that can end in a shared map

quartz stump
#

what's the easiest way to get an item's ID?

#

like the modname:itemname string?

#

is it getDescriptionId()?

#

actually

#

I don't need to do that

#

easier question, how do i check a Tag on an ItemStack?

radiant depot
#

ItemsStack.has/getTag or getOrCreateTag

#

Don't use getOrCreate if you are checking a generic item, otherwise it will create tags on it and cause random unstackable items

#

But if you are sure that the itemstack is your specific item and it always need to have a tag then it's nice to use

quartz stump
#

so like this

if(item.getTag().contains("ars_nouveau:caster"))```
#

?

#

or should i split it into

#
if(item.hasTag())
   (item.getTag().contains())
#

to be extra safe?

mossy hollow
#

hasTag -> contains is safer

quartz stump
#

so option 2?

radiant depot
#

Totally

#

First one is very likely to risk NPE

quartz stump
#

Now the last thing I have to do is implement the ability to inscribe the tetra weapons

mossy hollow
#

Why you testing for that tag?

quartz stump
#

To check whether to display the spell at the end of the tooltip

#

Since i'm not using things like mixins to give tetra weapons a new implementation

#

It's a lot simpler to just slap the NBT tags needed for it to cast

mossy hollow
#

Ah right

quartz stump
#

Which is just giving it the ars_nouveau:caster tag with the data pulled right out of the spellbook

#

it's very efficient

#

I just need to like

#

Figure out how to translate this KubeJS event into a forge one

#

in KubeJS they have a nice pre-packaged BlockEvents.rightClicked which has the block, the item and player all popualted

#

i need to figure out what is its forge equivalent

quartz stump
#

I need a slight bit of help real quick

#

What is the Scribe's Table considered?

#

a BlockEntity? or something else?

zealous zenith
#

if you double tap shift you can search the class name

#

but yes

quartz stump
#

ok that's all scripts implemented as proper events

#

The one i'm the most worried about is the block right-click event

#

but let's see how it goes

#

does archwood get registered as its own tag?

#

Like ars_nouveau:archwood?

#

i want to add a 3rd material in the form of arch-wood

shadow helm
#

logs definitely, don't quote me on planks though

quartz stump
#

Oh right the planks!

#

I can just register the planks since all of them converge there

shadow helm
#

that'd work. But there's definitely an archwood tag, give me a moment

#

Should be 'logs:archwood' if I'm not wrong

quartz stump
#

the events work

#

well all but one event

#

the one where it adds the bars to the UI

#

gotta look into that

#

Oh also

#

Is there any real standard for using Source or Mana as a term?

mossy hollow
#

Source is world mana

#

Mana is personal mana

bright shore
quartz stump
#

Previews of the new effects

#

I am currently struggling to add an improvement that can apply to all weapons melee weapons smad

quartz stump
#

and it levels up via honing

zealous zenith
quartz stump
#

oh it seems that my tooltip code is not actually adding the tooltip lines

#

does anyone know off the top of their heads how adding data to the tooltip goes?

zealous zenith
#

Tooltips are added usually in item methods but forge adds a tooltip event you can attach a tooltip to any item

#

the reactive caster uses that tooltip event iirc

quartz stump
#

oh wait

#

I was doing my event right

#

I just forgot to add the @Mod.EventBusSubscriber at the top of the class

#

literally the thing on the pinned message

#

amazing

bright shore
#

lol

quartz stump
#

tfw I was assigning the casting data not to the item on the table

#

but to the fucking book in the hands

bright shore
#

LOL

quartz stump
#

you know, the item donating the casting data

#

now featuring pretty text with ✨ colors ✨

#

the events for casting work so well now aaaaah

#

it's refreshing when shit works for once

quartz stump
#

Remember when I said I could get the entire working today?

#

Well

#

I met my part of the bargain

#

the mod works

#

all functions work as intended

#

I just put the last finishing touches on the tetra lang strings

bright shore
#

lol you think code working exists outside of fairy tales
it only looks like it works until you need it to

quartz stump
#

Just need to get an icon for the mod, get some screenshots and add an spanish translation since i'm bilingual

quartz stump
#

now i just gotta figure out how to add a patchouli page

shadow helm
#

Check the resources folder: resources/data/ars_nouveau/patchouli_books/worn_notebook/en_us/entries it's reasonably simple, just need to add your own book that's got a different name than worn_notebook, tell it that it extends the worn notebook and you're good to go.
Every other addon should have something similar, be it torn notes, wizards scratchpad or similar

radiant depot
#

You need to make one file in the static resources folder and then you can use the datagen to make the actual pages

quartz stump
#

question, how does one link to a file in another mod?

#

I want to have the entry have the icon for the holosphere

#

which is under assets/tetra/textures/module/holo/frame/default.png

mossy hollow
#

You'd use the tetra namespace

radiant depot
#

Uh, I'm not sure you can use a resourceloc directly to a texture

#

I'll have to check patchouli

shadow helm
#

I think it may link to the item and pull the texture from there?

radiant depot
#

If it's the same texture as the item,then it is easy, yeah

#

Use the withIcon in the builder and pass the holosphere

quartz stump
#

I'm not sure how to pull the item's data though

#

It's not like

#

individually declared in tetra's item registry

#

they just have the an Item registry property

shadow helm
#

do you have a recipe that references the item? That reference should be all you need

quartz stump
#

I think Tetra handles all of its recipes via datapack stuff

shadow helm
#

those are either also runData-generated in the generated folder or in the resources folder, unless they do a seperate repository for it

radiant depot
#

A bit hard to help without 1.19 sources public

shadow helm
#

which I wouldn't expect, you want to have 1 jar that contains everything which points to runData -> generated in my opinion 🤔

#

ahhhh, damn, I forgot

#

why wouldn't you make your mod sources public ragemwa

radiant depot
#

I asked Mikey

#

They should be kinda online now

radiant depot
#

🏴‍☠️

quartz stump
#

I am basically using a decompiler to look at 1.19's code

#

it's

#

janky

#

but it works

#

i know the item is registered under "holo" in the item register

#

I think I can just like

#

Get all entries, and do a anyMatch()?

#

or a find

radiant depot
#

There must be a simple way

quartz stump
#

whatever java's equivalent to a Find() operator is

mossy hollow
#

ah shit, if I don't use a tile entity, can I not use builtin/entity for my item model?

quartz stump
#

this is basically all i have in the item registry to work off

mossy hollow
#

is there a way to render the model for a two-wide block that uses the door blockstate system?

#

Can't you just lookup the item in the registry using the resource location?

quartz stump
#

I do not know that was an option

#

so pls enlighten me

radiant depot
#

From ForgeRegistries.ITEMS

mossy hollow
#
ForgeRegistries.ITEMS.getValue(new ResourceLocation("tetra", "holo"));
#

should do it

quartz stump
#

I was literally going to ask if this worked

ItemLike item = ForgeRegistries.ITEMS.getValue(new ResourceLocation("tetra","holo"));```
#

Thank you intellisence lmao

#

i'm getting issue with my runData

#

but i think it's because i changed some of the stuff in the build.gradle file

#

for the mods segment

#

do i use the name of the mod in the mods.toml?

#

which is ars_armiger?

#

or do i use the internal, java code name which is arsarmiger?

mossy hollow
quartz stump
#

this one right here

#

For both Args and Mods i need to know which one i should use lmao

radiant depot
#

You need to use the same modid everywhere

#

Mods.toml, Mod main file, resources folders

quartz stump
#

I see

#

I just didn't want to have an underscore in my namespace

#

it feels very wrong

mossy hollow
#

ars_nouveau has an underscore in the namespace

#

I think most ars addons do too

quartz stump
#

Well let's pray intellij has good refactoring tools

radiant depot
#

Since you can't camelcase this is the only way to distinguish

#

You can simply have no underscore anyway

#

Just pick one

#

ReplaceInFiles will do the rest

quartz stump
#

the log says it failed

#

but it ended up making a file anyways?

#
{
  "category": "ars_nouveau:equipment",
  "icon": "tetra:holo",
  "name": "ars_armiger.page.tetra_weapons",
  "pages": [
    {
      "type": "patchouli:text",
      "text": "ars_armiger.page1.tetra_weapons"
    },
    {
      "type": "patchouli:text",
      "text": "ars_armiger.page2.tetra_weapons"
    },
    {
      "type": "patchouli:text",
      "text": "ars_armiger.page3.tetra_weapons"
    }
  ]
}```
#

so i just put this on my data folder basically?

#

well, under the right path that is

radiant depot
#

It should be generated in the right place already

mossy hollow
#

we're making progress hibi_happy_hype

radiant depot
#

The error was probably just the process that ended

#

Because for some reason intellij mark it as an error type of end

quartz stump
#

So i just put this here then?

#

I find it confusing because Ars Elemental doesn't have these entry files

radiant depot
#

Because they remain inside the generated folders

quartz stump
#

Oh! I see now yeah

#

the build process copies things over

radiant depot
#

Gradle will merge the two folders when building the jar

quartz stump
#

that's a lot more handy

quartz stump
#

not sure why i can't set the subtitle tho

#

I did define that string so

#

then again all other entries have a missing subtitle

#

even ars nouveau's

radiant depot
#

I don't think that's something to translate?

#

I assumed it was just normal

#

But maybe it's an error in the datagen builder, who knows

quartz stump
#

It seems i can't just add the holosphere as an item to display in patchouli

#

because it needs some NBT data before it can like

#

actually display anything

#

anyone know how to do that?

#

Like, display an item with some NBT data added in on patchouli?

#

cause it otherwise looks like this lmao

mossy hollow
#

You need an item stack and then getOrCreateTag

quartz stump
#

Hmmm

mossy hollow
#

Can you show how it's added to Patchouli?

quartz stump
#
//check the superclass for examples
        ItemLike pStabilizer = ForgeRegistries.ITEMS.getValue(new ResourceLocation("tetra","planar_stabilizer"));
        ItemLike holo = ForgeRegistries.ITEMS.getValue(new ResourceLocation("tetra","holo"));
        ItemLike sword = ForgeRegistries.ITEMS.getValue(new ResourceLocation("ars_nouveau","enchanters_sword"));
        ItemLike gemstone = ForgeRegistries.ITEMS.getValue(new ResourceLocation("ars_nouveau","source_gem_block"));

        var builder = new PatchouliBuilder(EQUIPMENT,"ars_armiger.page.tetra_weapons")
                .withIcon(pStabilizer)
                .withPage(new SpotlightPage(holo).withText("ars_armiger.page.tetra_weapons.page1.body"))
                .withPage(new SpotlightPage(gemstone).withTitle("ars_armiger.page.tetra_weapons.page2.title").withText("ars_armiger.page.tetra_weapons.page2.body"))
                .withPage(new SpotlightPage(sword).withTitle("ars_armiger.page.tetra_weapons.page3.title").withText("ars_armiger.page.tetra_weapons.page3.body"))
                .withTextPage("ars_armiger.page.tetra_weapons.page4.body");
mossy hollow
#

Oh it does it based on an item string anyway

zealous zenith
#

I think you can attach nbt, I know you can at least attach enchantment s

mossy hollow
#

replace holo with "tetra:holo{nbthere}"

#

You don't need an ItemLike, you can just pass the ResourceLocation string

quartz stump
#

and looking at Tetra's recipe registry

#
{"item":"tetra:holo","nbt":{"id":"9503de92-046c-4d61-8afe-8c0d71c6afae","holo/core":"holo/core","holo/core_material":"core/dim","holo/frame":"holo/frame","holo/frame_material":"frame/ancient"}```
#

I think this has what i need?

zealous zenith
#

Passing it as resourcelocation will likely throw exception

mossy hollow
#

not as a resourcelocation, but as the string

zealous zenith
#

That is just for datagen, you can also add the file directly to src hand typed

#

If needed

mossy hollow
#

new ResourceLocation("ars_nouveau", "enchanters_sword").toString()

#

would work

quartz stump
#

SpotlightPage accepts a string too so yeah

#

I am trying with just

mossy hollow
#
'tetra:holo{"id":"9503de92-046c-4d61-8afe-8c0d71c6afae","holo/core":"holo/core","holo/core_material":"core/dim","holo/frame":"holo/frame","holo/frame_material":"frame/ancient"}'
#

that's what you want

#

a string of that

quartz stump
#

yeah that is what i'm trying lmao

#

and seeing if that works

mossy hollow
#

According to Patchouli docs it should

quartz stump
#

loading a world to see rn

radiant depot
#

If the builder is not happy, just use the withProperty

#

It allows to define key and value

#

I added it to manage flags

quartz stump
#

yep that did it!

radiant depot
#

But it's basically for anything that is not handled by the other methods

quartz stump
#

This should be sufficient explanation right?

#

I should check if the book is written in first person or second person

#

it seems to be a mixture of both

#

now that i know how to declare NBT i may change the second set of pages to have an actual modular weapon

#

with the augment put in it

quartz stump
#

Anyone know how to do the thing with patchouli where you cycle between items?

#

I want to see if I can have the Source-Leech entry show Gem block, Archwood Logs and magebloom fibers

#

like cycle between them

#

Idk if that's possible with an item display

quartz stump
#

Can projectiles hold NBT tags?

#

I think they can, right?

#

I need to add a simple boolean flag to thrown modular items to let the code know they already casted once

#

since right now they can double-cast by hitting an entity then bouncing into the ground lmao

zealous zenith
#

You would need a custom display template, and a processor

quartz stump
#

so i can't just do this?

if(proj.getTags().contains("spellstruck")) return;

proj.addTag("spellstruck");
radiant depot
#

they were still talking about patchouli

zealous zenith
#

for the item cycling in patchouli

quartz stump
#

Oh right right

#

I ended up just choosing to put another modular weapon there

#

that actually has all of the parts included

#

I think that's a better example

radiant depot
#

getTags is not the nbt

#

at least from what i know

quartz stump
#

I assume i need to do

proj.getPersistentData().contains("spellstruck")```
instead?
zealous zenith
#

should work

#

You can also be clever and store the entity ID instead, and let the spell hit multiple targets

#

cant arrows hit more than one target if it bounces off something?

#

I know off shields it can, I guess normal arrows stick into their target

quartz stump
#

Hmmm

zealous zenith
#

I dont know how those tetra projectiles work so not sure if its possible

quartz stump
#

They are just projectiles

#

so they can have any data projectiles can

#

I just want to avoid double-casting when hitting a surface

#

Because sometimes you can end up hitting 2 blocks at once for example

#

or hit an entity and have your weapon bounce off and hit the ground

#

which is not idea if you want to use your throwable for something cool like swapping places

#

or casting a huge powerful AOE spell on the spot it lands

#

So i think limiting it to casting once is fine

zealous zenith
#

Can hit two blocks at once?

#

It doesn’t stop moving and get stuck in a block? Make sure you are only checking the server side

quartz stump
#

I'm only checking server side

#

it basically happens when you collide with a block that is altered afterwards

#

ex: hit ice with ignite

zealous zenith
#

Ahhh and it keeps falling

quartz stump
#

Yeah

zealous zenith
#

Makes sense

quartz stump
#

Or tomahawks from Art of Forging breaking wood blocks it flies through

zealous zenith
#

Do you support piercing though?

quartz stump
#

in what sense? like hitting multiple targets with the throwable?

zealous zenith
#

Yeah piercing lets spells and projectiles keep going until they hit so many unique targets

quartz stump
#

Hmmm

#

yeah i see GetPIerceLevel() which returns a byte

#

I assume a number value for how many entities it can pierce?

zealous zenith
#

Though AN projectiles remove themselves after the spell is done resolving

#

That won’t give you a spells pierce level, just the arrows enchanted level

#

You’d need to add both up if you let people scribe piercing projectiles

quartz stump
#

Well the way the Spellstrike spell works is that it casts the spell with Touch on the target struck

#

so pierce wouldn't even apply here

#

at least on the spell side

zealous zenith
#

Ah okay then yeah don’t worry about it

#

But if the arrow can pierce you still want to let the spell resolve on the next target

quartz stump
#

on the projetile side, I can see it being nice if your tetra trident can hit multiple targets and cast its spell on each one

#

How does piercing work data wise?

#

like does GetPierceLevel() just return a byte counting how many entities it can go through?

zealous zenith
#

afaik yes

#

it doesnt apply to blocks because vanilla projectiles stop moving until the block moves

#

so you could have a flag for when a spell resolves on a block

#

and then just let the spell resolve multiple times on entities until the pierce level is hit

quartz stump
#

ok so does getPierceLevel()'s return go down with each pierce? Or is it static and i have to figure out how many entities it can pierce yet

#

hmmm

zealous zenith
#

depends on the implementation, its probably just a number and the projectile stores the ID list

#

the tetra class would tell you

quartz stump
#

yeah the projectile stores a list

#

at least on the forge side

#

does anyone know how things Translatable components work when passing data to them?

#

I want Source Leech to display a tooltip saying "Restores x% Mana on hit"

#

I see that Component.translatable() can have arguments passed to it

#

does it just follow regular java text formatting rules?

quartz stump
#

Ok so translatables do allow arguments but you have to do it differently than regular strings

#

I had to dig up forge 4.0.0 documentation lmao

#

basically you do {0} on the lang string to tell it "Put variable here kthanks"

radiant depot
#

Do you mean arguments like the death messages?

quartz stump
#

arguments like "Put this integer into this language string"

#

So i can do this:

radiant depot
#

Well, something like %s should work too

quartz stump
#

i tried %s and it didn't work

radiant depot
#

Tablets and glyphs use it

quartz stump
#

That's odd

#

Maybe i did %S with uppercase or smth

#

either way, {0} also works

quartz stump
#

General Java question

#

if I use List.add() and set the index to a number that is 1 higher than the highest index

#

so basically if I do List.add(5, thing) on a list with 5 elements

#

does it append to the end?

#

or does it throw an exception?

#

Anyone know this off the top of their heads?

#

I don't know if I need to do this garbage or not:

                    if(i+1 >= Parts.size()){
                        Parts.add(AugmentAmplify.INSTANCE);
                    }
                    else {
                        Parts.add(i+1, AugmentAmplify.INSTANCE);
                    }```
zealous zenith
#

Crashes iirc

quartz stump
#

ok so i do have to do the garbage

zealous zenith
#

Just do .add to add it to the end

quartz stump
#

that's what i'm doing yeah

#

I'm itterating through all parts and amping them for a thing

#

but if it's the last part on the spell

#

well

#

yeah

#

it'd explode if i do i + 1 lmao

#

Trying to implement my own version of a focus is hard :')

#

Or rather it's jank

radiant depot
#

When are the augments added?

bright shore
#

I think in the same event doing the casting Vyklade said

radiant depot
#

So no amp multiplier there, iirc

quartz stump
#

What i may do is that i may just like

#

dial down on amp stuff

#

Rather than tempt fate and lock a player into a situation where their spells are always invalid (aka Spellstrike 3 + Elemental Attunement)

#

Maybe i'll turn one of these effects into just a casting discount

#

maybe Spellstrike 3 adds 1 amplify but it costs nothing

#

while Spellstrike 2 adds 1 amplify but it still has full cost

bright shore
#

What the heck whyyy

quartz stump
#

So:
Spellstrike 1: Added Touch + No amps
Spellstrike 2: Added Touch + Amp at the end (No discount)
Spellstrike 3: Added Touch + Free Amp at the

Elemental Attunement 1: +1 Amp to matching Spell +1 Dampen to nonmatching
Elemental Attunement 2: +1 Amp no downside

bright shore
#

Why not just let them keep the amount over the max

#

That's what the bow does

#

Please please please

#

It would be so much cooler and make more sense

#

Why do this whole thing

#

I really don't get it

quartz stump
#

are you sure?

bright shore
#

Why are you so opposed to letting people just have extra amps

quartz stump
#

I don't see code in the bow that adds more amplifies

#

just a split

bright shore
#

?

quartz stump
#

There's no call to adding AugmentAmplify anywhere in here

bright shore
#

Spell arrows

quartz stump
#

oh right

bright shore
#

I think there's an amplify one

quartz stump
#

let me check those

bright shore
#

And it stacks on TOP of augments at the end of a glyph was my understanding

#

When in doubt test in game

quartz stump
#

Let's check in-game rq then

bright shore
#

I'm not at a PC with the game or I would've done that an hour ago lol

quartz stump
bright shore
#

Have you actually tested that lol

quartz stump
#

doing so right now SCREEM

#

minecraft takes too long to load reee

bright shore
#

Because my staffs DEFINITELY work for me

#

And they add more amps breaking the limit

#

So

#

🤷

quartz stump
#

well my swords do get a limiter

#

Just gotta figure out how to like

#

make it not

#

Enchanter's Sword also has a limit

#

huh and yet the arrows don't

#

So it's something specific to the spell arrows

bright shore
#

The .silent or whatever thing I said a while ago

quartz stump
#

that's odd because looking at the code

#

all silent does just not print the error

#

It'll still not cast

#

let me compile and try again

#

with isSilent

bright shore
#

Worth giving a shot anyway

quartz stump
#

yeah withSilent() just makes the error not show up

#

rather than let you cast anyways

bright shore
#

Huh

quartz stump
#

let me see how you did your staves

#

maybe it's in the type of caster?

#

Maybe I have to declare a specific kind of spellcaster type?

bright shore
#

Maybe? IDK if I even pushed lol

quartz stump
#

i'm using the raw SpellCaster instance

bright shore
#

Which one?

#

GetSpellCastwr?

quartz stump
#

yeah there are like 4 SpellCaster item types

#

ReactiveCaster, TurretCaster, ReductionCaster and SpellCaster

bright shore
#

I can help more when I get back to my desktop computer

quartz stump
#

hey i need advice from java pros rn

#

For some reason my elemental focus effects is just

#

not triggering???

#
    public static void Amplify(Spell Spell, SpellSchool school, boolean trueAttune){
        for(int i = 0; i < Spell.recipe.size(); i++){
            AbstractSpellPart part = Spell.recipe.get(0);
            if(!(part instanceof AbstractEffect)) continue;
            if(SpellSchools.ELEMENTAL.isPartOfSchool(part)){
                if (school.isPartOfSchool(part)){
                    Spell.add(AugmentAmplify.INSTANCE,1,i);
                    Spell.addDiscount(AugmentAmplify.INSTANCE.getCastingCost());
                }
                else {
                    if (trueAttune) continue;
                    Spell.add(AugmentDampen.INSTANCE,1,i);
                    Spell.addDiscount(AugmentDampen.INSTANCE.getCastingCost());
                }
            }
        }
    }```
zealous zenith
#

are you adding the items to the resolver?

#

or the context rather

quartz stump
#

From what I read, as long as i don't re-assign Spell i don't have to return a new Spell instance

zealous zenith
#

you are still creating tehse via events right

quartz stump
#

yeah

#

I'm using the tooltip code to verify it

#
SpellCaster caster = new BasicReductionCaster(item,(spell -> { spell.addDiscount(MethodTouch.INSTANCE.getCastingCost()); return  spell;}));
Spell spell = caster.getSpell();

// If spellstriekr 2 -> Add Amplify; This one works

// If Elemental -> Run Amplify(); This one does not work

tooltip.add(Component.literal(spell.getDisplayString()));```
zealous zenith
#

the focus should be added from the casters inventory, is the player the caster?

quartz stump
#

The focus is slotted into the weapon itself, the idea is that it buffs that element's spells but dampens the others

#

just like the real deal

#

but localized to your modular weapon

#

the checks themselves are just

if (Air > 0)
TetraEventHandler.Amplify(spell,SpellSchools.ELEMENTAL_AIR, air >= 2);```
#

And I know that Air is being populated

#

So the issue has to be somewhere in Amplify()?

zealous zenith
#

use the debugger

quartz stump
#

how so?

#

I have not used the debugger with this IDE before

zealous zenith
#

click the number to add a break point and run the game in debug mode, its the little bug next to the run

#

when the game hits that path it will freeze and you can add more break points, step through, and see values in the method

quartz stump
#

hmmm it's throwing an error when launching the debugger

#

Unsupported major.minor version 60.0

#

Binch how you are literally building

zealous zenith
#

alternatively add print statements

#

the debug mode makes modding much easier though because you can also hot swap code without rebooting the entire game every change

quartz stump
#

oh got it

zealous zenith
#

pretty critical for any larger project without wanting to throw your monitor out

quartz stump
#

I just had to change the java version being used

#

from 15 to 17

#

i hate how java handles versions man

bright shore
#

I never figured out how debugging works, and I turned out "fine"
(insert sounds of screaming as everything in the mod crashes the game and I don't know why)

quartz stump
#

yeah the issue is on the SpellSchools.ELEMENTAL.isPartOfSchool(part) never returning true

#

Let me see why

#

Now that i have the debugger it should be miles easier

#

let's fuken go

#

it works babey

#

Also I discovered that doing .add() with an index equal to the List's size (so index 5 on a list with 5 elements) does not throw an exception!

#

It actually adds it at the end

#

So my code is very short now

#

I just append amp/dampen at index + 1 and it just works

zealous zenith
#

thats what add already does without the index param

#

appens to the end

bright shore
#

but Vyklade wants index of the glyph

#

not index of the end of the spell

#

there's effects inside the spell lol

quartz stump
#

My code goes glyph by glyph and if it's a matching elemental one it adds amplify after

#

So index + 1

#

I was worried that if the last glyph is elemental it'd throw an index out if bound if try to add at index + 1

#

But java just treats index = size as adding to the end

#

Which is nice

zealous zenith
#

Ah gotcha

bright shore
#

umm, how do ritual constructors work on 1.19?

#

I need help figuring out a bug making things crash

#

seems to me the constructor got called a BUNCH of times, initialized a value every one of those times, and then crashed cause the value was null

#

I sorta figured the ritual would be constructed once and keep the value it initialized lol

#

WTF

zealous zenith
#

its initialized every time a ritual is started and when the world reloads

bright shore
#

... I started one ritual...

#

WTF is this

#

are you KIDDING me

#

getRitual creates a new instance

#

damn it

#

now I need to use reflection to steal the ritual map

#

... or keep track of my own weird map

#

that's probably easier at this point

#

my own ritual map lol

radiant depot
#

For the flight ritual?

#

Map for what

bright shore
#

map of all configured rituals

#

IDK where to keep the configs cause I didn't want to have to redo the config code for every ritual

#

so I'm making a map for that now

#

I used to keep it on the default ritual but that crashes stuff it seems

#

honestly now I'm not sure why the issue isn't a stack overflow

#

🤔

#

alr fixed it!

bright shore
#

ok so

#

I want to add a recipe that can change the scribed spell on an item just by crafting it with spell parchment

#

but, how can I actually set the spell?

#

IDK how to do that from outside the scribe's table, it seems to want to use a player for IDK what

quartz stump
#

Well you can basically use .setSpell() on the item

#

You first need to create a new SpellCaster(ItemStack) and use caster.setSpell(spell) on it

#

That's how I do it for Ars Armiger

bright shore
#

shouldn't I use the get spell caster method?

#

for the itemstack?

quartz stump
#

Note: if you're changing a reactive caster you need to do new ReactiveCaster(ItemStack) instead!

bright shore
#

I'm not, but, why are you using new like that lol

quartz stump
bright shore
#

just use THIS lol

#

it's specifically there to get the right spell caster, no?

quartz stump
#

That's if you're working with an item that inherets from ICasterTool

bright shore
#

though the reactive caster does have to be manually cause it's adden on top of

bright shore
quartz stump
#

Tetra weapons don't Inheret ICasterTool

#

And I'm not using mixing for them

#

Too involved

bright shore
#

fair

quartz stump
#

My Method basically works on any item

bright shore
#

so, er, does setSpell work if the player is null?

quartz stump
#

Maybe?

bright shore
#

lol, when do you set the spell

#

the problem I'm trying to solve is it's during crafting

#

all I have are the input items

#

which are a bullet and a scroll

#

that's... about it

bright shore
#

... huh

#

you can just set spell on the caster lol

#

am I overcomplicating things

quartz stump
#

You can create a var scroll = new SpellCaster(scrollItemStack) and then do Spell s = scroll.getSpell()

bright shore
#

yea ok thanks

quartz stump
#

The scroll contains all you need to make a caster lmao

#

It's pretty nice

bright shore
#

yea sweet

#

now I just gotta figure out the recipe part from minecraft lol

quartz stump
#

I wonder

#

Can you make a caster tool with more than one slot?

#

Idk if the spell wheel is modular and allows a variable amount of spells

zealous zenith
#

You can but I wouldn’t attempt to recreate it on a tetra item

quartz stump
#

I'm tempted to make the Ars Armiger caster gauntlet have an upgrade path that adds more slots

zealous zenith
#

It’s pretty baked into the interface

#

unless this is your own item class you are talking about

quartz stump
#

I'm making an item that would implent ICasterTool and ModularItem

#

So it'd be a tetra item but it also had all of the bells and whistles from a real caster tool

#

This is a new torn

#

Item*

#

Rather than me retrofitting casting onto a treta item

radiant depot
#

In that case it shouldn't be too hard

#

Just peek at the spellbook for a lot of the extra stuff

quartz stump
#

I just gotta learn how to do models in MC

#

I'm artistically innept you see

#

But I want the gauntlet to be a simple glove model

radiant depot
#

Similar to Thaum 1.12 one?

quartz stump
#

Maybe?

#

Yeah

#

Just a simple glove around the user

quartz stump
#

Are there any good tools for making minecraft models?

#

Ideally one where I can also do texture work

zealous zenith
#

blockbench

quartz stump
#

Gotcha

#

Im debating what the modular gauntlet will be like

#

Both visually and mechanically

#

I'm thinking that it'll have like 4 modules:

Major:
× Body: accepts skin materials, it determines the color and texture of the glove
× Inlay: accepts metals and gems. a ring embedded into the glove

Minor:
× Foci: Accepts a focus or socket

bright shore
#

lol I just had an idea

#

a gold gauntlet, fits in the hand curio slot, can fit 6 ars nouveau foci

quartz stump
#

Lmao

#

The caster's glove had a special gimmick

#

It does no damage on its own

#

Punching with it casts Touch -> Harm instead

#

The material of your Inlay adds amplify to this

bright shore
#

LOL that's a fun idea

#

except how would you change the spell

#

and could you break the limit?

quartz stump
#

The glove can go past the usual limits

bright shore
#

nice

quartz stump
#

The idea is that your Inlay determines strength (how many amplifies)

#

The foci determines Attunement (changes it to other glyphs)

#

Possibly

#

Because idk if there are enough elemental glyphs by default

bright shore
#

lol

#

what would earth change it to then

#

since harm is earth I thought

quartz stump
#

Yeah that's the thing

#

There aren't enough elemental spells lmao

bright shore
#

I got my bullet scribing recipe to mostly work, but it still consumes the parchment 😦

#

WTF no no that either

mossy hollow
#

magic lipstick?

bright shore
#

it's a spell cartridge for immersive enginerring revolver

#

and it dupes spell parchments and IDK why

quartz stump
#

I think it consuming the spell parchment is fine?

bright shore
#

no no no

#

I don't want it to

#

scribing each bullet is annoying

quartz stump
#

Hmmm

bright shore
#

I specifically made this recipe to fix that, so you can make them in bulk

#

and it's this close to working right

quartz stump
#

That's a bit tricky since i don't think minecraft allows for recipes like that

#

could be wrong tho

bright shore
#

it does if I coded it right

#

I'm almost there, I'm just setting the remaining items in the grid wrong

#

which is a thing you can override when adding custom recipe types to the crafting table

quartz stump
#

how big is the minecraft hand usually?

#

like I need to know what my dimensions are when working in Blockbench

#

unless they have a tool to just show a model for scale

bright shore
#

about... 🖐️ yay wide
(bad joke, the hand is 1 hand wide)

#

yaaaay! the bullet crafting works!

radiant depot
#

Because they're a tab that let you see the preview

#

In the gui, in the player hand, etc.

bright shore
#

errm, how do I upload a file on the curseforge beta?

zealous zenith
#

you cant

bright shore
#

BRUH

zealous zenith
#

you have to wait like 10 mins to be able to access the normal site

bright shore
#

why bother send me to the beta site if I can't USE it?

#

smh

shadow helm
#

Because web dev is hard yo.
(If you're an idiot...)
And servers are expensive, gotta skimp on hardware so we can pay the modders more. Ha.

quartz stump
#

I think the gauntlet looking fine

#

texture is in B/W because it gets tinted by Tetra based on the material

radiant depot
bright shore
#

yea, I found the link
thanks

mossy hollow
#

my button OnPress isn't firing and I'm this close to a meltdown

#

I have literally no idea why, it extends from GuiImageButton and passes a lambda in for the onPress to super and I can see it there in the breakpoints

#

but my onPress callback never triggers

#

and it's probably some render layer issue now that I'm thinking about it

#

I think I just figured it out

#

I used this.addRenderableOnly instead of this.addRenderableWidget

#

it worked, I'm dumb af

quartz stump
#

I still gotta figure out how to render my spell gauntlet

radiant depot
#

Explain more and you might get hints?

#

How to explort the model and use it in mc?

#

How to do special rendering stuff?

shadow helm
mossy hollow
#

it's not the first time Mojank has driven me to insanity

shadow helm
#

Probably not the last time either

quartz stump
#

I basically need to do 2 things:

Get the itemstack so i can have the item's NBT data

#

then tint the sprites based on that data

#

the issue is that i'm also working with like

#

Tetra data rules

#

and apparently this dude managed to tie the model itself into the modular data???

#

which is amazing but also really hard to follow

#

since the code is basically scattered across 7+ files lmao

radiant depot
#

Well, you can look at how the wand get the tint maybe?

#

No, actually it might be easier to keep it vanillish

#

Using different tint indexes

#

And then the client event to apply the right tint based on data for each index

quartz stump
#

They store the tint as a freaking byte

#

but I have reverse engineered their code for it

#

this just feels wrong lmao

#

My concern is that each item returns an array of models which concerns me

#

I assume 0 will always be the base layer but I can't be sure and i have to wait 7-10 business days to get a response from the tetra dev lmao

#

I need a good example of how you normally render an 3d model as an item

zealous zenith
#

Tints are how mojang creates dynamic colorable items as 2d sprites

#

for 3d items you need a renderer most likely

quartz stump
#

a BlockEntityWithoutLevelRenderer?

radiant depot
#

Basically, yes

#

It might be easier if you make it as a geckolib item

#

Since you can then base off Ars renderers

quartz stump
#

maybe?

#

I'd have to add Geckolib to the project

mossy hollow
#

You would but it wouldn't be a big cost as it's bundled with ArsNouveau already

zealous zenith
#

yeah dont need to add it, already packaged for you

mossy hollow
#

Sometimes I really hate working with the Java stdlib, like why does everything I map or loop over have to be a stream, and then why is there no index available on streams

shadow helm
#

Cause it's either indexed or Stream. Streams are infinite by design and indexing infinity is a bad time 😁
Although map might have an index argument? Not sure tbh

mossy hollow
#

I mean having a running total of the stream elements should be fine because streams should be lazy processing

#

Google Guava has Streams.mapWithIndex

#

but it's just frustrating

#

I have good news and bad news about Ars Artifice

#

bad news is that every time I make a mistake the client crashes to desktop

#

good news is that it's very easy to tell when there's an error

shadow helm
mossy hollow
#

I'm too used to writing Rust, these runtime errors will be the death of me

shadow helm
#

Oh no. A Rustafari Rustacean. Quick, run, before he starts handing out Rust manuals like the bible! 😉

mossy hollow
#

ackshually

#

it's Rustacean

shadow helm
#

That's adorable and I feel like the conversion is working. Damn you and your cute crustacean-ness

mossy hollow
quartz stump
mossy hollow
#

they also have a discord

quartz stump
shadow helm
shadow helm
mossy hollow
#

We can also listen to Shrimp Rave

mossy hollow
#

Okay, I have spell validators working now

#

All I have to do is implement my event glyphs and the curios

mossy hollow
#

Oh right, I just realised I need to implement the item renderer

#

No idea how I'm going to deal with that

shadow helm
#

Vyklade might be able to help now after taking a deep dive into the docs?

mossy hollow
#

My issue comes from the fact that my Artificer's Workbench isn't a tile entity, otherwise I'd just the entity block renderer

#

So I either have a texture for it, or figure something else out

zealous zenith
#

do beds have a block renderer?

#

oh beds are tiles

mossy hollow
#

Yeah they do

#

Doors aren't tiles, but they use a texture

zealous zenith
#

how do you artifice with no tile?

#

just dont add the item onto the table?

mossy hollow
#

Ye

#

I open a UI from the table

zealous zenith
#

should just be item display settings regardless of how the block is placed in the world iirc

mossy hollow
#

Method is done through artificer's workbench, and spell is done through scribe's table

zealous zenith
#

ohhhh right vanilla renders 2d sprites for non tile blocks

mossy hollow
#

We gotta do the custom UI because the Cyclic glyph isn't available in the Spellbook

zealous zenith
#

so doors are 2d

mossy hollow
#

Yeah I wish I could get a model render there

zealous zenith
#

tricky, not sure how you will do that without a TESR

#

models are very much tied to a block

mossy hollow
#

Yeah I'm not sure

zealous zenith
#

I guess render a geckolib model which is just the workbench

#

should work fine, just export it as an item

#

which to geckolib are the same .geo format anyway

#

so look at the sword or wand renderers

mossy hollow
#

I could just provide a model file of both halves that is just used for the item, in the same way that blocks are rendered

#

not sure if it would work for a 2-wide block

#

or I could literally just render the block into a png and use a static texture file

zealous zenith
#

not sure about that fancy item model stuff

#

id take the easy way and load your model into blockbench and export as a .geo with the item display settings

mossy hollow
#

what do we think about the texture, do we copy over the legs from the scribe's and alteration tables

zealous zenith
#

also @radiant depot someone in enigmatica discord say starbuckets cant take from cauldrons

#

that dark grey doesnt exist in the mod so if its a table from archwood I would change it

#

aand the gold tint too

mossy hollow
#

Yeah I need to update the gold, I'm thinking the legs suit more to have iron reinforced legs

#

Need to figure out a recipe to represent that though

#

slab_bslab_bslab_b
gold_ingotairgold_ingot
iron_ingotairiron_ingot

could work

#

but iron blocks instead of ingots, and gold nuggets instead of ingots

#

and ofc archwood slabs

radiant depot
#

Or a mod that make cauldrons become block entities with a tank

#

And even the turret only take lava from cauldrons, not water

#

Part because the cauldrons are hardcoded weird stuff and part because there's the urn

mossy hollow
#

is this my model or yours

#

like 0.1 pixel height difference

gentle minnow
#

can i add/remove access to certain glyphs based on some arbitrary data?

#

i want to write a few origins addon stuff for my pack

#

one is limiting spells based on origin

zealous zenith
#

You could with a custom spell validator

gentle minnow
#

what do those do

zealous zenith
#

you could disable the ability to cast or add a glyph to a spell

#

they give warnings in the book when making spells or casting

gentle minnow
#

can i remove them from the book too?

#

from being selected even

zealous zenith
#

it will grey them out with a warning

gentle minnow
#

ok that works

#

how do spell validators work

zealous zenith
#

see the StandardSpellValidator class for the examples

#

though its not very addon friendly at the moment, you will need some mixins or reflection to add your own

#

alternatively you can deny spell casting using the SpellCast event, but you won't get any info in the book

shadow helm
#

@mossy hollow :

public ArcaneApplicator() {
        super(defaultProperties().noOcclusion());
        this.registerDefaultState(this.stateDefinition.any().setValue(BlockStateProperties.WATERLOGGED, false).setValue(TRIGGERED, Boolean.FALSE));
}


    @Override
    protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
        super.createBlockStateDefinition(builder);
        builder.add(BlockStateProperties.WATERLOGGED);
        builder.add(BlockStateProperties.TRIGGERED);
        builder.add(BlockStateProperties.FACING);
    }


    @Nonnull
    @Override
    public BlockState getStateForPlacement(BlockPlaceContext context) {
        FluidState fluidState = context.getLevel().getFluidState(context.getClickedPos());
        return this.defaultBlockState()
                .setValue(BlockStateProperties.WATERLOGGED, fluidState.getType() == Fluids.WATER)
                .setValue(FACING, context.getHorizontalDirection().getOpposite());
    }

gotta register it, have it as a createBlockStateDefinition, provide defaults and if it is about facing handle it in getStateForPlacement, too

mossy hollow
#

Ah I think I missed the create block state definition, ty

shadow helm
#

I do that too. Every damn time until I remember it being a thing and cursing myself for forgetting and Minecraft for being so damn imperative and annoying

mossy hollow
#

How can I check if a class has a method? For example Mob has the method mobInteract but it's protected, but children of that class often have it public, but I don't want to check every child

#

I'd usually instanceof Mob, but that doesn't work because it's protected, I need to check if it has the method publicly

radiant depot
#

try a reflection

zealous zenith
#

Why not instanceof the class?

radiant depot
#

maybe better than a mixin/AT in this case

zealous zenith
#

You want the override call?

mossy hollow
#

there's a lot of various children classes, so instanceof would be a lot

hollow coyote
bright shore
#

isn't that compat as opposed to a full addon though?

hollow coyote
#

right

bright shore
#

I mean, might still fit I'm not really sure lol

#

it is neat though

mossy hollow
#

Is there a way I can render a label using widgets instead of directly using minecraft.font.draw?

mossy hollow
#

I ended up building out a plain text label widget

#

good ole off by one errors

mossy hollow
#

@rugged urchin Apologies for the ping but do you happen to have templates for glyphs of each type? Like Method/Form, Effect, etc.?

zealous zenith
#

the example addon does

mossy hollow
#

ah perfect

mossy hollow
#

Is there anyway to modify the cost of a spell with a caster or other type?

shadow helm
#

I think there's a spell cost event? Not sure if I remember that right though

mossy hollow
#

Doesn't seem like it unfortunately, only way is through curios currently

#

and that's just flat discounts

#

Ah you can add a discount to a spell in a caster

mossy hollow
#

Alright, I have two artifice methods currently, I probably want to make one more before I do an initial release

mossy hollow
#

can you tell what this is?

rugged urchin
#

someone plummeting

bright shore
#

doesn't make sense as a book method so I'm guessing it's a trigger for the ring?

#

probably either when falling tick or on hit the ground tick

mossy hollow
#

Yeah, it's a falling tick trigger, after falling a configurable distance

gentle minnow
#

is there an easy way to add a player-specific bonus to specific glyphs?

#

e.g +1 damage to harm

zealous zenith
#

the SpellDamageEvent.Pre lets you adjust the damage

#

you can check which effect it is currently on by checking the SpellContext in the event

gentle minnow
#

hm

wanton ivy
#

Hey you guys think it's worth updating mods to 1.18.2 then 1.19.2, or should I just skip straight to the newest?
I mean, are there more people on 1.18, or 1.19?

mossy hollow
#

I believe people are mostly on 1.19.2

#

But could be worth checking download stats

radiant depot
#

If only curse had more detailed stats

#

From what i know, 1.19 mainly have direwolf and atm

#

And very likely some other bigger pack in the brewing

#

While 1.18 have the more established packs

wanton ivy
#

Well I guess I can make a quick stop on 1.18 before heading off to 1.19

#

Sheesh, 1.20 is closing in fast

radiant depot
#

Yeah, we might need to poll requested Api changes soon

#

Current needed changes are mostly clean up of overloaded deprecated methods.

hollow birch
#

I am not sure if this is necessarily the right place to ask this, but I am trying to make a datapack for the Origins mod with a power that modifies the damage of Ars Nouveau spells. Is there any one attribute like minecraft:generic.attack_damage for Ars Nouveau spell damage? Or a list of the attributes somewhere, even?

radiant depot
#

if your version have attributes, they will appear as suggestions of the /attribute command

#

1.16 have none, 1.18 only mana max and regen, 1.19 a bit more

hollow birch
#

Running 1.19.2, I didn't even consider doing that, kinda new to messing with this stuff. Thank you.

mossy hollow
#

How does one make a dynamic recipe? Where the output changes based on the NBT of the input item

zealous zenith
#

A custom recipe type

#

Look at the dye or spell book recipe

mossy hollow
#

Can I do that with the imbuement chamber recipes?

#

I want to edit the output item based on the pedestal item NBT

zealous zenith
#

Not without magicking the recipe into the chamber I think

#

The apparatus lets you

mossy hollow
#

yeah but that consumes items 😦

zealous zenith
#

The apparatus lets other addons register their recipe type, I don’t think the imbuement does but it could

mossy hollow
#

Time to make a PR 😄

radiant depot
#

@rugged urchin @gray sluice do you what the hell is happening here?

#

i can't really figure out where mc finds the background for the leaves in "fast" settings

calm storm
#

Есть русские?
помощь нужна сильно не понимаю что делать
с магическим зеркалом

calm storm
#

I really don't understand what to do with a
magic mirror how to impose glyphs on objects.

shadow helm
#

#faq
Put the mirror on the scribe's table and shift rightclick with the spell you want to inscribe.

Only Effect & Augment glyphs though, no purple forms like self or projectile , the mirror gives you a free self

calm storm
#

cheers thanks

radiant depot
#

so now it should blend better

#

or at least have less eyesore from far away

zealous zenith
#

neat addon idea potentially

wanton ivy
#

Epic socks! I like.

astral lantern
#

I haven't checked 1.19.2, but in 1.18.2, runes are not visible from below.
Was that ever changed?

radiant depot
#

no

#

it's probably because they can have some z-fighting when the texture is flat and textured on both sides

astral lantern
#

Could make for some interesting tunnel traps. Visible rune on the ground, and when they try to jump over, they trigger the one above. This could make for some funny vids... Lol

rugged urchin
#

You can't see them from below?

#

Feel like Bailey might have the wrong render mode on it

zealous zenith
#

u

radiant depot
#

umh, could also be that

radiant depot
#

ok no, it's not that

#

unless you need to change it to translucent

#

cutout didn't change anything

rugged urchin
#

I think we usually test all of the modes because we can never remember what each one actually does

#

might be translucent

rugged urchin
radiant depot
#

well, if they updated

#

now the rendertype is in the model json for forge

#

not hardcoded

rugged urchin
#

There was an update this week but i didn't look at it super close

#

Just saw that GIF recording should finally be fixed which would be so nice

mossy hollow
#

I solved my item model issue, I just bundled an extra model for the conjoined block model

flat spindle
#

Are there any methods to change the spells of a entity to nothing?

flat spindle
#

probably not what I need

mossy hollow
#

What exactly are you trying to do?

flat spindle
#

hmm, I think I just found a nicer solution

#

thanks for your time

mossy hollow
#

Alright

radiant depot
#

I was wondering a thing for 1.20

#

Omega started the propagator naming since it was the first. But is there a better naming for it? Is "Propagate X" misleading or not?

#

I was thinking it could be cool to rename it, something like Continuum

#

but idk

mossy hollow
#

I think Propogate makes more sense then Continuum and it's easier to join into a word

#

Like X Continuum sounds okay-ish

#

but not as clear imo

radiant depot
#

As long as people understand what it does, since it's a common question how propagate work

mossy hollow
#

Yeah but I don't think Continuum clears that up

radiant depot
#

"Continues as" sounds better to me than "Propagate to/as" but only because i'm not an en speaker

#

that's why it's just an abstract wonder

#

while remaking the props for NEG

#

ok, probably using chain after orbit is better

#

yeah, that was the least damaging combo