#help-development

1 messages · Page 794 of 1

slate tinsel
fossil flax
#

how can i fix this NullPointerExeption?
It says that the problem is in the main classe but i don't have almost nothing there;

public final class flycommand extends JavaPlugin {
    @Override
    public void onEnable() {
        getCommand("fly").setExecutor(new FlyCMD());
    }
}```
[flycommand] Enabling flycommand v1.0.0
[16:31:41 ERROR]: Error occurred while enabling flycommandv1.0.0 (Is it up to date?)
java.lang.NullPointerException: null
        at im.yuvi.flycommand.flycommand.onEnable(flycommand.java:10) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) ~[patched_1.8.8.jar:git-PaperSpigot-445]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:332) ~[patched_1.8.8.jar:git-PaperSpigot-445]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:407) ~[patched_1.8.8.jar:git-PaperSpigot-445]
[16:31:41 INFO]: [flycommand] Disabling flycommandv1.0.0
chrome beacon
#

Now read what it says

chrome beacon
serene sigil
#

oh fu-

#

alright

fossil flax
chrome beacon
#

FlyCMD is not the same as fly

rotund ravine
serene sigil
#

i have java 8

chrome beacon
#

Use the path to your java 8 exe

serene sigil
#

oh right

inner mulch
#

is there an in depth guide to protocollib?

fossil flax
chrome beacon
#

What part?

serene sigil
#

fuck i have to install java 8 💀

#

brb

#

which provider? oracle?

chrome beacon
#

Adoptium uwu

#

(Eclipse Temurin)

serene sigil
#

fk it ima just do oracle

#

oh nvn

#

actually

chrome beacon
weak meteor
#

Just to know

serene sigil
#

nah buildtools is goofy

#

(i just ran it with java8)

chrome beacon
weak meteor
#

oh

#

Thought it was like MySQL and MariaDB

serene sigil
#

@chrome beacon help

weak meteor
#

one is more scalable than another and stuff

chrome beacon
eternal oxide
#

what BT spigot are you building?

serene sigil
#

oh ye i did

#

nvm

#

lol

eternal oxide
#

take the pointed hat to the corner ^

serene sigil
#

kkk guys i did it

#

😄

#

thanks you guys

elfin atlas
#

Does someone know how can I roatete a display item based on yaw pitch and roll?

glossy venture
#

ok so i need to synchronize files and large binary data between nodes in a network but the network uses rabbitmq for communication and it doesnt seem like a good idea to send like megabytes through rmq

#

but i dont think you can get an ip address from a rabbitmq event

#

so i cant send it raw through sockets

#

anyone got suggestions?

lost matrix
glossy venture
#

fr?

#

in one packet?

#

or like message

#

ig i could compress the data further

#

maybe

#

as well

#

and send it in blocks

rotund ravine
#

Don’t think sending such large packets is wise

glossy venture
#

nah

#

they could be

#

but they could also not be

lost matrix
#

How about you create a protocol which only publishes a delta

glossy venture
#

u mean like the changes

lost matrix
#

yes

candid galleon
#

how would that work with binary

glossy venture
#

idk i need to send a full file at some point tho

lost matrix
glossy venture
#

detecting changes would prob be goofy

lost matrix
#

I remember there being some adapter your could run on top of RMQ which split huge messages into smaller pieces

glossy venture
#

like give an id to initiate the file transfer on a normal communication channel

#

and then do the transfer on a sep exchange

#

with the id

#

and the receiver get thsat

sudden hazel
#

I purchased a plugin awhile back and now it's no longer in my library :/

fossil flax
#

how can i create sub forlders with like languages configration?

undone axleBOT
sudden hazel
chrome beacon
#

Did you charge back or smth

sudden hazel
#

no i dont know how to do that lol

#

i have proof that i purchased it and everything

#

only thing it might be - i used a guest paypal account

exotic obsidian
#

how can i cache data on hashmap?

#

then transfer it to database

sudden hazel
lost matrix
chrome beacon
sudden hazel
#

oh

#

hmmm

#

is there a way to contact spigot in anyway

chrome beacon
#

If you've made the payment you can contact the author with proof of purchase and see if they can help you

exotic obsidian
#

I'm not worried, I want to store simple data like kills, level and deaths

chrome beacon
#

if you want to email spigot you can send to

#

?support

undone axleBOT
chrome beacon
#

Then email support

exotic obsidian
lost matrix
exotic obsidian
#

i don't know the way to transfer hashmap data to database 😄

lost matrix
exotic obsidian
#

I have a little knowledge about DB

lost matrix
#

Ah ok. So your core question is how to write an Object into a Database

exotic obsidian
#

yup

lost matrix
exotic obsidian
#

yup

#

MySQL

lost matrix
chrome beacon
lost matrix
#

Ah yeah we have that as well

lost matrix
# exotic obsidian MySQL

Before you start with that: Do you have a good reason to use a Database instead of saving your data into files?

exotic obsidian
#

i think database is better

#

than files

lost matrix
lost matrix
exotic obsidian
#

I think everyone has a server that uses the database

lost matrix
#

Thats a bold assumption

exotic obsidian
#

But why would database be worse?

river oracle
#

I feel like most smaller servers don't bother with a DB xD pepeShrug

chrome beacon
#

^

#

Honestly though this seems like a valid use case for a database

lost matrix
#

Plugins fall back to SQLite in most cases

#

If you cant make a good point about why to use a technology, then you should probably not use it.

river oracle
#

Idk seems like something that'd be better off in SQLite rather than JSON if you plan to scale

#

unless you get a ton of players though you're prob better off just sacrificing the memory

#

I mean an int takes up what 32 bits*, if you have like 50-60 plays that's practically nothing even if you have like 10-20 stats that are 32 bits each

lost matrix
lost matrix
river oracle
#

not to mention you have to make sure you may unkowningly open yourself to vulnrabilities given you don't use it carefully

lost matrix
# exotic obsidian i think database is better

You can use a DB. Just be prepared to learn a lot of new stuff.
And if you have never written data to Files before, then i would recommend you to do so.
Just storing data in files is underappreciated.

river oracle
#

wait I just thought of something are ints stored in
32 bytes or 32 bits

lost matrix
#

bits

river oracle
#

oh okay

#

I was write before

lost matrix
#

I was read before

river oracle
#

lol

lost matrix
#

Ooh you mean you where right before

river oracle
#

yeah haha

orchid gazelle
#

well I want some systems of mine to be scalable when needed in the future

#

so I just use DBs for most of the stuff when I write a complex system anyways

river oracle
#

or you just abstract and make it later you's problem CH_BigBrain

orchid gazelle
#

ehhh idk about that

#

having it is having it

#

also, SQL is sexy to view, manage and so on

river oracle
#

I use nitrite which is even sexier

#

nitrite is infact the sexiest database I've interacted with

orchid gazelle
#

what is nitrite

#

is it really that hot asf?

#

compare the sexyness of the DB

river oracle
lost matrix
#

I still prefer Bson for nosql

river oracle
lost matrix
#

What? I must be missinformed then, last time ive read about it

river oracle
#

it acutally may not be

#

I might've mis remembered

river oracle
orchid gazelle
#

SQL is great

#

:)

river oracle
#

yes it is

slender elbow
#

JVM serialization

#

:despair:

lost matrix
# river oracle yes it is

It has support for using java serialization to store their documents.
Where did you read that they use Bson?

#

Their documentation doesnt mention it

river oracle
frail crystal
#

how do i add an id for custom model data to an itemstack

river oracle
frail crystal
#

thanks

lost matrix
#

This is cool

#

This is also interesting

#

Other than that it sounds like a bootleg MongoDB 😄

river oracle
river oracle
lost matrix
#

But i like that you can start instances from java

river oracle
lost matrix
#

I only know SQLite and h2 which have that

river oracle
#

ahh I mainly use the file datbases since I have no use to scale to the size of needing one like MySQL

#

A. most minecraft servers don't need that scale no point in my coding some overkill solution
B. I just haven't felt like setting up an environment to mess around with that stuff

lost matrix
#

Oh right. So this is basically what SQLite is to bigger SQL DBs, but as an alternative to MongoDB.
Ill keep that in mind

river oracle
#

I spent like 2 weeks searching for a solution like that because I wanted to try something other than SQLite

#

and I actually quite liked Nitrite for the little testing I did Shrug

#

plus it NoSQL and plays nicely with json like storage

frail crystal
#

how can i set an attribute modifier to only work on head? and how do i hide the modifier from showing "when on head"

young knoll
#

EquipmentSlot in constructor when making the modifier

#

ItemFlag.HIDE_ATTRIBUTES

frail crystal
#

right now i have meta.addAttributeModifier(Attribute.GENERIC_ARMOR, new AttributeModifier("generic.armor", 3, AttributeModifier.Operation.ADD_NUMBER));, what exactly is the name and UUID supposed to be? am i using the name right?

knotty aspen
#

the name can be whatever you want

frail crystal
#

what about UUID?

lost matrix
#

The uuid is used to identify your modifier. You cant have two modifiers with the same ID on you.

#

Also used when removing a modifier

frail crystal
#

so i can just set it to whatever?

lost matrix
#

Sure

torpid jetty
#

Hello, I'm trying to store data for a plugin in the config.yml. I've got a method I call in onDisable() that serializes the data and writes it to config.yml. I also have it print the contents of the config to the terminal for debugging. In onEnable() I call a readData() method to read the file and get a Map<String, Object> for deserializing the data. I have a matching print command here to compare what was written and what was read, they don't match at all. The file contents seem to be what it should be, but the readData() method gets something else entirely which I'm not able to cast to the needed Map<String, Object>. I'll attach a screenshot and the code. I'd really appreciate any insights you might have.


    public void saveData() {
        getConfig().set("data", factionManager.serialize());
        System.out.println(getConfig().get("data"));
        //{invites=[], factions={787d1337-5692-448f-9ae6-c49b5881b6e1=net.sudologic.rivals.Faction@42c39711}}
        saveConfig();
    }

    public FactionManager readData() {
        if(getConfig().get("data") != null) {
            System.out.println(getConfig().get("data"));
            //MemorySection[path='data', root='YamlConfiguration']
            return new FactionManager((Map<String, Object>) getConfig().get("data"));//error is here
            //java.lang.ClassCastException: class org.bukkit.configuration.MemorySection cannot be cast to clas java.util.Map
        } else {
            return new FactionManager();
        }
    }```
lost matrix
torpid jetty
lost matrix
torpid jetty
lost matrix
#

Then... use it.

    public void saveData() {
        getConfig().set("data", factionManager);
        System.out.println(getConfig().get("data"));
        //{invites=[], factions={787d1337-5692-448f-9ae6-c49b5881b6e1=net.sudologic.rivals.Faction@42c39711}}
        saveConfig();
    }

    public FactionManager readData() {
        if(getConfig().get("data") != null) {
            System.out.println(getConfig().get("data"));
            //MemorySection[path='data', root='YamlConfiguration']
            return getConfig().get("data", FactionManager.class);//error is here
            //java.lang.ClassCastException: class org.bukkit.configuration.MemorySection cannot be cast to clas java.util.Map
        } else {
            return new FactionManager();
        }
    }
weak meteor
#

Actually, idk what could be happening

#

Maybe FileWriter isnt the proper way?

frail crystal
#

how do i give an item a custom nbt tag

young knoll
#

?pdc

lost matrix
weak meteor
#

Oh

grand flint
#

Is there way to disable vanilla biomes from loading, if I am using a custom generator such as terralith, or a config I can add to terralith?

weak meteor
#

And spigot serialization/deserialization?

lost matrix
weak meteor
#

Okay

#

Thanks

weak meteor
#

really thought gson would work by vanilla

river oracle
weak meteor
#

k

river oracle
#

oh you meant the adapter itself

#

one second I might beable to find something

weak meteor
#

no, like a tutorial

#

or forum post

#

like to understand better

#

well, finding the adapter itself will be awesome

lost matrix
river oracle
#

woh you're writing a resource already smile xD

lost matrix
# weak meteor any type of resource for this?
public class ItemStackSerializer implements JsonSerializer<ItemStack>, JsonDeserializer<ItemStack> {

  @Override
  public ItemStack deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
    TypeToken<Map<String, Object>> token = new TypeToken<>() {};
    Map<String, Object> map = context.deserialize(json, token.getType());
    return ItemStack.deserialize(map);
  }

  @Override
  public JsonElement serialize(ItemStack src, Type typeOfSrc, JsonSerializationContext context) {
    return context.serialize(src.serialize());
  }

}

Usage:

    Gson gson = new GsonBuilder()
        .setPrettyPrinting()
        .registerTypeHierarchyAdapter(ItemStack.class, new ItemStackSerializer())
        .create();
weak meteor
#

damn

#

okay

#

ig just copy and paste)?

river oracle
young knoll
#

Will that work

river oracle
weak meteor
#

i rlly dont understand whats happening

young knoll
#

Because one of the things you’ll get when deserializing is an ItemMeta instance

#

Can gson handle that

weak meteor
#

lets try

lost matrix
#

It was able to when i tried this last time (a few years back)
I think this was my first type adapter i wrote a few months after i started

#

Just make sure to register it as a TypeHierarchyAdapter and not a TypeAdapter bc the runtime class is CraftItemStack

weak meteor
#

yea

#

just did that

#

going to try

#

this been in intellij since i started it

#

i dont use kotlin and well

#

idk how to stop it

#

well

#

its empty

lost matrix
#

Alright so at least the serialization worked.
Your FileWriter is not being flushed.
Just serialize it to a String and write it to your file.

weak meteor
#

its weird, cause when i do sout(gson.toJson(this)) it does show smth

weak meteor
#

got it, thanks

#

Where can i learn how to write this serializers?

young knoll
#

They are pretty similar to bukkits configuration serializable

#

in fact it should be possible to make a general ConfigurationSerializable adapter

lost matrix
#

Gson can handle the rest of your data pretty easily

vestal moat
weak meteor
#

oh

#

well, idk maybe for other projects seem useful

torpid jetty
# lost matrix Then... use it. ```java public void saveData() { getConfig().set("da...

Thanks for your help so far. It seems there is a new error a bit earlier in the code, in the createCustomConfig() method. It seems to be failing to deserialize an object, I would assume the FactionManager. I believe this is a fairly standard way of doing it, most tutorials I've seen have nearly the same code here. Any ideas?

    public void createCustomConfig() {
        File customConfigFile = new File(getDataFolder(), "config.yml");
        if(!customConfigFile.exists()) {
            customConfigFile.getParentFile().mkdirs();
            saveResource("config.yml", false);
        }
        customConfig = new YamlConfiguration();
        try{
            customConfig.load(customConfigFile);//error here
            //org.yaml.snakeyaml.error.YAMLException: Could not deserialize object
        } catch (IOException | InvalidConfigurationException e) {
            e.printStackTrace();
        }
        factionManager = readData();
    }```
lost matrix
weak meteor
#

When slot is empty, ItemStack#getType will return null or AIR?

torpid jetty
lost matrix
weak meteor
#

Okay

#

im doing this:

public static boolean isEmpty(Inventory inventory){
        for (int i = 0; i < inventory.getContents().length; i++){
            if (inventory.getContents()[i] != null){
                return false;
            }
        }
        return true;
    }```
weak meteor
#

oh its okay

#

just an error on me

vestal moat
#

I wonder if an event gives a modern Material and a plugin tries to compare it with a legacy material, does it return true?

#

If so, how???

wet breach
#

because its still a material? only difference really is in the naming

lost matrix
#

bytecode shenanigans iirc

young knoll
#

Legacy materials are converted on plugin loading iirc

lost matrix
#

*Through bytecode shenanigans 😄

river oracle
#

yeppers!!!

#

can't wait to add even more!!!

#

Bytecode fuckery for enums coming soon™️

young knoll
#

Don’t worry about the legacy support classes in craftbukkit

#

They are clever and somewhat interesting to study

lost matrix
#

Lets do 1.13 two point 0.
Just bomb everything and call it legacy

young knoll
#

But they may also be against the Geneva Conventions

vestal moat
#

== only works with exactly the same objects

river oracle
#

it does conversions

vestal moat
#

It can do it after Material is loaded?

young knoll
#

Yes

vestal moat
#

Alright, thanks

river oracle
#

iirc it works by editing your jar file directly right?

young knoll
#

It does it to the plugin bytecode

young knoll
#

It doesn’t actually edit the file, it edits the bytes as java loads classes

lost matrix
#

Do this: Material goodIdea = Materia.valueOf("LEGACY_WOOD");

river oracle
young knoll
#

Instrumentation is cool

frail crystal
#
meta.setCustomModelData(Integer.getInteger(entry.getKey()));
                    meta.setDisplayName(entry.getValue().toString());

                    stack.setItemMeta(meta);
                    player.sendMessage(stack.getItemMeta().hasCustomModelData() + "k");```
why does the sendMessage return false? i just set it?
#

entry is entry from a map

weak meteor
#

Im trying to do a deserializer from json, first:
what should i use?

#

Cause i would like to use Reader json, Type but idk what Type really is

river oracle
#

Type is just a class

#

or a gson TypeToken given you're using a complex type

weak meteor
#

So Type is lets say, my object.class?

river oracle
#

yeah prey much

weak meteor
#

Okay and that will return T

river oracle
#

so for the case of an item stack it'd be
ItemStack[] stacks = gson.fromJson(new FileReader(file), ItemStack[].class)

weak meteor
#

whats T?

river oracle
#

its a generic so

weak meteor
river oracle
#

if you put in ItemStack[] it'll return ItemStack[]

weak meteor
#

Okay, thanks

#

This is not the best implementation isnt it?

#

i feel like thats the worse way to do it

wet breach
#

I wouldnt worry too much on implementation and first just get it working

#

Easier to optimize when something is working then when it isnt lol

weak meteor
#

im testing it

#

okay

#

at least deserialization works

#

my code for giving kit to player doesnt

lost matrix
# weak meteor

Why do you create your kit and then copy all values into a new kit?
Cant you just use the intially created kit?

umbral ridge
#

Hey guys do any of you have your own jar api? what for? Some sort of wrapper? or what

umbral ridge
#

Was kind of thinking of creating my own for updates, java plugin updater sort of stuff

#

I already have an api endpoint on my subdomain

#

So yeah wrapper would be kinda cool

lost matrix
#

umbral ridge
#

Ok thanks for the answer

#

😌

hazy parrot
#

Tbh seems like you are just throwing words

lost matrix
young knoll
#

Yeah idk

#

Like an extended api jar you shade? Or

lost matrix
#

I think he wants to download updates for his plugin and patch his jar or something

young knoll
#

Spicy

lost matrix
#

Interesting snapshot

slender elbow
#

finally

molten hearth
#

is block hardness client sided

young knoll
#

It’s both

#

But when it comes to breaking the client value is used

#

Kinda

lost matrix
#

Hm? You mean for the cracks, right?

young knoll
#

Basically if you increase the server side hardness the client will have to break the block multiple times for the server to actually let them break it

lost matrix
#

It used to be kinda nice. But now its weird with client predicting stuff.

knotty aspen
#

with blocks having a codec now there is a realistic chance that gets changed in the not-so-far future

young knoll
#

Data driven blocks plz

river oracle
#

how much ram do you guys give intellij, mine somehow consistently runs out of ram even though I give it 4gbs

knotty aspen
young knoll
#

They better be

#

Or I’ll riot

#

I guess it isn’t much of a riot if it’s just me

lost matrix
knotty aspen
#

Riot is really good at taking existing concepts and slightly improving them and making them more accessible. I don't think Minecraft needs that

young knoll
#

Took me a second

#

Hey riot is kinda behind hytale

#

That epic new sandbox game

#

That was announced 50 years ago

lost matrix
#

Ah right. They ditched java and went with C++
They better develop the most insane tools for it or there is 0 chance that it comes even close to MC

knotty aspen
#

following the same formula. if they make it free-to-play they also have done the "more accessible" part with Hytale

#

And I would bet that their MMORPG also ends up like this

young knoll
#

Gotta get that new legendary hytale skin

lost matrix
#

That was half a decade ago i think

knotty aspen
#

I was a bit hyped when they hired a bunch of former GW2 devs from ArenaNet

#

but most of them quit by now, and the lead dev (former WoW lead dev) also quit. and I wouldn't be surprised if its partly because Riot plays this very save and isn't gonna innovate anything

#

I mean, its a strategy that works very well. Its just so boring

young knoll
#

Sounds like Microsoft with minecraft

knotty aspen
#

Since 1.19 they have done a really good job imo. Mojang is just really really slow

young knoll
#

Yeah I read that it’s because it’s hard to get things approved by the overlords

#

But what they are making is still really cool

slender elbow
remote swallow
#

ur just bad

young knoll
#

I think I give eclipse 2

vocal cloud
#

I give it 10gb

slender elbow
#

on my desktop I have it at 2, on my work craptop (8 GB) I can give it 1 lol

remote swallow
#

Add Jishuna*

river oracle
remote swallow
#

why are you in craftbukkit josh

slender elbow
#

Add Jishuna*

river oracle
#

my intellij can run out of ram in a few minutes

#

then its usage just kills me

slender elbow
#

I have like 5 plugins enabled lmao

river oracle
slender elbow
#

a few of the built-in ones (maven, gradle, terminal, kotlin) and nyan cat progress bar (very important)

young knoll
remote swallow
#

which jar is the server craftbukkit-ver or craftbukkit-ver-bootstrap

young knoll
#

The big one

#

Believe it’s bootstrap

remote swallow
#

intellij doesnt show me sizes

river oracle
#

disabled every plugin and I'm still leaking memory faster than you can say "leaking memory"

young knoll
#

Sounds like me earlier when my plugin tried to index the entire server root

remote swallow
#

most advanced thing in a patch file

#

do you think md will merge

remote swallow
#

new jetbrains ide dropped

young knoll
#

Yeah the world folders have a lot in them

#

Lul

remote swallow
#

y2k is femboy confirmed

young knoll
river oracle
remote swallow
river oracle
#

no

young knoll
#

Ha

#

Bad

remote swallow
exotic obsidian
#
        @EventHandler
    public void onQuit(PlayerQuitEvent e) {
        Player p = e.getPlayer();
        PlayerStats playerstats = Main.getInstance().data.getPlayerStatsFromDatabase(p);
        Collection<Integer> values = map.values();
        for(Integer value: values) {
            playerstats.setKills(playerstats.getKills() + value);
            Main.getInstance().data.updatePlayerStats(playerstats);
        }
    }
#

is this right way to move hashmap data into database?

young knoll
remote swallow
#

how many

#

pairs

young knoll
#

1

remote swallow
#

why only 1

#

get choco some for christmas

molten hearth
#

is there like

#

a decent nms guide for gradle

remote swallow
#

one of colls nms projects

molten hearth
#

say no more

#

stealing the code as we speak

#

i clearly chose the right project

remote swallow
#

do jishlib or somethng

molten hearth
#

why does bro nest nms like 3 times

remote swallow
young knoll
#

Ooh that’s the cursed one

molten hearth
#

its okay im trying to even understand where tf nms is defined in this gradle file

remote swallow
#

paperweight dev bundle

molten hearth
#

well im not using paper though-

young knoll
#

There’s no special source for gradle

#

Well there are some third party ones

#

But userdev is easier

remote swallow
#

i have a project somewhere with one

#

and itworks

molten hearth
#

share 🕵️

#

im trying to like

#

get the jist of what the fuck is so weird about adding nms

#

here i thought you quite simply include the nms jar as a gradle dependency

#

but i see people having all of these subprojects and stuff just for nms

remote swallow
young knoll
#

Subprojects are just for versioning

molten hearth
#

bro actually only has compileOnly "org.spigotmc:spigot:1.20.1-R0.1-SNAPSHOT:remapped-mojang"

#

what da hell am i missing 😭

remote swallow
#

the parent build.gradle

molten hearth
#

yea but like

#

on god what does that even lmao

#

it looks like uh

worldly ingot
#

My guy are you writing in Arial font?

remote swallow
#

its the spigot dep for remapped mojang

molten hearth
#

it just implement subprojects

remote swallow
worldly ingot
#

I'm revoking your PR privileges

remote swallow
#

oh no

#

not like any ill do will get merge

molten hearth
worldly ingot
#

At least if you used Eclipse I would understand. But Arial font?

molten hearth
#

i guess ill give dat a try thanku

remote swallow
#

make sure to run buildtools with --remapped and have the plugins setup

remote swallow
#

anyway

weak meteor
#

idk

#

it works

remote swallow
#

how do you know its arial

#

you should get ur pr privlages revoked

weak meteor
#

i know its not the best implementation but it works for now

molten hearth
#

but getting the NMS imports in the ide

weak meteor
remote swallow
#

@worldly ingot is this better for you

worldly ingot
weak meteor
#

mmm

#

i copied 7smile7 code

#

!

worldly ingot
#

stinky

remote swallow
#

choco do you like my jetbrainsmono nerd font mono

weak meteor
#

omg

#

import is not even used

#

now, clean

#

but whats bad with com.sun?

worldly ingot
#

They're internal packages not exposed by Java

#

If you're using them you're probably doing something wrong lol

weak meteor
#

oh

#

okay

#

whats the difference between returning false or true in onCommand?

young knoll
young knoll
weak meteor
#

oh

#

okay

#

thanks

round finch
remote swallow
#

?paste

undone axleBOT
round finch
#

where i find the newer packets names?

#

this is v1_17_R1 packets

molten hearth
#

alright 15 billion years later i have this remapped jar

#

here is where the fun begins (i do not see how your gradle build file in any way mentions a jar file)

remote swallow
#

when you run buildtools it installs it to maven local

molten hearth
#

oh shit i see

#

about maven local since ive never used it

#

is it sorta like

#

just there

#

or do i need to run it manually

remote swallow
#

its just there

#

its files on ur pc

#

/userhome/.m2

#

@worldly ingot is this better for you

molten hearth
#

epic

#

yeee i see it there

#

im guessing i should be using the uh just spigot one though

remote swallow
#

ye

molten hearth
#

yea well

#

maven doesnt find it

#

💀

#

do i need to manually include the local maven repo

remote swallow
#

ur dependencies block should have mavenLocal() in it

molten hearth
#

oh thanks

#

WHOOO ITS INDEXING IT

#

WHOOOO THE TUTORIAL I WANTED USES A REMOVED NMS METHOD

#

what is life anymore

remote swallow
#

are you sure it has been removed just not relocated

weak meteor
#

reload is literally save and load again?

molten hearth
#

sendPacketNearby

remote swallow
#

oh packet stuff

#

no clue about packet stuff

molten hearth
#

unless there's better resources

#

i gotta yolo it and suffer

round finch
#

nvm lol

river oracle
#

no

#

oh

molten hearth
#

thanks

river oracle
#

anyways its really dumb how they implemented chat signing as most servers style messages

#

obviously that's not mojangs job and they probably just use the signing thing as a legal cop out

#

but its how it ended up being implemented

#

they used to have the thing where you could view changes the server makes to the messages before you send them, but I'm assuming that had too many exploits or something

wet breach
#

Idk whose these people that voiced wanting it but they are quite dumb regardless for trying to force it on everyone

river oracle
#

it wasn't implemented in a way where it could

bitter rune
river oracle
#

what what does that even do

bitter rune
#

supposed to expand out 3 times in a x,y,z + 1 and log the blocks that are wood defined blocks

river oracle
#

that loop does nothing

#

it just repeats some arbitrarily random code 3 times

bitter rune
#

wasnt the code, it was the fact i put Location location in a public void that checks for block breaks and never used it

river oracle
#

that code still doesn't do anything

#

useful atleast

#

though I'm sure you know that?

bitter rune
#

im trying to remember without googling docs or anything. i get its something people use but i have a real bad memory so i am going to to this entire class without looking anything up

frail crystal
#

i have a config.yml

'1':
- 'this is a hat name '
- rare

how do i only grab one of these strings

#

i used Entry.getValue() but it grabs the whole thing

river oracle
frail crystal
#

nothing

#

i guess

#

didnt know you could do that, im just winging it

river oracle
#

?jd-s

undone axleBOT
river oracle
#

you got a lot of methods to work with

frail crystal
#

how can i make it so you can equipt an item in the helmet slot like normal

rigid otter
#

If I am on an offline-mode server, is the player uuid still useful?

eternal night
#

No

#

Nor is an offline mode server lul

wet breach
tall dragon
#

if a competant auth plugin is used uuids can still be usefull

#

plugin development wise

bitter rune
#

do our hosters have the say when it comes to what java version we can compile with? when i try to upload it with the newest java i get console errors

rotund ravine
#

Sure

#

Get a new host or tell them to update

bitter rune
#

been using shockbyte for years i can wait

eternal night
bitter rune
#

that works lol

hybrid turret
#

Can I make IntelliJ ignore certain characters when spellchecking?

Like for example: I want IntelliJ to read &ccannot as cannot

shadow night
#

You can add them to the dictionary

hybrid turret
#

So that I have to add them every single time i write something with a color code?

shadow night
#

¯_(ツ)_/¯

ivory sleet
#

idk if there are any other alternatives

eternal night
#

I wonder if the Minecraft Dev plugin touches that

hybrid turret
#

Is that an actual "I wonder" or a sneaky way to tell it does? xd

eternal night
#

infact a "I wonder" xD otherwise there would be a kekwhyper behind my statements

hybrid turret
#

Ahhhhhh ic

#

Yeah it seems like it doesn‘t

eternal night
quaint mantle
#

How to spawn/move 'pet' entity to back of player?

#

(noob at math)

pseudo hazel
#

you mean that they follow the player?

quaint mantle
#

Yeah

pseudo hazel
#

set the move target to the plauer position

quaint mantle
#

Pets can be multiple.

#

Its like hypixel way

#

Heads

pseudo hazel
#

idk the hypixel way, but im sure just setting the target should work

#

they may have to be actual living entities though

#

but im not sure

#

never done that

wet breach
quaint mantle
#

Use sharedhost if you want run a server for cheap otherwise use dedic

#

😇

grim hound
grim hound
# quaint mantle Heads

Move them to always be following and facing the player whenever he's like 1.5 blocks away

#

In a repeating task perhaps

#

Does anyone

#

Know the Translator api that was used here?

grim hound
#

So it's google

ivory sleet
#

i believe

grim hound
#

But isn't it really limited?

#

To requests per day

ivory sleet
#

prob ye

grim hound
#

Is there a way to extend that limit?

#

Except paying

ivory sleet
#

prob not :>

#

maybe find some other api for it

#

idk

grim hound
#

What about making many accounts?

#

It ain't hard, since they can be botted

ivory sleet
#

oh pooling api users?

#

ugh idk

#

maybe they ip check it as well

#

or sth, idk

#

but prob against their ToS also lol

grim hound
lost matrix
#

Why do you think you would need that many requests?

#

One request per newly installed instance.

ivory sleet
grim hound
lost matrix
#

Im assuming you want to auto translate your plugin messages?

whole lintel
#

he can just have them pre-translated

ivory sleet
#

yea thats the usual way

whole lintel
#

he can use gtranslate to automatically do it

ivory sleet
#

u'd use crowdin along with resourcebundles or sth

whole lintel
#

then he just pulls out from the file..etc

valid burrow
#

how would yall go on about making an artifical hitbox?

#

can think of various was not sure which ones most efficen

#

efficent

pseudo hazel
#

for what purpose, like for collisions and stuff?

inner mulch
#

Hello, are there any Up to date, in depth guides to protocollib?

ivory sleet
#

i believe javadocs is a thing at least

#

else these standard guides ought to get u started decently well :)

valid burrow
#

player/entity hit entity

inner mulch
#

Im struggling to set a Fake armor stands metadata :(

lost matrix
inner mulch
#

1..20.1

lost matrix
# inner mulch 1..20.1

Salvage what you need

  private PacketContainer createDataPacket() {
    PacketType type = PacketType.Play.Server.ENTITY_METADATA;
    PacketContainer packet = ProtocolLibrary.getProtocolManager().createPacket(type);

    packet.getIntegers().write(0, this.entityId);

    WrappedDataWatcher.Serializer byteSerializer = WrappedDataWatcher.Registry.get(Byte.class);
    WrappedDataWatcher.Serializer chatSerializer = WrappedDataWatcher.Registry.getChatComponentSerializer(true);
    WrappedDataWatcher.Serializer boolSerializer = WrappedDataWatcher.Registry.get(Boolean.class);

    List<WrappedDataValue> dataValues = new ArrayList<>();

    Byte flags = 0x20;
    dataValues.add(new WrappedDataValue(0, byteSerializer, flags));

    Optional<?> optChat = Optional.of(WrappedChatComponent.fromChatMessage(this.text.replace("&", "§"))[0].getHandle());
    dataValues.add(new WrappedDataValue(2, chatSerializer, optChat));

    Boolean nameVisible = true;
    dataValues.add(new WrappedDataValue(3, boolSerializer, nameVisible));

    Byte armorStandTypeFlags = 0x10;
    dataValues.add(new WrappedDataValue(15, byteSerializer, armorStandTypeFlags));

    packet.getDataValueCollectionModifier().write(0, dataValues);

    return packet;
  }
inner mulch
#

Thank you :) how did you learn this?

chrome beacon
#

wiki vg, packet wrapper and just taking a look what's in an existing packet should be all you need

heavy mural
#

Hey,

[10:56:42 INFO]: org.bukkit.craftbukkit.v1_20_R2.scoreboard.CraftTeam@71662d53
[10:56:42 INFO]: org.bukkit.craftbukkit.v1_20_R2.scoreboard.CraftTeam@71662d53
[10:56:42 INFO]: false
[10:56:42 INFO]: false```

My plugin is causing an issue where players can hit eachother although, they are in the same team and friendlyfire is false.

I have added a number to check every event that is triggered within the plugin to see if there is any interference.

I proceded to remove Event 12 which is:
```onPlayerFight(EntityDamageByEntityEvent event)```

This brings me to:
```[10:56:42 INFO]: org.bukkit.craftbukkit.v1_20_R2.scoreboard.CraftTeam@71662d53
[10:56:42 INFO]: org.bukkit.craftbukkit.v1_20_R2.scoreboard.CraftTeam@71662d53
[10:56:42 INFO]: false
[10:56:42 INFO]: false```

Players can still hit eachother while being on the same team. What could be going wrong?
lost matrix
chrome beacon
inner mulch
heavy mural
#

Is it interferring with my mapped jar?

lost matrix
chrome beacon
heavy mural
# lost matrix Print out the members of each team
[11:03:56 INFO]: org.bukkit.craftbukkit.v1_20_R2.scoreboard.CraftTeam@7c013c38
[11:03:56 INFO]: org.bukkit.craftbukkit.v1_20_R2.scoreboard.CraftTeam@7c013c38
[11:03:56 INFO]: [Antwarpe, Zodra]
[11:03:56 INFO]: false
[11:03:56 INFO]: false
[11:03:56 INFO]: [Antwarpe, Zodra]```
#

They are equal

Is it supposed to use org.bukkit.craftbukkit.v1_20_R2.scoreboard.CraftTeam?

lost matrix
#

Where does the false come from and why is it printed twice?

heavy mural
#
      System.out.println(s.getEntryTeam(event.getEntity().getName()).allowFriendlyFire());

System.out.println(s.getEntryTeam(player.getName()).allowFriendlyFire());```
#

checks if the team of both players have friendlyfire on false

lost matrix
#

Have you any other plugins installed?

heavy mural
#

Yes I do have many plugins installed, however if I remove mine and then start the server, then I can not attack a teammate anymore (which means it works)

chrome beacon
#

Sounds like another plugin is using packet teams

#

wait I read that wrong ._.

lost matrix
#

I dont follow this one...

#

Ah ok

lost matrix
chrome beacon
#

Show us what you're doing with the teams

#

?paste

undone axleBOT
heavy mural
#

Okidoki

lost matrix
#

If you are mixing IO and bukkit methods like that, then you gonna produce game breaking lags in no time

heavy mural
echo basalt
#

runTaskAsync bro

lost matrix
#

Is everything inside your runTaskAsynchronously thread safe?

lost matrix
echo basalt
#

Basics #2

lost matrix
echo basalt
#

And also #3

heavy mural
heavy mural
#

Players are placed in their proper team else defaultteam

lost matrix
heavy mural
#

I could run it sync, just to check

lost matrix
#

That... huh?

echo basalt
#

rip sql perf

heavy mural
#

ya sql performance will go rip, but we are trying to debug here for now

lost matrix
#

What do you mean sql performance? It runs the same sync as async

echo basalt
#

I mean tps

lost matrix
heavy mural
lost matrix
heavy mural
#

Wouldn't it trigger errors that are not shown if async?

lost matrix
#

Again: Threading problems occur sporadically and are non-deterministic

Your code might run just fine a few hundred times and then suddenly crash the plugin

echo basalt
#

Usually async exceptions are hidden if using CompletableFutures

#

Doesn't mean that they don't occur with another method

lost matrix
#

Its not even that exceptions are being hidden. But conditions for a concurrent modification of
collections for example, are only met sometimes.

echo basalt
#

Exactly

rough drift
#

CopyOnWriteArrayList go brrrrrrrrrrrrrrrrrr /s

echo basalt
#

ConcurrentHashMap.newKeySet go brrrrrrrrrrrrrr

rough drift
#

synchronized go BRRRRRRRRRRRRRRR

echo basalt
#

Something like that

#

Well, I'm going to get breakfast

#

Just woke up all crusty after travelling for 3 days

slender elbow
#

enjoy

heavy mural
lost matrix
#

So simply enabling your plugin lets players attack teammates

heavy mural
#

ya

#

more specifically Setting up their team again onJoin (Or leaving it onQuit) is disabled now

#

so the issue has to be in there

lost matrix
#

Then show some code

heavy mural
#

ya, I'm just narrowing down where the error is now, sec.

lost matrix
#

I hope you dont do anything async there

heavy mural
#

well...

#

Issue is INSIDE setupPlayer (which I already shared above)

lost matrix
heavy mural
#

had connect protection first time I checked my bad :/

lost matrix
#

Why do you use teams in the first place?

heavy mural
#

it had most attributes I was in need of + using displayname in scoreboard was easier to do.

#

it also had "can not attack teammates", which worked, but now it does not anymore. Last time I checked was 2 months ago.

#

I could however just add that players on the same team can not attack eachother in:
EntityDamageByEntityEvent

#

it just feels weird to do so

lost matrix
#

Thats a workaround

heavy mural
#

ya

lost matrix
#

Idk, not enough code to look at, and the snippets you sent could cause this issue in hundreds of indirect ways.
Cant really help you with this.

heavy mural
#

That's fair, ty anyway :o

lost matrix
echo basalt
lost matrix
#

Ah right

#

Wait

#

Isnt default hashCode the memory address?

echo basalt
#

That would violate the second term of the contract

lost matrix
#

How? The default equals method uses ==

echo basalt
#

ah yes

#

It could be a possibility

lost matrix
#

Yeah it uses the memory address as hashCode on default

#

*virtual one ofc

echo basalt
#

Don't see any ref to that

lost matrix
#

Idk, was in the oracle docs

echo basalt
#

I mean the impl details

slender elbow
#

it can actually be sequential as well :^)

young knoll
#

I have it on good authority that the default hashcode is actually 7

slender elbow
lost matrix
grim hound
lost matrix
lost matrix
grim hound
#

But not a blocking one

grim hound
young knoll
#

I just provide a file for that

#

I’ve been thinking of trying to do it on the packet level but I’d have to work with components

grim hound
young knoll
#

Yeah I think that's good enough for most users

#

You could even provide some pre-setup files for other languages

grim hound
#

But I'm trying to make a plugin that translates the messages sent to the user

young knoll
#

That would be kinda neat

#

You could apply it universally to everything sent to the user

grim hound
#

Yeah

#

But the only plugin that does something similar is paid

young knoll
#

Yeah I imagine you'd need a paid translation api for it

#

Or force users to provide one

quaint mantle
#

How translation will help detect bad words?

trim lake
#

Its somehow possible to set amount of ingredient needed fo recipe? This is not working. Item can be crafted only with one item.

recipe.addIngredient(new RecipeChoice.ExactChoice(new ItemStack(material, amount)));
lost matrix
trim lake
lost matrix
young knoll
#

Yeah

#

You need to make a custom system to support stuff like that

trim lake
#

I just need 10 of item and another 10 of other item to craft custom item. Well there is support for ItemStack so I just think that will be possible if I set amount in ItemStack and looks like is not.

#

Thanks

heavy mural
#

I could either remove the entire player scoreboard system and use packets to fix tab priority (and the whole system behind it), while keeping the main scoreboard.

OR

Use the workaround to simply check it in entityHitByEntity.

#

Probably going for the latter

trim lake
lost matrix
#

Scoreboards are kinda bad. I always avoid using them, and i havent used them for ages.

lost matrix
young knoll
#

There is probably an api somewhere for multi-ingredient recipes

lost matrix
#

I feel like this could be patched in nms

young knoll
#

probably, yeah

trim lake
#

stupid... But thats should not be hard to make it work... Just check if there are ingridients in craftin inv and than craft item.

weak meteor
#

do i need a inventory setup?

#

like with Map<UUID, Inventory> and stuff?

lost matrix
weak meteor
#

ig if i have only 1 or 2 inventories isnt necessary

trim lake
lost matrix
weak meteor
#

and InventoryClickEvent has smth to do with that?

lost matrix
#

Usually you would write this differently by introducing your own class and them map the vanilla inventories to them
Map<Inventory, Handler> where Handler is your custom class

weak meteor
#

Okay thanks

#

let me see

young knoll
#

Maybe I should make an api for this

#

:p

weak meteor
young knoll
#

It's a shame the RecipeChoice interface isn't usable by plugins

rough drift
#

what do you mean?

lost matrix
#

Isnt it just a Predicate<ItemStack> really

rough drift
#

You can make both an itemstack choice and a material choice

lost matrix
rough drift
#

ah

weak meteor
lost matrix
#

iirc the crafting system is composed of a ton of predicates.
So adding the amount to a predicate would be easy. The main problem is deducting ingredients from the matrix

weak meteor
#

should i check it on handler or in the listener?

lost matrix
young knoll
#

The only reason you can't make custom recipe choices

#

Is that we don't know how to handle them if the owning plugin gets disabled

slender elbow
#

imagine the client having to ask the server for every item placed on the crafting grid if it's a valid recipe

lost matrix
#

Weakreferences 😄

slender elbow
#

sounds awful for ux

young knoll
rough drift
#

Make recipe registration per plugin, when a plugin is disabled remove the recipe, easy enough

weak meteor
weak meteor
#

or smth like that

lost matrix
rough drift
young knoll
#

But what if plugin A provides a custom RecipeChoice and plugin B uses this choice

#

Then plugin A gets disabled

lost matrix
weak meteor
#

k thanks

rough drift
#

Plugin B is a depend of A, if a plugin depends on another plugin and that other plugin gets disabled every depending plugin should be disabled as well

young knoll
#

True

lost matrix
# weak meteor k thanks

But what do you mean by json files?
You should load all your kits into memory when the server starts and then save your kits back to json when the server stops.

young knoll
#

Idk, I know MD had concerns in the past

#

Good luck finding them with discord search :p

rough drift
#

@lost matrix periodically saving is better in case of abrupt shutdown

#

yeah no won't even bother lmao

lost matrix
#

You can do that in addition

rough drift
#

fair

#

Anyways, back to working on my optimizer

lost matrix
young knoll
#

Yeah I guess

#

And then yeet all recipes that are using it

lost matrix
#

I just dont like the idea that crafting is now loaded with checking for references in addition to the Predicates.

rough drift
#

What if instead of all of that

#

you just removed recipes which are of a plugin when that plugin is disabled

#

so like

X registers 14 recipes, when X is disabled unregister all of the 14 recipes

#

*Assuming that depends (Plugins directly depending, soft-depending or using X's classes) of X are also disabled when X is disabled

lost matrix
#

But Plugin X could use a RecipeChoice from Plugin Y.
Then Plugin Y gets unloaded and suddenly Plugin X breaks.

rough drift
#

in this case if Y unloaded X would unload too

#

it makes sense

lost matrix
#

How would you track references like that?

rough drift
#

Probably a dependency tree?

#

like

A
| B
\ C
\ D

If D gets unloaded, C and A also do, but not B because B is not a depend of A or C or D

lost matrix
#

Who builds this? Do you want to do bytecode inspection and build dependency trees for each plugin?

rough drift
#

No?

lost matrix
#

Then how do you find out which plugins use classes from other plugins?

rough drift
#

Basing on my knowledge:

  • Plugins have depend & soft depend
  • There is something in console which can detect it, as it prints "Plugin A is using a class of Plugin B even though Plugin B is not a depend or soft-depend of Plugin A"
lost matrix
#

Hm, not sure if i would rely on devs having to not forget dependency entries in their plugin.yml
But its a possibility.

rough drift
#

That's why if a plugin calls something from another class it would mark it as a dependency

#

it can be done at plugin runtime it doesn't really matter

lost matrix
#

The next problem: Adding plugin references to recipes wont stick because they get translated from spigot to nms and then get discarded

rotund ravine
#

Skills issue

rough drift
young knoll
#

The choices must get kept

#

So you could hold the refrence in there

rough drift
#

^

lost matrix
#

So we are back at embedding them in the choices again smileybolb

trim lake
#

Okey making recipes system suck 😄 I get what you ment...

@EventHandler
    public static void prepareCraftEvent(PrepareItemCraftEvent event) {
        System.out.println("event");
        Recipe recipe = event.getRecipe();
        System.out.println(DataManager.getCustomRecipes().containsValue(recipe));

    }

Im getting false here but the result is corrent in crafting table

young knoll
#

Use the recipe key to identify it

lost matrix
#

^

young knoll
#

Rather than the entire object

trim lake
#

But I cannot get key from Recipe

lost matrix
#

For some reason you need to check if its instanceof Keyed

#

Because... some recipes are not? Idk. Confused me as well.

#

Ah MerchantRecipe is not for example

#

Which is the only exception

river oracle
trim lake
#

Hmmmm, Im saving my recipe as Recipe shoudlnt be issue I gues... I have only ShapelessRecipe but I guess I can cast Recipe to it

young knoll
#

yeah MerchantRecipe being a recipe was a dumb choice

#

But tis too late now

river oracle
#

MerchantOffer, EnchantmentOffer

young knoll
#

What if we just add a dummy key to merchant recipe so all recipes can be keyed

lost matrix
#

Let MerchantRecipe extend Enchantment 🙂

young knoll
#

😅

river oracle
#

I wonder what md would think of that

young knoll
#

/shrug

upper hazel
#

how can you change the texture of a note block depending on its instrument property in json? Need to specify the tool type?

#

i mean if note blocks have so many states

young knoll
#

(goes in assets/minecraft/blockstates)

upper hazel
#

a powered note block and an unpowered one has 25 notes, which means only 50 states, but how to indicate the remaining 750

young knoll
#

via the instrument

#

See my example

upper hazel
#

does it get the tool coordinates and check the type?

#

oh no

#

i see

#

thenks

river oracle
upper hazel
#

the tool type in json is the same as in bukkit api or will have to be converted

river oracle
#

without ruining the noteblock

upper hazel
#

no one i gess

#

but who use note block lol

#

Studying how textures are created, I get the feeling that a json file is like a markup language like html

young knoll
river oracle
#

Too their fullest potential

young knoll
#

Well, if you do it my way

#

1149

river oracle
#

Dayum

#

Display entities though muscleright

young knoll
#

Note blocks never lag tho :p

river oracle
#

True

young knoll
#

But yes displays are cool

#

You can do no resource pack custom blocks with itemdisplay and custom heads

river oracle
#

Wonder how many display entities it'd take to lag

young knoll
#

Depends on your machine

#

I got to about 2k before it started to be noticable

river oracle
#

Things I want to look at

young knoll
#

Go ask sodium :p

river oracle
#

Did they optimize them or sum?

young knoll
#

Idk but they seem like the people to do it

#

Or optifine but ew closed source

river oracle
#

Ahh

#

Optifine is dead

#

Fabric mods are better now adays

upper hazel
#

what happens if you use the player’s skin as a texture? Then the texture pack probably won't be needed

sterile token
#

I always why the Scoreboard have numbers on the right?? Why can't directly use an array of elements, it already has indexes

upper hazel
#

Is there any website convenient for creating json “code” for minecraft models?

worldly ingot
#

and scores are ordered from highest to lowest

sterile token
#

Hnmn

worldly ingot
#

It's a scoreboard after all :p

sterile token
#

And what males that the diferente

#

🤔

#

Can just contain a list of objetives and order them vía index

ivory sleet
#

It could, but that’s not how mojang has decided to implement it I suppose :>

weak meteor
#

just for now testing, loading everything from json everytime i need

sterile token
weak meteor
river oracle
#

today is the day for the octree

ivory sleet
#

I so have some killing time rn

rotund ravine
#

Hide conclube

ivory sleet
#

Lol

river oracle
#

wtf bro what did time do to you

ivory sleet
#

Everything

river oracle
#

ahhh anyways I did a tad of research on this legendary Octree and I don't really get how it helps me ig. Most exmaples I saw provided a range for the octree

#

but minecraft worlds are boundless

ivory sleet
#

Well, I thought about it yk, idk if you actually want to use octrees, cause I reckon a map per world or sth is enough for u

#

But anyway it used in worldguard iirc

river oracle
ivory sleet
#

To just represent regions (maybe im wrong)

#

yeah

#

As frost said, might be possible to let the key just be a simple long

#

and then use an Long2ObjMap

river oracle
ivory sleet
#

for world uuids

river oracle
#

ahhhh

#

ohkay yeah that makes sense

#

do you like shift the most significant and least significant bits into eachother?

ivory sleet
#

Yeah, also not sure if a record X(long,long) is better than a long[2]

ivory sleet
river oracle
river oracle
ivory sleet
#

Oh yeah

#

UUID::version or variant or some method

ivory sleet
river oracle
#

anyway I can tell from source code?

#

I'd assume it just uses whatever java uses

ivory sleet
#

No java has different versions supported