#1.20.5/6 Snapshots

1 messages Β· Page 9 of 1

digital drum
#

we should probably

wild pine
#

just a fyi, i updated to use the pr-publishing branch and this is still an issue for me in userdev

blazing valve
#

I am still updating AE2 before I'll be able to get to this. So probably within a day

wild pine
blazing valve
#

Yes, which else πŸ˜…

elder swallow
#

finally, all tests pass πŸ˜„

elder swallow
#

It's highly non-trivial to allow RegistryFriendlyByteBuf packets in the config phase

slow prism
#

why do we need to again

elder swallow
#

we don't need to

#

it's just that in theory the registries are already synced and it should therefore be safe to use RFBB

#

the other thing is that you can't do anything that requires RFBB in the config phase

#

(for example: sending Ingredients or ItemStacks)

slow prism
#

hmm, trying to clean up those FML changes i made for locators.. and i'm trying to decide if i should return a securejar or a path from the locators

elder swallow
#

I'd prefer a path but of course there is still some filtering in dev atm

#

well technically a SJ is more flexible

elder swallow
#

ok I just added a check to make sure that only synced registries used RFBB

#

and guess what...

#
Cannot use ID syncing for non-synced built-in registry: ResourceKey[minecraft:root / minecraft:recipe_serializer]
stiff galleon
#

shouldn't that be synced

elder swallow
#

1.20.4 uses RLs

#

1.20.5 uses int IDs

#

good call @blazing valve on adding this check really

#

(or well... on giving me the idea for it πŸ˜„ )

blazing valve
#

One less footgun

elder swallow
#

yup

#

another one: Caused by: java.lang.IllegalStateException: Cannot use ID syncing for non-synced built-in registry: ResourceKey[minecraft:root / minecraft:attribute] πŸ˜…

blazing valve
#

Hah.... Oh... no. Item.TooltipContext has no access to the level?

#

That's a problem πŸ˜„

elder swallow
blazing valve
#

We need it to get the RecipeManager

elder swallow
#

mojang added MapItemSavedData to it and they didn't think of providing a proper level isntead?

blazing valve
#

You get registries, tickRate and map saveddata πŸ˜„

elder swallow
#

that's so fucking stupid πŸ˜„

slow prism
elder swallow
#

it's easy enough to build a SJ from it?

#

but yeah I suppose SJ would be clearer when reading the code anyway

slow prism
#

on the contrary, sjs are sometimes created with automatic service infos

elder swallow
#

btw maty can we do the SPI merge first?

slow prism
#

but only if they're a mod..

elder swallow
#

ah right kekw

slow prism
#

so both sides are badℒ️

elder swallow
#

attribute sync is fucked

#

we need a solution for registries that are both synced and optional

analog ledge
#

trying to run the 24w14a builds and getting many recompile errors, is that normal? (I assume not ioa)

elder swallow
#

indeed it's not

analog ledge
#
LivingEntity.java:2524: error: cannot find symbol
                default -> throw new MatchException(null, null);
                                     ^
  symbol:   class MatchException
  location: class LivingEntity```
#

they all look like this, at the default branch of a switch

#
ItemStack itemstack = switch (equipmentslot.getType()) {
                case HAND -> this.getLastHandItem(equipmentslot);
                case ARMOR -> this.getLastArmorItem(equipmentslot);
                case BODY -> this.lastBodyItemStack;
                default -> throw new MatchException(null, null);
            };```
blazing valve
#

That sounds like it's not using J21

#

MatchException is java.lang

analog ledge
#

I'm on J21 and NeoGradle 7.0.105

#

wait, may have found the problem; one sec

blazing valve
#

I am running the same setup and don't have that problem. Do you have a tasks.byType(JavaCompile) reconfiguring compile tasks?

#

The recomp task is "user-accessible" in that way, sadly

analog ledge
#

I do, actually

#

but it has a check for if the task name starts with neo

#

to avoid that sort of error

#

let me see if I've fixed it

#

update: that's fixed

#

I have a few more problems but I think those are on my side

elder swallow
#

I probably broke vanilla compat in this latest commit - thankfully there is a TODO πŸ˜›

analog ledge
#
Exception in thread "main" java.lang.module.ResolutionException: Module unsafe reads more than one module named org.objectweb.asm.tree
    at java.base/java.lang.module.Resolver.resolveFail(Resolver.java:900)```
#

I can't launch runClient

#

???

blazing valve
#

Still porting AE2, can't really validate it yet

analog ledge
#

it keeps giving different names

blazing valve
#

There seem to be lib conflicts (?)

#

It'll error out on the first duplicate module and I think it's unordered

#

Likely the asm upgrade in one transitive dep gets put in together with asm from another

#

you can check build/neoform<something>/steps/minecraftClasspath/classpath.txt for duplicate asms if you really c are, but I'll get to it πŸ˜„

blazing valve
#

Yeah, asm 9.5 and someone bumped something else to 9.7 so we have both on the CP

elder swallow
#

shouldn't configurations prevent such duplicates?

#

@slow prism we can safely add new data component types in neoforge

#

regsync doesn't happen at all on neoforge-vanilla connections

#

of course, the client will probably disconnect if it receives a data component type it doesn't know - but that seems fine?

hexed sonnet
elder swallow
#

I think it's better for posterity to make separate PRs

maiden prairie
#

Is the history not already preserved by just continuing the branch with the next snapshot?

elder swallow
#

every time we rebase, the history is lost

maiden prairie
#

We just have to make sure we know where the squash from the last snapshot ended, then cherry-pick the new squash on top

#

ah

#

hrm

#

I feel like at that point it's better to have a separate repo to not pollute the main one with a ton of branches?

elder swallow
#

🀷 idk

prisma locust
#

we could also tag the last commit of any previous snapshot

#

the ref associated with a tag is retained even if there is no branch containing it

stray bay
#

huh, incidental thing that i hadn't noticed - potion durations in tooltips are scaled to the tick rate

blazing valve
#

Oh right, it's wednesday heh

kind sable
#

WHAT COULD THAT MEANNNN????

restive raft
#

potato part 2?! /jk

magic sierra
#

p(otato)

kind sable
#

p data driven items

blazing valve
#

enabling preview features in Java? πŸ™‚

blazing valve
#

so we can use project panama

restive raft
#

(p)re-release

slow prism
#

if itΘ›s a re-release

#

it's bad

#

means we need to hurry

magic sierra
#

1.20.4 part 2

kind sable
slow prism
#

frog

#

means a snapshot is coming

clear bane
#

hmmmm
what if
no pre
but just straight up release of 25

#

/s

slow prism
#

<@&1067092163520909374> we got a pre

blazing valve
#

preee

digital drum
#

lets go finally

elder swallow
#

Oh fuck

cloud raven
#

nice

slow prism
#

org.jcraft:jorbis

#

yes tech indeed

#

fuck

#

we need that fml pr merged yesterday

#

did you finish it

elder swallow
#

Nope

clear bane
#

what is that?

#

jorbis?

blazing valve
#

lol pure java ogg decoder

#

what πŸ˜„

elder swallow
#

I'm busy with the ingredient rewrite

echo beacon
#

weee

white frigate
#

Blog link? πŸ‘€

wild pine
white frigate
#

I still do not know how to navigate their site

clear bane
#

ok, by the looks of it, jorbis is hela outdated?

white frigate
#

I'm guessing no changes other than some bug fixes?

digital drum
#

what's jorbis?

dry stumpBOT
#

[Reference to](#1184607569629675530 message) #1184607569629675530 [➀ ](#1184607569629675530 message)lol pure java ogg decoder

digital drum
#

hmmm

white frigate
#

was the jcraft jorbis site down already or did minecraft kill it

edgy arrow
clear bane
blazing valve
#

What did they use so far?

#

stb_vorbis from lwjgl?

#

If I had to guess.... STB likely has vulnerabilities and they load ogg from untrusted sources via the server resource packs, right?

digital drum
#

whos building snowman?

dapper hornet
#

Added support for Viossa language
whats this ?

digital drum
#

Mobs that can wear equipment will now often spawn with enchanted weapons and armor

median wasp
clear bane
#

if you have the link, please do share with the class lol

median wasp
#

A lot of files just don't work

#

I have a mod that replaces the audio loader with one that uses ffmpeg

wild pine
misty crow
digital drum
blazing valve
median wasp
#

Yeah

#

It loads like ~70% of ogg files in my experience

blazing valve
#

Oh sorry, I totally read over the "all" πŸ˜„

#

as in, I thought you said it couldn't load any at all. Ok nevermind.

#

But honestly, vulns are much more likely imho since STB is not known for "security"

median wasp
#

Yeah

clear bane
#

but they went with a lib that was last updated in 2008
unless I have the wrong page

blazing valve
#

And using a pure java one means its memory safe

median wasp
#

They actually used to use jorbis

#

Back in like 1.12 and older

#

Actually they might've stopped before 1.12 even

clear bane
short cove
#

Removed Item tag minecraft:tools concern

#

Hey they changed the `` font

median wasp
#

All I know is that jorbis was used in 1.2.5, sometime between then and now they switched to stb, and now they're back to jorbis

digital drum
#

what was the excuse

median wasp
#

Apparently it's breaks_decorated_pots now

short cove
#

tho

#

that can't be the only place the tag was used

digital drum
short cove
#

someone who has access to the decomplied one see if it was a direct replacement

open kindle
#

what

#

why

digital drum
#

i have it

short cove
#

Removed Item tag minecraft:tools (overlapping with minecraft:breaks_decorated_pots)

echo beacon
#

Oozing Nerf

digital drum
#

can I just give a quick light theme alert?

short cove
#

hmm

median wasp
#

Mojang ships the Parameters attribute now apparently

wild pine
#

guess you just check if item has the tool component now, rather than tool tag?

median wasp
#

Because all the parameters just became final

short cove
#

oh ok well the tools tag was unused

#

it was just added to the pots tag

#

so it makes sense to remove it

#

tho neo may want to add one for mod reasons

digital drum
analog ledge
#

Supposedly the OGG decoder was replaced

#

with a Java one instead of native

clear bane
#

you're a bit late πŸ˜›

short cove
analog ledge
#

oh

wild pine
#

does the removal of the tools tag mean we remove the other tool tags in #1134480199937957969 ?

short cove
#

So a datapack needs to be able to say potatoes can break the pot but theyre not a tool

digital drum
#

oh this is going to be annoying

short cove
digital drum
#

ill post it there rn

#

to the PR

wild pine
#

theres a new enchantment tag for tooltip ordering, so enchantments display in tooltips in the order they are loaded from that tag
no more weird enchantment orders due to order to apply them in anvils

digital drum
wild pine
#

the Level now has a abstract potionBrewing method? is potion brewing/mixes datapacked now?
public abstract PotionBrewing potionBrewing();

finite pilot
wild pine
#

feel like i did my snowblower wrong xD

alot of my changes are param name changes and nothing else in the class
for example in Tiers

-    private Tiers(TagKey<Block> $$0, int $$1, float $$2, float $$3, int $$4, Supplier<Ingredient> $$5) {
+    private Tiers(final TagKey<Block> param3, final int param4, final float param5, final float param6, final int param7, final Supplier<Ingredient> param8) {
lean anchor
#

SOUNDING THE ALARM WITH NO LINKS

#

smh

median wasp
#

They publish parameter metadata now

slow prism
median wasp
lean anchor
#
  • The page limit in Written Books has been removed
    Oh boy. Lectern puzzles just got interesting
wild pine
#

no limit oh boy, i can already see all the broken chunks and stuff from that
having books of crazy stupid large page count

lean anchor
#

I can see someone with an autoclicker having a field day, adding pages..

wild pine
#

ooh theres a codec specificly for colors now, thats handy
ExtraCodecs.ARGB_COLOR_CODEC
deserializes color from integer/vector4 codecs using Codec.withAlt

wild pine
prisma locust
#

hmm the parameters being final is going to be fun for some patches if we ever abused reassigning them

blazing valve
#

If we want to, we can strip that attribute

#

I'd prefer if we did

#

final parameters are so noisy πŸ˜„

dapper hornet
#

noisy ? in what way, visually?

blazing valve
#

Mentally trying to read and understand the parameter list

slow prism
#

final parameters are great, you're just broken /s

blazing valve
#

I am not against the effect of it

prisma locust
#

it also makes the snowman diff noisy

blazing valve
#

It's even funnier that it might break patches if we re-assign parameters. We might have to patch it out hehehe

#

I'd suggest we add that to ART, maybe?

median wasp
#

We now have parameter names for many constructors

slow prism
wild pine
#

doesnt look to be helpful param names though, $$# -> param# is what im seeing
so parchment still goto for param names

slow prism
#

the lvt is still $$

median wasp
#

For example, BreezeDebugPayload$BreezeInfo's constructor has the following args: uuid, id, attackTarget, jumpTarget

#

This might be on only records

median wasp
slow prism
#

think it's empty for non records

median wasp
#

aba$a:

median wasp
#

So it's names we already have

edgy arrow
#

because we have those through the method names in mappings, right?

median wasp
#

Yeah, and fields

#

Though this does fix some decomp

median wasp
#

@slow prism #maintenance-talk message They are just absent

#

There's just no name

slow prism
#

yeah they can be empty

elder swallow
#

final parameters are just stupid...

blazing valve
#

So, thoughts: ART is touching everything anyway. That would be the right place to fix this?

dapper hornet
blazing valve
#

I really care more about how to strip it r/n instead of discussing philosphical pros and cons

median wasp
#

I'd say just keep it. It's in the code, and I don't really see a good reason to touch it generally

#

If a specific patch needs to reassign a parameter, then that patch can un-final said parameter

prisma locust
#

that increases the likelihood of a patch failure on updates

#

it's the same kind of problem as ATs being in patches IMO

blazing valve
#

We'll not keep it since it fucks up patches. A lot.

#

We will also need to patch the method signature if we want to overwrite parameter values in patches

#

so... no? we're not working on minecraft code, having final params has literally no value for us

#

only downsides

median wasp
#

Just make sure not to strip things other than the final-ness

blazing valve
#

*not working on Vanillas minecraft code.... you know what I mean

median wasp
#

Like synthetic and mandated params

blazing valve
#

Yes ofcourse, the entire point was to keep the other attributes πŸ˜„

median wasp
#

Those are part of the same attribute

#

It's access flags for parameters

#

So you need to keep the attribute, but just access &= ~ACC_FINAL

elder swallow
#

As in: when reading the code, the final keyword on parameters doesn't give you any insight

blazing valve
#

Alright: private Tiers(TagKey<Block> param3, int param4, float param5, float param6, int param7, Supplier<Ingredient> param8) {

maiden prairie
elder swallow
#

Lol πŸ˜›

elder swallow
blazing valve
#

i tested this locally, yes

#

Using Neoform that is

elder swallow
#

ok

#

merged

#

can we enable that option in snowblower too?

#

the latest snowman commit is unreadable

blazing valve
#

Huh is this a straight up decompile error or is ART messing up?

elder swallow
#

the param names should be p_xxx_ I think

blazing valve
#

Well yes, the LVT is patched, but is VF ignoring that when the parameter attribute table exists?
(p.s. I don't see that in javap)

#

Odd. It this limited to parameter lists that have any synthetic params? the other methods look ok

slow prism
#

check VF server, jas has been made aware

blazing valve
#

Okay, patched VF. Trying a local version now

slow prism
#

remember to send a PR if it works πŸ˜›

blazing valve
#

Yeah works

private Direction(
    int p_122356_, int p_122357_, int p_122358_, String p_122359_, Direction.AxisDirection p_122360_, Direction.Axis p_122361_, Vec3i p_122362_
) {
    this.data3d = p_122356_;
    this.data2d = p_122358_;
    this.oppositeIndex = p_122357_;
    this.name = p_122359_;
    this.axis = p_122361_;
    this.axisDirection = p_122360_;
    this.normal = p_122362_;
}
#

LOL

#

Vineflower has a test for the broken behavior

slow prism
#

that sounds like a weird TODO - fix later when we care

blazing valve
reef parcel
dry stumpBOT
#

[Reference to](#maintenance-talk message) #maintenance-talk [➀ ](#maintenance-talk message)Huh. Okay yes, I never had that either

blazing valve
#

stuff kaputt

reef parcel
#

just realized this was snapshot not #neoforge-github ...

blazing valve
#

Blergh IJ loses its VCS connection in some projects randomly after the latest update

#

And only a full IDE restart fixes it

#

VF Release is probably gonna take until next week, but I might have a suitable workaround

reef parcel
#

haven't had that, but yeah it's super buggy, terrible time to have run all the updates...

elder swallow
#

we can publish a VF fork if we want to

reef parcel
#

keep having menu panels not responding when I hover over them

blazing valve
#

There's a CLI option to disable use of the method parameter data

elder swallow
#

depends how quick jas is with the update I suppose

blazing valve
#

Well I sent a PR, but she says she'll need until next week, so I'll try this with that o ption set to false

#

Neoform on Windows is really quite annoying

#

I need to start IJ as admin for it

#

@slow prism We should probably change that to neoforged GAV, right?

blazing valve
elder swallow
#

@slow prism how do I fix this on TC now?

blazing valve
#

Delete the branch and let it redo it? Just guessing, though

elder swallow
#

Ok I think I see it

#

No we have to bump it in the TC config

blazing valve
elder swallow
#

Ok snowblower is running

#

ETA 3h30

blazing valve
#

whew

elder swallow
#

I agree with @maiden prairie, [2, 263] Generating 19w36a is really weird for progress

elder swallow
foggy steeple
#

so new branch in about 4 hours?

elder swallow
elder swallow
blazing valve
#

This is in Slot

#

They now use the latter method which does exactly what our patch did πŸ˜„

elder swallow
#

Ok yeah that's nice

#

The Slot spaghetti continues though

blazing valve
#

Okay, PotionBrewing is no longer static

#

So our patch might move, honestly, but I'll keep it as is for now

elder swallow
#

Fabric had to redo its brewing hooks a bit

blazing valve
#

Or rather, it definitely will, yes

#

Yeah it now allows for feature flags apparently to have experimental recipes

elder swallow
#

Oh

#

Why aren't these recipes datapacked yet?

slow prism
elder swallow
#

Last time it only took 3h30 on TC

#

That's how I know πŸ˜›

slow prism
#

that's a wrong statement of a fact

blazing valve
#

I have not checked any further. Anyway. all rejects done. I just restored the previous patches for now.

maiden prairie
blazing valve
#

Modified Proguard config

#

VF just doesn't handle parameter metadata with null names correctly and now those showed up

elder swallow
#

(which happened in reaction to java 21 changes)

maiden prairie
#

so did they modify the config out of necessity or? I'm confused

blazing valve
#

I think it's for us πŸ˜›

maiden prairie
#

so useful if we're stripping it all anyways :p

blazing valve
#

Well only until VF catches up

maiden prairie
#

this is something we can fix from ART is it not? Just... don't have a null name?

blazing valve
#

We could, presumably

maiden prairie
#

ART is the perfect spot to put fixes that means we don't have to maintain a forked decompiler (again)

blazing valve
#

But I didn't see any improvement with handling SYNTHETIC/MANDATED parameters either

#

For the time being, I just disabled parameter metadata again via a CLI switch that VF had, until they 1) merge the fix PR and release it and 2) do something useful with the additional metadata we get

#

I mean for 1.20.5-pre1 at least we get 0 patch changes in Neoform vs the previous snapshot that way

maiden prairie
#

so the params are still getting JAD names right

blazing valve
#

I honestly don't know how JAD names look like. I'll just say yes πŸ˜„

#

We're remapping them to SRG param names anyway. At least the ones that matter

#

They renamed the BE but not the renderer: public class EnchantTableRenderer implements BlockEntityRenderer<EnchantingTableBlockEntity> {

stiff galleon
#

no it's an enchantable renderer

blazing valve
#

Should I just push port/1.20.5?

#

Even though it references a mavenLocal Neoform? πŸ˜„

elder swallow
#

Sure why not

rigid walrus
#

I checked multiple methods and didn't see any final parameters

blazing valve
#

I believe it only affects methods that have synthetic or mandated parameters, i.e. enum ctors

maiden prairie
#

Why push something ppl can't use

#

like at the very least clone themselves I mean*

blazing valve
#

You can already see the necessary changes and once NeoForm releases just swap the version and be done? πŸ˜›

rigid walrus
#

Another thing I noticed is that they seemed to change a bunch of mandated modifiers to synthetic

blazing valve
magic pivot
short cove
#

Waitttt Util#getRegisteredName is hella useful

#

I didnt realize that was added

#

Makes it easy

#

Especially for datapack registries

foggy steeple
elder swallow
#

fuck, 137 lines of ItemStack diff this time

elder swallow
#

so that can potentially be omitted from the primer

blazing valve
#

Since the PotionBrewing in Vanilla now uses the experimental settings flag, you kinda need a registry/server/level whatever to determine if something is an output or an ingredient

digital drum
#

will a BE able to hold attachments and dcomponents in 1.20.5?

elder swallow
#

For now yes

fallen igloo
fallen igloo
#

does this even work with j21 (afaik j21 needs asm 9.7)

#

also why do we not have a kits history for the pre1 port?

elder swallow
#

cause shartte did it all on his laptop while he waited for neoform to be published πŸ˜›

fallen igloo
#

screm reading the squashed commit is pain

elder swallow
#

all these annoying line number changes harold

fallen igloo
#

yes

elder swallow
#

I gave up halfway through

elder swallow
fallen igloo
#

yep

#

@blazing valve please push your local branch to kits

elder swallow
#

I suppose he only has a single commit locally anyway πŸ˜›

fallen igloo
#

(the un squashed with the sources)

fallen igloo
#

screm I don't want to read patch diffs I want to read source diffs

blazing valve
blazing valve
fallen igloo
#

check the pins in here

elder swallow
#

I mean it's not the end of the world

#

shartte should probably apply for the mc-toolchain team πŸ˜„

blazing valve
#

But I appreciate the bullet point list style. We have to put that into a MD file in the repo, really

blazing valve
#

What is mc-toolchain responsible for?

wooden tendon
#

Mostly neoform

blazing valve
#

Ah

blazing valve
slow prism
#

since we can start working on it as an active target rather than pure porting

elder swallow
#

we should squash port/1.20.5 "one last time"

#

then rebase on top of 1.20.x

#

starting from Monday we'll have a feature freeze on the 1.20.4 branch

blazing valve
#

Yes, what I meant is, I can produce a commit history that looks like:

  • Update to 1.20.5-pre1
    • neoform bump in gradle.properties
    • reject files
    • patch files updated once for line/context realignment and removed rejects
  • Fix Patches
    • rejects removed and corresponding patch file updated
    • other patches fixed that had compile issues

If we want to have that, I can redo the fixes. But that only makes sense if we don't just squash that later anyway πŸ˜„

slow prism
#

remember to announce that

elder swallow
blazing valve
#

Alright, I'll try to make a doc on the repo similar to CONTRIBUTE.md that outlines the porting process. I am getting old πŸ˜…

slow prism
#

getting or are?

fallen igloo
#

tech you didn't ping

slow prism
#

:p

#

no reason to ping

blazing valve
#

It gets worse and worse maty πŸ˜„

#

But don't worry. You'll find out πŸ˜›

slow prism
#

shush, get back to porting

fallen igloo
slow prism
#

the patches won't fix themselves

blazing valve
#

I haven't checked Techs or Champions post yet, but this is probably something we should note. It's not a compile error to not notice this slight change in Vanilla semantics but it introduces extremely annoying bugs (data just gets lost)

elder swallow
slow prism
elder swallow
#

it's not relevant for most devs

rigid walrus
# wooden tendon Mostly neoform

Which was previously mainly just me so I never bothered making a workflow for pull requests because no one made any pull requests

digital drum
restive raft
elder swallow
#

it's only used to hold data until the BE is turned back into an item stack

digital drum
#

is there some sort of gradlescript for changing class names like the one we had for 16.5 to 17.1?

elder swallow
#

no

#

why would there be one

digital drum
#

idk

elder swallow
#

we have to redo brewing

#

I'm thinking of either subclassing or superclassing PotionBrewing

true jacinth
#

what happened now

reef parcel
#

✨ feature flags ✨

elder swallow
#

I have a planℒ️

elder swallow
#

my god why do they not use PotionBrewing everywhere concern

#

why is there still this hardcoded list of containers even though they should just be pulled from PotionBrewing

#

I bet that mojang are gonna clean this up anyway

elder swallow
#

everything goes through PotionBrewing (which is accessible from Level), and registration is done using an event

stiff galleon
#

so I would use the event to register vanilla-style brewing recipes?

elder swallow
#

this is probably going to be short-lived if mojang makes brewing recipes data packable, which their recent refactor would help with

elder swallow
stiff galleon
#

nah it's fine

elder swallow
#

I mean - really

stiff galleon
#

no I mean as long as I can still register vanilla-style brewing recipes I'm cool with the event

elder swallow
#

this bootstrap thing is how vanilla does it now - it's called on server startup and on client join

#

(the event receives the full PotionBrewing.Builder which is augmented to also support IBrewingRecipes)

stiff galleon
#

I like that!

blazing valve
elder swallow
#

yeah it's better as a separate commit

#

at least for a few hours / days for people to have a look, I suppose πŸ˜„

prisma locust
#

is there a way of forcing the PR publishing to work even if there are conflicts?

slow prism
#

no

#

but the branch wasn't rebased yet?...

elder swallow
#

Might have conflicted again

blazing valve
#

I'll do the rebase

#

This is fine until we freeze 1.20.x, right?

elder swallow
#

Yes

shut wraith
#

Sometime in the 1.20.5 port (I think?) Pack#hidden ceased to actually make a hidden pack. You might have noticed weirdness due to this. I added the fix to my PR with other resource loader fixes (which is now updated to the port branch)

blazing valve
#

Rebase pushed

magic pivot
#

So many changes, I'm still in the client package

elder swallow
#

keep in mind that I am writing the blog post too

magic pivot
#

Yep, I saw

#

There’s just a lot more than that to cover since I tend to go overboard

pine egret
#

I think I only have one recipe that does anything the vanilla builders lacks, and that's just as I do a dynamic lookup in the vanilla map rather than coding it statically (fetch the ingredient used to transform splash to lingering and normal to splash)

#

Does the builder throw if a duplicate input is added? Can this let mods override vanilla recipes?

elder swallow
#

I check custom recipes before vanilla's checks

summer furnace
#

lots of fixes today, I wonder if we are getting a pre2 already, or they will wait till monday thinkies

fallen igloo
#

probably wednesday pre2 and friday rc1

slow prism
#

i would expect something at the start of the week

kind sable
#

Yeah this is a stupid large amount of changes I would expect them to keep it marinated a bit more

magic pivot
#

Please no more changes this week

restive raft
#

I, for one, am waiting for the traditional tree refactors

#

or were they already done this cycle? I can't remember

blazing valve
#

Alright, PR is back to building, so it should be published now

elder swallow
#

I keep getting the following error in userdev:

Exception in thread "main" java.lang.IllegalArgumentException: Unsupported class file major version 65
    at org.objectweb.asm.ClassReader.<init>(ClassReader.java:196)
    at org.objectweb.asm.ClassReader.<init>(ClassReader.java:177)
    at org.objectweb.asm.ClassReader.<init>(ClassReader.java:163)
    at org.objectweb.asm.ClassReader.<init>(ClassReader.java:284)
    at net.minecraftforge.accesstransformer.TransformerProcessor.lambda$processJar$3(TransformerProcessor.java:108)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
    at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
    at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1939)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
    at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
    at net.minecraftforge.accesstransformer.TransformerProcessor.processJar(TransformerProcessor.java:104)
    at net.minecraftforge.accesstransformer.TransformerProcessor.main(TransformerProcessor.java:81)

Execution failed for task ':neoFormApplyForgesAccessTransformer'.
#

makes no sense

#

aren't we supposed to be using our version of AT everywhere

blazing valve
#

Now if it was a named configuration we could inspect it πŸ˜›

elder swallow
#

yes

#

ok apparently it was pulling an old version from my mavenLocal

restive raft
#

mavenLocal strikes again

elder swallow
#
> Could not resolve all files for configuration ':classpath'.
   > Could not resolve net.neoforged.gradle:userdev:7.0.105.
     Required by:
         project : > net.neoforged.gradle.userdev:net.neoforged.gradle.userdev.gradle.plugin:7.0.105
      > No matching variant of net.neoforged.gradle:userdev:7.0.105 was found. The consumer was configured to find a library for use during runtime, compatible with Java 17, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '8.1.1' but:
          - Variant 'apiElements' capability net.neoforged.gradle:userdev:7.0.105 declares a library, compatible with Java 8, packaged as a jar, and its dependencies declared externally:
              - Incompatible because this component declares a component for use during compile-time, as well as attribute 'org.gradle.plugin.api-version' with value '8.6' and the consumer needed a component for use during runtime, as well as attribute 'org.gradle.plugin.api-version' with value '8.1.1'
#

this error message is traaaaassssshhhhh

#

but hey at least gradle handles it for us

wooden tendon
#

You are on an old gradle

#

It gets much better on a newer gradle πŸ˜„

elder swallow
#

ok good

#

that means we should be able to safely use java 17 in neogradle?

wooden tendon
#

Yeah

#

Once I get through this round of NG work

#

I will start on that

true jacinth
#

Does that mean we can drop jabel from the eclipse launch project?

magic pivot
#

Is the ordinal change when switching on enum actually a thing, or is that something proguard or the decompiler doesn't handle?

median wasp
#

Javac generates a switch on ordinal for enums in the same sourceset as the switch

#

And the decompiler does handle it if you're using 1.10.0+

misty crow
# magic pivot Is the ordinal change when switching on enum actually a thing, or is that someth...

J21 does change how switch-over-enum works, they got rid of the synthetic array used as a switch table and instead switch on the ordinal directly now. The implication of this change is that while any switch-over-enum was previously a tableswitch, certain ones will now be a lookupswitch instead: as long as your cases cover a continuous range of enum entries (case order is irrelevant, the range doesn't have to start at zero and doesn't have to cover all entries) it stays a tableswitch. If you have very small holes you still get a tableswitch with additional fake cases. If the holes get large enough, then you get a lookupswitch instead (which is basically binary search to find the target label instead of a direct lookup)

magic pivot
#

Gotcha, that makes sense

#

It just makes it a pain in the butt to read when trying to figure out if there's a difference I should be paying attention to

median wasp
elder swallow
#

btw FBB is gonna become less friendly over time...

misty crow
# median wasp That's only if the enum is in the same sourceset as the switch. Otherwise it use...

I played around with this on Compiler Explorer since my dev environment refused to properly switch to J21, so it makes sense that I wouldn't have found that. Looking at the implementation of SwitchBootstraps.doEnumSwitch() in J17 (too lazy to check J21), that's even worse than lookupswitch, it's implemented as a linear search... It even has a fitting comment: // Dumbest possible strategy

elder swallow
#

anything that requires registries (e.g. readItem or readComponent) is gone from it

#

my imperative FBB code really doesn't like that πŸ˜„

median wasp
misty crow
#

I hope so

median wasp
#

It's actually quite similar to the synthetic class impl

#

Just indy-ified

shut wraith
#

Which is really the way to do it in this case

magic pivot
#

Welp, I'm gonna stall for a bit. Getting to the data components section and I don't want to write it up at this moment. I know tech, you wrote something for the 20.5 page. Still gonna write it up in the primer

median wasp
#

It does linearly search over guards though. So if you have cases A, B, B, and C, and you get the value B, it will check the B cases in order

misty crow
#

That makes sense, yeah

magic pivot
#

Ok wrote primer’s section on components, will do more later. Gonna try and get to the world package tonight

elder swallow
#

seems like we have no way to check if an ItemStack has an empty component patch 🀨

#

you can do stack.asPatch().isEmpty() but that will allocate if the patch is not empty

wild pine
#

is it possible to change when data component types are registered?
to allow mods to register custom default item components when building the item properties?
new Item.Properties().component(ModComponentTypes.FLUID_CONTENTS.value(), SimpleFluidContent.EMPTY) (as an example)
from what i understand this should make it so that my item always has a fluid on it
rather than needing to null check / use getOrDefault everywhere

#

currently doing this causes NPE as it tries to reference unbound holders
Caused by: java.lang.NullPointerException: Trying to access unbound value: ResourceKey[minecraft:data_component_type / apextech:fluid_contents]

magic pivot
#

Use a holder?

#

Ah

wild pine
#

public <T> Item.Properties component(DataComponentType<T> p_330871_, T p_330323_)
item properties wants the component type

magic pivot
#

Yep, I see the goof

#

Minecraft doing their bad arbitrary classloading again

#

I don't think the registry needs to be reordered. The Item$Properties just need to be updated to take in a holder and supplier of the data component value and then lazily loaded on first access

wild pine
#

yeah that does make more sense tbh

#

also would it make sense to patch DataComponents.COMMON_ITEM_COMPONENTS to allow mods to register custom common components for all items?

#

like emc for example. which is on every item, register it as a common component, then can just look up emc via the component without needing to validate it exists, either been set or its default (no matter the item)

magic pivot
#

I understood, and I don't see a reason not to

#

There's just something in my head telling me it's a bad idea

#

Don't know why though

#

Ah, well now I know, well at least currently until a patch is made to fix the null issue

#

Items are bootstrapped before the mod loader runs, so patching the common item components is not possible with the lazy access

#

And even then, I don't see much of a reason when you can just do the equivalent of computeIsAbsent

#

You can also use #getOrDefault, which already exists, so that you don't need to store a default value

reef parcel
wild pine
#

20.5-pre1

#

running on the pr published jar

reef parcel
#

strange. it's already fixed to run near the beginning of registration

stray bay
wild pine
#

was rly just using emc as example of some data on every item

wild pine
#

oh i see, its not related to registry order or item properties wanting the component type
its cause of how my util method is designed soarynPalm

im immediately constructing the item properties, which is registering the component, i should maybe make that a supplier, to delay the creation of the properties

DeferredItem<BlockItem> TANK = ApexTech.REGISTRAR.registerSimpleBlockItem(ModBlocks.TANK, new Item.Properties()
        .stacksTo(1)
        .component(ModComponentTypes.FLUID_CONTENTS.value(), SimpleFluidContent.EMPTY)
        .component(ModComponentTypes.FLUID_FILTER.value(), new ModComponentTypes.FluidFilter(Fluids.EMPTY))
);

so Item.Properties.component does work fine for mods, so long as construction of the properties is delayed to be with construction of the item

stray bay
#

...huh

#

it occurs to me that we've designed part of the item and block deferred register API around being able to eagerly construct properties

#

not terribly important, but probably something that will become less useful over time

fallen igloo
#

time to patch that in

blazing valve
elder swallow
#

Idk

#

I don't need it πŸ˜›

slow prism
#

so, i'm making a PR to add an event to allow modifying default components of items, what would be the best time to fire it thinkies one option would be during item proprs construction

#

although... unpredictable event firing locations like those are bad so maybe not there

wooden tendon
#

Would a datamap not be more suitable here?

#

Something build a priori

#

And then read in when the properties are loaded

#

Or will that not work?

slow prism
blazing valve
#

The datamap would be attached to the item, you mean?

elder swallow
#

there's not really a place to fire the event maty

blazing valve
#

The item props don't really go through our hands. You could inject in the Item ctor I suppose but whew

elder swallow
#

well not a nice one anyway

slow prism
slow prism
wooden tendon
#

Sadly then I have no idea

elder swallow
#

we have to wait for the data component registration event to fire at the very least

#

which makes me inclined to say that this event should fire after all register events

slow prism
#

that's what postreg means

elder swallow
#

ah yes

#

I'd rather replace the field

slow prism
#

yeah i'd do that too

#

but not with an AT

#

cause that's transitive for mods

#

and in a pack with 1k items the reflection will hurt

#

maybe a varhandle hmmm

elder swallow
#

AT is fine IMO

#

the field remains private

slow prism
elder swallow
#

wrapper map isn't too horrible though thonk

elder swallow
slow prism
#

which people can use to easily swap at runtime, i don't really like the idea of it

#

a varhandle could work and would be just as fast as a native call

#

or well, shouldℒ️

elder swallow
#

it definitely is as fast

#

but for modders it makes our tampering really annoying t osee

slow prism
#

meh, just throw a javadoc on the field

#

has the same affect as seeing the field non-final

#

Β―_(ツ)_/Β―

elder swallow
#

idk

slow prism
#

i would have liked a datamap tbh, if it weren't for non-persistent

#

maybe we do a datamap and if people want non-persistent then they can just mixin

#

or AT themselves or whatever

elder swallow
#

is there any non-persistent component in vanilla?

#

there's only MapPostProcessing

slow prism
#

creative_slot_lock, map_post_processing

#

neither of which matter

elder swallow
#

cursed πŸ˜›

slow prism
#

so maybe a datamap is fine

#

how does a DataComponentPatch look in json

elder swallow
#

datamap is problematic imo

#

for the simple reason that /reload won't really be possible

elder swallow
#

the default set of components is used in every item stack

#

changing it for existing stacks is not viable

slow prism
#

but how is that related to this

#

if you want a default component just getordefault

elder swallow
#

we cannot change the prototype of items while there exist ItemStack instances

slow prism
#

well yes, so a reload won't affect old stacks, but that sounds... normal

#

but sigh, recipes are loaded before datamaps

elder swallow
slow prism
#

sigh this is all so annoying

elder swallow
#

why do we need to modify the prototype of existing items?

slow prism
#

items or stacks

#

if items what does "existing items" mean

elder swallow
#

items

#

why would one need to modify the prototype of vanilla items? I don't think we allowed changing the item properties in the past thinkies

slow prism
#

because item properties affected like 3 properties

#

whereas everything is now components

elder swallow
#

although... I can imagine problems if someone extends a vanilla class and wants to tweak some components

elder swallow
slow prism
#

what if someone wanted to give an item an implicit enchantment

elder swallow
#

we have a function for that

slow prism
#

not their own item

elder swallow
#

well then they can't

#

actually no - they can using the enchantment level event πŸ˜›

#

using the component would be wrong for that anyway - don't confuse gameplay enchantments and stack enchantments

slow prism
#

people are definitely going to AT the components field to modify vanilla components. i just think it's better if we have an api Β―_(ツ)_/Β―

#

replacing tool properties of vanilla items is also something i'd consider a valid usecase for component modification

elder swallow
#

this is not different from registry replacement

#

people should just find a wayℒ️

slow prism
#

that's a flawed argument and comparison

elder swallow
#

I'm just saying that this is something people would typically have tried to use RR for

foggy steeple
#

Is this about stuff like how multiple people in past change the food value of many vanilla items or made some vanilla items now edible?

elder swallow
#

and when removing RR we said "just find a better way (possible mixins)"

slow prism
#

yes and guess what another flaw of replacement was

slow prism
#

only one person could win

#

if a mod changed one property of one item

#

and another mod changed another properpty

elder swallow
#

I never said that RR was good

slow prism
#

there's no problem

elder swallow
#

I'm just saying we never really gave a proper alternative for these cases πŸ˜›

slow prism
#

components are much more specific

foggy steeple
slow prism
#

you did it to change say the food props of an item and then you conflicted with another mod that did the same but to change the rarity of that item

#

with components both mods can coexist because

dry stumpBOT
#

[Reference to](#1184607569629675530 message) #1184607569629675530 [➀ ](#1184607569629675530 message)components are much more specific

slow prism
#

the better way here will be to public-f Item components (which is the same as ATing the food field of the item previously) and replace it, how is that a better alternative than a neo api tho lol

elder swallow
#

API it is then

slow prism
#
package net.neoforged.neoforge.registries;

import net.minecraft.core.component.DataComponentMap;
import net.minecraft.core.component.DataComponentPatch;
import net.minecraft.core.component.PatchedDataComponentMap;
import net.minecraft.world.item.Item;
import net.neoforged.bus.api.Event;
import net.neoforged.fml.event.IModBusEvent;

import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.util.HashMap;
import java.util.Map;
import java.util.function.UnaryOperator;

public class ModifyItemComponentsEvent extends Event implements IModBusEvent {
    private static final MethodHandle HANDLE;

    static {
        try {
            HANDLE = MethodHandles.privateLookupIn(Item.class, MethodHandles.publicLookup())
                    .unreflectSetter(Item.class.getDeclaredField("components"));
        } catch (Exception exception) {
            throw new RuntimeException(exception);
        }
    }

    ModifyItemComponentsEvent() {}

    private final Map<Item, DataComponentPatch.Builder> patches = new HashMap<>();

    public void modify(Item item, UnaryOperator<DataComponentPatch.Builder> modification) {
        modify(item, modification.apply(DataComponentPatch.builder()));
    }

    public void modify(Item item, DataComponentPatch.Builder modification) {
        patches.compute(item, (it, old) -> old == null ? modification : old.and(modification));
    }

    void apply() {
        this.patches.forEach((item, builder) -> {
            try {
                HANDLE.invokeExact(item, (DataComponentMap) PatchedDataComponentMap.fromPatch(item.components(), builder.build()));
            } catch (Throwable ex) {
                throw new RuntimeException(ex);
            }
        });
    }
}
#

was thinking something like that

elder swallow
#

that's not too bad but can't we build a DataComponentMap.Builder.SimpleMap instead?

#

should be as simple as

DataComponentMap.builder().addAll(PatchedDataComponentMap.fromPatch(item.components(), builder.build())).build()
#

we could also directly let users access a PatchedDataComponentMap thonk (probably not a good idea)

fallen igloo
#

we should pin component types registration to before items so we don't need a whole Holder/Supplier patch (which could get big and annoying to maintain)

elder swallow
#

yes it's already done

elder swallow
#

either DataComponentPatch.Builder or PatchedDataComponentMap in the API - then convert that to a simple DataComponentMap before replacing it in the item

reef parcel
#

I think the method on DeferredRegistry.Items which accepts an Item.Properties and registers a regular item should be changed to a supplier in the wake of DataComponents

timid frigate
#

Thanks to the new neoforge-for-snapshots-publishing, I was able to port my mod to 1.20.5-pre1 already. And I was very happy how cleanly it works now with the new GUI system. From various mixins and magic down to several event subscribers and 6 WrapOperations. I really appreciate both of these changes :)

reef parcel
#

snapshot versions are still done with local maven, right

blazing valve
#

wdym by that

reef parcel
#

like. I publish to local maven and use that, there isn't publishing by neoforge on the official maven

blazing valve
#

You can use the maven settings + artifact found in the bot comment

reef parcel
#

ah, nice. when was that set up?

timid frigate
# dapper hornet GUI changes ? What changed ?

Mojang changed the way the Gui class works by splitting things (formerly called "overlays" in Forge) into render layers. And NeoForge built upon that to fire their pre/post layer events which makes it feel very clean. And when combined, these changes make these events more useful than before, because transparency & stuff isn't set up in each layer's render function, so I can actually control it from the events.

elder swallow
#

well that's good to know

#

patching that stuff in Gui was annoying πŸ˜„

#

πŸ˜‰

#

in any case please let me know if the current layers are not "split" enough

median wasp
#

Oh is Neo not adding a way to insert your own layers?

elder swallow
#

of course there is a way to add layers ^^

#

tsss

#

you can use RegisterGuiLayersEvent

timid frigate
timid frigate
#

Everything else was perfectly separated for my usecase

elder swallow
timid frigate
#

yeah, and it's messy, because the actual icons get rendered in a batch after all the backgrounds get rendered first.

slow prism
elder swallow
slow prism
#

don't, as always

#

πŸ˜›

elder swallow
#

have you even seen the rest of the file

#

I'm not gonna prefix all of these constants by net.neoforged.neoforge.client.gui.VanillaGuiLayers.

magic pivot
#

What was that layout called again?

#

Regardless, I love it

#

Deals with all the z level nonsense

elder swallow
#

What layout?

magic pivot
#

There’s some layout or layered class that handles the z layer position. I’m pretty sure that’s what the in game gui uses now

elder swallow
#

probably LayeredDraw

magic pivot
#

That sounds right

elder swallow
#

but we completely override it in neoforge for our events etc πŸ˜›

magic pivot
#

Β―_(ツ)_/Β―

#

I would still use the class myself

magic pivot
#

Hmm, dimension-based weather may be coming

#

Mainly speculation since I saw the weather command actually get the overworld level instead of just grabbing the current level context

#

Probably just bug fixes though

boreal flint
#

probably just bug fixes

#

the weather command has been broken for years

magic pivot
#

Fair enough

#

I will keep on hoping then

magic pivot
#

Huh, container default max stack size is 99 now...

boreal flint
#

default?

#

or hardcap

#

last I saw it was 64 still but yo ucould raise it to 99 if wanted

magic pivot
#

Default

#

Container#getMaxStackSize

#

It seems like the data component also supports up to 99 by default

elder swallow
#

let's say the hard limit got raised from 64 to 99 yeah

boreal flint
#

yeah

#

hard limit

#

it's still 64

#

but hard limited to 99

#

guess they didn't wanna deal with the font clipping lol

magic pivot
#

Gotcha

#

But that's still interesting

prisma locust
#

So I'm working on a 20.5 PR and when opening my old world from the 20.4 dev workspace I get

[18:49:37] [entity-deserializer/WARN] [minecraft/AttributeMap]: Ignoring unknown attribute 'neoforge:entity_gravity'
[18:49:37] [entity-deserializer/WARN] [minecraft/AttributeMap]: Ignoring unknown attribute 'neoforge:step_height'

spammed quite frequently in the log

#

any chance we can get rid of it?

shut wraith
#

Datafixer should be able to do it

#

Just add one to the default vanilla schemas/builder, since it's happening on a MC version update

foggy steeple
#

Note any time someone saves an entity into nbt for a structure and then uses that nbt in a non-neoforge world as a datapack, they get spammed

#

Never liked these default attributes always added

shut wraith
foggy steeple
#

How else do you think I found my fabric mod at one point spamming hundreds of lines while spawning structures with entities I saved in forge

#

So now I save the nbt with entities on fabric when I can or use a script to yeet the forge attributes

shut wraith
#

Lovely. Are entity attributes just set up in a way that the default empty one has to be added?

#

Could neo strip out the empty one while serializing the entity or something?

boreal flint
#

entities saving with their attributes in general is fking annoying lol

#

wish mojang added a button to toggle it or something

true jacinth
#

its basically always junk

boreal flint
#

contrarily

#

I've found that error useful in identifying the fact that I haven't yet deleted an entity's attributes from a legacy structure block i have in my mod or whatever

true jacinth
#

Yeah but it's ultimately irrelevant

shut wraith
analog ledge
#

^

#

Hiding a log error because a lot of the time people don't care is one signal you have bad habits

shut wraith
#

For removing the old neoforge-added ones in neoforge: a simple datafixer could do it; I'll poke it if I have a chance.
For the structure issue: can we make it not save those if they're empty? That seems something a patch could fix

boreal flint
#

^ I use thta error somtimes

#

but the issue here is that forge had attribs, now they're neoforge attribs

#

but they count as missing now cus we're on neo and were saved under forge namespace

analog ledge
#

it's the same thing that got neo into the mipmap thing

#

where people just stopped caring about it being an issue

prisma locust
shut wraith
boreal flint
#

oh damn

#

yeah that's a good point too

shut wraith
#

But a datafixer can fix old stuff, and figuring out how to prevent empty ones from saving would prevent this in the future, so this isn't unsolvable

#

Can we just patch AttributeMap#save to not save attributes with no modifiers on them and a default base value?

#

That'd fix the second issue

#

For fixing the old attributes, we could just patch a datafixer deleting them into the datafixer builder, at one of the vanilla 1.20.5 schemas

prisma locust
shut wraith
foggy steeple
#

If a Neo attribute had a wrong base value causing a bug. And you keep loading the original value from saved structures and stuff, you now require ALL structure mods on Neo to re-save their structures

shut wraith
#

Yeah, so if the worry is changing vanilla behavior just add a flag that's not enabled for the vanilla ones and call it a day

foggy steeple
#

Vs not saving when default value means the structure mods will get the corrected values when loading entity again without needing to re-save

prisma locust
#

A flag should be fine as it allows everyone to choose what works best for them

foggy steeple
#

I assumed the not saving default would’ve been strictly only NeoForge’s attributes.

#

Not extended to vanilla lol

shut wraith
#

Attributes already have a flag for client syncing, shouldn't be that complicated to set up another like this

shut wraith
#

(Writing up a datafixer for this)

prisma locust
#

I think @true jacinth is more likely to know the answer to that question

true jacinth
#

Should be, yeah

#

Reach is vanilla now, gravity is vanilla now, step height is vanilla now, I can double check the names

#

yep, all right

shut wraith
#

Coolio. Lemme test this fixer

shut wraith
#

Datafixer is working, I'll submit a PR with that and the attribute map to prevent this issue in the future

shut wraith
#

As in I see it's removal there but I'm not seeing log spam for it. Unless it's not added to all entities by default or something?

#

There's an attribute fix to prevent this issue in the future, and fix the structure saving issue, and a datafixer to fix 1.20.4 or older worlds when updating to 1.20.5 and avoid the log spam

#

I tested this locally, and loading a 1.20.4 world with this present removes the old attributes correctly, preventing the log spam

true jacinth
#

Uh... whenever vanilla did it

#

I don't know the version

#

check revisions of NeoForgeMod.java

shut wraith
#

Cool, we must just not have been attaching that one to everything

true jacinth
shut wraith
#

I remove it regardless because presumably it's attached to something

#

Anyways, I've gotta work on other stuff so ping me if anything there needs a poke and I'll poke it when I have a chance

fallen igloo
#

(i think all of them but step height are the same as the forge ones were)

shut wraith
shut wraith
#

Might be able to sorta "remap" the attributes and their modifiers? Bleh. Doable, just ugly

#

Okay, so add_value gets remapped same as the value, add_multiplied_base is unchanged, and add_multiplied_total is the weird one

#

Actually wait that one should also be unchanged

#

Hmm, which of these get extended and which actually need to be scaled... Looks like I basically just need to "trim" stuff to fit in the new range but I think that will actuall happen automatically, so... cool?

#

@fallen igloo can the step height be updated in any sane way or should that be yeeted?

#

I'm noticing some very different behavior on that one in terms of its range and default value and whatnot between vanilla and neo, and how its actually applied, so I think trying to update it is just going to be a pain all things told, so I'll yeet it

fallen igloo
shut wraith
fallen igloo
#

I'd say nuke modifiers and do +1 for the base value

elder swallow
#

I don't see why we'd bother tbh

elder swallow
shut wraith
#

So yeah, that's what I've updated the PR -- it now remaps to vanilla attributes when possible and only nukes step_height

fallen igloo
shut wraith
#

Same as if they'd updated from vanilla 1.20.4

#

We just remove the neo one

fallen igloo
#

does it add the defaults for the ones not loaded from disc?

shut wraith
#

Looks like the former to me

fallen igloo
#

hmm if it is a fixer we'd have to check if it works for modded, otherwise it's fine

shut wraith
#

Actually wait, it doesn't even bother, it just uses the default value if there's no attribute present. Coolio

shut wraith
#

But there's no way around that

fallen igloo
#

yea mojang needs to fix their datafixer stuff so it is usable for non vanilla stuff

shut wraith
#

I'm also updating usages of attributes in my PR to call only getAttributeValue, not getAttribute, wherever sensible -- this avoids creating the attribute if it's not present already, which is the behavior for most vanilla attributes and probably what we'd like to do

#

In fact, I'm uncertain if the savesDefault flag is actually needed with this change; I may remove that

fallen igloo
shut wraith
fallen igloo
#

for b) you'd need namespaced versions

shut wraith
#

The issue is rooted a lot deeper in how this sort of update is actually reasoned about by DFU

#

I don't have the time to go into detail on it now but there's a discussion about it burried somewhere in the fabric discord. Has to do with assembling a chain of fixers that is fully ordered, which you can't do reliably with multiple versionings

shut wraith
# fallen igloo well for a) we can make an api which would benefit mostly storage mods for b) it...

a) is trivially solvable, except for two things:

  • datafixers are all constructed very early, before mod init in fact, and changing this would be a bad idea for a number of reasons, and because DFU is optomizing stuff you can't delay it with suppliers or any sorta approach like that. Mods can use a simple mixin for this with ease though
  • if a single mod doesn't use it, everything inside that mods stuff is unfixed -- even if that mod doesn't actually have any changes to apply!
    And expecting mods to all use it is unreasonable.
#

Anyways, that got a bit off course -- I've updated the PR to remove the need for the savesDefault flag by just not making the attributes to begin with if they're not needed

fallen igloo
shut wraith
#

Those don't store the data in the BE, do they

#

Regardless, it's reasonable for those mods to do, sure. It's unreasonable to expect them to do so, because datafixers are complicated and even writing a rather simple one can cause you pain -- and in the case of something like AE2 it's not a nice simple AddChoiceTypes fixer. It also places a number of limits on how/when mods are allowed to change their data formats.

#

(Note that those mods currently can already do this with a single mixin, and I'm not sure that can be improved given the very early entrypoint involved)

shut wraith
#

Anyways have to head out again; ping me if you need anything on the attribute PR

digital drum
#

1.20.5 PR 2 OUT NOWWWWWWWW

#

SOMEONE PING SNAP ALARM

quiet condor
magic sierra
#

QuiltMC meta

median wasp
digital drum
quiet condor
#

yeah that's a better pun

digital drum
#

should I ping maintainer?

magic sierra
#

new pre-release guys

digital drum
#

fuck it let's do it

prisma locust
digital drum
prisma locust
#

a new prerelease is not an emergency

digital drum
#

fine got it

magic sierra
#

Some bug fixes

clear bane
median wasp
#

Yeah, that's why Quilt is on-time, sure. But that doesn't explain why the official site is late

dreamy crystal
#

Because it takes time to write the blog post?

prisma locust
#

we can see the post in the meta already

dreamy crystal
#

Could be any number of reasons

restive raft
median wasp
#

Yeah, there too

clear bane
#

they hand write the blog posts
and what the launcher metadata is giving, is not the actual post

prisma locust
#

ah

median wasp
#

It's on the site now too

restive raft
#

by and large, the launcher post is the blog post

median wasp
#

Took like 5 minutes

#

Took like 30 minutes last week though

restive raft
#

the only difference being the end of the post, with the links

median wasp
#

I wonder if it's some kind of caching

clear bane
restive raft
#

Finn, I'm talking about your saying that they hand-write the blog posts, as if the launcher post and the blog post are separate

#

when they are literally the same in content, excluding that the blog post has the list of links at the end for downloading the jars

clear bane
#

hides in being tired

fallen igloo
#

time to wait for neoform

restive raft
# digital drum fuck it let's do it

just to make it clear: please don't ping Maintainers for non-emergencies or non-urgent stuff
you can ping one of us Maintainers (preferrably a Moderator & Maintainer, like me), but not everyone

foggy steeple
#

PANIC PING

restive raft
#

i like pings being on time too, but I don't want to annoy all the other Maintainers who didn't sign up to get pinged on snapshots harold

digital drum
#

yh just got taught a lesson alr

clear bane
#

just do a everyone ping, and just ban those that get annoyed by it /s /j

restive raft
#
  • Snip it! advancement is renamed to Shear Brilliance
    I wonder if this is because they had to change the old name, or someone brought up the new name as being way better kek
#

or both

blazing valve
errant lion
restive raft
#
  • The animated Nether Portal texture is displayed when changing dimension to or from The Nether
  • The animated End Portal effect is displayed when changing dimension to or from The End
    what
median wasp
#

Bedrock

restive raft
median wasp
#

Kinda but not

restive raft
#

err, who manages it at least

prisma locust
foggy steeple
#

Snapshot is nothing. The real chaos is sci being here!

median wasp
#

Pretty small snapshot overall. Less than 1k additions and deletions

digital drum
prisma locust
#

how do you know this already

#

teach me your magic

restive raft
foggy steeple
median wasp
prisma locust
#

oh snowman is a lot faster this time?

#

it took quite a while for the last snapshot iirc

restive raft
#

lemme check what happened last snapshot

median wasp
#

Yeah, Ocelot (the one I'm on) finished in record time too

restive raft
#

since it's usually quite snappy

median wasp
#

Two minutes faster than last week

restive raft
#

ah. it looks like Snowblower didn't see the update in the manifest, so it did no work

#

and had to be kicked by maty sometime later on, where it did see the new version

#

if that becomes a problem again, I'll look into introducing a small 10s delay before running Snowblower

#

that, or modifying Snowblower to return a non-zero exit code when it processed no versions, and make the build config retry on failure

#

but not tonight -- I'm too sleepy for that

median wasp
#

The background it uses for the nether travel is the model's particle texture

restive raft
#

oh wait, it triggered

median wasp
#

Teleporting from the end to the nether or vice-versa will show the nether screen

blazing valve
#

So it's probably unwise to do it manually

#

Oh wait, you meant the check-for-update.yml not the updaet.yml itself

fallen igloo
#

they disabled random ticks on the gametestserver

blazing valve
#

Still at work, if I manage to be done before coehlrich does, I'll do a PR for nf

fallen igloo
stiff galleon
#

finally

negative slots

fallen igloo
#

but short... (also creative mode...)

stiff galleon
#

does creative mode have more than 32k slots

fallen igloo
#

idk what that packet even does

fallen igloo
digital drum
fallen igloo
#

ok then that has to wait for pre3/rc1

misty crow
# fallen igloo idk what that packet even does

As far as I can tell, it tells the server to put the given stack into the respective main inventory or hotbar slot, so the max value in a vanilla scenario (i.e. without a mod extending the player's main inventory) would be fairly low and nowhere near max signed short

magic sierra
#

something is broken in 1.20.5-pre2 X)

#

performance are bad X)

dreamy crystal
#

are you sure it's not just fabric? Not throwing shade or anything, but before saying it's minecraft's fault you should probably test vanilla minecraft πŸ˜›

magic sierra
#

I've enabled Fabric, but I don't have any mods.

#

I'll try without

#

Oh... That's not good...

lean anchor
#

Brand new world, or did you try to open the modded one?

magic sierra
#

It's the same, but I think I've corrupted the world by having a corrupted chest.

median wasp
#

Wait, this error screen is Vanilla?

magic sierra
#

yeap

median wasp
#

Interesting

open kindle
#

thinkies unicode font

magic sierra
#

the level.dat file is corrupted, sad

stiff galleon
median wasp
#

I've never seen this before

#

It's brand new to me

#

I didn't expect a Vanilla screen to have such information tbh

blazing valve
#

Why did you assign the PR to me, Schurli?

digital drum
#

ofc answer when you're free

#

just ping

blazing valve
#

Oh, RecipeManager byType was changed to no longer return a map

stiff galleon
#

thonk what does it return now

blazing valve
#

Collection

reef parcel
#

Was it a map of type -> recipe holder?

stiff galleon
#

in 1.20.4? yeah

private <C extends Container, T extends Recipe<C>> Map<ResourceLocation, RecipeHolder<T>> byType(RecipeType<T> p_44055_) {
#

err resourcelocation -> recipeholder

reef parcel
#

Ok. Well, that makes sense then, who cares abt the name in this case :p

#

Recipe holder has the ID too iirc

fallen igloo
blazing valve
#

Aren't we gonna close that PR? πŸ˜