#26.1 Snapshots
1 messages ยท Page 2 of 1
question you did download java 25 and update to gradle 9.1.0? i had to do that for my builds to import
OH java 25
that might do it
I knew I was missing something lol
ugh something reset in intellij and the Terminal got set back to powershell
I find powershell extremely awkward to use for my basic level of commandline usage
Thanks for the info ๐ I haven't even started merging Arch Loom with any of the Loom versions that support unobfuscated Minecraft, so the testing will definitely have to wait a while
yeah that should work
yeah except I used java 21
Hm, that's an excellt question if you actually have to (?) Since generating the MC artifacts is based on NeoForm still for our part ๐
now it worked after switching the toolchain to 25
Oh, right... ๐ Oooooooh yes, then Gradle will also complain heavily that it can't resolve a J21 version of NeoForge
That is super weird, I remember it doing that for me when I ran an actual task
maybe gradle version dependant?
I mean that paragraph-long infodump about variant selection blah blah yada yada
was using 8.9 in this folder
Hm, that should have had that long-form error already. weird
It's possible that it only shows when you try to run a task like assemble, and not on sync
LITERALLY the only code change lol
thats jspecify right
Yeah, if you don't touch villager trades, there's very few changes (which I suppose is good)
no the class is defaulting to jsr305 which I had already used in the far past
i spent far too long going over my mods being sure im using those over jetbrains
(rly need something like what neo has to yell at me in moddev)
Loom still expects mappings in a ton of places (you can provide empty ones, primary meant for legacy versions without mappings, but I expect that'll break a ton of things)
modmuss and contributors did a ton of work addressing that but it'll be quite a pain to integrate into our fork, and I'm not 100% sure if we still want to port the fork to unobf versions in the first place
actually wait
the jetbrains ones are still in the classpath
that error was bogus from before I set the java25
Oh, you mean you'd do a breaking change or just abandon the fork? Or upstream the changes?
so 0 code changes woo!
sadly, that doesn't mean I can flag the existing build as compatible
because.
I should probably make it upper-unbounded
since we don't know when mods will be likely to be incompatible anymore
"anymore" = you never really did ๐
in the past it was generally a good rule of thumb that 1.x -> 1.(x+1) was going to have enough breaking changes to not warrant leaving it unbounded
this stopped being true with 1.19.3+
I don't think it needs any breaking changes, but yeah I'm not sure if we'll abandon the fork for new MC versions or not.
The primary features of AL over the normal Neo toolchain are mapping support, which we'll drop for 26.1 Neo in any case as it's such a burden to maintain especially now, and binpatching which I think might be coming to MDG?
Is already in, yes
ah, a conundrum....
if I build the mod again with 1.21.11, I can flag it both 1.21.11 and 26.1-snapshot-1
but if I build with 26.1, it will be java 25
but there are literally no code changes
so do I re-release 1.21.11 just to update the mods.toml
or do I look to see if I can use java 25 features in this mod, so I can justify it being a new file ๐ค
that should be fine id say, launchers should handle the java for you
but you can always set the java version in mods toml
https://docs.neoforged.net/docs/gettingstarted/modfiles#features
althought ive never actually seen anyone do this
no?
no one downloads mods that require you to manually bump your java version up for your instance
well I don't want to force java 25 on 1.21.11 players
I'd just not bother with cross-version compat like that
so if I release the file built with java 25 it will be literally just a java bump vs 1.21.11
but I can build with java 21 and have it flagged on CF ... except it will still just be a new file that contains no changes other than metadata
so it feels like a lose-lose situation :P
what the fuck intellij? what are these indentation changes?!
those are NESTED blocks they GO NESTED in indentation too!
at some point this changed, but seemingly only for some classes?
I have a class where it tries to put switch expression cases inline with the switch, but only for that class
Hey! I just wanted to try the MDK for 26.1 using tthe provided commands in the PR:
mkdir NeoForge-pr2879
cd NeoForge-pr2879
curl -L https://prmaven.neoforged.net/NeoForge/pr2879/net/neoforged/neoforge/26.1.0.0-alpha.1+snapshot-1/mdk-pr2879.zip -o mdk.zip
jar xf mdk.zip
rm mdk.zip || del mdk.zip
Without modification, I got this error message:
Execution failed for task ':prepareDataRun'.
Trying to prepare unknown run: data. Available run types: [client, clientData, serverData, gameTestServer, server, junit]
It was fixed by doing this:
data {
- data()
+ clientData()
+ serverData()
programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
}
But then, I get this message:
NeoForge-pr2879:main: No matching variant of net.neoforged
26.1.0.0-alpha.1+snapshot-1 was found. The consumer was configured to find a library for use during compile-time, compatible with Java 21, preferably in the form of class files, preferably optimized for standard JVMs, and its dependencies declared externally but:
Full message: https://pastee.dev/p/QH4oaZEh
At the bottom, it tell me the possible solution to be using Java 25 or newer as Gradle JVM but I did that.
OOF! I now realized that the problem was that I had to change this as well:
- java.toolchain.languageVersion = JavaLanguageVersion.of(21)
+ java.toolchain.languageVersion = JavaLanguageVersion.of(25)
Now everything works.
tl;dr
Provided MDK requires changes, see my provided diffs above. Maybe something to report to your PR publishing bot instead ๐
I think you already know, just ignore my message lol
hmm surely there's a way to make the fact that users need to upgrade from j21 to j25 more obvious with an explicit error?
off topic but i like how the net.neoforged:neoforge:26.1.0.0-alpha.1+snapshot-1 turned the artifact id into neo emoji 
Nope that's the Gradle way
I have to imagine that there is some way to re-throw a "nicer" error to the user if this error is detected. (I know that it was on a much older Gradle version and different architecture, but the ForgeGradle days didn't have much issue with explicitly telling the user where they went wrong in terms of Java version.)
You could pretty easily add a check for JDK version and error out early right here:
Old check for comparison: https://github.com/SizableShrimp/ForgeGradle/blob/651e43fd7c68068c835548583c5eb924e13d9251/src/userdev/java/net/minecraftforge/gradle/userdev/MinecraftUserRepo.java#L189-L197
I think it's pretty safe to assume that if a user is requesting a Minecraft artifact of a specific Java version, the Java version of their project should be at least as high as that (if it is set). And the error message from this check is a lot nicer to look at than the Gradle vomit that you get otherwise.
Also it's pretty interesting to me that NFRT optionally accepts a Java executable as a CLI argument, but uses its own javac to recompile the game. Why not instead allow passing a path to javac as well and using that as a tool call for recompilation if present? It would save the headache of having to run NFRT with different JDK versions, but only if the version capability reports strictly greater than J21. And using the actual JDK for a given -release flag is a safer bet anyways
I believe the problem is that NFRT needs at least java 21 to run
But it uses the javac api directly, not the executable
MDG doesn't parse the neoform config at configuration time
So there wouldn't be a way to read the java version from it
Yes, why not use the executable?
We could use the VesionCapabilities I suppose, but it would require an up-to-date MDG since we'd have to hardcode it there
is the version capabilities thing not sufficient (?) That is being used at configuration time from what it looks like
Ah
I'm happy to accept a PR for it
There's a solid chance that modders will bump the plugin but forget about the java version
In any case, you could likely punt the check to when the neoform config is available too. That would still be before Gradle vomits its trash to the console I would hope
I can look into it later; I think it's going to be quite a common occurrence, so giving people an obvious error is helpful
Is there a reason why it's necessary to use the api vs. calling out to the executable?
No, that would be too late. We only get the neoform config transitively from the neoforge dep ๐
No idea
I saw. I guess the conditional logging of errors/warnings would be more annoying if it were an executable call
I guess. It's also not a big deal ig
Hmm. Perhaps an alternative would be listening/checking for Gradle throwing such an error (is that possible?) to the user at configuration time about mismatched Java on the requested neoforge artifact and then spitting it back out again but as a "nicer" error with more explicit language.
We could also tweak the NeoForge publication to skip the java version attribute
In any case I will include this information in the blog post, maybe that will be enough
Fair enough. Based on the comment though, it seems like an issue was already run into though with using such a new JDK paired with an old -release version?
We compile directly from ZIP to ZIP
Hence javac is not usable directly, we need a compiler driver shim
There has not been an issue with JDK 21 and -release 8, even for binpatches, BUT for binpatches the bytecode is now slightly different with javac 25 and -release 8
Which is why I did start this branch:
But it's not super high priority
decompiler libraries IIRC
As in, passing J9+ JDK as libraries to the old versions of fernflower fails
That's why it requires the path to a J8 JDK, to pass the libs on to ART+fernflower
Can confirm, it happened to me when working on 1.16 NFRT support
Technically speaking Fernflower can probably run on a newer JDK as long as it has rt.jar from Java 8, but there's no point as long as there are Java 8 builds available for the host
but yeah, it should use that external JDK to actually run the javac driver, but it needs some much more complicated setup (i.e. that needs to be compiled with java8)
I jumped in a bit late. Another issue here is that the language version itself is late-configured, which means you have to do that assertion in an afterEvaluate block. Doable I suppose, but as Tech said, you'd only know once the user had updated the plugin already.
It's somewhat annoying overall, that Gradle has no real path to retrieve some config via HTTP at configuration time, and still be configuration-cache-compliant
at risk of asking an obvious question, can you not just do it manually and manage the download caching yourself
It will detect that you're trying to use the network
Since it intercepts disk I/O you do.
Oh wow
There are hacks via ValueSource that suppress the Disk I/O checks it does, but overall there's no clear-cut easy way
But they do instrument your entire plugin and redirect all java.io.* calls to their own shim to detect this stuff
and track dependencies to external sources for your plugin/config code
I'm not sure that's quite true
It should be compliant but slow
You can do a ValueSource, and immediately query it
I guess that is convenient for enabling the cache with legacy code
But otherwise it'll detect your cache writes as a hard dependency on files
which would be untrue
Forcing everyone to rewrite their stuff to use Gradle I/O APIs would be a non-starter
They would have to expose their configuration resolution code in a configuration-time friendly way
configuration resolution = dependency resolution
i.e. you'd still want it to be offline mode compliant
Hmm fair point. Although I guess it would save people for when they bump the version to J29 in ~2 years :P
They'll manage. That gradle resolution error is not that bad
๐
If you actually get to it
Which is exactly the right approach here?
If you need something that isn't gradle-inspected I/O, then it needs to go through a VaueSource so that the reuslting value is conf-cached and so that the source is re-run on every invocation
Ideally you'd be able to route the value source around and only un-lazy it at the last possible moment but it's still useful even if you don't because it ensures that conf cache works by isolating the logic used to retrieve the value, and running that in a config-independent context every time
That said, that's awful UX in this case, cause it's basically going to lock you into non-offline-compatible mode unless you're really careful
๐คทโโ๏ธ I mean you can probably make it work, TBH
is the neoforge versioning seriously going to be just 26.1.0.x for 26.1?
... as opposed to?
there were other formats discussed but none of them presented significant enough benefits for the team to agree to change neos versioning system, so the existing one of appending a neo build no. to the mc version was kept
Yeah it's just the logical continuation of the previous versioning
In other news: I cherry-picked the missing commits from 1.21.x over to port/26.1 and will make another snapshot version release should it build correctly
oo nice. how hard is the porting of those with all the param name changes?
Well it wasn't a lot of commits and patch changes so it could be worse
I just had to patch up a single line with references to two params ๐
The params are also the easier ones, the local variables also all changed, those would be harder if the patches are actually significant
I am confused. Wasn't it previously possible to create tags in the GitHub web interface?
(Other than creating releases)
Well anyhow.... as a reminder to the other maintainers, making a snapshot release r/n is manual and requires pushing a tag with the right name format (it's just release/<version>):
To github.com:neoforged/NeoForge.git
* [new tag] release/26.1.0.0-alpha.2+snapshot-1 -> release/26.1.0.0-alpha.2+snapshot-1
also i just realised there are now snapshot versions of neo for the general public to use it seems?
could you update the message of yours ive pinned with the latest version?
VF seems to be choking pretty hard on the changes done for statements-before-super
Yes, it does, coeh has been PRing fixes, I believe
We patch some of these out in NeoForm
I guess I'm just confused why it wouldn't be 26.1.x? Aren't the vanilla versions just going to be Year.Release, or have I misunderstood that?
(Basically why the extra version, when will that actually bump?)
Year.Release[.Hotfix]
Year.DropNumber.Patch and for the first relase of the drop, they omit the patch
Ahh there's a .patch they omit on the first, got it.
Yeah okay that checks out to me
Seems the most sensible approach, plus version comparisons will still work right with existing versions, luckily
So all around, could have been a lot worse
The cherry-picks didn't appear in #neoforge ๐ค
Oh you cherry-picked in the wrong order ๐
hm?
Doesn't really matter though, does it? ๐
Even if, they're different commits
Yeah it's not very relevant
I still think it's weird there's no default trailer for Git commits pointing to the source of the cherry-pick, but oh well.
They have the PR numbers in the commit description
seems like RenderStateExtensions class's onUpdateEntityRenderState method dosen't use anymore in current neoforge 21.6-snapshot version
Hm
Thank you for the bug report, that is indeed a porting bug
no problem...!
Is it expected that lambda numbers would shift between Neo 1.21.11 and Neo for 26.1 snapshot 1 if the function looks identical?
yes
javac 25
vs. javac 21
I noticed that you can't even compile with -release 8 anymore in javac25 and expect binpatches to apply. it generates different bytecode, so I'd not be surprised if it also generates lambdas differently
Right, forgot they updated the compiler in addition to not obfuscating
@paper cedar I checked the current PR build of the port to 26.1
NG can most likely load it once you update to the new NeoForm to have the fixed arguments in that config file.
We can make an updated release soon with the updated NF
That is fine by me
I will wait untill then
Alternatively I can probably just push to that branch
As it should not change anything
Other then that setup thingy
Yeah currently checking some other things in NG7
To validate and then I will push that
Should just be a bump to .3 for NF
Uuuuuh, which branch are you looking at, Orion ๐
That's the wrong one:
You want port/26.1 ๐
For some reason I clicked on the target branch
I know
I read that file twice
And still misread it
FFS
the 1.21.11_unobfuscated branch is really just there as a "reference" so we can compare 26.1 against a prior version with the same naming
@paper cedar Is it normal that the PR build did not get a new version number?
No that's a bug
Okiedokie
I noticed that too. Doesn't matter for the tagged releases, but apparently gitinfo['tag'] returned by gradleutils isn't the current tag
it's just any previous tag
Urgh yet another learning
Annotated tag crashes the release build
Lightweight tag doesn't
@fresh gyro 26.1.0.0-alpha.3+snapshot-1
Lets see
Including downloading crap on my slow ass internet
So I would call that good ๐

git fetch tag "would clobber tag yadayadayada"
where did you see that? locally?
No, obviously not. Release builds = CI/CD ๐
Deleted the tag, made a new lightweight one -> works
smh, should've linked that in the first place /j
We need to disable fetch tags for builds originating from a tag me thinks
I'm confused as to the reasoning behind https://github.com/neoforged/actions/blob/b0f0d3c1f6c6d818a253e9d2e5e7ccc0af31a1de/.github/workflows/gradle-publish.yml#L154-L160
If you're running for a tag, no point in fetching commit history
The entire thing is bodged. We set fetch-tags: true for checkout, but that doesnt actually work properly with recent git either
but we then have a separate git fetch --tags?
Hence the explicit fetch tags right below it

There's a comment on that, that was added later to fix a regression with git
IMHO that should all be ripped out
but by the time you committed to it, the bug was fixed in git, no?
Comitted to what?
err, your changes to the gradle-publish workflow last week
since if we look at the linked issue, the issue seems to be fixed in 2.49.0 according to a comment, and the action logs confirm that the current git version on the runner is 2.52.0
so we can eliminate the git fetch --tags
https://github.com/neoforged/NeoForge/actions/runs/20553517437/job/59034457454#step:2:68 seems to corroborate this
Well, as I said -> #1445764870564745228 message
All of that is redundant
fetch-tags and fetch-depth as well
Do we have any example of a Fabric version for this Snapshot already?
Or is that still far away?
Thinking about looking at their stuff to do some comparisons
So I was wondering
With my hat of to you and tech
We were very very fast
With getting a working version
yes it should
I haven't actually checked. Comparing Mixins against our Patches is mostly pointless.
Did you have anything particular in mind?
Mostly just curiosity
Just checking some of their tooling
How they handle the new unobfuscation stuff
They did publish an API as usual but they also liberally disable modules (probably not needed for 26.1)
I don't know when they swapped to MojMap but I think it's pretty easy for them (no patches, no installer)
Hmm okey
Well I will do some digging
Lets see if I can find anything interesting
But I doubt it
They did like one or two snapshots after the deobfuscation was announced iirc
during the 1.21.11 snapshot phase, yeah
we have a new loom plugin that disables remapping entirely
You mean a loom update
no, a new plugin entirely
loom was split into fabric-loom-remap and fabric-loom, both are on version 1.14
Okey that is a bit sad, as that means I need to reengineer my stuff but alright then
in many ways it's closer to neo now, you can grab a 26.1 template from our template generator or review our new porting docs
https://docs.fabricmc.net/develop/porting/next
pretty much, i'd consider fabric-loom-remap closer to MDG legacy
Yeah I guessed as much as I need to completely rebuild the setup for my multi loader system then anyway
modmuss does/did plan a loom 2.0 with bigger changes to come later
Alrighty
i think it's closer to did at this point, there's a lot more work there than originally anticipated and the current loom system works fine. we have higher priority work atm like the new javadoc system and the api renames for 26.1
idk how helpful it would be, but i'm multiloader/version for 26.1 already through stonecutter. i haven't ported neo to 26.1 yet since my last attempt at that failed
https://github.com/cassiancc/Item-Descriptions/
Will be pretty trivial, as Placitum will do all the heavy lifting
Just need to make sure that it works ๐
autoswitch was also ported with neo if you need a reference, but the changes needed are pretty trivial
But first: NG support for 26.1 ๐
Which is nice and ready to go
And a bug fix for 21.11 I think to fix my unit tests
that's what i figured, but it wasn't able to find the snapshot build at all, i should give it another look at some point
As that currently errors out it seems if there are no datagenerators
its on maven this time round
that's even weirder it didn't work then
you need new mdg, iirc
definately if you had parchment enabled
i believe i bumped it, but lemme test again
forgot to bump the java version, works now
What failed?
Oh, I think I know what's up
If it was a wall of text from gradle
You need to update your build.gradle to use Java 25
It can't find a version of NF compatible with J21
not a very visible error, but yeah it was the java 25 thing
You get that errro twice I think, one is from IntelliJ trying to resolve sources and it hides even more details
I saw that recently when I tried to set the compiler option to be release = 21
since I backport to older versions, having that would be nice
also wanted to test if that worked with markdown javadoc
In case you have that setting enabled to make it auto-download sources
this thing
tasks.withType(JavaCompile).configureEach {
options.release = 21
}
That's not really the recommended way of doing that anymore anyway
if you mean to use a toolchain, that is not what I want
Fucking hell.
I've been chasing a ghost for about 20 minutes.
"Why does this Mixin not apply, not crash, not anything?!"
Well turns out. My proguard config stripped it of all methods.
BTW. Phantoms spawning in a void world is not normal, right?
they spawn in the sky, so I think it is?
I don't think MC checks for void world
Hmmm, interesting. I never really noticed that before.
I can't rule out that I temporarily made myself non-creative in this test world. But I was certainly surprised to look up and see 10 phantoms circling while being in Creative Mode ๐
does insomnia even tick in creative?
Hard to say. But to validate this I'd need to make a new world and probably sit in it in creative hehe
it does, afaik
I keep leaving debug runs open in the background while debugging and then return to find phantoms around
I mostly test in survival peaceful, so that's interesting
@wintry flower how did you notice this one? ๐ https://github.com/neoforged/NeoForge/commit/c9ef0d0db314655715583cd953cf0c35d9fa4c2e
Could that have led to a crash like this?
java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 1025
at it.unimi.dsi.fastutil.longs.LongLinkedOpenHashSet.add(LongLinkedOpenHashSet.java:457) ~[fastutil-8.5.18.jar:?] {}
at TRANSFORMER/[email protected]/net.minecraft.server.level.ChunkMap.setChunkUnsaved(ChunkMap.java:214) ~[minecraft-client-patched-26.1.0.0-alpha.3+snapshot-1.jar:?] {neoforge:access_transformer,neoforge:access_transformer,neoforge:mixin[APP:ae2.mixins.json:chunkloading.ChunkMapMixin from mod ae2]}
at TRANSFORMER/[email protected]/net.minecraft.world.level.chunk.LevelChunk.markUnsaved(LevelChunk.java:182) ~[minecraft-client-patched-26.1.0.0-alpha.3+snapshot-1.jar:?] {}
at TRANSFORMER/[email protected]/net.minecraft.world.level.Level.blockEntityChanged(Level.java:872) ~[minecraft-client-patched-26.1.0.0-alpha.3+snapshot-1.jar:?] {neoforge:access_transformer,neoforge:access_transformer}
at TRANSFORMER/[email protected]/net.minecraft.world.level.block.entity.BlockEntity.setChanged(BlockEntity.java:222) ~[minecraft-client-patched-26.1.0.0-alpha.3+snapshot-1.jar:?] {}
at TRANSFORMER/[email protected]/net.minecraft.world.level.block.entity.BlockEntity.setChanged(BlockEntity.java:217) ~[minecraft-client-patched-26.1.0.0-alpha.3+snapshot-1.jar:?] {}
[Reference to](#neoforge-github message) #neoforge-github [โค ](#neoforge-github message)patch goof in LevelChunkSection in 26.1 due to deobf changes causes the server to shit itself every 65536 block updates
https://github.com/neoforged/NeoForge/blob/1.21.x/patches/net/minecraft/world/level/chunk/LevelChunkSection.java.patch#L8
https://github.com/neoforged/NeoForge/blob/port/26.1/patches/net/minecraft/world/level/chunk/LevelChunkSection.java.patch#L8
excellent
CC: @steady heath that might have been the cause of that unexplained modern dynamics crash you had...
Soaryn found a reproducible test case, I just did the debugging
always soaryn... /s
Sooooo no snapshot today it looks like
๐ธ is on vacation
Or frozen in ice
id say first snapshot back would be 6th
It would have been funny if they did a snapshot that is the same as the last. Like "sorry we were all on holiday so no changes in this one"
too much overhead, probably
Or 13th
oh yeah, right
I said sometime ago that maybe it might not be the first Tuesday back, since first Tuesday assumes the have work done since last snapshot which they probably don't
someone could go check the historical records to see if they did publish snapshots on the first snapshot day after New Years
they stated in 26.1-snapshot-1 it was the last release of the year
so, potentially but I'd say remote chances
hmmm
@graceful laurel turns out I am really not convinced by these commas on new lines ๐
it looks quite weird, and I'm not convinced it's of any use when porting
That's not commas on new line, comma on new line would be putting it first
its almost new years
why snapshot when you can shoot fireworks at your coworkers!
no wait, thats banned in sweden, nvm
i sure hope it is, why would you want to shoot fireworks at anyone?
into the sky sure but at other people?
Haskell formatting be like
main = defaultMain [
bgroup "fib" [ bench "10" $ whnf fib 10
, bench "35" $ whnf fib 35
, bench "37" $ whnf fib 37
]
]
thats what the style guide at work has me do
for all params
so,
void FuncNameYesPascal(
int A
, int B
)
{
// code
}
for reference sci, while that seems to be widely used it's not the only option and I don't use it
it's not terrible format
certainly nice for comments without block comments
TBF with this, it does make adding (or removing) an arg a single line diff, except for the first arg
Which, surprise surprise, is exactly the reason why I did that in some patches
it doesnt really matter if its a single line diff
the context will break the patch should that line change anyway
the way rust solves that is just allowing a trailing , 
at work, it does keep the p4 blame for a given argument line correct, which has been helpful
so just
fn foo(
a: u32,
b: u32,
c: u32,
) {
todo!()
}
```is completely valid
Perforce? 
I only know of it from the Git book
yup, perforce
its pretty common in games
it handles large binary blob assets better
things like textures
isn't that what lfs is for?
the thing lfs doesnt solve is exclusive checkout
w/ p4, checkout can be exclusive, so nobody else is modifying the same file as you
this matters for things that can't (easily) be merged (see textures)
ah, file locks 
fwiw, i have worked on games in both p4 and git (w/ LFS)
one of the other big issues with git is needing a copy of the repo locally
even if sparse, that gets very large very quickly
p4, you only need to store current revision locally
when you have 1TB+ of texture/model data, not having to keep a second copy of everything matters a lot
now dont get me wrong, for code i very much do prefer git
but its not like p4 is without its benefits too
and unified VCS is also a good thing, splitting code and data has its own drawbacks
from what I remember you can do similar stuff with git, but sure, use what works for you
look, i dont make decisions on what VCS to use
there are ways to do similar things in git, but its not as automatic
the project i worked on that used git LFS, and had huge assets, also had a custom git client to handle it all
all the p4 projects ive been on, its just the standard p4 client
the fact that p4 is just "off the shelf" matters for enterprise
Hey is anybody able to get into a world on the current 26.1 snapshot build of NeoForge?
It gets stuck at this screen
WHich makes me wonder if i have a thread hanging somewhere
My thread dump seems to be entirely normal
yes I am able to on alpha 2
ah no oops this was in neoforge so a very recent (not released yet) version
I guess you'll have to check why it's not connecting
could be a misnamed variable literally anywhere
Yeah
Well the client thinks it is rendering the world.....
Actually never mind
Level is still null
I had alpha-1 working earlier, lemme try alpha-3
yeah alpha-3 works for me
could be a linux/wayland-exclusive problem

do you have prchment?
It is 26.1 so no
can't repro the issue on my fresh setup of port/26.1 -- I can create a world and load into it fine
for avoidance of doubt, I am on Linux using Wayland
where is this
or it's a compositor issue, someone try on different wayland based ones
what I have here is packet == delimiterPacket
are you in a mod dev workspace or in a Neo dev workspace?
smh
Okey
Note: need to figure out a way to enforce it to be disabled
That that does not crash our fucking patcher
Is somehow a wonder....
Oh wait you found another of these issues, hooray!
Looks a heck of a lot like https://github.com/neoforged/JavaSourceTransformer/issues/44
Which I thought maty fixed. But I guess there's some edge case or something?
TMW the codebase has more edges than a icosahedron
ah yeah I think shartte ran into this exact bug
we already made a patch to MDG that disables parchment param renaming
Ohh wait is this on unobf versions
Ahh I think that must be it, the fix maty had probably tests for parchment/parchment name conflicts but doesn't detect parchment/existing or parchment/local name conflicts
Welp
-# I answered on instinct before I considered you may be referring to another thing 
-# you wanted to feel included, it's okay
I should probably do that too.
makes a note
What is the version format that CurseForge supports for uploading?
What are you using to upload?
CurseForgeGradle, Darkhaxes plugin
CurseForge has a weird support-level for snapshots (which is, you can manually download files for them, but the launcher does not support them at all)
26.1-snapshot is their version id for all 26.1 snapshots
Ahh
they dont differentiate between individual versions (Modrinth does)
So yeah it probably detects the mc version from my properties
Okey
I think I can fix that manually then
Yeah I set the version manually for Modern Dynamics too
Ah yeah I even set it manually
I just need to set it from a different property then
Should I design a plugin that publishes to both modrinth and curseforge?
Iโve been happy with modmussโ mod publish plugin
don't do more gradle plugins for that
The more appropriate way is ultimately GH actions
And whenever something doesnโt work Iโll PR a fix
While this fell slightly into disrepair, it's still the best option IMHO: https://github.com/Kira-NT/mc-publish
https://github.com/modmuss50/mod-publish-plugin
Okay ima switch to this
Thatโs less portable but true
You shouldn't publish from your own machine either way
The issue with gradle plugins is that you cannot retry
and since you're necessarily hitting external systems
No I just call the publish task in GH actions
if you do it in separate jobs, you will have to ship the artifacts over from job to job
which is very hard to do correctly without gradle rebuilding the jars
Iโve made more cursed GH actions stuff ;) but thatโs besides the point
Higher chance of jars being compromised
not reproducible, if you inadvertently depended on some arcane config on your machine
On my own machine?
i.e. you 5 years ago put some token in gradle.properties, forgot and your publish only works because of that ๐
-# the action runs commands on a server via ssh
Well I wont forget that lmao
I'd recommend anyone to publish via some form of CI/CD tbh
I mean if there was some way to make GH actions run when commit message contains "release" sure
Time in a bottle doesnt need a per commit release
git tags
I mean I suppose
yes, git tags
I mean I dont want it to run every commit
Yeah then use tags
Hm alr then
GH releases require tags anyways
So if you plan to publish to GH releases too youโll need tags
Then ill do that then, maybe.
For 26.1 release of TIAB
https://modmuss50.github.io/mod-publish-plugin/multi_platform/
Fuck it
Ima switch to this for damn sure
Nextra: the next docs builder
I've used unifiedpublishing plugin in the past, it works well
Neat
The tools that used to help with unobfuscation Minecraftโs code what will happen to them?
Guessing we still would be willing to merge PRs but like the priority within the team to review said PR isnโt likely to be that high
- What went wrong:
Execution failed for task ':neoforge:createChangelog'.Cannot invoke "org.eclipse.jgit.lib.AnyObjectId.hashCode()" because "id" is null
Fuck JGit
@paper cedar deleted tag? 
Well. See above.

Disabled changelog, will try again.
Alright, new version: 26.1.0.0-alpha.4+snapshot-1
its
day my dudes, what we all thinking, snapshot today or nah?
oh it is, then yeah maybe no snapshot today then
I don't expect one this week
<@&1067092163520909374> and so it begins
Oooo
New version detected: 26.1-snapshot-2.
yee
Huh. Craftable nametags?
26.1 Snapshot 2
- Primer: https://github.com/ChampionAsh5357/neoforged-github/blob/update/26.1/primers/26.1/index.md
- Article: https://www.minecraft.net/en-us/article/minecraft-26-1-snapshot-2
- Changelog: https://misode.github.io/versions/?id=26.1-snapshot-2
- Notion: https://apexmodder.notion.site/2524f070f88880648482e3cbdcba566a?v=2524f070f88880b29f60000c52785ecb&p=2e14f070f88880ec8dd7d172e6ba4e58&pm=c
- SnowMan: https://github.com/neoforged/Snowman/commit/c75852363925125bdc02842fa03e93589b9dab82
SlicedLimes Videos:
A second snapshot is here for the next drop - with cute new baby mob models. #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 comprehensive guide possible. Offi...
Pack news in Minecraft 26.1 Snapshot 2 includes a tag and some changes to entity data - along with plenty of texture renames. Here's a quick 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 u...
They seriously are making this too easy for people these days. First saddles, then name tags?
I see they're trying to entice me into playing with sound again. clever trick Mojang
Ah nice so we can check our update infra with unobf
Aaaaaaaaaaaaaand it has bugs. ๐
kitties 
nice!
just when I woke up
there's a balance between fun and easy. having to grind through mineshafts or fishing to get nametags is neither hard nor fun. it's just tedious for something people would like to use more often. Saddles are even more justifiable considering it poses a barrier to what is quite possiblly the best early game transportation, but by the time you find one in a chest, you probably don't need horses anymore, so what's the point of mounts. Craftable saddles was a good choice. ||plus i've had these recipes in a personal datapack for years now because it just made sense to me||
...huh, MC ran on 2GB by default?
yes
I thought it ran on 4GB 
oh noe! my toaster can't run MC anymore. gonna have to migrate to the fridge.
418
Oh we definitely don't support those
LOOK AT THIS OMG
TagKey<Item> METAL_NUGGETS = bind("metal_nuggets");
well that goes against our tag conventions
literally playable
do we update nuggets/iron and such to be metal_nuggets/iron now?
cc: @runic anchor
that's too cute
Discord
Chick!
how many files were added and deleted this snapshot?
ah pretty good
hell yeah
Ah, ofcourse i forgot to do what Shrimp had told me, and it thinks the snapshot is a special version 
Sadly, I only remember that shrimp told me something about that, not exactly what though.
This is real?
looks like mojang is making x,y,z fields in pos stuff private
alot of the changes are just .x -> .x()
huh
That was not a record before?
also chunk/block pos long packing methods renamed from toLong and fromLong became pack and unpack
yes look at the new snapshot. also look at this cutie
nope
awwww
Okay so it's less about making x/y private and more about them making it a record ๐
the other ones are adorable too but the rabbits and chicks are the biggest change
Now I am wondering about theme of this drop
Sure
depends on the other features they might add later
I canโt read blog so idk what is happening and Iโm at work rn
kill adult chicken -> you get chicken meat
kill baby chicken -> you get chicken nugget
Kill baby chicken?!
So what does that have to do with metal nuggets
it happens to be a change in the code ๐คทโโ๏ธ
link in pin works fine for me
they provide no explanation for it
for the nametags
added for the name tag recipe, so that it accepts any nugget
It can be viewed as nuggets/metal and Mojang just does metal_nuggets
also am i reading that right? have to obtain a nametag to unlock the nametag recipe?
So no need to redo our tag and see metal nugget as a subset of nugget
has paper, or nametag
ooooh
guess this is done to try and "force" players to explore
and find a nametag via dungeon chests and such first
doesn't matter though? unless you disable crafting locked recipes
I'm surprised they didn't include string in the recipe
yeah nugget feels weird tbh
its just paper with a string
wheres the nugget fit in
I guess they see it as a metal ring
Not having to look up timestamps for neoform versions is nice
i guess it does kinda look like a metal ring
but ive always seen it as string
inb4 26.1-snapshot-3-hotfix "nametag recipe now uses string" 
Seems too thick for string
I always saw it as metal for both the ring and tag
since animals are outdoors
do max librarians still offer them in a trade
I only ever used saddles because some mod's crafting recipe required it 
According to the wiki, yes, at 20 emeralds a piece
Could be worse
new ChunkPos(BlockPos) -> ChunkPos.containing(BlockPos)
ChunkPos#asLong() -> ChunkPos()#pack
ChunkPos#toLong() -> ChunkPos()#pack
And predictably: new ChunkPos(long) -> ChunkPos#unpack(long)
Ohno does this mean for mek additions baby mobs I will need to do something more than just have a smaller model
. At least the list doesnโt mention baby zombies yet
i demand more cute adorable baby models, so... yes get on that /s
need a baby zombie we cant kill cause he too damn adorable
Arenโt the unlockedBy when separate like that just need any of instead of all of? I think it is just to give you the recipe if you find a name tag and havenโt made any paper or nuggets
Take that up with mojang
kill the babies
heard it here first schurli hates babies
inb4 baby skeletons and creepers
Yes please, then I donโt have to maintain those in mek additions. Also endermen, and strays. (And wither skeletons
)
I have those too. I just forgot they added those and wasnโt looking at my list
Parched?
?
those are skeletons so no
Oh
ignore the tool belt, that's my addition :p
I have yet to have 1.21.11 compile
I havenโt looked at vanillaโs changes since 1.21.1 yet to add parity to
Most of it is patch context changes, only semantic change I could see is that fall-damage calculations now calculates an "effective fall distance" first, and it's not quite clear to me where that was before (it might have been done in the player subclass, tbh.)
I moved the event to below that calculation and made it use the effective distance
But yes eventually I will have the parched one as well (once I get mek compiling again and start going through the changelog to see what stuff I need to mirror)
ah
I am still many many hours from getting mek to be compilable on 1.21.11 
And then I get to adjust to transactionsโฆ.
๐
I just made it a PR so I could wait for the CI/CD checks. Didn't want to pollute the port/26.1 history with "fix up xyz" crap if I could avoid it ๐
thats fair was just suprised to see it so quick
Well I just hammered it out the snapshot was trivial in terms of porting
Okay, I tagged a version which just finished building, too: 26.1.0.0-alpha.5+snapshot-2
wooo time to update my mods
I probably use ChunkPos somewhere, but that shouldnt take long to update
nice not a single line of code changed for me, but thats not hard when your a furniture mod xD
Now: add baby furniture.
oh cat trees and shit would be real nice ngl
but alas im not the artist for my mods
and the artist has gotten busy with irl shenanigans recently
Still something you could add to your backlog!
yeah ive been slowly learning block bench
but wont be able to match what my friend did
they some how matched vanillas style while also being their own thing
I also updated the earlier pin
Have a primer: https://github.com/neoforged/.github/pull/39/commits/b9f682d6b4b85a5827df5d2d6b61d82b31ee4b53
Mostly just some entity model splitting and ChunkPos now a record
Back to resting
A second snapshot is here for the next drop - with cute new baby mob models. #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 comprehensive guide possible. Offi...
i still only see pahi-ghast when seeing the happy ghast
Because I have not seen it posted here: https://www.youtube.com/channel/UC2UyQpCGPw01q62SapQSuyw
i mean not posted since last snapshot but yeah the datapack changes are uploaded to a 2nd channel now
which confused me yesterday as i thought lime was moving the snapshot videos as a whole to a different channel
not just the pack changes
#1445764870564745228 message
#1445764870564745228 message
he's just separating the snapshot news from the technical (see: resourcepack and datapack) change news
so... what does one need to do to update to a snapshot build using NG?
Just bump the version?
You need to be on 7.1.20 though
I think they should add baby creepers
what are those like?
tbh i might be confusing them with a different mob
but i remember a mod adding baby mobs
and they had some of the most annoying effects
@round spear am i thinking of mekanism additions?
Pack news in Minecraft 26.1 Snapshot 2 includes a tag and some changes to entity data - along with plenty of texture renames. Here's a quick 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 u...
they explode less, but move super fast and explode much faster, so you have very little time to move away
the worst, by far, are baby skeletons
much harder to hit, move annoyingly fast in the way skeletons move sideways and such
and quick-fire arrows at you
damn that sounds like a lot of pain
Baby creepers in mek additions have half the explosion power of normal creeepers
(That is their only special power)
i'm pretty sure that feature was why i stopped using mek additions lol
The fact that they only blow up like 5 blocks max when a normal creeper blows up way more than that?
when's 26.1 release date
march/aprilish probably, they haven't said
previous spring drops have been late March
Ugh thats too far away๐ญ
Not me over here hoping Mojang finally kills minecraft:mob_griefing and splits it into enderman, creeper, and villager game rules...
I learned the other day that turning off that rule also stops villager breeders and other farms from working, because they stop picking up food and harvesting
Yeah, picking up items is griefing 
-# DIE, GRIEFER
So villagers starve to death ๐
oh shit, its ๐ธ day this past week zoomed by for me
"Also Play Hytale" is coming trust
Yeah, I'll hold off on that for a week to get the sentiment of ppl actually playing it ๐
the fact the fan base has to be like "trust me its coming" is the whole reason im not intrested in hytale
its had way too many rewrites/restarts and chances at this point and has lost me as any potential player
I meant the splash text
I should've quote wrapped it
I am also not buying the hype but I think itd be cute to add a splash
true
i already have a few friends who are like "yooo you should port your mods to hytale"
like jesus at least give the base game some time breath before to bombard it with mods
which is another reason why im not so intrested in it
if people are already like, "the mods gonna be crazy" the base game cant be all that good
and from what ive heard theres no client side modding capabilities? which i feel will limits mods potentials
i mean look at mc plugins vs mods, ones clearly more powerful than the other and thats cause you have client to play with
rather than being server only reskininng existing game elements, hijacking and forcing them into what you want them to do
@plucky hollow it is time
im not seeing any new version yet
[Jump to referenced message](#minecraft-updates message) in #minecraft-updates
New version detected: 26.1-snapshot-3.
hytale is built to be server modded whereas minecraft is not, the server seems to have a lot more control than minecraft's. this is a game built by people who have been server modding for years, they want it to be as good as can be
26.1 Snapshot 3
- Primer: https://github.com/ChampionAsh5357/neoforged-github/blob/update/26.1/primers/26.1/index.md
- Article: https://www.minecraft.net/en-us/article/minecraft-26-1-snapshot-3
- Changelog: https://misode.github.io/versions/?id=26.1-snapshot-3
- Notion: https://apexmodder.notion.site/2524f070f88880648482e3cbdcba566a?v=2524f070f88880b29f60000c52785ecb&p=2e74f070f88880c0a8f6f1de7e62c418&pm=c
- SnowMan: https://github.com/neoforged/Snowman/commit/267ca579ae98928beff4cbc7c3946c3516b3556b
SlicedLimes Videos:
||<@&1067092163520909374>||
The third snapshot is here for the next drop - with a new way to change game rules! Check out this quick 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...
Pack news in Minecraft 26.1 Snapshot 3 bring us a new system for World Clocks and Time Markers along with a lot of new tags - 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 unofficia...

oh interesting
So many tags
they added a time-tracking system
yay one less patch
The Tripwire texture is now rendered as alpha cutout instead of transparent
Interesting
does it just use cutout rendertype now instead of having its own special bunny rendertype
Count in smelting is huge
yes
now you can duplicate ores without mods!
@paper cedar another thing ItemResource may want to inherit?

ItemResource already extends TypedInstance and DataComponentGetter why not also this
could extend ItemInstance instead of the other two, I guess
because ItemResource doesn't have a count
wait..
oh right
did mojang add ItemResource?
oh yeah the count i missed that
it's just an immutable itemstack
its POJO for data/network
SpawnEggItem lost its BY_ID map intresting
FUCK YES
so what mods have been doing for ages can now be done natively
the first example that comes to mind is powah's uranium
Oh well, uranite as it's called iirc
#supports_vegetation which provides support to the following blocks:
what does that do to croptypes
oh fuck they added a bunch more
#supports_vegetation
#supports_crops
#supports_stem_crops
#supports_pumpkin_stem
#supports_melon_stem
#supports_sugar_cane
#supports_sugar_cane_adjacently
#supports_cactus
#supports_chorus_plant
#supports_chorus_flower
#supports_nether_sprouts
#supports_azalea
#supports_warped_fungus
#supports_crimson_fungus
#supports_mangrove_propagule
#supports_hanging_mangrove_propagule
#supports_nether_wart
#supports_warped_roots
#supports_crimson_roots
#supports_wither_rose
#supports_cocoa
#supports_lily_pad
#supports_frogspawn
#support_override_cactus_flower
#cannot_support_seagrass
#cannot_support_kelp
#dry_vegetation_may_place_on -> #supports_dry_vegetation
#bamboo_plantable_on -> #supports_bamboo
#small_dripleaf_placeable -> #supports_small_dripleaf
#big_dripleaf_placeable -> #supports_big_dripleaf
#mushroom_grow_block -> #overrides_mushroom_light_requirement
#grows_crops

related to default datacomponents for items maybe
might be necessary for data-driven items later
expanding the component system for any registry type id guess
but mostly items for now?
article link from this bot is broken btw
data driven time is such an interesting addition
yeah thats cause its using the old link format iirc
the pin has the correct link
I liked timelines now theyre taking it further
very fun
can u now make an in-game day 24 hours with a datapack?
yeah I scrolled up to it when I noticed it wasn't working just wanted to state for the bot just incase it wasn't known lol
oh nice we dont need our custom behavior for custom spawn eggs anymore
kill the bot
apex's a better bot
little do yall know ive been a bot the whole time
hey a fellow dropout fan 
oh yeah default item components seem to be coming from the registry now
Sam Reich is so cool
thats AirItem btw which used to look at the Item components for the base name
not it pulls it from the Holder not the Item
wonder how this messes with the modify default component event we have
So any registry could technically have default components now?
yep Item.components does not exist anymore
by looks of it thats where we are headed
unsure if thats how it fully works in this snapshot tho
wonder if the datamap system could piggyback off that
I... don't know actually
The thing is though that the world would have to be running 24/7 or it would get out of sync
maybe even drop datamap in favor of data component in future?
maybe
how are datacomponents even cheesed into holders though
how are they set, how mutable are they
can you only have data maps for registries?
datamaps are tied to the registry system, yeah
this is huge
I wonder if that's the first step toward json-defined data component maps
like our DataMaps but using DataComponents
what do they mean with this? loot tables can be based on time?
yes
indeed
Night only loot 
they already were, they just added a new field for which time you're checking
in the minecraft:time_check loot predicate, it says
interesting.... I wonder what they will do with that
well what is it used for?
great question for intellij
Sun crystals during day, moon crystals at night
Likely for datapackers
I assume it was made for packmakers
theyy just added it as a nice thing for datapacks
Content creators
adventure map stuffs
Outfluencers
imagine an entity that only drops certain loot during sunset or sunrise
^
"Sunflowers only drop loot when the sun is out"
That's a weather + time check tho
ooo
and idk if there's a weather predicate
WeatherCheck!
If the client is made with the idea of server-side-only mods in mind, it is possible to make server-only mods substantially more powerful than they are in MC
oh i think i see, item properties now has a delayedComponent method which tells the component initializer to include said component as default, items then use the initializer to build the default component map and pass it along to the hold holder via a static initializer list
part of the problem with MC is that some things (animated models, guis) are completely client code created/defined
in most games, thats just data, so theres no need to mod the client for those if it can load some additional data from the server
okay so holder components are immutable and generated on registration
ItemProperties -> delayedHolder -> Item() -> BuiltinRegistries.DATA_COMPONENT_INITIALIZERS
after that im unsure
seems to be that way from my quick skimming around
which is the opposite of datamaps 
Are delayed holders similar to our deferred holder in any way?
delayedComponent my bad, its just how mojang is tracking the components on the properties now
before handing them off to the registry, for holders to lookup by registry key
but yeah i feel this might kill the modify default item component event we have
did anyone even use that event?
if the client is able to load new data from the server, that opens up a lot of capabilities
Part of the idea of that event is to add components to vanilla stuff not just your own
Check WAIFU
a quick discord search for that event name suggests people are definitely using it
tbh looking at it more we might be able to andThen the intiializer to inject our event into it
similar to how the finalizer validates the components, we just andThen our event before the validator?
but i could see the event being dropped in future anyways, if components truly do go json defined
at that point just use datapack to add components to vanilla stuff
eehh
as long as datamaps can be assigned by tag and mojangcomponents can't then datamaps have a niche
we may also want to also swap ItemResource internals to use ItemStackTemplate rather than ItemStack
so its fully immutable, not backed by some mutable stack type
also ive seen a few places in vanilla code that swapped ItemStack to ItemStackTemplate so maybe ItemResource gets a toStackTemplate method too, but also not that desperately needed either
It looks like they are swapping in ItemInstance (the common interface between ItemStack and ItemStackTemplate) in some places too
oh ive seen a few places that took in ItemStackTemplate
but taking in the iface is nice too
i mean its mostly been rendering and network stuff which makes sense that should be immutable
so yeah not as needed for resources to fully support
I'll start the update
That's probably not a great idea
It's essential that conversions from/to ItemStack remain fast
We should also preserve symmetry between fluids and items
thats actually fair yeah, i was just thinking of removing any possible chance of resources being mutable
having them be backed by a immutable type would make sense
Well, is accidental mutation of resources a problem in practice?
I haven't seen it happen so far
yeah ive not seen it myself either but is possible mostly by misusing the is(Predicate<ItemStack>) method since that passes the internal stack directly
Hm. our AfterWeather rendering event is emitted before the weather-special-effects renderer is called
Is that a port mistake?
but keeping the resource->stack conversion fast i will agree is a good
sounds like a misplaced patch to me
I moved it to after
Ok due to the extensive changes to time-keeping, I think our patch to control the flow of time in levels needs a deeper look.
Oh, the introduction of ItemTemplate makes at least one patch redundant 
(In ItemParticleOption)
- this.itemStack = itemStack;
+ this.itemStack = itemStack.copy(); //Forge: Fix stack updating after the fact causing particle changes.
yeah mojang having immutable stacks gonna be nice, more they get used
Someone is going nuts on RegistryDataLoader 
patch-wise, the reformats caused by vineflower when variables are renamed is a real pain in the ass.
i.e.:
26.1-snapshot-2:
return CompletableFuture.allOf(loadCompletions).thenApplyAsync(ignored -> {
26.1-snapshot-3:
return CompletableFuture.allOf(loadCompletions)
.thenApplyAsync(
ignored -> {
Ah. ServerClockManager is probably where the time logic went.
TODOs (will edit):
- restore SleepFinishedTimeEvent
- our custom overloads for daytime customization in Level (
this.setDayTime(this.levelData.getDayTime() + advanceDaytime());) - decide what to do about
state.is(BlockTags.SUPPORTS_VEGETATION);where we previously addedinstanceof FarmBlock - decide whether to keep
state.canBeHydrated(...)in combination withfluidState.is(FluidTags.SUPPORTS_SUGAR_CANE_ADJACENTLY) - should
Item#getMaxStackSize(ItemStack)now be madeItem#getMaxStackSize(ItemInstance), since the max stack size query was moved from ItemStack to ItemInstance?
Notes:
FungusBlock -> NetherFungusBlock
FarmBlock -> FarmlandBlock
Isn't this a misapplied patch too? I think this lacks an else for the subsequent default block?
The third snapshot is here for the next drop - with a new way to change game rules! Check out this quick 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...
more reloadable registries?
we should have a formatter run on the VF output so it is more consistent
They pulled out the inner classes ("loading tasks") into top-level classes
I am not sure it wouldn't make it worse. Although, yeah. maybe ๐ค
It'd probably be a formatter that makes it very verbose, each method parameter on its own line and stuff like that....
Hmhmhmhmhmhm. Maybe we should just do that for generating, storing and applying patches
@wintry flower do you remember why we validate components in component() rather than in validateComponents? Probably because we want "nice" stack-traces ?
There's now a "delayed component" system for components that can only be created once registries exist
So that'll be a bit difficult
we'd need to andThen it to the initializer
I think that returns an entire map. I am juggling it into SingleComponentInitializer#asInitializer
That's where it calls #create on the supplier
But at that point you'll not get a stacktrace that points to the culprit, really
Mhmmm. okay but I think that's the point at which we shove that modify event into
That's certainly interesting. It's modifying a built-in registry in the Item constructor
public Item(Item.Properties properties) {
this.descriptionId = properties.effectiveDescriptionId();
DataComponentInitializers.Initializer<Item> componentInitializer = properties.finalizeInitializer(
Component.translatable(this.descriptionId), properties.effectiveModel()
);
BuiltInRegistries.DATA_COMPONENT_INITIALIZERS.add(properties.itemIdOrThrow(), componentInitializer);
Oh. Huh. That's not a real registry
it's just some weird object they stuck in BuiltInRegistries 
Also uh
I never noticed that check in the Item constructor that we patch out ๐
The one that enforces item subclasses are named [...]Item ๐
It took me a moment to realize, but the default components are now datagennable, at least at a glance
Or at least on the way to being so
I am still trying to wrap my head around that part yet
At first I thought they did this so default components can safely reference registryobjects
Ah, yeah
That and holder sets
That would make sense since they first reload the full registries, then build the components, and finally handle the rest
So which means they re-evaluate these everytime the regs change (?)
yes, seems like it
That's my understanding
return ReloadableServerRegistries.reload(contextLayers, updatedContextTags, resourceManager, backgroundExecutor)
.thenCompose(
fullRegistries -> CompletableFuture.<List<DataComponentInitializers.PendingComponents<?>>>supplyAsync(
() -> BuiltInRegistries.DATA_COMPONENT_INITIALIZERS.build(fullRegistries.lookupWithUpdatedTags()), backgroundExecutor
)
We can probably still support that event, but it'd interestingly be 1) more generic since it is not item specific, 2) would re-run everytime registries reload
Yeah, technically components can be on any registry object, provided you can get the holder reference
Oh wait it's not an event yet
Okay. Wait. I am confused.
We patch in modifyDefaultComponentsFrom but it's deprecated
When did we add that?
I wanna say 20.6 or 21?
Oh, so we deprecated that and replaced it with the event, I presume?
Well 26.1 is as good a time as any to yeet the method then
sorry, just saw this. it's more that if i could play peaceful and still have access to everything the game offers i would. So anything that adds new threats without adding some other massive value is personally not worth it.
Hm. So....
We previously replaced
state.is(Blocks.FARMLAND) with state.getBlock() instanceof net.minecraft.world.level.block.FarmBlock
But Vanilla has now replaced their checks with state.is(BlockTags.SUPPORTS_CROPS)
I suppose that will make the instanceof redundant, yes?
I hope so!
yes and no. it now behooves mods to ensure their blocks are in the correct tags since inheritence is no longer assumed.
right right
Yes, it will introduce bugs where mods forget to do so.
maybe make a dev announcement summarizing the important new tags when 26.1 finishes?
(Removing the instanceof that is)
or at least any instanceof -> tag updates
There is another place where the new tag is not 1:1 sufficient to replace our patch, IMHO and that is for fluids.
For sugarcane, we replaced the hardcoded is(WATER) check with state.canBeHydrated(level, pos, fluidState, below.relative(direction))
(it's not the first time mojang converted instanceof to a tag and it won't be the last)
probably worth making a note of every time new tags and registries are added so that modders know to update. as we approach data-driven items/blocks these kinds of features are going to become more and more common and thus easier to lose track of or fall behind.
Vanilla now does fluidState.is(FluidTags.SUPPORTS_SUGAR_CANE_ADJACENTLY)
But since our patch is actually level-sensitive, I've left it in
(There are config values to disable spawning, you don't even need to use a custom datapack
)
Rejects that can be addressed right now are addressed I think
Thoughts on ItemStackTemplate getCraftingRemainder(ItemStack itemStack)?
Vanilla now returns an immutable stack (ItemStackTemplate)
Should we generally make our itemstack-sensitive methods in Item now consume ItemInstance?
As the super-interface of both mutable and immutable ItemStacks?
i for one am in favor of using the new ifaces for super of immutable/mutable and resource/value
I am also not sure why you would mutate the given stack in a getter like that
yeah the param should rly be TypedInstance or something
to take in either mutable or immutable, prefering immutable ofc
26.1.0.0-alpha.1+snapshot-1 was found. The consumer was configured to find a library for use during compile-time, compatible with Java 21, preferably in the form of class files, preferably optimized for standard JVMs, and its dependencies declared externally but:

