#1.21.5 Snapshots
1 messages Β· Page 5 of 1
I imagine it's probably just to make blaze3d more rendering library agnostic, but that's mostly speculation.
Though, having knowledge of multiplatform stuff does make it easier to understand how it works since it's literally the same design structure
Speaking of the GL abstraction: is this ^ something we should patch in Neo or should this be patched in NeoForm?
the way I understand is just by tracking where tf the opengl call went
Wouldn't that be neoform? NeoForge shouldn't have to patch things that were incorrectly decompiled
That's why I'm asking
I guess? The debug labels and calls seem to be just delegating to an enabled extension though with some of the stuff given names
DSA is faster IIRC
but not available on every GPU
or what are you referring to?
@gleaming pendant also, do a search for org.lwjgl.opengl across the entire project
It's getting pretty concentrated
ig
Also you can swap out the render backend if it's abstracted enough π
Hm we have not really decided what we want to do about TextureFormat.DEPTH32, tbh
Well, at least we can remove the gl version adjustment in the early loading window since vanilla will essentially do that when creating the capabilities
Hm? I don't see anything different to before in their window setup
we wanted to remove that anyway
DSA is only enabled in GL4+, so if the GPU can't support it, it essentially 'emulates' the DSA calls with GL3 stuff
However, we ill need to store the GLCapabilities in GlDevice in that case since it's just created to setup the GlDevice
Though I guess you could try calling GpuDevice#getVersion instead
do we have to decide anything
I writed it to the config π€·
in principle it could still be interesting to experiment with the two options
No, I mean about splitting the existing texture type
I suppose it could be easier that we now have an actual enum to search for
not sure what you mean
@gleaming pendant would you do this?
What about pixelSize
8?
They seem to theoretically support copying the depth buffer to a texture or png, which will be... difficult for the combined depth/stencil format
It's set to 8 for DEPTH32_STENCIL8 in the 24w08 patches
Yes, in 08 it was patched and working (except for one particular question regarding a special-casing of the vanilla DEPTH32 format in GpuTexture)
I don't think so, might be wrong though
I gotta whip out the OGL 3.2 spec
Ok, it might actually just work
It's not quite clear to me if you can copy DEPTH from a DEPTH_STENCIL texture
and vanillas size check will not work either in that case since pixelsize will be 8, even if you only read depth
Okay no, you have no control over that when calling read pixels
I patched it to 8, never checked it though π
That should be already patched in neoform
Yeah, found the patch, we're probably using the NeoForm version from before that patch
Though, hmm, no, that wouldn't make sense since the commit to enable publishing to the snapshots maven was made after that fix π€
I forgot to fix it in the joined
I am going to add fields to TextureFormat indicating whether a particular format has color, d epth or stencil
Since that is independent of the graphics backend used, the enum seems like a good place to add it.
Uh why are they configuring GL_TEXTURE_COMPARE_MODE, This seems to be for sampling from depth textures, are they doing that?
That's the special-casing I was wondering about
Oh interesting
Reading up on this, by default if you use a depth texture and sample it from a shader, you do not actually get the underlying depth value.
Instead, you get the result of a depth comparision defined via GL_TEXTURE_COMPARE_MODE / GL_TEXTURE_COMPARE_FUNC
So by setting it to GL_NONE I suppose they do enable certain shader ops?
@lunar saffron https://github.com/neoforged/Kits/commit/406740c071c16f91d635534969bec703ee1d3198 Quite extensive, but I think this way it at least fits mojangs designs more neatly
You flipped the if (texture.getFormat().hasStencilComponent()) check
Otherwise it looks reasonable. Maybe too extensive for my taste heh
oops π
OTOH, that's kinda the nature of adding stencil support....
I did question for a moment if it's even worth adding back ^^
Could just have hardcoded more texture types in the various if checks I think
Idk if it would have been shorter though
That would just suck more π
_backupGlState / _restoreGlState is obsolete in my opinion
Any opposition to just dropping it?
From reading the code, I would concur, so none from my end......
So do the Pipelines not result in the same structural logic?
I think it's probably a code-smell to see raw GL calls in "normal" rendering code now
Where they store the entire state
Yeah the RenderPipeline is what normal game code would use, I think
Which is why I am writing the stencil state for that r/n
Oef
Okey
I know it is needed
But you know.....
Whished that it was there already XD
Well we have to, otherwise a modder would have no interface to even set the stencil state without completely going behind the RenderSystems back
Yeah for sure
While I am at it, I am extending the state to what's the common denominator between D3D11, Vulkan and GL
Very nice π
Ultimately for us it's just separate back/front face settings
D3D11 also has a stencil read mask, but GL and Vulkan have no equivalent for that
And OGL/Vulkan allow setting the write mask separately for front/back-face which D3D doesn't support
the back/front face stencil settings actually have a purpose for rendering occlusion stuff IIRC
but it has been a while
Oh I was wrong, GL does have read mask, I just didn't find it π
Unless people suddenly stop messing with global state it's not obsolete
It is because the render pipeline will always fully set the state
So the enable/disable depth or blending calls are gone from gui rendering?
Doesn't matter
Saving the gl state was introduced for item decorators, which would otherwise have a tendency to mess up the global state
Or do you mean purely for ui rendering?
Yes UI
I will check again when I am home, but I think everything goes through the abstraction
Pipelines will set all state on the gl state manager though so if you changed anything it will be set correctly on the next pipeline anyway
You might only mess up others not using a pipeline. And i think you might wanna use that in all cases if you break out of GUI graphics
This was always about UI rendering which was disconnected from render types
Pipelines are not really about render types
Look at the pipeline
It's essentialy an immutable persisted snapshot of render states
In 1.21.4, the fix in ItemDecoratorHandler prevents the screen from flickering due to the blur effect in the escape menu, iirc
The rendering has changed massively
But hey I could be wrong l. Still getting more familiar with it
The fix no longer fixes the bug that is supposed to be fixed, as it is fixed in Minecraft 1.21.2
That's currently not very helpful since it changed so much that your prior testing is invalidated by it. Just hold off until there is something that actually runs again. Then we can reassess
@gleaming pendant
GlStateManager is not being used outside of blaze3d
And RenderSystem has no way to set blend, for example
There are however various pre-defined RenderPipelines for GUI drawing
I am still convinced the state backup is now obsolete
I would agree with that
Alright then
Ya are not gonna like this one either, Tech
That's the extra stuff needed to actually wire up stencil for the RenderPipeline
just a few parameters
Yup.
It follows our policy to add bounce methods, although it's very questionable
(in this particular instance)
Mods like sodium will have to adapt to the stencil buffer crap on Neo either way if they inject or override any of this, so I wonder if we should actually add a bounce here or not.
Mods are not gonna use it (that's what the builder is for)
the use of an optional is a bit suspicious granted it's mojang's pattern inside the class
well usually we don't want to touch vanilla ABI
also your optional can be null
you forgot to initialise it to empty in the builder
I don't think Sodium touches any of the targets being discussed here
I can't really think of anything other than the mod that makes the game window transparent π
thanks, will rectify that. and yeah I followed Mojangs lead on BlendFunction even if I don't like it
Hmmm. Why would this test disable blend? (Item Decorator test)
It's drawing opaque anyway
For what it's worth, if there are feature requests for the rendering api, I'm open to hearing them. Things like stencil operations and more texture formats are totally valid and if it makes your lives easier & increases the odds mods will use this vs hacky raw GL somewhere, I'll call it a win.
upside down man π
Oh that gives me the chance to say I like the new abstractions a lot π
At least for NeoForge mods have access to the patched sources, so hopefully that leads them to do things correctly. π
Stencil would be nice, and of course that also means the corresponding formats (currently we patch in DEPTH24_STENCIL8 as well as DEPTH32_STENCIL8) + framebuffer attachments
Not sure how much is relevant to you, but if it is we'd be happy to reduce our patches π
I did implement it along the lines of your existing abstractions up to the RenderPipeline & Builder, but have to yet to actually test it. If I interpret the intended usage, I'd say we have to define RenderPipelines + associated RenderTypes to make use of it π€
buffer textures and array textures would be pretty handy 
and if you're able to expose instanced draw calls through those fancy new Pipelines that would be all the better
Not sure about commenting out stuff like that, it will tend to remain commented out forever π
Which stuff in particular?
I had thought I didn't actually commit commented out stuff, if I did, let me know π
I tried moving it to a separate changelist
we should copy paste Mojangs approach for GL labels and extend it to GL debug groups
that would really make analyzing stuff in Nsight and renderdoc a lot easier
@gleaming pendant thanks for pointing it out. reverted the accidentally commented out stuff.
tbh (especially as things are PRs before individual branches), in theory that could be addressed by good etiquette of a specific comment message for when you comment something out and need to uncomment (such as TODO: Uncomment) and then a check task that prevents merging the PR if there are any todos matching a specific syntax
I definitely want to but we need to refactor to allow for multiple vertex buffers first (you can see the api wants it but realistically VertexFormat and such are single buffer)
It also doesn't help that they're not so useful without 3.3 or an extension π¦
buffer textures help significantly with that, and I've found they typically perform better than instanced arrays. but yeah things are much more flexible once you have 3.3 or shader_bit_encoding
Tech has a point, I just saw there's still a ton of commented out cod ein IGuiGraphicsExtensions π
// TODO: 1.21.2: do we need to fix these or can we just remove them?
Was there anything specific that made Minecraft use 3.2 instead of 3.3? I'd heard many times from the community that there aren't any GPUs that support 3.2 but not 3.3
At the time most of our mac users were 3.2 afaik
Today they may be better but we are waiting for numbers to find out
I see
Moving to 3.3 would be good for certain rendering mods so they don't need to check for it, at least
It's difficult when working with such a large userbase, to remember that even dropping support for 0.1% of users is actually a giant amount of people π¦
True
The fact it's a 15 years old game must not help either, I imagine.
IIRC, almost all of them are superseded by vanilla methods and can be removed. I can look into them later
Do you know off the top of your head why the loading overlay uses such a complicated way of blitting a quad?
What does it do?
I wrote that years ago and don't know if it changed since then π
Oh sorry, I was referring to Neos loading overlay π
Ah!
Hmmm so when we run through our external GL code and return to normal rendering, the command encoder still thinks it last rendered using a GUI pipeline and doesn't re-apply the desired state.
We might want to add a forgetLastPipeline() or markStateDirty() call to the GL encoder for this π€
The answer is probably as simple as not wanting to duplicate the overlay rendering across FML and Neo
I think it may just not have been updated after guiGraphics was introduced?
Getting somewhere
(With GuiGraphics blitting the quad)
But notice the border around the mojang logo, something about blending probably borked hm
If vanilla created the window earlier in the loading process that might help Neo
Possibly you wouldn't need to defer it in Neo if it already runs early enough
No we always have to create the window
Mod discovery can take an arbitrary amount of time and will always happen before the minecraft code is even loaded
So in other words: we need to show progress during that phase, and to do that, we have to create the window.
Ah yes
Hmmm, it's not just my eyes. This blending of the mojang logo (it's fading in) looks wrong, right?
yeah that doesn't look right
Weird...
The blend state looks ok:
vanilla
That is some weird artifact, the actual framebuffer texture - when inspected - looks ok ?!
Oh huh, it overwrote the alpha value to also be <1 in the render target
in the area of the mojang logo, I mean
OK yes, blend function is incorrect for SRC_ALPHA.
Oh wow. This is a bug in ExternalDisplay oO
Heh
I still need to setup abstractions for that at some point in a friendβs project
I just wonder if I should design the stencil abstractions with the lowest common denominator between DX, Vulkan and GL. Or if the abstractions in MC are only designed with GLs capabilities in mind.
Ugh. we have to rework EarlyDisplay. We're messing up a ton of GL state apparently π€
Something I haven't figured out a strategy to diagnose, but I wonder if the difference in ImGui allowing multiple viewports on Fabric vs multiple viewports crashing on Forge & NeoForge, comes from Early Display
Something to do with a null window pointer or something. Been several months since I touched it
I am trying to diagnose the issue of the cubemap rendering like this for a second while fading from loading overlay to main menu
As far as I can tell (debug labels help a lot), somewhere in the pipeline, it captured the vertex buffer used by early display and held on to it.
Oh fuck, this is a vanilla bug 
@sharp haven In CubeMap.render: renderpass.setIndexBuffer(rendersystem$autostorageindexbuffer.getBuffer(6)
The ensured capacity is too small, it should be 6 * 6. You're not seeing any effects since the loading overlay will already have allocated more than 6 indices, since we skip the loading overlay, we see the issue π
Noted, ty!
who do we need to bribe to ensure that never happens
When I took graphics in college I was extremely surprised to learn that almost everyone besides mc thinks of z as up/down
I think that's a slight exaggeration π it's definitely not universal
Fair- the professor definitely made a larger impact on me by saying that. Maybe it was a ruse to get me to pay attention in class π
I would guess that's because some might consider the XY plane to be 2D, then the Z axis adds on to that for 3D, so Z becomes up/down
Yup thats how it was explained to me
XY is 2D and Z adds depth
while some consider the XY plane of math, where the Y axis is up/down, and extend it with Z for depth
how MC does it though makes more sense from a physics 1 perspective (at least in the states)β what have you when you model a ball bouncing from a fixed height, the x axis is length and y is height in that case
We just used x1, x2 and x3 in math 
mc uses opengl right
so it would make sense that notch built the game around that reference frame initially
right and left handed, that's also fun
April fools comes around and mojang adds a new direction to the direction Enum
Ana and Kata, it's a 4D game now
The new directions are hubwards, rimwards, turnwise and widdershins
5D?
BlockPos to be refactored to polar coordinates
wouldn't cylindrical coordinates make more sense for a disc?
I was once thinking about 4 dimensional space, and wondered what one would call the 4th axis cardinal directions
Like I said
To describe the two additional cardinal directions, Charles Howard Hinton coined the terms ana and kata, from the Greek words meaning "up toward" and "down from", respectively.
completely unrelated but I recently played a game on steam called 4D golf that really helped me conceptualize interacting with an additional plane. I'd highly recommend it if you like that kind of stuff
CodeParade makes great videos too
I don't love those names.
with the others you can say like, "3 meters upward"
but "3 meters kata" sounds weird and "3 meters kataward" sounds even worse
We need this for the port: https://github.com/neoforged/FancyModLoader/pull/255
(Well or something along those lines at least).
Otherwise we have to reach deep into the CommandEncoder and clear some cached state everytime we update our loading overlay framebuffer.
Merged
Hey guys, what's going on with neoform for the latest snapshot?
I saw the build failed initially due to decomp issues, but latest vf fixed that I thought.
The VF build that fixes it is a snapshot and will disappear at some point. The NeoForm version built on it is therefore also published as a snapshot
Oooh, I didn't see there was a snapshot version. Thanks!
Snapshot 25w09a brought us datapack version 69, with lots of improvements to SNBT and data management! Check out the details here! #minecraftemployee
slicedlime works as a Tech Lead for Minecraft at Mojang, but the YouTube and Twitch channels are personal projects run entirely in his spare time. This is an unofficial update video that aims to b...
Left handed is wrong π
z-up makes sense for manufacturing and geography
y-up makes sense for cinema, photography, and anything else for which you have a camera
I'm surprised blender is z-up
I guess whoever started it was CAD-oriented
Or they were just copying 3dsmax
hmm
yeah I prefer left-handed axis
y+ is up, x+ is right, z+ is forward
and forward means away from the camera toward the horizon
I don't personally like the hand rule, because it fucking depends on which finger is which axis
look, I just made a left hand rule, using a right hand! ... and my drawing for it is shit!
Slight issues π
lol
I might steal this. That's actually amazing.
mojangular prism 
The hand rule requires thumb to always go up lol
well that's arbitrary
selling it as modern art...
Or as the loading menu for April fools 
Monag NFT
Flashbacks when they changed the map orientation, swapping north/south and east/west axis 
A server I used to play a lot and which still exists today still has its capital city with suburbs named from the old orientation, which can be confusing for newcomers 
1.0.0 Beta 1.9 Prerelease 5 Prior to this update, the sun in Minecraft rose in the North, which threw off many players and led to a common misconception that Minecraft maps/worlds were oriented with East at the top. The sun now rises in the east and sets in the west, making navigation much more intuitive.
https://minecraft.wiki/w/Map#History
wasn't that historically the case? that maps were drawn with east at the top?
Given that each culture has a very different idea of who, or what, they should look up to itβs perhaps not surprising that there is very little consistency in which way early maps pointed. In ancient Egyptian times the top of the world was east, the position of sunrise. Early Islamic maps favoured south at the top because most of the early Muslim cultures were north of Mecca, so they imagined looking up (south) towards it
Christian maps from the same era (called Mappa Mundi) put east at the top, towards the Garden of Eden and with Jerusalem in the centre.
In the new snap shot what rendering changes happened?

There's a lot of dust in the air surrounding rendering right now, best to give it a minute
@oblique tusk can you change the Kits default branch to 25w09a? π
When you have the time to push the FML PR through I have yet another that should finally fix the loading overlay π
Yeah, I saw. I'm currently looking through the GuiGraphics extensions and I'm thoroughly confused by what blitInscribed() (https://github.com/neoforged/NeoForge/blob/1.21.x/src/main/java/net/neoforged/neoforge/client/extensions/IGuiGraphicsExtension.java#L131-L147) is supposed to do π
I have zero clue π
I'd say just delete the rest for now, btw.
Yeah, the bordered and nine-sliced helpers are already gone, they are superseded by vanilla
Hmhmhmhmh I wonder if this is a decompiler problem
We end up with an int[] in a uniform map for OutSize which in truth seems to be a float Vec2, leading to a crash later
I did find this:
renderpass.setUniform("OutSize", rendertarget.width, rendertarget.height);
Where the parameters are int so it selects the int... overload
Yes, that's a decompiler issue. coehlrich fixed it in NeoForm but forgot to fix it in joined, so it doesn't apply in Neo ^
Looks like the next Vineflower update will fix it at the root though: https://github.com/neoforged/NeoForm/commit/f44711f9c925da702c730e554eafc92c1cbc13e4
Ok yes, fixing those shoddily by hand gets me ingame at last
Yeah, that's what I'm doing at the moment as well, I have the float casts sitting in a separate changelist
Is there any particular reason you don't set the debug message callback when only GL_ARB_debug_output is available?
Aight I did push the loading overlay already even if the FML side isn't fully fixed up yet
Lazyness and when i checked KHR_debug seemed universally availalbe
Especially since pretty much only devs are going to enable it anyway
Fair enough
I might do it if we ever have demand for it
Sounds good to me
The overlay is now just blitting using guigraphics
There is a behavior change though, I think. it's now just stretching the FB to window size. the old code did seem to have something to account for that? We should instead just change earlydisplay so it's capable of resizing its fb
The easiest way probably is to pass width/height from LoadingOverlay to DisplayWindow.render and have it resize on-demand
Likely, yeah
I like that solution, it's really quite clever π
it is done
I'm surprised your messages aren't upside down
ΒΏsα΄Ι₯Κ ΗΚα΄Λ₯
it's autocorrected
thankfully, upside-down English is 1-to-1 translatable to regular English
All entities can now store custom data ?!
π
getPersistentData in vanilla
<@&1067092163520909374>
Changelog: https://www.minecraft.net/en-us/article/minecraft-snapshot-25w10a
SnowMan: https://github.com/neoforged/Snowman/commit/f1b2bc4d435f4fb3841f7df12df2fcaab3978172
Primer: https://github.com/neoforged/.github/blob/0d9188849280392175d446feca625df08945d266/primers/1.21.5/index.md
-# Changes: https://github.com/neoforged/.github/pull/14/commits/a91141152cec727a4d85cca7279c522e2f6efc7f
Slicedlimes Videos:
- Main: https://www.youtube.com/watch?v=cDnodfKQ5_s
- Data/Resource Pack Changes: https://www.youtube.com/watch?v=raSxpv8SJn8
Snapshot 25w10a is here with a new game rule for TNT explosions, a new menu background and more! Check out all the changes here! #minecraftemployee
slicedlime works as a Tech Lead for Minecraft at Mojang, but the YouTube and Twitch channels are personal projects run entirely in his spare time. This is an unofficial update video that aims to be ...
Snapshot 25w10a brings us universal custom data support for entities with datapack version 70 and resource pack version 54! Check out all the news here! #minecraftemployee
slicedlime works as a Tech Lead for Minecraft at Mojang, but the YouTube and Twitch channels are personal projects run entirely in his spare time. This is an unofficial updat...
ohno
we are getting entity components (at a later date?)
MAKE UP YOUR MIND ABOUT FLOWER TAGS
oh mojang made custom data official?

Unified format and functionality of predicates for components on Entities and Block Entities
Sounds like it
The component is currently stored in a field called
data, which will be changed in the future when more proper storage for entity components is introduced
ooh it's a component!
block entity components 
they half (more like 10%)-assed entity components
oh shit
they hold it in a dedicated field for now
Now we have functions in SNBT like CSS
but they seam to have confirmed that components are the way to go and will be switching all data to it by the looks
bool(5) is valid SNBT for true
^ β
The Uuid helper is nice
True
TNTN'T
uuid(8333dc86-5812-47fe-a3a8-9fe70df6ce4e) goes hard
well the game rule in my mod is now obsolete

rather small snapshot
No u
"undefined behavior" lmao
it's good to have weeks when the world isn't ending
with the addition of the panorama i'm guessing this is near the end of the cooking and will get an rc soon
They are working on Killer Frogs to go with Killer Bunnies
Because currently the only non-core shaders are post processing shaders, right?
RIP CompactCrafting again
Small snapshot
oh heck, right, today's Wednesday
Ya
am i missing something, cause i only see item tags being changed
datagen for block tags
ah
snapshot code for TNT looks fun. Can't wait for dataless block components to happen so I can turn packed ice into TNT
Suspicious Ice

Ooh, their SNBT function system supports multiple arguments
Does NeoForge perhaps want to make this not an immutable map (or provide an event to extend it)?
I've always wanted turing-complete SNBT
They mention that they will introduce a proper system for entity component storage in the future π
it better sync too
finally, an entity component system in minecraft
I'm not sure if this is my decompile being dumb, but won't this code crash? I'm not seeing DataComponentGetter implemented anywhere near BlockEntity
that casts the returned value of collectComponents
gotta love those subtle differences
in this case, (Thing) something.method() vs ((Thing) something).method()
oh, it is just me being dumb
the lack of a space makes a world of difference when you glance at it
mojang needs to release their style guide so we can format the decompiled code correctly π
better be spaces
that too
Wdym, don't they have all space removed, putting everything onto 1 long line?
To my knowledge, they forgo the tabs vs. spaces debate and just use newlines instead. They don't agree on whether to use 1, 2, or 4 newlines per indentation level, though.
are you sure you're prepared for the amount of final? π
if (x instanceof final Whatever whatever) {
Minecraft 1.21.5 Update Playlist βΊ https://www.youtube.com/playlist?list=PL7VmhWGNRxKixIX8tWEQn-BnYKE9AaAXk
Snapshot overview video on Minecraft 25W10A
Minecraft Live 2025: Announcement Trailer
https://www.youtube.com/watch?v=1lWDHaqw-B4
All My Links In One Place
π https://linktree.xisuma.co
π Support Xisuma Directly π
π Membership βΊ https://...
OH tnt refuses to create the entity, doesn't refuse the interaction itself lol
still removes the block from the world though 
@marsh mural
Main changes would be the addition of DataComponentMatchers and Entity now holding a CustomData
is this an oopsie?
Yep!
I've seen DFU, so I know it's basically the same as me
Just less var
final var is best
That is what I do in all my Java code
final var everywhere
π€¦
Alternatively, lombok.val
Please no
Why not? It's final var but shorter
added sliced limes snapshot video to pin
How is lombok.val shorter?
Three characters instead of nine
You import it and you use val
Ahh
It's still lombok
Vineflower 1.11.1 has finally been released
Cool!
That's a lot of 1s
Was watching a youtube video and started to wonder.. have potion effects been moved to components yet? I feel like I remember discussion on removing stuff (like milk) but not adding..
That's just storage though, right? It wouldn't replicate a potion bottle
potion contents hold which potion it has
the consumable component makes it drinkable and applies the potion contents if present
Yeah there's a potion contents data component, I use it in one of my mods to detect potion bottles and copy the potion effect into a fluid
Been a data component for quite a while now iirc
Isnβt there also a ConsumeEffect
what??
today?
New Minecraft Snapshot: 1.21.5-pre1 https://www.minecraft.net/en-us/article/minecraft-1-21-5-pre-release-1
damn
Changelog: https://www.minecraft.net/en-us/article/minecraft-1-21-5-pre-release-1
SnowMan: https://github.com/neoforged/Snowman/commit/c39cf21b9b5f63541c27d51082ee142c4840eafa
Primer: https://github.com/ChampionAsh5357/neoforged-github/blob/20eab0f796b967a9104006310c966e04a8bd6953/primers/1.21.5/index.md
-# Changes: https://github.com/neoforged/.github/pull/14/commits/1ee50efd74447d3315d81b9a7322cebdf038022e
Slicedlimes Videos:
- Main: https://www.youtube.com/watch?v=DIUd4fWkm3Y
- Data/Resource Pack Changes: TBD
A first pre-release is out for Minecraft 1.21.5! Here's a guide to all the changes! #minecraftemployee
slicedlime works as a Tech Lead for Minecraft at Mojang, but the YouTube and Twitch channels are personal projects run entirely in his spare time. This is an unofficial update video that aims to be the most comprehensive guide possible. Offici...
daammmunm
It's in launchermeta
it's no snapshot, so no wednesday cycle
fuuuck

prerelease 
damn
They've added windows commands /s
nice

the bots are slacking
Lol
I wonder, are those just PNGs or did they keep the color masks somehow?
I haven't looked but I presume they have moved the old color masks to the programmer art resource pack
Added snowman link
client items constant tints?
would be the easiest imo
Did they make the pack versions line up again?
ah right
no
I guess they're aiming for a release before 1st April? I had assumed it'd be after.
Was just wondering about this wording
mybe they want to release april 1st specifically 
that's just wrong 
April 1st, fluid layers to allow waterlogging/lavalogging any block
Then revert it on April 2nd to troll us
thanks now you made me think of milklogging using neos milk fluid
and now i kinda need that 
but a generic "fluid logging" cap which supported any fluid would be nice
rather than the current system which is mostly hard wired to 1 fluid type (water in vanilla), since its tied to the waterlogging property
isn't that cause this way it only needs to store a single bit of information?
i thought it was a space saving thing for world storage...
A lot more of Blaze3D is @DontObfuscate now
snow layers in my fences, please, i need that
do booleans actually get compressed to a single bit in world storage or are they still a byte?
Technically a string iirc, but chunks are palleted
I know they are, but the question still stands
In memory, it's a byte, but it's less possible values, which reduces the total number of block states
sure it cuts down the amount of possible states by a fair bit
The better thing to do would probably be store fluid information entirely separate from blocks. I think there was a demo of that posted on twitter, but it never made it into 1.13? Can't remember, it was many years ago now.
I mean, didn't mojang start work on non BE block data?
The code is kinda designed for that for sure
a la item components
Level has getFluidState, which seems like it would access extra fluid data, but instead it just gets the block state and turns it into a FluidState
I mean, you can add lavalogging, mek does so for their blocks
Yeah you can, but it's annoying to have to hardcode every fluid you want to support in
And then you don't support fluids you don't know about
well yeah
It would be neat if they used a separate palette for fluids
For sure
It doesn't require too many patches to pull off, surprisingly - https://github.com/Leximon/Fluidlogged/tree/v2-1.20
Oh huh. Obviously the Level interface is built for this, but I thought the actual implementation would require much more code.
Do not envy having to write data fixers for this though.
how jank is this? how much does it break things?
I've played around with it a couple times by itself and didn't see any obvious bugs iirc
The primary issue is mod compat because most mods correctly assume they can ignore level.getFluidState and just look at the blockstate
And looking at some of your patches, Vanilla appears to do the same in places
I didn't make that mod fwiw
the 'safest' solution would probably be to make BlockState.getFluidState throw an exception in order to catch code making such assumptions
Mostly because might as well skip an extra lookup from world for performance reasons if it wonβt do anything. Though deprecating that method and making the proper patches, should get mods to hopefully move away from it back to the proper methods. Especially if people report bugs to the corresponding mods when things go wrong
Deprecation and error logging strikes me as safer. As some mods might not test every single code path (I know I donβt just due to mod size). And no sense harming the users just because a mod missed updating a spot
Plus we can always use waifu to then check what mods are still using it and open issues for them
Ah yes, I love how the solution to checking infinite materials is basically, throw a skip packet exception
Discard all bad packets!
For some reason, I want to see like a thousand player server with that enabled
Oh, and there's a Minecraft live on the 22nd, so I guess release sometime after that?
i imagine itll be available right after
they announce the first summer drop features and then release them
tbh personally, that doesnt sound or look all that useful to me
although for accessibility i see some users liking it
Would be nice if there was a way to check your XP while players are around
The above and below seems quite useful to me, since the number of times I can't find my friends while caving is high
Actually, wait - yeah, that would be really handy.
Apparently blade3d is less obfuscated
whats the point when we have the mappings anyways
oh gods, I'm late and the pr is early, p a n i c
It means they are moving closer to making it standalone and hopefully open source
Though from recent changes that could have been inferred as well
RemoteSlot.Synchronized tho 
yeah i noticed that too, menus now usinga RemoteSlot for the stack syncing, rather than raw ItemStack
Big hype there, probably means inventories are getting a deeper look soon
something id like is now that we have stream codecs
that the "data slot" system gets expanded to sync any data type not just ints
RemoteSlot<T> 
Subtle but big change
THE COMING OF THE NULLs
no, they removed nullability
only certain states having blockentities? other vanilla code already didn't support that
vanilla supports per-blockstate blockentities in all places basically except for some command autocomplete suggestion and one spot in level that neo could've patched
does this mean that newBlockEntity in EntityBlock is also none null? now
well, now they don't 
or at least they don't support some states not having blockentities anymore
that would be a issue for my multi blocks, i only returned a block entit yinstance at the origin block
all others returned null
have to use different blocks now, I guess?
sorry @torpid sandal, the mojang has spoken
your per-state blockentities is dimma-gone
guess i need to make a delegating block entity type
that delegates all other block netities in my block block to the root/origin
(if you return null for create, you will crash people not expecting null)
well, just nullable ones, different states having different blockentities is probably fair game still
Yet another breaking change to Crafting.. sigh
I still don't really understand why Level.{set,remove}BlockEntity still exist TBH. Is it just for pistons?
No more active-only BEs, gotta split that now...
setBlockEntity is only used by pistons
Ahhh. Okay, so you can still return null from EntityBlock.newBlockEntity, it's just the type's factory which isn't nullable. Which fair enough.
ah thats good, i can continue reutrning null there then for my mulit blocks
but i should maybe look into delgates at some point
since seems mojang might change that to none null too at some point
*non-null
well, no
if I understand correctly, EntityBlock#newBlockEntity is used to create the block after setting a block into the world, the type's factory is used for reloading existing blockentities
ah wait I see what you mean now
if there's no blockentity then nothing needs to load it 
Yeah! It's a bit odd that the factory was ever nullable really!
The one thing I really wish Moj would kill about BEs is the deferred level set
I wish it'd just construct the BE class with level and NBT data, rather than setLevel and load
That would require rather significant changes to worldgen because worldgen does not operate on a full Level
It would be nice if you knew whether the BE was for the client or server at construction time. Really I'd like better separation of client/server BE state, but no clue how you'd design that.
I'm at a conference this week, so I won't help with the port this week unless there's something urgent? (Doubt)
gotta love such changes...
DynamicOps for hashes?
no for hash browns
It looks like it's a way to avoid sending the whole item stack from the client to the server when the client moves items about? So now it just sends the item(s), plus some CRCs for the component patch.
I'm kinda surprised that item movements generate enough network traffic it was worth doing. I can't see anything in the fixed bug list, but maybe someone had items with absolutely massive components?
Would be way cleaner to give items an ID in the menus like we do in AE2
The CRC sounds like a great way to get random failures with low probability
Oh, to be clear, this is for ServerboundContainerClickPacket. So AbstractContainerMenu.clicked is called on the client, then sent to the server (along with a map of changed slot -> HashedStack). Then clicked() is called on the server, and the container's remote slots are updated with the HashedStack to avoid re-sending those changes back to the client.
I really should spend more time reading the menu network code. I thought I understood it, but I had never even looked at this code before today.
If an item has deep NBT (shulker full of enchanted books for example), moving it around did cause a decent amount of traffic
Or if you use commands to give you a full chest of full chests of full chests, that could lag or outright OOM the game
Added sliced limes update video
Primer has been updated with the new game test registry-driven format
HashOps has been added
still haven't gotten an answer as to what those actually do
so encode only?
oh interesting
Yup
looks at my decode only ResourceOps 
For completeness, you also have NullOps
well yes, and JavaOps
Can we have VoidOps?
how would that be different to NullOps?
One crashes, the other doesn't
Different name
mine is just a DelegatingOps
I have to bump DFU someday, and see if I need to make changes to adapt to latest DFU
VoidOps sounds like it would use null, which causes NPEs. NullOps uses Unit
What about UnitOps then?
DynamicOps<Codec>
yes, we need turing-complete DFU
OpticOps 
OpticsOps. Oh wait
no clue how that would work, but yes
The joke is that DFU uses something called profunctor optics
Yes, let's just serialize arbitrary code to send between the client and the server. There's no problems with that, right? No problems! None whatsoever! Security is fine! Everything is fine!
looks at OIS
but think about it! all you have to do is load the class and get the value of the field, and you have the data already deserialized!
No problems! None whatsoever! We don't have any security problems here! Nope!
DevOps
PsyOps
what we really need is XmlOps
it is doable, but only for a subset of xml
xml is more flexible than the DynamicOps format expects
Changelog: https://www.minecraft.net/en-us/article/minecraft-1-21-5-pre-release-2
SnowMan: https://github.com/neoforged/Snowman/commit/00823a2c85a7360d45823368f8c6339afb0c3ed3
Primer: N/A
Slicedlimes Videos:
- Main: https://www.youtube.com/watch?v=9XeTq5sjlG0
- Data/Resource Pack Changes: N/A
<@&1067092163520909374>
A second pre-release is out for Minecraft 1.21.5! I've promised you videos so here's certainly one of the videos of all time. #minecraftemployee
slicedlime works as a Tech Lead for Minecraft at Mojang, but the YouTube and Twitch channels are personal projects run entirely in his spare time. This is an unofficial update video that aims to be the...


So ahem
I was just porting AE2 to 1.21.54, ig I can just stop that and go to 1.21.5 huh
.4?
i wonder how much screming they have internally whenever this kind of bug happens

No primer for this update. Only bug fixes
link is also broken
A second pre-release is out for Minecraft 1.21.5! I've promised you videos so here's certainly one of the videos of all time. #minecraftemployee
slicedlime works as a Tech Lead for Minecraft at Mojang, but the YouTube and Twitch channels are personal projects run entirely in his spare time. This is an unofficial update video that aims to be the...
heh he made a video about it, i was assuming since such a small update and just bug fixes no video
but eh into my pin you go
@fleet dome I'm currently looking at fixing the stencil test mod and I'm realizing that the current implementation of the stencil stuff (i.e. "static" definition in the RenderPipeline) is basically unusable in practice because it requires buffer wrapping (i.e. copying stupid amounts of code in the case of the stencil test which renders two items) to do basically anything outside manually putting vertices into a buffer. I think it would be better to take an approach similar to how vanilla implements scissoring where RenderSystem holds a "scratch state" which is copied into the RenderPass in RenderType#draw()
Also, enabling stencil support while using Fabulous mode immediately crashes on entering the world because the stencil stuff isn't properly set up on some render target:
java.lang.IllegalStateException: Couldn't perform copyToTexture for texture 1 to 57: GL error 1286
at com.mojang.blaze3d.opengl.GlCommandEncoder.copyTextureToTexture(GlCommandEncoder.java:482)
at com.mojang.blaze3d.pipeline.RenderTarget.copyDepthFrom(RenderTarget.java:76)
at net.minecraft.client.renderer.LevelRenderer.lambda$addParticlesPass$5(LevelRenderer.java:685)
at com.mojang.blaze3d.framegraph.FrameGraphBuilder.execute(FrameGraphBuilder.java:73)
at net.minecraft.client.renderer.LevelRenderer.renderLevel(LevelRenderer.java:513)
at net.minecraft.client.renderer.GameRenderer.renderLevel(GameRenderer.java:708)
at net.minecraft.client.renderer.GameRenderer.render(GameRenderer.java:485)
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1267)
at net.minecraft.client.Minecraft.run(Minecraft.java:865)
at net.minecraft.client.main.Main.main(Main.java:240)
Breakpointing the GL debug callback I get a GL_INVALID_FRAMEBUFFER_OPERATION error generated. Operation is not valid because a bound framebuffer is not framebuffer complete. from GlCommandEncoder#clearDepthTexture() and GlCommandEncoder#clearStencilTexture() and a GL_INVALID_FRAMEBUFFER_OPERATION error generated. Framebuffer bindings are not framebuffer complete. from GlCommandEncoder#presentTexture()
Haven't looked at scissoring, but ultimately you will require two separate draw calls and I took the RenderPipeline definition as the encapsulationed state for that draw
The crash in copyTextureToTexture() is once again a red herring
So I modeled this after depth testing which is related
The problem with putting it in the RenderPipeline is that it's completely static which means that for every existing RenderType you want to handle, you would need two "wrapping" RenderTypes and associated RenderPipelines to draw it, one for writing the mask and one for using the mask. A RenderPass encapsulates the specific state of a single draw, a RenderPipeline encapsulates the state used for every draw of the respective "type".
Ok sure, but how is this different from toggling the depth state? That is used just as much for special effects, really. (Drawing the same object twice with different depth settings)
I mean I can have a look at how painful it is, but maybe the option is making forking existing types easier π
Forking existing RenderTypes is the least of the issues. The primary issue is that you end up copying render code all the way until you hit a place where you can control the buffer in order to wrap it. And yes, I agree that tricks with disabled depth test are equally painful. I would however argue that an existing system making certain tricks a pain for us doesn't mean that we should intentionally make another system (one we specifically add) a complete pain in the ass to use
Good thing we have a testmod lol
Summary of the port's state (at least from what I've noticed):
- The Neo loading overlay throws GL errors, though this would be fixed by updating FML to 6.0.14 (is there anything blocking us from doing so?)
- Custom key binds don't save, they always get reset to their default bind on restart
- Stencil support crashes with Fabulous mode
- Game test registration by the test framework is still broken (throws a duplicate registration error when entering a singleplayer world in the test client)
Pushed
Description: Rendering overlay
java.lang.NullPointerException: Cannot invoke "java.nio.IntBuffer.position(int)" because "this.intValues" is null
at TRANSFORMER/minecraft@25w09a/com.mojang.blaze3d.opengl.Uniform.set(Uniform.java:145) ~[%23204!/:?] {re:classloading,pl:runtimedistcleaner:A}
at TRANSFORMER/minecraft@25w09a/com.mojang.blaze3d.opengl.GlCommandEncoder.trySetup(GlCommandEncoder.java:620) ~[%23204!/:?] {re:classloading,pl:runtimedistcleaner:A}
at TRANSFORMER/minecraft@25w09a/com.mojang.blaze3d.opengl.GlCommandEncoder.executeDraw(GlCommandEncoder.java:554) ~[%23204!/:?] {re:classloading,pl:runtimedistcleaner:A}
at TRANSFORMER/minecraft@25w09a/com.mojang.blaze3d.opengl.GlRenderPass.drawIndexed(GlRenderPass.java:116) ~[%23204!/:?] {re:classloading,pl:runtimedistcleaner:A}
known issue?
compiled latest Kits (after XFact's commit) and tried to launch the game, crashes shortly before the main menu
Yeah, that's a known issue. The decompiler omitted float casts in three places in PostPass and the NeoForm patch for it in the version the port is based on it is incomplete. Later NeoForm versions have it fixed by virtue of a VineFlower update.
we're intentionally not committing that fix to Kits right now to avoid a conflict when updating to the next version, I assume?
Basically, yes
@lunar saffron is your complaint that you can't really override the rendertype when rendering foreign geometry (such as items via guiGraphics)?
Yes
Why didn't you just say that π
So blergh, yes, but IDK if just pulling it out into a global renderstate is so great either, you need to be REAL careful with ordering the draws then hrm
I did say i.e. copying stupid amounts of code in the case of the stencil test which renders two items π
I'll excuse myself by saying I have a cold π
Hehehe
okay urhglrhglhrglh, so we move it to RenderState like scissor?
Or do we think of some other system allowing to intercept and override parts of a renderpipeline before it's applied?
I would go for the the scissor approach
withAdaptedRenderPipeline(this::enableStencil, () -> guiGraphics.renderItem(...));
withAdaptedRenderPipeline(this::disableStencil, () -> guiGraphics.renderItem(...));
and something along the lines of RenderPipeline enableStencil(RenderPipeline) {}
haven't thought much further than that, but we don't really have the ability to override render attributes in any way r/n even though it could be very useful
Hm, ig what you also need is a RenderPipeline.builder(RenderPipeline) to make the adjustments
The problem with a dynamic "mutator" like this is that you'd either still be storing the mutations or a modified copy of the entire RenderPipeline in some global state or, even worse, you'd be modifying the pipeline directly with no clean way to reset it.
they're immutable
you'd pop it into a builder, make your adjustment and build a new one, and ideally cache it using an IHM or other form of caching
I know, not that that has ever stopped anyone 
Well as I said, youd want the ability to do something along those lines:
void RenderPipeline enableStencil(RenderPipeline pipeline) {
return RenderPipeline.builder(pipeline)
.enableStencil(... and other settings...)
.build();
}
Yeah
Hmm, you know what, on second thought this idea doesn't seem that bad actually. The only question is which properties should be modifiable. Modifying the shaders, shader defines and uniforms could be questionable. Modifying the vertex format and vertex format mode should not be possible IMO. The rest is probably fair game unless I'm missing something
I actually think it could enable some interesting effects if you can replace the shaders π
Fair
Tells you how long I haven't run this in Kits π
So I did just prototype this, let's see
- neotests (neotests) encountered an error while dispatching the net.neoforged.neoforge.event.RegisterGameTestsEvent event
java.lang.IllegalStateException: Adding duplicate key 'ResourceKey[minecraft:test_environment / neotests:tests/level.block.event]' to registry
Hmmm
Yeah, gametest registration is still broken as I mentioned earlier. I just commented out the two RegisterGameTestsEvent dispatches to get around that
Ah
Urgh I feel like a newb, how do I evern run that test π
Do I have to manually change the field in the code? π
Set ENABLED to State.ENABLE_UI_LAYER
Yes okay, I just did heh.
Now the problem is... how is it supposed to look π
It looks exactly the same if I comment out my manipulator so I guess I failed π
It's supposed to show a grass block outlined by a diamond block
To NSight!
Or well, wait, maybe I should check first if it ever calls glStencil functions π
So, current prototype:
public interface RenderPipelineManipulator {
RenderPipeline apply(RenderPipeline renderPipeline);
}
And added this to the command encoder (this should probably be callback based)
void pushPipelineManipulator(RenderPipelineManipulator manipulator)
void popPipelineManipulator();
Then changed GlRenderPass:
@Override
public void setPipeline(RenderPipeline p_409823_) {
for (var manipulator : encoder.getPipelineManipulatorStack()) {
p_409823_ = manipulator.apply(p_409823_);
}
One thing we have to be careful about is that the GL device keeps strong references to all pipelines it ever sees
The withAdaptedRenderPipeline() callback solution definitely feels like a safer option
Weird, when trying to run the tests via the launch script, I get a RuntimeEnumExtender crash
Caused by: java.util.NoSuchElementException: No value present
at java.base/java.util.Optional.orElseThrow(Optional.java:377) ~[?:?] {}
at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.common.asm.enumextension.RuntimeEnumExtender.findMethod(RuntimeEnumExtender.java:155) ~[loader-6.0.14.jar:6.0] {}
Oh, hm, maybe I just need to run build in gradle
You've got outdated interface injections. The extensible enum injection for VertexFormatElement.Usage is gone
I am very confused. Even when commenting out all my setter code and setting the GL state directly I can'T get it to render right hm
Oh! The stencil attachment is missing from the FB and it behaves as if no stencil test is enabled :[
Chasing ghosts
That would also explain the GL errors I saw earlier
I think we forgot to actually patch the DSA stuff for binding stencil to the fbo
Okay, yes.
Pushed the fix for the attachment
Alright, I did get it to work with the manipulator but I am unsure what to do about 1) caching (it'll memory leak right now) and 2) whether that's actually worth it π
we might just keep the GlStateManager parts and remove everything else again
Hmm, that pipeline cache is really annoying for this π€
@tardy leaf is the radar replacing the xp bar because xp is getting reworked
isn't it a toggle?
at least that's what I saw in some video about it, that you can choose between xp bar and player locator
ahh I thought the xp bar only showed if you'd gained xp recently
afaik that's only IF you choose to show the player locator, and you are in a multiplayer situation
Are you hoping for a more convoluted xp level calculation to be added? lol
yes convoluted but yes 
For server admins / creators sure, but players, doesn't sound like it, it's on whether you want it or not
Or well that's what I've gathered from the whole bottom section about if it can be disabled
https://www.minecraft.net/en-us/article/test-the-new-player-locator-bar
-# note that I'm assuming "creator" would mean marketplace/datapack creator
while sure they have said this, that's also when I'm least interested and actively looking away from the xp bar
Only time I would be looking at the xp bar is when I'm out of combat planning what items to enchant
But yeah, im against the player bar in it's current form, feel it blocks the xp bar at wrong times, on larger servers with large amounts of players is going to be quite distracting and players not being able to disable it feels very wrong to me, should be players choice not some admins and under the accessibility settings if anything
Tbf, have it display whenever it changes and or when your in a context that uses it, such as enchanting/anvil
Also player tracker is meh
Yeah, rn the player bar is always visible unless your sneaking or have recently earned xp which feels like the absolute opposite to when I actually want to see either the xp bar or player bar
Ye
Yup π
The idea for the system is still good, I think, and goes way beyond stencil effects. But I think it'd require that we introduce a client-side registry for these "manipulators" and enforce idempotency. THEN we could actually cache the manipulated pipeline as well.
That's why I ask... is it even worth it π
I am tempted to for now remove my extension of RenderPipeline and just ask people to use GlStateManager directly for stencil effects
@lunar saffron thoughts? Go all the way with it or revert to the absolute basics for stencil? π
I would say go back to basics for now with the approach used by scissoring. Then we can take time to properly design the other system, potentially even post release
I think we can even go down one level
and not support it on Rendersystem, or do you think we have to?
I think the intermediate state "holder" which the command encoder reads to set the state is a good idea instead of having people set the GL state directly
Uh I have to check that, but you don't get much from that either way
whether you set GL state or set global rendersystem state
you have to manually flush the guiGraphics, for example
So which intermediate state holder do you mean?
GlRenderPass?
There is a scissor state object in RenderSystem which the helpers write to and the command encoder then reads from that
Ah yes, I see, it copies that to the renderpass when it is created
Yup
Ok I'll do that
Ok done
You were on the right track. It was a good idea to mirror the scissor approach
Pushed
π
The stencil clear is a bit... unclear π In terms of ordering
I think I still have to re-add the gui graphics flushes
since those happen outside of command encoding
Yes, you definitely need to flush GuiGraphics before setting up the stencil. If I remember correctly it'll do a flush for you after rendering the item, so you don't need to do it yourself between the two and after the second
You still should since you don't know what the gui graphics does buffer internally
Fair enough
@fleet dome did you intentionally commit the disabled gametest event dispatches?
Also, with respect to the stencil stuff: one thing I'm not sure about is "patching" entire new classes into vanilla packages. I think it would be preferable to keep these in Neo packages, even if their uses are almost all patched into vanilla code
@sterile abyss do you mind taking another look at the gametest registration stuff? When you enter a singleplayer world with the test client, you currently get a duplicate registration error (as long as the gametest registration event dispatches are not comment out of course)
Oops no I will revert that
And yes, I can move the stencil classes while we're at it
but you were fine with me just making it a @Nullable field?
I think having the stencil settings itself be immutable should be fine. people can just hold those in a constant and plug them in as needed
Yeah, nullable is fine since it's immutable
Ok, I moved the stencil classes too
π
hmmm
-# Reminder for #1313560104359956542 message
Successfully scheduled reminder on <t:1742284172:F> (<t:1742284172:R>)!
@sterile abyss
#1313560104359956542 message
@sterile abyss
#1313560104359956542 message
@oblique tusk does Snowman still need a manual kick to get going? If so, do you mind? π
lemme go take a peek at it
wait a minute, I just realized
the bot didn't wake
this is unusual
@sterile abyss is the n8n workflow for New MC Versions supposed to be disabled?
my memory's a bit faulty
Queued a couple hundred runs
iirc n8n's cache of the version-meta got deleted so it decided that every version was new
ah
@marsh mural
Basically some changes for maps, making some methods only available on the ServerLevel along with a useful debug mouse info draw call that's never used compiled out (thanks boq)
*compiled out
Changelog: https://www.minecraft.net/en-us/article/minecraft-1-21-5-pre-release-3
SnowMan: https://github.com/neoforged/Snowman/commit/766424cd7d1d2a818608abc35af452af2d174ef0
Primer: https://github.com/ChampionAsh5357/neoforged-github/blob/dd99315a930aa34291dd0d2d884007bd9bf2c120/primers/1.21.5/index.md
-# Changes: https://github.com/neoforged/.github/pull/14/commits/dd99315a930aa34291dd0d2d884007bd9bf2c120,
Slicedlimes Videos:
- Main: https://www.youtube.com/watch?v=n7EG6ZbPZIs
- Data/Resource Pack Changes: N/A
A third pre-release is out for Minecraft 1.21.5! Here's a quick rundown of the changes! #minecraftemployee
slicedlime works as a Tech Lead for Minecraft at Mojang, but the YouTube and Twitch channels are personal projects run entirely in his spare time. This is an unofficial update video that aims to be the most comprehensive guide possible. Of...
dont mind me, just a little late to the party
when will Mojang uninline their debug flags so Javac stops compiling stuff out
foojay down? the only thing I can think of is to try and update the foojay plugin in case it's an old outdated version in neoform (maybe they got new mirror... idk)
I reran the failed jobs about 16 minutes later and they succeeded
Is there anything blocking us from porting to snapshots beyond 25w09a? If not, I'd be down to hammer away at the rejects later tonight, just need someone to make the initial switch to pre3 because I still have no clue in that department π
https://github.com/neoforged/NeoForge/blob/1.21.x/patches/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch Is it possible to remove the bug fix in this patch?
why
Because the bug is fixed in Minecraft(?)
can you link to the exact jira bug report which fixes this
the bug number is in a comment in the patch, you can use that to search for it
i forget how that works, every time. I think there's a workflow for it π
I HATE MOJIRA CLOUD
same, that's why I asked you to find it for us 
Last time I checked there's more to this issue than what vanilla's fix includes which is why the fix still exists and will most likely continue to exist
oh ok
we must document it!
in that case the comment should probably be updated to avoid confusing people in the future
please
I'll make the switch when I get home then
π
Can you make sure that gradlew build works fine?
Will do
We might want to squash and rebase already
Or maybe we keep that for this weekend
So we lock 1.21.x at the same time
Sounds good to me
(well freeze)
Patches generated and formatting shenanigans resolved, gradlew build only blows up on the :neoforge:createChangelog task with Cannot invoke "org.eclipse.jgit.lib.AnyObjectId.hashCode()" because "id" is null
Try pulling the tags
No dice, same error
Well that sucks π
Unless of course I'm being stupid and git fetch --tags doesn't do what I need it to do
Well, try git tag and see what it lists or sth like that
That lists 20.2 and 20.4
That's not a lot but it should be enough
Maybe try pulling tags from the normal repository
Ok, adding the normal repo as a remote and pulling tags from there fixes it
Probably some weird edge case. Maybe there is a depth limit somewhere
i mean there are only 2 tags on kits https://github.com/neoforged/Kits/tags
which are the 2 xfact said the command lists
so prob just need to push tags from upstream to kits, to fix for future
@lunar saffron ready for the update to the pre?
Yup
alright
pre3 already heh
maybe we should think about making the port public soon
We can almost certainly do that when pre3 is dealt with
Execution failed for task ':buildSrc:compileJava'.
> Could not resolve all files for configuration ':buildSrc:compileClasspath'.
> Could not find net.neoforged:minecraft-dependencies:1.21.5-pre3.
Searched in the following locations:
- https://plugins.gradle.org/m2/net/neoforged/minecraft-dependencies/1.21.5-pre3/minecraft-dependencies-1.21.5-pre3.pom
- https://repo.maven.apache.org/maven2/net/neoforged/minecraft-dependencies/1.21.5-pre3/minecraft-dependencies-1.21.5-pre3.pom
- https://maven.neoforged.net/releases/net/neoforged/minecraft-dependencies/1.21.5-pre3/minecraft-dependencies-1.21.5-pre3.pom
- https://maven.neoforged.net/mojang-meta/net/neoforged/minecraft-dependencies/1.21.5-pre3/minecraft-dependencies-1.21.5-pre3.pom
Required by:
project :buildSrc
> Could not find com.google.code.gson:gson:.
Required by:
project :buildSrc
π€
wtf
two questions:
- why does this require a manual run?
- how did neoform get released?
@sterile abyss
because I still didn't get around to fixing the n8n workflow after the incident
Speaking of that: should we run this for pre2 as well for completeness sake?
yes I would have, but came a little late π
alright, have fun @lunar saffron
Thank you π
how did you do the update again?
(FYI I just followed the steps from https://github.com/neoforged/actions/blob/ac548032c0891a7cb608bdfcbfc88874f794e023/.github/workflows/start-kits.yml#L73)
manually though
oh really?
ah I'm gonna remove the temporary snapshot repos
I thought we had done this automated in the past
yes, the action requires a branch on the main repo
which we don't currently have
but might be hallucinating
did we just genpatches, bump neoform, apply patches?
well yes, that's pretty much it
yeah
I like to follow the steps of the action, it makes it pretty much braindead π
yes, it should be an action too π
i always have to look up the damn property
the -Pupgrading, or is it -Pupdate... or -Pupdating
we should just make that it's own task, tbh
we could but it would probably be a bit messy?
what about that would be messy π
it's basically "run setup but with a different configuration for one of the tasks in the task tree"
setupForUpdate
sure but I don't want to create a full xxxForUpdate task tree? π
π€·
Maybe you could do something with taskGraph or whatever, but blergh
we could alternatively make it a task param, at least gradle would scream at you if you get it wrong
maty made an action but someone rejected it saying it should be done manually
I think it's still somewhere just not on the actions repo main branch
Ok, I've got almost all rejects handled:
- https://github.com/neoforged/Kits/blob/1.21.5-pre3/projects/neoforge/src/main/java/com/mojang/blaze3d/opengl/GlCommandEncoder.java#L499-L502: not sure how to deal with the remaining reject here, I'll leave that to shartte π
- The
DispenseItemBehaviorandTntBlockrejects need some consideration. Vanilla now has a gamerule to prevent TNT ignition, so we can't just shove that into an extension method and call it a day
The remaining compile errors are all related to advancement datagen, I'll try to dig into that now
Well your hunch was right, DSA will do pretty much just what that method previously did when useStencil is used
applying that, how do i actually exercise copytexture hm
By just entering the game with Fabulous mode, then it will be used through RenderTarget#copyDepthFrom()
Hm oh this is still not fixed?
net.neoforged.fml.ModLoadingException: Loading errors encountered:
- neotests (neotests) encountered an error while dispatching the net.neoforged.neoforge.event.RegisterGameTestsEvent event
java.lang.IllegalStateException: Adding duplicate key 'ResourceKey[minecraft:test_environment / neotests:tests/level.block.event]' to registry
Nope, still needs maty's attention
Yes alright, switched to fabulous and it didn't crash at least
Ah no, it's spamming GL errors π
Fun
huh funnily enough for clearStencilTexture
That's the specific one I was sure I had gotten right 
you were not passing useStencil=true there
but that alone didnt fix it
also what I dont understand is that the vanilla one doesnt actually set the draw framebuffer, while glclear can't really do DSA hm
The loading overlay is also causing GL errors again:
at MC-BOOTSTRAP/org.lwjgl.opengl@3.3.3+5/org.lwjgl.opengl.GL15C.nglBufferSubData(Native Method)
at MC-BOOTSTRAP/org.lwjgl.opengl@3.3.3+5/org.lwjgl.opengl.GL15C.glBufferSubData(GL15C.java:449)
at MC-BOOTSTRAP/fml_earlydisplay@6.0.14/net.neoforged.fml.earlydisplay.SimpleBufferBuilder.finishAndUpload(SimpleBufferBuilder.java:344)
at MC-BOOTSTRAP/fml_earlydisplay@6.0.14/net.neoforged.fml.earlydisplay.SimpleBufferBuilder.draw(SimpleBufferBuilder.java:404)
at MC-BOOTSTRAP/fml_earlydisplay@6.0.14/net.neoforged.fml.earlydisplay.RenderElement.renderTexture(RenderElement.java:276)
at MC-BOOTSTRAP/fml_earlydisplay@6.0.14/net.neoforged.fml.earlydisplay.RenderElement.lambda$initializeTexture$25(RenderElement.java:268)
at MC-BOOTSTRAP/fml_earlydisplay@6.0.14/net.neoforged.fml.earlydisplay.RenderElement.render(RenderElement.java:61)
at MC-BOOTSTRAP/fml_earlydisplay@6.0.14/net.neoforged.fml.earlydisplay.DisplayWindow.lambda$paintFramebuffer$7(DisplayWindow.java:261)
at java.base/java.util.ArrayList.removeIf(ArrayList.java:1755)
at java.base/java.util.ArrayList.removeIf(ArrayList.java:1743)
at MC-BOOTSTRAP/fml_earlydisplay@6.0.14/net.neoforged.fml.earlydisplay.DisplayWindow.paintFramebuffer(DisplayWindow.java:261)
OpenGL debug message: id=1281, source=API, type=ERROR, severity=HIGH, message='GL_INVALID_VALUE error generated. Invalid offset and/or size.'
I was JUST about to paste the exact same error π

Literally sitting on that breakpoint r/n lol
but the FML config to enable synchronous debug is very very useful
Yup
While you dig into that, I'm gonna try to find out why block outlines seem to be broken in the test runs
Nope
In fact, that method even dropped a patch since vanilla introduced the hasDepthAspect() and hasColorAspect() methods, replacing the ones you added
What does that glDrawBuffer(0); clear; glDrawBuffer(GL_COLOR_ATTACHMENT0) actually do for clearing stencil+depth
From the docs: glDrawBuffer, glNamedFramebufferDrawBuffer β specify which color buffers are to be drawn into
As far as I understand that, it disables color drawing
I have no idea
anyhow, funnily enough DSA optionally also binds the fbo to the global state
that is why GlStateManager._glBindFramebuffer(GlConst.GL_FRAMEBUFFER, this.drawFbo); is gone
so I'll remove that from the stencil clear method too
What confuses me, are we sure this worked with fabulous in the last snapshot? π
My FramedBlocks porting experiment worked fine in Fabulous mode
Cannot instantiate local class 'MandatoryEntry' in a static context ClientRegistryManager.java /neoforge/main-java/net/neoforged/neoforge/registries line 59 Java Problem
Do I need to make a bug report to ecj?
Yes but did you have stencil enabled? π
No, but I can try that real quick
because idk, i think we might not be able to actually bind a combined depth+stencil texture to a depth-only attachment point
but from the diff with the previous version, it didn't seem like we accounted for that previously either
Hm yes, adding the stencil flag even for clearDepth fixes the log spam
Your suspicion is correct, it blows up:
java.lang.IllegalStateException: Couldn't perform copyToTexture for texture 1 to 56: GL error 1286
at com.mojang.blaze3d.opengl.GlCommandEncoder.copyTextureToTexture(GlCommandEncoder.java:482)
at com.mojang.blaze3d.pipeline.RenderTarget.copyDepthFrom(RenderTarget.java:76)
The question is why there are render targets without stencil support when that should be getting propagated (unless I'm missing something)
Well I was in clear texture, actually π
Anyhow, comitting my fix for that one for now
Let's see whether that fixes the nonsense I'm seeing right now. Basically, all texture-to-texture blitting appears to be broken, making entity outline and Fabulous mode non-functional
Alright pushed, with that I had no further error-spam in fabulous at least
Nope, still busted. This is going to be fun to dig into because there's exactly zero errors 
Entity outlines don't render and, when you're in Fabulous mode, particles, block outlines and translucent blocks don't render.
I'm running without tests at the moment but I had also disabled specifically the stencil test mod at the beginning
Seems like this only happens when using the java 24 plugin for eclipse
under neoforge development/internal -> createClientLaunchScript
and then run nsight for build/neodev/runClient.cmd
(or renderdoc with child process tracking enabled)
Let me get that set up real quick
renderdoc is easier to get since it doesnt need an nvidia account to download
Is this not it: https://developer.nvidia.com/nsight-graphics? I can download that without an account
Oh huh, they must have changed that then
You've got to be fucking kidding me. As soon as I attach the frame debugger it starts working 
Once I run without it again, it breaks again. However, if I disable the early window, then it also works. Also, trying to capture a frame with the debugger while the early window is enabled causes the debugger to warn me about an invalid configuration but without the early window there's no warning
When I confirm that I want to capture regardless, then it shows the following message on top of the capture:
The following incompatibilities were seen during capture: (15.7s ago) glTexParameterIiv (pname = 0x00002801)
ooh fun neos AT file is invalid under kits
https://paste.md-5.net/odeyoyovas.sql
tried importing it into my mods workspace and port them
and test out my block placement renderer using the new render changes
Somehow the early window is wrecking the GL state in such a way that the fallout persists beyond the early window's lifetime. I'm gonna leave it at that for tonight though.
Yeah, both ATs and interface injections need to be looked over and cleaned up
worth me doing that while yall do render debugging or prefer to do at after everything else?
Feel free to do it
apparently just had to run gradle generateAccessTransformers
-# imports into my mod workspace at least, with AT validation enabled
just pushed that change btw
π
i assume iface injection would fail during gradle build if it had invalid entries
(injection points that dont exist or classes to inject which dont exist)
if so those should be fine, since build worked
Not sure, would have to ask maty
so i know rendering is kinda borked at the moment but is water supposed to just not render under faboulus rn
fast/fancy it renders fine, im assuming its some transparency issue
(everything render releated seems to be transparency releated xD)
on a side note my placement render seems to working fine
its not correct since its using just using RenderType.entityTranslucent atm
i had a no depth variant in the past, need to figure out how to do that again
Disable the early window in the FML config, it somehow breaks the GL state at the moment
also the game doesnt seem to be fully shutting down after i close the window
have to go into idea and kill the run
Works fine for me, the game shuts down immediately
Quite literally, considering NSight also threw a warning at me π
hmm weird the game window closes, level saves but idea shows it still running for me
note i am loading some level and hitting the X on the game window to close
not going to main menu and clicking quit game (unsure if that would change anything)
Works fine as well. However, I have had cases regardless of the version where IDEA would still show it running until I clicked into the IDEA window in order to focus it again. Try just clicking into IDEA and then waiting
huh weird seems to be shutting down fine now, weird
you mightve been right tho, since i did just alt tab see it running and click the "kill run" button
where did the long seed parameter in ModelBlockRenderer.tesselateBlock goto?
when rendering things like stone/grass blocks in my placement renderer the rotation applied via block state is different each frame
cause i am no longer passing the see along
in 21.4 i looked up the seed via BlockState.getSeed(pos) and passed the result along into tesselateBlock
how would one go about doing this now in 21.5?
doesnt vanilla grass do this as well
yeah, im trying to render the vanilla blocks
which require this seed in order for the rotation to be applied
in 21.4 i just looked up the seed from the block state and passed it along to tesselateBlock
but tesselateBlock no longer has a seed param in 21.5 so im unsure how to apply said seed


