#help-development

1 messages · Page 387 of 1

distant ridge
#
    public void onChatEvent(AsyncPlayerChatEvent e) {
        if(e.isCancelled()) return;```
Why does this not work? e.isCancelled is always false
eternal oxide
#

If you are you are probably going to have to do it with a child first class loader

warm mesa
#

Somebody know why I got this error?

distant ridge
dry yacht
#

Wouldn't relocate like that tbh, using shaded as a parent package is not the intended idea. It should be your root package. You also dropped a package (code, I think) on a relocation.

distant ridge
#

The event is being cancelled by another plugin completely.

quaint mantle
thorn crypt
#

So, I'm trying to use that and import all needed stuff but their is some things that don't wanna be imported

dry yacht
distant ridge
lost matrix
thorn crypt
lost matrix
thorn crypt
eternal oxide
dry yacht
# quaint mantle Could you show me what you mean?

shaded should be your root-package. Like country-code.your-nick.your-plugin-name. This is the only "guaranteed" way that you won't have namespace collisions and mess your versions up again. com.google.code.gson also became com.google.gson in your relocation. If you relocate, the corresponding imports/FQNs will be patched too, so there's no need to shorten anything and thus maybe make it misleading.

eternal oxide
#

^ you could

quaint mantle
#

Which one is better to do?

dry yacht
#

Oh, we're talking about custom classloaders here, xDD

thorn crypt
dry yacht
#

Is this the error we're talking about?

quaint mantle
#

This

warm mesa
#

How Can I use NMS in my plugin?

lost matrix
thorn crypt
dry yacht
# quaint mantle This

Did you set the plugin class loader as your class loader's parent? I think you tried to operate between two separately loaded GSON classes. They may have the same FQN, but are in different "modules", or what it's called. Don't quote me on that, but it would be the easiest to try.

quaint mantle
#

no

dry yacht
#

Yeah, after thinking about your stacktrace some more... It just looks like a version mismatch indeed, xD

lost matrix
quaint mantle
#

So how would I fix that then?

dry yacht
thorn crypt
quaint mantle
#

That's what im what dependency is though com.google.code.gson

#

Omg that fixed

#

There is no way

dry yacht
#

Is that error you posted occurring when you try to load something through your classloader?

dry yacht
quaint mantle
#

Changing it to com.google.gson for relocation

dry yacht
#

How the hell did that solve it

quaint mantle
#

Now another error is occurring though

dry yacht
#

The class you're trying to load shouldn't have these relocations applied

#

So it should trip up there

dry yacht
quaint mantle
dry yacht
#

Btw, what is it then? Your own plugin loader? xD

#

Wow, that error is cursed

quaint mantle
#

What is what?

dry yacht
#

What are you trying to develop?

#

That would help

quaint mantle
#

I'm just trying to gather data from a jar

#

Interesting the error does not occur when you use 1.18 but 1.8 it does

dry yacht
quaint mantle
#

Because I originally had made it into a plugin then decided not too

eternal oxide
#

are you trying to modify at runtime, like mixins?

quaint mantle
#

Now its not suppose to function as a plugin though

dry yacht
#

SafeConstructor extends BaseConstructor, means that Type 'org/yaml/snakeyaml/constructor/SafeConstructor' (current frame, stack[3]) is not assignable to 'org/yaml/snakeyaml/constructor/BaseConstructor' doesn't make sense to me...

quaint mantle
dry yacht
#

You add snakeyaml as a dependency to your project, so I guess 1.8 expected another version, and you just load the one you (seem to ) shade, instead of the one the jar itself contains

quaint mantle
#

Yea

dry yacht
#

Try relocating your snakeyaml too, so the class loader is not using yours

vocal cloud
#

sad 1.8 moment strikes again

quaint mantle
#

Yea that worked

dry yacht
#

If I'd only get a penny every time somebody complained

dry yacht
quaint mantle
#

Nevermind I lied

#

Same thing still

dry yacht
#

Can you send the pom again?

dry yacht
#

...

#

That relocation is basically a noop, xDD

#

Try <shadedPattern>shaded.org.yaml</shadedPattern>

analog thicket
#

How would i make this animation faster?

        new BukkitRunnable() {

            int i = 0;
            int x = -360;

            public void run() {
                i++;
                if (i < 100) {
                    armorStandLoc.add(0, 0.025, 0);
                } else {
                    stand.setHeadPose(new EulerAngle(0, Math.toRadians(x) , 0));
                    x++;
                }
                stand.teleport(armorStandLoc);
                if (i >= 200) {
                    cancel();
                    stand.remove();
                    openCrate.resetOpenStatus(player);
                    new crateRewards(player);
                }
            }
        }.runTaskTimer(Casino.getInstance(), 0, 1L);
    }
```
granite burrow
#

How can I display a item in chat using the hover event. I can get a hover message made however I cannot get an itemstack to be turned into a base component array

dry yacht
dry yacht
quaint mantle
#

I frogot about that

analog thicket
dry yacht
analog thicket
dry yacht
dry yacht
analog thicket
torn shuttle
#

"oh yeah I'll just tweak a quick thing for a release before bed"

#

that was nearly 6 hours ago

#

this is a nightmare

echo basalt
#

imagine having code that's so messy that it takes 6 hours to tweak something real quick

torn shuttle
#

tbf I'm dead sure the inventory#remove(itemstack) method is just not working here

echo basalt
#

clown_2 nah

torn shuttle
#

the item isn't null, I can see that it is identifying it correctly

#

it's just not removing it

echo basalt
#

well

lost matrix
#

Unmatched nbt data probably

echo basalt
#

Inventory#remove is a bit picky with amounts

torn shuttle
#

it's just a sword

echo basalt
#

it does equality checks

subtle folio
#

Is there a way to create fake players with the new game profiles?

echo basalt
#

durability maybe?

torn shuttle
#

and I didn't modify it in any way, that is sort of the point

#

no durability change either

lost matrix
torn shuttle
#

I don't really know how to fix this one ngl

echo basalt
#

make your own remove method

lost matrix
#

Yeah just iterate the inv and check every slot with isSimilar ^^

#

Unless you want to keep track of the amount

echo basalt
#

or do your own checks if you're hypixel

torn shuttle
#

I might have to do my own checks

echo basalt
#

mfs out there associate an NBT ID and compare the ID instead of comparing meta

torn shuttle
#

I need to test something, it's just a pain because there's seemingly no unified array for all inventory contents

echo basalt
#

they have like a global palette of some sorts

#

it's wild

quaint mantle
echo basalt
#

but apparently makes checks like 5x faster

torn shuttle
#

I have this really weird suspicion

#

because it's on the same tick I'm teleporting players

#

across worlds

#

and I just have this nagging suspicion it's a minecraft bug

echo basalt
#

nobody:

hypixel:

One of the things we changed within Spigot, was ItemStack and ItemMeta comparisons and accessing. Spigot was comparing NBT Data in a way that was not efficient, and with the sudden rise in SkyBlock popularity, all those items you see in chests, inventories, etc were constantly being compared against each other, especially by things like hoppers, etc, so what did we do to fix it? We added an ID to the NBT compound, then when we first compare items, if they are equal we sync up their IDs and we know for certain that they’re the same, we also track the parent of each NBT Tag, so when something changes within it we change the ID and thus the process begins again, this makes it much faster for us to do just as many comparisons.

torn shuttle
#

I mean seems like it makes sense

dry yacht
#

Comparison cache, what's wrong with that? xD

echo basalt
#

It's probably just a hashcode

torn shuttle
#

what in the fuck did I just see

#

I swear something's wrong I can feel it

#

this is further compounded by this not being consistent

#

god this is such a stupidly overkill feature too

#

I'd regret ever making it if it wasn't so fun

#

ooh

#

did I flip current and upgraded

#

ok it looks like somehow I did

#

argh I know what happened

#

I forgot that the upgraded itemstack was using a shallow copy of the original

#

aight now it's good

echo basalt
#

bro mfs at work didn't push

#

I hate my life

torn shuttle
#

the path to 400 is real

echo basalt
#

pretty sure I was pushing that when I was 15

torn shuttle
#

how much are you pushing today

echo basalt
#

idfk I've not really been hitting legs nowadays

#

or the gym at all honestly

torn shuttle
#

so basically what you're saying is you don't even lift bro

echo basalt
#

I go there once in a while, do the same chest & triceps workout and fuck off

torn shuttle
#

one step closer to yeeting you off a cliff

echo basalt
#

the difference between me n u is that I can write good code and you flex about pushing light

torn shuttle
#

I am pretty sure the real difference is that only one of us is dodging taxes

echo basalt
#

dont remember where tho

torn shuttle
#

impossible, no one can look this good

echo basalt
#

how much is the circus paying you

torn shuttle
#

they couldn't place an offer on my position as a strongman, seems like you really destroyed their budget with your clowning around

#

well I think I see the immediate issue here, players are out of an instance before it's time to loot

echo basalt
#

we both know those are styrofoam weights skullWazowski

torn shuttle
#

that's why they didn't have the budget, do you even know how much 1 ton Styrofoam plates cost?

#

not to mention it would barely fit in the country, part of the gun show would be happening in spain

echo basalt
#

ant iq

torn shuttle
# echo basalt ant iq

don't be so down on yourself, I'd say you can reach portuguese room temp in these winter days

echo basalt
#

you forgot I live in the south

torn shuttle
#

ah yeah a nice hot 24c

#

very clever of you to observe that

echo basalt
#

convert it to fahrenheit and it equals your height in cm

torn shuttle
#

aren't you shorter than me?

echo basalt
#

nope

torn shuttle
#

how tall are you

echo basalt
#

188

torn shuttle
#

ok so basically the same height

#

185

echo basalt
#

if you think 3cm is nothing then I feel sorry for your wife

torn shuttle
echo basalt
#

oh yeah I forgot your wife doesn't exist

worldly ingot
#

I'm his wife

echo basalt
#

we know

torn shuttle
#

yeah I'm helping illusion develop some character

worldly ingot
#

So why are you still here talking about wives? lol

#

Go to #general or just stop talking KEKW

#

Either is fine

echo basalt
torn shuttle
#

that's why I love you wife

#

always so sassy

torn shuttle
echo basalt
#

aight ladiesman

torn shuttle
#

well now I need to delay the dungeon ending by a bit

wet breach
#

not sure if that would work, could try it but might have to specify in code where its at

#

from what I gather it expects it to be in your root jar directory

#

well the root of your project

ancient jackal
#

Just noticing I've never put permissions into the plugin.yml but always checked for them in commands... I recall testing before I knew about this and everything was working but how bad could it end up

analog thicket
#

Can anyone explain why my config.yml wont update?

#

it keeps coming with a broken version of my config..

#

even tho I removed it

river oracle
#

?paste

undone axleBOT
river oracle
#

code and error

analog thicket
#

no error.

#

and i have no idea where the error is in the code.

#

i changed server. that worked...

trim lake
#

what is wrong?
Code:

public class RankAddListener implements Listener {

    @EventHandler
    public void onAsyncPlayerChat(AsyncPlayerChatEvent e) {
        Player p = (Player) e.getPlayer();
        if ( !(p instanceof Player) ) return;
        if (!RanksMenu.addRank.containsKey(p)) return;
        e.setCancelled(true);
        String msg = e.getMessage();
        if (msg.equals("-")) {
            RanksMenu.addRank.remove(p);    
            p.sendMessage(ChatUtils.format("&aZrušil si pridávanie ranku."));
            return;
        }        
        String faction = RanksMenu.addRank.get(p);        
        p.performCommand("f " + faction + " create rank " + msg);
        p.sendMessage(ChatUtils.format("&aÚspešne si pridal rank &e" + faction + "&a."));
        RanksMenu.addRank.remove(p);        
    }
}

Error:

river oracle
#

easy fix though
just use a scheduler
BukkitScheduler#runTask

undone axleBOT
trim lake
#

I want there use same code as on performing command 😄 thats, why I called command.

#

I will take look on that thanks

analog thicket
quaint mantle
#

You know I wanna try to make a antimalware detector for plugins

quaint mantle
#

what?

rare rover
#

Is there a method for converting hex and colors in this channel?

#

I have a method but i don't think its good

#

And i lost my one good one 🤨

quaint mantle
#

okay I have no clue where to start on checking for things

fervent panther
#

How do I use dependencies in my plugin? I'm trying to use snakeyaml

rare rover
fervent panther
#

Why is this a problem?

lost matrix
quaint mantle
#

yea what that guy said

fervent panther
#

oh lol where would I do that

#

ok thanks

quaint mantle
#

Just put a version number in there

fervent panther
#

I just changed it to a number

worldly ingot
quaint mantle
#

hex 2 hex

rare rover
#

Just to chatcolor format

lost matrix
# fervent panther oh lol where would I do that

Usually you would do something like this:

  <properties>
    <java.version>17</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <org.snakeyaml.version>1.33</org.snakeyaml.version>
  </properties>
rare rover
#

Since its &x&1 ect

quaint mantle
#

It's interesting to see people program in vscode

rare rover
#

I used to have a good method for converting but i dont anymore

buoyant viper
#
// Converts &#RRGGBB to &x&R&R&G&G&B&B
    private static String toSpigotHex(String text) {
        StringBuilder sb = new StringBuilder();

        for (var i = 0; i < text.length(); i++) {
            var c = text.charAt(i);

            if ((c == '\u00A7' || c == '&') && i + 7 < text.length() && text.charAt(i + 1) == '#') {
                var hex = text.substring(i + 2, i + 8);

                if (hex.matches("[a-fA-F0-9]{6}")) {
                    sb.append("\u00A7x");
                    for (int o = 0; o < hex.length(); o++) {
                        sb.append('\u00A7').append(hex.charAt(o));
                    }

                    i += 7;
                    continue;
                }
            }

            sb.append(c);
        }

        return sb.toString();
    }```
worldly ingot
#

+1 for using a StringBuilder

#

-1 for not precompiling your RegEx patterns

buoyant viper
#

whats the -1 sadge

#

oh

#

so funny thing

#

i did try doing that w Pattern and Matcher stuff

quaint mantle
#

public final Pattern HEX_PATTERN = Pattern.compile("&(#[A-Fa-f0-9]{6})"); happy birthday

buoyant viper
#

but it ultimately just shit on me bc i was too stupid

#

but yeah ig i couldve just not tried to overcomplicate it and just used Pattern#matches or w/e

worldly ingot
#

I mean all you really have to do is pattern.matcher(string).matches()

buoyant viper
#

yeah the thing is i was trying to use the result of the Matcher

worldly ingot
#

Matchers aren't necessarily cheap but it's better than recompiling the regex is all

buoyant viper
#

and it was not having it

#
    private static String translateHexFormat(String text) {
        StringBuilder sb = new StringBuilder();
        Matcher matcher = HEX_PATTERN.matcher(text);

        while (matcher.find()) {
            if (matcher.start() > 0) {
                sb.append(text, 0, matcher.start() - 1);
            }

            sb.append("\u00A7x");
            for (int i = matcher.start() + 2; i < matcher.end(); i++) {
                sb.append('\u00A7').append(text.charAt(i));
            }

            text = text.substring(matcher.end());
        }

        sb.append(text);
        return sb.toString();
    }``` this is what it was originally, it *almost* worked, but fell apart real fast
rare rover
#

hmm

buoyant viper
#

it took me days to realize my issue was i was modifying the original text string without updating Matcher

#

so i shouldve gone for an approach that either didnt reassign text or update matcher on each iteration (gross)

buoyant viper
worldly ingot
#

Good. As it should

frank kettle
#

I see intelliJ warn me about it all the time. What's the con about using strings?

worldly ingot
#

String concatenation in a loop isn't very memory efficient so if you can use a string builder you should

frank kettle
#

How bad is it?

#

Cause I do it all the time

#

But my strings in fors are usually small fors, not huge or "infinite" loops

worldly ingot
frank kettle
#

Oh I see

#

So in small loops like fors of 5-10 shouldn't be too big of a issue, just a good practice to start doing

#

I didn't know it was an issue, sometimes intellij gives warnings for code efficiency that isn't properly a problem.

#

I'll start using StringBuilder from now on, thank you

wet breach
#

the issue is more or less the JIT being unable to optimize that code better

#

if it was in a loop

#

especially nested loops

#

nested loops do not always get unwound, therefore other code bits may not get optimized as well because of it

rare rover
#

can someone send me the link for an NMS Mapper

#

can't find one

#

😅

#

and again i lost mine because my favorite's reset

#

nvm i found one

river oracle
#

?mappings

#

there should be a command for this link

earnest forum
#

fr

regal geyser
#

hey, i am making a plugin that adds new bosses, and one of them is spider boss, and i wanna make it to be 3times bigger than usual spider, how to do that?

regal geyser
#

like?

vocal cloud
#

Don't need mods.

#

Unless it's for 1.8

regal geyser
#

1.19.2

#

i've tried everything

vocal cloud
#

Resource packs should be able to do it

regal geyser
#

but the hitbox wont be 3x times right?

wet breach
#

no, you would have to implement your own hitbox

#

which won't be easy

hushed pawn
#

what is the topical method to create and manage minigame arenas?

ancient jackal
#

Best way people manage commands without making a big mess out of the OnCommand method?

wet breach
#

I can show you an example

ancient jackal
#

Yes please do

wet breach
ancient jackal
ancient jackal
wet breach
#

I didn't want to spend time adding a bunch of commands to plugin.yml

#

so all those commands are technically subcommands

icy sage
ancient jackal
wet breach
#

I never cared for it and this plugin was made before that

#

but even if it wasn't I still wouldn't care about it

ancient jackal
wet breach
#

since I typically keep my commands pretty easy to use and remember, as well as documented on the resources page I don't care about those that rely on tab completion

ancient jackal
#

I would rather refactor it to make it easy to add any arguments to any sort of command than rewrite some things 10 more times

wet breach
#

see

#

although server tutorial needs to be updated to work again which I will do at some point lol

icy sage
ancient jackal
ancient jackal
wet breach
#

🙂

icy beacon
onyx fjord
#

can i stop kick message from showing in console?

mortal hare
#

probably you can by altering server's logger instance

#

but i dont know how that would work

#

maybe there's already configuration key for that in one of the server's YAML files?

fervent panther
#

Hi can I get the PDC article link for a friend?

#

I lost it

fervent panther
#

Ty

desert tinsel
#

how can I differentiate the inventory from the top one from the bottom one?

chrome beacon
#

Top and bottom inventories from the view

desert tinsel
#

ok, but how can I cancel clicks only on top inventory?

chrome beacon
#

Get the inventory from the click

#

And check if it's the top one

desert tinsel
#

ok, thanks

#
                Inventory inventory = e.getInventory();
                if (inventory.equals(e.getView().getTopInventory())){
                    e.setCancelled(true);
                }```
This doesnt work, somehow
icy beacon
#

tbh working with raw bukkit inventory api is pain

#

just use a library

#

i prefer TriumphGUI but check others too to see which one fits your needs

desert tinsel
#

I just need to cancel clicks for the top inventory

icy beacon
#

what event are you listening to?

desert tinsel
#

InventoryClickEvent

chrome beacon
#

Don't forget the DragEvent

icy beacon
#

shouldn't InventoryInteractEvent cover them all

quiet ice
#

you cannot listen to it iirc

icy beacon
#

why not?

quiet ice
#

or there is some other catch, but I recall not being able to use it

quiet ice
chrome beacon
#

^^

icy beacon
#

ah

mortal hare
chrome beacon
#

Working with the DFU is more painful

mortal hare
#

DataFixerUpper is really the worst name mojang has ever created

quaint mantle
#

?paste

undone axleBOT
quaint mantle
kind hatch
quaint mantle
quaint mantle
kind hatch
quaint mantle
#

i only gotta replace all the uses of components back to normal

#

Hi

#

Help plis

kind hatch
quaint mantle
kind hatch
#

Oh, gotcha.

quaint mantle
#

also this stuff in my commands

kind hatch
#

I think spigot has those marked that way. Not sure why it's not recognizing it.

quaint mantle
#

isnt spigot @NonNull ?

opal juniper
#

what the whole thing?

#

lol

kind hatch
#

Nah, apparently it's NotNull

opal juniper
#

it uses jetbrains so yeah

quaint mantle
opal juniper
#

nonnull is lombok

quaint mantle
#

idk why but the jetbrains maven dependency got removed with the paper one

#

so i added it back

#

i am getting this error a few times:

org.spigotmc:spigot:1.19.3-R0.1-SNAPSHOT/maven-metadata.xmlfailed to transfer from http://0.0.0.0/ during a previous attempt. This failure was cached in the local repository and resolution will not be reattempted until the update interval of maven-default-http-blocker has elapsed or updates are forced. Original error: Could not transfer metadata org.spigotmc:spigot:1.19.3-R0.1-SNAPSHOT/maven-metadata.xml from/to maven-default-http-blocker (http://0.0.0.0/): transfer failed for http://0.0.0.0/org/spigotmc/spigot/1.19.3-R0.1-SNAPSHOT/maven-metadata.xml
#

also this and a 2 with the remap thing

chrome beacon
#

Also run BuildTools

quaint mantle
#

again?

#

oh my bukkit repo was on http

#

still same errors but it does export

#

so kinda weird

chrome beacon
#

You mean the overlapping resource?

quaint mantle
#

just the plugin builds without any problem

#

it runs on the server

tawdry echo
#

someone know how to fix?

#

While build artifact i get this error

chrome beacon
#

Is that libs directory in your project?

tawdry echo
#

si

chrome beacon
#

If so show what it contains

#

Also what class are you trying to import

tawdry echo
#

all is exists

chrome beacon
#

And make sure the package is set correctly in that class

tawdry echo
#

all is correct

quaint mantle
#

Also when i build i get 4 files,
The normal plugin, remapped, remapped-obf, and the original
Does an artifact include the remapped version?

kind hatch
#

Wtf. I'm trying to delete these two rows from the database since they are duplicates. Why won't it let me? :3

quaint mantle
tawdry echo
#

what do to i have to it work

chrome beacon
quaint mantle
tawdry echo
chrome beacon
chrome beacon
#

?paste

undone axleBOT
quaint mantle
#

but when i use the remapped it doesn give me that error anymore

kind hatch
#

Well that's to be expected. If you aren't using the right dependencies, then your IDE can't make sense of what you're writing.

#

If that's a valid class path under the remapped jar, then you'll have to depend on that.

quaint mantle
#

so do i just use the remapped version or another way?

hazy parrot
#

Idk why is that the case

kind hatch
kind hatch
quaint mantle
hazy parrot
kind hatch
hazy parrot
#

Probably intellij being goofy

tawdry echo
# chrome beacon Yes

i think it isnt problem with class content, all is correct, but while artifact build it cant find any class in project

kind hatch
tawdry echo
#

i have tried it and still dont work

chrome beacon
haughty storm
#

I want to use nms for minecraft 1.19.2 but in my maven dependency it says it can't find org.spigotmc:1.19.2-R0.1-SNAPSHOT.
Here is my dependency ```xml
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>1.19.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>

haughty storm
quaint mantle
lost matrix
tawdry echo
kind hatch
chrome beacon
haughty storm
#
java -jar BuildTools.jar --compile craftbukkit
quaint mantle
chrome beacon
quaint mantle
kind hatch
lost matrix
chrome beacon
#

?nms

chrome beacon
#

^^ Mojmaps guide

haughty storm
#

ok, thanks. I'll try that

quaint mantle
kind hatch
quaint mantle
thorn crypt
#

Hey, what is the best way to get all near block of a player ? Like to get all wool in a radius of 10 blocks

chrome beacon
#

For loop

kind hatch
quaint mantle
#

where exactly?

thorn crypt
lost matrix
kind hatch
# quaint mantle ahh alright

I'd recommend setting up your build section accordingly.

<build>
  <defaultGoal>clean package</defaultGoal>
  <directory>../target</directory> <---- This is where you can change the output directory.
  <finalName>YourPluginName-${project.version}</finalName>

  <resources>
  </resources>

  <plugins>
  </plugins>
</build>
lost matrix
#

Then use the middle Block and call getRelative(x, y, z) on it

thorn crypt
wet breach
lost matrix
quaint mantle
kind hatch
#

So long as you have permission to write there of course.

lost matrix
#

Ah gtg

quaint mantle
thorn crypt
kind hatch
quaint mantle
quiet ice
kind hatch
thorn crypt
quiet ice
#

I'd even say the oppose: You should use clean

#

I had a project where not using clean would double the size of the jar

quaint mantle
kind hatch
thorn crypt
quiet ice
thorn crypt
quaint mantle
kind hatch
#

Just use the package command.

quiet ice
quaint mantle
kind hatch
quaint mantle
#

yea

#

only the remapped one

mortal hare
#

finally i fixed my bugs with node autocompleter uwu

#

it was my fault not paper or bukkits

#

i just handled it improperly

kind hatch
# quaint mantle yea

Then you might want to use the maven-jar-plugin instead of changing the output directory.

Also, you'll want to use the normal jar that's not labeled remapped since the specialsource plugin converts it back to the obfuscated names.

#
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>3.3.0</version>
    <configuration>
      <outputDirectory>../wherever/you/want</outputDirectory>
    </configuration>
</plugin>
tawny star
#

how to configure kotlin in intellij idea i did everything and it still says kotlin is not configured

quaint mantle
kind hatch
hazy parrot
#

You can just select kotlin preset in intellij

tawny star
quaint mantle
hazy parrot
quaint mantle
#

oh sorry

#

using wrong one oops

tawny star
quaint mantle
#

alright thanks @kind hatch it works

tawdry echo
#

i created new project with the same classes and now work lol

quaint mantle
wet breach
tawny star
#

h

wet breach
#

part of the speed ups that you miss out on is caching, maven is smart enough to know to only re-compile what was changed and not everything

#

but it just depends what exactly is happening in your build process that would prevent being able to take advantage of such things

haughty storm
#

How do I spawn an entity using nms

eternal night
#

why?

haughty storm
#

I want to spawn some sort of indicator behind a wall and I want to use a shulker to do this since I can give it the glowing effect but I only want to spawn it for one player

eternal night
#

Then you don't spawn them at all, you only sent the packets needed

haughty storm
#

Sorry, thats what I meant

kind hatch
#

Not me accidentally deleting half my database entries cause I put in the wrong query. 🥹
Thank god it's a test server.

vocal cloud
#

Sounds like you don't have triggers KEKWholdup

kind hatch
#

Triggers?

dry yacht
# haughty storm How do I spawn an entity using nms

I'd avoid creating an NMS entity myself, as that adds unnecessary coupling. There's CraftWorld#createEntity, which is basically a factory function that accepts a Bukkit entity class. Then, there's Entity#getBukkitEntity, use this wrapper to customize the entity according to your needs. Afterwards, you can just send the PacketPlayOutSpawnEntity followed by a PacketPlayOutEntityMetadata to the player you want to spawn this entity to, instead of adding it to the world.

quaint mantle
#

Anyone know a clean/neat way of requesting tons of user input in java, If i carry on with just using scanner variables etc it's going to end up seriously messy

#

There must be a better way

dry yacht
analog thicket
dry yacht
dry yacht
dry yacht
#

Okay, then there's nothing to worry about! :)

analog thicket
quiet ice
tawny star
#

why does intellij show kotlin is not setup when i clicked setup kotlin and did everything

quaint mantle
#

Just for looped through a list

vocal cloud
#

Use bulkInsert

#

Use BulkWrite along with InsertOneModel

#

oh wait nvm read that wrong

haughty storm
tall dragon
tawny remnant
#

Which one is the full-grown wheat the WHEAT or the LEGACY_WHEAT ???

quaint mantle
#

HIIII

haughty storm
tawny star
#

why does intellij show kotlin is not setup when i clicked setup kotlin and did everything

kind hatch
opal juniper
haughty storm
opal juniper
#

what version

dry yacht
# haughty storm Ok, thank you. Could you tell me how I send a packet to a player in 1.19. I have...

If you - like me - don't want to rely on libraries to do this, I'm afraid that there's no easy route to be truly version independent. What I'm doing is the following: Find the field of type EntityPlayer in the Player's class, get it on the player, find the PlayerConnection field on the EntityPlayer's class and get it on the entity player instance, find the NetworkManger class on the PlayerConnection, get it on the player connection instance, then invoke the packet sending method on the NetworkManager which looks like _(Packet<?>, PacketSendListener) or _(Packet<?>, GenericFutureListener<?>) or _(Packet<?>, GenericFutureListener<?>[]), depending on your version.

tall dragon
#
        Player p = null;
        ((CraftPlayer)p).getHandle().b.a((Packet<?>) Yourpackethere);

latest version is this

opal juniper
#

^

dry yacht
# haughty storm thx

If you're really going to use this approach, you should centralize it and write your own sendPacket(Player, Object) helper method, to have a single point of change when updating. Don't scatter it throughout your project, xDD.

torpid blaze
#

Hey,
has anyone any idea on how to easily generate a Get-Down map?

That a minigame where you need to just on almost randomly placed blocks about 100 blocks down without dying to fall-damage. Normaly the Map is a cylinder in which the (randomly) placed blocks are.
I thought of using multiple hightmaps and place blocks on different levels. But another question would be how to check if they are in the cylinder.

**Anyone any advice? **

opal juniper
#

Yeah sounds easy

tawny star
#

why does intellij show kotlin is not setup when i clicked setup kotlin and did everything

opal juniper
#

just pick a few y values, choose random x & z coordinates and then use a circle equation to check if they are in the circle, ie:

x^2 + z^2 <= radius^2

dry yacht
# opal juniper Yeah sounds easy

Depends on how you look at it. If you want a distribution that actually feels random, you're going to have to add more logic than just generating 2D points in a given circle. There will be added constraints like the minimum distance between two blocks.

opal juniper
#

yep but they said randomly

#

so i said randomly

dry yacht
#

almost randomly, xDD

opal juniper
#

ah, i was looking at the other randomly

torpid blaze
rough mesa
#

how i can fix this please i don't know in game (bedwars 1058) kick me whit this error
internal exception: io.netty.handler.codec,decoderException: the received string lenght is longer than maximum allowed (46>16)

dire marsh
#

smells like scoreboard issue

opal juniper
#

smells like you

dire marsh
#

ah yes, I am an io.netty.handler.codec.DecoderException

tawny star
#

why does intellij show kotlin is not setup when i clicked setup kotlin and did everything, i can send you the pom.xml file

dry yacht
dry yacht
# rough mesa yes sry

The thing just is that I have no idea on how the plugin operates internally, so it's going to be hard to help you out. As already pointed out, this sounds like a name has been too long, either in the tab or possibly even in the sidebar scoreboard.

mortal hare
#

the more i implement my project in decoupled core classes, the more i hate it

mortal hare
#

its very hard to maintain bukkit compatibility with good performance (i mean it works, but it loses couple of cpu cycles because of the conversions of collections and objects)

rough mesa
#

sry caps

mortal hare
#

also not to mention generics fuckery

#

that is going on

dry yacht
#

Uhm, I'm not sure that this is how it's supposed to feel, xDD.

#

Which feature are you trying to make compatible with multiple versions?

mortal hare
#

my main idea was to decouple core from the bukkit api completely (not even an import of bukkit api)

#

while creating an implementation of bukkit api plugin in a separate submodule

#

but i think its useless rn

#

since i dont develop this plugin on multiple platforms

dry yacht
#

Sounds like pessimization to me, xDD. Adding a lot of needless CPU work.

tawny star
#

why does intellij show kotlin is not setup when i clicked setup kotlin and did everything, i can send you the pom.xml file

eternal oxide
#

decoupling is a good design pattern, but pointless unless you plan on multiple server types

mortal hare
#

i think i will merge two submodules

#

its a cancer to work with independently

buoyant stag
#

Hello guys

#

Who can help? Make a plugin on api 1.12.2?

#

Please

#

The plugin is light, it is necessary that when the player wears a gold bib, he wears the whole set. Please help

quiet ice
#

?services

undone axleBOT
quiet ice
buoyant stag
quaint mantle
#

Anyone help me with this ide warning? Asking me to declare T type but i have no idea, it's for mongodb

quiet ice
quaint mantle
quiet ice
#

#getMongo returns a raw collection for some reason, so you have this issue

quaint mantle
#

nvm

tardy delta
#

MongoCollection<T>

quiet ice
#

Add generics then

quaint mantle
#

Ahhhh

#

I see

buoyant stag
#

The plugin is light, it is necessary that when the player wears a gold bib, he wears the whole set. Please help

quiet ice
#

I'm surprised the IDE doesn't complain here

quiet ice
buoyant stag
quiet ice
#

(also what's up with russians trying to get us to develop plugins for them? This is the third time this weekend)

dry yacht
quiet ice
#

ooo, he's silent

#

I'll take that as a yes

tardy delta
#

what confuses you

quiet ice
#

for (initializer;condition;step)

#

So technically for (;true;) is valid and equal to while (true)

buoyant stag
quiet ice
#

Basically something that is run when entering the loop

#

Such as initializing the counter variable (that is the most common use)

mortal hare
quiet ice
wet breach
eternal oxide
#

Hi Afghan I'm superman

tardy delta
#

💀

late sonnet
limpid nexus
quiet ice
#

It's because usually we increment by 1 every time we step through the loop fully

mortal hare
#

its an old technique of C programmers, who think that ++i is faster to compute than i++ because it returns your the current state instead of previous one, thus no storing of previous value is needed, thus faster impl can be made

eternal oxide
mortal hare
#

but its not true anymore afaik these days

limpid nexus
quiet ice
#

However an increment of 2 is also not all too rare - sometimes you get other loops too

mortal hare
#

it may be different in JVM though

eternal oxide
#

very

#

maven

mortal hare
#

use gradle

eternal oxide
#

Ant is very old and less and less supported

quiet ice
#
Iterator it = getIterator();
for (Object o = it.next(); n.hasNext(); o = it.next()) {
}

Is also not too rare

tardy delta
#

or put the iterator in the initialisation

mortal hare
#

i prefer:

for (Iterator it = getIterator(); it.hasNext();) {
  Object object = it.next();
}
quiet ice
tardy delta
#

i prefer to not use an iterator :)

quiet ice
#

ah, it should be it - forgot to rename it

mortal hare
#

best with iterable objects:

for (Object object : objects) {

}
tardy delta
#

objects.forEach

quiet ice
mortal hare
#

who cares 😄

quiet ice
#

Well if you want to demonstrate what it can do it might be useful to not keep it empty

mortal hare
#

i didnt call this a for loop 😉

#

i said its for iterables

late sonnet
# tardy delta objects.forEach
StreamSupport
  .stream(iterable.spliterator(), false)
  .collect(Collectors.toList()).forEach
```![uwu](https://cdn.discordapp.com/emojis/910442589151445044.webp?size=128 "uwu")
mortal hare
#

i still dont get it why people use streams

late sonnet
mortal hare
#

personally for me, they make code hard to read

tardy delta
#

ugh streamsupport

#

real men use ReferencePipeline.Head

mortal hare
#

unless i use parallel streams i see no benefit of using those

proven current
#

Hi guys

#

Can someone help with writing a plugin?

vocal cloud
#

?ask

undone axleBOT
#

If you have a question, please just ask it. Don't look for staff or topic experts. Don't ask to ask or ask if people are awake or available. Just ask the question to the channel straight out, and wait patiently for a reply. Make sure you use the right channel regarding the topic of your question. Create a thread in case the channel is already in use!

tardy delta
#

are you going to write it yourself or do you need someone to do it?

proven current
quiet ice
#

Another (at least where I am active in) common usage of for loops is:

for (AbstractInsnNode a = method.instructions.getFirst(); a != null; a = a.getNext()) {
}
vocal cloud
quiet ice
proven current
proven current
vocal cloud
#

And I did ?ask so you can ask you're question

pseudo hazel
#

you still havent told us what you need help with specifically

thorn crypt
#

Does anyone have an idea on how I can get the distance between me and the player i'm looking at ?

pseudo hazel
#

lol

#

looks about right

eternal night
#

math

pseudo hazel
#

but they just wanna know how you got it, not the actual answer

proven current
#

I want to write a plugin for privileges, but I don't know where to start 👍

undone axleBOT
tardy delta
#

dunno what "for privileges" means but you can google a tutorial on how to start ig

tardy delta
#

dunno what that means either

proven current
mortal hare
#

in slavic languages privileged means a donator or smth like that

#

he wants to make features for donators

proven current
#

prefix

vocal cloud
#

If you want to write a plugin for perks/permissions look into how permissions work, how configs work, and how commands work.

chrome beacon
#

Don't forget to learn java first

chrome beacon
#

Knowing the basics is important

vocal cloud
#

Benefit of the doubt. But big doubt

mortal hare
#

oh yas

#

it feels so good to remove generics from classes

#

wait

mortal hare
quiet ice
mortal hare
#

tbh i think 99% of the plugins on the market break the GPL license then

#

😂

quaint mantle
#

considering it's a spigot discord, it isn't clientside

tall dragon
#

that assumes you know the location of the player you are looking at

tardy delta
#

me who knows exactly nothing about licenses and always picks gpl3

quaint mantle
#

Right

quiet ice
#

I always pick MIT or BSD

quaint mantle
#

Forgot about that completely

#

I retract

lost matrix
tardy delta
#

isnt the point of mit that you can do whatever you want with the project?

#

but you have the mention the author or smth

limpid nexus
#

5 blocks

quiet ice
limpid nexus
hazy parrot
#

For example pterodactyl is under MIT, dave was like do what the fuck you want, idc, it's mit

quiet ice
# hazy parrot I don't even think you have to do this

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
Perhaps not explicitly, but implicitly the author must still be mentioned somewhere through the copyright notice

#

(I also find it funny that I'm one of the few plugin devs that has added a command to dump the license of my plugin (in that case it was the GPL - so even more fun) to the chat)

quaint mantle
#

Cleanest way to generate a random string of letters and numbers?

pseudo hazel
#

generate a uuid xD

quaint mantle
#

Not spigot

lost matrix
eternal oxide
#

UUID is nto spigot

rare rover
#

UUID is java

quaint mantle
#

I was just clarifying I'm not talking about minecraft

lost matrix
#

Well UUID is even more general. Every proper programming language supports the UUIDv3 model

eternal oxide
#

UUID is Java so for anything

quaint mantle
#

I know

rare rover
#

Anyways, how would i spawn a "dropped item" using packets? Cant figure out how to convert an itemstack / material to Entity for the packet parameter

eternal oxide
#

So random letters and numbers, as you asked

#

a single command

quiet ice
#

I think it's called a Markov chain? Idk, would need to look it up

lost matrix
quaint mantle
#

Just creating a random id for person in the database

lost matrix
#

Use a UUID

pseudo hazel
#

sounds like uuid is a perfect solution

quaint mantle
#

Just looking for different ways of doing it

eternal oxide
#

UUID

#

its what its designed for

quaint mantle
#

kk will do

quiet ice
#

Yeah, UUID is the proper solution there - and markov chains are definitely not the solution

quaint mantle
#

do UUIDs work if the server is running in offline mode?

eternal oxide
#

work?

quaint mantle
#

what happens if the online-mode field in the server.properties file is set to false?

crisp forum
#

why don't you just try it lol

quiet ice
#

Well it depends on what UUIDs

lost matrix
#

Then every player that joins will get a random UUID which is connected to his name

mortal hare
#

for each player username

#

and stores them inside usercache.json

#

until it expires

eternal oxide
#

If two players join with the same name they get the same UUID

quiet ice
#

UUIDs you manage yourself won't matter - but player's UUIDs are selected through the md5 checksum of the player name with some extra characters added as a salt

eternal oxide
#

online the UUID comes from Mojang

mortal hare
#

why would you salt an uuid?

pseudo hazel
#

I dont even think you can join with the same name

#

wouldnt it just say that that person is already online?

opal juniper
eternal oxide
#

Two players can join with the same name, just not at the same time

quiet ice
pseudo hazel
#

well yeah, to the server it is the same player

quiet ice
#

I think the salt is Offline player:

mortal hare
#

you cant join with the same name in the server, even native client would not render correctly since packets would be incorrect

quiet ice
#

protocolwise nothing forbids it

#

except perhaps the tablist and scoreboard - but that can be worked around

mortal hare
#

well client rejects entities with same uuid iirc

quiet ice
#

doesn't the client only know the EID?

opal juniper
#

yeah think so

mortal hare
#

could be

#

is there any better way to remove duplicate Strings from the collection apart from using set?

#

sort is closest that i could think of

quiet ice
#

set is the only efficent way of doing it

mortal hare
#

problem is that i need to convert set to list after that

quaint mantle
#

i am bored

quiet ice
#

staying with list can easily get you O(n²) complexity

quaint mantle
#

HashSet?

hazy parrot
#

It's impl of set

daring lark
quaint mantle
#

or HashMap.

quiet ice
mortal hare
#

yea that's what i do currently

quaint mantle
#

set string as the key and array of where the strings are as the value.

mortal hare
#

im thinking if there's more faster way to do this

#

since i believe that iteration of set could be kinda slow

quiet ice
#

Well you might want to ask yourself why you are using a list in the first place

mortal hare
#

because im forced by the bukkit api 😦

quiet ice
#

For what?

mortal hare
#

setting aliases

quiet ice
#

pft - why care about efficiency there?

#

You only do it once

#

congrats - that is basically my code but worse

mortal hare
quaint mantle
#

i mean for converting to the list.

mortal hare
#

since it could use System.copy sometimes

quaint mantle
#

nvm.

#

i am tired.

eternal oxide
#

aliases?

#

of what?

mortal hare
opal juniper
#

commands

eternal oxide
#

Yeh optimizing or worrying about performance there is a waste of time

quiet ice
#

Yeah like at most you loose 100 µs every time the server starts up

opal juniper
eternal oxide
#

Time you would lose converting to a Set or however you want to process it

daring lark
quaint mantle
#

i have been writing java code for a while, does anyone ever make a new class and file for that class and keep writing code in that file until there is too much code in that file?

#

then you make even more files to split up the code?

daring lark
#

wut?

quaint mantle
#

i keep doing that in java.

mortal hare
#

that is called refactoring

daring lark
#

no

#

i use my main class for everything

mortal hare
#

😄

quaint mantle
#

thing is, i barely ever do that with other programming languages, probably.

daring lark
quaint mantle
#

I've got the same set up for mysql on another project and works fine... For some reason it's connecting but showing null and saying it isn't connected? No errors

quiet ice
mortal hare
quaint mantle
#

records_db is a cool name.

#

?

#

a database that stores records.

#

Okay

quaint mantle
#

try connecting to the database with another application, does it work?

#

yep

#

Doesn't make sense at all lol

minor fox
#

Does saving the texture properties from a GameProfile make it possible to get a skin without the server accessing the MC textures endpoint?

quaint mantle
#

Anything wrong with this method?

#

and I just used DI for the classes

#

So shouldn't be null

dry yacht
tardy delta
#

insert into person_records(entries...) values(values...)

#

no?

quaint mantle
#

What

#

oh yeah

#

you need to specify the columns.

tardy delta
quaint mantle
#

That's not the problem

#

I use this way all the time, works fine

minor fox
quaint mantle
#

check mysql version and your jdbc connector, if they are compatible?

#

Okay

dry yacht
opal juniper
#

PreparedStatements are better!!

quaint mantle
#

that is not raw sql.

#

probably.

tardy delta
#

got that from w3schools cuz i was confused whether you actually need to specify the columns

quaint mantle
#

I don't need to specify columns

tardy delta
#

you do

dry yacht
quaint mantle
#

are you able to connect to the database with another application?

minor fox
quaint mantle
#

maybe just make it look like another player joined?

#

then change the player's display username?

dry yacht
quaint mantle
#

just make a call to the mojang api for the skin texture?

minor fox
#

The goal is to save the sprite in whatever format and then somehow apply it to a profile without any contact to mojang APIs

#

But that seems to be quite the challenge

quaint mantle
#

just use a custom texture pack maybe?

dry yacht
minor fox
#

Which doesn't make sense to me because I have never noticed a rate limit when playing on servers

dry yacht
quaint mantle
#

so, i wanted to ask something.

minor fox
quaint mantle
#

does anyone wanna start a collab project of some sort? Any collab project should be fine. I have never really worked on a project with anyone. This might be a good way to learn stuff and also get feedback on how I code. Possibly even try learning things like CI/CD and other real world development stuff?

dry yacht
quaint mantle
#

if anyone's not doing anything right now, perhaps?

dry yacht
quaint mantle
#

i have an active project too lol and i just wanted to take a break from it.

minor fox
dry yacht
quaint mantle
#

i am actually going to be doing something like that too probably sometime soon.

quaint mantle
#

how is it that fast?

tall dragon
#

i guess it has them in memory

dry yacht
quaint mantle
#

anvil GUI, hm.

#

i will steal that idea, probably.

dry yacht
#

I basically cache all these texture values in a database and load them all on startup. I sacrifice memory for resolving speed.

dry yacht
minor fox
quaint mantle
#

you are loading your database in memory?

tardy delta
#

ij is doing weird

pseudo hazel
#

I never though about using the player inventory for the anvil ui , but thats pretty clever

#

so before it opens it does it like store the players actual inventory somewhere?

tall dragon
pseudo hazel
#

or how does that work

quaint mantle
#

what other GUIs with textboxes do we have?

tall dragon
#

no problem

pseudo hazel
#

the anvil is the only one

dry yacht
tall dragon
#

but that is it

quaint mantle
#

signs are kind of, eh.

tall dragon
#

signs do not have slots obviously

quaint mantle
#

wait, what about written books?

pseudo hazel
dry yacht
tall dragon
quaint mantle
#

does the text get sent to the server everytime player types something with written books?

dry yacht
#

Nope

quaint mantle
#

but it does with anvils?

dry yacht
#

Books are entirely clientside, they are only sent if you sign the book

dry yacht
quaint mantle
#

is there an event for that in the bukkit api?

pseudo hazel
minor fox
# dry yacht

Would the textures column be a reference to the textures endpoint then?

dry yacht
pseudo hazel
#

yes

dry yacht
# minor fox Would the textures column be a reference to the textures endpoint then?

Would be something along the lines of:

eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjM3NTVjYmIyNzU3NTgxNmI3ZWE1NTc3NGMzYTdjNmEwYzc5NDVlZDIyYzI0M2NlMTlkNzdmOGNjOWEifX19

Which decodes to:

{"textures":{"SKIN":{"url":"http://textures.minecraft.net/texture/63755cbb27575816b7ea55774c3a7c6a0c7945ed22c243ce19d77f8cc9a"}}}
pseudo hazel
#

which makes sense since it has to update the output item for vanilla

dry yacht
minor fox
#

Right, that's what I store persistently atm. What I don't get is how the client loads all those heads when the limit it 600 per 10 min

quaint mantle
#

so, do player head textures get rendered server-side or client-side?

pseudo hazel
#

if you say rendered, it means client side

quaint mantle
#

hm.

pseudo hazel
#

the server doesnt "render" anything

dry yacht
quaint mantle
#

do player head textures get requested from mojang api server-side or client-side?

pseudo hazel
#

probably server side?

#

I think the client has to download/cache the textures though somehow

dry yacht
quaint mantle
#

does mojang api not have rate-limiters?

#

oh.

dry yacht
#

I just wouldn't waste a single thought about clientside rate-limiting, as it's out of your control anyways. Do the best job on the server and call it a day.

quaint mantle
#

ok.

minor fox
dry yacht
minor fox
#

Yeah I guess bottom line is cache the texture properties and let the client do its thing

quaint mantle
pseudo hazel
#

every uuid is linked to a url

#

as per the database

dry yacht
#

The texture ID is unique, don't try to find any patterns.

#

As they store every ever uploaded texture, it has nothing to do with UUIDs.

quaint mantle
#

oh.

minor fox
#

While we're on it, I noticed a value was an exact match of a signature, what exactly do you need the signature for?

dry yacht
#

Which is why there are services which allow you to create custom heads. They just upload an image to one of their accounts, generate a new texture ID and hand that out to you.

quaint mantle
#

hm.

tall dragon
#

you can even use an account you own for that

#

with either your own, or maybe you have a seperate account

quaint mantle
#

is there no limit to how many skins can be uploaded per account over some amount of time?

dry yacht
dry yacht
dry yacht
minor fox
#

Have you had any issues with that?

dry yacht
#

I also wrote my own NPCs, and that worked, so... well... I guess it works, xD

pseudo hazel
#

awesome

dry yacht
#

You just need to try it. But you could also just save the signature value and add it to the property map, that wouldn't hurt and maybe even future-proof your code.

quaint mantle
#

i am bored.

minor fox
#

Well I noticed the decoded base64 has the signatureRequired field, so perhaps it makes extra requests if a signature is needed but not found?

dry yacht
quaint mantle
#

so, about the thing i asked earlier, does anyone wanna do some kind of collab project?

tardy delta
#

hey bored, im doge

pseudo hazel
#

he bored, im distracted

dry yacht
tardy delta
#

straighten up lil soldier

dry yacht
quaint mantle
#

it might be good for getting some real world development experience.

dry yacht
pseudo hazel
#

so what is fake world development experience

quaint mantle
#

does not necessarily have to be limited to just making a minecraft plugin.

minor fox
rare rover
#
    @Override
    public void replacePlaceholder(Hologram hologram, int index) {
        HologramLine line = hologram.getLines().get(index);
        String text = line.getText();
        for (Player player : hologram.getLocation().getWorld().getPlayers()) {
            String newText = PlaceholderAPI.setPlaceholders(player, text);
            line.setText(newText);
            updateTextFor(line, newText, player);
        }
    }``` would there be a better way? Since this will be executing every like second
quaint mantle
#

i have sort of just done my own projects.

tall dragon
dry yacht
minor fox
#

Couldn't agree more

dry yacht
#

Now I'm sad about my abandoned heads plugin, :(.

minor fox
#

Is it available on Spigot?

dry yacht
#

No, I never released it. The main issue is that minecraft-heads sells it's own plugin to make up for server costs, and they could sue me. I hate depending on the "good will" of others. I'd need to roll my own open source database along side of the plugin, if I want to point it at a source that couldn't get me in trouble.

quaint mantle
#

just some random project to work on perhaps?

#

maybe a cool minecraft plugin of some sort, a significantly large project?

tardy delta
#

i know this lol

#

but its kinda dead

quaint mantle
#

i dont mean a minecraft server, necessarily.

#

i just mean a collab programming project of some sort to work on with multiple people.

dry yacht
tardy delta
#

id like to do that too, i only have no idea what

quaint mantle
#

maybe a complicated game or something?