#help-development

1 messages · Page 1067 of 1

worthy yarrow
#

Like InventoryClickEvent has a method for the clicked item iirc so you could read from that

cold charm
#

I will certainly look into it! I appreciate yall giving me places to start.

worthy yarrow
#

yeah sure!

golden turret
#

i am calling an event when my plugin is being disabled (onDisable()) but my listener does not listen it. Do the listeners stop listening when the plugin is being disabled?

eternal oxide
#

yes, you can;t raise events on dsiable

eternal oxide
#

just add disable methods in whatever classes need them and call from onDisable

viscid carbon
#

not spigot related, java. curious if this is a good way to do this. Making a auto broadcast system.

            current = 0;
        }
        sendAll(getMessages().get(current));
        current++;```
#

pretty much just keeping count of the last one and adding 1 after its sent. resets at the stringlist.size()

echo basalt
#

You could replace the if statement with a %=

#

current++;
current %= messages.size()
sendAll(messages.get(current))

viscid carbon
agile anvil
viscid carbon
#

whoops dont mind me, baby crawling on me

agile anvil
#

% operator is taking the rest in the Euclidian division.

a = b * q + r
This is the Euclidian division of a by b.

a / b = q
a % b = r

#

So you need to divide current by a given int

viscid carbon
#

But why does it reset it when it reaches the max limit?

#

or does java just do that by default?

agile anvil
#

What do you mean?

worthy yarrow
#

I have to go to the operand page of my java bible every so often haha

agile anvil
#

Let's say current = a and messages' size = b

a will be always lower or equals to b

So it will always be:

  1. a = b * 0 + r => r = a (so a %= b will not change a)

  2. a = b * 1 + r => r = 0 (so a %= b will make a = 0) [because a == b]

worthy yarrow
#

rolyn out here mathing

agile anvil
#

I want people to understand what they do

worthy yarrow
#

that's fair and I can say that I certainly appreciate it

#

You helped me with the overlay stuff

agile anvil
#

great!

eternal oxide
#

too complex explanation. Its just modulo/remainder

agile anvil
worthy yarrow
#

Idk I feel math should be explained for what it is and why

eternal oxide
#

true

agile anvil
#

And sorry for being in the math religion, it feels like a religious group I cannot get out of

worthy yarrow
#

Hey math is great

tepid turret
#
@EventHandler
    private void onInventoryChanged(InventoryMoveItemEvent event){
        Bukkit.getLogger().info("real");
        if (!(event.getSource().getHolder() instanceof Player)) {
            Bukkit.getLogger().info("realest shiz ever bro!");
            return;
        }
        if (event.getItem().getItemMeta().getPersistentDataContainer().has(keys.getRegistered()) || event.getItem().getItemMeta().getPersistentDataContainer().has(keys.getPreviousEnchantLevel())) {
            Bukkit.getLogger().info("wat");
            if (event.getSource() != event.getDestination()) {
                Bukkit.getLogger().info("Shoulda cancelles!");
                event.setCancelled(true);
            }
        }
    }

When moving an item from players inventory to chest nothing get printed to console.
But other event listeners in the same class work

agile anvil
#

Try to put a hopper on top of a chest to check if you get at least the log "real"

tepid turret
#

Alright ill check

tepid turret
agile anvil
#

Then that's maybe not the event you are wanting ahah

tepid turret
#

Yea realised

agile anvil
#

What do you want to achieve? Avoid players to put items in a specific inventory ?

tepid turret
#

Yea

#

kinda

#

A player gets given an item that they should be able to move around in their inventory

#

but not be able to place in other inventories

agile anvil
#

maybe you'd like to cancel it

tepid turret
#

I'll look into it thanks :)

humble lynx
#

Make sure to listen to inventory drag event as well

torn shuttle
#

it's done boys

#

automerges resource packs and autohosts them

#

0 input or configuration required

ivory sleet
#

Not everyone is super familiar with long division, which is such a shame

pseudo hazel
#

modulo is just kind of the remainder of any division no?

#

the way I usually explain it is that its like a loop

#

and your starting number is the amount of steps you take

ivory sleet
#

i mean there is a rigorous mathematical definition that involves equivalence classes and binary relations sort of

#

but eh, who cares about that

shadow night
#

I only know Math#floorDiv

dawn flower
#

is there an invulnerability state change event

stark sierra
#

I'm trying to make a while loop so it plays the sound/particle but obv with how it's currently written itll only trigger if the player is already flying, not while they are flying

The only thing I can think of is making another listener for a PlayerMoveEvent and checking the conditions there, but surely that's inefficient/may be done in a better way? Otherwise I can try that lol

agile anvil
#

?scheduling

undone axleBOT
agile anvil
#

Please see the above link. Feel free to ask for anything else

stark sierra
#

alr, ty

agile anvil
#

MoveEvent is irregular and will spam players of sound and particles. While loops are just code blocking (the code will stop while the loop is not stopped)

dawn flower
#

how possible is making this method
updateScoreboard(Player player, Function<List<Player>, List<Player>)

which basically orders the players in the tablist based on the Function parameter

vast ledge
#

The fk is function

pseudo hazel
#

its a java function

vast ledge
#

Last time I checked, that wasnt a Java var

#

Oh

pseudo hazel
#

(x) -> return y;

dawn flower
#

so how possible is it

vast ledge
#

I thought smth like HashMap<Object, Object>

vast ledge
#

And then have the function return it

pseudo hazel
#

well it is possible to sort players in tab list, but idk how to di it

#

it may require packets

dawn flower
#

it could just be updateScoreboard(Player player, List<Player>) since the 1st one in the Function is just Bukkit.getOnlinePlayers()

pseudo hazel
#

but like ,idk why you are using a Function though

pseudo hazel
#

yeah

#

exactly

dawn flower
lilac dagger
#

comparable is designed for sorting

#

there are methods like TreeMap or Arrays.sort that take comparable objects for their sort

#

i use Arrays sort for a lot of things due to this property

#

and treemap too where aplicable

dawn flower
#

it doesn't really matter what i use

#

the main issue is how to apply the sorting, i think it's player info packet or something

lilac dagger
#

you can achive sorting with a bifunction, not sure how you'd sort it with a function

dawn flower
#

once again

lilac dagger
#

Function<List<Player>

#

ah it's a list

dawn flower
#

i dont care how it's sorted

#

i only need to know hwo to apply the sorted players into tab

lilac dagger
#

well, in that case a function can do it

dawn flower
#

😭

#

for the third time

#

i dont care how its sorted

#

i want to apply the sorted players into tab

#

using packets

#

idc if i use function, bifunction, list or anything

lilac dagger
#

i didn't say anything this time

#

i'm not sure how tab sorting works, i assume there are docs on spigot

dawn flower
#

it's A-Z i think

lilac dagger
#

if not what i know is that you can use scoreboard teams

#

well, in that case isn't stright forward

#

?

#

i think minecraft does this sorting by default

ivory sleet
#

yea u think u need to use teams to sort it in the order u want given a list

#

Which can also be done w mere packets if one wants to

lilac dagger
#

but a z sorting doesn't require anything as far as i know

#

unless minecraft takes a list of sorted players for the order in that case we're back at comparable

ivory sleet
#

ye it doesn’t, but they wanted the same order as the list passed as argument, or did I get that wrong?

lilac dagger
#

no, he said a z

ivory sleet
#

where?

lilac dagger
#

then yeah, teams are the way

#

but i remember seeing people doing elaborate tabs that weren't with players anymore

#

or rather mostly were with stats

ivory sleet
#

oh yea

lilac dagger
#

if you can append entries to the tab or remove them, then you can use color codes to achieve any order you want for your order

grim hound
#

I wanted to add after the res var is created

#

basically if(AlixFastUnsafeEpoll.reject(res, addr) return -1;

grim hound
dawn flower
#

why does minecraft always make stuff hard to change

#

and there isnt a single good thread talking about this

humble tulip
dawn flower
#

i know about that

humble tulip
#

Check uodate teams

#

Update teams*

humble tulip
lilac dagger
#

this is how i do it

dawn flower
#

ok first why r u using bytebuf

#

second i use protocollib

humble tulip
#

I hate protocollib ngl

#

And bytebuf is nicer imo cuz you can use the protocol wiki

#

Since it's actually documented

#

Though it might break version to version

#

But i like it still

dawn flower
#
    public static void updateTabList(Player player, Player... players) {
        ProtocolManager manager = Tab.getProtocolManager();

        for (int i = 0; i < players.length; i++) {
            Player otherPlayer = players[i];

            PacketContainer packet = manager.createPacket(PacketType.Play.Server.SCOREBOARD_TEAM);
            packet.getStrings().write(0, String.valueOf(i));
            packet.getBytes().write(0, (byte) 3);
            packet.getIntegers().write(0, 1);
            packet.getStrings().write(1, otherPlayer.getName());

            manager.sendServerPacket(player, packet);
        }
    }```
like this?
drowsy helm
#

With libs like packet events and mojang mappings being easily available, it makes plib pretty useless

keen charm
#

Hey guys

keen charm
#

I don't see UPDATE_LISTED in old versions like 1.18.2

#

How do you achieve that?

humble tulip
keen charm
#

But it doesn't remove you as a whole like REMOVE_PLAYER

#

I can only use it in versions like 1.19.4

humble tulip
#

Can you show what all the enum values are in 1.19.4 and 1.18?@keen charm

keen charm
wintry oxide
#

hi, i'm trying to spawn in loop some mobs, and i have issues with the spawning: some times it spawn correctly 50 mobs and other times it doesnt spawn them all is there a way to check if the world.spawnentity() works correcly?

drowsy helm
#

Isnt there a method for that in ServerPlayer

keen charm
grim hound
#

@lilac dagger

#

help

drowsy helm
#

Yeah

keen charm
drowsy helm
#

Not sure about 1.18 but I use it in 1.21

keen charm
#

I had to manually modify the entry values using Reflection lmao

lilac dagger
grim hound
grim hound
#

trying to add this one line of coding of mine

keen charm
#

How do we view Spigot source code by the way?

#

Does BuildTools provide it?

grim hound
#

into that Socket#accept method

keen charm
#

For Paper you just had to apply patches and build

grim hound
drowsy helm
#

I can view it directly in my ide, pretty sure I just selected that

lilac dagger
#

why are you reflecting sockets?

grim hound
keen charm
humble tulip
undone axleBOT
grim hound
grim hound
wintry oxide
#

hold on a sec

grim hound
#

There are probably 2 solutions for my case

grim hound
grim hound
#

anyhow

grim hound
wintry oxide
# drowsy helm Can we see your code
for (int n = 0; n < SpawnCount; n++) {
                while(true) {
                    int randx = new Random().nextInt(xdif)+minx;
                    location.setX(randx);
                    location.setZ(y);
                    int randz = new Random().nextInt(zdif)+minz;
                    location.setZ(randz);
                    if(location.getBlock().getType().equals(Material.AIR)) break;
                }
                world.spawnEntity(location, mob);
            }
#

the for loop loops the correst amount of times

grim hound
#

I'm retransforming the Socket class with a different a bit bytecode

#

but the verifier just tells me "nuh-uh"

humble tulip
#

What's alixunsafeepoll line 23?

grim hound
drowsy helm
#

Theres a method for that which doesnt require a while true loop

wintry oxide
#

but if the blocks air i should be alrg? no?

drowsy helm
#

You should definitely have a safety exit from the while loop

#

Or just dont use a while true loop

#

They are dangerous

wintry oxide
#

i mean

#

thats pretty much safe for what i use

grim hound
#

pretty sure Coll would know

#

oh

#

coll

grim hound
#

@young knoll ?

wintry oxide
#

if theres a way easier to do smth ill do it

ivory sleet
grim hound
#

also, you can ping me

drowsy helm
young knoll
#

I think that means you mangled something with your asm

grim hound
wintry oxide
ivory sleet
young knoll
grim hound
ivory sleet
#

Or I mean like wrong method signature for example

grim hound
wintry oxide
#

does any1 know how to help me out?

humble tulip
#

Can i just see your reject method?

#

Not the whole thing

keen charm
#

What function did you mention?

humble tulip
wintry oxide
#

lol

keen charm
#

Also 1.21 & 1.18.2

drowsy helm
#

Im not home rn so cant check but it’s smth like hideFromTablist or some shit

#

There definitely is an inbuilt method for it tho

keen charm
urban crest
#

mb

keen charm
#

Np

humble tulip
# grim hound

Sorry I'm on mobile and too lazy to go on my computer hence how slow I am

keen charm
chrome beacon
#

Do you want to hide the player entierly or just tab list?

keen charm
#

If that's not your plugin

#

Hey

#

If we modify PlayerTextures does the changes apply to GameProfile?

#

And if we modify GameProfile does the changes apply to PlayerTextures?

topaz kestrel
#

I'm trying to make a stats system with ORM Lite using HashMap based on modes and the stat type. So, I create a custom persister to convert hashmap to sql object, since SQL and ORM Lite doesn't support hash maps directly. now I except hashmap instantiates and loads itself, however it ends up hashmap being null and if I try to instantiate it manually, the statistics of the player gets reset obviously.

Account: https://pastes.dev/jfzKB00Up8
AccountStats: https://pastes.dev/ABYQAZDRME
Custom Persister: https://pastes.dev/Z7O10zCfMg

kindred valley
#

?paste

undone axleBOT
kindred valley
#

?learnjava

undone axleBOT
#

For Beginners:

Codecademy - Learn Java: Interactive Java programming course from basics to more advanced concepts. Perfect for absolute beginners.
https://www.codecademy.com/learn/learn-java
JetBrains Academy - Java Developer Track: Learn by doing with projects and challenges. It covers Java fundamentals to advanced topics.
https://www.jetbrains.com/academy/
Udemy - Java Programming Masterclass for Software Developers: Updated courses that cover Java 8 to Java 17 features. Suitable for those who prefer structured learning.
https://www.udemy.com/course/java-the-complete-java-developer-course/

For Intermediate to Advanced Learners:

Oracle Java Tutorials: The official guides by Oracle for Java programming—great for understanding the depth of Java.
https://docs.oracle.com/javase/tutorial/
Baeldung - Learn Java and Spring: Focus on Spring Framework and modern Java technologies. Best for intermediate learners aiming to expand their knowledge.
https://www.baeldung.com/

Practice and Hands-on Learning:

Exercism - Java Track: Solve exercises and get feedback from mentors. Great for practicing coding skills.
https://exercism.io/tracks/java
LeetCode: Practice your coding skills and prepare for technical interviews with Java.
https://leetcode.com/

Free Resources and Documentation:

Java Programming and Documentation: A comprehensive collection of Java programming guides, tutorials, and API documentation.
https://docs.oracle.com/en/java/

Community and Support:

Stack Overflow: A vast community of developers. Great for getting help with specific problems or understanding concepts.
https://stackoverflow.com/questions/tagged/java
r/learnjava on Reddit: Join the community of Java learners and get advice, share resources, and discuss projects.
https://www.reddit.com/r/learnjava/

Remember: Learning to program takes practice and patience. Don't hesitate to experiment with code and participate in community discussions. Happy coding! 🎉

dawn flower
#

method ScoreboardUtils#updateTabList called with (MissingReports (CraftPlayer), [MissingReports, Lightning9308] (CraftPlayer[])) threw a FieldAccessException: Field index 0 is out of bounds for length 0

    public static void updateTabList(Player player, Player... players) {
        ProtocolManager manager = Tab.getProtocolManager();

        for (int i = 0; i < players.length; i++) {
            Player otherPlayer = players[i];

            PacketContainer packet = manager.createPacket(PacketType.Play.Server.SCOREBOARD_TEAM);
            packet.getStrings().write(0, String.valueOf(i));
            packet.getBytes().write(0, (byte) 3);
            packet.getIntegers().write(0, 1);
            packet.getStrings().write(1, otherPlayer.getName());

            manager.sendServerPacket(player, packet);
        }
    }```
#

according to wiki.vg it shouldnt do that

kindred valley
#

bound might be going negative

dawn flower
#

what bound

kindred valley
#

ah wait mb

dawn flower
#

packet.getBytes().write(0, (byte) 3);
packet.getStrings().write(0, String.valueOf(i));
it's one of these thats doing it

#

and im guessign the 1st one

humble tulip
#

@grim hound gave up went on computer

#

addr is 1

#

res is 2

grim hound
#

the problem is that it doesn't find my class now

humble tulip
#

what's the new error?

#

wym it doesnt ind your class?

keen charm
#

Hey guys

#

How do I get the entity that the player is riding, such as a horse?

grim hound
#

the people from Recaf said that it's because the class loaders are different

humble tulip
#

ah yes

keen charm
kindred valley
#

on interactevent

humble tulip
#

the netty class loader didn't load your class

#

whatever loaded netty

#

hmm

quiet ice
#

The netty CL is the root/system CL for reference

kindred valley
#

understandable

dawn flower
#

how does that make a difference

drowsy helm
#

Player cookies can be spoofed right?

dawn flower
#

also icba to change every code with protocollib

grim hound
grim hound
keen charm
#

I'm using respawn packet and although I don't provide any location, the players gets respawned in their previous position. How does that happen?

grim hound
#

how do I have it find my class?

drowsy helm
#

Hmm guess were using redis

humble tulip
grim hound
slender elbow
dawn flower
#

my code kinda works, but minecraft hates me so it didnt reorder the tab

#

the prefix "5" is just for debugging

#

i tried with 1 instead of 5 but still

#

and i tried with A

drowsy helm
#

Wait encryption is lowkey an option

#

But idk if it’s worth just to save 1 db call

keen charm
#

Hey

#

I'm trying to change a player's skin while they are on a vehicle (aka riding a mob such as a horse)

dawn flower
#

can someone please help me? i've been trying to do this for like 4 hours now

#

prob more

keen charm
#

I do ServerPlayer#stopRiding(); store the vehicle (aka the entity), and then do ServerPlayer#startRiding(Entity); but it doesn't work

#

It drops me from the mob, I can't ride it for a few seconds and then after some time I can ride it

shadow night
#

Isn't that in the api

keen charm
#

Not sure, I didn't check

#

I just wrote it in NMS code

dawn flower
#

does minecraft take player's latency into account for tablist sorting

slender elbow
#

no

keen charm
humble tulip
dawn flower
#

goddamn it

slender elbow
#

tablist is sorted:
spectators are put last
then sorted by teams alphanumerically
then sorted by profile name alphanumerically

shadow night
dawn flower
#

then sorted by teams alphanumerically
no it isnt

#

wait maybe it is

slender elbow
#

yes it is

dawn flower
#

i didnt try having a team

keen charm
shadow night
#

Missed it somehow

dawn flower
#

holy shit it is

#

you're the best

#

i lvoe u

shadow night
keen charm
#

When I use it it adds me as a passenger

#

But I can't ride it and I'm not even on the passenger seat of the entity

#

But when I do shift I get off it successfully and then I can ride it again

dawn flower
#

what happens if i "add an entity" to a non existant team

#

cuz it doesnt seem to be doing anything

#

other than existing

tribal sky
#

?services

undone axleBOT
dawn flower
#

#bot-commands

#

how do i create a team that barely exists? i dont want it changing prefix, name, color or anything

vague dawn
#

hey

#

any idea, why the statment starting on line 21 is not working?

#

to be specific the line 27 - stand.setGlowing(true). if i put here stand.setArms(true) or stand.setBasePlate(true) everything is working just fine

#

no console errors

#

nothnig

#

it should have behavior as the stick and stone_slab

#

everyhting is okey, if i change the stand.setglow(true) to something else

wintry oxide
#

hi, i'm trying to spawn in loop some mobs, and i have issues with the spawning: some times it spawn correctly 50 mobs and other times it doesnt spawn them all is there a way to check if the world.spawnentity() works correcly?

#

heres the code: ```java
for (int n = 0; n < SpawnCount; n++) {
while(true) {
int randx = new Random().nextInt(xdif)+minx;
location.setX(randx);
location.setZ(y);
int randz = new Random().nextInt(zdif)+minz;
location.setZ(randz);
if(location.getBlock().getType().equals(Material.AIR)) break;
}
world.spawnEntity(location, mob);
}

i'm 100% sure the for loops goes the correct amount of time
ornate urchin
#

setZ(y) probably isn't helping, depending on where you're testing

wintry oxide
#

fuck me

#

maybe thats why

#

😂

#

i mean thats a correction but still i dont get the spawn i need

tardy delta
#

please dont create a new random generator every iteration

#

you have no single clue how heavy generating that object is

#

oh dammit youre even making two of them

#

ahyigadhjiuagdbad

shadow night
#

Doesn't it fetch a truly random value from the atmospheric whatever for the seed?

tardy delta
#

truly random things dont exist in computer land

#

unless youre using /dev/urandom

#

not entirely sure about that one

shadow night
wintry oxide
shadow night
#

But instead of calling new Random each time use ThreadLocalRandom.current()

shadow night
wintry oxide
#

yes but rn i dont reallt care

#

i just need it to work

#

ill have room for improvement later on

#

for now i just need it to work

shadow night
wintry oxide
#

ok

#

do you know how to help me or you just want to come here and teach me how to do stuff?

shadow night
#

I do both, I'm looking at your original msg rn

quaint mantle
#

?paste

undone axleBOT
quaint mantle
#

https://paste.md-5.net/hujefaqefi.java
[HyroCore] Task #2 for HyroCore v${project.version} generated an exception paper-lobby-1 | java.lang.IllegalArgumentException: An objective of name 'sidebar' already exists
How can I fix this?

shadow night
quaint mantle
#

and if set the objetives as an private val doesn't show idk

tardy delta
#

why do you have a nested companion object in a class

#

just make it an object

quaint mantle
#

thanks for the suggestion

tardy delta
#

just register the objective once

quaint mantle
#

okey

dawn flower
#

how do i change the color in a fake team packet in protocollib?

#

?

#

this is so annoying

smoky anchor
#

Not expert at all, but

keen charm
drowsy helm
#

yep shall check now

dawn flower
#

it makes no sense

#

because getIntegers is like 1 length

smoky anchor
#

What "get integers"
Can you show how you construct the packet ?

drowsy helm
#

ill send my code, my npcs don't show up in tab

dawn flower
#

there is no enum related to color in packetwrappers

#

and doing Packet#getIntegers says it has a length of 1

blazing ocean
#

plib moment

dawn flower
#

ong bro

blazing ocean
#

PE better

#

NMS best

dawn flower
#

i need to rethink my life choices

slender elbow
#

stop using wiki.vg to work with protocollib

#

it's useless

dawn flower
#

is there another one

smoky anchor
#

Oh really ?
How so.

blazing ocean
slender elbow
#

wiki.vg tells you about the byte stream format on the wire, protocollib is just a fancy reflection accessor for the java packet class, those two can differ by a huge margin

alpine urchin
#

^

dawn flower
#

so im supposed to guess or what

slender elbow
#

wiki.vg is useful if you are implementing the protocol for your own server or proxy

subtle folio
alpine urchin
#

i mean it’s still helpful when it comes to understanding the meaning of the data

slender elbow
#

go look at the java class of the packet if you are working with plib

blazing ocean
alpine urchin
#

but some of the types must not be taken literally

dawn flower
#

there are class packets?

slender elbow
#

all packets are classes

blazing ocean
dawn flower
#

im talking abt plib

blazing ocean
#

.-.

dawn flower
#

i dont like incosistencies in my code

blazing ocean
#

plib uses a different structure

dawn flower
#

ugh

alpine urchin
#

Yes, a seperate project called PacketWrapper, yet I doubt they’re actively maintained

#

and function on all versions

blazing ocean
#

they told you to open the nms class

dawn flower
#

the nms class has an optional of Parameter.class

blazing ocean
#

and look at its impl

dawn flower
#

and protocollib needs a "converter" to get the optional modifiers

alpine urchin
#

you can run a scientific study on this, or you can just accept defeat

#

and trust in another library

dawn flower
#

i cant just use protocollib in half of my project and packetevents in another half

alpine urchin
#

you can

#

😂

#

or you can switch to one

dawn flower
blazing ocean
#

plib users aren't sane

blazing ocean
dawn flower
blazing ocean
#

it's just a class

alpine urchin
#

it’s okay guys

dawn flower
#

what class

alpine urchin
#

im not offended

dawn flower
#

i have alot of classes that use plib

floral drum
#

I mean I use plib... but a method to automatically listen to packets very easily

alpine urchin
#

possible bad design of your project if you have thaat much to change now

#

but i think you’re exaggerating

ivory sleet
dawn flower
#

it's gonna take at least 2 days to convert old code to pe

ivory sleet
#

well you’ll thank yourself later if done

#

I promise :)

keen charm
floral drum
#

omg they promise

dawn flower
floral drum
#

Promise<Conclube>

keen charm
#

Like from 11 am to 4 am

ivory sleet
#

purple you nerd

floral drum
#

lmfao

blazing ocean
keen charm
alpine urchin
#

I’m not affiliated with that entity but we are not liable of any damages

dawn flower
alpine urchin
#

it might cause on your server.

blazing ocean
dawn flower
#

u can prob redesign the missing classes easily

#

which wouldnt even take long

ivory sleet
#

If that’s nothing for you, then PLIB -> PE shouldn’t be such a cumbersome conversion for you

keen charm
#

Turned the project into a multimodule gradle project

#

Yeah it's nothing

blazing ocean
dawn flower
#

anyways

blazing ocean
#

and is so much faster

dawn flower
#

how do u even use pe

alpine urchin
#

Anyway, if you insist on using PLIB sure, just we made the competitor for a reason, it’s not just some knockoff

ivory sleet
keen charm
#

It magically works

dawn flower
#

how do u make a packet listener

young knoll
#

There’s guides and such on the GitHub

keen charm
young knoll
#

And a discord server

blazing ocean
blazing ocean
alpine urchin
#

what packet are u even dealing with again

dawn flower
#

team

alpine urchin
#

ok

blazing ocean
#

why tf do you need packets for that

dawn flower
#

clientside team

#

to sort the tab

#

different sort per player

blazing ocean
#

each player has their own scoreboard

dawn flower
#

...

#

did april fools start early

floral drum
#

?

dawn flower
#

if u dont need packets

#

what did i spent 7 hours on

blazing ocean
dawn flower
#

...

#

cough

#

so you're telling me

#

i hate my life

blazing ocean
#

yes

dawn flower
#

WHY DIDNT U TELL ME

alpine urchin
#

who

blazing ocean
#

always check api first kekw

alpine urchin
#

bro who do u think u are

floral drum
#

maybe a skill issue

dawn flower
#

dawg

alpine urchin
#

😂

#

WHY DIDNT YOU TELL ME

blazing ocean
dawn flower
alpine urchin
#

WHYY

#

😂

dawn flower
#

there must be a catch

#

it cant be that simple

alpine urchin
#

you sound like an evil villain

blazing ocean
#

except that it literally is

dawn flower
#

well

#

uh

blazing ocean
#

i use it to do scoreboards for each player

#

it's so simple lol

dawn flower
#

i'm dumb

alpine urchin
#

Yes

blazing ocean
#

yes

dawn flower
#

did u just call me dumb

alpine urchin
#

LOL

#

love when people do that

#

im soo dumb

#

yes

#

you are

dawn flower
#

jk i am dumb

alpine urchin
#

Yep

dawn flower
#

anyways im gonna go cry in the corner for the 7 hours wasted or something

alpine urchin
#

You learend what a packet is

#

good job

blazing ocean
#

you just ```java
var board = Bukkit.getScoreboardManager().getNewScoreboard();
board.registerNewTeam(...)
player.setScoreboard(board);

kek
young knoll
#

var

#

Kill it

blazing ocean
#

hehe

alpine urchin
#

no wonder you find it simple

#

evil "var"

#

everyone knows making scoreboards is the spigot final boss

tardy delta
#

make it val

vague dawn
loud herald
#

Hi, if I run the following code

try {
    Object onlinePlayers = Bukkit.getOnlinePlayers();
    Method sizeMethod = onlinePlayers.getClass().getMethod("size");
    int count = (int)sizeMethod.invoke(onlinePlayers);
    System.out.println("Size:" + count);
} catch (Exception ex) {
    ex.printStackTrace();
}

I receive a IllegalAccessException error. Any idea on how I could fix this?

java.lang.IllegalAccessException: class MyClass cannot access a member of class java.util.Collections$UnmodifiableCollection (in module java.base) with modifiers "public"
       at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:394)
       at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:714)
       at java.base/java.lang.reflect.Method.invoke(Method.java:571)
       at MyPlugin.jar//MyClass.MyMethod(MyClass.java:0)
       at org.bukkit.craftbukkit.scheduler.CraftTask.run(CraftTask.java:101)
       at org.bukkit.craftbukkit.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:482)
       at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1699)
       at net.minecraft.server.dedicated.DedicatedServer.tickChildren(DedicatedServer.java:467)
       at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1571)
       at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1231)
       at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:323)
       at java.base/java.lang.Thread.run(Thread.java:1583)
subtle folio
#

Getting the number of online players..?

loud herald
subtle folio
loud herald
drowsy helm
#

you know you can cast it right?

loud herald
ivory sleet
#

You can get the method from collection instead and invoke it

#

I think

loud herald
#

I would have to add more hardcode

#

Like I added the ability to call java methods from non java

ivory sleet
#

well it would be the same amount of code

loud herald
#

And I would then have to check if its a colleciton etc

ivory sleet
#

All I’m saying is to use Collection.class.getMethod(…)

loud herald
#

But im obj.getClass()

ivory sleet
#

and then thats that

loud herald
#

i would then have to Collection.class.isAssignableFrom(obj.getClass()) and then Collection.class.getMethod ...

#

why does the problem even exist in the first place? why can i call it in normal java but not with reflect?

ivory sleet
#

Or Collection.class.isInstance() just?

blazing ocean
#

why are you even trying to call it from reflection

#

literally use the .size method

loud herald
#

bec its not java code im executing

loud herald
cold pawn
#

Hey there, can anyone help with why I'm getting this error? I recently switched from 1.20.2 to 1.20.6, and besides some minor tweaks, I didn't change much since 1.20.6 didn't have code-breaking changes, yet I get this error for the teams packet. Any reason why? https://pastebin.com/HxskBffB

blazing ocean
loud herald
#

bec i renamed them?

ivory sleet
loud herald
#

like skript but less shit

#

atleast trying to

#

🙂

#

and i dont want to add a getCollectionSizeBecauseFun function

river oracle
#

Generally for most languages you should start with an AST for your target

#

Then build your parser

loud herald
#

the language is not the problem. the interaction with java -_-

vague dawn
ivory sleet
#

I do think they’re past the AST phase

loud herald
#

omfg

#

thats why i didnt say what im doing in the first place

ivory sleet
#

Yea well I mean, the best thing you can do is to just like, use reflection on interfaces if possible

#

Esp like Set, Map, List, Collection yk

loud herald
#

So only way to fix it is to add some sort of hotfix!?

dawn flower
#

how do u clear a Team object

loud herald
blazing ocean
loud herald
#

why

blazing ocean
#

you need to unregsiter the team on the scoreboard

#

don't ask me why

#

it just doesn't

loud herald
#

bruh ok

#

and what does the .unregister do then

dawn flower
#
    public static void updateTabList(Player player, Map<Player, Integer> players) {
        Scoreboard scoreboard = player.getScoreboard();
        for (Map.Entry<Player, Integer> entry : players.entrySet()) {
            String index = entry.getValue().toString();
            Team team = scoreboard.getTeam(index);
            if (team != null)
                team.unregister();
            team = scoreboard.registerNewTeam(index);
            team.addPlayer(entry.getKey());
        }
    }```
is this how you do it?
blazing ocean
#

doing team.unregister() just leaves them on /team and stuff for some reason

#

just do board.unregister it works

dawn flower
#

wait if i register a team in a player's scoreboard it shows in /team?

blazing ocean
#

yeah

loud herald
#

Making minecraft less shit and better for developers? ❌🖕
Adding wolf armor no one asked for? ✅ 😊

blazing ocean
#

it's a client side thing

#

which would not have been fixed by using packets

dawn flower
#

ah

#

wait so the teams arent stored in the server

#

it just shows in /team

river oracle
blazing ocean
#

board.getTeam(...).unregister() works

#

spigot moment

blazing ocean
#

for me at least

tardy delta
#

whats the point behind data driven registries?

river oracle
#

And having the client understand it

#

Instead of using packet hacks and whatever else we do to jank shit together

#

Tbh a world without client side mods is an ideal world

#

Tho using registries you can only go so far

#

Stuff like JEI and some of the client menu improvements would have to stay there as client side mods

loud herald
loud herald
ivory sleet
#

You could try to get the method from the super class recursively

ivory sleet
loud herald
#

:(

#

not fun

#

when you do things, there are stupid errors you are wasting your time on than the actual thing

#

oh you are creating folders recursively?? oh yea the folder doesnt exist so i cant create a folder inside that. you msut restart your computer to fix it. but have fun before trying that

zealous osprey
river oracle
loud herald
hybrid spoke
loud herald
#

error is not telling me to restart my fking pc

hybrid spoke
#

its fun when the production server crashes, because a list full of integers suddenly gets a string from the database

#

because at runtime its just a list of objects

#

have fun figuring that out

vague dawn
#

There is so much staff i want to add - the togglable is good idea

zealous osprey
hazy parrot
vague dawn
vague dawn
#

@zealous osprey this is not working too.. idk if they have change something with the setGlowing?... - all other is working fine - purpur block on head, etc

loud herald
# hazy parrot You have to restart PC if folder creation failed because parent doesn't exist ?

Correct. What its meant to do and normally does is: create folder1 then folder1/folder2 but what it did (maybe) create folder1 (which did nothing idk) then create folder1/folder2 and then say that folder2 cant be created because folder1 doesnt exist. This is just wasting time and not fun. Or the oh you want to call the method? Yea it needs to be on that line for some reason. The 1 single byte cant be different in the final .class file because else i wont work

zealous osprey
# vague dawn Hey, can someone check my code? https://pastes.dev/Z64AYylHwL Its about armorst...
  1. Split up the code, it's all just one huge function. It's hard to know what I'm looking at
  2. Imo, don't use InventoryClickEvent to figure out which inventory/menu the user has open. Give the player some kind of state when they open or close the menu
  3. I think the issue lies in line 99: if (event.getInventory().contains(Material.STICK)) { that's false I believe, since the confirmation menu doesn't have a stick in it.
#

Ahh, nvm, I just understood what you are doing there, very weird. Log what stand is in line 132.

vague dawn
zealous osprey
hazy parrot
#

Lines in code have no meaning lol

#

Or I misunderstood u somehow

dawn flower
#

can u make non persistent teams?

#

that are gone when the player leaves

subtle folio
#

Is there a meta way to change the player's overhead name? I want the username of the player and its color to a non-chatcolor entirely. Is this even possible? Prefix and suffix support non chatcolors but not the main name. Currently using scoreboard teams for that

zealous osprey
# vague dawn

I swear that worked at some point. Then do ArmorStand armorStand = (ArmorStand) stand; above and replace with armorStand.setGlowing(true);

dawn flower
#
    public static void updateTabList(Player player, Map<Player, Integer> players) {
        Scoreboard scoreboard = player.getScoreboard();
        for (Map.Entry<Player, Integer> entry : players.entrySet()) {
            String index = String.valueOf(entry.getValue());
            Team team = scoreboard.getTeam(index);
            if (team != null)
                team.unregister();
            team = scoreboard.registerNewTeam(index);
            team.addPlayer(entry.getKey());
        }
    }```
how often should i be calling this?
#

every tick, every second, every 5 seconds

subtle folio
#

works fine for me

blazing ocean
#

just set the board back to the main board when disconnecting or something

blazing ocean
dawn flower
#

or do i loop all players when a player joins

#

and resort it

blazing ocean
vague dawn
blazing ocean
subtle folio
blazing ocean
#

sort on join/leave

subtle folio
vague dawn
#

1.20.4

subtle folio
#

im on 1.21 🤷

vague dawn
dawn flower
#

so like this in pseudo code?

when join:
  loop Bukkit.getOnlinePlayers():
    # resort tablist```?
blazing ocean
#

yea

dawn flower
#

aight

vague dawn
dawn flower
#

actually should i just set the player's scoreboard to the main board at the start of updateTabList

blazing ocean
subtle folio
vague dawn
subtle folio
#

can you send over your code @vague dawn

loud herald
# hazy parrot What are u talking about

I was talking about some else. When I wanted to create a folder recursively (same as mkdirs and not mkdir) it always said that the parent folder doesnt exist so i cant create the next folder. I had to restart my pc to fix it. I wanted to show by this that i get random stupid errors that waste my time, make no sense, and are not logic

blazing ocean
vague dawn
blazing ocean
#

?paste it here

undone axleBOT
subtle folio
vague dawn
#

else if statement line 118 - there is the glow thing start 😄

blazing ocean
#

that's one hell of an elif block

subtle folio
#

god DAMN

#
if (plugin.armorstands.containsKey(player)) {``` are you sure this is evaluating to true?
#

you can add a debug statement to the method getting run

vague dawn
#

i am mostly beginner, but all other functions are working fine - setArms or setBasePlate

keen charm
#

Hey

#

If I use a sync task in an async task, will the async task wait for the sync task to continue the execution of rest of the code?

keen charm
#
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
    stuff.async1();
    Bukkit.getScheduler().runTaskSynchronously(plugin, () -> stuff.sync1());
    stuff.async2();
});
keen charm
# river oracle No

So in the code I sent above, the execution will be async1, async2 & sync1?

river oracle
#

Technically scheduling a sync task async the synced task becomes async to the async task lol

keen charm
river oracle
# keen charm ```java Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { stuff.as...

Basically in the code you sent above

The asyncrhonous task will be scheduled

Once in the queue, after one tick the scheduled runs some method. Then a sycnrhonous task is scheduled for the next tick. Then your second method runs. As far as execution order we know this much
Async 1 must finish before the synchronous task is queued. The second method however might finish before or after your syncrhonous scheduled task. For example a database call that takes 25ms. It's likely your second method will be finished before your syncrhonous call. Given each tick is 50ms and scheduling a task delays it by atleast 1 tick any operation that takes under 50ms is almost guaranteed to finish before your syncrhonous call

#

If you want to await the syncrhonous call you'll need to make a callback, however having asynchronous code rely on some arbotrary sync operation seems like pretty shotty design

keen charm
#

So after scheduling the sync task, no matter what happens in my async task, after one tick the sync task will run, even if async task is still running?

river oracle
keen charm
#

Got it

drowsy helm
#

is it possible to set players in ServerListPingEvent with reflection or will i have to listen to the packet?

hybrid spoke
#

is github only for me down?

drowsy helm
hybrid spoke
#

sucks

#

its back

vague dawn
#

Only the setGlowing is not working 😀

#

Thx all for help, i will try to mess with it

quaint mantle
#

How could I get the current player without using a second param

object Placeholder {
    private val server: Server = Bukkit.getServer()
    private val player: Player? = Bukkit.getPlayer("Hyro")

    fun parse(string: String): String {
        var parsedString: String? = null

        player?.let {
            string.replace("%player_name%", it.name)
            string.replace("%player_uuid%", it.uniqueId.toString())
            parsedString = string
        }

        server.let {

        }

        return parsedString ?: string
    }
}
remote swallow
#

please explain how you expect that to work

blazing ocean
#

why are you using server.let

#

and inferring types explicitly

quaint mantle
#

idk rad xd its not necesary ik

blazing ocean
#

let is for transforming

quaint mantle
subtle folio
#

this is why new programmers shouldn't use kotlin

remote swallow
#

and how do you expect it to know the player without a second param

quaint mantle
blazing ocean
#

well yea it's also used for that

#

but let is usually used for transformations

#

e.g. val upperName = player.let { it.name.uppercase() }

#

a bit silly to do but yea

quaint mantle
quaint mantle
blazing ocean
quaint mantle
remote swallow
#

so you expect it to pull the player out of nowhere?

quaint mantle
#

no, just asking.

blazing ocean
#

the player should definitely exist since you just do nothing if it doesn't

#

i would just val player = ... ?: error("player is not online / not found")

remote swallow
blazing ocean
#

yeah

remote swallow
#

if anything just take a player param as not null

blazing ocean
#

^

floral drum
#

You can either, create a new class for each player, every single time you want to use placeholders, or just deal with it and add a new param.

blazing ocean
#

apply is used for object configuration

#

it returns unit no?

tardy delta
#

mmh it returns this

blazing ocean
#

well it's meant to be used for object configuration

#

like applying on an item stack

tardy delta
#

nvm it does return the object called on

#

why would you want to type it

blazing ocean
#

what

#

no idea

spice bough
#

i will change my project's java version to java 8 because i want it works with all java versions (java 8,java 11, java 16...) so is there important features that not exists in java 8?

quiet ice
#

define important

shadow night
spice bough
#

multi java versions

#

because i want it works from 1.8 to 1.20

quiet ice
#

I'd say FFI is probably the only thing that can really be deemed as "important" by my books, but I'm rather extreme in my defition

shadow night
quiet ice
#

Plus FFI is Java 22, so chances are you aren't aware of it

spice bough
spice bough
shadow night
shadow night
#

Just use java 8, you won't lack that much

#

And what you will can be replaced in some other way

spice bough
#

ok thanks 👍

quiet ice
#

There's also JPMS that is kinda difficult to emulate in J8, but that's even less likely to be used

quiet ice
shadow night
#

JP-- what?

quiet ice
#

Java Platform Module System - Also known as Jigsaw

shadow night
#

Tf does that do

quiet ice
#

Give classloaders names and ensure that internals are not be accessed by other modules

#

It's the thing responsible for locking down reflection access in the java.* packages

shadow night
#

Reflection is locked down in java.*?

quiet ice
#

On modern versions of Java: yes.

slender elbow
#

http client, varhandler, text blocks, records, pattern matching, switch expresisons, nest mates, virtual threads, sealed classes, unix domain sockets, sequenced collections, and several api enhancements in methodhandles, nio, streams, concurrent collections or completablefutures, language enhancements on lambdas, and others

those are all things i'd miss across several plugins and/or other programs if i decided to use java 8

#

not applicable to plugins but we do make use of jpms at work :chefskiss:

shadow night
slender elbow
#

no

quiet ice
#

Unless you use --add-opens java.base/java.lang=ALL-UNNAMED or similar

slender elbow
#

that's why i'm listing them

quiet ice
#

Http client, varhandles, virtual threads and unix domain sockets are good ones - yeah.

#

Although unix domain sockets are rarely going to be used. And Varhandles are great for lower-level field access/write control but probably not going to be used by the average person

slender elbow
#

that's fair

river oracle
#

I love VarHandles :(

#

Can we appreciate the jvm speedups in later java versions too :3

#

Faster reflection go brrrr

quiet ice
#

MethodHandles, anyone?

slender elbow
#

:nodders:

river oracle
#

MethodHandles are also great

quiet ice
#

Java even inlines MH invocations in stacktraces - do you know how cool that is?

river oracle
#

I don't really use the reflection api much anymore

#

Even tho it's internals now is just MH

#

My only complaint of MethodHandles is "throws Throwable"

slender elbow
#

its* ☝️ 🤓

river oracle
#

Literally devastating

river oracle
cinder abyss
#

Hello, how can I add a custom biome to world gen ?

quiet ice
#

You can also do funky stuff with MH like construct loops, do try-catch logic and more purely at runtime

tardy delta
#

someone woke me up

slender elbow
#

was it your neighbour with a drill?

tardy delta
#

it was someone talking about methodhandles

quiet ice
#

Just don't get me started on runtime class transformation or maven artifact resolution ;)

tardy delta
slender elbow
#

cds?

tardy delta
#

ye

#

well from the point a second vm boots up

slender elbow
#

that is an important part, but there are several more reasons than just that

tardy delta
#

ofc

slender elbow
#

cds is very cool

tardy delta
#

anyone heard about jmod files?

#

vm/jmods dir

quiet ice
#

wait those things are actually being used?
Well that explains why that file is already 100 MiB large

tardy delta
#

what jmods or cds?

quiet ice
#

cds

tardy delta
#

its just a bunch of jsa files which are dumps from the vm

quiet ice
#

JFX in it's modern iteration is a mistake.

tardy delta
#

like ImmutableCollections.EMPTY (or smth) and stuff is initialized from there

#

in order to avoid loading trusted classes multiple times

quiet ice
#

Whatever jsa stands for

tardy delta
#

java shared archive

#

its just an mmapped "archive" shared between vms

quiet ice
#

I always assumed that was an antique feature that is no longer being used

#

And from the looks of it only my Semeru installation makes use of that file, so I'm kinda right?

inland marten
#

(Sorry for interrupting this very interesting conversation that started with reflections but has devolved for i dont even know what)

I have a plugin project that uses a lot of NMS, but its using Spigot mappings which are admittedly lackluster. Is there a way to automatically change all my references to NMS code from Spigot mappings to Yarn mappings (or Mojang mappings, but Yarn mappings are more cohesive) and then convert them back into Spigot mappings on build?

tardy delta
#

just grep for occurances of CDS.initializeFromArchive(class) in the hotspot vm

quiet ice
#

Tbh, startup times have never been really a concern for me. If they were I'd probably try to figure out how to reduce them further

inland marten
shadow night
#

Well, any that do stuff automatically

quiet ice
shadow night
#

I do have a project to use yarn with spigot in plans but it's probably gonna be out by 2026 considering how many projects I have

quiet ice
#

Remapping of source code is not a thing in spigot world - given that the only project capable of doing that is mercury and it probably has it's flaws. Plus, there is probably no good implementation for spigot

#

?mojmap

sterile flicker
#

How to prevent the dragon from launching other entities into the air and dealing damage to them(canceling entitydamagebyentity doesn't help)?

quiet ice
#

?mojmaps

#

Oh well - I'm not too familiar with the commands here

shadow night
#

?nms maybe?

shadow night
#

Is it that?

quiet ice
#

yeh

shadow night
#

I just searched #bot-commands for it lol

quiet ice
#

Though I'd have my concerns about the gradle section :p

river oracle
quiet ice
quiet ice
inland marten
#

yeah i saw that, but it looks like i have to manually refactor every instance of using nms in my code. is that correct?

quiet ice
#

Though uh, that post is meant for spigot first and foremost

shadow night
river oracle
river oracle
quiet ice
river oracle
#

Though its probably where it's mainly applied

shadow night
#

Spigot Loom

#

When

river oracle
#

Never plus I would probably not use a project you developed unless it was extensively tested

quiet ice
inland marten
#

could i compile my plugin, remap it, and then decompile it

inland marten
#

i know its a bit of a dumb idea, but i think it might work

shadow night
river oracle
shadow night
#

For example: enhanced for loops will become some var1, var2, var3 witchery

inland marten
#

yeah but thats fixable

shadow night
#

Yeah everythings fixable

river oracle
#

You can remap non compiled jars

blazing ocean
#

skill issue

shadow night
river oracle
shadow night
blazing ocean
inland marten
#

how

shadow night
inland marten
#

i havent really done anything with mappings in the past unless it was all done for me like in fabric mods

river oracle
#

Idk if there are any current tools maybe mappingio by fabric? But otherwise you'll nee to roll your own

shadow night
#

Or specialsource

river oracle
#

both of those hit a jar though

shadow night
#

oh right

river oracle
#

Generally it's easier to remap a jar because asm gives you a nice tree

shadow night
#

But that sounds a bit painful

river oracle
#

Idk having to patch my own code also seems annoying and painful

inland marten
#

where can i get the mapping files for specialsource? theres a repo that does transative mappings like spigot->yarn but it hasnt been updated in a while

river oracle
#

Why would you ever want to use yarn

undone axleBOT
river oracle
#

Inside BuildData

shadow night
#

I have a tool to generate mapping files from many other mapping files and I have ran it through so much shit it definitely has to work but it does not support tiny v2 lmao

inland marten
#

i like yarn better. it has more understandable names and i also used to make mods

shadow night
river oracle
#

Mojang provides the full mappings of names they use for methods and fields

shadow night
#

And also for all versions you built with --remapped

inland marten
#

im willing to use mojang but i prefer yarn

shadow night
#

Can we get parchment for spigot

inland marten
#

amen

river oracle
#

Just use fabrics tools

#

And roll your own nms system

inland marten
# river oracle ?stash

where can i find other versions? my project is in 1.20.6 updating it to 1.21 is the whole reason im tryna switch mappings

river oracle
inland marten
#

thanks

river oracle
#

You'll need to use the git refs to clone

shadow night
#

I had a tool for downloading spigot mappings of any version

#

lol

#

It is called very self-explainatory: spigot-mapping-downloader

inland marten
inland marten
#

but not a single one is on his github

shadow night
inland marten
#

Mb schlawg

#

i call everyone a kid

shadow night
inland marten
#

even my dog

river oracle
remote swallow
#

dont call him kid bro

shadow night
inland marten
#

perchance do you have a tool that just upgrades versions and i dont have to worry about mojang or yarn mappings

river oracle
#

That's nearly an impossible ask unfortunately

shadow night
#

I had planned a tool called spigot loom but I will most likely start in like 2026

inland marten
#

why? just do obfuscated 1.20.6-> mojang (which is pretty much version agnostic) -> obfuscated 1.21

#

that was in reply to y2k

shadow night
river oracle
#

Mojang is still adding and removing stuff

inland marten
#

yeah but a lot stays the same

floral drum
#

the day mojang stops adding and removing stuff is the day that I die

#

typo

river oracle
#

And do a replacement

shadow night
#

Lol

river oracle
#

That's what I do lmao

shadow night
#

Or don't write obfuscated

inland marten
shadow night
#

I really need to make a tool that can parse java code and then turn it into a tool to remap java code

river oracle
tardy delta
#

@shadow night hows cvn doing?

shadow night
tardy delta
#

how wonderful to hear

shadow night
#

Lmao

inland marten
#

wait this is totally off-topic, but i dont need to shade brigaider, right? its alr in the sevrer

inland marten
#

yes as in i dont need to shade it

inland marten
#

alr thanks for the clarification

#

forgot to add <scope>provided</scope>

#

wait i dont even have to worry about my source code i can just build it in 1.20.6 for eternitiy (until it inevitably breaks) and remap the compiled jar

#

its not a good idea but it can be done

river oracle