#[IN DEV] CVN (Cross-Version-NMS)
1 messages · Page 4 of 1
you could have then refetched from github to have a good git, but well...
that's your problem, not mine 😌
no?
I can do that for you
and everything will works correctly
and please, switch to github desktop 🙏
okay
perfect
perfect
omg not on your phone???
yeah
tomorrow is a free day so I have today and tomorrow
good 👍
everybody, the cvn remapper gradle plugin has now been updated
thanks 😄
pull the changes and publish it to your local maven repo
let's rename the org
it's good
everybody here is allocated to some repo
you work on cvn and mappings downloader, I work on the gradle plugin and spigot mappings downloader
rad works on the mass testing thing
if we do any changes to somebody elses repo, we should first ask for permission to commit and push, okay?
wait
okay 👍
so I need to copy your spigot remapping method to put it in CVN, right ?
well, not quite
it heavily depends on the fact that buildtools has been ran
huh
so that's why I make the spigot mappings downloader
actually, I wonder how things happened before mojmaps
because rn it maps fields using mojmaps I think
huh
does that mean it does not map fields?
so Intermediary -> Mojmap -> Spigot ?
not quite
intermediary -> obfuscated -> spigot
but spigot field maps are generated using mojmaps
oh okay
so we need to download mojmaps too ?
obfuscated?
well, yeah, I already expected that
but Idk about older versions
did it just not map fields at all?
1.8.8
I have 1.12.2 mappings rn
I saw that
wait
can you open a patched 1.8 and 1.19 or other ones that come after mojmaps times
it's Spigot mappings for 1.8.8
yeah
okay
what will happen if I send spigot mappings here
nothing
because it's for science
lol
open some class and check what fields there are
yeah
which version ?
1.19.4
PAPER
1.20.4 :
- fields -> obfuscated
1.8.8 : - some fields -> Spigot
- some fields -> obfuscated
SPIGOT
Wait...
what
oh I see
what. the. hell
wtf
Spigot and obfuscated fields ?
(on 1.8.8)
1.20.4
(paper)
interesting
but 😭
sigh
PAPER
1.8.8 :
- some fields -> Spigot
- some fields -> obfuscated
1.20.4 :
- some fields/methods -> Spigot
- some fields/methods-> obfuscated
SPIGOT
1.8.8 :
- some fields -> Spigot
- some fields -> obfuscated
1.17.1
- fields/methods -> obfuscated
1.20.4 :
- fields/methods -> obfuscated
@rigid saffron
I'm confused to death
me too
AHAHAHAHAHA
spigot 1.8.8, that's all.
BOTH SPIGOT AND OBFUSCATED
ARE YOU HAPPY ???
but well, paper is the worst
@rigid saffron are you okay ?
no
I really want to ping md5
I am not
spigot doesn't unobfuscate everything yk
but I'm still struggling to understand everything
x)
you said from hell ?
he's evil
but he's from bukkit
I think we should blame md5 🤓
you can do that if you want x)
what is the email
"md_5@spigotmc.org" is what I found
time to log into my outlook and start writing
x)
we'll get our answers
he knows everything
but, maybe not for paper
I don't think he really likes paper
We'll get an answer in a year
@woven arrow you work with fabric mods sometimes, right? Do you know how loom adds remapped mc and dependency code and stuff like that so the IDE sees it and the compiler doesn't complain?
Lol
Relatable
accurate depiction of modding
True
public void apply(Project project) {
project.getLogger().lifecycle("Fabric Loom: " + LOOM_VERSION);
LibraryLocationLogger.logLibraryVersions();
// Apply default plugins
project.apply(ImmutableMap.of("plugin", "java-library"));
project.apply(ImmutableMap.of("plugin", "eclipse"));
project.apply(ImmutableMap.of("plugin", "idea"));
// Setup extensions
project.getExtensions().create(LoomGradleExtensionAPI.class, "loom", LoomGradleExtensionImpl.class, project, LoomFiles.create(project));
project.getExtensions().create("fabricApi", FabricApiExtension.class);
for (Class<? extends Runnable> jobClass : SETUP_JOBS) {
project.getObjects().newInstance(jobClass).run();
}
}
Hmm
Actually
Can't I just add some jars to the dependencies
That I remap
Okay, I got an answer
@fallow sky we are still Cross-Version-NMS technically btw
Yeah, but we can't really change that
That's not a problem
Is this right
It is, we own io.github.cross-version-nms, but we don't io.github.spigotcvn
Yeah
Neither spigotcvn
Ofc it is gonna mess up a lot, but I think would be nice
So, to Spigot cvn ?
Ye
Okay I'll do that
Spigotcvn or spigotcvn or SpigotCVN
Yeah I see
- don't work in package names btw
Lol I know that
I'm dealing with java since 2 years
I know how to name packages 🤣
Lol
Also, is it okay if I make a private readme? I wanna write who "owns" what repo and that kinda stuff
Interesting
yes you can
it's live
https://github.com/SpigotCVN
thank you so much
damn, my copilot was dead for 2 hours and I didn't even notice
@fallow sky does this look good
maybe If you want to contribute to a repository that you are not maintaing, please ask permission from the person who is allocated to maintain that repository or If you want to contribute to a repository that you are not maintaing, please ask permission from the person who is maintaining that repository
The second one
We don't really say "allocated" for the owner
okay
how does this look
funnily enough, I don't even have the CVN plugin cloned onto my local machine
maintaing
what
trying to run 3 buildtools processes at once
Lol
Nah it'll just be slow or run out of ram
Lol
You don't really want to run lots of buildtools at once, with a good computer 2-3, with a slower one 1 is the limit
Just make it configurable
i cannot f igure it out lol
might just leave my computer running tomorrow, only got 2hrs of school
Ya got school?
yeah sadly
Oof
Well, may is the month when you go to school only 3 times a week instead of usual 5
uh
Again?
duplicates
Use a set, I think it can only have one of an element at a time
Even tho, dunno how it'll react if there are different instances of strings
kotlin stdlib my beloved
Show solution
.distinct()
Also, I think you have perms to make repos in the gh org, would be nice if you uploaded the source code
Not very nice that we have two langs, but fabric loom has both, kotlin in java in the same plugin, it can't really get worse than that
i am literally setting up the repo rn lol
Nice
(changing the remote urls)
The org rename was a bit painful, but definitely worth it
When I'm on phone typing https://github.com/Cross-Version-NMS/CVN.git is way worse than https://github.com/SpigotCVN/CVN.git
Lol
I think even gradle init generates one
I think you needed to check the box that said something about git when creating the project
Or if you did somethings messy
public and LGPL iirc
\👍
Bro 👍'd unsuccessfully
Nah stop it pl
CRIMINAL
Automatic shit because readme stuff
I have to setup the local git repo through cli because of that
Sure
mixing coroutines with sync can be a bit of a pain
hello
question about the mass tester
how does it test if the plugin works
does it check the motd?
it should edit the motd
you can check if there is an error somewhere in latest.log after shutting down the server
and also, you can put the logs in a zip file, and renaming them with the version they are using
would be pretty useful
It can as well just give you the logs for all servers and let you check
yeah
would be the easiest
but, I haven't finished the CB package relocate yet
so it shouldn't work properly
or I use reflection cast CB temporarily
okay then i'll do a SLP and check if the motd is set to that string
the issue is that it's hard to test if it's broken lmao
yeah
just search for "exception"
oh god
if the key "exception" is present in latest.log, there is an error
or even error, idk what you want
that sounds like a really bad way to do it
it's a simple server with two plugin : CVN and the TestProject
does spigot print errors to stderr? 🤔
there shouldn't be any other exception than the two plugins
i could redirect stderr to a custom output stream
well
if it doesn't fuck mojang
just use the latest.log
i do want to filter out errors
huh wait
I know
smth that will works in some versions
you know mfnalex is a gigachad, @woven arrow ?
Spigot uses Log4j to log console output, hence making it easy to listen to incoming console messages, or to block certain console messages from appearing. Prequisities You need to have Log4J on your classpath. We simply add the dependency to our pom.xml using the provided scope, as Spigot already contains those classes on runtime: Create...
maybe not the best solution, I think you can find something on google about getting console output from another java program
Would be fun if he just flooded us like once happened in the bible
bro makes one commit that makes everything fully work
Shit that sometimes happens
because of you, I was about to ping him to ask him for help
I don't think he responds to pings tho
nice
@fallow sky https://github.com/SpigotCVN/spigot-mappings-downloader/ I've pushed some changes, you can now depend on it to get spigot mappings on runtime, but be aware that it's still unstable and I may make some breaking changes in the future
lol
okay thanks, I'll work with that
@inland spoke how can I use your versioning system to compare versions?
MavenVersion.parse("1.0.0").isNewer(MavenVersion.parse("2.0.0")) == false iirc
"MavenVersion"?
You can also use the compareTo methods so MavenVersion.parse("1.0.0").compareTo(MavenVersion.parse("1.0.0.final-0")) == 0
oh okay thanks 😄
it's an interface that redirects to "version-specific" classes
Btw I'm currently working on making the gradle plugin add the dummy class and the cvn-plugin.yml thing
well it's more of a storage container for the individual parts that make up a version but yeah
yeah, I din't know how to say that correctly
oh okay perfect
bruh
I get that on gradle config for tiny remapper
what
Oof
No idea what to do in a situation like thag
Okay, so, I now know more about spigot mappings
Class mappings: self explainatory
Member mappings: includes methods and from what I understood, some fields
Field mappings: mojmaps fields, but adapted to work with spigot class mappings (only exists on newer versions)
I think I might need to already seperate my util methods into util classes
I think it's better yeah x)
skull
bruh, so many plugins 💀
okay, I think I've found about the problem with tiny remapper
maybe it's because I wasn't using java 11
lol
not working
@rigid saffron can you send me the compiled jar of tiny remapper please ?
(the one in .m2)
I'll do that roughly
well
forget
I won't do that
ok?
because it would need me to get the other dependencies, asm etc.
shouldn't it be shaded
he: nah I don't have that many util methods, I barely even need one class for them
also he:
him* 🤓☝️
sir, I will turn you into an util class
happily as long as it's an object and not a class
lol
nothing, it's just an inner class I made just for this
what string is that
joinList
oh
just a method I made so it seems like a real class
I think I will have the remapping gradle plugin done by tomorrow
@fallow sky I have done so that the cvn plugin jar will automatically have its plugin.yml moved to cvn-plugin.yml, then have a dummy plugin.yml and a DummyJavaPlugin class which just disables itself
it also has a different plugin name so no conflicts
Yeah, will push changes either tomorrow or today later
Perfect
nice
:o
its gotten way better
W?
pfft
now Idk what to do
I finished everything
I could definitely polish it even more but then it'll start yelling "Nie jestem wtyczką Gradle, jestem Polakiem" (polish words)
it's not me
means "I am not a gradle plugin, I am a pole(ish person)"
so, what I have to do on my side ?
yeah I translated
well, I guess we would want to create some lib that will allow us to combine mappings (so we can have intermediary to spigot mappings)
if you want, I could try
yeah for sure
but well, I'll probably be ready by like tomorrow evening or the day after
not a problem
do you got something to work on in the meantime?
well
making the jar file correctly
but the lib I use doesn't seem to works correctly for what I do
yeah
tf is that
a lib to work with zip file / jar file (because .jar are a sort of .zip)
what exactly are you doing
renaming files in jar, and replacing files in a jar
exactly what I used this util for
the second one isn't working properly because it's moving in a sub directory (io/github/spigotcvn)
what exactly are you doing
and zip4j seems to only work with one depth directory
remplacing the original files by the asm-edited ones
that's what I'm doing
whats your current code
here is what I get
FileUtils.remapCraftBukkitImports(cvn, remappedPlugin).forEach(((file, path) -> {
ZipFile zipFile = new ZipFile(remappedPlugin);
try {
zipFile.removeFile(file.getName());
} catch (ZipException e) {
throw new RuntimeException(e);
}
ZipParameters parameters = new ZipParameters();
parameters.setDefaultFolderPath(path.substring(0, path.lastIndexOf("/")));
try {
zipFile.addFile(file, parameters);
} catch (ZipException e) {
throw new RuntimeException(e);
}
}));```
public static Map<File, String> remapCraftBukkitImports(CVN plugin, File zipFile) throws IOException {
plugin.getLogger().info("Mapping CraftBukkit imports...");
ZipFile zip = new ZipFile(zipFile);
// Get the extract folder
File extractFolder = new File(plugin.getTempFolder() + "/asm-remap");
// Create it if it doesn't exist
Files.createDirectories(Paths.get(extractFolder.getAbsolutePath()));
// Extract the zip file
zip.extractAll(extractFolder.getAbsolutePath());
Map<File, String> fileStringMap = new HashMap<>();
// Get all the class files
List<File> files = FileUtils.getClassFiles(extractFolder);
for(File file : files) {
CustomRemapper remapper = new CustomRemapper(plugin);
fileStringMap.put(file, AsmWriter.writeAsm(file, remapper));
}
return fileStringMap;
}```
do you know where exactly it's going wrong?
yeah
atjava parameters.setDefaultFolderPath(path.substring(0, path.lastIndexOf("/")));
it puts in testplugin instead of io/github/spigotcvn/testplugin
see here
Path has a thing called relativize or something like that, gimme a lil sec
okay
I had this String entryName = unarchiveDir.toPath().relativize(file.toPath()).toString();
it automatically adjusted the file path to be relative from the folder I unarchived too
idk if that helps at all
like this ?
String entryName = file.getParentFile().toPath().relativize(zipFile.getFile().toPath()).toString();
If file.getParentFile() is the root of where you unarchived the files then should be a yes
?
well
It lets you unarchive to a dir, do anything and then repack the jar
lmao what
what do you think
https://github.com/SpigotCVN/CVN-remapper-plugin/tree/main/src/main/java/io/github/spigotcvn/remapper/util here are all da classes btw
Might javadoc them someday
yeah
You might need a method from the Util class, just copy it over
yeah
Btw, the plugins uuid (the one used in the dummy plugin.yml) is generated from the name of the plugin from the real plugin.yml so it will never ever conflict and also stay consistent
Might rename the dummy class into that uuid just in case
okay
Did you fix the thing
👍
That looks slightly empty
yeah
Code?
Pair<Map<File, String>, File> mapFilePair = FileUtils.remapCraftBukkitImports(cvn, remappedPlugin);
mapFilePair.first().forEach(((file, path) -> {
try {
JarUtil.repackJar(remappedPlugin, mapFilePair.second());
} catch (IOException e) {
throw new RuntimeException(e);
}
}));```
```java
public static Pair<Map<File, String>, File> remapCraftBukkitImports(CVN plugin, File zipFile) throws IOException {
plugin.getLogger().info("Mapping CraftBukkit imports...");
ZipFile zip = new ZipFile(zipFile);
// Get the extract folder
File extractFolder = new File(plugin.getTempFolder() + "/asm-remap");
// Create it if it doesn't exist
Files.createDirectories(Paths.get(extractFolder.getAbsolutePath()));
// Extract the zip file
zip.extractAll(extractFolder.getAbsolutePath());
Map<File, String> fileStringMap = new HashMap<>();
// Get all the class files
List<File> files = FileUtils.getClassFiles(extractFolder);
for(File file : files) {
CustomRemapper remapper = new CustomRemapper(plugin);
fileStringMap.put(file, AsmWriter.writeAsm(file, remapper));
}
return Pair.of(fileStringMap, extractFolder);
}```
What is the file string map
JarUtil#repackJar(File resultJar, File unarchiveDir)
@param resultJar The file that will be written to
@param unarchiveDir The directory with the unarchived jar contents
yeah
Tell me the result and then I'll go sleep
okay
It will generate a dummy plugin.yml
k
With other name and stuff
let's do that
But if it will recognize loaded classes then we'll have to take extra meassures
From unloading to bundling the real jar in a dummy jar
Ok gtg sleep, bye bye
huh
[ModernPluginLoadingStrategy] Could not load plugin 'NMSTestProject-1.0-remapped.jar' in folder 'C:\Users\paule\Documents\Serveurs\1.20.4\plugins'
org.bukkit.plugin.InvalidPluginException: Cannot find main class `io.github.spigotcvn.test.Test'```
is this paper
paper and spigot are really, well wtf are they made like this
If you don't use the provided API, you're f*cked
so many things change between versions
mojank issue
Ah fuck
I totally forgot you need to replace all \ in paths by /
public static void repackJar(File resultJarFile, File unarchiveDir) throws IOException {
try (FileOutputStream fos = new FileOutputStream(resultJarFile);
JarOutputStream jos = new JarOutputStream(fos)) {
// Iterate over all files in the unarchive directory and add them to the JAR
Util.iterateOverFiles(file -> {
try {
String entryName = unarchiveDir.toPath()
.relativize(file.toPath())
.toString()
.replaceAll("\\" + File.separator, "/");
JarEntry entry = new JarEntry(entryName);
jos.putNextEntry(entry);
Files.copy(file.toPath(), jos);
jos.closeEntry();
} catch (IOException e) {
throw new RuntimeException(e);
}
}, unarchiveDir);
}
Util.iterateOverFiles(File::delete, unarchiveDir);
unarchiveDir.delete();
}
``` could work, Idk if it will
jars can only use / for paths, in java tho you get File.separator and shit
I think I'll just use tinyv1 for now
well java.nio.file.Path should use / I think. It's just java.io.File that uses File.separator
decently decent
I also, by accident, invented an extremely inefficient way of storing mappings
same thing, different size
tell me one class
remapped into spiogt
spigot
if it work, it work
now all thats left is to implement reading tiny mappings
damn, it works both ways with both csrg and tiny
I can now load it, do anything to it and save it with no weird changes
(loaded it, then immidiately saved to another file)
it doesn't save comments but I don't think they matter
just remap it to obfuscated, then to spigot, otherwise that'll take seven years of time (just to write proper code that does shit correctly)
did you atleast push to gh? if you did I would maybe clone it and try doing something
bump
I hope paulem will come back soon
An important thing: spigot mappings don't have all classes, while intermediary mappings should
why not use an existing library
like fabric's mapping-io
Does it even let me merge two different mappings
And I don't even need it anymore, too many problems
wdym "merge"
I wanted to put spigot mappings into our intermediary mappings
But decided to not, just do it in two steps
Yeah but here there are too many issues, spigot mappings use csrg, tiny mappings want descriptors on their fields which csrg doesn't have an then spigot also doesn't map everything
So, just forget
I mean you probably could just infer the descriptors ahead of time
chill dude
I'm waiting for this and for spigot smp and now my arm is hurting sir
I need that progress
I mean if you read intermediary mappings, it populates the obfuscated names+descriptors, then mio can just read those spigot fields on top of the existing ones -> you get a tiny with obfuscated+spigot+intermediary in the end
oh right
reflection,
reflection what
well
I can't really work on the plugin today
I'm not in the mood of programming, especially programming
👍
not in the mood of programming, especially programming
relatable
Yeah x)
You in programming mood today?
Yeah
<#1243264378522959914 message> here is a lil solution to your problem
I know I know, thanks
Well, I'm actually on the road, so it's a bit complicated to program, but I'll later don't worry x)
replaceAll isn't working with that 🤓
because it wants a regex, and this is not a regex
so replaced by .replace
@woven arrow is mass tester actually working ?
it only runs bt atm
What ?
in the main plugins
I was eating
Don't do that
Show everything
Remapped jar?
yeah
Send it please
Still same issue
wait
here
for
you're test plugin is out of nonsense
there are incoherences between package naming and plugin.yml
lemme push everything to github
Yeah, artifact left of old package name
I never used it in an actual env so idk
strange
The thing I sent should have worked just fine
looks like it's not
Show
of ?
Repacking
public static void repackJar(File resultJarFile, File unarchiveDir) throws IOException {
try (FileOutputStream fos = new FileOutputStream(resultJarFile);
JarOutputStream jos = new JarOutputStream(fos)) {
// Iterate over all files in the unarchive directory and add them to the JAR
iterateOverFiles(file -> {
try {
String entryName = unarchiveDir.toPath()
.relativize(file.toPath())
.toString()
.replace("\\" + File.separator, "/");
JarEntry entry = new JarEntry(entryName);
jos.putNextEntry(entry);
Files.copy(file.toPath(), jos);
jos.closeEntry();
} catch (IOException e) {
throw new RuntimeException(e);
}
}, unarchiveDir);
}
iterateOverFiles(File::delete, unarchiveDir);
unarchiveDir.delete();
}```
System.out.println(entryName); right after defining it
print File.separator
it does look like it works here
IJ was giving an error in code
but not at compilation
it works
yeah
so wait
what if we merge intermediary and spigot mappings so we only remap one time
idk
ama is just obfuscated names issue
ama net/minecraft/server/players/GameProfileBanList
oh ok
btw, does the craftbukkit remapping work?
nice
I programmed it, so it's working 😎
actually
two mappings can have one common namespace, right?
ama is DedicatedServer
yeah
depends on version
see by yourself
I know, but we are on 1.20.4 for testing actually
well, the plugin is compiled with 1.19.4 but used in 1.20.4
to check if everything works correctly for CB remapping
yeah
when I manually find it
net/minecraft/server/MinecraftServer a (I)V setPort
it is right
yeah
damn, I just made official -> intermediary -> spigot mappings
very messy and unreusable methods, but works
oh no it doesn't
@fallow sky I think we can just remap to obfuscated, then to spigot for now
or wait
I think we can't
because the classpath jar we have is in spigot, not obfuscated
so we do need the merger
hard
huh
I can't really help you with that because I don't know about how to remap, but if you say it...
Okay, time to think
So, a mapping file consists of one a description of the original field/method/class, the original name and then a translation into another name
Tiny mappings can have multiple namespaces but they are essentially the same
What we would want to do
Is to get one mapping (original name, description -> new name) and then search for something that matches it as close as possible in another mapping
So we can add a new namespace
Sounds logical, right?
I think we can not do inheritance here
humm maybe
I think I can do that
I already wrote a csrg and tiny parser before
Only issue is that I tried to apply inheritance here, where it did not exactly work because of how different tiny and csrg are
okay okay
So I think with a second try, I can do it
is it working ?
I'm working on it
lol
yup
cya
I did nearly implement it but now I got the issue that .tiny files take like five quintillion years to save for some reason
Strange
I think I fucked something up
okay i do not know anything about mappings i learnt
basically, the first one is right, the second has one extra thing for some reason
sec
this is just for me
dw
i have no ida what any of this fuckery means
I have fucked something up, hmm
Mapping{type=FIELD, name='fdm$1', className='a', descriptor='[I'} -> Mapping{type=FIELD, name='a', className='a', descriptor='[I'}
Mapping{type=FIELD, name='fdm$1', className='a', descriptor='[I'} -> Mapping{type=FIELD, name='field_39795', className='a', descriptor='[I'}
``` why tf does fdm$1 map to a and to field_39795 when of those two only field_39795 actually exists
I fucked up my loading logic somewhere
aha, so my loading logic is absolutely fucked
👍
amazing
hmm
yeah, this should work better
it did work besides double tabs
Working ?
when does it run
and Idk why it takes so long when I'm literally just adding some strings together and iterating a few times
well, 3mb is quite a lot apparently
setTransform 💀💀💀

I think too
But it's working ?
If it's working, don't touch it 🤓☝️
Perfect 👌
rad boosted the server and is now abusing emojis
(nah, not really)
is this a lot of bytes
3mb of bytes
I'm literally just writing some strings
Because java is suck 🤓☝️
saving that one
Relatable
facts
And maybe your code too
Kotlin too
Kotlin = Java with another syntax 🤓☝️
well, if you want me to write a buffered file writer in C and then use it in java why not, just with the little issue that converting between different languages types is gonna take even longer
hehe
WHO SAYS "fun" FOR A METHOD ???
Not bad
here my lil wolves, help me fix my issue
public void saveToStream(OutputStream os) {
try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os), 1024 * 1024)) {
StringBuilder sb = new StringBuilder();
// Write header
sb.append("# Generated by MappingMerger").append("\n");
sb.append("v1").append("\t").append(originalNamespace);
for (String namespace : namespaces.keySet()) {
sb.append("\t").append(namespace);
}
sb.append("\n");
writer.write(sb.toString());
// Reset StringBuilder for reuse
sb.setLength(0);
// Cache namespace entry sets
List<String> namespaceKeys = new LinkedList<>(namespaces.keySet());
List<Pair<Mapping, Mapping>> firstNamespaceMappings = namespaces.get(namespaceKeys.get(0));
for (Pair<Mapping, Mapping> pair : firstNamespaceMappings) {
Mapping from = pair.getKey();
sb.append(from.getType().name()).append("\t")
.append(from.getName());
if (from.getDescriptor() != null) {
sb.append("\t").append(from.getDescriptor());
}
if (from.getClassName() != null) {
sb.append("\t").append(from.getClassName());
}
for (String namespace : namespaceKeys) {
Mapping to = getMapping(namespace, from);
if (to == null) {
throw new IllegalStateException("Missing mapping for " + from + " in " + namespace);
}
sb.append("\t").append(to.getName());
}
sb.append("\n");
writer.write(sb.toString());
sb.setLength(0);
}
} catch (IOException e) {
e.printStackTrace();
}
}
your fun is suspended now
stop spamming smh
For sure
True
I also tried feeding it to chatgpt for extra performance, but it barely did anything
Looks like your code is gay
That's it
it is pride month
you are too homie
Homie ?
same !!
I like pride 😎
how to confuse PauLem 101
LMAO
lmfao
ARE WE STILL FRIENDS ? (Tyler the creator)
Well
Dancing polish cow
🐄🐄🐄
@optic
fiber optic cable core
agree
I hope making all my array lists linked lists will help
ah yes, a very time consuming operation to do by hand
skull
it's like a list but linked
a list that does not use an array internally but rather has nodes and links nodes to each other
so the second node is connect to the first and the third
you can go back or forward
It's better
sometimes
If I don't misunderstand, they are better
me when ConcurrentHashMap
When ?
currently it seems that they are worse
lmfao
Bruh
BROTHER
oh god
Writing tiny...
Took 175176ms
lmao
whenever i get that concurrent shit exception i just swap my hashmaps for concurrenthashmaps and it suddnely works
Use a [] array 🤓
even though i probably should instead just not write and read concurrently
it always worked for me lmfao
same
though it's probably not good to do that
who gives a shit though
Or even, do not use array
lmao
Stop everything on a string
TRUE
internally everything is kinda of just a long ass string
go full haskell
Just don't use java
no need for di
a sequence of bytes = string
just have a big class
hey hey not like that
with the entire plugin
Code in binary
i didn't learn dagger for nothing
bytecode>>>>
toggle transistors by yourself
Coding directly .class files >>>
send cosmic rays into the computer in a way that they precisely switch the bits you want
I think I might as well have fried my laptop by accident with all of this stuff
Perfect
lmao
but replacing all linked by array lists did help a lot
Put an egg on it
i have a way to fry it even more
Use a LinkedHashSet 😎
lmao
Create your own collection implementation
will take about 18gb of ram
damn bro, I just breathed and it sounded like a lil cat screaming
more probs
I've got 16 😎
LMAO
got 8 on here
will this bitch hurry up
MEOWWWWWW
I already thought of implementing something better in C
mewo
I do know some C and I have done dynamic arrays in C before
so I could
but I have no idea how to do it good
so no
Don't implement, unimplement
i just want my build.gradle.kts to stop going "syntax highlighting has been turned off temporarily because of an internal error"
so i'm updating everything there is to update
your french is coming out sir
fucking intellij
repair ide
best button ever
i tried
FRENCH MENTIONNED 🗣️🗣️🗣️ WHAT THE FUCK IS A BAGUETTE 🥖🥖🥖 🗣️🗣️🗣️🗣️🔥🔥🔥🔥
said the french guy here
LE MEC FRANÇAIS ICI 🗣️🗣️🗣️🔥
fr*nch language (91 is 4*20+11 for some ungodly reason)
I've said "the french guy here"
WHAT THE FUCK IS A KILAWWMIDURR 🗣️ 🗣️ 🗣️ 🗣️ 🦅 🦅 🦅 🦅 🦅 🦅 🦅 🇺🇸 🇺🇸 🇺🇸 🇺🇸
Stop watching those toxic reels on Instagram
fr*ench language (aeuitybknruiyknaeruyniktaweliou'aeruitnawun3miaetrb is pronounced as "bo-en")
okej kurwa ja nie wiem co ty powiedział
i do not have instagram
DANCING POLISH COW 🗣️🗣️🗣️🔥
Stop using your pc
lol
ok rindfleischetikettierungsaufgabenübertragungsüberwachungsgesetz
What the hell is that
Stop smashing your keyboard
why 😏
превысокомногорассмотрительствующий начальник прошел переосвидетельствование my ass
no
no I'm not a law, sir
I only know one thing about germans
every law person from germany is mfnalex
paralelize
They are not really good at choosing a chanceler
OKAY I STOP HERE
surprisde you didn't add this to your collection ngl
facts
You gonna kill me TwT
definitely thought of it myself
Mfnalex is a gigachad

You're connected
just ask dan andantet
MFNALEX MENTIONED 🗣️🗣️🗣️🔥 WHAT THE FUCK ARE MOJMAPS AND MULTI MODULES
Ask the creator of java directly
Ask stackoverflow
But well
is this better
Writing tiny...
Took 17732ms
Bytes: 3043664
Don't break your code
MUCH better
But not really that

