#1.20.5/6 Snapshots

1 messages Ā· Page 2 of 1

elder swallow
#

73 rejects with 80% fuzziness

slow prism
#

60%

elder swallow
#

wdym by 60%?

#

default is 50%, 60% feels too low

slow prism
#

love how your PR title is reduce and the comment mentions increasing

elder swallow
#

more quality means less fuzzy

prisma locust
#

why change it here instead of in NG

elder swallow
#

🤷

#

this is way easier to test and tweak

#

only 35 rejects with 60%

#

@wooden tendon do you prefer the fuzziness to be changed in NG or neoforge? - see PR 602

#

70% gives 55 rejects

#

the thing is... a single uncaught misaligned patch is so much worse than having to apply a few trivial patches by hand

prisma locust
#

to clarify where are the rejects

#

24w05b?

elder swallow
#

1.20.4 -> 24w05a

prisma locust
#

what happens with 95% quality

#

i.e. very strict

elder swallow
#

129 rejects

prisma locust
#

that's not very many

#

what is the process of resolving a reject? apply by hand?

elder swallow
#

yeah

summer furnace
#

before fuzzy we did all of them by hand :P

elder swallow
#

IMO doing them all by hand is quite reasonable

summer furnace
#

(unless it was always fuzzy and I didn't realize)

prisma locust
#

I feel like the current fuzzy system would not have the problem you've described if we were actively updating to snapshots, but we lack manpower for that right now

elder swallow
#

it would clearly have that problem

prisma locust
#

for instance 24w05a -> 24w05b should be a perfect match for 99.9% of patches

elder swallow
#

this kind of stuff is really hard to catch

summer furnace
#

each version yes, but I would expect that cumulatively, the amount of misaligned patches should be similar?

elder swallow
#

1.20.4 code for reference

prisma locust
#

like why is that even being applied

elder swallow
elder swallow
#

and yeah that is the patch lol

prisma locust
#

this type of patch should not be applied fuzzily

elder swallow
#

easy to say when seeing the patch

prisma locust
#

there isn't much you could change around it and safely apply it

#

I feel like that isn't the case for all patches though

elder swallow
#

well, what is the probability of a patch being 1) hard to update and 2) handled correctly by the fuzzy patcher?

#

i.e. what is the actual difficult work

#

keep in mind that the patches used to be with SRG names, making applying them very hard

#

now that the patches are direct source patches it should be trivial to apply them

prisma locust
#

that's true...

slow prism
#

I have a curiosity. what if you do 1% lol

shut wraith
#

Especially given that as you've pointed out, it's all Mojmaps now

elder swallow
prisma locust
#

they're probably all misapplied lol

#

I guess actually that's really the more important data point

#

not the quantity of rejects/misapplications

slow prism
#

they're probably injected in random places

prisma locust
#

but rather the number of misapplications that would otherwise be rejected

elder swallow
#

hmmm no there's a problem with the way I am counting the rejects

shut wraith
#

Misapplied patches are unfortunately basically impossible to count except by hand

elder swallow
#

there's 1 reject file and 5 classes for which the target could not be found

#

random injections yeah...

restive raft
#

ayo, they broke the negative amplifier jump boost effect trick for disabling jumping?

foggy steeple
#

My existence is threaten!

restive raft
#

this is a travesty of justice

open kindle
#

is it time to patch that back in? /s

fallen igloo
elder swallow
#

Incremental update is a pain though

#

Cherry picking sucks IMO

kind sable
#

So did we get the big new obvious feature?

clear bane
#

hmm yes yes... they now have things working in Vulkan /j

summer furnace
#

probably prereleases next week

shut wraith
#

Just based on at what point it started failing

summer furnace
#

that sounds extremely slow

elder swallow
#

That's more or less what I did but not very scientifically

shut wraith
#

But I could be wrong for sure. It's not like there's any recomp/decomp to do at least

elder swallow
#

It's quite fast yes

summer furnace
#

honestly me neither, but I assume fuzzy patching is an order of magnitude slower than non-fuzzy, just from its nature

shut wraith
#

But the idea would be that you'd have a report of, basically, patches ordered in order of misplaced-ness when you're done, then just go down the list checking them

elder swallow
#

Checking each patch is what is annoying

shut wraith
#

And if you made it automated, you'd just run it once, get the list, then check from most to least misplaced

#

Basically, for every patch you'd have a system that'd start at 100, go down towards 50, stop when/if it matches, and record what you stopped at. Hmm. Gotta see how hard it'd be to get diffpatch to do that

slow prism
boreal flint
#

That is to say, do it the same, but come up with a hypothesis before you start and write down the results after

#

Problem solved

summer furnace
#

you also need multiple samples, to account for variability

slow prism
#

you also need to test in multiple OSs for line endings

fallen igloo
slow prism
#

ahem

rigid walrus
slow prism
#

remembers NG using system line separators

#

which it still does btw

wooden tendon
#

No

#

That was fixed a long time ago

#

We give the patcher \n now only

wooden tendon
#

That should not matter as far as I was told

#

We can trivially fix it

elder swallow
#

60% is too loose

#

65% is too loose too

#

70% causes an annoying misalign in ChatScreen, so that is too loose too

#

this kind of misapplication is quite problematic

#

will probably be caught by the compiler but harold

#

(this is 80%)

#

I think 85% is reasonable

wooden tendon
#

Okey

#

Then lets use that

#

PR it into NG7

#

And I will merge it asap

elder swallow
#

šŸ‘

frail hatch
#

So the lower bound on what covers recommended

elder swallow
#

if we get too many misapplications we can always increase it later

#

hmmm there is a record field reordering in CommonListenerCookie thinkies

frail hatch
#

I am not complaining, I am just stating covers was right it seems

elder swallow
#

wouldn't hurt to have some double checking

#

maybe 90% is safer

#

especially in the cases where we move vanilla logic to CommonHooks

restive raft
wooden tendon
#

Will be moved to NG

fallen igloo
#

NG PR to change the default

restive raft
#

shall I close, or shall I let Tech close it on his own initiative

wooden tendon
#

I added a reject

#

When ever tech has the time he can then move it himself

restive raft
#

when Tech does that, he should add the background on how the new default was chosen in the PR description (or the commit message)

elder swallow
#

I'll send a PR soon TM, giving it a bit more time to discuss the default value

#

(otherwise I'll go for 90% if nobody says anything)

wooden tendon
#

It is a single value which you tested well

#

I see no reason to fuck around with that pr

digital drum
spiral radish
#

That's just a commit comparing patch fuzzyness over the top of Kits (private NeoForge dev but with source code instead of patches for the initial port to a version, which then get's collated down into a single commit in the main repository)

solar zephyr
#

ĀÆ_(惄)_/ĀÆ

#

I have never used it, don't ask me for support. haha.
I just looked at the main method, it describes what's all needed to run it

white frigate
#

gitcraft was very easy to setup and run, idk about snowblower

digital drum
#

how do I only make it do certain versions

shut wraith
#

You tell it to using the command line args

#

For gitcraft, read the README

digital drum
reef parcel
#

that doesn't look right thinkies you would want it to compare on the --min-version=last snapshot, right?

digital drum
shut wraith
#

I do ./gradlew run --args="--create-version-branches --mappings=mojmap --min-version=1.20.4 --no-external-assets --override-repo-target=minecraft-repo" for my setup

#

(I also have some custom stuff setup locally, like generating gradle stuff in the generated repo to list dependencies, so it can be imported into IntelliJ)

digital drum
#

how long does it usually take?

shut wraith
#

Erm, depends on how many versions? A few minutes per version? Also depends on your machine

#

Mine is pretty slow to decomp compared to what some people here use

#

The log will tell you what it's doing though. First run will take longer as it downloads libraries it doesn't already have and whatnot

digital drum
shut wraith
shut wraith
#

gitk? Or GitHub, by uploading it as a private repo? But just use whatever you normally use for git stuff

summer furnace
#

I wonder if we'll get anything interesting in today's snapshot, or they are ramping down to prereleases

fallen igloo
#

I'm still hoping for brewing recipes and block properties codec

elder swallow
#

If there is a pre release remember to bump NG first

summer furnace
#

there's a strong implication a snapshot is happening?

fallen nymph
#

šŸ‘€

summer furnace
#

<@&1067092163520909374>

magic sierra
#

Added generic.gravity attribute that controls blocks/tick^2 acceleration downward
haha

plucky brook
#

thinkies another (neo)forge attribute obsolete

fallen igloo
#

Hoppers will no longer try to pick up item entities if there is a full block placed above it

magic sierra
#

yeap

summer furnace
#

nice, no more need to put composters on them

fallen igloo
plucky brook
shut wraith
#

No need for that silliness with sticking certain things above then any more

plucky brook
#

Mash a hopper minecart in the block kek

shut wraith
#

Reduced amount of data sent by the server during login by reusing parts of the vanilla datapack
Anyone know what this refers to?

#

And looks like they're still making the change in how data is cased, with a few more things being all lowercase now

plucky brook
#

Might be that they'll only send datapack stuff if it differs from the vanilla datapack or something thonk

shut wraith
#

Wacky

plucky brook
#

check the code if you want to know kek

shut wraith
#

I should update my gitcraft repo so I can poke around in it

fallen igloo
#

EVEN LESS HARDCODING FOR EFFECTS

plucky brook
#

hey, tele got his wish

fallen igloo
#

seems like only healing should be left in the hardcoded stuff (we'll see when we have the snowman commit)

fallen igloo
spiral radish
#

Hoppers will no longer try to pick up item entities if there is a full block placed above it
šŸ‘€

fallen igloo
#

(this replaces the Lifecycle in registration)

spiral radish
shut wraith
#

Cause that looks quite interesting

plucky brook
fallen igloo
#

block pos nbt is now a length 3 int array

plucky brook
fallen igloo
#

HWAT is this

summer furnace
#

class to id thonkies

#

what's it used for?

prisma locust
#

Lifecycles are dead apparently

#

or at least their usage inside MappedRegistry has changed

summer furnace
#

yep was mentioned earlier

dry stumpBOT
#

[Reference to](#1184607569629675530 message) #1184607569629675530 [āž¤ ](#1184607569629675530 message)thinkies

frail hatch
#

rip all of DFU that references lifecycles

summer furnace
#

they still exist, but more indirectly

plucky brook
#

I've yet to understand what Lifecycle is thinkies

frail hatch
#

My guess is it is related to whether to show the experimental warning screen window. Unsure if other uses

prisma locust
#

BlockStates have changed to use an Reference2ObjectArrayMap to store the property->value information

summer furnace
#

Lifecycle so far as I understand, is a way for them to be able to know if the current state of the game contains anything that isn't finalized design

#

eg, the experimental stuff in the save loading

#

but also in a more general sense, to show if the current environment is "stable", "beta", or "experimental"

#

if anything in the game is experimental, the entire game is considered experimental

prisma locust
summer furnace
#

hmm

#

but memory stops being a concern?

#

or is that besides the neighbourhood tables?

prisma locust
#

this is not the neighborhood tables no

summer furnace
#

what did they use before?

prisma locust
#

ImmutableMap

#

which I believe is a hashmap for large enough quantities of keys

summer furnace
#

what does that use inside?

reef parcel
#

Why the heck would they switch to an array map

prisma locust
#

It likely makes sense for them if they never use more than 5 props per blockstate

summer furnace
#

looks like it's a custom implementation...? this code is a mess

prisma locust
#

looks like the regular one to me

summer furnace
#

wtf is RegularImmutableMap?! the get impl uses a loop?

prisma locust
#

oh you mean guava

summer furnace
#

OH it's just a clunky implementation of a hashtable

#

with linked list buckets

digital drum
summer furnace
#

this is NOT the place to ask

#

and no I don't know, I have no clue what gitcraft is

plucky brook
#

it's just that every time I read Lifecycle I think about rust lifetimes kek

digital drum
#

Are there any breaking changes?

summer furnace
#

in this week's snapshot?

#

sure

spiral radish
#

There's almost always going to be breaking changes

summer furnace
#

but they may not affect the average modder much

spiral radish
#

It's just the extent of them

foggy steeple
elder swallow
#

Did they fix synced entity data?

frail hatch
#

What about registry order for particle types? Given torch blocks. Given iirc they fixed attributes or whatever

elder swallow
#

Another massive snapshot, too much to scroll through the whole thing

errant lion
#

oof

elder swallow
#

1.20.5 is gonna be interesting

clear bane
#

Mojang: finnaly, we can merge those Pr's
we have been staling them for years

errant lion
#

What PR

elder swallow
#

Just like Forge without Lex kek

clear bane
errant lion
#

Ah

clear bane
plucky brook
true socket
#

but none years old

frail hatch
plucky brook
#

they might

true socket
clear bane
#

I suppose that some things were a few months to years in the works
like the rendering changes in 1.17 and so on

frail hatch
#

Stream codecs maybe

clear bane
#

I mean... mob votes might have been pre determined somewhat, likely

plucky brook
vast parrot
fallen igloo
true jacinth
#

Some objects (like TorchBlock) hard-ref a particle type, but register before them

#

The order has to be updated or the usage has to be supplier-ified

#

idk what tech's referring to specifically with synced entity data though

errant lion
#

Whats a ChaseClient/Server

#

Im guessing RCON?

vast parrot
summer furnace
#

I believe that entity data values are very fragile due to them getting numeric indices based on registration order, but I don't know if that's what tech meant

true jacinth
#

There were a lot of weird mixin-application-order issues with that, yeah

errant lion
#

Nope Chase Client/Server not RCON

#

Dunno wtf it is

#

DediServer its not either

Anyone know what it is?

prisma locust
# vast parrot Well, what is wrong with those?

They are fine for you guys, but the system doesn't make it safe to declare new synced entity data on existing entities if the order isn't consistent on both sides. Something we could of course fix ourselves

slow prism
#

and maybe we should

summer furnace
#

the data value indices can't be synchronized as they exist currently because they have no uniquely identifying name that we can use as the key

slow prism
#

and by we i mean you can pr

true jacinth
#

Well now that attachments aren't so awful (and are synced) its not that necessary

#

Before that it was the only thing that was able to staple a synced data block to an entity

summer furnace
#

IMO we just should discourage modders from using those values in thirdparty objects (a modded entity implementing defineSyncedData is fine)

prisma locust
slow prism
#

lol

true jacinth
#

sigh

summer furnace
#

I'd propose having a PARALLEL API separate from the data values

true jacinth
#

bad system stabolb

summer furnace
#

similar to the vanilla synced data but by name

slow prism
summer furnace
#

not that kind of parallel stabolb

true jacinth
#

wait whytf are they only synced for items

summer furnace
#

parallel to vanilla

#

because attachments on items get shoved into the stack when serializing it for packets

#

no opt-in or opt-out

slow prism
true jacinth
#

Well make those synced, problem solvedā„¢ļø

slow prism
#

ok i'll show myself out

foggy steeple
# vast parrot Well, what is wrong with those?

It’s not safe for us modders but fine for you. If the serializers are registered by Mojang’s method, forge’s parallel loading can cause the serializers to be out of order on client and server which then causes extremely difficult to diagnose client disconnects. My mod and Ars Nouveau has this issue for so long and took an entire week of big brain modders to figure that one out on what mods are involved and what is happening. Moved to forge’s own registry for entity data serializers which solves that issue

The other issue is people trying to inject add Synced Data Accessor into vanilla entities which then explodes when the synced data accessors fields aren’t classloaded in same order on client as server

errant lion
#

Found out what ChaseClient/Server is

#

its a system where you have a /lead and /follow and basically allows someone to be in the same spot as you but in different game/world

plucky brook
#

that sounds interesting, but I wonder what's it used for

errant lion
#

Honestly dunno

#

Be crazy if they made it sync up player actions, if it did that then I could see it being more useful

foggy steeple
#

Multiworld gametests (spitballing)

errant lion
#

Found this in latest snapshot

#

Dunno what its for

plucky brook
#

Find Usages?

summer furnace
#

is that the first sign of a future datapack items refactor?

crimson blaze
#

That Items class was added a 1.20.3 (When the block codec stuff was first added) and the lead & follow stuff was added when they where redoing world gen

boreal flint
reef parcel
#

I thought we only got the Blocks references back then thinkies we got both Blocks and Items?

errant lion
#

I wonder what Mojang has in store for us 🤨

boreal flint
#

java21 yet

reef parcel
#

Pretty please

boreal flint
#

mojang pls

spiral radish
summer furnace
#

java21 would be nice, but I wonder what the cost is of updating java, like does it mean a certain group of people stop being able to play minecraft?

quiet condor
#

what PC's can't run 21?

summer furnace
#

no idea, that was my question :P

boreal flint
#

chaseclient/chaseserver is not new

summer furnace
#

like, I was just watching a video last night about how a recent VSCode update made people panic, because some people were using VSCode Server as the only way to interact with servers, and those servers used an old version of glibc, and vscode uses a newer glibc now

#

so you never know how a small update fucks people

spiral radish
quiet condor
last badger
slow prism
#

tfw ROAM

last badger
#

That's great news for me/FC!

#

(ImmutableMap isn't meant to be extended, and even a heavily trimmed version is still a pretty big object at that scale. With Map that's no longer a problem)

gentle rampart
kind sable
#

Hoppers will no longer try to pick up item entities if there is a full block placed above it
šŸ‘€

quiet condor
#

I think that breaks a bunch of farms

red beacon
#

they couldn't pick up items like that anyway, they just tried

#

AFAIK

#

you use hopper minecarts to pick up items above the block above

quiet condor
#

oh then it just improves performance?

plucky brook
#

I assume so

#

it sounds like a if (blockAbove.isSolid()) return;, but one would have to check the code

red beacon
#

In theory at least, I guess we'll have to wait and see any potential issues that might arise

summer furnace
#

basically up until this snapshot

#

to avoid hopper lag you had to put some inventory on top

#

originally was dispensers or droppers

#

then it became composters

#

because they are cheaper to make

#

the presence of the inventory disabled the AABB entity check

#

with this snapshot, it seems like a solid block also disables it

#

hopefully only a full shape block only

#

and it doesn't break all the farms that rely on having soul sand or such

#

which are not quite full size

rigid walrus
#

hoppers check blockstate.isCollisionShapeFullBlock

#

Hopper minecarts seem to also have the new check

boreal flint
#

yeah... it'd probably be too costly to do anything other than that

#

since you'd have to do additional math on the sizing and stuff

#

or some arbitrary rule like occlusion culling or something

fallen igloo
foggy steeple
#

Did you know that hoppers now wont check if solid block above?

turbid flume
#

can someone with the decompiled source look and see if they're doing anything new or clever for the wind charge rocket jump fall damage calculation? I do a fair amount of fall damage cancellation/manipulation

rigid walrus
#

They have a new field named ignoreFallDamageAboveY that is type Double in Player where if the player takes fall damage while the field is set to a value that isn't null the fall damage is instead based on the value of the field

shut wraith
#

That's... a way to do that I suppose. I guess not that strange

reef parcel
#

OptionalDouble cries itself to sleep

shut wraith
#

I mean yeah, that's what I'd do assuming it exists

#

But... I guess they didn't

reef parcel
#

yep, avoids null and boxing/unboxing

shut wraith
reef parcel
#

java util has double, long, and int types

shut wraith
#

It's just in the creation of the optional object instead of the creation of the Double object

#

But allocation/whatever wise it's going to be equivalent to boxing. The lack of null is the real nice bit imo

reef parcel
#

i mean, it's a creation of an object, but no gross castchecks if you're doing double myDouble = this.doubleObj;

shut wraith
#

But I totally agree, that would be more sensible for this use case

reef parcel
#

anything's better than using a nullable primitive wrapper obj :p

rigid walrus
#

they store it as a Double but when reading it gets the value as a float

shut wraith
#

Okay that is cursed

#

...KnownPack looks fun though. Looks like packs are now namespaced, finally!

#

Lemme know if you want my feedback on any of the changes that'll have to happen to my system for mod packs when you port it. Shouldn't be too bad luckily

#

But the switch from a string ID to PackLocationInfo lets you express versioning stuff in the pack, which is pretty cool... but probably doesn't quite play nice with mods that have a string for a version

#

I'll have to think about it mod built-in packs can make use of that at all

#

But if they could it could drastically decrease what has to be synced, in theory

#

Packs also declare how they get positioned a bit smarter

#

But instead of an ID, packs now have a PackLocationInfo that holds:

  • an ID
  • a title
  • the source for the pack
  • optionally, info for finding a known pack - which takes an ID again alongside a namespace, and a string version
#

So actually I'm wrong, we could make mod data/resource packs use that and avoid syncing unnecessarily

#

Cause the mod version can actually be stored there

#

We'd just use something like neoforge:modid:modversion for th KnownPack

#

Gotta think about what you could do with this system more. I can already think of all sorts of stuff I want to add to DynAssetGen

#

Unrelated to that system - WTF is ClassTreeIdRegistry

#

Just, counts the use of a class... ah, something in synched entity data. I still don't quite get it to be honest, but alright

#

Yep, okay, first thing I plan to focus on with 1.20.5 is getting the mod data packs using this system - avoiding syncing stuff unnecessarily with this would be amazing

#

And if I'm reading it right might just be as simple as providing something for that Optional<KnownPack>

rigid walrus
kind sable
#

Hoppers will no longer try to pick up item entities if there is a full block placed above it
šŸ‘€

boreal flint
#

hey guys did you know that hoppers won't try to pick up items anymore if there's a full block above em

slow prism
#

hey guys did you know that I can ban you all /s /jk

boreal flint
#

can't ban me if I have a full block above me

rigid walrus
#

The new check for hoppers does also affect hopper minecarts

kind sable
#

wait... that might not be intentional... many farm rely on the cart being under the block and picking up items from above

restive raft
#

and the "Very Important" priority

shut wraith
#

Okay poked the KnownPack stuff today with fresh eyes and it still seems cool, so that's a good sign. Gotta think how to abuse this in DynAssetGen... and I'm now very curious how they keep going with this

plucky brook
#

what's the short version of what that system is?

#

or seems to be

turbid flume
#

Thanks for looking into the wind charge code for me. ignoreFallDamageAboveY isn’t as extensible as I would hope, but probably would be useful for making some of what I do feel more natural. Right now I do a lot of cancelling fall damage entirely

shut wraith
# plucky brook _or seems to be_

Basically: data packs can optionally have a namespace, ID, and version attached. When syncing datapack registry entries, if the datapack entry came from a datapack that the client has (that datapack has one of those ID/versions and it matches), it'll use the one from the client instead of syncing

#

Now, currently that's just applied to the built in datapacks because only those have a version

plucky brook
#

ok, so I was right, but not fully thinkies

shut wraith
#

But it could easily be added to mod datapacks too

plucky brook
#

I'll also have to use that for my mod

stiff galleon
shut wraith
#

Which.... yeah I can imagine that'll be a good thing when blocks get datapacked

stiff galleon
#

okay, so datapacks can be loaded clientside now... can we abuse that for fallback tags?

shut wraith
#

But it's also all optional so stuff from datapacks, or stuff that overrides the vanilla biomes, will still get synced fully

shut wraith
plucky brook
boreal flint
#

that seems like a fairly substantial performance improvement

shut wraith
#

In non-modded, the only packs this'll do anything for are the built in ones - normal resources, and presumably experimental stuff too if a server has that though I haven't checked

boreal flint
#

lame =/

#

that has potential

shut wraith
#

It doesn't cache anything, it just reuses local stuff if it's from the same datapack

shut wraith
# boreal flint lame =/

But in a modded environment, neo could definitely (pretty easily) make it work with mod datapacks too

#

Since those also can easily have an ID and version

shut wraith
#

And in vanilla that's the only difference you'll see currently

true socket
#

mind you, they aren't devs, but they also probably wouldn't reference it if it was wrong

magic sierra
#

here

magic sierra
elder swallow
#

what are they doing to their item transfer API

#

ahah ok that is actually a cursed bug report

summer furnace
#

I assume it's related to the change they made for full blocks?

fallen igloo
#

yes

edgy arrow
#

Oh course, because those drop as an item, right?

elder swallow
#

yep, item entity

restive raft
#

prime candidate for a game test

kind sable
#

I do wish they would publis the tests they have internally

fallen igloo
#

yea so we can verify that we don't break stuff

edgy arrow
#

i wonder how many tests paper / something that cares less about 1-1 compat breaks

clear bane
elder swallow
#

they publish the framework but not the actual tests

clear bane
#

Hmmmm
Then maybe on bedrock?

frail hatch
#

I wonder if they would be willing to setup some sort of endpoint for mod loaders to basically run tests against without having to expose the implementation, just to see what fails (even though I guess that wouldn’t be that helpful without knowing what the failed tests are meant to do)

elder swallow
#

so we upload our own custom version of mc to their servers, they run it, and we get the result back???

frail hatch
#

Something, or they somehow send an encrypted set of instructions that can be ran

#

I don’t know

#

Was just thinking out loud

prisma locust
#

they might publish the real tests down the road

frail hatch
#

I was sort of just thinking how azure and some web based things do tests

#

Has anyone actually asked if they would be willing to do so, like to not have it that users have to download I understand, but as a separate jar/library it would be quite useful

errant lion
#

data driven tests harold

shut wraith
#

I have those for one of my mods

errant lion
#

nice

shut wraith
#

Best yet, the data comes in the form of an image

errant lion
#

what does the image look like

errant lion
#

huh

#

what does the test do exactly?

shut wraith
#

Tests what specific slices of the biome space look like after biomes have been injected into them

errant lion
#

neat

shut wraith
#

The JSON defines where the slice is, the png defines what it should look like

errant lion
#

hm

restive raft
#

do you also have the created PNG saved for manual comparison, when the test fails?

shut wraith
clear bane
#

So what will be today's world blue yonder they put in the snapshot

digital drum
naive hound
#

usually one a week, so it's expected

digital drum
naive hound
#

I thought it was Tuesdays, but that may have changed

white frigate
#

usual day is wednesday afaik

fallen igloo
#

i was tuesday at some point but now it is wednesday at ~ 16:00 GMT

clear bane
#

back in the day, we also had fridays

quiet condor
#

those were secret Fridays, no?

clear bane
spiral radish
#

They seem to flick between Wednesdays and Thursdays, depending on whether their ready or not

clear bane
#

I have seen mondays as well
just for snapshots
now it seems to be pre releases on monday though

spiral radish
#

PreRelease/RCs do tend to be Mondays

digital drum
#

if nones here to show the diffs, someone just ping me here, I'm so free you wouldn't believe it

clear bane
#

people will use Snowman for that harold

digital drum
clear bane
#

2 things

  1. pings
  2. no idea
digital drum
#

srry

spiral radish
#

Snowman is the automated (private) repo, Snowblower is the tool

#

We have a TeamCity setup which automates it

digital drum
#

got it, can I use it on my local computer

fallen igloo
#

yes but if you have gitcraft already that is not really needed

#

it's an alternative

digital drum
fallen igloo
#

if no one wrote one in the last few weeks then probably just the main class code

clear bane
#

or just read the script that automates it harold

#

(I guess)

white frigate
#

back when did they more jokey/secretive changelogs

digital drum
#

today it's going to be 24w06b right?

quiet condor
#

iirc it's week 7 so it'll be 24w07a

#

it's based on week number and year

summer furnace
#

year 24, week 07, release "a"

digital drum
#

got it

quiet condor
#

yeah that

digital drum
summer furnace
#

Im a discord moderator there yes, but I don't see myself as a maintainer for Parchment

digital drum
#

ok

elder swallow
#

Raise the alarm

digital drum
#

time to build

restive raft
#

<@&1067092163520909374>

elder swallow
#

A new variant of Skeletons that shoot poisonous arrows

slow prism
#

<@&1067092163520909374>

restive raft
#

wee woo wee woo

prisma locust
#

interesting solution to the hopper problem

restive raft
#

thinkies block tag

shut wraith
#

Panda sneeze loot table? Funky

spiral radish
#

concern

ERROR: Class net/minecraft/core/RegistrySetBuilder couldn't be processed.
java.lang.NullPointerException: Cannot invoke "org.jetbrains.java.decompiler.struct.gen.VarType.getArrayDim()" because "varType" is null
...
ERROR: Don't know how to handle non independent org.jetbrains.java.decompiler.modules.decompiler.exps.InvocationExprent

fallen igloo
#

ha I knew it

spiral radish
restive raft
#

i'm sure coeh will report it to VF once he's awake

fallen igloo
restive raft
#

also, I'm starting to be tempted by poking Snowblower to add a command-line option (in some form) to ignore assets

spiral radish
#

dew it

#

Or at least something to skip the .nbt

digital drum
fallen igloo
restive raft
#

how to do it best is a question, hmmm

#

perhaps an exclusion filter

#

--exclude assets/?

digital drum
#

LIGHT THEME ALERT

spiral radish
digital drum
#

HolderLookup.Delegate is an interface now

restive raft
#

someone compile a bulleted list of things to exclude -- paths (and/or maybe extensions)

digital drum
spiral radish
digital drum
#

what's a BOGGED

restive raft
#

i think I'm also going to stab the TC config for snowman

spiral radish
elder swallow
#

The new mob

restive raft
#

because I hate this "Failed to load build settings from VCS"

summer furnace
#

nice, new mob

elder swallow
digital drum
#

sorry for that btw

spiral radish
#

Large flashes of white on my screen suddenly, also the fact that that's quite a bit of code posted in screenshot form

#

If it's relevant than sure

restive raft
#

no flashbangs in the chat stabolb

digital drum
#

Bogged is a new monster, seems to be a new skeleton that shoots poison arrows?

summer furnace
#

yep that's what the release notes say :P

digital drum
#

BlockPathTypes -> PathType

elder swallow
#

Wait what happened to RegistrySetBuilder

#

Was it really deleted??

restive raft
#

so I can link to it

digital drum
elder swallow
#

Looks like snowblower failed to decompile it

digital drum
#

still there

spiral radish
restive raft
#

šŸ‘ i'm going to give the folks at VF a heads up, while coeh's not yet here to investigate it

digital drum
#

new field in GameTest

restive raft
#

@rigid walrus FYI

stiff galleon
#

MC-267732 - /place jigsaw still caps max depth at 7
šŸ‘€

elder swallow
#

coeh: Decompilation error in RegistrySetBuilder, see above

digital drum
#

the teleport command seems to have changed considerably

#

LookAt is a functional interface

#

and a record which holds the teleport position?

spiral radish
#

Interesting isGridAligned added to Hoppers for bypassing the full block check as well as the new tag, the MinecartHopper sets this to false

kind sable
#

Panda based slime farm??

#

ohh the new kinds of animal cruelty we can do with this

#

tho it is 1/700 chance for each sneez and you have to get only sneezing pandas...

royal stone
#

Those have always been a thing, just too slow to be practical

reef parcel
#

They dropped slime before, it just wasn't a loot table

kind sable
#

booooo ruining my fun yall

royal stone
#

Unless you're doing a peaceful only run, then they are the only option

reef parcel
#

No fun allowed :p

kind sable
#

Also I feeeeel like Boged now spawn even if the experimental stuff is disabled...

#

encaseStructure is interesting

foggy steeple
#

You can have perpetually sneezing pandas of any type

prisma locust
#

šŸ˜›

quiet condor
#

so seeing the past snapshots, a bunch of combat changes, which is awesome

#

pls mojang update combat

#

gegy please

misty crow
fallen igloo
#

nope it uses barrier blocks

cloud raven
#

gestures at the general concept of modding

misty crow
shut wraith
frail hatch
misty crow
#

It would have to be an additional parameter to the gametest annotation in addition to that since the method is invoked automatically when the flag is set on the annotation

frail hatch
#

Ah

plucky brook
lean anchor
#

I just want 'em to finally fix BlockPos#betweenClosedStream(AABB)

shut wraith
open kindle
#

aw hell nah, they added the jungle skeletons from MCD to base MC

shut wraith
#

Huh

#

Gotta use that for my gitcraft setup then

plucky brook
#

Ends up like this

#

No clue if other git repo viewers support that, I just know GitHub does

restive raft
# plucky brook Can't you just mark the asset files as generated via `.gitattributes`, which wou...
GitHub

This attribute tells GitHub to hide those files by default when
viewing the commit diff. Hopefully this reduces the strain when trying
to view a Snowblower-created commit on GitHub.

https://docs.g...

plucky brook
#

Whelp, I got sniped kek

restive raft
#

BEGONE Consumer<String> logger

#

I say, BEGONE

plucky brook
#

Oh, you don't need the =true?

restive raft
#

implied

#

the syntax exists because =false

plucky brook
#

I see, I only ever checked the GitHub docs, and those do use =true while the linguist docs don't

rigid walrus
restive raft
#

it's been suggested to me that it might be that Snowblower is using an outdated VF

#

i'll have to poke that

rigid walrus
#

I think it's still using forgeflower

restive raft
#

I screm if so

restive raft
#

someone give me the name of an MC class that I can look at which has very long lines (that are linewrapped by VF)

#

ah, PlayProtocols I think is a good candidate

#

er. GameProtocols

restive raft
#

@frail hatch @misty crow @fallen igloo @spiral radish what are we excluding from Snowman? .nbt and .png?

#

or any particular directories?

slow prism
#

snbt*

restive raft
#

so **.png and **.snbt
anything else?

#

stabolb they're .nbt

shut wraith
#

There's both

#

Well, no clue about snowman

#

Does it run the debug datagen to generate snbt files?

restive raft
#

it doesn't run anything

#

it only decompiles

restive raft
#

okay, I've pushed out the Snowblower update

#

i'll be regenning Snowman again

#

i'll rename the current dev branch to dev-pre-2.0.14, for the sake of keeping Ater's links intact until we decide to yeet it

rigid walrus
#

gametests now have an option for skyAcccess

#

gametest areas are now enclosed in barrier blocks (excluding the roof if skyAccess is enabled)

#

The polished andesite has been changed to bedrock

restive raft
#

it's generating now

#

but from the start kekw

#

i'll keep an eye on it while I can

restive raft
#

forgot about that

#

oh well.

#

oh yeah, ought to mention it before I forget

#

I also paused the other build config for the Releases, so we aren't hammering the server with two decompilations in parallel kek

rigid walrus
#

the Hopper interface has a new method named isGridAligned

#

hoppers will check for a solid block if isGridAligned returns true

summer furnace
#

I assume they did that so minecarts can pull through solid blocks

rigid walrus
#

BlockPathTypes has been renamed to PathType

restive raft
#

looks at Snowman shit.

#

should I care enough to poke the indentation to 4 spaces

#

also, yay now GH is more speedy looking at the commit

#

FYI, seems there's a bit of trouble with the naming of lambda parameters in the Snowman repo

maiden prairie
#

is snowman still on FF and not VF thinkies

restive raft
#

I moved it to VF

#

I might be missing a command-line option

#

I'll have to check with NeoForm

#

also, welcome back Shrimp thinkies

maiden prairie
#

oh I'm only here in passing

#

college is a bitch after all ^.^

restive raft
#

amen kekw

maiden prairie
#

and 2 jobs

#

@.@

restive raft
#

šŸ‘€

maiden prairie
restive raft
#

I didn't need to remove any, surprisingly enough

#

just a quick substitution of the dep (and the corresponding string in the Tools class) seemed to work all fine

#

though I'm still in the middle of understanding Snowblower's layout, and perhaps making some things more simpler if possible

prisma locust
#

hello shrimp šŸ‘‹

maiden prairie
#

hi

#

I was scrolling twitter and saw discussion of a new mob and I was like "oh, it's snapshot day"

restive raft
#

and seeing if we can make the configuration better

maiden prairie
#

the config is very shit

#

I can agree on that point even when forgetting the entirety of how I (mostly) designed it

restive raft
#

yea, I was starting to see that yesterday while poking the code

#

but I'm sure nothing that a few refactors and redesigns can't handle kek

rigid walrus
restive raft
#

i'll have to remember that when I next poke at Snowblower

#

the decompiler args are hardcoded, iirc

maiden prairie
#

correct

white frigate
restive raft
#

I think there's some automatic quoting going on

#

err, actually it might be because it's executed not through a shell, so the command-line args are passed pretty much directly

summer furnace
#

probably ends up as "-ind= "

restive raft
#

yea

white frigate
#

has to be lol

wild pine
foggy steeple
#

Someone deleted the minecraft GitHub repo

naive hound
#

junior dev: "Hey! i found out you can silence a lot of git issues by just adding --force to your command! "

plucky brook
#

branch protection rules squirrelhat

naive hound
#

Sounds like a workplace that doesn't trust their employees. smh. /s

fallen igloo
#

@elder swallow The work meeting is still going I can probably start at ~17:30 CET

#

@slow prism

#

what happened here?

misty crow
#

It tries to find an artifact with the snapshot version twice in its name: neoform-24w07a-24w07a-20240214.192032. The actual artifact only contains it once

fallen igloo
#

does the issue come from NG or the action

slow prism
#

neither, it comes from your inputs

#

you only give it the timestamp of the version

#

i'll run it again

fallen igloo
#

tech started the workflow not me

slow prism
#

well then tech gets a stabby

fallen igloo
#

stabolb tech

fallen igloo
#

118 reject files

restive raft
#

movement on Kits šŸ‘€

elder swallow
#

yes it's my bad

fallen igloo
#

I'm gonna join voice in ~20-30 minutes and start with the porting

elder swallow
#

šŸ‘

#

I'll have to leave in an hour, so gonna start with the simple rejects now

misty crow
elder swallow
#

joining vc now

prisma locust
#

curious why now is a good time to port?

#

we dont have a prerelease yet

fallen igloo
#

who is gonna take the role for porting lead for this one (I'd do it if nobody else wants)

prisma locust
#

not saying don't or anything, I'm just genuinely curious

elder swallow
#

it's a bit early to decide anyway, depends on people's availabilities close to the releae

restive raft
#

having someone coordinate efforts is a good thing, I think

slow prism
#

no please no more porting leads/dictators, ||i still hate the first version of that||

restive raft
#

having someone who can give an estimation of the work remaining

#

a coordinator of sorts

#

usually the person who's invested the most time in porting, or have regularly been porting

#

unless every porter is equaly capable of that role, we should have someone to at least be acknowledged as being "the most likely to be that"

slow prism
#

it's a matter of seeing how many rejects are left in the dir and how many compile errors there are

#

and you can't predict who's going to port "the most" in the first minutes

restive raft
#

it's a volunteer role -- someone says "hey, i'll coordinate porting" and unless anyone objects, they have it

#

and it's mostly informal

#

and checking the amount of compile errors does need access to Kits and cloning it locally to check

#

i'd think their main thing would just be keeping this channel up to date on the state of porting

#

as other porters come and go, and might not remember to poke here with what they've done

elder swallow
#

in practice it can be a porting dictator

#

which is what I do not want

restive raft
#

only if we give them that much power

#

maintainers giveth, maintainers taketh away

slow prism
#

the role of subproject leader has given people the dictator power and still is

restive raft
#

it's not an on-high appointment that vests them with any sort of dictatorial power

#

it's essentially the phrase "a private in action outranks a lieutenant at rest"

#

comparing the role I have in mind to subproject leaders is a bit apples-to-oranges

foggy steeple
restive raft
#

I have no intention of making a "porting coordinator" role be a subproject lead (or at least, at the moment)

slow prism
#

fixing rejects and compile errors is not really a "linear" thing

restive raft
#

besides, the reason why subproject leaders effectively are dictators, despite our governance model specifically not allowing that, is more because we don't have any defined and practiced ways to hold their decisions accountable

slow prism
#

or don't want to

restive raft
#

that is a topic of discussion for governance, which is an area I've bowed out as I've previously indicated

#

so direct any concerns to Curle if you think the governance model is insufficient, as she wrote the thing

#

(and is also out of scope for this thread)

elder swallow
#

not a fan of code ownership myself

elder swallow
#

(big stuff please on the org project)

fallen igloo
#

down to 93 reject files

misty crow
#

*81

slow prism
#

schurli can't count

fallen igloo
#

schurli didn't pull since xfact pushed

slow prism
#

schurli deserves a stab pat

misty crow
#

@elder swallow you want to get into VC again? I'm also dabbling around with the networking rejects right now

slow prism
#

don't do a 1am vc

misty crow
#

Why not? stabolb

elder swallow
#

happy to join vc in ~30 min

misty crow
#

šŸ‘

slow prism
#

although for the 2 of you it's barely past 12

#

but you get the point

#

Stabby get some sleep

open kindle
#

will be joining as well for emotional supportā„¢ļø

elder swallow
#

@frail hatch new itemstack method that makes me remove all your copy attachments patches šŸ˜„

frail hatch
#

how useful

fallen igloo
#

50 reject files left

#

gonna start in a few

fallen igloo
#

do we still need the patched in Ingredient#fromJson now that everything is codecs?

elder swallow
#

probably not

#

wanna join vc?

fallen igloo
#

yea

#

@slow prism have fun re-doing the game event frequency datamap stuff

slow prism
#

it's a dp reg now?

#

it isn't

#

so that method shouldn't be a problem

#

gotta setup a workspace

fallen igloo
#

it is now ResourceKey based

slow prism
#

use is now useItemOn and returns a ItemInteractionResult

slow prism
#

@true jacinth pls fix finalizespawn

#

kthx

restive raft
#

gogogo

slow prism
#

ok so

#

NBTUtils#writeBlockPos now writes blocks with an int array with 3 ints

#

do we want to keep using that method in forced chunks and break old saves

restive raft
#

make a datafixer kekw

slow prism
#

no

#

i'll just keep our old behaviour

fallen igloo
#

make the old as a fallback for reading

slow prism
#

93 errors left

#

most are networking

#

no

#

that patch is going away

fallen igloo
#

yay one supplier patch less

slow prism
#

81

misty crow
slow prism
#

tech started fixing networking

#

hmm

#

ig it's time to change overlays

fallen igloo
#

oh good maty is doing overlays

slow prism
#

ew we need so many ats

fallen igloo
#

wildcard my friend, wildcard

slow prism
#

extendedgui is screm

misty crow
# slow prism ig it's time to change overlays

Honestly, comment out ExtendedGui entirely for now so we get something compiling and then we can fix that afterwards, it'll take a bit of finesse to fix that properly. Though, in the end we may be able to yeet ExtendedGui entirely

slow prism
#

wait where did screenHeight and screenWidth go

slow prism
#

hmm we probably need a chattype for system

#

let's see what we're left with after commenting out extendedgui

#

100 errors

#

i went up

#

whoops

#

that's probably the overlays tho

#

also who volunteers to make a porting guide

#

neighborChanged -> handleNeighborChanged

#

Screen#screenWidth and Screen#screenHeight are now guigraphics methods

#

also removed fluidstack methods in FBB and added a streamcodec

#

60

#

BlockEntityRenderBoundsDebugRenderer is losing me

#

yeah besides that the only things left are networking errors

#

(and obv fixing overlays)

#

and since i'm bored i'm really tempted to look into overlays harold

elder swallow
#

@misty crow I also started working on networkign locally

#

I wasn't sure what you had done thinkies

misty crow
slow prism
#

mhh yes

summer furnace
summer furnace
#

mojang has been wanting to move away from blockpos-as-long for a long time

slow prism
#

i should clarily that writeBlockPos used to write {X, Y, Z}

#

not long

summer furnace
#

ah

#

šŸ¤·ā€ā™‚ļø then

slow prism
#

oh god, LayeredDraw is so inextensible

elder swallow
#

it is fine to extend

#

we just need to add a parameter to the .add method that identifies the lambda

slow prism
#

oh also RegisterGuiOverlaysEvent ordering was based on current registered overlays so if you wanted to regsiter before another mod's overlay you had to make sure that your listener fires after

#

qualityā„¢ļø

slow prism
#

i'm just trying to think of a design that makes sense

#

as in whether to expose the LayeredDraw and then make it handle sorting

#

also

#

another problem

#

this method

#

does making the layereddraw have an id make sense or should that method specify an id

summer furnace
slow prism
#

if the overlay you're depending on isn't registered yet that's -1

#

it needs topsort

summer furnace
#

that was supposed to be processed after all mods have had a chance to register....

slow prism
#

although topsort is probably overkill

summer furnace
#

I feel like something has been lost since my initial impl :p

#

granted, I don't know when it was lost

misty crow
slow prism
#

should i subclass layereddraw or add to it

elder swallow
#

I'd say add to it

plucky brook
slow prism
#

hmmmmmmmm

#

hmmmm

#

RenderGuiOverlayEvent is also a problem thinkies

#

this needs a hefty amount of patches

shut wraith
#

I can poke the new resource pack features as soon as it's all released and PR something to use those for mods if you all would like

slow prism
#

ugh add(LayeredDraw) is a problem

#

this is very annoying

#

we'd need to fire an event with 3 layereddraw instances

prisma locust
slow prism
#

opinions?

#

discord

prisma locust
#

did you just yeet an OnlyIn off Layer?

slow prism
#

harold didn't notice that

#

i can't say i love it

#

but it would get the job done

#

@elder swallow thoughts? ha

elder swallow
#

IMO add without ID should be illegal

#

but idk what exactly you are doing

#

I think you should just preserve the event-based registration

slow prism
elder swallow
#

ah hmmm

#

then maybe we extend it yeah tiny_potato

slow prism
#

an event-based registration would also mean that we need to massively patch the vanilla add layer calls

#

which has never lead to issues

#

since the layereddraws are recreated every time

#

I don't like any solution tbh

misty crow
#

What do you mean it's recreated every time? The Gui gets instantiated exactly once

slow prism
#

well I meant it's recreated when a gui is

#

what I wanted to do was to fire an event with the 3 layereddraws in the ctor

#

mojang finally makes something sane in their code and manages to screw us. classic

#

i mean whatever we do it's likely going to be cleaner than the old way of replacing the gui

#

but still ugly

misty crow
slow prism
#

Stabby that's still not what i meant smh

#

it's not a "static" thing anymore

fallen igloo
#

it's even final in Minecraft

elder swallow
frail hatch
#

Generics!

foggy steeple
#

Java generics were a mistake….

shut wraith
#

Unfortunately, I've seen worse. I've seen generics so bad that IntelliJ thinks they're fine when they're not

#

Never fun to deal with generics pain

frail hatch
#

Yeah, I’ve written generics like that before as well, as well once wrote generics that both IntelliJ and Javac thought were fine but the code that Javac produced crashed on execution because it was really really not okay or something (I forget the specifics)

median wasp
#

I've caused exceptions in LambdaMetaFactory with code that Javac compiled fine

#

Though ECJ was smarter and knew it was an error

frail hatch
#

Yeah this wasn’t even lambda meta factory, just generics with & in them. That produced an error type I had never seen before and on googling stack overflow said it was a javac bug that it even compiles

fallen igloo
frail hatch
#

ECJ is a bit stringent on generics as well that some things valid in IntelliJ and javac it doesn’t allow

median wasp
#

For my one, all you need to do is create a lambda with multiple interfaces (a normal thing you can do), but then add a SAM abstract class (not interface) as well

median wasp
#

Javac doesn't care that it's an abstract class because it's still SAM. But LMF on the other hand actually checks that all supertypes are in fact interfaces

median wasp
frail hatch
#

I have that suppressed or redundant diamond expressions in quite a few places in mek

shut wraith
#

Most places IntelliJ gives you it it's actually redundant. Just not here

frail hatch
#

I know

#

I only have it in places where javac fails to compile after IntelliJ said it is fine

shut wraith
#

IntelliJ just doesn't like how cursed my type parameters get there

median wasp
#

I've had a place where IJ gave me a redundant type args warning in Kotlin, but removing the args resulted in the compiler crashing

shut wraith
#

IntelliJ had the most useless generics errors when I was writing test cases for that system...

#

But granted I think that's my fault for abusing codecs and lambdas to the degree that I did

misty crow
#

@elder swallow networking done, we should be ready to rebase it on the main porting branch and merge it back in

elder swallow
#

yes

#

ok nice

true jacinth
#

why has maty handed me so many pings

#

surely finalize cannot be that broken

foggy steeple
fallen igloo
#

rejects done

#

networking done

misty crow
#

Networking is merged into the main porting branch now

slow prism
true jacinth
#

spawn tag?

#

You mean the MobSpawnType?

slow prism
#

no the compoundtag

true jacinth
#

oh

#

that's fine

#

it was useless for like 95% of things anyway

#

Just remove the param and update the coremod then rerun find targets

elder swallow
#

find targets was never ported to NG btw

fallen igloo
#

we have patches now

misty crow
#

We don't know yet, we aren't able to compile the whole thing yet

magic sierra
#

k

fallen igloo
#

3 compile errors

#

2 of them because registerMapping is gone

#

the third is interaction events

#

2 compile errors left in ItemStack

#

@slow prism you made them

slow prism
#

yeah i realised i changed the wrong interactionresult

fallen igloo
#

no but that event is used in 2 places on uses InteractionResult the other ItemInteractionResult

slow prism
#

sigh

#

you're right

#

fuck the interaction events

#

well they need splitting that's for sure

#

the hard part

#

how do you name them

stiff galleon
#

is it finally time to refactor all the interaction events

slow prism
#

we should probably redo the interaction events after the port

#

but we need a temporary non-bad solution

true jacinth
#

Well whatever you do I'll probably have to redo later

#

so just make them compile

slow prism
#

the compilation errors keep popping up after fixing others

misty crow
#

I have ItemStack and ServerAdvancementManager fixed on my end, I'll push that in a second

slow prism
#

i have them fixed already

#

push race time?

#

tho how did you fix the event

misty crow
#
-if (e.isCanceled()) return e.getCancellationResult();
+if (e.isCanceled()) return e.getCancellationResult().result();
slow prism
#

that makes more sense

misty crow
fallen igloo
#

maty the testframework has 30 compile errors