#1.21.11 Snapshots
1 messages Β· Page 4 of 1
Keep in mind that item models can have the same complexity in terms of geometry as block models, so I'd say it's warranted to also give them access to the render type feature
Also is this a typo? if ((block == null) != (entityBlock == null) || (block == null) != (entityBlock == null))
it's checking against entityBlock twice
Oops, yeah, that's a typo
That's not really what I am concerned about. If I understand correctly you can only do this if you specify a render_type (that is in reality a RenderTypeGroup), which you specified a ChunkSectionLayer for
and just conceptually a model you use for items is now completely divorced from ChunkSectionLayer. so in my mind, we should probably separately allow declaring the chunk section layer from the entity render type in the model json, but oh well π
If you need a "non-standard" combination of chunk layer and "entity" render type, then you can always register your own RenderTypeGroup. None of this is different now compared to before the introduction of ChunkSectionLayer
No it means you can specify only an entity_render_type if you use your model as an item model exclusively
that is what I am getting at
The problem is that you can't know beforehand what a model JSON is going to be used for, particularly if it uses textures from the block atlas, so you would either have to always specify two properties in the JSON or do what we're doing now where you refer to a tuple of chunk layer and entity render type
well the same applies to you using an item atlas texture
since that implies you cannot use that for blocks anymore
That's true, yeah. I guess what I'm getting at is that I see no benefit in splitting this apart. You'd need the combination of a render type for the block atlas and one for the item atlas regardless and having the model declare even more specifically which atlas the render type should be for would only make the feature unnecessarily annoying to use, at least in my eyes
You could technically forgo the function though, unless i am kinda blind
but anyway, we should IMHO at least keep this mismatch in mind, since you have to specify a chunk layer when you register a named "render type" (BTW the naming is all over the place) for models
If you do anything even remotely fancy with the "entity" render type then the chunk layer is an approximation at best anyway since chunk layers are not extensible
On a different note: I'm debating how I want to handle the baked color, whether it should just be a single per-quad modifier or a "struct" like the normals (the OBJ loader supports per-vertex colors)
Mhmmmm
It's higher memory usage, but having a regression there isn't great either
I'll fix the typo in your PR, apply format and merge
What do we want to do about packed lighting?
I would be inclined to reduce the light value in ExtraFaceData to a single value that's used for both block and sky and just do a max(extraFaceData.light, blockElement.lightEmission). The visual difference between separate (i.e. the ability to only specify one) and merged light values is, at least as far as I can tell, marginal at best
The only use case I know of for per-vertex colors is smoother biome blending
Biome colors wouldn't be baked into the quad though, they'd be applied during buffering where you can still inject them regardless if you make your own variant of VertexConsumer#putBulkData() that accepts the additional data
Is there still any point to doing that pre-baked lighting?
(since we got emissiveness)
Being able to specify light emission in ExtraFaceData is still useful because it allows specifying it for an individual element face and not just per element. Per-vertex light is of questionable usefulness though IMO
Oh sorry, nevermind. You are refering to the block model JSON loading, I was thinking you wanted to add more to the bakedquad
My initial question was aimed at both with the tendency of reducing it to the existing vanilla field in BakedQuad and adjusting the JSON/loading end to match that
Yes good that was my thought too
I have a functional solution for the additional quad attributes. I'll sleep a night over it and make a PR tomorrow
how about instead of adding more fields that are block/item specific to the model file we move them to the client item and block state model respectively
Thought about it, but I suppose which render type you're going to use is probably going to depend on the texture used too, and it feels a bit awkward to have to override the blockstate model file if you wanna change that hmmm
hmm right...
But yeah it's not like I had the same thought gmbrl. Maybe we can at least rename it from render_type to render_type_group, idk.
Or that just introduces unnecessary breakage
New version detected: 1.21.11-pre2.
@next wolf
π
1.21.11 - Pre Release 2
- Primer: https://github.com/ChampionAsh5357/neoforged-github/blob/primer/2111-or-22/primers/1.21.11/index.md
- Article: https://www.minecraft.net/en-us/article/minecraft-1-21-11-pre-release-2
- Changelog: https://misode.github.io/versions/?id=1.21.11-pre2
- Notion: https://apexmodder.notion.site/2524f070f88880648482e3cbdcba566a?v=2524f070f88880b29f60000c52785ecb&p=2b24f070f888800d9ba1e74dacb04c5d&pm=c
- SnowMan: https://github.com/neoforged/Snowman/commit/a87d4454f335188bafc83d14e06bf39bd5e96677
- Unobf Jar: https://piston-data.mojang.com/v1/objects/ec5d0361fb8f38ec6f6fd0162f6da0eef2c1a7d7/server.jar
SlicedLimes Videos:
- Main: https://www.youtube.com/watch?v=K9g37Sa46PM
- Pack: N/A
||<@&1067092163520909374>||
A second pre-release for the Mounts of Mayhem Drop is here just in time for the weekend, with changes to leaves! Here's a quick showcase! #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 vide...
Early pre-release
Nice.
Huh? I thought I got a break from writing primers today...
π doing great work, btw
sorry but no break for u
yeah we can revert the fix from yesterday
Ah you did the interner
I did, yes, because we compute normals for all quads running through FaceBakery
And here we go: https://github.com/neoforged/NeoForge/pull/2819
Wait we don't have a fast path for planar quads? 
This one still needs some docs, particularly about the normal packing and the component order in the baked color "struct"
Nope (assuming you actually mean axis-aligned quads) π
All of this can't wait for valhalla, so much potential.
A second pre-release for the Mounts of Mayhem Drop is here just in time for the weekend, with changes to leaves! Here's a quick showcase! #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 vide...
Anyone bumped to pre2 yet?
Nope
Will do that, then. Should be a quicky
π
Did you intentionally keep the Options patches outside of the two that collide with vanilla's fix?

Yeah removed those. Also reviewed the baked quad extensions. They should work, dunno about "pointer chasing" in the normal case, but I suppose the default variants of those objects should probably be in-cache
I'll fix license+formatting issues in your PR
If the pointer chasing becomes a problem, then that problem also applies to vanilla's use of Vector3fc for the vertex coordinates, so I wouldn't think too much about it
Shouldn't be an issue. Realistically you can probably assume that 95% of quads use one of six per-quad normal values and the default color value
Alright I think the baked quad stuff is covered pretty well by your PR
We should look at:
- remaining rejects
- TODOs
We have not really discussed dimension special effects yet, yes?
Correct
does mojang still store the vanilla ones in an ArrayMap 
Effectively I see three things:
- custom rain (both visual and ticking behavior)
- custom skybox
- custom clouds
They're just gone completely
oh oof
They were replaced by environment attributes
Well yes, aspects of the default rendering were
Yes
We could IMHO do all three as new Environment attributes of type Identifier, such as:
CUSTOM_SKYBOXCUSTOM_RAINCUSTOM_CLOUDS
Or similar. While there's a codec backing the attributes, we can't really reference a registry since it'd have to be client-side only.
Well and then we just do the usual dance of having additional register-events for all three, collecting identifier->Custom{Rain,Skybox,Clouds} mappings into a map somewhere
The additional benefit, as far as I can tell: you could then start overriding these on a per-biome level
That sounds like a reasonable solution to me
The CustomRain, CustomSkybox, CustomClouds interfaces would just contain the respective methods from IDimensionSpecialEffectsExtension
I'll give that a shot
Just keep in mind that environment attributes are a static registry, so we'll almost certainly need to pull some packet filtering nonsense to retain vanilla network compat
The EnvironmentAttributeMap is synced with a DFU codec, so at least we don't need to mark the EnvironmentAttribute registry syncable and instead just deal with registry names instead of int IDs in sync
CustomPrecipitationRenderer is too confusing to non-native speakers, right?
Because it does handle snow too
(and yeah, I saw they are also already filtering the original registry for syncables, but we need to do that connection specific)
CustomWeatherRenderer?
Are clouds part of weather π€
Or would anyone assume they are?
Otherwise i'djust go with CustomSnowAndRainRenderer
Vanilla calls the thing rendering snow and rain WeatherEffectRenderer, so there's precedent for Commoble's suggestion
Good I'll go with that then
Hmm, something doesn't look quite right here
(With AF it's even worse)
That bug is my own fault, I just don't know why yet
That's me trying to port my connected textures mod, those are not vanilla models
Oh π
BTW we didnt have a test for DimensionSpecialEffects and I am not sure ... well obviously we SHOULD have one, but it's not an easy one to do π
I have no clue how to filter the registry lol
No
EnvironmentAttribute is shared
Which makes sense since you supposedly can specify those in biomes and dimensions and they can be synced to the client (and any that affect rendering, should)
We have to prevent our custom NF added attributes from being sent to Vanilla, I suppose
I think we have that kind of "connection sensitive codec" somewhere
Hmmmmm?
There is no registry syncing at all when connected to vanilla clients
So this probably "just works"
datapacks
The environment attributes (specifically ones marked syncable) are synced as part of the biome and dimension definitions and that's what needs filtering. Reg sync is irrelevant in this case because environment attributes aren't synced by int ID, so we don't need to enable reg sync for them
it already has a NETWORK_CODEC and filters syncable attributes
but that is not connection sensitive
We only have a connection-sensitive stream codec but not a comparable DFU codec
yup
ugh datapack syncing still uses dfu codecs
haha yeah, it crams the entire registries into one big glob of nbt and sends that
which made sync errors funny
it does some filtering already (in this case and some others) hmnmmmm
registry op context? π€
or threadlocal (blergh)
because "the entire registries crammed into one big glob of nbt" does not fit on most people's screens when printed out
to make the connection type accessible
The major pain about this is that all you get when inspecting the packet is an opaque Optional<Tag> per registry entry which you'd need to painfully unwrap
you mean if you'd want to filter on the packet level?
I think that's a bad idea anyhow
Is it pre-building the packet and resending it to every client? if so we're kinda fucked π
OKAY TECHNICALLY: do they get synced if you don't use them?
I don't think they are π€
We could also just say: if you use a datapack that uses the NF attributes, you forgo vanilla client compat
The registries are packed and synced per player, nothing is cached. Every registry is sent in an individual packet
Isn't the link to βPrimerβ incorrect?
that should be correct, its on champs fork cause the pr hasnt been merged into neo yet
oh no wait your right, didnt spot that champ change the location of the primer at some point
that link used to point to the right place iirc
Changed it because not 1.22
please try not to
Wait
Won't the same thing already happen if you use a modded feature in worldgen... oh no wait, those aren't synced to the client π€
Now I am curious if there's precedent
@dreamy frost
I decided to store the color values in ARGB
when are ARGB colors even used?
are they not BGR for tinting already?
note: bgr is red | green << 8 | blue << 16
if any custom syncable datapack registries exist, vanilla clients cannot connect to the server, neoforge doesn't add any of those itself though
not with datapack content afaik, milk fluid tho
milk fluid has the manual enablement flag 
Well It's about datapack content referencing anything from the builtin registries π€
might that be necessary?
Well no that's not even sufficient
The value returned from BlockColor and ItemTintSource is ARGB, text colors are ARGB, VertexConsumer#setColor(int) takes ARGB and BufferBuilder's implementation thereof converts it in place via ARGB.toABGR() (see BufferBuilder.putRgba()) and probably a couple other places I'm missing
It would be datapack content that references builtin registries, that is synchronized to the client.
I can't think of anything yet π
I don't think that exists yet
decompiled in 30s only, impressive
it could be that VF became more multi-threaded, meaning it uses more RAM π
ah yes indeed; makes sense
Can contextual registryops be nested?
Well they can, but can they really be combined and still work π€
Yeah fuck, that's what I thought
personally I would only do it if we have a use case π
it's just doing ops instanceof MySpecialOps, I guess
Well the use case is to filter out environment attributes the client can't handle
Personally I'd just not bother
Specifically for just the Vanilla client -> NeoForge server case where a datapack is used that declares a modded renderer for a biome/dimension
can we detect it and disconnect the client saying that some mods are missing?
int lightEmission is such a waste, it can only have 15 values π
regarding IQuadTransformer, the only non-trivial of them left is the one that applies a Transform
you're going to have alignment anyway, Tech
even if you go with a byte you're still wasting space
I know but it could have been used for something
(e.g. separate block and sky light or whatever)
I think we do need the MutableQuad ultimately to make that system useful again. Also: The vertex format offsets in that class should be yeeted, as should copy.
not really because we would need to do that again on /reload
Yeah it'll just go boom if you try
I am not even sure that MutableQuad is so useful
what I would do is just a static BakedQuad applyTransformation(BakedQuad quad, Transformation transformation) and see how far it gets us
Well, I am wary of allocation spam and not 100% sure I trust the escape analysis that much
Transformations? Sure
Anything beyond that... ugh
OTOH yeah you could make the case that if a mod needs it, they have to build it themselves. (I.e., AE2 facades, XFacts stuff)
I think we'll want a MutableQuad eventually but given what quad transformer used to do I think the static method I outlined is good enough for now
a mutable quad is only useful if you are going to perform many transforms and/or if you are able to cache it
otherwise you still have to allocate it π
For the port I think I'd agree
Mutable quad you say? 
We're not actually using it ourselves
We copied most of Fabrics stuff in AE2 for that π
please fix your brace style π
Never
C# programmer detected
I'm sure it's inherited from forge's own nonstandard style...
It is, yes
My C/C++ code funnily enough uses same-line braces (except for the outermost ones on methods in QtCreator because its code folding is crap)
ok I'll do it
And remove the attribute offsets π
And copy
copy in particular is utterly pointless
well I am going to delete the whole thing
the question is really where the static method should go
Yeah, I only kept the copy to keep it compiling
Could put it in TransformationHelper
At least if it were client-only which it isn't 
oh that is such a cursed class
Yeah, it's a mess
we should probably transform the Direction as well? π
a nice thing about a MutableQuad is that you don't have to copy 15 fields all the time π
Yes
I think it's something to add soon after the port is actually finished, via a normal PR
alright, pushed the quad transform
should we do a bulk migration to jspecify? π
I have noticed 1 error caused by vineflower with the annotations on constructors in ChatFormatting
ah yeah that's gonna be fun π
how bad is this, readability-wise?
(ok, in that specific class we can actually use the already-imported nullable)
have you seen this? π
Yes, haven't had a chance to look into it yet though
I assume the GL error spam is related though
just gave NullAway a try
it's really not worth it, it generates way too many false positives :/
and the compilation feels a lot slower
pushed it anyway here if you want to have a look: https://github.com/neoforged/NeoForge/pull/2822
for some reason it is also checking mojang's packages, which are apparently not jspecify compliant
1,052 errors
yeah that's a bit too much π
NeoForm is unfortunately "leaking" jsr305 π
too bad that Minecraft still uses a few of them
TODO: note about deobf versions coming up
TODO: RL to Identifier
TODO: jspecify
TODO: baked quad changes
anything else to write in the blog post? let's start collecting topics π
Entities and their renderers were moved into more specific sub-packages and a couple other minor moves
RenderType building changed and the vanilla types were moved to RenderTypes
The stuff from this PR: https://github.com/neoforged/NeoForge/pull/2821
also that should be ready for review now
I'll let xfact have fun with that π
I'll take a gander at that tomorrow, I'm currently looking at the broken loading overlay
The GL spam was unfortunately a red herring, it's my fault and only happens in my mod dev env
I will remove jsr305 when mojang stops using it
@devout vault are you aware that the launch scripts from createLaunchScripts don't work in NeoDev because they can't find MC (I assume this happens with all of them, I only tried the client one)?
nope, just discovered this myself, heh
seems to be missing the client resources (?)
Will check that out tomorrow
π
Do we want to include the new binpatch format here? (If so that would require you to review the IT PR)
Fork I missed that
As it changes the file names and the structure in a way that might be incompatible with CurseForge i think it is at least worth a mention no?
Ah it is already merged
Very good
Very good
Did we also merge that into NeoForge already, or should I work on doing that on top of the porting PR?
Yeah that is the PR that I made with shartte, do we want to rebase that to the Port branch and release it with v0?
cause it needs some cleaning
I will do some debugging on C&B first
Probably yes
And then PR this to the v0
I think we should have it on the v0
Because of the incompat with CFs system
I doubt they read our announcements π
Me too, but you know..... Better announce it somewhere then no where
Mention its advantages etc
What I'd actually wanna try is to make a version for 1.21.1 that uses this new plumbing
release it
see if CurseForge or PRISM fall over
and if they do just revert π
It's the only way to test it anyway
Probably correct
We can easily make a 1.21.10 version π
Hm
Shouldn't the runtimeClasspath configuration contain the output of the corresponding source-set?
Or am I hallucinating here
SourceSet#getRuntimeClasspath contains it
But not the runtimeClasspath Configuration
Ah fuck, okay, we might be setting up the runtime classpath used for the run scripts incorrectly then
It's missing the client source set output
Ah yes that is quite possible. But it should be in the mod groups
I don't realy on those for finding NF in neodev, which is what leads to this π
Works in IDE, doesn't work with launch scripts
IMHO that's more a MDG bug than anything else
Ah I see π
Yes I agree. I don't like these side classpaths, they tend to hide such issues
Yeah it's almost funny, 10 lines below the classpath setup for the run scripts, we setup the classpath for the run task, and there we use the source set classpath π
Fixed c armor tags to match fabric. I don't think there's any other tag that needs adjusting for new content is there?
https://github.com/neoforged/NeoForge/commit/e5a883f779c27422e96f50dcae1d81a17e3df8c9
Edit: Forgot formatting...
@dreamy frost huh:
About the black loading screen
Okay that is mipmap related
The sampler says use mipmaps, the texture doesn't have any (since that is pointless for GUI textures)
I fucked up the sampler when I made that compile then
No I rather think that the early loading screen doesnt actually set any sampler
but we probably have to
No, look at the NeoForgeLoadingOverlay.ExternalTexture, it specifies a sampler
yeah but this is when external loading screen draws to its off-screen surface
not the off-screen surface being blitted to screen
(and yeah that offscreen surface also doesnt have a mipmap heh)
Right, yeah, I mixed those up
Well it could actually be a problem in both cases, but I think here we're allocating these textures without mipmaps in externaldisplay
Technically we could also just change that
and allocate them with mips
Specifying a non-mip sampler feels like the cleaner and more correct option to me
What does Vanilla do for GUI btw.?
It pulls the sampler from the AbstractTexture.
so no mips
As far as I can tell, yes. The GUI atlas definitely has mips disabled and any GUI texture that isn't on the GUI atlas is a SimpleTexture which, in ReloadableTexture, passes false for the last param of SamplerCache#getSampler()
Then we should also set a sampler in earlyloadingscreen yea
@dreamy frost I think BakedNormals.of needs overloads that take Vector3fc
Otherwise making your own quads is a pain in the neck
Sounds reasonable, feel free to add that
same for getters
Alternatively we'd need to add a pack/unpack util publicly somewhere
A pack/unpack utility would be more versatile
Fair enough π
Honestly. Fewer errors in GuideME/AE2 than I anticipated
In FramedBlocks I had ~1300 errors, the vast majority of which were nullability annotations in package-infos and renames/moves. Only maybe 200 were actual changes
the great nullening
I had none of those funnily enough
ResourceLocation->Identifier was an absolute nothingburger
The only annoying aspect is that integration modules for REI/etc. sadly won't compile against the old versions, because of this
Yeah, I had to comment out most of my compat modules as well
I went with excluding them from the gradle build instead
sourceSets {
main {
// TODO 1.21.11
java {
exclude 'appeng/integration/modules/rei/**'
exclude 'appeng/integration/modules/jade/**'
exclude 'appeng/integration/modules/theoneprobe/**'
exclude 'appeng/integration/modules/wthit/**'
}
That will lead to them still being subject to refactors in the IDE at least
But running the gradle assemble task won't try to compile them
(The IDE doesn't know and will complain if you compile natively in IJ though)
That's a clever solution I hadn't considered. Only issue (which is purely my fault) is that external code reaches into the safe parts of those packages, so I'd have to do more fine-grained exclusions
Ah yes π
i have one of those cases too. All of this was written long before we introduced the ability to have multiple mod entrypoints
Additional entrypoints wouldn't help me in mutiple cases because these classes contain stuff like translation keys which are referenced by my datagen
Ah, yes, true
Well, to some extent you could use those too
But you'd have to split your datagen
Probably not worth the effort
Yeah, commenting them out with a FIXME comment was easier π
Now for the QuadTransformer usages 
Tech wanted a util to apply a Transformation to a BakedQuad, but we didn't do that, right?
He did, see QuadTransforms
oh lol now i just wrote it myself
And I see he had the same thought I had. // TODO: the direction is currently not being transformed, but probably should be

Alrighty
which tool is that, I'm not familiar with it
I see, I don't think I've ever played around with coloring AE2 stuff
how? do you just cable anchor everything to not have cables connect?
I mean, I don't think I ever had multiple cables besides each other
guess you dont do many large scale networks
cause coloring cables comes in so handy for those
not only keeping stuff split but also organizing them
yeah no, I haven't had a need for them yet
i still want to make a playthrough where I have two AE2 networks: the core which powers everything, and the backbone which just carries P2P
-# but that's a topic for another place
partly because I tend to favour RS, I prefer the simplicity
Yes please. That seems nicer
If you do it, try to use it from the enhanced ao pipeline
well both, imho
i saw, yes
that's where I copied the unpack/pack for AE2 from π
What's the multiblock on the right side?
Just crafting CPU
Ahh
Anyhow, yeah, weird. I'd have thought 1.21.11 would be worse, but was actually not that bad.
Stop finding problems, XFact π

tell the game to stop having them
No no in this case it's my PR that has problems π
write better code
skill issue /j
Alright, replacement APIs for DimensionalSpecialEffects are also in
What may be unintuitive about those: you have to set the skybox of the dimension to something other than NONE for the custom skybox renderer to be called
(So i.e. to OVERWORLD)
But it does work (just reimplemented the ones in AE2)
#builds message
Fixed some annotations on incorrect parameters
[Jump to referenced message](#builds message) in #builds
1.21.11-pre2-20251124.022710
1.21.11-dev
1.21.11-pre2
@fallow dagger @dreamy frost thoughts about adding this to BakedNormals:
static int pack(float x, float y, float z) {
return (((byte) (x * 127.0f)) & 0xFF) |
((((byte) (y * 127.0f)) & 0xFF) << 8) |
((((byte) (z * 127.0f)) & 0xFF) << 16);
}
static int pack(Vector3fc normal) {
return pack(normal.x(), normal.y(), normal.z());
}
static Vector3fc unpack(int packedNormal, @Nullable Vector3f destination) {
if (destination == null) {
destination = new Vector3f();
}
return destination.set(unpackX(packedNormal), unpackY(packedNormal), unpackZ(packedNormal));
}
static float unpackX(int packedNormal) {
return ((byte) (packedNormal & 0xFF)) / 127.0f;
}
static float unpackY(int packedNormal) {
return ((byte) ((packedNormal >> 8) & 0xFF)) / 127.0f;
}
static float unpackZ(int packedNormal) {
return ((byte) ((packedNormal >> 16) & 0xFF)) / 127.0f;
}
Also @dreamy frost , why did you call it normals if the getter only returns a single normal π€
int normals(int vertex);
The name felt reasonable. You've got a point though, feel free to adjust it.
As for the helpers: looks good to me.
Yeah I agree π
Sounds reasonable; not sure what to do about the 4th component, I suppose what you did is fine
One potential objection is that this isn't really BakedNormals-specific
Isn't the vertex format exactly like this?
That doesn't matter, since it's just accidentally the same, tbh.
BakedNormals just stores it this way to save heap
IDK if having "unspecified" as an option is such a great idea π
What we can otherwise do is just compute the normal in the legacy constructor
I suppose it is faster to not apply transforms to the undefined normal
It's a bit dangerous, people will miss that it can be undefined
I am not sure I'd not just prefer having it nullable
I think it's obvious enough that UNSPECIFIED means the normals aren't available
But maybe we can add a comment to the class javadoc of BakedNormals?
Having potentially unspecified normals is nothing new, it was the status quo in vanilla after all, and I don't think the fact that Neo recomputes normals for all quads going through FaceBakery is particularly well known either. Adding a class comment to BakedNormals sounds reasonable though
I'll do "stuff"
The semantics of this are that if you go with PerVertex, it cannot be unspecified?
Or can it even be partially undefined in that case?
should i be worried about all this nonesence i can't understand since 1.20.5
It can always be unspecified
You might even have only some vertices that are unspecified
If you look at the enhanced pipeline I believe you'll see that it handles this very carefully
Good thing I asked π
If a normal is 0, even for just a vertex, it will be computed from the positions
And it also handles the case where the quad is degenerate
(meaning the normal is 0)
currently it checks (normal & 0xFFFFFF) == 0
It just means that simply checking against 0 is different from what we do
Anyhow, I'd also add this to BakedNormals, is this correct?
/**
* {@return True if the packed normal represents an unspecified normal. Unspecified Normals will be computed at render-time by NeoForge}
*/
static boolean isUnspecified(int packedNormal) {
return (packedNormal & 0x00FFFFFF) == 0;
}
I was considering to add boolean isUnspecified(int vertex) as well, but that might just be overkill
Yeah that sounds like it would be overkill
Are you sure about the second part? (I.e. the normal being computed at render time?)
The check looks correct at least
No that's why I ask π
indeed this is incorrect
if the normal is unspecified, the direction of the quad is used
Yes true, we only calc for AO dont we
indeed
and we only calc if the normal is unspecified; granted this was inspired by Indigo, for which most normals are unspecified since FRAPI won't compute it "eagerly"
have you removed this function yet? π
Yes
Well
I moved it to BakedNormals and renamed it
Since this is getting longer, I'll make a PR out of it
yeah that sounds good; this will allow me to bikeshed your docs π
I did not do docs on everything but at least some more
Do we really have to do this? (packedNormal & 0xFF000000); // Restore padding, just in case
I'd drop that
bah it's free
I rebased the new Tooling and Binpatch PR to the porting branch
And addressed some of the smaller comments by tech
Don't please
?
This can go into 1.21.10
Ah okey, sorry, misunderstood that
I already did the rebase now though
Do you want me to cherry pick this back onto a 1.21.10 branch?
I did not think we were willing to merge this into 1.21.10
With the stabalizing etc
And this risking the break of the CF launcher
Well it is true that at this point we might as well wait for the release next week
That was my thinking
I also have some local changes too so please hold on
Alright.....
As I said I already did the rebase
So there is nothing to hold on to
i certainly applaud the effort though
i was just not quite done yet with the review comments
trying to address techs issue with building the jar including all resources
even though we cant actually modify the resources in neodev atm
Working on include/exclude filters for binpatch diff to address taht: https://github.com/neoforged/InstallerTools/pull/34
Approved. Nice tests for the path filter
AI generated lol π
I'll pass it along 
And thank you, that'll allow me to actually push the addressed review comments
That is what it is good for
Absolutly
Oh wait itβs
day, we expecting any new pre-release or anything?
pre-releases don't specifically happen on
days so i'm not expecting much
Thatβs true, just snapshot day snuck up on me again like it has been doing recently 
i could see first RC this week, maybe next at the latest
I'll continue this on in #tooling-dev just FYI π
i expected wrongly!
Damn it thereβs a pre just dropped and I just left home
I saw
Do how long Iβm gonna be out if someone else wants to make the message
<@&1067092163520909374>
New version detected: 1.21.11-pre3.
release next Tuesday?
this isn't a release candidate quite yet
those will probably be this week
ooh pre3
rc1 on thursday and release on Tuesday is possible
it depends on how much they have left to fix
I am so anxious for the first 1.21.12 snapshots, gogogo π
curious why?
ono
unobfuscated binaries
But we're already preparing you for unobfuscation :)
1.21.12 is such a mouthful to write though
I already have problems writing 1.12 when I want to write 1.21
I want 1.21.21, palindromic version
Always have to do a double take
to what heights shall Mojang take 1.21.x, one must wonder
they will get to 1.21.20 just to deprive me of the palindrome
It's the great question of Minecraftkind
and I hope for J25 then
We also can't do that much more for unobf anyway
until it's in the official manifest
that has to wait for mc 1.25 /j
no 1.21.25
triple digits when
but maybe they'll change versioning with unobfuscation
1.21.12 mentioned from the latest Love Tropics event
mc 25.4.0 (2025, 4th drop, 0th hotfix)
/me can hope
bl4ckscor3 is a mojang employee
π
Fun fact, 1.21.12 will be-
A minus update, right? What did you mean "-"?
It's just the naturally following version, this doesn't mean anything official.
the clock implies after 1.21.12, we'll be getting 1.21.5 again
Sorry. A sniper took a shot at me. I'll live. Anyway, 1.21.12 will have-
1.21.11 - Pre Release 3
- Primer: https://github.com/ChampionAsh5357/neoforged-github/blob/primer/2111-or-22/primers/1.21.11/index.md
- Article: https://www.minecraft.net/en-us/article/minecraft-1-21-11-pre-release-3
- Changelog: https://misode.github.io/versions/?id=1.21.11-pre3
- Notion: https://apexmodder.notion.site/2524f070f88880648482e3cbdcba566a?v=2524f070f88880b29f60000c52785ecb&p=2b64f070f888800b97b0e1ca65ad62d8&pm=c
- SnowMan: https://github.com/neoforged/Snowman/commit/7f7ff44e9d3766b71a451730221e8ced1a86e5dd
SlicedLimes Videos:
- Main: https://www.youtube.com/watch?v=Eo_qi3N0zxc
- Pack: N/A
The third pre-release for the Mounts of Mayhem Drop is here with more tweaks and fixes! Here's a video guide! #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 be the most c...
just a little late but heres all the usual links for pre3
yall can fix that, just saying. give us 1.22 already
22.1
1.22.25
26.1.0
So, what has Moj tnt'd this week?
25.4.0?
The third pre-release for the Mounts of Mayhem Drop is here with more tweaks and fixes! Here's a video guide! #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 be the most c...
TBH though, I found 1.21.11 surprisingly benign in terms of porting effort. Yes.Sure. ResourceLocation->Identifier is a huge changeset, but it takes <1 minute to port to.
even in rendering?
Yes
BakedQuad may have become immutable for real this time, but IMHO that doesn't end up being such a big problem
1.22 isn't happening, stop acting like 1.22 is happening
It doesnt matter at all
it's just a number
What matters is what the features are
J25 is an incentive
Unobfuscated definitely is too
VibrantVisuals OBVIOUSLY is
so they were telling the truth the rendering refactors are almost over 
yeah .12 is going to be nice and i don't even know what content will be there yet
Assuming it is J25+unobf, it's gonna be awesome
please please please im praying for a hotfix
we have lots of code marked for removal in 1.22
just one
well-
That's just our own hybris
It could have been marked as "remove after 2 more MC versions" π
*that aren't hotfixes
once they change the version format thats not happening, do it in that version
you (and fabric as well) made the mistake of thinking versioning would continue as normal, and then the drops happened
The intent was quite clear, so we could as well deduce which version it was really refering to from when it was added (the TODO to remove it)
on the fabric side, i was hoping to treat 1.21.8 as 1.22 for the sake of removing deprecated code since it had been a year since 1.21, but that didn't end up happening
1.21.12 would be the most likely candidate now on our side since unobf is a major breaking change for FAPI
@dreamy frost @fallow dagger Can you check if this satisfies the rounding req and approve?
@lime oyster Do you know of any other class renames in MC, other then the RL -> Identifier for the coming version? (Asking because I am creating an IDEA migration map and want to have that in the post)
There are several
Could we create a proper list
Lots of moves in the entity package
That is fine
It supports both direct class renames and moves
Just not methods/fields
General package and class renames that are major
GameRule was also moved to a subpackage
Alright I will start tomorrow on a migration map
Also a lot of RenderType -> RenderTypes
Yes but those are method moves
That should make this migration a heck of a lot less painfull
RenderType itself is still there
I didnt find it particularly difficult, but doing it in 5 repos will not be nice
That is my point knid of
And with that map a good amount of effort can be done at once
By the IDE
It is a shame that it does not support fields or methods
But it is at least a start / something
If there was a format that could easily be converted for markdown -> mappings, it could be generated.
I don't mind rewriting the primers to support such a thing
Technically there is openrewrite
WHich is fully supported in IDEA
That can do all of this
But I have never done it
openrewrite will not work, no
it requires the source to be compilable
yes you could try applying it before updating
but most people will forget that π
not to mention writing that is very tedious
i wish we could easily batch apply structural replaces in IJ
Take your primer: https://github.com/neoforged/.github/pull/37/commits/aefc0dd98654809780eeba892fb42b9b958955a9
Mostly just some renames and using long for buffer size and offset
1.22 will be the full release of VV in java edition
doing pre3 r/n
was just about to correct the link
yeah google got me with the fandom link
As expected, very little going on in pre3 in terms of rejects
there's one due to an indentation change
ah yes 2.0 when etho became mojang canon
It will be hotfix for .11 
as long as it's unobf that's fine by me
I doubt hotfixes would be
please i need the spring drop to either be 1.21.13 or a new version entirely
Source?
Yes, it is the exact opposite which is why I wanted Schurli to provide a source
Iβm pretty sure that isnβt accurate. Did I miss an announcement?
no, the actual announcement says the exact opposite as mentioned above
Sadface none of the model loader work is ported on fabric....
winter drop?
Does missingno not exist in the block atlas anymore
i didnt notice any difference
See net.minecraft.client.renderer.texture.TextureAtlas#missingSprite
if we get RC1 tomorrow then they will almost definitely release on tuesday
This also contradicts there never being a 1.22 and with them changing how they do updates the possibility of the next big update being VV is high
They wonβt release the whole of VV at once
But maybe theyβll do the start of it
Which theyβve already kinda started on
They won't but the last batch will probably have a big enough impact to be a big version
We donβt even know how the versioning will work, theyβre changing it
has gui rendering changed much between .10 and .11?
Mostly on my end due to render type changes
But fixed it now
The only differences I can remember right now are Button being split into an abstract Button and a Button.Plain sub-class and text rendering working differently in certain scenarios
Not much has changed, IMHO.
good to hear, I wouldn't want to have to refactor toolbelt's rendering twice in a row :p
Porting complete π
Just not on fabric
Their entire block model API is missing from the pre-releases
Including indigo
Huh
That was my reaction
That's because only Pepper knows how to update it and he's probably been quite busy π
Well that explains it
Maybe it should either be rewritten then or someone else should learn how it works
rendering and model stuff, someone else 
fabric, rewritten 
Maybe ims could do it, they know a lot about rendering
When I ported AtlasViewer, I had to disable the Fabric module entirely because its setup failed with a nonsensical error I haven't bothered digging into yet
I had one with regards to intermediary mapping based javadoc
Updating loom fixed that
And I had to add the new loom companion cradle plugin to every sibling project in the tree
But I am proud of myself, this is the first time in I donβt know how many years were I ported this ahead of the release
And I enjoyed it
Exactly this is why I dread updating AtlasViewer on every MC release: update FAPI -> requires new Loader -> requires new Loom -> requires new Gradle -> requires reverting everything because the Gradle update otherwise won't go through. The fact that the whole project breaks in multiple additional ways (hotswap doesn't work at all, IDEA's static analysis regularly crashes in a couple classes) then just makes it even worse.
I also know how it works but I don't have the time to fix it. Some things are just hard, and it all depends on who is available to help
True!
I use placitum to take care of that. Granted I had to add some options to configure the pre-release builds now but it worked right out of the gate
I have never had a Gradle update not go through, hotswap not work, or static analysis crash
You're also not using an ML environment as far as I'm aware (at least with respect to the last two points).
As for the Gradle update: if any of the previous steps cause the Gradle reload to fail, then you cannot update the wrapper in the intended way, you either revert everything or you edit the wrapper properties file manually.
I always edit the properties
I always edit the properties manually
Gradles wrapper update requiring the build script to be evaluated is stupid
Yes
If I'm in xplat then I'm using Arch Loom and also haven't had those issues
A few people including Modmuss said that that chain is incorrect (namely that it is the API update and not the Loader update that necessitates a Loom update), but the result is that things need to be updated anyway
I found the cause of the double-drop (it was indeed a slightly misapplied patch) and also noticed that the fix for https://mojira.dev/MC-231097 is redundant as vanilla now does this on the server which then propagates to the client through synced data
I update the properties and then run the wrapper task
Same
I hope they do push a snapshot out this Year
@devout vault is it intentional that MixinExtras is not available in NeoDev? I'm trying to throw a mod into a NeoDev env to test something because it's faster than writing the equivalent mixin but it blows up on ME not being loaded
@devout vault I'm currently looking into adding samplers to the ELS and while handling them in the GlState snapshoting it stuck out to me that it only captures the texture bound to the currently active texture unit instead of all relevant ones (i.e. the first 12 since that's all vanilla cares about). I have a hunch that the current capturing only happens to work fine because the active unit is always 0 when reaching this code (which a conditional breakpoint in readFromOpenGL() confirms) and the ELS only ever makes unit 0 active.
it doesn't really need to capture any of the others π€
As long as it activates 0 when it binds
even if any other texture units are bound, if the shader doesnt use them that should not matter
It would at the very least need to explicitly activate unit 0 before capturing the bound texture then. At the moment it captures the bound texture of whatever unit happens to be currently active (which could be non-zero)
Ok, I'll adjust that and implement the sampler handling the same way
If you wanna save time, try to shove it into claude and see if it can do it π
Heh, I could do that
I just did if you want to see what it spat out
Sure
Not bad but the sampler capture has a bug: it (unnecessarily) binds back the previous unit before reading the sampler
Weird, glBindSampler does not use active texture
does GL_SAMPLER_BINDING do?
lol yes it does
god OpenGL....

It also activates texture0 in bindTexture2D even if the texture is already bound
that should be moved into the if
otherwise the idea is ok
Hmm, this makes me wonder: if we restrict texture and sampler binding to unit 0 and make the "setters" automatically activate unit 0, should we just make GlState.activeTexture() private since calling it with GL_TEXTURE0 is redundant and calling it with anything else doesn't actually work?
yep
I am not sure we really need to track the active unit either, does Mojang?
They do, yes
Alright then we have to do that too I suppose
I also just noticed that I can't just say "fuck you, take sampler 0 (i.e. no sampler)" because passing 0 doesn't "unbind" the sampler, it makes the specified unit use the sampler bound to the active unit (if I'm understanding the docs correctly) so I have to actually implement a sampler 
Kinda yes but you can ofc add it.
I'll maybe give it a shot later
There's not really a reason not to have it heh
Ah yes it's just because we JIJ in but never bothered to add it to the actual local runtime only too
Uh. What? π
Okay, you are refering to "If the sampler name zero is bound to a texture unit, the currently bound texture's sampler state becomes active."?
But isn't that just restoring the old behavior?
Which is what we'd want
I am interpreting "texture's sampler state" as the inherent sampler of the texture that you get from specifying the sampling properties on the texture itself (like you did before sampler objects were a thing)
If that's what it means, then that's an awful way of describing it
Well, kinda, you'd probably have to look at the OGL 3.3 spec. There could be a sentence in there saying that every texture object has an inherent sampler state and it is defined by the textparams you can set
Fair enough. It's not too bad to create a sampler though, so whatever π
Well I think you should probably just bind 0 π
since it doesn't really matter
(we already have the textures inherent state set up correctly)
True
There we go, it finally builds (
at unused imports): https://github.com/neoforged/FancyModLoader/pull/391. Also tested it in NeoDev, works as expected now
The merge conflict I just produced reminds me: at which point do we want to mark 1.21.x stable, freeze it and rebase the port onto it?
I want to merge this: https://github.com/neoforged/NeoForge/pull/2809
It's not breaking for modders, but I'd still want it in to see how CF reacts
otherwise: I'd say immediately but we should ask #maintenance-talk
π
In Neoforge-21.11.0-alpha.1.21.11-pre3.2025.11.26.164358
Crossbow first person rendering is weird.
and MultiPart Entity HitBox Render is only support EnderDragon
It should be patch in EntityHitboxDebugRenderer's showHitboxes method when Support Another MultiPart Entity Hitbox
Are we going to rebase the port branch on 1.21.x?
There should be at least one stable commit
I think so? We haven't really put that in stone in #maintenance-talk but the sentiment went in that direction, I think
Yeah that is what I read as well
But you know
Wanted to move that in here
As the rebase discussions hits 1.21.11
Sure, we'll rebase anyway. But we need to decide to put a pin in 1.21.10 first
Okey there are no "blocks stable" PRs anymore
So if you want to give it a whirl
Then we can make it stable....
New version detected: 1.21.11-pre4.
π¨ <@&1067092163520909374>
Huh
At this time of year?
What do mean snapshot
Wha
New component? This late in the cycle?
emerging
1.21.11 - Pre Release 4
- Primer: https://github.com/ChampionAsh5357/neoforged-github/blob/primer/2111-or-22/primers/1.21.11/index.md
- Article: https://www.minecraft.net/en-us/article/minecraft-1-21-11-pre-release-4
- Changelog: https://misode.github.io/versions/?id=1.21.11-pre4
- Notion: https://apexmodder.notion.site/2524f070f88880648482e3cbdcba566a?v=2524f070f88880b29f60000c52785ecb&p=2b64f070f888800b97b0e1ca65ad62d8&pm=c
- SnowMan: https://github.com/neoforged/Snowman/commit/29450878a3b5544175d1d5158ae6d6fe6f11c962
SlicedLimes Videos:
- Main: https://www.youtube.com/watch?v=AXuybVwjZzE
- Pack: N/A
A fourth pre-release for the Mounts of Mayhem Drop is here new dispenser functionality and more fixes! Here's a video guide! #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 t...
They cant keep ggetting away with this
No, just an error in the changelog. This component was added in pre1
likely picked up because the component changed to add the creativeRange
why a component and not a attribute?
this sounds like it should have been a attribute
Hoes have farther reach than axes
attribute modifier
Wait, they do? I did not know that.
Might had been the combat update that have not been released
but this component would allow them to reintroduce the combat update at some point with less hardcoding
Spears have an increased attack range
Yeah, I knew about spears.
Mojang, combat update 2.0 when
you could probably datapack it now tbh
Have your primer: https://github.com/neoforged/.github/pull/37/commits/177961d7a97d59e77472a42b9675099cea19f3bf
Creative attack ranges and method overloads

(does look to be that way based on the image)
ah my internet is back
this image, I mean
'd you giga, already posted it xD
ah right
discord shows me a "failed to load" poop
it does suggest hotfixes will get patch versions
I wonder how we're going to handle this, 4 part version numbers?
Since patch/hotfix versions don't necessary mean code compatibility with the release drop
we use year.drop.OURBUILD
mounts of mayhem (upcoming release) will be 25.4 (going by the above image)
previous drop copper age was 25.3
i do like this new format, much easier to understand imo
that is, we move to hotfixes as if they didn't change version
i also like that they dropped the useless 1. finally
neo follow what we already do, first 2 parts of mc ver + our build number?
<year>.<drop>.<neo>
but yeah IMO we don't care about the hotfix verdion
so year.drop.neobuild
we already drop development on hotfixed releases so it just stops confusion
that way people won't have the issue of using 21.0.x-beta because they don't realize 21.1.x is merely a hotfix
oh snapshots are getting the version too
neat
i kinda liked the <year>w<week><[a-z]> for them
made it clear they are not your normal versions
Genuinely quite sad to see the 25w49 format go. It's 100% for the best β what an annoying version format β but I'd grown fond of it.
yeah
so do we trick modpacks into settling on the first release of a year or the last
what if bedrock needs more than ten hotfixes
maybe last of the year
last of the year has the benefit that major numbers become significant and easier to understand. all players would play the same subversion of a major.
doing first of the year means some modders stay on the first version while others move on the next subversion
easier to say "we are playing a neo modpack on Minecraft 25" and no one is confused which vanilla content you will have
we can't, or rather shouldn't
there's got to be a way to determine the mc version from the neo version
IMO none of our infrastructure should rely on that
for site purposes we shouldn't even list hotfixes, just versions related to say 26.1
for dev purposes the metadata should know which hotfix it belongs to
there shouldn't be any other practical reason to care
they just roll into 3 digits, like they do now (bedrock versioning is, has always been, and seems to continue to be, stupid)
for example latest bedrock is currently 1.21.124, and Mounts of Mayhem will be 1.21.130
π they didn't just use the data version
no minecraft 2, we skip straight to minecraft 26 
it proves that Microsoft wasn't contractually bound to 1.x, unlike what the rumor kept saying
well, the rumor could still be true in the "no replacement for minecraft" aspect 
hmm
java is perfect
idk why bedrock insists on the 2 digit thing
is there a reason for that
not if you want the mc version without downloading metadata (which mdg provides)
I also find it annoying to need to remember version intervals to know whether you're running a hotfixed version or not
yeah i think u need to include the entire mc version
IMO it is a reasonable loss if it means neo doesn't have to go to 4-component versions
why would this make sense? at least compared to the previous system
previous system was last non-breaking minor after the yearly major
would that not become the last hotfix of the first drop
what do u think new version will be where most mods will be porting to?
I don't hate 4-component versions but I think they are annoying for the users
π€·ββοΈ
We'll not encourage unstable builds by relying on dynamic versioning (which seems to be what you are suggesting?)
I hope for first drop of the year
who's that in response to?
25.11.1 for hotfix 1 of drop 1
no you were wrong, you had the 1. in it ;p
I was right
I love Mojang
it preservers ordering and information about the mc version in it
CalVer wins
close enough
i hope all 4 versions as porting every 3 months is kind of fine
and only 3 components
nah thats not happening
The Peopleβ’ wont do it
is there gonna be a poll for what version people should be supporting? Like maybe the first drop of the year?
either way we need a meta api
every 3 months with large changes is a lot
no NeoForge doesnt decide that
last of the year = biggest version number for some major version
Really depends on how much mojang obliterates stuff with each drop.
thats up to the community to determine
consider the perspective of a confused user
IMO it isn't neo's place to tell people what version to use other than "latest"
imagine you decide to stay on the first release of a year, so 26.1 + hotfixes
then later 26.4 comes out
Ok wait, relating to this: #1425127445803045186 message
You don't mean it should auto update to a newer hotfix, you mean it should be hidden behind an opaque neo version?
and you get a bunch of users whining about why haven't you ported your 26.1 mod to 26.4
because 4 is more than 1
27.1 is also more than 26.4
right but I feel like less of a problem
yes I mean that neo 26.2.35 would be mc 26.2.1, and 26.2.36 would be mc 26.2.2, transparently
oof god no
the 27 vs 26 would be perceived as a bigger jump than 26.1 vs 26.4
thats confusing
and you'll get people asking to port from 26.x to 27.1 either way
it's intentionally telling the users that hotfixes are nothing to care about, and dealing with them by bumping our mc-basis when they happen
imo mods should update yearly
i agree yearly is good
i just think the spring drop would be a nicer target than the winter drop
what about yearly + every official major update
You're kinda ignoring how people have to select the neo version
since summer break and all that
I try to port to every new drop if I find the time to
I think some mods will do yearly and some mods will do seasonally
major updates will still happen, just infrequently
as in, it'll be really jarring if for MC version x.y, Neo just stops at x.y.123, and for x.y.1, it continues at x.y.124
And if some mod tells you to update to 124
Ulraf said they have plans for major updates in the future
they just changed the versioning so major updates arent a thing
there's Drops and Major Updates
err we might have a semantic disaagreement here
you'll have the fun time of figuring out you have to update MC version first
theyll be under the drop system
before the launcher even lets you select neo x.y.124
theyll just be bigger drops
I dont think there are major updates anymore. all drops
not everyone but people with few mods can
so 1.21.11 is a major update and so is 26.1 and 26.2
okay we clearly disagree on what "major" means but that's not important
just call it feature update
I am gonna spread propaganda for last drop of the year to be used as stable
major being like tricky trials or mounts of mayhem
whether you think a feature is big or small also is in the eye of the beholder
the chicken jockey disc wasnt major
thats unnecessary, subjective and misleading
minecraft doesn't do major updates in the semver style, does it?
aren't even ancient worlds backwards compatible
probably not
they just dropped their "SemVer"
so if it never does a "breaking change" for players π
well, the way I see it, if it's a hotfix we already kill the old version and continue in the new one, but people don't know that it's a hotfix so they pick the old unsupported builds due to ignorance, so keeping our version numbering across hotfixes removes that confusion.
but, to be clear I'm not against 26.1.0.47 I just think it has other drawbacks, and the only advantage is the mc version is encoded in it
People actually call thse "drops" π
so about neoforge when will the neoforge drop the support and backport new features?
like 1.21.1 is still getting backports
but anyway if you consider drops to be major updates then you can expect about 4 drops/majors a year
mojang call them drops so it's easier to communicate if we use that term
the thing is they wouldn't actually know how to update the neo version because launchers have and always will be based on the mc version
(I'm mostly calling them "major updates" because "drops" is a dumb word)
they'd need to know they need to update the mc version first
yep that's kinda what I was trying to say. in prism the instances are MC version bound first, then you can select a compatible neo version
just call them updates. major or not
but we also have hotfixes
this will drive when mods will be ported majorly
still an update imo
Look I am not against doing Aracne Versioning.
year.major.hotfix
that's a different battle. IMO launchers should ignore the hotfix version starting now, and show all loader versions for the same hotfix series in the same group
to Potato.123 π
potato is taken, that's one of the april fools versions smh
It's a brainrot word
Okay okay, Papaya.99
yeah pick a minecraft item. preferrably something released in that version
that's more like it
ew I hate that even as a joke
next version will be neoforge -spear
not really possible, they still need to check compatibility against the new mc version. but in any case, I don't want our versioning system to be less confusing if and only if launchers will update (they will not)
why not do <minecraft_version>-<neoforge_version>
like right now
I like my idea of <year>.<drop><hotfix>.<neo patch>
Android vibes
it's . not - but y
ya
no!
what, no . or what
without . then versions won't be numerically sorted
maty THEN you have to go all the way
sadly android dropped a while ago
.
202602000001
because you'll have 26.1, then 26.11, then 26.2
...no?
is there a reason to not just go year.drop.neo_version since realistically we will only support Mojang's latest hotfixes anyway
they'll be alphabetically sorted but ecch
YYYYDDHHNNNN
hmmm
