Its one of these: https://a.co/d/jh10Qhj
#1.21.11 Snapshots
1 messages Β· Page 3 of 1
@devout vault can you make the download assets task in nfrt allow for a version json to be specified in the command instead of always checking the version manifest
I appreciate that we now have IdSearchTree and IdentifierSearchTree
thanks Moj
that'll be confusing as hell
Tiny but impact potential: CompoundTag#remove now returns the removed tag
NbtOps now has emptyList() and emptyMap() methods too
util.TriState is now string representable and got itself a codec
LivingEntity 
we dont get to see it anyways π
hasEnoughFoodToDoExhaustiveManoeuvres is def a spelling error (Player)
i know, but we will know its there in spirit, and thats enough
why only be there in spirit when java identifiers are so lenient
are they?
apparently, manoeuvres is a valid spelling; chiefly British though
i thought java identifiers were expected to be alphanum + underscore and dollar, not srarting with a number
iirc, Java identifiers start with a Java letter, then followed by any number of Java letter or digit
they support greek, but it seems not knife emoji or dagger character
wait, I remember something for that
all unicode should work
a java agent to hook into javac and allow the use of any emoji in identifiers
(because the JVM is very lenient on names; it's the JLS that imposes restrictions)
we will see it in #minecraft-updates next week trust
@obtuse igloo look, a mention of your project from long ago 
LevelAccessor got a change: it no longer extends LevelTimeAccess, that changed to LevelReader
recode mc in https://www.emojicode.org/
Emojicode is a full-blown programming language consisting of emojis.
darn its not jvm based
They accept unicode alphanum stuff generally, not ascii alphanum specifically. So pretty dang flexible. Plus a couple other characters (currency characters among others).
Of course, as sci pointed out -- that's a Java restriction not a JVM one
lemme start using peso signs instead of dollar signs /j
Yeah the JVM allows anything it doesn't explicitly ban -- so basically, anything except [/;.<> goes.
Now, that's in class names
conveniently, thats everything it uses to identify types and special functions
Package names are actually more strict at the JVM level, if they're within a named module
Well, except .
Which is there cause java has two different goddamn ways of expressing class names...
yep
gotta love internal names
But basically package names do have to be JLS-valid package names within named modules
Even though class names don't, nor do package names in the unnamed module
@devout vault @shrewd violet for the experimental unobfuscated snapshots that aren't in the version manifest I am planning on removing the downloadManifest step and replacing the downloadJson step with
{
"type": "downloadJson",
"version_zip": "https://piston-data.mojang.com/v1/objects/de334d80d9ddc5abb94c611b8ad10f9125c4c421/25w45a_unobfuscated.zip"
}
along with removing any steps that are related to mappings (with this carrying on when the normal snapshots are no longer obfuscated
it'd be really nice if mojang had the raw json on piston-data somewhere
i ended up putting the json on my screenshot service and using that link in my tools
If the json was put on piston-meta then it would be https://piston-meta.mojang.com/v1/packages/7a3c149f148b6aa5ac3af48c4f701adea7e5b615/manifest.json which is currently a 404
yeah, i just checked too
naybe they will be willing to do that for the future ones, it would make things slightly easier
heads up, with 1.11.2 you can use a setter for that list instead of needing to use reflection
Here's what I currently have for the config.json
I guess that works. Would be nice to still cache it somehow
Should just need a little bit of nfrt work, but it seems reasonable to me
(regarding the nfrt update)
Do you want to try sending an nfrt update?
A good starting point is the NeoFormEngine class
Maybe I would call the step type downloadFile and not json because there's nothing json specific
Ah no it is json specific 
That is a good start, I would give the downloadClient and downloadServer then each an input that take this manifest
I still think we should ask a
to put the raw manifest as well as the zip on their cdn
then piping in a manual maifest (not a zip) would make so much more sense
Yah
Yeah, that's also what I was thinking of adding so we can use the separate manifests
We're ignoring that step anyway, for the most part
Me to, hence me also wanted the additional parameter
The problematic part is that the manifest location can change
i.e. if they retroactively update a library which IIRC has happened
100%, but right now as they are not included in some directory we can look up in, we have no other choice then to use this hardcoded approach. Or do we want to manage that somehow otherwise
I was only going to include the url for versions that aren't in the version manifest
I would do that for sure
Yes I was thinking about a cli arg and then .asking the user to specify both manifest URL and neoform version
Annoyingly it's zipped too and not just the json
Yep
I would also like to have an input on the downloadClient and downloadServer tasks in NeoForm
That takes the manifest it wants to use
Make it optional
But that way I can easily differentiate between them
Why I don't think anything is actually executing these. Just make them top level fields
And don't need to track state
Top state could also work
Either full task state with input / output
Or in the top of the Neoform config
I have no preference for either solution
But I would not support the solution as proposed now, where it is only stored at the downloadManifest level
I don't think its a good idea due to it possibly changing urls
Agreed
It is annoying
But do you know a better solution?
When we store it on the top level
That problem still exists
So we would need to republish a NeoForm version with that URL in it either way
Alternatively we would need to host some proxy service
No I mean keep it outside and add it to the plugins
No
That is for me not an option
That would mean we need to update the gradle plugin everytime
And I also don't see that as the role of the plugins
This is for me squarely something NeoForm should define
No I mean add the option to set the manifest url
User settable would at least remove the need to re release anything from our end
But yah I don't know. It is a bit niche given its for just one version
the new nullable annotation seems to be way more strict than I thought, like this aint valid @Nullable final ModelFeatureRenderer.CrumblingOverlay crumblingOverlay, it has to be this final ModelFeatureRenderer.@Nullable CrumblingOverlay crumblingOverlay,
Indeed
yep, that's how type use annotations work
This is documented in jspecify's migration guide
there's also @Nullable Object[] vs Object @Nullable [] (array of nullable objects vs nullable array of objects)
the problem with that is the code I got from vineflower + the unobf jar has them wrong
what version of Vineflower? 
they published a patch release very very recently, 1.11.2, which adds support for type annotations
downloaded yesterday
but what version 
since Vineflower 1.11.2 was released approx. 15 hours ago, so I can't tell if you downloaded that version or the previous one
because if it's the latest, I'd recommend you file a bug report
oh I just checked, I have vineflower-1.11.1
then time to redownload Vineflower
time to overwrite all the code again π
this is fun
removes the need for snowblower
especially when it gets a diff viewer
web devs get on that π
doing things like this will just make them obfuscate the jar again
for a diff viewer it will need to decompile the before and the after, I hope this does some good caching
it doesnt do anything illegal or store sources, what's wrong with it?
I mean adding the deobfuscation step to such a tool also wouldn't be impossible, it just hasn't been done
mojang please if ur listening, Java 25 for 1.21.11 would make this the perfect new version to rest on please Mojang please save us
no it wouldn't because it would still be obfuscated
nuh uh
an unobfuscated version would be out
i thought they were shipping both
which ones r they using in the launcher?
the obfuscated one, only from the first snapshot after the release everything will be unobf
o
damn
1.22 spring update mojang please
id be ok with every 3 years we get a major update i can wait that long
Minecraft 1.21.1 is 1 year, 2 months, and 29 days old today.
I mean they are, but it's not accessible through normal means
yeah i had the same idea, but you can't actually search that way
and yeah, if you get vineflower to wasm, the ART to wasm part is trivial
Minecraft 1.20.1 is 2 years, 4 months, and 26 days old today.
Seems like 1.20.1 will stay for a while until 1.22 come out
1.21.1 is the main version for neo rn
.10
Minecraft 1.21 is 1 year, 4 months, and 25 days old today.
Wow
Minecraft 1.0 is 13 years, 11 months, and 21 days old today.
Minecraft 1.8.8 is 10 years, 3 months, and 11 days old today.
I have been modding for 10 years, jesus
Though 1.20.1 is currently "main" version for modding atm
Minecraft 1.5.2 is 12 years, 6 months, and 13 days old today.
I have been playing modded for 12 years... jeez
Nuh uh
That's insane
Unknown Minecraft version: 1.8.1-beta
oh god I feel old now
Minecraft 1.2.5 is 13 years, 7 months, and 9 days old today.
Minecraft 1.4.7 is 12 years, 10 months, and 11 days old today.
the first time I used mods was over 13 years ago, and the first time I tried to write a mod over 12 years ago
does it count if you tried making a mod in 2011/2012 with Visual Studio, with C++ while knowing nothing of programming and failed 10min in to it 
no, I had actual features working :p
the first prototype of Elements of Power was 1.4.7
along with a prototype for a mod I was calling Worker Command, which was going to be programmable robots using some kind of visual programming system (the prototype only had hardcoded "disks" and no robots)
was mainly asking if it would count for me 
Minecraft 1.6.4 is 12 years, 1 month, and 19 days old today.
shit, my first port was a mod to 1.6.4, so ive been modding for 12 years
I guess it counts as "tried to write a mod". I meant in the sense that IMO you need to have had at least something that does something to minecraft, in order to say you did some modding.
fun fact, it was just a GUI C++ app 
had nothing todo with modding, but me and my friend believed it was
I mean https://slicer.run, the project the wasm VF target was made for, has some search options
searching for strings doesnt search the decompiled code though, unless there are other options
Yeah I think that's just unrealistic
Local decomp takes 4GB+ ofh eap when you parallelize
I think your browser is not going to like that π
You can still do a full decomp in browser I think
Tho I don't think I've tried it with anything nearly as big as minecraft
I don't think that shows up in bytecode without -g
yeah itβs in the method parameters attribute now
Pack news in snapshot 25w45a include a new system for Timelines driving Environment Attributes - and more! Check out the news here! #minecraftemployee
slicedlime works as a Technical Director 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...
I like how obvious what the next big update is going to be based on the technical changes they have been doing.
what is it

π΅
Itβs a secret, no telling
She dodges every question like a lion in the ring
π΅
the timelines thing and how it can affect behaviours of blocks makes me think seasons may be on the horizon, if not from mojang, as a datapack
lol dead epona
(yes I'm just now watching the datapack changes video)
slicedlime slowly but surely making sure there's enough vanilla features to make his seasons datapack even better
ah so it already exists. I should have guessed
Have your primer: https://github.com/neoforged/.github/pull/37/commits/74b8897423cf0e2d34a69e57d5b9fd1a31a6db4c
Bunch of renames, item atlases, timeline rewrite, and option enum removal
The block atlas no longer contains textures specifically for items. Those have been moved to their own atlas named
minecraft:items

block model affected by game state in some way? guessing based on those looking like sunflowers, probably set to point at the sun or something
One user suggested that maybe blocks will be allowed to be rotated in all axis
another possibility is state-controlled offsetting of the model (like how the short grass model differs a bit in within-block position depending on where you place it in the world)
specifiable by blockstate JSON rather than hardcoded in the BlockBehaviour properties
Sun flowers + Timelines = seasons even more confirmed, thanks Moj
no single rotation axis limit for block models
finally 24 way rotation without jank?
Minecraft: Hope
someone make that Obama Hope poster but it's Steve
(whether Jack Black's Steve or blocky-MC Steve, I leave it to the imagination)
I... am Hope
day
finn this is the snapshots channel not #squirrels-π¦
Tommy I already told someone to not post unrelated gifs and you do it too... keep the memes in #squirrels-π¦
are gifs not allowed i didnt realize
I just posted Hope van Dyme
from Marvel
but also fine, I will keep any and all gifs out of here, even if it was not meant as "mmee"
they spam the channel because of their size and thus should not be used in here unless they convey some information
ah ok
Oh snap almost snapshot time and Iβm busy making food
I'm waiting for the bus
And I for the train
already doable! look upon my illegal blockstate jsons
at work
worst place of all
New version detected: 25w46a.
It's happening
IT HERE
Snapshot 25w46a
- Primer: https://github.com/ChampionAsh5357/neoforged-github/blob/primer/2111-or-22/primers/1.22/index.md
- Article: https://www.minecraft.net/en-us/article/minecraft-snapshot-25w46a
- Changelog: https://misode.github.io/versions/?id=25w46a
- Notion: https://apexmodder.notion.site/2524f070f88880648482e3cbdcba566a?v=2524f070f88880b29f60000c52785ecb&p=2a84f070f88880319495ecf29ae1c349&pm=c
- SnowMan: https://github.com/neoforged/Snowman/commit/ae4fe2cce41c62627a56052be36cee28ea4d61f7
SlicedLimes Videos:
- Main: https://www.youtube.com/watch?v=_TZQp5fy4fw
- Pack: N/A
||<@&1067092163520909374>||
Minecraft Snapshot 25w46a gives the Nautilus an attack sound and an inventory screen - among other news! Check them all out right here! #minecraftemployee
slicedlime works as a Technical Director 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 ...
Textures used for still water and lava are now hardcoded to minecraft:block/water_still and minecraft:block/lava_still
hahah
more fluid jank
fluids were touched

I'm sure mojang rotates z differently than I was so I'll need a bunch of trial and error to find the right xyzs for my 24-blocks
smol snapshot
rip resource packs to disable beacon beams?
well, are they solid or cutout now
they implemented feature element on game rules
guess they forgor that game rules are flagablle when moving to registry based
RIP StateSwitchingButton - some button GUI changes
π₯³
Little bit of cleanup in ToastManager too
(music toasts)
Looks like AbstractContainerScreen#renderSlots got 2 new params, probably mouseX and mouseY
+ AbstractMountInventoryScreen
correct render(mX, mY) -> renderContents(mX, mY) -> renderSlots(mX, mY) -> renderSlot(mX, mY)
Hovering over the scrollbar in CreativeModeInventoryScreen now changes the cursor
renderTabButton also got MX + MY
new mojang anno?
They changed the retention policy
ModelPart#getExtentsForGui -> set of vectors changed to a consumer
same for special model renderer

New enum (option?) MusicToastDisplayState
options: NEVER, PAUSE, PAUSE_AND_TOAST
π ?
BlockElement.Deserializer got a ton of new constants
+ BlockElementRotation.RotationValue (to replace + implement the new rotation model logic, surely)
Some decent changes to DrawableGizmoPrimitives
oh thank god the z-axis rotation
that takes care of a rather laborious extension I had to write for ae2
withBlend(BlendFunction.TRANSLUCENT) 
I don't remember, have they removed block/item model size limit?
+ PermissionSetUnion and some permission changes
Registries.GAME_RULE added to FeatureElement.FILTERED_REGISTRIES --- experimental game rules soon?
UseEffects record adds interactVibrations, per patch notes
we have already had experimental game rules in the past
pretty sure this them keeping that with the new registry based game rules
pretty sure like most of the register utils in vanilla its not useful to us
since they all default to minecraft namespace
There's already an experimental game rule, the max minecart speed one.
where?
i was talking about @MouseButtonInfo.MouseButton (in the screenshot)
but turns out its not new, just its retention policy changed
BakedQuads can no longer store color, (per-vertex) light, or normals
huh
That's very concerning
No, they just removed unused data from the quads and unrolled the packed int array into separate fields
ohoh
fascinating π
it saves one heap obj per bakedquad
but introduces more for the vectors
The vectors are interned at baking time
Although i suppose those could be interned
yeah thought so π
the pointers are still going to be larger
given its 64-bit
although mhmm
no, i take that back
compressed oops are 32 bits
Ah yes good point, so these position fields only take 64 bits overall
Not having a color is potentially a dealbreaker, probably needs patching in
Light and normals are arguably more niche
Light isn't that bad, just means ExtraFaceData can no longer specify separate block and sky light value and instead needs to work like the vanilla light_emission field.
Normals are primarily annoying for the OBJ loader but otherwise probably not that bad.
Color is a deal breaker, it kills baked color via ExtraFaceData and, at least for me personally, breaks the last way I have to cheese block tint into my dynamic item model
Anyway, colors were already broken in vanilla by that weird rewind thing in FaceBakery (that itself barely works), so I'd prefer not having that in vanilla
Per-vertex colors are quite niche
But item models already have tinting per sub-model?
I can live with a per-quad color
Yeah, I'd be fine with that
Heh, I didnt even know compressed oops is the default below 32gb of heap
so your average minecraft modpack doesnt have them 
They do, but that doesn't work if you have a potentially infinite range of tint indices that may even misuse tint indices < -1.
For context, I have a block model that can take on the appearance of (almost) any other block and an item model that is also able to display this dynamic block geometry. Since block tinting can use any arbitrary indices with potentially gigantic gaps of unused indices, using the tint value array is problematic at best and a massive memory leak waiting to happen at worst. On top of that, I need two separate ranges of tint indices (which is where the negative indices come into play), at which point using an array is completely out of question. Before the submit system was introduced, I worked around both issues by throwing around an additional Int2IntMap. With the submit system this is no longer an option, so I instead switched to baking the tints into the item model quads.
Interesting I cheased it entirely differently in C&B
How does emissivity work for magma blocks?
I use this work around for C&B Models: https://github.com/ChiselsAndBits/Chisels-and-Bits/blob/port/1.21.10/core/src/main/java/mod/chiselsandbits/client/model/item/ChiseledBlockItemModel.java#L70
Magma blocks actually emit a tiny bit of light and use an old hack where the block itself is marked as emissive instead of declaring emissivity in the model
compressed oops are also disabled when zgc is enabled
I was right 
rather smol snapshot π
but mighty for block model stuff
if you have enough ram for zgc, you have enough ram for 64-bit pointers! π
heh
to be fair zgc can be a nice improvement with smaller heaps, especially on the client
shenandoah has zgc like performance and has compressed oop support which is pretty neat
the more i look at this the less confident i'm in being able to port my mods
eh, porting hasn't been that bad, a majority of my 1.21.10 mods work out of the box and any ones that did need changes were minor
It depends on how much vanilla or modloader rendering code your mod uses
do you have 80 mods 
Minecraft Snapshot 25w46a gives the Nautilus an attack sound and an inventory screen - among other news! Check them all out right here! #minecraftemployee
slicedlime works as a Technical Director 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 ...
nah, like 25
Not necessarily a bad change tbh, there's probably less C-style magic in some parts of the block renderer as a result
Anyone dragging along quad baking code from 1.12 is probably angry though π
just means i can yeet more code from library :)
so how exactly did they fix translucency
is it some hardcoded hacks or something mods can also benefit from
I have a few render types that render behind water and clouds
very annoying
4:49 ah, that's what was meant by the beacon translucency change
Have your primer: https://github.com/neoforged/.github/pull/37/commits/172ac19c0eb5aa019b387b0ce51164a2919753fc
Nothing major aside from a few changes in block model managing along with some broadening of when gizmos can be added
how can i get this april fool snapshot?
Minecraft Wiki
23w13a_or_b, supposedly the first and only snapshot for the Vote Update, is an April Fools' joke snapshot, released on April 1, 2023, which, as the primary focus, adds a system where players vote for gameplay features or mechanics to be implemented. This snapshot is a fork of 23w13a.
The snapshot was reuploaded about three hours after the releas...
giving 23w13a_or_b doesnt work on snowblower
and i try to get all versions from 23w13a to 23w14a this snapshot doesnt show
this is completely the wrong channel
where should i ask?
Next release has unobfuscated jars, correct??
No, snapshot after this next major release is unobf
this snapshot also has both version available i think
They are dual releasing, unobf are manual releases
Ahh
the unobfuscated ones are not in the main manifest
but yes, they're releasing both so neo/forge/fabric/β¦ can test pipelines
Mojang: "They will finally unify the loaders!"
the loaders: "Yay less steps and the death of yarn!"
moajng: "
"
with the death of yarn, cross-loader mixin mods are certainly a lot more viable
i specifically mean intermediary
exactly, this removes a lot of the hassle mods like lambdynamiclights used to produce a mojmapped jar since thats the default now
Yeah I suspect a fair proportion of multiloader mods post lack of obf will end up being the single-jar-targetting-all-loaders sort, cause it's... like, fairly easy now. Well, gradle tooling aside, but there's options that play nice with that
What we could do when everyone is on the same mappings is pull out the c tags into an upstream repository that fabric and neo just pull from
Good luck
No one could agree on who would own the repo or who/how decisions are made to add new entries
Would also require some sort of common data-gen framework I'd guess (?)
Unless one would want to maintain those manually ig
I mean, could have it so that the common repo would just need to have the MC-referencing code and then each loader depends on it and calls its datagen, built out of only vanilla stuff, from its own datagen
Yeah you don't need to actually run datagen, each loader'd do that itself. Course, what telepathic brings up is the actual issue here, the logistics
it would be cool if the new org could be collectively owned by parent orgs.
like have commonmc be a child of neoforged and fabricmc
or mcconventions
With the new MC-being-deobfed thing you can even technically set up an environment that can compile against MC without any loader-specific gradle plugins
you could already do that before with mojmaps
but I guess you are refering to without any gradle plugins at all
which fair
Uhh... what? You still needed a gradle plugin to, like, do the remapping
yeah, but it didn't need to be loader specific
And that means pulling in one loader's tooling or the other
It kinda does. Do you use ART or tiny-remapper?
π€·ββοΈ a moot point now at least
unfortunately mappings weren't the only problem
It doesn't need to be a loader thing though I guess
because the tag keys are the same, someone could implement a script that scrapes the fabric/neo jar and generates the keys
i think forge did that actually
The fun thing is that I actually started that originally
I would be in favor of that since it could then have a global repository of the tags and resources explaining what each is for based on previously agreed upon standards
Yeah but it's actually too complicated to manage
So the current system is likely the best we could have
Paint made a script to compare tags across loaders iirc

I saw a sliced lime community post that said 1.21.11 is feature complete so we can expect snapshot size to decrease after today
feature-wise
we're just in time for something super breaking
no thisll probably be the last or second to last snapshot before pres
Interesting how you got that information from an unofficial source, and not from the 25w45a news post :D
well the article mentions it very in passing...
"Our final set of features" I don't think most people registered it meant the next drop was feature complete, at the time

most people
[Reference to](#mojira message) #mojira [β€ ](#mojira message)This ticket has just been resolved as Fixed!
In 25w44a, game rules were changed to be part of a registry and to be referred to by resource locations. However, the /gamerule command was not updated to accept resource locations of game rules, and instead still accepts one literal argument for every vanilla game rule.
- Execute the following command:
Status
Resolved as Fixed <t:1763462694:R>
Fix Version
Future Update
Assignee
Comments
1
Created
<t:1761909121:R>
Quoted
try-not-to-break-it-pls tuesday
Also there will be parity in next snapshot/pre-relrase with leather horse armour texture according to mojira
im sorry, the correct term is '
'
probably just added an extra minecraft:x literal for each gamerule 
you just have to change the argument type?
and you get rid of the visitor that's in the old code
The argument type is dependent on which game rule you select though. There are no dynamic argument types in brigadier.
not according to @latent ivy
#1425127445803045186 message
oh they already replied 
right, forgot about that
I mean, if GameRules$Key#getId just returns a resloc, it would probably work fine with the existing code 
ok, you would have to call toString on that, but that's it
then again, just doing cursory glances at the command class
and assuming it didn't change between 1.21.1 and 1.21.10 
let's see in a few minutes 
seems to be coming back online now
That could work, but literals don't have partial matches so typing advance_time won't suggest you minecraft:advance_time as it would with a resource argument.
just hard wire search to be minecraft:$STR or $STR
/j
oh thats not good, did minecraft.net just go down?
or is that just me?
guess im using piston meta to know when snapshot drops
It works for me
guess my auto refresh extension just got me blocked or something
well, thank you minecraft.net 

huh just left work, no snapshot today?
likely later
is it related to the clouds being uncloudy?
potentially CF issues delayed snapshot?
Cloudflare dead = mojang locked in their office until they can hit the "release now" button
they did it they discontinued java ππ₯
the minecraft engine will be rewritten in C++
well rip, there goes my modding career
I'm being facetious
u scared me
Just like the original!
it doesn't have to be buggy as hell that's their fault
yes but the original has the advantage of thousands of modders scrutinizing the (decompiled) codebase
i mean they had to make a faithful rewrite
Absolutly
and fixing bugs for them
yeah but its different bugs, you can push chests with pistons! blasphomey!
you can also die by doing nothing
No snapshot today folks, sorry - we ran into some problems when building today. Should have something tomorrow!
#BlameCF
dammit curseforge
Here's where jspecify comes from
@devout vault is that the obf or unobf port?
One of the bigger issues of the port is wtf to do about DimensionSpecialEffects
Huh, extra weird. But it's also listed in the version JSON so it should have come from minecraft-dependencies too. Might have been user-error on my part though.
I meant that might be how it got into the version JSON
Aaaaaah from them?
Yeah we'll never know (unless they tell us :-D)
They're actually using JSpecify so I'd guess they directly depend on ti
JSR305 and jetbrains annotations (which they are still using) aren't included in the version JSON
yes, since those are compileOnly dependencies usually
but if jspecify has retention=runtime, it's plausible to be included with runtime scope
Oh well, anyway. Trucking on. 222 errors in the client-source set remain
Yeet
Well I'd like to still render a custom sky in END π
Technically I think we can declare a new EnvironmentAttribute<Identifier> for CUSTOM_SKYBOX or similar stuff
and look up the corresponding thing from a client-side registry for rendering
That'd also funnily enough allow it to be overridden on a per-biome level if I understand the system right
We can engineer a solution for that once we're closer to release
I just replaced every use of DimensionSpecialEFfect with our extension interface to get it to compile
we can rejiggle that later
I guess that works as well π
Hm RenderStateShard gone, uuh
RenderType's underlying state declaration works very differently now
I still haven't updated the unobfuscated patches with the MagicConstant annotations
The factory does seem to translate nearly 1:1 though, what's gone is the buffer size declaration
And some of the texturing is harder to translate
I'll leave a bunch of TODOs
i.e.:
var rendertype$state = RenderSetup.builder(RenderPipelines.TEXT)
.withTexture("Sampler0", locationIn, LINEAR_FILTERING_SAMPLER) // TODO 1.21.11: This disabled mip-mapping before, no idea how to force that now
.useLightmap()
.createRenderSetup();
The mip-map-flags on the texture shard + the separate texture filtering has now be combined into the ability to override the sampler, that needs some double checking
New version detected: 1.21.11-pre1.
oshit
huh
its too early mojang
well gimme a min to make my usual messages and shit
(i already had 25w47a prewritten)
1.21.11 - Pre Release 1
- Primer: https://github.com/ChampionAsh5357/neoforged-github/blob/primer/2111-or-22/primers/1.22/index.md
- Article: https://www.minecraft.net/en-us/article/minecraft-1-21-11-pre-release-1
- Changelog: https://misode.github.io/versions/?id=1.21.11-pre1
- Notion: https://apexmodder.notion.site/2524f070f88880648482e3cbdcba566a?v=2524f070f88880b29f60000c52785ecb&p=2af4f070f8888044940ce57e37fcc147&pm=c
- SnowMan: https://github.com/neoforged/Snowman/commit/269e814dda9001e2934a96cd8807399cb22a1d6e
- Unobfuscated Jar: https://piston-data.mojang.com/v1/objects/f98a0c053a8246cce12f8f29f2ba4ce00872fd53/1_21_11-pre1_unobfuscated.zip
SlicedLimes Videos:
- Main: https://www.youtube.com/watch?v=CH_mI68_Ljk
- Pack: N/A
||<@&1067092163520909374>||
The Mounts of Mayhem Drop has a first pre-release - 1.21.11 Pre-Release 1 is packed tweaks and fixes! Here's an overview! #minecraftemployee
slicedlime works as a Technical Director 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...
That was fast
we're getting ever closer to unobfuscation
What's different this time?
its released along side it
Read the article?
I'm talking about the drop being done and the fully unobfuscated snapshots starting
waitwhat
it's 0530 here, aaaa
So is List<BlockElement> fixItemModelSeams(List<BlockElement> elements, TextureAtlasSprite sprite) still relevant?
Nope
Good π
Ahh
no idea what uvShrinkRatio was, anyway
time to start kits this afternoon?
I suppose what we do in UnbakedElementsHelper.createUnbakedItemMaskElements will also have to be reworked somewhat, it's still using that ratio
You have not been paying attention lol
Lots of package organization it looks like
It was a factor, computed from the atlas size, by which UVs were inset to mitigate atlas bleeding
I'll just leave that in a broken state
there is no activity in #neoforge-private so nobody ran the action
shartte was doing it locally
Correct, there's already a port/1.21.11 branch
I assume they just had it ready from yesterday, so it's more or less the first thing they did today
It needs to go from 25w45a -> pre1 though
no because you didn't push it
on the main repo
Oh, pre already
We have a process, why is someone unilaterally changing how we do ports?
aaaaah! surprise pre1
makes up for lack of snapshot/drop yesterday i suppose? 
@devout vault
Down to 76 client compile errors
There a small number of rejects remaining:
- The attack processing in player was refactored significantly, I was able to restore most of our patches, but the attack time resetting needs a look at
- we patch sprites to enable mipmap generation regardless of size, but this was changed significant in vanilla and needs a look (potential for crashes)
- a fluid related travelInFluid patch in LivingEntity is a bit weird now, since Vanilla also refactored that heavily
We also have an ancient patch that removes this from Vanilla, but I couldn't find a reason this is done (from PlayerList loading stats):
- if (!file2.exists()) {
- File file3 = new File(file1, gameprofile.name() + ".json");
- Path path = file3.toPath();
- if (FileUtil.isPathNormalized(path) && FileUtil.isPathPortable(path) && path.startsWith(file1.getPath()) && file3.isFile()) {
- file3.renameTo(file2);
- }
- }
I can take a look at the client stuff
Let me take a quick look
If there's more nullable ones
One thing that might be of interest to you: Vanilla now added a Function<ItemStack, RenderType> to BlockModelWrapper
So I replaced some of our own patches with that
Alright, I am hands off now if you want to take a look
π
Okay nice, the server already starts, btw.
@devout vault did you intentionally not remove these solved rejects?
Those are not fully resolved, see #1425127445803045186 message
I removed the hunks that are
Ok, makes sense
hmm, i should probably change diffpatch's rejects output to just be regular hunks in a .patch file
never considered that before
Oh geez the pre is out lol
That was quick, yeah
[Jump to referenced message](#builds message) in #builds
Version
1.21.11-pre1-20251119.112005
Build Branch
1.21.11-dev
Minecraft Version
1.21.11-pre1
Quoted
Β·
If we can't figure out why we remove this from PlayerList.locateStatsFile, I'd probably just drop the patch (?)
File file2 = new File(file1, uuid + ".json");
- if (!file2.exists()) {
- File file3 = new File(file1, gameprofile.name() + ".json");
- Path path = file3.toPath();
- if (FileUtil.isPathNormalized(path) && FileUtil.isPathPortable(path) && path.startsWith(file1.getPath()) && file3.isFile()) {
- file3.renameTo(file2);
- }
- }
Or was our reasoning that this profile format is so legacy that removing this double-check improves performance? π€
I have no clue, that patch has confused me for a while π
Then I vote for just dropping it
Could be an accidental deletion
E.g. if someone didn't regen sources at some point
What's the plan for jspecify? Do we switch to it as a separate commit or during porting directly?
I only did within MC sources since there it's kinda necessary
Well that's half true
I had to switch our package-infos
Since we were using Minecraft nullability annotations that were removed
Example:
Yeah that's great. Did you also update the generation script?
the nullmarkening 
yes
I don't know if this was a mistake btw, some of our package-infos were out of sync with the template
I don't have an opinion on whether we want a separate commit (post-freeze) or not
Me neither, honestly
Is there some conversion script that repositions the annotation correctly?
There's no checking that they remain in sync
I doubt it, but I plan to look into NullAway
Alright, it's a pretty mechanical change overall so we can probably just do it as part of the port, honestly.
π€· fine by me
Just be careful with arrays
Object @Nullable[] for a nullable array
Yup I know, that's what I meant by repositioning
@Nullable Object[] for a non-null array of nullable objects
At least for primitive arrays we will be warned by the IDE, but still. I assume we'll have to audit the object arrays
Well, with NullAway we can have an automated check
Apparently Lex removed it
https://github.com/neoforged/NeoForge/commit/31fb15c88d95e941698d8e5b1fd756cc0fcd73cc
That's my plan, but it will be some work to fix all the warnings
for reference, the patch was added in https://github.com/neoforged/NeoForge/commit/31fb15c88d95e941698d8e5b1fd756cc0fcd73cc, in July 2021 by Lex
I can't tell why this patch was added (and Discord messages around that time don't have any clues), so I'd say yeet
dammit!
ater 

π
At least it wasn't just me going through the 4 different file renames/moves x3
Could be a typical lex mistake of committing a wrong patch
Since he likes to push straight to the main branch
Alright, uh marker for @deep wadi
You know probably the most about the C tags π
- We have a
c:enchantable. - Vanilla removed
ItemTags.SWORD_ENCHANTABLE - I replaced it with
ItemTags.MELEE_WEAPON_ENCHANTABLE, ItemTags.SHARP_WEAPON_ENCHANTABLE - Fabric seems to have done something different: https://github.com/FabricMC/fabric/blob/a00626fd5c3c283fa801278cb16cb4f397df8941/fabric-convention-tags-v2/src/datagen/java/net/fabricmc/fabric/impl/tag/convention/datagen/generators/ItemTagGenerator.java#L746
How do we proceed on this? Just copy what Fabric did? π
i do it quite often 
bug hunting awaits no man
I also tried that, and yeah, I stopped when GitHub thought it detected the patch was moved from Slot.java.patch
I'm down to 19 compile errors now, gotta leave for now though
Don't forget to push before you leave π
Already done π
What is different on fabric. They simply donβt have sharp there? You can make an issue report to fabric to add sharp to it
Yeah it looked like that, but the tags also wildly include each other in Vanilla
I'll go and ask on their discord first I suppose
does anyone have the link to the porting branch
It's just port/1.21.11
I tried to stick to this prefix for TODOs: // TODO 1.21.11:
Same
Current state is src/main compiles,src/client has 24 errors left
DedicatedServer does start
Does anyone remember what InputQuirks.EDIT_SHORTCUT_KEY_LEFT and InputQuirks.EDIT_SHORTCUT_KEY_RIGHT was for?
It was related to Ctrl on Windows/Linux vs Cmd on Mac
if you were asking what that values were
I'll just go and check how the usage has changed in Vanilla
But yeah sure that makes sense hm
Vanilla just does this now:
public boolean hasControlDown() {
Window window = this.getWindow();
return InputConstants.isKeyDown(window, 341) || InputConstants.isKeyDown(window, 345);
}
uh, so, the CUTOUT_MIPPED is gone
Which snapshot version was the first where items have moved to their own atlas?
That's the primary reason I could imagine now that you can't bake items into chunks anymore anyway
https://www.minecraft.net/en-us/article/minecraft-snapshot-25w45a - mentions block and item atlas split
everything's mipped now by default
Yes then that is in this version
Ah, thank you
Since you're probably touching the NamedRenderTypeManager errors: we'll need to put more thought into that than just removing the mipped variants due to the item model atlas split since it means there need to be two "entity" render types
don't we still have to fix the permissions api?
In some parts, yes. Some of our stuff did translate to the Vanilla one
I.e. they have level-based permission sets which mapped to the op/deop patches
but generally we have to put some thought into it
ok then I'll have a look at that later
I think it compiles for now, but going forward we have to rethink what we expose
a problem with vanillas type is
They have a PermissionSet interface
And you'd expect that to be comparable, but it's really just a Predicate<Permission>
Calling that a set is still weird to me
yeah
We emit a event when the permissions change, but actually determining whether permission sets A and B are different... not possible
yea blame your closest mojangsta
So luckily we only emit that event on op/deop right now
And in that case you get a LevelPermissionSet which is just 1:1 the old permission levels
That's okay for now, but if we want to make this nice and usable for mods -> needs more work
(Note there's also no registry for permissions, so my other idea of just checking every known permission against both sets -> doesn't work)
Sadface
Yup, okay, I'd say we just comment these out with a TODO for now to proceed
π
I left a review on the PR with some things I found, if nobody does them until I'm home I'll do them
Those are just link click detection IIRC
Yeah
Text rendering in UI has become a bit weird too
I think the new intent is to always apply color to the Component
and not accept a foreground text color as a separate parameter
Yeah, the ActiveTextCollector stuff is a bit annoying
Heh, speaking of that: ActiveTextCollector.ClickableStyleFinder
I did know about that
It does now consider Y which is probably good
Hrmpf, yes, our screens such as the Mod mismatch screen probably need to be rewritten to use the newer style in Vanilla that uses the visitor pattern for both rendering/determining click events in body text
Okay, pushed. Main menu at least.
I'll leave that as is and move on to fix compile issues in the test framework
Oh we also forgot to add tests/src/junit to the paths covered by package-info.java generation, I've fixed that
Very noice
The Mounts of Mayhem Drop has a first pre-release - 1.21.11 Pre-Release 1 is packed tweaks and fixes! Here's an overview! #minecraftemployee
slicedlime works as a Technical Director 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...
Yeah. This would be easier with Unobfuscated π
go use that one then to compare
I might hehehhe
what if we ship neoform with the unobf parameters instead of the p_s
seems like a lot of 1.21.11 specific work considering 1.21.12 will just make unobf the default (and 1.21.11 will probably be a very niche version to mod for)
it's barely any work and it moves some of the time that we'll have to spend in the next version after deobf locals
oh excellent, would love to see it then.
(to be clear, what is barely any work is making neoform ship unobf param names, we still need to fix the patches... but we'll need to anyway)
Note: NeoForge's mipmap generation does not cause crashes, only high-severity OpenGL errors (at least with Intel GPUs).
I do not like the spear change
the attack range component
it overrides the existing attribute
why not just add an attribute modifier?
Hm. That might actually be possible.
Well I was refering to these patches I was unable to port yet:
https://github.com/neoforged/NeoForge/blob/61e879c840f6e529dc35e21a4843fb8e5c72b0c4/patches/net/minecraft/client/renderer/texture/SpriteContents.java.patch#L18
That actually is possible
Caused by: java.lang.IllegalStateException: Registry is already frozen (trying to add key ResourceKey[minecraft:game_rule / neotests_custom_game_rule:custom_boolean_game_rule])
We need a registration event for this now, don't we?
Or rather, there is one
no.. game rules are registry now right, just DeferredRegister it (or use the RegisterEvent)
yeah was about to do DR for it
but might go with RegisterEvent, Vanilla has some nice helpers
eh id still use DR as thats what we should be recommending modders do
alot of people use the tests for example how to do something
Look at this, though:
public static GameRule<Boolean> registerBoolean(String p_460984_, GameRuleCategory p_461188_, boolean p_460844_) {
return register(
p_460984_,
p_461188_,
GameRuleType.BOOL,
BoolArgumentType.bool(),
Codec.BOOL,
p_460844_,
FeatureFlagSet.of(),
GameRuleTypeVisitor::visitBoolean,
p_460985_ -> p_460985_ ? 1 : 0
);
}
that takes a string for id tho, doesnt it down the line use the RL#defaultNamespace thing
or should i say identifier now xD
No it does Identifier.parse
A downside of our generic Register events I suppose. Can't really do helpers
oh then that should be fine but i personally dont like that have to remember to append mod id
or else iirc parse defaults to minecraft if no namespace is given
We could do a specific DR for it but ugh, probably not worth it
I'd usually be with you
but those params are quite excessive
worth patching in a overload for that util which has a namespace param? calls the original just prefixing the id with the namespace?
and deprecate the original?
maybe not tho cause id say if bool has it why not int
might be worth us adding a comment atleast stating mods can use it from within the register event and you must prefix with your mod id
yup might be worth it
The chunks fading in as they load is weird after having instant pop-in so long
oh yeah, luckily that can be turned off
rly like how the graphics settings became so much more customizable in these recent versions
@thorn hatch I don't think the patch to allow for custom SpriteContent subclasses makes a ton of sense anymore with how Vanilla changed it's approach to keeping the frames in-memory. OR I am misunderstanding what the intent is. I definitely don't know how to port the test, however. (CustomSpriteSourceTest)
er, my intellij is complaining about jetbrains annotations not being on the cp

yes
'registerBoolean(java.lang.String, net.minecraft.world.level.gamerules.GameRuleCategory, boolean)' has private access in 'net.minecraft.world.level.gamerules.GameRules'
well there you go, pushed the test thing
mind you I haven't tested it both because of the at stuff and my IJ being fucked (and I don't have time to deal with it this late)
do mods even add gamerules
if u do wanna add helpers I would say give it a custom DR for consistency cuz which other registry classes are patched
its not what u usually do
@rare lynx it works
Alright, I'll do some cleanup:
- Regenerate the generated ATs
- Regenerate coremod JSONs
- Cleanup the manual ATs and fixup ones that are borked
- Apply formatting & fix patch formatting
Hm, game test question:
.thenExecute(villager -> helper.assertTrue(villager.getOffers().size() == 9, "Weaponsmith did not get a new tier of trade"))
.thenExecute(villager -> helper.assertTrue(villager.getOffers().get(8).getResult().is(Items.NETHERITE_SWORD), "Netherite Sword was not in trade."))
The first assert fails, why does it continue to the next π€
I found a way to make that test mod work again but it relies on nine ATs that I would prefer not exposing. Can the test sourceset provide an AT file that is applied to the sources in NeoDev but not shipped?
as it stands? no
technically? sure, if you let jst reverse ats by allowing modifier downgrades
but I'd rather not tbh
Fair enough
Hm, let me guess, you extended the anim-data and stuff? π
Yes, extend SpriteContents.AnimationState and do the uploading/drawing myself
is that the use case for this extension?
Probably gotta check WAIFU what people are actually doing with this
Dynamic sprite animations is the only use case I can think of. I know that Soaryn's "cloud FX" in XyCraft works like this
I might have an easier idea
We do not need to test that you can animate, we only need to test that the custom subclass is instantiated
That's true, yes. Dumbing that test down would also allow is to make it an automated test
Yeah I dont know how to automate the clientside tests that way, but generally we should just be able to peek into the atlas and check the content for the expected class
and that's it
if we keep it manual, we'd override uploadFirstFrame, overwrite the originalImage with an "OK" or sth, and check that for the test item (no one ever runs this test on ports, lets be honest)
I can write the automated test tomorrow. Pulling the sprite out of the atlas at the end of the resource reload and checking the type of its contents is trivial
Yeah
I just dont know how the plumbing works, but I see there's a TextureAtlasTests
That seems to be doing 90% of what needs to be done, heh
Alright, I'll leave it as it is. But yeah, we should do that. We only really need to test this, not the precise mechanics of overriding SprinteContent functionality
I'll take a look at the other game tests
π
While this isn't the root cause of the test failing, I am puzzled by this:
.thenExecute(villager -> helper.assertTrue(villager.getOffers().size() == 9, "Weaponsmith did not get a new tier of trade"))
.thenExecute(villager -> helper.assertTrue(villager.getOffers().get(8).getResult().is(Items.NETHERITE_SWORD), "Netherite Sword was not in trade."))
It fails the first assert
then continues to execute and crashes the entire server on the second one
Was that always the case? I'd have expected it to stop after the assertion fails
Looks like it was π€
Alright, the build incl. game tests now passes, so there's now a 25w45a PR build available here:
https://github.com/neoforged/NeoForge/pull/2815#issuecomment-3552181660
I tried -pre1. 40 rejected patches outright due to refactors/renames 
apparently pre1 is not all its supposed to be
slicedlimes video showed that quite a few bugs it "fixed" remain
well, it's not a release candidate for a reason. there's still weeks of bugfixes to go
Please don't touch static helpers that reference the static registry, a dedicated DR is better here so people don't get the idea to call the helper outside of the correct registry event
I'd have to look at the code myself to know what it does
uh... what happened to Codec.unit?
registerDataComponent("hide_effects", Codec.unit(Unit.INSTANCE), StreamCodec.unit(Unit.INSTANCE))
porting to 25w45a using the porting pr and Codec.unit says it cant be resolved
oh
25w45a: static <A> MapDecoder<A> unit(final A instance)
21.10: static <A> Codec<A> unit(final A defaultValue)
its a map decoder now
luckily Unit.CODEC exists, which i prob should have been using from the start but oh well
Codec.unit() seems to be Codec.unitCodec() now: https://github.com/Mojang/DataFixerUpper/commit/c8287b8c07c56ed3cd08ae804b25284a98b87eaf
yeah Codec.unit became MapCodec.unitCodec which is all Unit.CODEC is doing
anywhos back to my many RL->Identifier changes 
Find and replace π
There is also the replace type in IDEA option
Which can rename all instances type correct all at once
you can probably also make a type with the same name as ResourceLocation + package in your project, then refactor it and collide with Identifer, ignoring the collision and forcing it anyway
I just did resource location -> identifier with whole word and preserve case
I looked at pre1 yesterday evening
The package moves are easy enough
But the baked quad changes fuck us over
Was there prior discussion what er should do about it?
I.e. no more diffuse color on quads
Tech and me thought about reintroducing diffuse color as a per-quad attribute instead of a per-vertex attribute
Was it removed from the vertex attributes? If it wasn't we can also add per vertex color back
The vertex format still has it since it's needed for runtime tinting
What will be more annoying is that we in place edit quads which we have to change to replace the quad instead
Yeah, IQuadTransformer in its current form is dead
But ok we did plan to readd stuff, that is good to know
The reject count itself was not that high. About 20 files
But the compile errors 
π
IQuadTransformer is not great anyway
Yeah that is indeed dead
I would suggest replacing it by a new MutableBakedQuad class that allows for efficient in-place mutations and transformations
But maybe that's not even necessary and we can get away with BakedQuad -> BakedQuad static functions
What do we do about normals
are normals still in the BLOCK vertex format?
Just as a reminder:
public record BakedQuad(
Vector3fc position0,
Vector3fc position1,
Vector3fc position2,
Vector3fc position3,
long packedUV0,
long packedUV1,
long packedUV2,
long packedUV3,
int tintIndex,
Direction direction,
TextureAtlasSprite sprite,
boolean shade,
int lightEmission,
boolean hasAmbientOcclusion
)
This is the new definition
VertexFormat is:
public static final VertexFormat BLOCK = VertexFormat.builder()
.add("Position", VertexFormatElement.POSITION)
.add("Color", VertexFormatElement.COLOR)
.add("UV0", VertexFormatElement.UV0)
.add("UV2", VertexFormatElement.UV2)
.add("Normal", VertexFormatElement.NORMAL)
.padding(1)
.build();
we should add both normals and color back, ideally
ugh, lighting is per quad too not vertex, thats really annoying
I don't think it's too annoying tbh
no lightmap is lightEmission
I think it's fine to have the light map only per-quad
actually, yes, your right
Oh you're right, it's packing the 32-bit floats for U/V into a long
How does vanilla compute the normals? Does it still use the direction?
But:
public static float unpackU(long p_470792_) {
int i = (int)(p_470792_ >> 32);
return Float.intBitsToFloat(i);
}
(when actually rendering the quad)
public static float unpackV(long p_470804_) {
return Float.intBitsToFloat((int)p_470804_);
}
again, thats uv's not lighting
Yep
anyway
As far as I can tell, yes
putBulkData in VertexConsumer uses the BakedQuad#direction to get the normal
normals existing are important if anyone does better lighting, keeping good normals is required, saves calculating them and/or allows for smoothing
Ok so that's terrible
color existing is important for people transforming others quads and applying tint
(atleast thats what i use it for)
Per-quad is sufficient IMO, both for color and normals
Arghh I would love to fix this but I probably don't have time today π¦
Of course we have to update the lighting pipeline a little bit
(not the logic but just the plumbing, probably)
Not sure per quad normals are sufficent, you don't always have your normals of each vertex pointing the same way
especially for non-planar quads
Well, now you will have to tbh
Non-planar quads are likely not a great idea
(you can always use two planar quads if needed)
no that's not for non-planar
if you load a model that doesnt just have 90Β° angles
you want the vertex normals to be smoothed
or rather, you might
our obj loader probably supports that I'd guess (loading per-vertex normals)
planar meaning all 4 vertices being on the same plane, opposed to axis-aligned where all 4 vertices share a coordinate
I'll try to drudge through the rejects and just put the code back in as much as I can commented out with TODOs, we'll see π
adding normals at all (even per quad) allows for non-axis-aligned quads (assuming the light engine doesn't want to calculate them, which would be slower)
adding a normal per vertex allows non-planar quads
I say do per-quad for now, its relatively straight forward to add per-vertex later
It's just that we shouldn't bloat the memory usage of these quads
yeah, i dont want another UnpackedBakedQuad situation
As these changes were made to reduce the footprint of the quads
Is this 1.12 stuff?
ye
we can always make it optional on the Quad, have it remove the normal info if it matches the Direction
There's tradeoffs there but yeah
I'd say the vast vast vast majority of quads will have normals matching their direction
we could probably:
sealed interface NormalData permits Slim, Full {
record Slim(Vector3c norm) implements NormalData {}
record Full(Vector3c norm0, Vector3c norm1, Vector3c norm2, Vector3c norm3) implements NormalData {}
}
if ^ exists you can either have a full set of normals or a slim singular normal, if full and all are equal, make slim, if slim and equal to direction, remove
you'd extend the size of the record by 8 bytes at runtime total if the same as direction
Sure, but non axis-aligned quads need a proper normal
Otherwise the lighting will look terrible
4 actually π
(compressed oops)
The actual pointer is 32
mkay, cool
The object header is a lot more
ahh, thats what i was getting confused with
You could probably do the same thing for color too
Btw the normal can be encoded as an int, there's no need for a Vector3c
Each component uses only 8 bits π
Yes, same as the vertex format
Yeah true
Reorganization of entity subpackages. Alpha cutoff bias for texture metadata, and the attack range component.
Yeah need to massage the patches to these entities a bit
i forgot that all parameter names change if the class gets moved
(another benefit of unobf for us, by the way)
Alright pushed my work so far for 1.21.11-pre1. 16 client compile errors remain.
I'll dig into that in a moment, I need a break from dealing with connected textures nonsense 
So do we add sth like this to BakedQuad?
int packedNormal, // Neo: support overriding the per-quad normal
int packedColor, // Neo: support overriding the per-quad diffuse color, ARGB
I think per-quad color is fine but for the normals an approach like covers suggested above might be preferable, especially with regards to the OBJ loader
longlong π
True
but given an obj-pointer would be 32-bit, and I expect that to be very rarely be non-null
it might be better suited
If we want to go fancy, then we could extend the ModelBaker.PartCache vanilla uses for interning the vertex position vectors to support interning arbitrary objects and use that for the normal "container"
If it's rarely non-null, I am not sure it matters much
but that depends on how many weird models mods load
That's true, yeah
I've got it compiling again, let's see whether it boots π
It does in fact boot. One bug I already noticed yesterday is that pressing Q drops two items instead of one, probably a misapplied patch
I wish record "with-ers" were already a thing 
I wanted that so much yesterday
Had to make them myself
If that is for NeoForge, could we not just patch that in as a method?
We could theoretically throw a couple withX() methods into BakedQuad, sure
The screenshot isn't Neo code though
My opinion: That creates cleaner code
Okey
yeah, methods like those are nice
These vertex format offsets are probably not all that useful anymore, especially not in that interface...
public interface IQuadTransformer {
int STRIDE = DefaultVertexFormat.BLOCK.getVertexSize() / 4;
int POSITION = findOffset(VertexFormatElement.POSITION);
int COLOR = findOffset(VertexFormatElement.COLOR);
int UV0 = findOffset(VertexFormatElement.UV0);
int UV1 = findOffset(VertexFormatElement.UV1);
int UV2 = findOffset(VertexFormatElement.UV2);
int NORMAL = findOffset(VertexFormatElement.NORMAL);
I'll yeet if no one complains
I'd say yeet them, we can always add them back if someone presents a use case.
I'm currently playing around with a solution for render type handling in item models with respect to the block/item atlas split. I'll make a separate PR for that in a bit and then look into the quad attribute stuff (i.e. baked color and normals)
I am trying to debug why testProductionClient is crashing
while running it in dev is fine
Very likely due to this: https://mojira.dev/MC-304369
Hi,
Iβve found a critical crash that occurs when the game is launched without an existing options.txt file. This affects all new users as well as anyone who starts the game in a fresh directory or d...
Yep, definitely that
Fabric ran into the exact same issue with the client test on CI
oh by modmuss lol
We can trivially fix it, but have to remember to revert that fix when upstream fixes it
I'll note it as a TODO 1.21.11
π
ok, build fixed
Huh interesting
Oh, riiiiiiiiight, blockitems will need to still use the block atlas π€
Mhm
The javadoc on RenderTypeGroup is probably, uh, not really all that correct anymore?
Yeah, that needs fixing
Also is there a point to having entityItem in it?
Can you even still mesh items that use the item atlas into chunks? (For which you then might need the entityItem Rendertype to dynamically render them)
Item models also use RenderTypeGroup
In fact, item models (in all versions since JSON-specified render types exist) are the whole reason why RenderTypeGroup has an "entity" render type at all
I always used these to dynamically render blocks outside of meshed chunks
That also works, I don't think it was the primary intention though
With that said: this is what you get when you only have an "entity" render type for the block atlas and an item model which declares a render type in the JSON
the render-type-in-json is our extension, right?
Yes
How does vanilla determine for an item model whether it uses the item or block atlas
probably based on which subtype of the item model is used hm
They do the exact same thing I do in the PR, the quad scanning is copied from vanilla
Yeah I see, net.minecraft.client.renderer.item.BlockModelWrapper#detectRenderType
So here's where I am stuck on: I don't see a relationship between a chunk section group and an item rendertype
Their relationship is basically only in their blending and discard behaviour. Since you can't know whether a model JSON will end up as a block or item model, the render type declared in the JSON has to refer to render types for both and let the baking code decide which one is relevant
Interesting question: what happens when you refer to an item-sheet texture in a block model π€
probably just missing sprite?
It refuses to bake the model
Oh, heh
My mental model of BlockModelWrapper may be incorrect, so hold on. I got some reading to do
Okay I think I wrapped my mind around it, not that I really like it π
Heh


