#General & Development Help
1 messages · Page 12 of 1
also use the better instanceof checks instead of manual casts
if (a instanceof Type newName) {
newName.xyz()
}
Trying to make my "domain entity" place down a shell of blocks. Then have the domain entity check the blocks within it's area and check to see if any have been broken and remove any from other domains with a lower "refinement"
basically your domainEntity is null
usually thats what it means unless you explicitly set it to null somewhere
ty ty got it working
What would be the best way to make a block not targetable by break?
break? as in unbreakable or the break glyph ?
break glyph
Want it still breakable by hand
or at the very least have it require a couple amplifies (4-5)
Pretty sure there's a block tag
This is the first alpha release, feel free to test it out
To show how it's used:
https://docs.neoforged.net/docs/misc/updatechecker/
NeoForge provides a very lightweight, opt-in, update-checking framework. If any mods have an available update, it will show a flashing icon on the 'Mods' button of the main menu and mod list along with the respective changelogs. It does not download updates automatically.
Alpha for a reason, mostly because I don't know what CF count as optional
SSL error, will have to investigate
Alright, it's working again now
this may be a bit of a dumb question, but is there an attribute in the main ars nouveau mod (1.20.1) that is a spell resistance attribute? the addon im working on has cataclysm integration planned and i want to give the bosses some spell resistance if possible
I dont think so
The warding thread doesn't check the forge tag?
I recall setting the tag for most spell damage sources
Someone I know is looking to commission serverside utility mods (plugin equivalent mods: commands, chest GUIs, shops, etc.). They've spent about $3k on commissions so far, no idea how many mods that's split over. They would require the mods stay private, no source code available, ARR, etc.
If anyone would be interested feel free to send me a message.
surely most of those already exist?
probably mostly fabric though
i blame the lack of an updated (neo)forge port of https://github.com/Patbox/sgui
Is it hcker?
I know he’s spent a chunk on that kind of stuff for ATM10 already
Fabric does have more of a serverside mod ecosystem yeah
Yeah it is
Made me glad to see that he knows what a good coder is worth, when he told me he was sinking a few thousand into hiring devs.
@bailey is there anything you would change in terms of how ars nouveau code is organised ? Speaking purely based on layout and not coding practices like OOP coupling
oh this question is for everyone not just bailey. I want to ensure i dont make any obvious mistakes in terms of architecture
When you say layout, you mean purely how files are clustered into different java packages/namespaces?
Yes
What I've seen mostly is to cluster them based on what kind of file they are. So blocks go together, items go together and so forth.
I would have loved to do a kind of feature-based architecture, making related files live together - for example if you have an EffectGlyph that spawns an entity, and that entity has some helper class exclusive to it, you'd put them in one package.
But this doesn't work to me because you would be forced to cluster files at some point, whether for textures, models, or even mixins, you can't do it in this way.
No that's horrible for mc modding in practice, if you mean spanning across different types (item, entity, rendering etc. all in same folder)
Just name them the same way and use the ide search features
There might be a breaking change in package layout with the addition of nuggets, the library bailey is moving stuff to, but we are in the middle of the version
There shouldn't be useless refractors now
Since the codebase is big, few classes could have a bit more grouping in the future tho
ive never felt like a modded codebase really has a winning format, its all annoying lol
the best you can do is common/client/api (if you intend to support addons), but more often than not your common becomes a dumping ground
then you have blocks and tiles, which feel like they should be nested because a tile belongs to a block, but now you have a million files in one top level folder and have to scroll in your IDE forever
fortunately it doesnt really matter how you do it initially because you can just drag the files and folders around and its like it never happened, unless you have addons
Can't figure out what I'm doing wrong 😭
Literally just copied what I did with another projectile entity
the constructor doesnt match the signature that it is expecting
check setCustomClientFactory method's signature
this.customClientFactory = customClientFactory;
return this;
}``` Hmmm
my other entity looks the same, just not sure what it could even be looking for that one would have and the other wouldn't
I'm dumb
I had another constructor in the middle of my entity domain class

Is there a way to check if an entity is in a certain gamemode?
how do you create a custom event? (neoforge)
extend one of the event classes and fire it on the event bus
should you post in neoforge/game bus or create a custom bus for your mod
just use the neoforge one
nope
cool! thanks!
it uses magic class instance magic
I am stuck in a weird problem. I am working on ocultas and created an event that is fired whenever an entity processes an item
but how do I differentiate between entites that are in a jar or not
A mob jar?
yeah
What do you need the event for?
that event is for occultism side of things. its an event that is fired whenever a crusher finishes a task and generates a result itemstack. i made the event so that I can capture the result and pipe it somewhere else
what do you need the reference to the entity for?
can you just fire a non-entity version of the same event?
thats not the problem. I need the location. say i want to automatically pipe the result to a chest next to the mob jar
Can’t you just fire it with the blockpos then? There is no server side entity to reference with the mob jar
Or is this an event occultism provides
i made the event. so thats fine (working on a pr)
blockpos is fine but can a mob and block take the same space ? if yes, i guess that would be problematic
Technically yes, like the vex
Bailey, you should use my mod-manifest for Ars
bonus is that if you ever release another modrinth update, it'll tell people they're outdated when you release to CF
Anyone had any problems with GeoItem? Specifically the renderer. I'm registering it like this:
@Override
public void initializeClient(Consumer<IClientItemExtensions> consumer) {
consumer.accept(new IClientItemExtensions() {
private BlockEntityWithoutLevelRenderer renderer;
public BlockEntityWithoutLevelRenderer getCustomRenderer() {
if(renderer == null) {
renderer = new MyCustomRenderer();
}
return renderer;
}
});
}
But I'm never seeing it call getCustomRenderer, am I missing some piece? (Forge 1.20.1)
Ah, seems I was missing a field in the item model json
gonna work on improving spellbook ui (like i did with controle) as a PR
Improving how?
autofocus and a few other things
currently fixing the glyph display first though
right now if there are no forms, there will be empty space at the start of the book
basically everything in here #addon-announcements message
and a bit more maybe
id like to have a way to split a spell and insert an empty space at the split
alternatively maybe shift+num to insert rather than replace
i might end up making a breaking change wrt. the way spells are constructed since i had bugs doing it the "normal way" with controle
ended up doing this
not necessary
had to refactor to charTyped and now this doesnt work
it reads the symbols rather than the number
dont think theres a reasonable way to get it working
lol im making the pr i talked about in #archived-1-21-testing and i was trying to come up with a branch name
i wrote "feat/amethyst-golems-break-into-homes"
maybe i should call it "feat/amethyst-golem-burglary"
oh wait theres something else
amethyst-golem-tweaks ig
While you're there, do you want to look into the buggy AI trying to run away all the time?
ive already taken a look a while ago, didnt see anything too suspicious but ill take another brief look
I got another bug report of it yesterday
im fairly sure its actually not just amethyst golems
ive seen mob crowding in vanilla mobs for just about forever
maybe we should just have a way to sit them down
well i do have an idea of how to try to mitigate it at least
just need a good enough distribution
yep fixed it
How did you fix it?
@Override
public float getWalkTargetValue(BlockPos pos, LevelReader level) {
if (this.getHome() == null) {
return super.getWalkTargetValue(pos, level);
}
double distance = pos.getCenter().distanceToSqr(this.getHome().getCenter());
// Encourage amethyst golem to stay within 10 blocks of its home.
// See 1/max(10, x) on a graphing calculator.
return (float) (1.0D / Math.max(10, distance));
}
oh wait thats so wrong
shouldnt be squared distance
ill just bump 10 to 100
But doesn't it have the return to home goal?
apparently its not good enough
Are we able to improve that goal?
probably just bumping priority
fixed the formula, doesnt look too different tbh
goes a bit further on average compared to before
That's good then
honestly id even say maybe the return home goal could be removed
https://github.com/baileyholl/Ars-Nouveau/pull/1546 will probably need some help with finding potential bugs
already found one
fixed that
i havent tested all the glyphs but blink, pickup, and exchange are the 3 im most concerned about and they all seem to work
does place block/break work as well?
yes and yes
wall and linger also work
for anyone who wants to test yourself, your projectile needs to be sensitive for it to teleport through portals
for copying those values over in changeDimension, is that because its technically a new entity being created?
honestly i just copied what i did in controle because it didnt work without
didnt try minimizing it though
i know at least the spellresolver copy is necessary
otherwise the new entity has a null spellresolver and it dies on the next tick
minimized it
pierceLeft doesnt need copying
everything else there does
oh and deltamovement doesnt either
think i might as well undraft the PR
i think thats my record on open PRs to ars :p
3 concurrently, almost 4 but bailey merged /ars-dropless before i did x-dim stuff
https://github.com/baileyholl/Ars-Nouveau/pull/1547 and thats the fourth concurrent PR lol
hm on second thought, this makes 
useless
yeah it literally isnt used in the code after this change
not sure how best to resolve that though
could make it amp change the default tool i guess. make the normal default an iron pickaxe, then diamond, then netherite
Drafts don't count 😛
i undrafted it after the realisation haha
whats your thoughts on this? since you currently do something with amps in ATAG
Need to actually read through to code to understand what it does. I'm currently using my wife's hotspot because dumb engineers took down the internet for the whole neighbourhood
rip
Will try review once I have internet back
but what the code would technically do is obsolete your amp shenanigans
just have an allthemodium pickaxe in your inventory
honestly im not against completely removing d?amp in break
there would still be a benefit in using
, that being instant mining and not using durability
ok i did the default tool thing, now its ready for review
always happy to remove amps though - i think its more balanced
then again, amplify does cost exactly 1 diamond pickaxe
What's the usecase for using items from inventory?
Nah allthemodium blocks fakeplayers breaking it
enchantments mainly
im fairly sure the intended way right now is to hold your tool in your main hand and offhand your spellbook, but if the block is tagged with mineable_with_pickaxe then you end up with a normal diamond pick
@radiant depot how did you render items on tooltips?
I recall you doing it some time back
I found your PR
im not allowed to drop a jar in #addon-announcements am i
curseforge and modrinth are gonna take a while considering how fresh this is
oh also because holidays are a thing rip
Make a github release and link it
good idea
nvm its approved on cf
How should I add an augment to a spell within a spell projectile after that projectile has been spawned
specifically to a projectile or to just spells in general?
I wanted to make a method that creates a type of projectile that adds amplify instances based on how long it was alive before resolving
recipe.addAll(this.spellResolver.spell.recipe);
recipe.add(AugmentAmplify.INSTANCE);
this.spellResolver.spell.recipe = recipe;
iTime = age;``` tried this and similar stuff in the tick method but I keep getting: ```Caused by: java.lang.NullPointerException: Cannot read field "spell" because "this.spellResolver" is null```
are you doing that on the client side
This is an interesting class com.hollingsworth.arsnouveau.common.util.EasingManager almost not changes since file creation
What even are quarts
I think quart is short for quartic, like t⁴
quadratic, cubic, quartic, quentic
English sure has a lot of names for the same thing, maybe we should call it fouric and fivic
i have vastly underestimated how slow github actions is
got it working
well, it failed partially last run
but its basically working
(publish workflow)
Don't think GHA's are inherently slow, but can't speak on behalf of the publish action itself
slow cpu + cpu intensive task (gradle builds) = bad time
Oh yeah. Iunno if you can get some caching for gradle builds, I only have experience with that for npm/yarn/pnpm
Oh yeah. Iunno if you can get some caching for gradle builds, I only have experience with that for npm/yarn/pnpm
greenest my github profile has been since i started my internship lol
a lot of stuff are in private repos though
you can use a larger runner, you just have to pay for it
@ashen grail do you know if there are differences between AE2 pattern providers' different forms? full block and part form
is the way they handle ItemHandler Capability different ?
the obvious difference is that full-block pattern providers give that capability with a null direction (meaning from all sides) whereas the cable parts provide it only with the face of the cable they're on as the Direction context
hence querying any such capabilities with a null context isn't enough since that won't pick up any instances of that capability provided on any specific sides, only omnidirectional instances of the cap
for that reason currently (or at least previously to now) the capability lookup for Source-handling blocks doesn't work for any cable parts since Ars only ever looks it up with a null context and can only pick up full-block devices as a result
shouldnt the direction be flipped when queried ?
i don't think so, normally the direction to provide is supposed to be the face that it comes from
so in the case of cable parts, the face of the cable bus that they're attached to
if the item inventory is supposed to be accessed from the north face or equivalent, then that direction should be passed as the context and then used for lookup
thats confusing, so if A wants to query B, do we check for A's direction towards B or B's?
B's towards A
so it does need to be flipped cool
in that sense, yes
in that case, ars code is wrong line 32
d is not flipped
though Direction in general is absolute and not relative so, again, look for the face of B that B provides the cap from
in this case, yeah, flipped if the lookup is done from A sitting against B
i've had a few pints so apologies if i'm not clear or repeating myself too much
nah its all good. thanks!
@zealous zenith does this seem correct to you ? flipping the d on line 32 should fix sided blocks
if yes, I will send in a PR
there was a Direction::getOpposite method for this, right?
Yeah
This maybe^
right now it is passing direction A -> B but we instead need to check if the B exports a capability towards A (B ->A)
hm so if an inventory was north, it would be checking for a capability in that north position also to the north?
yeah opposite makes sense

been stuck here for a bit
Error: HttpError: 500 (Internal Server Error, {"error":"file_hosting_error","description":"Error while uploading file: S3 error: Error while uploading file to S3"})
yep modrinth issue
71s lol
And this is likely why Ars is not updated on Rinth the same way as curse
are you sure? I uploaded it just fine
found a thing https://misode.github.io/modrinth-delay-estimator/
review time averages 4 days and 14 minutes rn
use build cache
feels great
any idea how I could make a structure check? something like nether portal
ah, you mean BlockPattern.BlockPatternMatch ?
oh there is something like that?
You may take the iron golem as example, look into the carved pumpkin class
this looks like but this seems to a fixed pattern
What do you think I should do for a more flexible size of portal
At that point you go into custom territory
And you can simply take the best algorithm for the task I think
like what ? iterating over blocks ?
portals have a portal helper file
Look at the warp scroll code, just don't copy the horizontal one
Yeah I going through the code now that bailey mentioned the helper
I was kinda lost about where to look
nether portal code is ancient apparently and not worth referring according to neocord
it works fine if you just want portal logic
First and foremost, thanks for all the work you did on Instrumentum 1.21 Alex.
Second: Is it just me or are codecs as clunky as they look to me?
they probably are, but what do you mean exactly?
No specific critic, just annoying to read
oh sure, it's the main reason people hate them regardless of usefulness
Nah, I love codecs, they're so much easier to use and read for the most part
The errors are the worst part by far, the ide errors are worthless and the runtime ones are even worse
like copy pasting the 10 arg codec function so you can make an 11 arg one 
Is this you using the AbstractCaster codec?
I had to extend it for All-The-Arcanist-Gear, got a pretty nifty trick using composite streams codecs
codecs are so freaking cool but god they are pita to debug
my main problem is they are no longer sequential as in control flow is hard to track
Can anyone think of a good reason why someone would NEED more than a couple
on a
spell?
We’re having an issue with people using
x8 to zip around at Mach 5 and causing server issues.
Not really no
same reason why people need spells that do millions of damage
My 7.5m spell still doesn’t one shot some enemies
but that would definitely one shot my machine
Nah. It’s just a standard Gatling
Not doing the weird cold snap multi propagation shenanigans
pretty happy with my release workflow if anyone wants to look https://github.com/Vonr/Ars-Unification/blob/master/.github/workflows/gradle.yml
inspired from jarvas but fairly modified to suit me
it triggers when i create a new tag and uses that tag for the version
and also generates a changelog from the previous tag up to the new one
im surprisingly happy with ars unifications code quality now
maybe a bit too much abstraction
ars technica code is uhhh it's hmm don't read it
How are .geo files generated? Is there a way to make an armor model in blockbench and then export a .geo.json file?
Yeah blockbench + geckolib plugin
the export option isn't showing up for me. Looking into why rn
thnx tho
I got it
any idea how I can multiblocks? I need them to share a blockentity
Check out advanced ae quantum computer
oooo
but i am scared of ae2 code
okay the addon code is easy to understand to an extent
Multiblocks are a mess, everyone has its own implementation
And no, there can't be an Universal api for it
https://spark.lucko.me/6ixsSBMaf4 profile with about 5000 falling mageblocks
really hard to optimize it seems
i made a small improvement in ColoredProjectile by caching the color
but it was never really noticeable
i have no idea what the hell google's UnmodifiableIterator$hasNext is doing to be that slow
wonder how it does with lithium
not much better
Any compsci people able to tell me the name of something?
I want something like an inverse debouncer, where it does something on first call and then has a cooldown until it does it again, no matter how many calls it receives in the meantime
Is that still a debouncer? Just different trigger?
I need something that forwards all BE calls to the master BE
Save a reference to the master BE in the proxy BEs on assemble or scan everytime
i am worried whether that approach would be expensive
Depends on what the BE does and how often
Saving a reference would be the cheaper one
Even just the blockpos
okay will do that
I would say that this thing you are talking about *contains *a debounce function but is not on its own a prue debouncer
Maybe the closest term is something like throttled action executor?
Has anyone made higher level thread slots beyond tier 3?
Feel like that could be a pain to get working with the table but who knows. Maybe it isn't that bad
Jarva was investigating it but has been fighting the table for it, yes
@mossy hollow any advice on how it went?
Just an idea I would want rn. If it just breaks too much I may just make curios
All it needs to get working in making the rendering on the alteration table dynamic, however I suck at rendering
I have a janky version working, but need to fix it up
hmm, I may give it a shot. I'll probs save it for last then
was kinda what I was thinking. If you could just make sure no armor piece has over 3 slots just have it display the values of those three slots
hmmmm orrrrrr
I get lazy and make a "advanced alteration table" which only deals with tier 4-6 slots
That's the plan, but I need to get it rendering
Advanced Alteration Table is the alternative, but I don't like the idea
me neither but I get lazy
i asked for a more custom support at the genesis of the alteration table
bailey was just like bugs bunny
lol
Alex you any good at rendering?
i may be good now, still far from god
one day i'll have enough insanity to look into the shader stuff
but maybe enough sanity to rely on lodestone
lodestone is voodoo magic
need a bit more details on the problem btw
well, idk if this joke is unintended since Malum
i frequent the server just to see what crazy stuff people have been cooking
not intentional lol
it's a library cooked by many people that really delved a lot into it
i wonder if Fufo had a sudden stop or they just paused updates on it
how do I set the value of master on each blockentity? iterating over on the blocks?
I dont think we get have access to blockentity constructor do we
Well, it's rendering text, how hard can it be? (for you)
(for me it's very hard, not the rendering, but the positioning)
What do you find hard in positioning ?
getting it in the right place 😂
where flexbox when you need it
is your code up somewhere?
nah but I can push ti
I've gotten it closer since, but I don't have a screenshot of that
I'm gonna want to devour that code if you get it working 😔 🙏
What's your thread plans? I'm making some for All The Arcanist Gear
just making armor sets that go up to tier 6 and wanted to make some with better thread slots to go along with them.
Was gonna make the best set have a tier 6 slot which would only have the "six eyes" thread planned for it rn
Ah, ATAG goes up to tier 6 if you're looking for comparable scaling
What's six eyes?
hotswap until you make it
Ah yeah I don't have hotswap setup
six eyes would effectively be two free levels of the "spell efficiency" glyph and you don't suffer the drawback from the glyph. (Which now inflicts a debuff that halts mana regen based on how many spell eff glyphs you used)
that would probably help
and also remember that the order of the transformations will heavily affect how they are applied
got a link to set it up?
if you're using IJ you simply run debug and there's the option to rebuild and hotswap
what did you have in mind for higher level threads?
only thing that may be needed more than standard setup is Build Tools -> Gradle -> set the run with Idea
it's quite likely I've probably clicked "don't bother me"
there is also single file hotswap plugin
ooh
it should be reloading only the affected files by default
it has something to do with reloading all associated files and just a single file
I havent used it but thats what other people suggested
never had any issues with hotswapping speed
even on laptop
still infinitely better than not hotswapping at all
I do think the armor set should do more than just bump number of threads
not sure what though
It does in ATAG
I started an ATM10 playthrough. I guess I will see how it feels
but it's inline with Allthemodium+ stuff
those are just raw stat boosts right?
It's primarily just stat bumps, the higher level threads are for things that I don't want accessible pre-ATM
There's a few more things like damage immunities
Unobtainium armor is immune to drowning, kinetic, fire, dragon breath, wither, levitation, and fall damage
Wild
Creative Flight, Health Boost, Truesight (blindness/darkness immunity + nightvision), Reach and Shielding (operates like mekasuit but charged with source)
call it Sourcefield
Ooh, I quite like that
I am in cross with OP armorsets like ATM ones. at one side, being strong is good but it also becomes boring
They're hopefully introducing stronger bosses soon, currently yeah it's too strong
before ATG, i didnt like the fact you had to abandon your armor if you want to progress in the pack
but I want Ars to be equivalent to the best in the pack
because it helps people want to get into it, rather than knowing they're going to abandon it in like 2 days
ATM 6 was extremely bad. all the armor stats were stupid. like 500 armor some BS like that
and they had a dimension where they would insta kill you if you dont have their armor
Was gonna make a creative flight thread as well tbh. Was gonna make it a tier 5
Yeah that's not good, ATM10 is much better in that regard
Yep
Can maybe introduce it as part of the shared addon library that @radiant depot was talking about
especially with addons. I think irons also has their counterpart
It does yeah
I def won’t be making stuff that op from the sounds of it
please please call it source library
or Arcane Library
considering the mess it might be to move the common code, it may slide to 1.22 (coded before mc update drops but adopted for the 1.22 addons i mean)
but i might be understimating a smart refractoring with the power of a modern ide
@mossy hollow would you be adding ATM alloy gear as well?
not sure what the use case is lol
I'm not keen on the idea, but people have asked for it
is ATM10 1.21? I'd be keen to try and sneak arsplus in there again after I update but I don't really want to have to make a 1.21 version
Yes 1.21
sad
I don't really want to have to make a 1.21 version
why
ehhhhh I like 1.20.1 and at this point I feel like I should just wait for 1.22
I've heard it's a pain to go from 1.20.1 on
some stuff of ATG is in 1.20.1 too
it will be much worse to go to 1.22
mmmm but then I only have to do it once
¯_(ツ)_/¯
ATM10 is 1.21, but ATAG is in ATM9 and ATM10
Spellbooks are 10 only though
I'd also warn you, I'm not sure they're adding new ars mods, it took a lot of convincing to get NEG added
i believe they meant simply adding it to their atm instance
eh idrc, my last version was in ATM9. Moreso just thinking for people if they want it so it's there for them
Like for your atm9 instance?
I meant having a version available for ppl who play ATM10 and try and get it in eventually
Ah right
How do I make my ide hot reload? I have it launched with debug, how do I do the rebuild and hotswap?
click the hammer icon to the left of the configuration name
but youll most likely need to set up jbr for your jdk
cant believe you made additions without this
note that it cant do everything though
schema changes wont work
so stuff like adding/removing methods
adding classes
removing classes of course
I made everything without it
Additions, Artifice, ATAG, everything I made for base Ars or Origins
right click on code while debug is active should show an option to reload and hot swap
poor crab got left out of the party
@radiant depot how easy/hard would it be to add book thread support to an item?
Main obstacle is the
@Override
public boolean validForSlot(PerkSlot slot, ItemStack stack, Player player) {
return super.validForSlot(slot, stack, player) && stack.getItem() instanceof SpellBinder;
}
which i guess could be moved to a tag check
if the item is yours, you'd have to copy over the thread support first then the custom resolver stuff
if the item is a 3rd party then it's likely a mess
I'm guessing there's no way to make a generic UI for bookthread slotting?
Would have to be an inventory
it uses the alteration table at the moment
a UI without a block would be possible, but that predates the table and the decision making
Ah right, I assumed it was a spellbinder UI, still not fully familiar with it
@mossy hollow trim on atag doesnt look any different
Yeah, I have no idea how trims are implemented
i guess its because of geckolib
vanilla models just work with the tag probably because it has the layers in place
Still think a set of armor that was completely invisible, except for trims, could be fun
Even if just for the cosmetic slots
so basically you want trims? lol
I want trims on my clothing/skin
Skin trims
Make it enchantable too, so players can choose to have the glint (+quark color glint)
If it's specifically for cosmetic slots, then armor value can just be leather gear
Hmm. So. There's a mod that allows you to make vanilla armor invisible, but still shows trims. 1.20 only though
I have a art/dev question, related to the staff I posted in Ars Additions.
I'm using a 128x128 texture because I was basing it off the spellbook, but that texture is much larger than it needs to be, probably 90% of that texture would be empty.
Dev question: Does that have big performance implications?
Blockbench question: If yes to the above, can I somehow easily switch to e.g. a 32x32 texture, in a way I don't have to manually move all the UV boxes around?
you can resize and "optimize" (and i quote because sometimes it breaks the "use same uv for multiple cubes to save space" and duplicate the texture bits) by selecting the texture then the button to create a new
if it can manage to squish the texture in a smaller power of 2 it should
regarding performance, yes there is an impact when there are a lot of textures like that
but you will never get it to be noticeable to the point of the legendary Extracells Walrus
if you had to make 16 textures instead of using the render-time coloring, it would have been way worse
in practice all the textures are stitched together in a texture atlas that is always loaded in ram
it is pretty funny looking back at it though
tbh i doubt its even the worst offender
theres probably much worse textures in modern mods
yeah corail causes me great lag
tbh i like the mods mechanics though
past just the graves
which i do think are the best implementation ive used
apart from keepInventory lol
The concepts are fine but I think it's less a grave mod than it should be due to all the other content
It's more like what Eidolon could be
Unsure if Elu or Corail come up first
Hoping to start diving back into Elemancy in the next couple of weeks. Which file(s) has the code that checks for spell schools for purposes of alternate effects with foci.
And is it possible to do a statement of IF “X” OR “Y” THEN <execute code>?
alternate effects?
for the latter, ```java
if (conditionA || conditionB) {
// code
}
Like earth focus enabling gravity to work as a black hole
ah seems like something i missed in https://github.com/Alexthw46/Ars-Elemental/pull/88
well alex hasnt merged yet
so great time for me to do that
Oh, if you’ve already done that it should cover what I was asking
So I guess my next thing to tackle is figuring out why the Elemancer armor texture isn’t loading
btw how does this work?
need to test it lol
I think. It says in the focus description in the notebook
ah alex already did something equivalent so i guess i have to do a new pr
I’ve used it to great effect in duels. Fought a server admin to a standstill because I was able to hold them in the air with black holes
that breaks everything else
the change to use resolvers was not a choice
it's either that or book threads can't exists
im very confused
ah i get what youre saying
ill just inline the original check to do it properly then
i already did that once lol
private static boolean checkSchool(SpellResolver resolver, SpellSchool school) {
LivingEntity caster = resolver.spellContext.getUnwrappedCaster();
IItemHandlerModifiable items = CuriosUtil.getAllWornItems(caster);
if (items != null) {
for (int i = 0; i < items.getSlots(); i++) {
ItemStack stack = items.getStackInSlot(i);
if (stack.getItem() instanceof ElementalFocus focus && focus.getSchool().getId().equals(school.getId())) {
return true;
}
}
}
return false;
}
oh wait that doesnt check subschools
hm nope
im looking at how neg does it
turrets and neg tweak the resolver's has focus
tbh this might be something that needs changing in base ars
subschool has always been more or less neglected
for now i guess i can do something weird
you could add an alt method that checks tags instead of match item i guess?
but i'd say just use a mixin to wrap the calls in an OR with the respective foci
i think ill just add a || at the end of all the <elem>Check methods
that seems to be the easiest way forward
ok i did it in a way i think should work
https://github.com/Alexthw46/Ars-Elemental/pull/90/files lmk if you think it would still break
How hard is it to setup something similar to how starbuncles pull from a database for different variants?
Had the idea to create a "Mysterious Mage" mob that would have different colors and spells that I could add to a database as a thank you to people and let them have a variant with their choice of colour / spell
it just parses a json file from github, you can just copy the rewards file
and hook up the event
k thanks, I'll try and see how that's setup and see if I can do something similar
...Alright, I'm gonna need someone smart for this one
So I'm working on getting the community "mage" mob setup but ran into an issue. Is there a better way of building the spell for the mob than just parsing the string and doing a switch statement with a case for every spell component?
check out how caster tomes do it
I started looking at rendering libraries/mods and i am impressed and confused simultaneously
Is there a way to merge a client value with the server value? ``` public void mageSpawn() {
RandomSource randomSource = this.level().getRandom();
if (!CommunityMages.mages.isEmpty()) {
try {
this.setIndex(randomSource.nextInt(CommunityMages.mages.size()));
CommunityMages.ComMages communityMage = (CommunityMages.ComMages)CommunityMages.mages.get(this.getIndex());
this.setColor(communityMage.color);
this.setName(communityMage.name);
this.setCooldown(communityMage.coold);
this.setSpellData(communityMage.spell, communityMage.color);
} catch (Exception e) {
e.printStackTrace();
}
} else {
this.setColor("white");
this.setName("Oops");
}
}``` This works great except that the color used for the entity texture is randomized seperately from the name/spell/cooldown
Set it from the server side and use a packet to set the color
ty (time to learn what a packet is)
Would you know any good examples of this?
Is it set on spawn or after?
I set it after right now
I set it on the first tick
Is the thing saved on an entity data field?
(for example the drygmy & co.)
Since that one should sync for example
https://github.com/AdamRogres/AdamsArsPlus/blob/master/src/main/java/com/adamsmods/adamsarsplus/entities/custom/MysteriousMageEntity.java no but maybe I should look into that
not fully up-to-date with my WIP but that was the last "good" version
I have a multiblock with one of those blocks as the master block controlling the behaviour. because of how the BEs are constructed, storing a reference to the master is kinda annoying
i am using a nullable field and setting it manually after
but this means for every call I have to do a null check. got any suggestions to improve this ?
I also dont like the fact that I will have to have a separate field to store if it is a master block or not
getting a wierd error ```Caused by: java.lang.NullPointerException: Registry Object not present: ars_nouveau:fire_essence
idk why it would have anything to do with fire essence
Is it in your datagen?
When I run my runData yeah, I only changed my ArsProviders file but I can't find what it could be
Datagen you need to declare existing resources, if it's not in datagen it's probably due to not including the ars dependency properly
Check how All-The-Arcanist-Gear does it
has 1.20.1 and 1.21 versions
Yeah I don't see anything I could really check against
found it
What I get for using clement as an example again lol
Any debugging tips for non-working mixins? I had a problem early on that no mixins were being loaded because of refmap issues, I think I was just missing 'remap = false'.
But now it's another issue, all mixins are working, even with runClient, but my mixins for runes are not working when the .jar is compiled.
@Mixin(RuneBlock.class)
public class RuneBlockMixin implements IWrenchable {
@Inject(method = "use", at = @At("HEAD"), cancellable = true, remap = false)
public void useWrench(BlockState state, Level worldIn, BlockPos pos, Player player, InteractionHand handIn, BlockHitResult hit, CallbackInfoReturnable<InteractionResult> cir) {
ItemStack stack = player.getItemInHand(handIn);
worldIn.playSound(null, pos.getX(), pos.getY(), pos.getZ(), SoundEvents.BAMBOO_HIT, SoundSource.BLOCKS, 0.25f, 1.0f);
if (stack.getItem() instanceof RunicSpanner) {
UseOnContext context = new UseOnContext(player, handIn, hit);
InteractionResult result = onWrenched(state, context);
cir.setReturnValue(result);
cir.cancel();
}
}
@Inject(method = "tick", at = @At("HEAD"), remap = false)
public void testThing(BlockState state, ServerLevel worldIn, BlockPos pos, RandomSource rand, CallbackInfo ci) {
worldIn.playSound(null, pos.getX(), pos.getY(), pos.getZ(), SoundEvents.BAMBOO_HIT, SoundSource.BLOCKS, 0.25f, 1.0f);
}
...
This test part I added for tick is not even working, so it's as if the mixin is just not loading at all. But I do see it in the final jar, alongside the other mixins 🤔
is the refmap set in the mod files?
It just looks like this?
{
"mappings": {},
"data": {}
}
That seems to work for all the other mixins
in the modid.mixins
for example
"refmap": "ars_nouveau.refmap.json",
if it's empty it's likely because you don't have anything to be remapped
the other mixins work or no mixin work at all?
if you override a vanilla method, remap should be true (it is by default)
ohhhh that's probably what i missed then! let me try that
if you override another mod, it should be false since there is no remapping needed
i dunno if the remap is a bit legacy thing for neo, but forge surely still need
neo work on deobf code, while forge has it obfuscated
the nice thing about it is that in theory in neo the crash reports shouldn't have the methods written as Item.af3455n()
That did the trick
That does sound nice. I'm half looking forward and half dreading the conversion to neoforge haha
theorically Create will do most of the dirty work
and you will have to adjust to them
updated the example addon to act as a small port guide btw
uses MDG instead of NG, i prefer it tbh
Thanks a lot, I bookmarked it
i'm making another mixin for being able to modify the cooldown of relays, though i'm starting to wonder if this is a good idea or if i'm just doing it wrong
@Mixin(RelayTile.class)
public class RelayTileMixin implements IRelayTileModifier {
@Shadow
private BlockPos fromPos;
@Shadow
private BlockPos toPos;
@Shadow
public boolean disabled;
private static final Field LEVEL_FIELD;
private static final Field POSITION_FIELD;
static {
try {
LEVEL_FIELD = BlockEntity.class.getDeclaredField("level");
POSITION_FIELD = BlockEntity.class.getDeclaredField("worldPosition");
LEVEL_FIELD.setAccessible(true);
POSITION_FIELD.setAccessible(true);
} catch (NoSuchFieldException e) {
throw new RuntimeException("Failed to access BlockEntity fields via reflection", e);
}
}
I have to override the entire tick function because the cooldown check is hardcoded within it, and that function also needs BlockEntity fields like level and worldPosition.
Maybe for 1.21 I can make a PR to Ars Nouveau to encapsulate the cooldown check into its own function, but I think for 1.20 there's not much point right now.
Ohhh I can target the specific line to override with INVOKE. Mixins are crazy...
alternative to access the methods of the superclass that are not overridden in the target is to make the mixin abstract and extend the superclass of the target
since level() and worldposition() methods are there
but you may have in the mixin itself the be entity to call it
I found I could do it with Redirect instead like this, no need for the reflection
@Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;getGameTime()J"), remap = false)
private long redirectGameTime(Level level) {
if(level.getGameTime() % 10 == 0) {
return 20;
}
return 1;
}
with mixins on the battlefield you're very unlikely to resort to reflections
Redirect is bad, it causes conflicts if any other mod tries to redirect the same function
I pray no one else will modify that then, the alternative is rather nasty
yeah Mex basically adds the alternatives to redirect that stacks with other's in a way that doesn't conflict
it's bundled in ars and in neoforge
you just need to add the lines to use it in your env in 1.20 i believe (1.21 has it by default)
Nice, wrap operation works. I already had it in my build properties actually!
portable ritual brazier is working :D
need model and textures though so its not seeing the light of day
How does it work?
shit ton of mixins
Oof
need to refactor it a bit to store uuid
bigger refactor than expected because the client doesnt have a GameProfileCache
umh? the gameprofiles seemed cached to me while experimenting with allies names
new names take a bit to be recognized but existing ones are fast fetched
how are you storing it?
the only instance of GameProfileCache im seeing is in MinecraftServer
maybe im blind
i could create my own of course but that sounds like a bad idea
I use the skull tile code
ah yeah i think thatd work
is there a way to change the username and uuid in dev env
dont think "Dev" with uuid 380df991-f603-344c-a090-369bad2a924a is real
There would be a launch argument
programArguments.addAll '--username', secrets.getProperty("username") ?: 'Dev', secrets.getProperty("uuid") ? '--uuid' : '', secrets.getProperty("uuid") ?: ''
In the client block you can add this
Replace the secrets with the literals or add a secret file
I could add that block to ars so we can test diff users
unfortunately for me that doesnt work because i use mdg lol
It's still kinda fitting for the PR
ill just test on a random instance
Just look at the 1.21 branch instead of 1.20?
They should be using mdg
yippee
What would be a good way to check if the entity collided with a block for the first time
first time ever?
right now I am using entityInside() triggers every tick the player is colliding with the block. I want it to trigger only the first time it collides with the block
if the player steps out and then steps back in, it should work
Yeah its mine
removing stale ones is the problem. should I set a timer or what
ah wait, is it for item entities?
player
#off-topic message
trying to optimize the system when the player walks through the portal
seems a tile entity, so yeah you can set a timer easily
but what if the player is stubborn and doesnt move out of the portal lol
the entityInside would keep resetting the timer?
you just need the list miss to happen as a trigger
if the entity's uuid is already in the list you simply retweak the value
Map<uuid, timer>
if !(map contains) -> do your thing once, then in any case map.put(uuid, maxtimer)
then in the be's tick for each entry of the map you tick down
for the first time possibly ever, another one of my mods has overtaken NaNny in daily downloads
unification popping off
AllTheMoney
not actually in ATM unfortuantely :p
it did get into craftoria though
thats the main bump for sure
NaNny i think is still being carried by RAD2 which is 1.16
which is insane to me
RAD2 has a long tail, apparently
So this thing didn't work with WrapOperation after compiling, only with Redirect and remap set to true
Could it be because I'm using a beta version?
implementation(annotationProcessor("com.github.llamalad7.mixinextras:mixinextras-common:0.2.0-beta.8"))
implementation("com.github.llamalad7.mixinextras:mixinextras-forge:0.2.0-beta.8")
What are you injecting into?
Can you send the full mixin?
also, make sure you jarjar mixin extras
dependencies {
compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:0.4.1"))
implementation(jarJar("io.github.llamalad7:mixinextras-forge:0.4.1")) {
jarJar.ranged(it, "[0.4.1,)")
}
}
PSA: For documentation upgrade you will need to add
compileOnly "com.hollingsworth.nuggets:nuggets-neoforge-1.21:${nuggets_version}"
pick the version from
https://maven.blamejared.com/com/hollingsworth/nuggets/nuggets-neoforge-1.21/
I didn't see a download so the lib was probably pulled
But wasn't added to compile classpath
gonna be on vacation for the next week, hope no one breaks my addons :p
Have a great vacation!
We would never!
Holy.
Big update Senate, nice!
ty ty 
you should post some images :)
probably will later
I know the mysterious mages are floating. But I love the idea of them being giants
Yeah, probably could've taken the time to build something cool for them, but I just elected to take the ss on my barrier test area lol
they might be giants
the first armor is so freaking cool! I love it!
luckily no overlap with my armor concepts
still no work on it, worked on the biomes in this winter break
but will there be 12 sets ?
pretty sure will end up in commission them because they're probably not a simple design to pull
yeah...
wasnt goo supposed to redo how sorcerer and battlemage armor look for base ars
because most people just used arcanist anyways because wizard hat cool
idk but a small restyle is likely needed
the battlemage could be actually leveraged in its semplicity to use a vanilla armor style
so it would be compatible with trims
but for sorcerer it surely won't go in that direction
(i mean, it's a random idea i had recently and not a discussed one)
i dont think it will be enough for people to consider it though
the elemental armors would strife away from base design a lot unless the artist manage to keep an ars vibe to it, i barely manage to imagine a good way to fit it in mc style
it needs some sort of ability or mechanic. say battlemage had some sort of extra magic shield
at least the heavy ones, the light ones should be easier
I think you should not make 12 sets and stick with the current 4
so you cant be arcanist and elemental mage at the same time
but you'd be a glass cannon, a balanced or a warden of that element
shouldnt that be tied to the mastery system
i read that wrong and now i'm confused
elemental medium is basically arcanist with an hue slapped on it on hurry and i didn't got around redesigning the details because i planned to make the other variants at some point
and ok, i'll keep them with very minimal changes because they're iconic
but since hexblades i want to make four cool sets for the elements, which would be the heavy variants
if it were me, I would have made the elemental types be specializations on the same level as the existing 3 and add a gimmick to all of them. like battlemage get shields, pyro can have innate heat
it's more of a need of art cool, not a gameplay need
My vote was for the sorcerer to switch from a collar/down hood to a circlet. And have the circlet be changeable with trims
Glad you like it. This was my first time modelling so I was just kinda trying things as I went
Between Jarva’s ATAG, this update to Plus, and the revamp to Elemental armors, I think I might go ahead and kill the Ars Elemancy project.
Maybe we can work on integrating some of the Elemancy ideas into ATAG
I would be okay with that. I like the idea of dual element specialists, and I would really like to see dual foci. (I like the idea of being a storm mage - i.e. Tempestmancer)
Might be best if I can just focus on artwork/modeling anyway since Qther has been doing most of the heavy lifting with coding anyway.
Plus, writing the book will be eating most of my time right now anyway.
why though? dual specialization seems cool
Would someone be able to help me with smth
It always worked fine in my test enviroment
Because I feel like it’s going to be overshadowed with all the other armor options getting added, and I’m running into a wall as is with further development due to my inexperience with coding.
It just feels like my time and effort would be better spent in other areas that aren’t already being covered: expanding on creatures by remaking Fauna for 1.21.1, working on better models for the existing content, and I would like to get a good Ars-centric modpack “on the market”.
And I want to get the D&D book done in a reasonable amount of time as well.
but I noticed that when I started my server I got:
19.01 02:37:46 [Server] main/ERROR Entity adamsarsplus:summoned_skeleton_m has no attributes
For every entity
Would someone know why this would be the case?
Seems to have trouble registering the entity attributes, but it always worked in the dev enviroment
pls
how are you registering the entity attributes?
public static class RegistrationHandler {
@SubscribeEvent
public static void registerEntityAttributes(final EntityAttributeCreationEvent event) {
event.put(AdamsModEntities.RYAN_ENTITY.get(), RyanEntity.createAttributes().build());
event.put(AdamsModEntities.CADE_ENTITY.get(), CadeEntity.createAttributes().build());
event.put(AdamsModEntities.NICK_ENTITY.get(), NickEntity.createAttributes().build());
event.put(AdamsModEntities.CAM_ENTITY.get(), CamEntity.createAttributes().build());
event.put(AdamsModEntities.MATT_ENTITY.get(), MattEntity.createAttributes().build());
event.put(AdamsModEntities.ADAM_ENTITY.get(), AdamEntity.createAttributes().build());
event.put(AdamsModEntities.MAGE_ENTITY.get(), MysteriousMageEntity.createAttributes().build());
}
}``` This inside my mod entities class
https://github.com/AdamRogres/AdamsArsPlus/blob/master/src/main/java/com/adamsmods/adamsarsplus/events/ModEventBusClientEvents.java This is what I was trying
Yeah nothing seems wrong in them
whats the full error
Just checked the crash report and it may be smth else
I changed where the the attributes were supplied and I didn't get the errors. Looks like the animations were the issue?
Not sure where to go from here
Never had any issues with it on me or my friends pc
For some reason it's different on a server
says it couldn't initialize the class. Is there something I have to do on setup?
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.NoClassDefFoundError: net/minecraft/client/animation/AnimationDefinition$Builder [in thread "Server thread"]
you are trying to load the animation on the server
that class is client only
hmmm k
@neat mango I love you. TYSM I don't know how long that would've taken without you
If you ever want a custom mage I'll make it extra special 

No crying. Chonky is looking into my remaining issues and may get it working yet.
If he can get me past the current hurdles, all that is left is the dual/quad bangle artwork and recipes and it will be good to go. And then I can focus on new textures for the armor models.
I’m not going to just destroy the work already done regardless.
Okay good
In the meantime, I need a good name for the modpack I’m making
Is there a common cause for a Block having the 'wrong' block entity?
I tried for quite a while now, but I don't see what I'm missing... I can see that the block's returning the right object:
@Override
public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
var tile = new PreciseRelayTile(pos, state);
return tile;
}
But it's still showing the regular Relay Tile here in game after I try to replace it:
public void handleWrenching(Level world, BlockPos pos, Player player) {
if (!world.isClientSide) {
BlockState oldState = world.getBlockState(pos);
BlockEntity oldBlockEntity = world.getBlockEntity(pos);
CompoundTag oldNBT = oldBlockEntity != null ? oldBlockEntity.saveWithoutMetadata() : null;
PreciseRelay newBlock = BlockRegistry.PRECISE_RELAY.get();
BlockState newState = newBlock.defaultBlockState();
newState = copyProperties(oldState, newState);
BlockEntity newBlockEntity = new PreciseRelayTile(pos, newState);
world.destroyBlock(pos, false);
world.removeBlockEntity(pos);
world.setBlock(pos, newState, Block.UPDATE_ALL);
world.setBlockEntity(newBlockEntity);
if (oldNBT != null) {
newBlockEntity.load(oldNBT);
}
newBlockEntity.setChanged();
}
}
I can see that the block is indeed an ars_technica:precise_relay but if I get the data of it, it says ars_nouveau:relay for it's id, so I assume it didn't replace properly?
Any chance the constructor of the tile used is wrong?
And it's using super of relay that uses relay's block entity type
You got exactly what the problem was, thanks so much again Alex!! I should buy you a coffee some time...
Caused by: java.lang.ClassCastException: class com.adamsmods.adamsarsplus.item.RegularItems cannot be cast to class net.minecraft.world.item.crafting.Ingredient (com.adamsmods.adamsarsplus.item.RegularItems is in module [email protected] of loader 'TRANSFORMER' @1015a4b9; net.minecraft.world.item.crafting.Ingredient is in module [email protected] of loader 'TRANSFORMER' @1015a4b9)
Ran into this error when I try and put items from my mod into an anvil in the repair ingredient slot. Any idea what's going on here?
RegularItems extends ModItem
import com.hollingsworth.arsnouveau.common.items.ModItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
//credits for code go to: https://github.com/dkmk100/ArsOmega/blob/37c9ba1d9c76ccde893ca12a8987bf4bdc9e4ffa/src/main/java/com/dkmk100/arsomega/items/BasicItem.java
public class RegularItems extends ModItem {
boolean showEnch = false;
String name;
public RegularItems(Properties p) {
super(p);
}
public RegularItems(Properties p, boolean showEnch){
super(p);
this.showEnch = showEnch;
}
@Override
public boolean isFoil(ItemStack s){
if(showEnch){return true;}else{return super.isFoil(s);}
}
}```
RegularItem Class
https://github.com/AdamRogres/AdamsArsPlus/blob/master/src/main/java/com/adamsmods/adamsarsplus/item/armor/MageMagicArmor.java and the armor class
where are you casting to an ingredient?>
🤷♂️
https://github.com/AdamRogres/AdamsArsPlus/blob/master/src/main/java/com/adamsmods/adamsarsplus/item/armor/Materials.java Might be the repair material I set in here?
I know not what I do
casting is the wrong tool for most scenarios
main exceptions are when working with mixins or erased generic types
if youre doing instanceof you can put a name java if (level instanceof ServerLevel serverLevel) { // ... }
safer way to do it
casting is perfectly fine for something that you know extends a given class but if it's ambiguous then yes, you're better off with instanceof pattern variables
What's ticking entity mean?
it just means an entity caused an error, but the real error is in the stacktrace
java.lang.NoSuchMethodError: 'void com.hollingsworth.arsnouveau.common.spell.effect.EffectKnockback.knockback(net.minecraft.world.entity.Entity, net.minecraft.world.entity.LivingEntity, float)'
mismatching version with ars nouveau
ahhh
@radiant depot are you planning on updating Eidolon? Or is it abandoned now?
yes, even talked about it a yesterday
Ah I didn't see
Can you ping me when it's updated? I have some interested modpack makers
I need to somehow pull a last update for 1.20 then i can think of doing a sprint port
#general-and-help message
Have let them know, it's for an ATM pack
has anyone ported their addon to new docs yet?
need a reference lol - especially if gradle stuff changed
im not seeing a way to even add my own docs without mixins tbh
PacketInitDocs#onClientReceived calls Documentation#initOnWorldReload which isnt extensible afaict
ah im supposed to use the doc events
or am i
it doesnt seem like i get much access to anything in those events
looks like alex has done it in elem
will refer to that
there is an event that is fired
Cannot invoke "org.apache.lucene.ars_nouveau.search.IndexSearcher.search(org.apache.lucene.ars_nouveau.search.Query, int)" because "com.hollingsworth.arsnouveau.api.documentation.search.Search.searcher" is null 
might be my fault
think the NPEs im causing stop the search from initializing
id like to be able to add search tags with a higher priority
my use case is wanting my portable brazier relay to show up if you search Ritual and also before all the tablets
right now i can add the search tag, but the portable brazier relay ends up in the middle of the tablets
using withSortNum doesnt seem to help much
its nothing major so ill release it in this state but it would be nice to have
Search uses the lucene weighting so sortnum won’t apply there
Elemental have docs on GitHub
now controle does too
heads up on instrumentum port, the apparatus datagen is borked because it's not doing the save that the super call would do
does anyone know how to draw lines that dont get occluded by blocks
trying to my stuff (prism + linkage) show an outline of its target through blocks
ive stolen PantomimeRenderer's box drawing but that gets occluded
currently have
public static void renderBlockOutline(PoseStack poseStack, BlockPos pos) {
var mc = Minecraft.getInstance();
var level = mc.level;
if (level == null) {
return;
}
var state = mc.level.getBlockState(pos);
var shape = state.getShape(level, pos);
poseStack.pushPose();
Vec3 projectedView = Minecraft.getInstance().gameRenderer.getMainCamera().getPosition();
poseStack.translate(-projectedView.x, -projectedView.y, -projectedView.z);
poseStack.translate(pos.getX(), pos.getY(), pos.getZ());
RenderType lineType = RenderType.lines();
OutlineBufferSource buffer = mc.renderBuffers().outlineBufferSource();
VertexConsumer lines = buffer.getBuffer(lineType);
var color = ParticleColor.defaultParticleColor();
LevelRenderer.renderVoxelShape(poseStack, lines, shape, 0, 0, 0, color.getRed(), color.getGreen(), color.getBlue(), 1.0F, false);
poseStack.popPose();
}
as in draw on top blocks? (z-level)
you need to draw them in a different stage. preferrably last
use RenderLevelStageEvent and ensure the stage is after something like TRIPWIRE_HOOK
yeah this is TRIPWIRE_HOOK already
or rather AFTER_TRIPWIRE_BLOCKS
also tried AFTER_LEVEL but that breaks it
Yeah after
AFTER_LEVEL is too early
use this as reference
this is what draws the orange outline around EIO travel anchors
if you want models, its right about it
that doesnt look correct
@SubscribeEvent(priority = EventPriority.LOWEST)
public static void onRender(RenderLevelStageEvent event) {
if (event.getStage() == RenderLevelStageEvent.Stage.AFTER_TRIPWIRE_BLOCKS) {
for (var task : QUEUE) {
task.fn.accept(event.getPoseStack());
}
}
}
meanwhile enderio has
@SubscribeEvent
public static void renderLevel(RenderLevelStageEvent event) {
ClientLevel level = Minecraft.getInstance().level;
LocalPlayer player = Minecraft.getInstance().player;
if (level == null || player == null || event.getStage() != RenderLevelStageEvent.Stage.AFTER_TRIPWIRE_BLOCKS) {
return;
}
//...
Yeah
seems roughly equal to me
copied the render type from https://github.com/Team-EnderIO/EnderIO/blob/c71b73ce103f2b37896e013510c94cd32b0151a7/enderio-machines/src/main/java/com/enderio/machines/client/rendering/travel/OutlineRenderType.java#L61 and it still doesnt work xd
show me your whole code
ill push it to a branch
i assume you mean Minecraft.getInstance().renderBuffers().bufferSource().endBatch(); but that doesnt seem to fix it
ive also tried using Tesselator
that just didnt work at all
thanks for the help btw
pushed the new stuff too
think its a bit more minimized but still have no idea why it isnt working
no
you are using minecraft's outline buffer. if you look at our code, we dont do that
eio's buffer is just doing
public VertexConsumer getBuffer(@NotNull RenderType type) {
return Minecraft.getInstance().renderBuffers().bufferSource().getBuffer(OutlineRenderType.get(type));
}
``` though
seems equal
also eio calls minecraft.renderBuffers().bufferSource().endBatch(); https://github.com/Team-EnderIO/EnderIO/blob/c71b73ce103f2b37896e013510c94cd32b0151a7/enderio-machines/src/main/java/com/enderio/machines/client/rendering/travel/TravelAnchorRenderer.java#L157
gosh rendering is suffering
endBatch is for the font and models stuff
I havent looked at this code for a year now and I am feeling a bit lost. was a hard day
let me go ask someone
conduit facades also use a similar system. maybe check that
that might be a bit more complex
neocord has a lot of people who can help you with rendering if you ask
i searched the history and the only success ive seen was due to a bug lmao
#1116211620415283201 message
ive also tried replicating it and it doesnt work
tesselator idea from someone else was also tried and it just did nothing at all
how do people typically draw new items?
I guess i don't fully understand how the textures work for mc, unless adding modded blocks uses a different system to apply styling
It works the same as a texture pack does for the most part
Well Fauna has some spawning issues, but it’s up and running in 1.21.1.
Artillery will need some fixes for recipe types to get it working again
Stumped why Artillery recipes aren’t working now
Also, how do I make a datapack to disable mob spawning of a particular mob?
recipes changed to recipe
That didn’t fix it.
The items show up in JEI/EMI, and can be spawned in via creative, but the recipes don’t show up and they can’t be crafted normally.
what recipes are those?
The turret crates and runestones for Artillery
No I mean the recipe type, also were those datagenned or handmade?
Cause probably the small format change in the result breaks the handmade
While datagenned just need a rerun and it's a self fix
They are handmade - some crafting table, some enchanting apparatus. And I’ve gone in and manually edited them, but clearly have missed something.
Swapped the order of some stuff around and it seems to be working.
Does Google know what it is talking about here, or is it spouting gibberish?
They usually show their source at the bottom don't they?
I don't think domobspawning lets you specify mobs though?
that's just a bool
because otherwise you could just run that command on the console
pretty sure it's hallucinating
I'm looking to disable the Lost souls from Forbidden and Arcanus from spawning for the Expeditions pack
that's just the vanilla gamerule that controls whether any mobs can spawn at all
plus I think the datapack would have to have something to tell it to run that command
and there isnt a config option to turn them down or off, so i will need a datapack and dont know the formatting
They are likely adding it using a biome modifier
they spawn EVERYWHERE
So probably have to override theirs
Another option is using InControl
It's a mod to adjust mob spawning
ah...space between the words...curseforge search isnt very user friendly in that regard
curseforge search REALLY isn't friendly lol
time to tinker with mob spawns...
Check the ATM10 github, they've just done this
Using a datapack
For some reason I was under the impression that they were closed source. Think my brain was mixing up their “all rights reserved” licensing with being closed source.
Okay, so I added KubeJS to the pack, then replicated the forbidden_Arcanus code that supposedly disables the lost souls, and…nothing. They are still spawning everywhere.
What am I missing?
anyone know of a good way to check block if a block is visible to the player? doing some more performance optimization stuff
8 raycasts would work but would probably be slower than just rendering the block
this isnt for every block - for now im looking at mob jars
i could do a raycast per tick i suppose
that is what i did
Could always check how block entity culling works in sodium etc.
hello! Im trying to get higher tier thread slots on allthemodium arcanist gear or increasing the base stats of the archmage gear from adams ars plus but cant seem to figure out anyway of changing those values
The ATM+ Arcanist Gear scales up with each tier, it's not possible to change it from a config.
hmm
you could try to put it on #1019639765093589153
It's been implemented for the next release of ATAG (being able to configure the thread slots)
ATAG?
All The Arcanist Gear
ohhh
i like arsTMᵗᵐ
Yo. I'm making a plugin for mcreator that allow users to code in mana use into their items and stuff
I'm trying to sync changes made by calling methods such as setmana, addmana, and remove mana
But I'm not sure what to do since I'm calling these from the api inside ars nouvea
Can anyone here help?
(Worth noting to any person not aware. Mcreator isn't a minecraft server or mod it's a mod generator that allows lesser experienced modders mod java. It works similar to visual coding or block coding)
leme send the tester code real quick
im coding this for 1.20.1 forge
again my problem is none of the changes im making sync to the game, the second anything happens to the user all the changes revert back as if no change was made
am i missing something here?
(it worth noting i have already made the api that imports ars nouvea into mcreator)
example
you need to sync it
sounds like you are only changing it on the client side, in which case you need to send a packet to server. there should be a helper method somewhere
let me take a look at the soruce code hold please
ah ok
cant help you much. we dont really support mcreator here.
yea i know that
thats why im making support for it lul
all i gota do is code it manually then i can put into procedures and stuff, its just like a regular IDE right now
might as well just use a regular IDE
yea but thats not so much of an option for people who can't use the ide version of it (just another way of saying they don't want to learn propper minecraft coding)
mcreator just breaks down the code into a simpler way for people to understand
it also breaks down