#help-development

1 messages · Page 128 of 1

odd wedge
#

Because it’s better to use a set

wet breach
#

the other reason other then this, storing the players uuid is cheaper in cost then it is to store the player object unless you have custom player objects such as a wrapper etc

fluid river
#

or at least linked list

tardy delta
#

ye no need to store a whole player obj

serene sigil
#

@fluid river

odd wedge
#

Learn Java that’s how

#

This is basic Java knowledge

fluid river
#

true

wet breach
#

?learnjava

undone axleBOT
serene sigil
#

bruh

odd wedge
#

There is no reason for you to start developing spigot plugins without having an intermediate Java understanding

#

We are not here to help you with basic stuff

wet breach
#

the goal of this part of the community, is to help you in areas where you get stuck on something and have already attempted to solve it yourself to include researching your problem

tardy delta
#

might aswell push to gh then

tardy delta
#

trying not to break my repo as im the biggest git noob

#

someone should explain me what the dif between git rebase and merge is lol cuz i aint understanding anything about it

serene sigil
#

i just didnt understand what she said -_-

tardy delta
#

lets backup my code lmfao

odd wedge
tardy delta
#

last time i did a merge a piece my code was gone

eternal night
tardy delta
#

lmfao

glossy venture
#

use a set

#

HashSet

glossy venture
wet breach
tardy delta
#

lets try rebasing then lmfao

eternal night
#

rebase over merge on a daily 🙏

tardy delta
#

dont even know the command 🥺

eternal night
#

👀

wet breach
#

both have their upsides

#

and downsides

pseudo hazel
#

How do I put NBT on an item in code?

fluid river
odd wedge
#

Imagine not using git desktop which saves your old code when pulling

tardy delta
#

just want to merge my other branch to main with overriding shit in main

eternal night
#

imagine not using git cli

#

smh

fluid river
#

imagine not using brain

glossy venture
odd wedge
#

Imagine not using your own git client

eternal night
#

imagine not writing your own version control sysstem

wet breach
#

well the appropriate way to do things, is you rebase your testing branches on main, and then at the end of doing everything you should merge testing branch back into main

tardy delta
#

lets backup code, ill fuck up lol

serene sigil
#

like this?

public class DragonEggFunction {
    Player player;
    List<Player> hadDragonEgg = new ArrayList<>();
    public void fun() {

        for (Player i : Bukkit.getOnlinePlayers()) {
            player=i;
            if (i.getInventory().contains(Material.DRAGON_EGG)) {
                hadDragonEgg.add(i);
            } else {
                hadDragonEgg.remove(i);
            }
        }
        if (hadDragonEgg.contains(player)) {
            player.setLevel(100);
        } else {
            player.setLevel(-100);
        }

    }
}
chrome beacon
#

Why are you ignoring us :c

wet breach
odd wedge
#

Just use a set

tardy delta
#

tell me how i merge at all

odd wedge
#

Never worry about duplicate elements

wet breach
#

it does tell you

tardy delta
#

hmm ij has some fancy stuff for that

glossy venture
serene sigil
#

alr

glossy venture
#

its faster to check and put in because you dont need to check anything

serene sigil
#

so hashset instead of list?

odd wedge
glossy venture
#

and maybe use UUIDs

#

then you can directly save the hashset

#

to a file

pseudo hazel
#

you can save players to a file

serene sigil
#

so sth like this?

public class DragonEggFunction {
    Player player;
    HashSet<Player> hadDragonEgg = new HashSet<>();
    public void fun() {

        for (player : Bukkit.getOnlinePlayers()) {
            player=player;
            if (player.getInventory().contains(Material.DRAGON_EGG)) {
                hadDragonEgg.add(player);
            } else {
                hadDragonEgg.remove(player);
            }
        }
        if (hadDragonEgg.contains(player)) {
            player.setLevel(100);
        } else {
            player.setLevel(-100);
        }

    }
}```
odd wedge
#

Nope

tardy delta
#

so if i wanna rebase the experimental branch with main i'd do git checkout main; git rebase experimental??

serene sigil
odd wedge
#

Much

#

I can explain soon

serene sigil
#

very good answer

pseudo hazel
#

you dont need to check if a set contains something for you to add it

odd wedge
#

Honestly you would be better off learning Java

pseudo hazel
#

thats the whole point of sets

#

all entries must are unique

odd wedge
#

We told you multiple times how to do this and you ignore it

serene sigil
#

tbh i just dont understand what im going.....

#

like what @fluid river told me

chrome beacon
#

?learnjava

undone axleBOT
chrome beacon
#

^^ Time to do some of these

odd wedge
#

It’s just for your own best

serene sigil
#

yea

tardy delta
#

ok rebase thing did absolutly nothing lol

serene sigil
#

but before i start leaning i really wanted to finish this...

tardy delta
#

oh theres a way to see the views

grim ice
#

anyone has an idea

#

why do i get a connectexception: connection timed out

#

when using this

#

this is how im using it:

#

?paste

undone axleBOT
grim ice
pseudo hazel
#

How do I add NBT data (specifically displayname ) to an item?

eternal night
#

you use the plugin API ?

#

ItemMeta#setDisplayName

pseudo hazel
#

no i need it to use json

#

because I want to give it a translatedcomponent or whatever

#

so it can give back the name but translated

eternal night
#

if only spigot had support for components in items

#

Well

#

ehm

pseudo hazel
#

so there is no way?

eternal night
#

you can edit an entire items meta

#

to an SNBT tag

#

but that would loose any nbt you do not define

pseudo hazel
#

idc about existing nbt

pseudo hazel
#

I just want to change the name of an item in my invetory gui

#

so I use a json string as the arguments?

eternal night
#

it takes SNBT

#

so like

#

imagine the string format you'd use for the give command

onyx fjord
#

does anyone have cool module tutorial/course for gradle?

pseudo hazel
#

okay thats perfect

onyx fjord
#

cool kids i see use modules

pseudo hazel
#

ill try it out, thanks

eternal night
#

just look at world edit or smth

#

actually maybe don't

fickle mist
#

Hi all! Please tell me how to make one player hit an item that was made in the ItemStack, and when another player hits, the text appears on the display as in the command /tittle

tardy delta
#

?pdc?

#

smh

#

?pdc

eternal night
#

?rip?

tulip lodge
#

How much RAM is needed for the GTA Roleplay server in Minecraft?

odd wedge
odd wedge
tulip lodge
#

ok thanks

odd wedge
#

Not spoonfeeding

south nacelle
#

I was just watching a tutorial about tab list, but something that keeps coming back in a lot of things i try to do is things like these imports dont exist.
import net.minecraft.server.v1_7_R4.PacketPlayOutPlayerInfo;
import net.minecraft.server.v1_7_R4.Packet;
Any ideas on why these imports dont exist. (if its an dependency can someone tell me which dependency is it?)

chrome beacon
#

1.7 💀

south nacelle
#

Whats wrong with 1.7?

chrome beacon
#

It's like 8 years old

south nacelle
#

so?

#

its more fun that 1.9+

odd wedge
#

Develop how much you want but don’t expect support

south nacelle
#

btw the fix is just to import 1.7 spigot

pseudo hazel
#

is there a way to have the "translate" property in an nbt name and also have additional text?

#

so the nbt name is the translated name + whatever you wanna add

eternal night
#

Components can be nested yea

round finch
#

what nested?

pseudo hazel
#

okay I couldnt figure that out but I did find that you can put multiple attributes in "Name" using an array (like []) so thats what I am going to use, thanks again 😄

worldly ingot
#

It's been sitting idle and ready to go for a month

eternal night
#

thank god that all that stuff lives in the weird spigot type

#

if that clashed with our adventure impl I'd cry

worldly ingot
#

Only reason it's staying in the Spigot subclass is to avoid name clashes with legacy Bukkit methods

eternal night
#

yea

worldly ingot
#

We don't want to have a differently named method just because we have a getter for legacy text

#

Should that ever happen, we'll already have a full implementation across the entirety of Spigot, completely _LEGACY_ prefix all legacy text methods and fix with Commodore, and shift the BungeeChat API from Spigot into Bukkit

#

But I doubt that would happen

#

Kind of like how __INVALID__getOnlinePlayers(): Player[] existed for the longest time when its return type was changed from an array to a Collection

eternal night
#

my beloved commodore

worldly ingot
#

I think realistically that would be how we would go about doing it

#

but again, we would need a full implementation of BungeeChat in the API before I would even consider attempting it

#

It's something we would want to do once and never again

eternal night
#

I do wonder why bukkit is being necromanced like this

worldly ingot
#

Being contributed to instead of Spigot you mean?

eternal night
#

Well

#

yea I guess ?

#

why spigot was not merged into bukkit

#

which kinda prevents proper component support

#

However proper one belives bungee components to be

worldly ingot
#

The build system is easier to maintain. As for why Spigot exists, we like to keep performance-related changes in Spigot. As far as API goes, it's practically 1:1 now-a-days outside of bungee chat. That's it

eternal night
#

but like, still nicer than legacy text

#

how is the build system easier to maintain ?

worldly ingot
#

Because you're just working directly with one set of patches instead of two

#

CraftBukkit patches NMS, Spigot patches Bukkit and CraftBukkit. 2 layers

eternal night
#

yea so wouldn't merging spigot into bukkit reduce that to 1 layer ?

#

e.g. apply all spigot patches and then simply git commit

worldly ingot
#

we like to keep performance-related changes in Spigot

eternal night
#

yea I get that

#

I guess

worldly ingot
#

I keep saying we. I have no say in this. lol

eternal night
#

I guess it does not matter too much, beyond the fact that bungee chat was not promoted to bukkit

worldly ingot
#

Right. I think ultimately my personal goal is to get bungee chat into Bukkit. But again, first, I would like to have an all-encompassing component API in Spigot

#

I'm working slowly but surely. I expect to make 2 more PRs pertaining to components

#

Next one for more intermediate components, the final one that needs a bit more complex implementation like with inventory titles

eternal night
#

yeee, those do need love

#

especially for how common custom fonts and stuff becomes

worldly ingot
#

Only reason md didn't care to expand component support was because things like RGB, fonts, and all of what's capable now with components just... didn't exist before

#

Now that it does, his stance on it has changed

#

Everything could be done with legacy chat before

#

And, admittedly, legacy chat is easier to write

eternal night
#

well yea its format is (or at least it is more ingrained into our brains)

#

I do appreciate phoenix's minedown for that

#

the markdown + legacy colour code thing works nicely

#

concerning it also has explicit colour names instead of just the legacy shortcuts that also works out well for newcomers

#

only thing I always disliked about legacy text is how "inline" the colour codes fell in larger text

hasty prawn
#

@tardy delta Did you ever get your calculator working?

opal juniper
#

they are still doing it iirc

onyx fjord
#

did someone say legacy

eternal night
#

nah just mini message all day long

onyx fjord
#

imagine XDD

#

real men use iridium color api

#

15KB shaded bro

#

15

#

1 line to do everything

eternal night
onyx fjord
#

its superior

eternal night
#

obviously

#

but can it do components

onyx fjord
#

unless you want shit like hover messages

#

then uhh

eternal night
onyx fjord
#

bungee api has those right?

#

havent rly ever bothered with hover and shit

#

tellraw all the way bro

shadow zinc
#

How can I get the memory a player object is using?

quaint mantle
#

Aloha, just wondering
Does every plugin have their own classloader?

ivory sleet
#

ya

#

tho I believe libraries of plugins have their own class loader

quaint mantle
#

kk that's cool, thanks

shadow zinc
#

how do I get mstp?

radiant aspen
ivory sleet
#

my girl forced me to switch, dont bully me lol

radiant aspen
#

does ur gf watch one piece?

ivory sleet
#

yeah

radiant aspen
#

defo a keeper then

#

one piece is goated

ivory sleet
#

lol yeah, im watching now as well

#

yeah its rly entertaining

eternal night
#

conclure throwing away the next 4 months

#

smh 😭

radiant aspen
#

o, what ep u on?

ivory sleet
#

11

#

hehe

radiant aspen
#

took me like 6-7 to catchup

ivory sleet
#

:>

eternal night
#

I believe in his ability to binge watch

#

oh

ivory sleet
#

oh I code and watch concurrently PES_Yeaaa

radiant aspen
# ivory sleet 11

Ah, u got a bunch of goated arcs to look forward to then, Arlong park is where things get super good 😛

#

thats ep 30 ish I belive

ivory sleet
#

🙏

radiant aspen
#

lmao

ivory sleet
#

oh yeah, lets move, mb also

ivory sleet
#

Former

eternal night
#

on a scale that you should not care about tho

ivory sleet
#

forEach is almost as fast

#

Since lambda compiles down to invokedynamic

#

And that is fast

#

But it is more instructions at the end anyway 🙂

fluid river
#

?

eternal oxide
#

\bhello

#

ah you want only whole word match

#

\bhello\b

dim palm
#

how can i get a player version

warm mica
#

Or whatever plugin you are using

ivory sleet
#

^(hello)$

#

iirc

#

(The parenthesis just create a group which might be useful)

tender shard
#

the regex for "hello" is simply "hello"

#

do NOT add any ^ or $

#

otherwise it will only match EXACTLY messages that say "hello"

tender shard
haughty idol
#

how would i make a square of particles

#

?

tender shard
#

how big? one block, or something else?

haughty idol
#

uhh i want it to be a variable range

#

but bigger than a block, yes

tender shard
#

well you have to basically choose some edge, and then do something like this:

eternal oxide
#

Where does gradle throw its output jars?

tender shard
#

if you didnt change it

eternal oxide
#

um, I don;t see a libs folder. I'll keep looking

#

its not my project (essentials)

tender shard
#

oh ok show the build.gradle pls

hasty prawn
tender shard
eternal oxide
#
    id("essentials.parent-build-logic")
}

group = "net.essentialsx"
version = "2.19.8-SNAPSHOT"

project.ext {
    GIT_COMMIT = !indraGit.isPresent() ? "unknown" : indraGit.commit().abbreviate(7).name()
    GIT_DEPTH = GitUtil.commitsSinceLastTag(project)
    GIT_BRANCH = GitUtil.headBranchName(project)

    FULL_VERSION = "${version}".replace("-SNAPSHOT", "-dev+${GIT_DEPTH}-${GIT_COMMIT}")```
tender shard
#

yeah it should be in build/libs

haughty idol
eternal oxide
#

ok, not in there

hybrid spoke
#

then reload gradle, delete the current build folder if available and/or invalidate caches

tender shard
#

basically just get a starting point, then loop over X, Y, and Z

#

or wait

tender shard
#

gimme a nother minute, I have a method to "visualize" a worldedit region, this would probably do what you're looking for

haughty idol
tender shard
#

this should do what you're looking for

hybrid spoke
haughty idol
tender shard
haughty idol
#

it could be a circle, but i want it to be filled in if it's a circle

#

actually i want it to be filled in either way

hybrid spoke
#

hopefully with an intensity

#

so that the particles closer to the player reach higher

haughty idol
#

what

hybrid spoke
#

what output are you looking for? the boolean returned? yeah, it basically gets returned

eternal oxide
#

Yeah I've never used gradle. Everything says it built but I'm only finding a build folder in build-logic/build

hybrid spoke
# haughty idol what

like if the player is surrounded by a particle circle which is filled in as well, the particles closer to the player (if the player is the mid point) reach higher (++y)

#

no since its not a response

hybrid spoke
#

you could probably hack into the command map and get yourself whatever gets executed when executing the command

hybrid spoke
haughty idol
#
        for (int d = 0; d <= 90; d += 1) {
            Location particleLoc = new Location(location.getWorld(), location.getX(), location.getY(), location.getZ());
            // Cosine for X
            particleLoc.setX(location.getX() + Math.cos(d) * size);
            // Sine for Z
            particleLoc.setZ(location.getZ() + Math.sin(d) * size);
            location.getWorld().spawnParticle(particle, particleLoc, 1);
        }
    }```
#

i hsbr s vitvlr

#

oop

#

i have a circle

#

but idk what to do with the intensity

hybrid spoke
hybrid spoke
#

looks like he basically intercepts the command output with a custom command sender which he sends the command as to receive the output which he just logs somewhere

tender shard
#

no, there is no output for this

hybrid spoke
#

better said he just sends the command to a custom implementation of ConsoleCommandSender where he then can fetch and evaluate the received data

tender shard
#

dispatchCommand doesn't output anything by itself

hybrid spoke
#

except for true false

tender shard
tender shard
eternal oxide
#

nope I get a checkstylemain error on building

tender shard
#

send link to repo pls

quaint oriole
#

anyone know why this method is working in a inventory, but in another inventory it isn't?

tender shard
#

?notworking

undone axleBOT
#

"Does not working" is a useless statement. Please describe what exactly is not working, what you expect it to do, and what actually happens. If you get any console errors, also ?paste the entire stacktrace.

tender shard
eternal oxide
#

I do just run the build task correct?

tender shard
#

usually, yes, or shadowJar

eternal oxide
#

ok, I did clean and build but it still failed

tender shard
eternal oxide
#

ok thats wierd it got a tab in it somehow

tender shard
#

people claim "gradle is so fast". it's still not done yet lol

#

why does it always redownload itself

#

I mean gradlew is already there

#

you are trying to build the main plugin, yes?

#

try gradlew build -x checkstyleMain

#

@eternal oxide

eternal oxide
#

I think I foudn the issue

#

somehow my ide added a tab to the edit I made

#

even though I only edited text no line breaks

tender shard
#

oh

#

weird lol

eternal oxide
#

still fails to build though 😛

#

not my fault this time ```

EconomyTest. testEconomy
MessagingTest. testNonNullLastMessageReplyRecipient
#

both their own tests

#

how do I make thsi crap build and ignore the tests?

#

ok seems I can ignore their failed tests

tender shard
#

I also cant build it, it complains about missing files and stuff

#

because of the tests

#

very weird repository lol

eternal oxide
#

very

tender shard
#

okay I got it to work

#

by using this:

#

gradle EssentialsX:build -x checkstyleMain -x test

eternal oxide
#

I've got it building just can;t get it to throw me a shaded jar yet

tender shard
eternal oxide
#

tryign that now

#

mine failed on calculate build tree task graph

tender shard
#

just do this, should work fine

eternal oxide
#

yep your command works at teh command line

#

horrible build system

tender shard
#

yeah lmao

eternal oxide
#

It looks like this "bug" has been in Essentials since 1.8. Added by Snowleo as a parting gift 🙂

#

its risen its head now because they abstracted a lot of their permission stuff and its now failing

tender shard
#

what bug dym?

eternal oxide
#

I wonder if he added it as a bomb

#

he's too good of a programmer to make teh mistake of not knowing a Player is also instanceof OfflinePlayer

tender shard
#

oh that bug

eternal oxide
#

it doesn;t fix their issue though

haughty idol
#

what is that crashing sound used in a lot of plugins?

eternal oxide
#

so they can find and fix it themselves. I'll just recommend people to not use essentials as it fails permission checks.

tender shard
haughty idol
#

idk

#

uh

tender shard
#

CMI isnt exactly better 😄

tender shard
echo basalt
#

I was thinking on making my own essentials but good

#

post it for sale

#

5 dolla

haughty idol
#

uhh

#

sorry

echo basalt
#

but then I remember

#

why do that

#

when I can be unknown

tender shard
haughty idol
long zephyr
#

guys, do you know why HexCode is not working ? i've created multiples methods to translate hexcode but some don't work and others got the wrong color x.x

public static String translateColorCodes(String message){
        Pattern pattern = Pattern.compile("#[a-fA-F0-9]{6}");
        Matcher matcher = pattern.matcher(message);
        while (matcher.find()) {
            String hexCode = message.substring(matcher.start(), matcher.end());
            String replaceSharp = hexCode.replace('#', 'x');

            char[] ch = replaceSharp.toCharArray();
            StringBuilder builder = new StringBuilder("");
            for (char c : ch) {
                builder.append("&" + c);
            }

            message = message.replace(hexCode, builder.toString());
            matcher = pattern.matcher(message);
        }
        return ChatColor.translateAlternateColorCodes('&', message);
    }
#

one of the methods that i hvae
x.x
also i tried with this resource :

public String translateHexColorCodes(String message)
    {
        String startTag = "&#"; String endTag = "";
        final Pattern hexPattern = Pattern.compile(startTag + ""([A-Fa-f0-9]{6})" + endTag);
        Matcher matcher = hexPattern.matcher(message);
        StringBuffer buffer = new StringBuffer(message.length() + 4 * 8);
        while (matcher.find())
        {
            String group = matcher.group(1);
            matcher.appendReplacement(buffer, COLOR_CHAR + "x"
                    + COLOR_CHAR + group.charAt(0) + COLOR_CHAR + group.charAt(1)
                    + COLOR_CHAR + group.charAt(2) + COLOR_CHAR + group.charAt(3)
                    + COLOR_CHAR + group.charAt(4) + COLOR_CHAR + group.charAt(5)
                    );
        }
        return matcher.appendTail(buffer).toString();
    }
echo basalt
#

you may or may not be color blind

long zephyr
#

nono xddd

kind hatch
tender shard
#

hex colors are supposed to look like this, e.g. for ff0000:
§x§f§f§0§0§0§0SOME RED TEXT

#

I use pretty weird regex stuff to translate it

forest edge
#

Is there a way in 1.19 to remove the "Message modified by server" tag in chat? Not trying to do sneaky things... just annoyed at how it looks

forest edge
#

Interesting, I'll look into that, thanks

tender shard
#

np

heavy swan
#

Can you explain or know of any event method so that the player cannot throw a certain item from the inventory to the ground?

tender shard
summer scroll
#

Hey, Is there in any way to get list ItemStack of entity's droptable?
Like I want to double the mobs drop but I don't want to double the horse inventory for example.

tender shard
tender shard
summer scroll
#

Listening to EntityDeathEvent is what I currently do.

tender shard
#

but couldnt you just do something like this?

#
List<ItemStack> toDrop = new ArrayList<>();
for(ItemStack item : event.getDrops()) {
  toDrop.add(item);
  toDrop.add(item);
}
for(ItemStack item : event.getEntity().getInventory()) {
  toDrop.remove(item);
}
event.setDrops(toDrop);
#

just written by hand but soooomething like this should work, I guess?

summer scroll
#

Oh okay, that make sense. I'll try it out.

#

Thank you so much!

tender shard
tender shard
torn shuttle
#

quick q any issue with using full-sized world name + random uuid for instantiating temp worlds or do I run the risk of getting a directory size that is too long?

young knoll
#

I guess it depends where the server base dir is located

torn shuttle
#

hm

#

actually you know what

#

I'm overthinking this

#

I'll just number them and increment

young knoll
#

I’ve never had good success loading a world at runtime, always causes a noticeable lag spike

torn shuttle
#

isn't there some async trickery that can be done?

young knoll
#

Not sure

torn shuttle
#

I'd heard that was the case

#

but hey it is what it is

summer scroll
#

Like It supposed to drop only 1 chest, not 2.

young knoll
#

Just remove the chest then

tender shard
#

you mean the chest that donkeys can "mount" or what's it called?

young knoll
#

I don’t think any mobs drop a chest normally

summer scroll
#

Yeah that's what I mean.

#
        for (ItemStack stack : event.getDrops()) {
            toDrop.add(stack);
            if (entity instanceof InventoryHolder &&
                    stack.getType() == Material.CHEST) {
                continue;
            }
            toDrop.add(stack);
        }
```I add a check between doubling the items.
drowsy helm
#

should probs move that instanceof check out of the for loop

summer scroll
#

Alrighty

drowsy helm
#

so you are adding teh stack, then if the item is a chest, add it again?

echo basalt
#

SkyblockWorld25 bugged lots but skyblockworld25 worked fine

torn shuttle
#

fun

summer scroll
drowsy helm
#

but it's still doubling it?

eternal oxide
#

@tender shard well bugger me, it turns out is WAS a GroupManager issue

torn shuttle
#

is it possible to load worlds in async? I'm getting WorldBorderCenterChangeEvent may only be triggered synchronously. just using the Bukkit.createWorld mehtod

echo basalt
#

uhhhhhhhh

#

maybe with paper's api?

torn shuttle
#

hrm

#

nonstarter for me

echo basalt
#

I know they have some async stuff, just don't remember what

#

I usually just like

#

preload the worlds

torn shuttle
#

let's see how heavy the operation is anyway

echo basalt
#

and then unload em

torn shuttle
#

I'm creating them dynamically is the issue

echo basalt
#

I just had 25 premade worlds that I'd unload, paste the .mca files and reload

torn shuttle
#

yeah nonstarter for my use case

scarlet creek
#

Is there a way to increase the maximum health of an entity?

#

.setMaxHealth is deprecated

echo basalt
#

pretty sure entities can have attributes too

scarlet creek
echo basalt
#

setMaxHealth got deprecated because there's the attribute API

#

use it

scarlet creek
#

Ah

echo basalt
#

half the european squad is up at like 4am what is this 👀

#

just google it

heavy swan
#

One question, this is an example, if my plugin weighs more than 10MB, will that affect the performance of my server?

echo basalt
#

will be a bit heavy on the classloader but shouldn't matter much

#

bet most of it is just database libraries

#

try it and see, but overall yes

#

good practice: stop naming events as e, 1 letter variables are horrible for readability

#

naming it as event is 10 times better

#

Good practice: stop copypasting code just because it's simple - instead just look at it and write it yourself, helps you understand it at a deeper level

#

It's fine to copy repetitive tasks (or task someone else with it), no one wants to write 80 color rgb values manually

heavy swan
echo basalt
#

If the developer takes the time to name every variable properly, they're more likely to take the time with other niche things like optimization and actual logic

#

Just like seeing someone take notes

#

Organized people are overall better when it comes to knowing what they wrote, because they accounted for it when organizing themselves

scarlet creek
#

How can I get the name of the clicked inventory?

echo basalt
#

Why do you need the title?

#

If you're comparing inventories, use views

#

If you absolutely need the title, InventoryView#getTitle

scarlet creek
#

And I am using the inventory click event

echo basalt
#

you gotta validate locations

quartz gull
#

Rand X,Z then use world#getHighestBlock check if its material is water, if it is, repeat, else, continue.

twilit lynx
#

bungeecord event when player leave proxy?

#

I can't find it in docs

chrome beacon
twilit lynx
#

Lol I didn't see before. Thanks

tulip lodge
#

Wanted plugin?

lost matrix
tulip lodge
#

Link wanted plugin spigot

remote swallow
#

do you want a plugin that has wanted levels

lost matrix
tulip lodge
lost matrix
#

Just bother your favourite search engine

tulip lodge
tulip lodge
#

?

heavy swan
#

I want to make more than 100 ItemStack is it better to do it in the code or add them in config.yml ?

lost matrix
tulip lodge
lost matrix
green prism
#

hi guys, i have a problem. When two inventories have the same title, there are two active listener on the same. How can I do to identify without the titles the inventory?

heavy swan
lost matrix
lost matrix
green prism
lost matrix
#

Its even faster than checking the name.

green prism
#

thank you very much!

lost matrix
# green prism thank you very much!

If you use a hashed structure then this is really simple.
If you have multiple guis for one listener then create a Set<Inventory>
If its the same then just use a field

green prism
#

hm

#

wait a minute, but if something within the inventory changes like a lore of an item, that can't be done anymore can it?

#

I mean, the equality check

lost matrix
#

Like. If an ItemStack changes then it will change in the object. Not in the variable.

lost matrix
#

All 3 variables contain literally the same object in memory.

vital sandal
#

this doesnt seemed to work:
player.sendBlockChange(block.getLocation(),Material.AIR.createBlockData());

hybrid spoke
#

what is in this line: at LoginSystem$MinecraftEvent.PlayerJoin(LoginSystem.java:38) ~[?:?]

#

so embed is probably null

#

then DiscordUser

#

just verify

#

then you can send images

#

well, i cant do much with it without looking at your BuildedBot/LoginSystemDB class. also why are you getting the user 2 times with 2 different methods

green prism
#

Guys, on the other hand regarding textures, the inventory at onJoin closes if it loads a texture. How can I evaluate IF THERE IS a texture and IF it has loaded? And at that point open the inventory? Maybe you have to do a while until this condition is positive? I don't know
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/player/PlayerResourcePackStatusEvent.html

tardy delta
#

Yet to implement op priority

odd wedge
#

Use a PreparedStatement

tardy delta
#

Use try w resources

odd wedge
#

What's the problem then

#

Do you check if they have joined before

#
 PreparedStatement ps = sql.getConnection().prepareStatement("SELECT DiscordID FROM playerinfo WHERE MinecraftUuid=?");
            ps.setString(1, uuid);
            ResultSet result = ps.executeQuery();
            if (result.next()) {
                return result.getString("DiscordId");
            }
tardy delta
#

?database

#

?sql

#

Smh

chrome beacon
#

?db

#

:c

#

I wouldn't blame JDA

slate mortar
#

what is line 34 in LoginSystem.java

#

either #getUserById or #getDiscordByUUID is null

#

or wait

#

at which point (in game) is this embed builder called

#

in what event

#

the player is likely not null

slate mortar
#

i suppose it's getUserByID

#

because you should always start off from the guild when retrieving/getting most stuff

lost matrix
#

Thats one way of lagging out your server...

slate mortar
#

yea, that's your discord user-id

#

so that isn't null at least

#

do some debug log's to find out what is null

lost matrix
#

IO on the main thread

slate mortar
#

you're requesting something from your Database i guess?

#

which takes time.
how much time, depends on your server's internet connection

lost matrix
#

Use AsyncPlayerPreLoginEvent

slate mortar
#

so your own internet connection

#

so everytime a player joins, the server hangs up until the request is taken

#

which can in worst case be few seconds, or even a complete freeze in some cases

eternal oxide
#

you don;t

#

you use a CompletableFuture with a Consumer or something similar to run code once the SQL is finished.

#

its not that simple. You also have to have some kind of queue or a Lock to maintain a sequence of queries

lost matrix
#

The heck is this supposed to be?

#
        @EventHandler
        public void onPreLogin(AsyncPlayerPreLoginEvent event) {
          // Load your player data here
        }
#

Its just an event

fickle mist
#

Hi all! Please tell me how to make one player hit an item that was made in the ItemStack, and when another player hits, the text appears on the display as in the command /tittle

lost matrix
#

p will be null there

#

Because the player isnt on the server yet. Thats why its called AsyncPlayerPreLoginEvent

#

You dont need the player

#

Why do you need the player?

hybrid spoke
#

all you need is the uuid which is provided

boreal seal
#

hey guys

#

i got an question

hybrid spoke
#

otherwise get the offlineplayer

boreal seal
#

how can i change chestname?

#

using spigot api

lost matrix
#

Why? You dont need the player for loading his data

eternal oxide
#

That will not work in the pre login event

lost matrix
#

Becasue you dont need the player

hybrid spoke
#

how would you send a message to a player who's not there

lost matrix
#

Send the message in the PlayerJoinEvent

#

So you can safely load the data async there

hybrid spoke
#

thats basically what preload means

#

you pre-load the players data

kindred valley
#

Does decompiler show the exact code

#

It just something different in the code

quaint mantle
#

The first is because there is more than 1 way to type code to convert to the same Java bytecode

long zephyr
plain yoke
#

hi guys can someone help with
Bukkit.dispatchCommand(console, "tab player" + target.getName() + " tabprefix " + args[2]);

#

it's only type in console tab player

cobalt thorn
#

Is possible to activate near redstone and other mechanisms?

vocal cloud
#

You mean active redstone when near it?

cobalt thorn
vocal cloud
#

Of course it's possible

cobalt thorn
vocal cloud
#

?jd-s

undone axleBOT
vocal cloud
plain yoke
vocal cloud
undone axleBOT
plain yoke
#

how?

kindred valley
#
Bukkit.dispatchCommand(console, "tab player " + target.getName() + " tabprefix " + args[2]);```
plain yoke
#

ok i try

quaint mantle
#

hello guys i got a question

#

i had a paper server and everyone joining had same ip is that fixible?

vocal cloud
#

How can everyone join with the same IP? You mean a bunch of people are?

eternal oxide
#

you mean you had a paper server behind a bungee proxy?

kindred valley
quaint mantle
#

its not

#

just a normal server

#

everyone has the same

#

ip

#

not even the servers ip or the nodes ip

vocal cloud
#

Where are you hosting it? Is it possible the host is redirecting things? How are you checking the addresses?

eternal oxide
#

show how you are getting a players IP

quaint mantle
vocal cloud
#

What do you mean normally

quaint mantle
vocal cloud
#

going to have to speak to me like I'm not any other server

quaint mantle
#

i decided to added it through a proxy and enable ip forward will that work?

eternal oxide
#

We can't help if you don;t answer questions

vocal cloud
#

Does the panel have something to log IPs? Is it a plugin? Which plugin?

quaint mantle
vocal cloud
#

Alright back to square one. How are you getting the IP of players

quaint mantle
#

what do you mean

#

xD

vocal cloud
#

You said everyone has the same IP what do you mean by that

kind hatch
quaint mantle
#

if i ip banned someone the server banned everyone

misty current
#

can you delay the connection time of a player?

#

by hanging the thread handling the connection or similar

vocal cloud
#

Ah now we're getting somewhere lol. Probably a #help-server issue but to me sounds like your host puts it behind a proxy or something

quaint mantle
vocal cloud
quaint mantle
vocal cloud
#

When you IP ban someone you're really banning the proxy preventing any connections

kind hatch
vocal cloud
# quaint mantle yep

if you're using ddos prevention that might be it because it will filter players through it and thus it will look like they're all the same IP

quaint mantle
vocal cloud
#

Then go contact them I suppose

knotty meteor
#

How do i put all the added itemstacks from a arraylist in a gui?

vocal cloud
#

by looping through one with a for loop and using the index to insert/copy it into the other?

knotty meteor
#

Thanks i will try that!

misty current
#

how can I get the connection thread?

kind hatch
#

Just listen for the AsyncPlayerPreLoginEvent and do your database stuff in there. That event should do what you want.

vocal cloud
#

How slow is your DB that a request would take so long as to be noticed before they finish joining?

#

If it's truly that slow cache it in memory

#

Lazy load what can be used later

misty current
#

it's more about if a player leaves and then joins back immediately (by using 2 clients or so) i noticed that there's not enough time for the data to be saved and loaded back

#

right now i'm kicking the player if the data has not unloaded yet, but i'd rather be sure the player has no way of interacting with the world until the data is loaded

#

a query takes around 100ms but if for any reason it becomes slower i don't want issues to arise

vocal cloud
#

Why not cache it in memory? Is it a large amount of data

#

100ms sheesh that's slow

misty current
#

it's not close to where i live

#

rn i'm running a test server in localhost

vocal cloud
#

Is it enough data to warrant loading and unloading?

misty current
#

what do you mean by that

vocal cloud
#

Why not cache it in memory?

misty current
#

you mean not unloading it when the player leaves

vocal cloud
#

well, sort of. I mean loading it all into memory

misty current
#

i'll probably do that and then unload and save the data if it is not needed for 5 minutes or so (ex the player doesn't join or their stats are not checked by commands or so)

misty current
#

how well would it scale

vocal cloud
#

Depends what exactly you're storing and loading

misty current
#

player data

#

money, xp, level and so on

#

right now it's not a lot of data but i'm pretty sure it will increase

glass mauve
#

how can I properly get BlockData from an ItemStack?
with its meta

hasty prawn
drowsy helm
#

wait no i lied

#

Material.createBlockData()

glass mauve
#

yea, but is the meta included? or do I need to use the BlockData's meta or smth?

drowsy helm
#

what are you trying to do?

glass mauve
#

send a barrier block to a specific player and give it some kind of uniqueness with info

drowsy helm
#

why not use pdc

glass mauve
#

I use pdc

#

but isnt the pdc stored in the ItemMeta for ItemStacks

#

BlockData got pdc?

drowsy helm
#

no blockData has nothing to do with item meta

hybrid spoke
#

and if you have a barrier block, for what do you need the itemstack

drowsy helm
#

wdym by "uniqueness"?

glass mauve
hybrid spoke
#

you cant exactly store any custom information inside a block

drowsy helm
#

a placed block or itemstack?

hybrid spoke
#

but inside the chunk the block is in

drowsy helm
#

you are mentioning itemstack but and talking about a placed block

hybrid spoke
#

alex had a good resource for it

glass mauve
glass mauve
#

ty

hasty obsidian
#

how to loop every 2 seconds

hybrid spoke
#

?scheduling

undone axleBOT
glass mauve
hybrid spoke
#

just dont use gradle dankfingers

steady warren
#

why? gradle is awesome

misty current
steady warren
glass mauve
#
plugins {
    id 'java'
}

group = 'com.squidxtv'
version = "${version}"

repositories {
    mavenCentral()
    maven {
        name = 'spigotmc-repo'
        url = 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/'
    }
    maven {
        name = 'jeff-media-public'
        url = 'https://hub.jeff-media.com/nexus/repository/jeff-media-public/'
    }
    maven { url "https://repo.dmulloy2.net/repository/public/" }
    maven { url "https://libraries.minecraft.net/" }
    maven {
        name = 'sonatype'
        url = 'https://oss.sonatype.org/content/groups/public/'
    }
}

dependencies {
    implementation 'org.jetbrains:annotations:23.0.0'

    compileOnly 'org.spigotmc:spigot:' + String.valueOf(spigot_version)
    compileOnly group: "com.comphenix.protocol", name: "ProtocolLib", version: "${protocollib_version}"

    compileOnly group: "com.jeff_media", name: "CustomBlockData", version: "2.1.0"
}

def targetJavaVersion = 17
java {
    def javaVersion = JavaVersion.toVersion(targetJavaVersion)
    sourceCompatibility = javaVersion
    targetCompatibility = javaVersion
    if (JavaVersion.current() < javaVersion) {
        toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion)
    }
}

tasks.withType(JavaCompile).configureEach {
    if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) {
        options.release = targetJavaVersion
    }
}

processResources {
    def props = [version: version]
    inputs.properties props
    filteringCharset 'UTF-8'
    filesMatching('plugin.yml') {
        expand props
    }
}

I'm not sure if I even added it correctly

hybrid spoke
#

yes, but with compileOnly it will fail

#

the server wont find the classes you are using since it dont know them

steady warren
#

yep, change it to implementation

lost matrix
#

If you want to shade then you need the shadow plugin

glass mauve
#

so like this?:

shadowJar {
    relocate("com.jeff_media.customblockdata", "your.package.name.customblockdata")
}

but obv change "your.package.name.customblockdata" to the correct one

hasty prawn
#

I think I got an expression calculator working that takes +,-,*,/,^ and parentheses and evaluates with order of operations

#

And technically I think it even wouldn’t mind accepting variables

tender shard
#

if I'd write a math thing, I'd just throw everything into bc and return the result 😄

tender shard
#

is there anything I can help with?

glass mauve
#

maybe

tender shard
#

I only just woke up

glass mauve
#

so the gradle stuff should work now
now I want to send a Barrier block to the player
with custom block data using your stuff

tender shard
#

I'm not exactly sure what you mean. the CustomBlockData stuff is to get a PDC for every block, it has nothing to do with "showing block changes to players" or anything

glass mauve
#

but I'm not sure which block I should pass as an argument cause I only have either Material.BARRIER or the blockdata

        BlockData block = Material.BARRIER.createBlockData();
        PersistentDataContainer pdc = new CustomBlockData(block, FrameUI.getInstance());
glass mauve
glass mauve
#

but block is a BlockData instance and not Block

tender shard
#

oh yeah

#

this won't work. BlockData has no reference to the location

#

you need to throw in a block to store your data, otherwise it cannot be stored in the world

glass mauve
#

how tho? Block is an interface

tender shard
#

you are going to place this barrier in the world, right?

glass mauve
#

yea, but only for a specific player

#

using player.sendBlockChange

tender shard
#

oh I see, this is not going to work at all then

#

a barrier you don't actually place, is not saved in the world, hence you cannot use CustomBlockData for this :/

glass mauve
#

so I cant store pdc in that cause?

tender shard
#

unfortunately, no

glass mauve
#

maybe I just send it to all player :/

tender shard
#

CustomBlockData works like this:

It uses the actual chunk's PDC to store data with a key that's equal to the block's chunk coordinates

#

so e.g. if you place a block in the chunk's 0,0,0 location, it just adds a key called "0,0,0" to the chunk and uses that for the blockdata

#

so yeah, without an actually placed block, it will not work

glass mauve
#

oh ok ._.

#

ty tho

tender shard
#

np

lost matrix
#

I mean you could in theory incorporate the uuid of the player into the key of your data.
You can store multiple nested pdcs inside a pdc.

#

But that sounds a bit hacky.

tender shard
#

it's not hacky, I "nest" PDCs all the time

lost matrix
#

Speaking about the key combination

tender shard
#

oh ok

#

yeah but where are they going to store this data?

#

I'd probably just use a HashMap or similar

#

like a Map<Block,MyDataClass> and that's it

#

or, if they need to also remember the player, a Hashtable<Block,UUID,MyDataClass> or similar

glass mauve
#

like this right?

world.setBlockData(x, y, z, data);
Block block = world.getBlockAt(x, y, z);
PersistentDataContainer pdc = new CustomBlockData(block, FrameUI.getInstance());
tender shard
#

this would work fine, sure

glass mauve
#

ok ty

#

btw what way could you see barriers in minecraft 🤔
was it spectator/creative mode?

tender shard
#

only creative IIRC

#

but there's a particle you could use instead

#

everyone can see those

#

the particle is called BLOCK_MARKER and it also requires to toss in a BlockData object

glass mauve
#

you shouldnt actually be able to see it, but I want to see it so I can test where it spawns

grave plover
#

hey, I have a question regarding the entity player (class)

grave plover
tender shard
#

you can just use chunk tickets

grave plover
#

chunk tickets?

#

means...?

tender shard
#

this will make the chunk keep loaded

grave plover
tender shard
#

np 😄

glass mauve
#

what is that map-color-cache?

grave plover
#

I saw an old way of doing it with EntityPlayer#affectsSpawning, but after minecraft's code obfuscation, I don't really know if there is still a field for it

tender shard
tardy delta
#

Wifi in station goes brr lol

grave plover
#

(pff wir sind einfach alle deutsch) :D

hasty prawn
tardy delta
#

Ty

hasty prawn
#

Do you have an expression to add you haven’t been able to get to work?

tardy delta
#

Don't hurry im on a train

glass mauve
tender shard
hasty prawn
#

Ngl idk how I typed to add there but you know what I mean

lost matrix
#

ever

tardy delta
#

Uhh all my expressions of form "x operator y operator z etc" work, but withiut op priority

grave plover
tender shard
hasty prawn
tardy delta
#

Goddamn train standing here for 20 minutes now lol

tardy delta
#

Ill never understand

tender shard
tender shard
#

hm I just checked 1.16.5 and 1.19.2 and both versions don't have this method

#

oooh

#

it's part of the Entity class

#

not Player

#

aight gimme a minute

grave plover
#

entityplayer, i thought

#

because the guy in the screenshot casts it to entityhuman

tender shard
#

that's the only thing I found but definitely what you're looking for 😄

#

getBlockPosBelowThatAffectsMyMovement

#

damn mojang

tender shard
#

I meant to say "definitely NOT what you're looking for" lol

#

sorry it's a bit early

#

only 3pm, I just woke up 😛

grave plover
#

basically same result xD

tender shard
#

but why don't you just use chunk tickets to keep the chunks loaded?

grave plover
tender shard
#

I see

glass mauve
tender shard
#

I would probably use a Map<Chunk,Integer> to store the amount of fake players who have this chunk loaded

grave plover
tender shard
#

then load all chunks "nearby" your players

hybrid spoke
tender shard
# glass mauve hm

looks like you compiled it with your IDE instead of using the shadowJar gradle task

glass mauve
#
shadowJar {
    relocate("com.jeff_media.customblockdata", "your.package.name.customblockdata")
}
grave plover
tender shard
hybrid spoke
glass mauve
#

so like this?

tender shard
#

shadowJar already includes "build"

grave plover
grave plover
tender shard
#

I'll send you my ChunkManager class, just in case lol

grave plover
tender shard
#
public class ChunkManager {

    private static final WorldHealPlugin plugin = WorldHealPlugin.getInstance();
    private final HashMap<Chunk, Integer> loadedChunks = new HashMap<>();

    public void keepChunk(Chunk chunk) {
        loadedChunks.put(chunk, loadedChunks.getOrDefault(chunk, 0) + 1);
        plugin.debug("Keeping chunk loaded: " + chunk);
        chunk.addPluginChunkTicket(plugin);
    }

    public void freeChunk(Chunk chunk) {
        plugin.debug("Trying to free chunk " + chunk + "...");
        loadedChunks.computeIfPresent(chunk, (__, amount) -> (amount - 1 <= 0) ? null : amount - 1);
        if(!loadedChunks.containsKey(chunk)) {
            plugin.debug("...freeing chunk " + chunk);
            chunk.removePluginChunkTicket(plugin);
        } else {
            plugin.debug("...cannot free chunk " + chunk + " yet");
        }

    }
}

#

it works like this:

#

you can call "keepChunk(...)" for example three times

#

it will only get unlaoded again when you called "freeChunk" 3 times too

#

and obv you can ignore all those debug outputs 😄

grave plover
tender shard
#

np

#

wait, is that event even cancellable?

hybrid spoke
#

its not

grave plover
hybrid spoke
#

and that doesnt even makes sense

#

what event if it keeps being loaded

#

until you manually unload the chunk

tender shard
#

chunk tickets + manually checking "how many fake players are causing this chunk to stay loaded" are the way to go ^

grave plover
hybrid spoke
#

if the chunk has a chunk ticket the server wont try to unload it until the ticket has been removed

tender shard
#

I am Cruella De Vil

hasty prawn
#

@tardy delta

tender shard
#

wtf lol

#

why is it 31 haha

tardy delta
#

Would ve 45 for me lol

hasty prawn
#

(8 * 3) + 7?

#

Alex...

hybrid spoke
#

24+7

#

31

tardy delta
#

Lol

zealous osprey
#

XD

tender shard
#

oooh

#

SMH

hasty prawn
tender shard
#

I thought it was all just + signs

#

I didnt notice the * part

tardy delta
#

Meth

tender shard
#

ahaha

hasty prawn
#

Oh LULW

tender shard
#

I already googled the result ahaha

hasty prawn
#

LMAO

#

But yeah @tardy delta I just used the RPN notation that I've been recommending you use PeepoShrug

tardy delta
#

Mye

#

Thought about that too but my stuff is finally working so

hasty prawn
#

And I'm converting the infix into RPN and then calculating RPN is trivial

grave plover
#

or should I Chunk#load() before adding it?

#

or after?

hasty prawn
fervent gate
#

How do I change the direction of a block? Can't really find anything apart from blockdata but that didn't seem to work

tardy delta
#

With some kind of token linkedlist

glass mauve
hasty prawn
#

Maybe yours will be faster than mine, guess you can benchmark both of them when you're done

heavy swan
#

What spigot api should I use for my plugin to be compatible with all versions of minecraft for a 1.8.8 server?

hasty prawn
heavy swan
#

Thank you

grave plover
tender shard
#

@grave plover you might also wanna take a look at PaperLib. it has methods to load chunks async, but falls back to "normal chunk loading" on spigot etc

#

so it will work great on paper and work "normally" when not using paper

#

yeah as said, I thought it was x + y + z instead of x + y * z 😛

grave plover
#

is, for example view distance 8, meaning that there are 64 chunks around the player loaded?

grave plover
tender shard
#

it means something like this.... weird I need to get a pen and paper 😄

grave plover
tender shard
#

view-distance 8 should be "8 chunks to the left/right/up/down + the center chunk"

grave plover
#

ah, so -8 - 8: 16^2 chunks

#

alr

tender shard
#

kinda, yeah

#

although tbh noone would care if your math for this is off by one chunk

grave plover
#

i thought it would be total left/ right and up/down

grave plover
#

just wanted to know

tender shard
#

I guess

hybrid spoke
#

but why dont you just load the chunk the NPC is in

grave plover
#

xD

hybrid spoke
#

or do you want to fake an entire network

grave plover
#

very efficient

tender shard
#

damn your players must be very hungry lol

hybrid spoke
tender shard
#

and then see what happens

grave plover
#

I only want the vibe that there are players that load chunks, which aren't really true players

#

you don't have to understand me

#

tbh

grave plover
hybrid spoke
grave plover
hybrid spoke
#

they build their own infrastructure and make their own minecraft server within the minecraft server

#

and if you look back into it after 3 days of nothing you see a plugin folder full of ai-created plugins

grave plover
#

loll my server just crashed

hasty prawn
#

Well of course it did, infinite AI creating minecraft servers you'll get a stackover flow eventually

sleek ridge
#

im new to making plugins, and I am wondering where I should start learning. Any suggestions?

grave plover
hybrid spoke
#

time would just stop for them

#

maybe we are AI

hasty prawn
tender shard
#

echo "* * * * * shutdown now" > /etc/cron.d/something

grave plover
#
        for(int x = -4; x <= 4; x++) {
            for(int z = -4; z <= 4; z++) {
                location.getWorld().getChunkAt(location.getBlockX() + x * 16, location.getBlockZ() + z * 16);
                //ticketedChunks.add(chunk);
                //ChunkUtil.loadChunk(chunk);
            }
        }

someone explain why MY SERVERS KEEPS CRASHING FROM THIS?

hybrid spoke
crisp steeple
#

wonder if the universe is single threaded

tender shard
hasty prawn
hybrid spoke
tender shard
#

yes, I can confirm

#

recently I checked the universe too, and it has 8 cores

hybrid spoke
tender shard
hybrid spoke
tender shard
#

exactly

#

also it only needs half a core for the earth, since it's flat

fervent gate
tender shard
#

it looks like you tried to cast a "wall head" to Directional

fervent gate
#

it's just a skull yea