#1.21 Snapshots
1 messages ยท Page 3 of 1
yeah....
my childhood is ruined
only way to know, is to wait for the snapshot....
which might be today 
would be odd, thoguh
they've actually just added AI to the fishing rod bobber so it hunts fish instead of passively waits there
mojang wtf
i noticed some argb/abgr weirdness in the changes as well, so yeah
NativeImage?
wait no, NativeImage was worse 
in this snapshot, banners will sometimes show up all white in your inventory
i remember seeing that getting fixed in mojira a few days ago pretty sure
and I don't know if it's just me, but there seems to be a "dithering" effect on banners
idk if that was always there
yep
we just need official entity batching ๐
the argument is argb, but it's storing rgba ๐
but packing that as an int on a little endian system is going to be inversed from how opengl interprets it (hence abgr)
when vulkan? /s
I wonder, since they changed the vertex system in 24w21a, what other changes they'll make in the next snapshot...?
more optimization?
inb4 they casually drop data pack items
are there any big endian systems anymore?
because this makes me wonder how many programs are out there that silently assume little-endian
I would guess 90%+ of software written for PC assumes little endian, but software written for other platforms may be more ... flexible
networking code i think is usually a little better because the networking library comes with helper functions for "convert to big endian" so you're less tempted to just roll your own that unconditionally swaps bytes or just hardcode the values backwards in the first place
[TCP/IP and many older application protocols are big-endian because the committees that defined them had decided that it should be the standard]
iirc it has to do with the fact many graphics controllers store their info in BGRA format, and ARGB is just reversing that endianness
unless I misunderstand what the two red circles are on about
literally the other way around, it's RGBA format in memory, ABGR when treated as 32-bit integers
i.e. you have 0x11 0x22 0x33 0xff in memory for the red, green, blue, alpha, when accessing that from java as a 32-bit integer it looks like 0xFF332211, and minecraft itself wants to use ARGB where you'd use 0xFF112233
so the function accepts ARGB, converts it to ABGR, and writes that to memory using the 32 bit little endian write instruction
so the actual bytes in memory are in R G B A order
it's why some people like big-endian more
because if you display memory left-to-right as you would text
the graphics hardware doesn't actually care [beyond that you have to tell it what format you're using], but the names OpenGL uses for these formats are strictly based on the byte order
you get the number in the way you'd write it in code
while with little-endian, you get it backward
[which makes me wonder how it manages 16-bit formats where the green bits are split between the two bytes]
with data like R10G10B10 or R5G6B5
byte-swapping doesn't work
you have to do additional shift/mask to convert endianess
so people usually don't bother
many GPU display controllers are BGRA format, not RGBA
but really, that's only an issue if the endianess of the gpu is not a match for the endianess of the cpu
and they usually do match because gpus are made for x86 :P
Also, fun fact, this is the historical reason why microsoft GDI used BGRA for colors
ok now that the event refactor is done, how do I start kits properly
do I just remove schurli's branch and run the action again?
yeah that will do
the answer is extremely grindy
only down to 62 rejects
pushed what I have so far
basically all the rendering changes are done as well as a few misc things I spotted along the way
Two minor things:
- https://github.com/neoforged/Kits/compare/bda06425bb06...6b91b6659356#diff-277a8ebe8d9e2bc9500d73bd1bc535c7c492aac6d078c30f78fb5562d6697d02R44-R45: there's a constant for the radius in
RenderChunkRegion, would be nice to use that instead of a magic number - https://github.com/neoforged/Kits/compare/bda06425bb06...6b91b6659356#diff-f989923af099fd13d74147576083745701de84e3839e3801c5f7c90255b41ef0L118-R135:
please add a note regarding https://github.com/neoforged/NeoForge/issues/635, then we can finally close that issue
surprised that issue is still unfixed, I'm pretty sure the patch dates back to 1.12
thanks for the comments, I'll fix both
Yeah, I'm very surprised they fixed neither that nor the SpriteCoordinateExpander issue despite touching both of those directly
Can I just close the Neo issue now then?
I'd say yes
why is it called "Kits" btw
SpriteCoordinateExpander The bug report inside is invalid, by the way.
It doesn't cause any bugs in Vanilla.
In the bug report, there's no mention of this affecting Minecraft Vanilla.
https://bugs.mojang.com/browse/MC-201374 This bug still affects Minecraft 24w21b?
baby fox
oh
Does that really matter?
Snapshots are meant to be broken, so if there is a issue that was introduced a snapshot before, and still not fixed, then maybe it needs a bit more time
No, this bug was introduced in Minecraft 1.16.3, but since Mojang fixed similar bugs in Minecraft 24w21a, I wonder if they didn't fix this bug.
#mojira message nice
[Jump to referenced message](#mojira message) in #mojira
๐
blehh, hope they redo model loading soon
apparently ender pearls call changeDimension when teleporting the owning entity now even though the ender pearl is set to lose it's owner when changing dimensions
always, or only between dimensions?
always
so throwing them through a portal doesn't work, what about having an ender pearl suspension chamber in another dimension
what if you're offline when an ender pearl owned by you loads [iirc that would lose the owner before]
changing dimension seems to be the only time the owner is lost although it only checks the level it is currently in for the owning entity
Imagine if Mojang changes the light engine again in the near future.
they might be working on that in the background
it has been known that they are using github, so it is likely on some branch 
Bedrock is using subversions, yes
Their developer builds have all sorts of extra settings and configurations related to it
All on a cloud azure backend
including CI
idk, it's a microsoft environment
So I imagine it's a hellscape
Of barely functioning systems, constant rewrites due to unnecessairy changes and just inconvinience
I hope nobody is still using svn in 2024
our uni is 
ip over carrier pidegon
mm yes patch mailing lists

at least it's email. could be floppies like we used to do in the past ;P
we do have gitlab, but the system for exercises with automatic junit tests still uses svn for some reason
is the crown glued to your head or does the hair hold it in place
I love legacy software
I think it's the hair, which is concerning
I'm yet to go to uni but that sounds psychotic ๐
my friend teaches at the university I'm doing the PhD in, and they have different systems for handing over homework. main one is some website thing
but eg, my friend teaches git in his class, and expects people to commit to github
and uses the github history to track progress
may I introduce you to the way my father "wrote" and transferred programs... punch cards
we'll see, after all 2021 is still not over yet
covid time
I'm not that old heh. the first computer I used was a 286 with 5" floppies, and the oldest I have used was an Amstrad CPC464 I found at an uncle's basement and took home
one of the big projects at my lab that has been in development for over 10 years is on svn.
and it's written like shit and my friend is desperate and wants to rewrite it all because of how horrible the code is
I still have a C64 for gaming at home
I have a C64 with elite
I also still have my indy
But I haven't been able to access it yet, I need an IDE adapter to get rid of the password

:3c
please stay on topic... ๐ธ
but tomorrow is and this is the snapshots channel
Schurli is right, we have allowed the squirrels to sneak into this channel

Ok, it's only one bug report fixed
There is no method in VertexConsumer for ending a vertex
They end the vertex either when a new vertex is started or the build method is called (which isn't included in the interface)
Hmmm it is that day
I really wonder what dev methodology they use? Do they have sprints?
Is today the sprint closing day?
Who is the scrum master?
What ceremonies do they have?
nap time is a very important ceremony
I recently heard that tree refactors is a ceremony they have
I agree, but it needs a ceremony master that reads the bed time story, about every player being satisfied with the new update, so the devs can have nice dreams
there will never be another outage again
// featuring Alexis Gay: https://www.instagram.com/yayalexisgay
// unlock exclusive deleted scenes: https://www.patreon.com/KRAZAM
New version detected: 1.21-pre1.
heh, did it before the fabric bot
do they change a lot on pre-releases?
tell it to work faster smh
Quick! Merge all Neo PRs now!
the beatings will continue until decompilation speeds improve
pre... ๐ข no datapack brewing
aw
Kits is down to 6 errors on 24w21b
gen patches prepare neoform and update... compile errors can be done later
it's minecraft source code, even if not the full one, so ...
With this snapshot, we are temporarily removing the functionality of lighting blocks on fire using the Fire Aspect enchantment, as we want to refine it further. This functionality will be reintroduced in a later release.
we start with 24w21b for 1.21-pre1, right?
hhahaha
MC-902 The end obsidian platform resets every time entities go through the end portal, which can cause blocks to be deleted
damn lmao
wait, that was a thing?
this
ye
OMFG
so they broke obsidian farms?
No way
I mean, technically, lava is infinite since dripstones exists, so you can recreate it via that 
it's just slower
although, don't the towers respawn if you respawn the dragon?
So I guess there's still other ways
there's always another way
but being able to just stand besides the spawn platform and occasionally drop an item through the portal was nice ยฏ_(ใ)_/ยฏ
They might still regenerate it btw, just make it only replace air
what is renderFace?
I don't have the diff on hand
MC-902 The end obsidian platform resets every time entities go through the end portal, which can cause blocks to be deleted
welp there goes obsidian farming
supposedly it still works in this prerelease?
h
people really need to start reading the backlog
Lol
- "0xBADFOOD",
+ "0xBADF00D",

openUrl is no more
It is now openUri
And obviously takes URI instead of URL
openFile is also openPath now
so I we can open files?
you we can open files
it would appear that they changed the end platform so it doesn't replace blocks, just air

model loading got a refactor that probably won't affect many people but affects me greatly 
1.21 is on the horizon :3c
time to build an obsidian box filled with lava 
of note: ResourceLocation is now final and ModelResourceLocation is now a record that wraps ResourceLocation
public static final ReportType CHUNK_IO_ERROR = new ReportType(
"Minecraft Chunk IO Error Report",
List.of(
"I have failed you!",
"Let's not do it again...",
"Worst magic trick ever!",
"Remember to backup your worlds regularly",
"Pirates stole your chunk!",
"Ker-chunk!",
"Ideally, this shouldn't be here",
"Let's hope it wasn't anything important",
"Computers were a mistake",
"Welp",
"Not my proudest moment",
"Who needs blocks in a block game, right?",
"This chunk is no more...it has ceased to be...this is an EX-chunk",
"loss.mca"
)
);
Ender Pearls that are thrown through portals can now teleport players to a different dimension than the one they are currently in
the possibilities
what the... pre1 already

With this snapshot, we are temporarily removing the functionality of lighting blocks on fire using the Fire Aspect enchantment, as we want to refine it further. This functionality will be reintroduced in a later release.
wait what
I didn't know they added that 
IT BEGINS
ohno no more pass any one of them
this sucks
call monica here
@gusty flower i hope you like sequenced maps
wth is a sequencedmap
Java 21 feature
It's a map that is also like a queue
LinkedHashMap is the primary implementation

A Map that has a well-defined encounter order, that supports operations at both ends, and that is reversible. The encounter order of a SequencedMap is similar to that of the elements of a SequencedCollection, but the ordering applies to mappings instead of individual elements.
The bulk operations on this map, including the forEach and the replaceAll methods, operate on this map's mappings in encounter order.
it's part of the sequenced collections feature
Well not necessarily retains, more like just has a defined order
does LinkedHashMap implement this interface now
right yes they do
All Known Implementing Classes:
ConcurrentSkipListMap, LinkedHashMap, TreeMap
For example, SortedMap extends SequencedMap
LinkedHashSet inherits from SequencedSet
It doesn't retain insertion order, but it does have a defined order (which is sorted order)
no more "okay, time to iterate this set just to get the last element"
what impl do they use to initialize it?
i would imagine it's a linkedhashmap, but I haven't checked
I think it was a sorted map from fastutil
their fix is this
hm
So they're broken instead of deleted now
Good fix ๐
just tested and it breaks all blocks but drops them as items
yeah
right
lemme test fluids
I should I have read more
also when you kill the ender dragon the portal drops 2 torches not sure if that was always a thing lol.
Interesting ๐ค
immediate() uses a sorted map 
ok, water just gets yeeted still
automatic concrete farms with end platform breaking... hello
which I guess is the best they can do
while RenderBuffers uses a linked hashmap
they could drop the old water item 

automated cobble farm
but for items
and without tnt duping
Did any other code change that uses that sequenced map, or was it just the type change?
So this allows you to instabreak any block in the game?

Does this work on unbreakables?

in what situation can you have an unbreakable in the same position as the end platform lmao
say hello to switch expressions
nope, seems they just want .keySet() to have predictable ordering

bedrock just gets yeeted
good stuff I guess
lmk if any other massive internal changes are hiding somewhere :p
wait, I can do that now?
but I need to get back to what I'm supposed to be working on
you could do that in java17 already
Weird. I wonder if there's another refactor coming later down the line which actually takes advantage of the sort order.
I didn't realize, or forgot
I have been using switch expressions for ages in my mods lol
but I can do the instanceof one with J21 now, right?
or both?
For some reason I'm not able to pull it...
Time to clean everything!
Apparently I can't find lwjgl-freetype-3.3.3-natives-macos-patch
Agh
Leashable.tickLeash((Entity & Leashable)this);
Apparently this is valid java code
the bitwise and of Entity and Leashable :p
for the curious, that's JLS (21 SE) 4.9, Intersection Types
Wait it is? I didn't realize intersection types were allowed in casts
for type bounds?
Huh, apparenlty they are
(from JLS 21 SE 15.16, Cast Expressions)
yeah, so type bounds
I thought it was only allowed in generic bounds
probably for cases when <T extends Entity & Leasable> void accept(T leashableEntity)
yeah, that's what I'm reading too
Don't know why, but I love that
so if (e instanceof Entity && e instanceof Leashable) thing.accept((Entity & Leashable) e);
but sadly no e instanceof Entity & Leashable ๐
which is apparently Dd`a`a
What is Mojang's maven repo?
libraries.minecraft.net, I think?
Cool
can't browse it tho 
yeah, and that didn't seem to fix it...
errr this is what i get for having a lot of work
Guess I'll just download the resource manually
when data-driven blocks?
TIL CommonLinks existed
maybe the real data-drivers were the codecs we made along the way
All the constants used to be inlined, so I never knew it existed
And that's still not working...
The attribute mining_fatigue was spelled minining_fatigue
I think I need to update gradle's cache manifest
FINALLY
This is great
dynamic resources is in shambles 
I'm sure you'll find a way 
I'm probably just going to rewrite it
think it can be done cleaner now with Mojang's refactors
are there instructions on how to properly update neoform patches?
it seems to have four folders instead of one
why isn't res loc a record yet?
Any noteworthy changes?
I don't see how that's a problem?
on a technical and code side
Well ResourceLocation has a private primary constructor, you see
But records can't have that
I wish they allowed records to have private constructors
java had this whole idea of "data classes"
Me too
Both Kotlin and Scala allow private constructors for their data classes
Why can't Java?
and the rules were like:
- all fields must be data classes or primitive types
- superclass must be another data class (or object)
- no public constructor, only factory methods
and they go and make records incapable of point 3.
unless I'm seeing something wrong, the string string one is public?
ah well, I'm not looking at the latest snapshot 
I donโt think that first point is satisfied by records either, no?
Members can be all sorts of objects
It's not enforced by the language, but you can enforce it on yourself
3 is literally impossible in the language though
make the public one throw 
Then you have no constructor
You canโt override the default public constructor
Turns out not even the developer of vineflower knew that you could cast to intersection types
In Ocelot, it decompiles as (Entity)((Tameable)entity), yeah
Can you?!
I did not know that either, wtf
The Mojang dev was probably like "I wonder if this works"
what's an intersection type?
And it did
[Reference to](#1233004919322054678 message) #1233004919322054678 [โค ](#1233004919322054678 message)```java
Leashable.tickLeash((Entity & Leashable)this);
Apparently this is valid java code
Ah I was about to see if you already did sth coehlrich hehe
MyClass & MyInterface & MyInterface2
oh huh
for <T extends X & Y>
how new is that?
@half plaza is the normal update procedure for neoform to just delete broken patches and remake them from scratch?
that is really useful to know
aha, that explains it
Well intersection types have been around since generics I think
The ability to cast to them, Idk
wait, can you instanceof intersection types too?
I definitely tried in the far past and didn't work

Wait what?
no
I think that's a question
x instanceof Entity & Leashable z
unfortunate
No you cannot
Basically yes but also modify patches that only require simple changes
It would be, but alas
TIL that exists
how would it work, two instanceof?
Yeah
wait, according to the JLS, that was a thing since J8?
also isn't string final? so that would be illegal regardless
It would compile to basically x instanceof Entity z && x instanceof Leashable
You can still do instanceof String
Then z wouldnโt have leashable stuff accessible though
yes but String & Something would never be true
String implements Constable
And Serializable and ConstantDesc
Kotlin has where syntax for requiring a generic type parameter to implement an arbitrary number of interfaces, apparently
I just didn't realize constable was a java interface :P
there's also & Any but I think that's special syntax
Kotlin doesn't support intersection types, so no
Only intersection with Any is allowed
thought so
what's the problem, officer constable?
how very bri*ish
yeah, intersection casts existed since J8 
Why is PacketReport a data provider?
I mean, it's just BlockReport but for packets, just seems weird in my head
admin, please ban this block, they did something bad
Doesn't
record Foo(int i, float f) {
public Foo(int i, float f) {
throw new UnsupportedOperationException("Use the factories");
}
}
```do that tho?
In what ways? Just the model RL recordifying and no longer inheriting from RL? Or more?
well, given that other constructors must call the canonical record constructor IIRC 
Well now you can't instantiate the record
ah 
but you can override the default constructor, it just has to actually do something 
I mean, with that you're just adding to it iirc, not "overriding" it 
the parameter less version that is
The parameter list on the canonical constructor is implicit, you can access the parameters even without writing out the parameter list
yes, but you can't change them
That's extending it, but you can replace it entirely by specifying the parameter list (as I showed in my second example)
But you can't decrease the access
like this.a = ... would be illegal iirc
I do appreciate that a small part of my wish was fulfilled :p now they just need to go all the way
yeah, I understand now
but you can change the parameters before they get assigned, iirc
Yes
Teleports, stop changing please
It's not, which is why this works: https://github.com/neoforged/NeoForge/pull/283/files#diff-23d3f7ba78584f5642bf1a4b317efe179fd81e40ebc784203aa6071ba970e232R11-R17
So uh, they removed the new gamerule
But they not only didn't remove the translations, but they fixed their grammar
Mojang's going all-in on teleports
wait, is parameter less version executed before or after assignment?
Before
because this doesn't work 
Yeah, that doesn't work because that would be a double assignment to the final field
Doesn't matter that it's before the generated one
yeap
bedrock parity
We're bringing you the first Pre-Release of 1.21 with leashable boats, portal-able Ender Pearls and bug fixes!
What in gods name is that color scheme?
like i thought for a sec it was c#...
Custom
Well, it's based on VS Code
It's a port of my custom VS Code scheme to IntelliJ
Where the MC article link?
second line in those links
example in here
Ah
Release date is June 13th
In this edition of Minecraft Monthly, we continue Minecraftโs 15th anniversary celebration by putting a big cherry on top of our birthday cake: announcing the Tricky Trials Update release date! Can you spot all the clues? And what did you think about Vuโs poem? He really wanted us to ask.
Todayโs episode covers:
- The release date of the Trick...
also, good to see you alive again XD
๐จ ๐จ

it would be nice to have a stable version of NeoForge 20.6 before then
Still no 3D mace
Do it yourself
<t:1718291640:R>
that's way sooner than I thought. huh.
I expected first week of july at the earliest
two weeks
yes, prereleases is when they start to release as soon as fixes are made
The question is: hotfix or not?
first major MC release since the fork, right?
yes
neat
I care :(
will you still care when 1.21 is out?
no
See ๐
but I care right now :p
all will be well /handwave
mmm
Create is still planning to target 1.20.4 neo afaict, so I think it'll stick around for a while
Which one had item components? 1.20.5, right?
yeah the dev status page says they're not doing 1.20.6 (yet)
yup
and J21, right?
yup (2)
because llamas forgot what they were holding iirc 
and supposedly another bug that was in the security category and didn't show up in the changelogs
cos I heard it could be used for duping
But seriously, 1.20.5 is the big jump and while I also played in 1.20.4, it doesn't have much appeal to players over 1.20.1, right?
I'll be interested to see how much Create changes that
and the community has decided 1.20.x for x > 1 are betas for 1.21
so modpack authors probably won't care until 1.21
how will porting neo to 1.21 work? I forgor
same as poting to any other update
edit build.gradle/gradle.properties to specify new numbers
rename mods.toml if you didn't already for 1.20.6
and then despair as you fix the compile issues
I meant more as in when can we expect 21 to be available :p
currently the porting work is in the private repository, where the team are dealing with the patches
once it's in a state in which the patches can round-trip without issues, it will be moved to a public porting branch, where updates will be published for development purposes
an exmaple of this kind of branch is: https://github.com/neoforged/NeoForge/tree/port/24w14a
right
these porting branches are NOT stable. they will break, and they will crash, because it's work in progress stuff
but sometimes they work well enough for your own mod porting efforts
will be interesting to see what happens wrt mod adoption
How much does create use item nbt?
I know of at least one person that has ported to 1.20.6 by creating an NBT data component to hold their custom nbt stuff :P
cursed, cos it can't be mutable
CustomData is very much fun like that
Do you not datagen recipes?
Granted my mod is mostly based on advancements
Hello 
yeag
but whatever ends up happening will influence what versions people play on (although I'm curious to see how heavily)
Yeah but create is a mess of a code base. It is spaghetti all the way. Basically unusable
Start with the data gen classes .... 
using branches for MC versions has always bugged me a bit, but I have no clue what the alternative might be
eventually it feels like maintaining multiple copies of the codebase with enough subtle differences to be annoying
I personally use a preprocessor, but I realize that's not for everybody
But it allows me to support 14 version/loader combinations at once
the versioning scheme I use reflects this: <mc minor>.<mc patch>.<mod version>.<mc version-specific patches>
example: WAILT 20.6.1.1 is MC 1.20.6, mod version 1, with 1 version-specific patch
it's cursed, but it actually has semantic meaning
ah, the fuck-it-we-ball scheme
:p
version files with the Unix timestamp of their release 
imo semver is not sem for MC mods unless the mod has an API
the website even says that a project using semver must have a public API, iirc
Software using Semantic Versioning MUST declare a public API. This API could be declared in the code itself or exist strictly in documentation. However it is done, it SHOULD be precise and comprehensive.
such is the nature of mod versioning, I suppose
I mean, it's just <major>.0.<ci build number>
Where major has the same meaning as SemVer
Breaking changes
the minor version is for moral support
World saves can be considered a public API -- in that case, changes that break a world or something built in a world would be breaking changes

Heck, that's basically what MC itself does
that's if you'd actually use DFU
DFU is off the table for mods, we've discussed that to death
I mean, aiui, you can still set up your data fixers, but that's gonna be separate from the rest, sadly
Many people. It has multiple issues that cannot cleanly be solved.
yes ^
separate from the rest
Issue #1: The vanilla schemas run ONCE per world.
No changing that.
Have fun only releasing one mod version ever for an MC version, that's not how it works in the real modding world
Hope it's perfect
I'm out
Not having this discussion AGAIN
what if we drag luke into this discussion 
you'd have to give everything a passthrough fixer iirc 
Lol. I should go compile the fabric discussion I dragged him into...
Exactly; hence why MC is still at 1.x -- DFU means that if you treat the saves as the public API, there's never been a breaking change
And yeah, you can inject your own datafixers linked to changes in Minecraft version with absolutely no issue -- hell, neoforge has a couple of these (that I wrote) to upgrade the old neo attributes to the corresponding new vanilla ones!
The part of "DFU for mods" you'll never be able to get working right is datafixers associated with mod versions within a single MC version
...and, well, any datafixers, vanilla or otherwise, working consistently inside modded containers
And the former issue -- datafixers to upgrade mod versions within a MC version -- you're not going to ever get working with DFU for a number of reasons. You end up with situations where DFU can't reasonably order schemas and fixers from different mods or vanilla, and where that leads to issues, no matter what your do -- that's the discussion on fabricord that Ratatosk mentioned; someone thought they had a cool new way to get that working, which would have been awesome, and unfortunately it didn't work for a variety of reasons, mostly tied up in the fundamentals of what makes DFU tick
Yeah, I've said a few times now that the best you're going to get really is registering schemas for the vanilla datafixers to look through when applying vanilla datafixes
Well, no. You can do better than that
You can register fixers to run on vanilla versoin upgrades
You just can't fix anything within a vanilla version
But if your mod format changes at the same time as an MC version change -- you can add a fixer for that
Takes a mixin because that all runs far before mod ctors run, of course
You can also register your stuff to the vanilla schemas (takes the same sort of early mixin entrypoint) -- which is useful if you want to support vanilla fixers running within your inventories, but is also... potentially a lot of work, and a maintenance burden as you have to keep it around and add new ones plus fixers if you change the format, etc.
so components?
Yeah you can with some work add a fixer to move your old NBT into a component
Takes a mixin or two and some DFU knowledge
And won't work if your item is inside a modded container
I guess I'll stick with verifyComponentsAfterLoad
because that last point is the thing I really don't like about dfu 
Well I mean how else would it work? It's gotta discover that stuff is in a nested structure somehow -- and the only way that'll work is for whoever's adding the container to register that structure in a schema
Which they can do -- it's one mixin -- but there's then a maintenance burden associated with that in terms of keeping it up to date and adding fixers if you change it
yes, I know, doesn't mean I have to like it
You can do that for a single mod's stuff, but it fails when you have more than one mod, or modded stuff and vanilla stuff, that is in the same data structure and needs fixed
Because for that to work it's all gotta be in the same schema chain
And you can't sensibly "merge" disparate schema chains
So, if you have a format that contains entirely your own data -- nothing from other mods or vanilla that'll need fixed -- you can totally use datafixers for it
Heck, I've got a system that uses datafixers to update config files this way
But if, say, you change the format that items are stored in your BE in the middle of a single vanilla version -- and another mod changes the way their item data is formatted in the middle of a single vanilla version -- you can't built a system with DFU that will sensibly apply both updates in all cases, without the two mods being explicitly aware of eachother
I assume we'll see another prerelease today 
New version detected: 1.21-pre2.
@red sigil you were right!
sound the alarms!
<@&1067092163520909374>
1.21 Pre-2
https://www.minecraft.net/en-us/article/minecraft-1-21-pre-release-2
๐จ
ominous big 1.21 Pre-2
End platforms are now features o.o
Added new placement modifier type fixed_placement to place features in a set of fixed positions
hmmm
This is to fix the bug from the Pre1 where the crystals instantly exploded once entering the End as they were damaged by the fire below them.
I bet this is ProGuard removing the useless pop
Because this would compile to aload_0; aload_1; invokevirtual; pop; return;
any big changes guys?

New block tag
- MC-272596 - Throwing an ender pearl into the end fountain skips the credits
minecraft:mob_interactable_doors
do you reckon they finally made the portal respawn code less cursed? or just added special handling for the pearl
Enderdragon death rendering?
They already made it less cursed a few weeks ago
lovely
So what they did to fix the ender pearl thing is simply make it so the ender pearl can't go through the end portal if its owner hasn't seen the credits
So it just did like before and teleported the player so they're inside the portal, and they go through normally
makes sense
the real question is how, while implementing the end platform changes, nobody at mojang noticed the crystals instantly exploding :p
Probably a test world without crystals
With the pearl not going through the portal, you'll respawn at your bed/anchor
I think if you have seen the credits already, you'll respawn at world spawn
Because I think that's where the pearl will go
Finally AABB.getMinPosition and AABB.getMaxPosition are a thing
Does this mean better culling of block entities?
Missed that. Niiiice
No? It's just more API
sad
Has nothing to do with BEs
Is this for using doors (villagers) or breaking them (zombies)? I guess the first but just want to be sure.
Anything using InteractWithDoor, lemme check
So villagers, piglins, and piglin brutes, it appears
IT BEGINS CONTINUES

spawn an ender dragon and use a furnace...
AO is fucked
yep
In vanilla or just in Neo?
I highly doubt Mojang would release a pre in this state but I'll check vanilla
vanilla is fine
I just checked your update commit: regarding the mutable fields we used to patch into BlockElementFace, I would just patch MutableObjects into the record, recreate the old constructor and initialize the mutable objects as empty
Alright
I considered doing it that way but wasn't sure if it'd be considered ugly
will do
Oh speaking of constructors
ServerStatus has an extra isModded param, but no Vanilla constructor that passes a default value
I might PR that rq
I don't really see the need for this
Replied in #neoforge-github
Where else would blocks rendered as items get their light from besides the packed light provided by the item renderer?
Btw why are SRG param names still used? Why not just do like locals and let the decompiler fill in a name?
Level context
haven't been able to figure it out and need to do other things, my progress is on 1.21-pre2 on Kits if someone else wants to debug
I'll take a look in a bit
They won't because schemas, and how DFU discovers nested data structures. If its all happening within one vanilla schema update, you're fine -- that's the case where you change stuff alongside a vanilla version change
But otherwise, no, it doesn't work and there's no way to fix it with nested structures
Well I am thinking of a parallel versioning system where multiple mod changes get turned into independent version bumps
Yeah you can't get that to work
Because you don't know whether an update in mod A should be applied before or after an update in mod B -- and if those are separate version bumps that ordering does matter
No it doesn't matter
If the mods are independent both orders should work
Imagine "move stack to other part of NBT" and "change stack". These can be applied in any order
...No. Just no. Remember that data can be nested and that one mod's data can be nested inside anothers and that schemas, which define how that nesting works, are versioned right alongside fixes. Someone suggested exactly what you did back in fabricord a while back and went and tested it and sure enough, it had the issue I'd thought it would
Gimme a sec to write up an example versioning chain and why it causes issues
Idk, it seems possible on a conceptual level but I don't care enough to investigate it or even support it in my mods should it actually work
It's impossible on a conceptual level.
Mod A:
- add
display_rack, add to schema telling DFU that its data is nested here instufffield. - move
display_rackitem data toitemsfield. Change NBT format ofgadgetitem
Mod B:
- add
pedestalBE, add to schema with single item indisplayedfield - move
pedestalitem data toitemsfield. Change NBT format ofmagic_wanditem
Now, when upgrading from Mod A, Mod B versions 1, 1 to version 2, 2 -- which set of fixes do you apply first? Lets say you choose to directly layer the schemas -- so the lowest schema of one mod is parented by the highest of another. If you apply mod A first, it relocates both BEs fine -- but any gadgets inside of a pedestal are not fixed. Similarly, if you apply mod B first, magic_wands inside of display_racks are not fixed. If you don't directly layer the schemas -- say, you're looking for some way to merge/interweave them that gets rid of this problem -- then you run into the issue of where you decide to line them up. The sensible pick -- and the only one that solves this specific issue -- would be the mod versions of the data you're trying to update -- but this has a few problems; (a) huge performance issues as you have to do this separately for every chunk/world/whatever, and/or keep a lot of cached stuff around, (b) interleaving this with vanilla version updates is basically impossible, and (c) you lose out on datafixer optimizations, because you can't feasibly re-run them for the whole mod+vanilla stack for every chunk, so datafixing is now slow
Building a DFU-like system that did this is totally possible, yeah
You just lose out on all the stuff that makes DFU advantageous to begin with -- notably, the performance benefits you gain from having a single, guaranteed chain of schemas you can build and optimize early on
And, cause DFU is only performance-sensible because of that advantage, you really wouldn't want to use DFU for that
I don't think I know enough DFU to understand the difference between DFU and DFU-like
Mod versions would generally be deterministic across many chunks so couldn't an optimized DFU structure just be cached per mod version set
Yes-ish. That is to say, yes, but in a large modpack with, say, 100s of mods and updates updating only a few mods at a time... you could end up having to build, optimize, and cache hundreds or perhaps even thousands of such structures
Plus, you can only build that when loading a chunk -- so it gets moved to world load
DFU optimization takes 1 second for vanilla, and I don't think the classloading is that expensive either
It's also only necessary to actually build a new DFU structure if a mod did an update that requires DFU
My point is that if you do that, you've lost literally all benefits of DFU. Just use some custom system meant for parallel versioning chains at that rate
I suppose
so your conceptual argument is it's better to make a simpler DFU replacement in Neo itself
My argument is that doing this with DFU removes the major benefit DFU gives you and results in having to store a lot of these structures
And doing it outside of DFU makes it a pain to interact nice with vanilla fixers
...so I suppose my actual argument is that modders wanting to both maintain world compat and change their data structure should do it on a vanilla version update so they can just add to the vanilla schemas
Because that's way simpler, it works for 99% of the few cases where people actually want to do this, and there's no worried about parallel versioning woes
Found the issue, it's a really sneaky one: the VertexFormat#offsetsByElement array is indexed by the element's ID and not the element's position in the format's element list, so the element offsets in the offset fields in IQuadTransformer were wrong, which caused the baked lighting to be applied incorrectly in VertexConsumer#putBulkData()
30 seconds compilation time included
About 10 minutes or so ๐
With VertexConsumer not having an endVertex() method anymore, the current implementation of QuadBakingVertexConsumer with the automatic "quad export" to a consumer when the fourth vertex is completed doesn't seem feasible anymore. All current uses of it use the buffered sub class (which is IMO a more sensible approach anyway). I'm considering removing the buffered subclass and making the primary implementation act as "buffered" instead. Any objections?
We could auto export on vertex begin, however I do not object
That would work, but you'd always have a problem on the last quad and starting a new vertex just to force the export seems like an awful solution to me
๐
Wait so I predicted that? 
hopefully that becomes a recurring element to updates
In case Mojang sees this, UnbakedModel.getDependencies() and ModelBakery.loadingStack seem entirely unnecessary as for the former, all dependencies are lazily loaded anyway and for the latter, ModelBakery.getModel has no way to call itself recursively, so the stack will always be empty before and after the method is called.
I just want to point out, mods can do custom model loading, and do so.
This may also cause getModel to be caused recursively.
getModel does not work recursively for multiple reasons
neo/forge model loading is meant to work so that you use the provided modelGetter within resolveParents
How is that related? That's a vanilla API.
the provided modelGetter is literally ModelBakery::getModel
Yes
I was just pointing it out because custom model loading was mentioned
I think I realize that confusion (a bit late though)
that was primarily in response to what JTK said
it wasn't relatedto getModel being recursive or not
new prerelease today? 
With 9 bugs fixed?
sure
1.21 is supposed to release in just over a week
that means we should be seeing development wind-down
less fixes each prerelease
I would expect a prerelease today, maybe another one on friday and RC1 on monday/tuesday, if not RC1 on friday
I think rc1 friday because thursday next week is release (so they have time for an rc2 on mondey if they need to)
And the hotfix
*18 bugs fixed
that'll be 1.21.1 on the 14th
can we please get a 1.21.10?
- we are in pre releases so no regular snapshots
- wednesday is frog day
The official 4k remastered music video for Believe from Cher's 1998 album 'Believe.' Believe (25th Anniversary Deluxe Edition) boxed set includes the timeless classics plus electrifying remixes from the era compiled together for the first time on 3LP, 2CD & digitally. The limited-edition 3LP boxed set features the album on colored vinyl (clear...
I guess that was a no. :P
Pre-release today or tomorrow
New version detected: 1.21-pre3.
oh boi
Nice
@twilit slate sounce the bell
New version detected: 1.21-pre3.
And it's only 10pm in my timezone
Ohno
christ tis an early one
\O/
Pin this
ater, fix your message, it's 3 not 2
Snowblower doesn't look like it's currently running
I think someone needs to run the action on the repo now? I'm not sure what the current procedure is since @hard ivy changes
fixed
Additionally, we introduced some intentional but undocumented changes to the WindBurst Enchantment in Pre-Release 1 last week. To remedy this, we're including those changes in this changelog instead.
We were on the verge of greatness
that was way too early in the morning... unfair
guh, I just woke up
Ash I have a question to sate my curiosity: how do you make the primers? Do you actually look at the diff in day snowman and go through it all or is there some other strategy you employ
I use vanilla gradle to download the sources and then use IDEA's diff comparator. But yeah, basically, I read the entire diff, document any public changes (and private ones if I believe they're highly subject to mixin) and then organize it by importance
And then, because I get annoyed sometimes, I take it out by writing goofy headers
what's the state of the kits branch
Main compiles and runs, patch gen is broken (spits out the ZIP instead of the unpacked patch files) and the test sourceset is a mess of errors
so the usual
as long as patches are broken we can't push to a port branch... who broke it
generateClientBinaryPatches tries to read the patches directory as a regular file
unpackPatches should not need the bin patches
but publishing does
we don't need publishing on the port branch in the beginning
aren't ports branches ci-enabled? unless you are ok with the publish failing
it is fine if publish fails in the beginning
unpackSourcePatches currently just generates output.jar in the patches directory
uhm.. @white pond @blissful nebula what happened there?
Yes I am aware
But I have had a problematic week
I need to fix it
Just you know
No time yet
I am unsure what it is
I hope to have some time in an hour
don't spread yourself too thin, if there's no time there's no time. at the end of the day porting early is just a "nice to have"
Yeah, my best guess is: I fucked up something with the caching
Where it wants to centrally cache that task output
Which only supports files (because it was written for userdev tasks)
And now it derps XD
Probably
anyone willing to placate the Elephant while Orion's away 
it seems like it, yea
currently, it just visits the zip itself and copies it over
willing to test it and make a PR? 
I know why that broke
I blame maty for that one
And his jst rp
Pr
He bricked like 6 of those
So I missed one during fixing
needs to create a mini test setup
Updated pin with link to Snowman commit
https://github.com/neoforged/FancyModLoader/commit/4307030113a94ed52246dcbf7e02464cb2be178c
Seems to have broken some of the neogradle tests
in what way
It currently checks for Caused by: net.neoforged.fml.ModLoadingException: Loading errors encountered: [\n\tfml.modloading.brokenfile\n] in a couple of tests but now neoforge logs this:
Caused by: net.neoforged.fml.ModLoadingException: Loading errors encountered:
- File /private/var/folders/lr/439_fwvd3m76p9vy50d57kcc0000gn/T/spock_configuring_of_the__0_tempDir15627936413731285732/runs_configuration_after_dependencies/build/resources/main is not a valid mod file
Yes I am aware
I am about to push a PR that fixes those
generateClientBinaryPatches still seems to be broken with my pr due to: https://github.com/MinecraftForge/BinaryPatcher/blob/master/src/main/java/net/minecraftforge/binarypatcher/Generator.java#L100
Are we still using MFs BinPatcher?
and it supplies every patch file as a seperate parameter
Seems like it according to this stacktrace line: at net.minecraftforge.binarypatcher.Generator.lambda$loadPatches$10(Generator.java:122)
the installer uses the neo one iirc
@blissful nebula https://github.com/neoforged/NeoGradle/blob/NG_7.0/common/src/main/java/net/neoforged/gradle/common/caching/CentralCacheService.java#L287
This currently just hashes file inputs without checking if they're a directory.
Should it hash all the files in the directory if the file is a directory?
That is a very very good question, I would say so yeah
I'd say tomorrow rc1
we should bet on when it will be and the closest person gets a "Snapshot Guesser" role until the next guess.
I vote <t:1717755180:f> 
if no one else guesses, you'll win lol
win by default is boring tho
I vote <t:1717765200:F>
I vote <t:1717712460:R>
6:21 to be specific
that's in the middle of the night for mojang
I don't trust them not to pull something like that
everyone can vote what they thing no matter how likely other people believe it to be ยฏ_(ใ)_/ยฏ
I vote at any point tomorrow :3c
Can we use timestamps please? Figuring out these times is gonna be a pain
that would be <t:1717768800:F>
Let's go with this <t:1717764983>
I say 5 minutes after that
<t:1717759200:f>
I do not like spreadsheets very much
oh no. what have I started lol
at least there's not money on the line
that can be fixed /j
@TeamMember we're starting a snapshot lottery, whoever is closest wins the pot /s
<t:1717772400:f>
i bet 30 minutes after that ^
your bets... have been noted
37 minutes after Adrian :p
aaaagh stop making me do math, I'm a programmer :p
which means if adrian wins it will have to be almost exactly on time lol
how do yall type time zones like this?
bets are closed and locked in in 1 hour
<t:1717767600:f>
no longer valid you missed the deadline
hm?
the timestamp shows in 3 hours here?
clock says 12:35, timestamp says 15:41
oh nevermind
deadline for submission

Caltinor, PlatinPython are already out, currently closest is gigaherz
indeed
wait
we were making a prediction?
I will say <t:1717770615:f>
you're too late, betting closed a few hours ago
alright, as of now platin, caltinor, and gigaherz are out
how was I meant to know you have a custom ping :p
huh platin has a custom ping? hmm
yes 
your own fault for having it :p
yes ๐
does python also still work 
yes
made a spreadsheet with conditional formatting stuffs
Quick, start a python convo in #squirrels-๐ฆ
I get enough of those already
paithon

fuck
get rust
well done for being the closest
๐
conglaturations, you done it
delaying the release until the person you want to win is closest ๐
ooh was only 1 hour late
The "Burning Time" reduction effect of Fire Protection and "Knockback Resistance" effect of Blast Protection now stack from wearing several pieces
๐
nice
After a Primed TNT has gone through a Nether Portal, it will no longer be able to destroy Nether Portal blocks
๐
oh no
silly bot, i already beat you too it 
so you can or can't use a tnt canon to strand someone in the nether
๐
Whatโs my prize?
a firm handshake
can if you don't shoot it through the portal, can't if you do
๐ค
ah ok so they made it so you can't strand someone else in the nether
@jagged stag it's triggering twice
say hello to the <@&1248617351486902333>
sci broke it
how?
you know I didn't have n8n experience 
sci only added the snowman trigger node
if this is an ongoing thing I'd better update my spreadsheet
now I think last one it did 2 too
dubious programming project: website that allows the bets to be submitted and checked automatically 
I don't know how that workflow works

I wonder how it feels for a mojang dev to release a pre-release and then see people here decompile it and figure out what they did
@jagged stag go fix it
1k changed files? what are you looking at
my snowman shows 14 changes files
"throw it to the dogs"
since I am clearly incompetent in this manner
I know, but the figuring out part isn't ๐
this is exactly why I wanted to delegate this to someone who had n8n experience
because I knew I'd mess something up
I don't know how the workflow for the new MC version works
which I've stated multiple times
both here and in the internal channels
and I've made my inexperience known multiple times
so the fact that this broke really upsets me, because I knew it could've broke at my hands

i'm never touching n8n again
now excuse me as I have to manually run the workflows which should've been triggered
what are you reading
things




