#help-development

1 messages · Page 366 of 1

sterile token
#

Dont repost messages, you are not paying anyone to getting instant support, this is a community so if you want isntant support go and paying dev for making it for the time you need it

#

That should be asked to a staff member, also wrong channel, this must only be use for programming questions

dry zinc
#

well what channel then

sterile token
dry zinc
#

alr

sterile token
#

Any resource staff should be able to help you

gleaming grove
#

spawn itemframes with packets

lost matrix
frail gazelle
#

Is there any difference between using item.setAmount(0) and inventory.removeItem(slot) ?

twin venture
#

hi i tried < current players . but same :

in console i get only this message after 1 player left in arena :
[23:29:09 INFO]: Game is in finished mode

https://paste.md-5.net/docozaleve.cs

#

this is my code

sterile token
#

Is this something not from Java 8, because the method DateTimeFormatter#format() doesnt expect a duration as input

Duration duration = Duration.ofMilis(36610214L);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
String formated = formatter.format(duration);
System.out.println(formated); 
lost matrix
lost matrix
frail gazelle
lost matrix
#

removeItem(ItemStack) removes the first item it finds in the inventory

sterile token
#

Right nothing to say just a fast reaidn help me to fix the issue

twin venture
#

my brain , there is no reason why it should not contiune the code :()

dry yacht
#

Ah yes, let's reject the patch of an embarassingly stupid mistake. Well, I guess it's all about manual patching then. I posted the diff, we can just tell that to people if they ask in here.

You tried! :)

grand flint
sterile token
sterile token
dreamy vessel
#

if i wanted to make a cutting board that you can place down, put an item onto, and right click with a knife to receive an output item, how would I go about that? is there a plug-in already out there that does this?

dry yacht
sterile token
#

right

#

In my case doesnt allow to build 1.8.8 javadocs from BuildTools, is that related to it?

bold vessel
#

Somethings like this

dreamy vessel
#

re texture an elytra?

sterile token
#

Isnt a mod that? 🤔

echo basalt
#

can't you just... play A LOT with vectors?

bold vessel
sterile token
bold vessel
echo basalt
#

basically slow fall + flyspeed

dry yacht
bold vessel
echo basalt
#

well

#

vectors

sterile token
bold vessel
#

What is vectors i never use that

sterile token
#

Hmnn

dry yacht
#

vector<uint8_t>

sterile token
#

dont troll bruh

bold vessel
#

💀

dry yacht
sterile token
quiet ice
#

oh, and we are not talking about java.util.Vector vectors

#

Those are some cursed vectors

#

even if the idea is the same

sterile token
#

sorry my sintax, cellphone goes brr

grand flint
#

How should I store information about a noteblock? Should I store the location of the block with it's information?

sturdy heron
#

this looks like the hang glider is pushing the player upwards and forwards using vectors

sterile token
sturdy heron
#

you didn't really mention the setting velocity /pushing player part

sterile token
tall dragon
#

im working on a rpg-like pathfinding algorithm. but i am having difficulty knowing where to start. let me explain the idea.

There are going to be paths from Locations to Locations and the player should be able to set a target location. the algorithm will then calculate the shortest path to that location given a list of paths it knows about. my initial idea was to have "path points" and when looking for a location it would first look for the closest path point and just do a whole lot of looping to find out what the best path would be. i am wondering if there is a better solution though. i have included a shitty drawn picture to explain the idea better.

The structure would look like this in java psuedocode:

public class Path
{
    
    // begin / end
    private final Location primary, secondary;
    private final List<Location> pathPoints;
    
}

public class RpgWorld {
    
    private final List<Path> paths;
    
}

Any ideas. to make this optimized or maybe a whole differect approach to it?
ps. sorry for the wall of text.

rough drift
#

Search up some A* or Flood-Fill

tall dragon
#

does that work with a structure like this though

rough drift
#

Yeah

#

It doesn't care really

tall dragon
#

never meddled with any pathfinding before so

tall dragon
rough drift
#

Depends on how many nodes you have

tall dragon
#

hmm well thats gonna vary massively on different kind of servers

#

could be small, could also be a ton

quiet ice
#

You likely mean BFS or DFS

rough drift
#

Yeah

#

A flood-fill type

#

not flood fill on it's own lol

tardy delta
#

uh oh algorithms

quiet ice
#

Flood-filling can be remarkably complex

rough drift
#

Yes

#

It can

#

but it's a solid way of doing it

tall dragon
#

hmm what would you guys recommend here then

#

rlly have zero knowledge about pathfinding yet

dry yacht
#

Dijkstra's algorithm will probably be enough

tall dragon
#

would prefer to go with something a little easier to learn, its just a hobby project and does not have to be of production quality

#

just tryna teach myself something new

quiet ice
#

For small amounts of nodes, BFS suffices

#

Since there is no notion of depth DFS is probably not ideal

tall dragon
#

what does BFS even stand for

quiet ice
#

breadth-first-search

tall dragon
#

hmm okay. i have no idea what that means yet. but it sounds interesting

quiet ice
#

Basically you iterate over all child nodes recursively until you find the node you'll want - once you hit it you know the path

tall dragon
#

does that get you the shortest path then tho? given there are multiple paths to a destination?

quiet ice
#

Pretty easy to implement for DFS (depth-first-search) (which basically goes in depth first) but it wouldn't return the shortest path, to make it BFS you'd need to basically create layers

#

just copy & paste some code from wikipedia

tall dragon
#

i want to know how it works a little bit tho haha

#

anyway, thanks for the information so far. i'll do some more researching

quiet ice
#

You can imagine it like a circle that is expanding gradually until it finds it's target

tall dragon
#

hmm okay. but don't i already know the target?

quiet ice
#

Uh, you can't really create a path if you don't know the target.

tall dragon
#

right

quiet ice
#

hmm, though looking at the graphic more closely you most likely want to find the path node closest to you

tall dragon
#

right

#

then i have to find out which route to take to get the shortest distance to the destination

quiet ice
#

However that doesn't mean that it is the shortest path (e.g. in your case it would first go south), so I guess you can be a little bit inefficient and just do the distance check on all nodes, skipping any that are already known to belong to an already existing path

tall dragon
#

yea thats also a problem. the node closest to the player might not belong to the path that is shortest to the destination

#

difficult

quiet ice
#

Alternatively you could use something like A* and give blocks near path nodes a smaller resistance value than those far away

echo basalt
#

I'd maybe make a system of crossings and intersections

quiet ice
#

That however means that the pathfinder could sometimes cheat and perform shortcuts that may go in the middle of the wild

echo basalt
#

If you have ever played cyberpunk, you will notice that the pathfinding algorithm they use is a bit choppy and tries to make you follow roads rather than going through buildings

quiet ice
tall dragon
echo basalt
#

For 3d space it's a bit complex

tall dragon
#

isnt it rlly 2 d in my case tho?

#

then just get the highest block at x, z

eternal oxide
#

not really, you may have an obstacle in the way

quiet ice
#

Yeah I think I'd go with an A* pathfinding lib and set the resistance value of paths to be much lower than for other blocks

tall dragon
#

hmm

eternal oxide
#

I'd probably go with a tree search adding weights to each path

quiet ice
#

It'd struggle a bit with mountains or otherwise impassable terrain if you go with a 2D representation

quiet ice
tall dragon
eternal oxide
#

weight each connection between nodes by it's distance

tall dragon
#

oh thats actually smart

#

so i dont have to calculate each time

eternal oxide
#

you then tree search connected nodes between start and destination adding up the weights

#

select shortest path

tall dragon
#

how do i find my start node using this way though

#

thats still a difficult issue

eternal oxide
#

wher are you starting from?

tall dragon
quiet ice
eternal oxide
#

ah, in that case you count the distance to teh nearest path

#

simple trig

tall dragon
#

yea that path might not be the correct paht tho

#

for the fastest route

eternal oxide
#

you will be calculating to all near paths though

#

if you are not starting on a path/node

tall dragon
#

so i will be doing the tree search on each near path then u mean?

eternal oxide
#

well where you start is yoru origin

#

you begin yoru tree search from there to each nearest path, then add weights in a tree search

sterile token
#

How do you format a timestamp (represented via int or long) using DateTimeFormatter because the format method doesnt accept any timestamp rom what i have being seeing+

tall dragon
eternal oxide
#

yes

quiet ice
#

You probably can instantly convert from long to LocalTimeDate though

#

Also: Are you out of your mind to use ints for timekeeping?

tall dragon
# eternal oxide yes

hmm seems like a cool idea which i am able to grasp, think i will try this approach. thanks 🙂

lost matrix
quiet ice
#

that too

sterile token
#

So how i display in a cutom format?

lost matrix
#

A Duration or an Instant?

sterile token
#

I was wondering to specif ask them to insert a format like: HH:mm:ss and then conver my timestamps into that format to be displayed

lost matrix
quiet ice
#

it shouldn't be too hard to convert it yourself

sterile token
quiet ice
#

asking is takes longer

tall dragon
quiet ice
#

this is just a String#split and String#codepointAt

sterile token
# lost matrix ?

What are those? I never use them before i iwll prob read about them

quiet ice
#

perhaps even with an underlying switch

quiet ice
tardy delta
#

hmm would it make more sensing throwing an exception saying that "some invalid stuff" cannot be parsed instead of one saying that the pi() function doesnt accept any params?

lost matrix
sterile token
#

So an Instant because im keeping how much he has played on the server

quiet ice
#

Though not every point in time need to be an instant, which is where it gets complicated

#

An Instant is the amount of milliseconds since 1970

#

that is the de-facto standard definition

lost matrix
eternal oxide
#

tiem played is a duration

sterile token
#

okay

#

Okay so basically its a duration right

halcyon hemlock
quiet ice
#

Yeah

sterile token
#

Okay and can duration be formated with DateTimeFormatter?

quiet ice
#

Is a duration a date?

sterile token
quiet ice
sterile token
lost matrix
# sterile token Okay so basically its a duration right

So a Duration. So either manually format a String

  public String format(Duration duration) {
    long HH = duration.toHours();
    long MM = duration.toMinutesPart();
    long SS = duration.toSecondsPart();
    return String.format("%02d:%02d:%02d", HH, MM, SS);
  }
quiet ice
#

Yeah, it's not a date - but it CAN be a time

lost matrix
#

There is no buildin java functionality for duration formatting (as far as i know)

sterile token
#

Okay

#

But i musnt pre define the format 😬

quiet ice
#

If you want to you CAN use LocalTime or similar but it is a hack

tall dragon
#

well just pass in the format then

sterile token
#

fkg java

#

This are the reasons that Js libs are better designed and make it a better lang for working with rather this oddy lang which you have to make everything for it

quiet ice
#

DateTimeFormatter would at least be able to format and read LocalTime

hazy parrot
#

¿

lost matrix
#

Im not even gonna bother commenting this. Just take it a a typical Verano comment.

quiet ice
#

It's dangerous but if you really don't want to write a few lines of code you CAN use LocalTime

sterile token
quiet ice
#

It will not be able to store more than 24 hours though

#

For anything under 24 hours, LocalTime CAN be used

tall dragon
onyx fjord
#

I have an util for that

quiet ice
sterile token
tall dragon
#

yea so?

sterile token
quiet ice
#

A>Fgnköklefvdbjaslmnnbjdm,bjkbum

tall dragon
#

get the format from the config, use it

sterile token
onyx fjord
#

Not today

sterile token
#

right

quiet ice
#

LOCALTIME

#

LOCALTIME

#

LOCALTIME

onyx fjord
#

Ok we get it

tall dragon
#

whoah chill

#

no yelling

onyx fjord
#

No need to scream

quiet ice
#

You can even work with DateTimeFormatterBuilder - only issue is that you can't easily convert a LocalTime to a Duration

sterile token
#

He?

#

I just want to format my timestamp to a format similar to DateTimeFormatter ones

#

Its not diff to understand, you are just giving circle walks on something simple to explain

quiet ice
#

Yeah use LocalTime

#

It's the wrong choice but you want the wrong choice so I give you the wrong choice

#

Don't complain that LocalTime breaks on intervals of >= 24 hours

sterile token
#

🤡

#

That wont work

hazy parrot
#

I really don't understand what is so hard about getting seconds and dividing it

sterile token
#

Because i need to parse timestamps bigge rthan 24 hs

quiet ice
#

then do it yourself

sterile token
quiet ice
#

DateTimeFormatter CANNOT work

tall dragon
#
    /**
     * Format time in "X days Y hours Z minutes Å seconds"
     *
     * @param seconds
     * @return
     */
    public static String formatTimeDays(final long seconds) {
        final long minutes = seconds / 60;
        final long hours = minutes / 60;
        final long days = hours / 24;

        return days + " days " + hours % 24 + " hours " + minutes % 60 + " minutes " + seconds % 60 + " seconds";
    }

here just take this, modify it a little bit to use a format configured and be happy.

quiet ice
#

unless you go the insanely stupid move of using LocalDateTime...

#

But as I said, INSANELY stupid

sterile token
hazy parrot
#

You can easlу make it configurable

tall dragon
#

bruh what is the problem then i dont get it

#

get the format from the config -> use it

sterile token
crimson relic
#

istg

tall dragon
#

i have just shown u?

sterile token
#

Like: hours:minutes:seconds, hours:minutes, etc

tall dragon
#

yea i also told you "modify it a little"

sterile token
#

SO there is no class for this shit right? 😡

eternal oxide
#

DurationFormatUtils.formatDuration(millis, "**H:mm:ss**", true); From Apache Commons

lost matrix
#
  public String format(Duration duration, String format) {
    String hh = String.valueOf(duration.toHours());
    String mm = String.valueOf(duration.toMinutesPart());
    String ss = String.valueOf(duration.toSecondsPart());
    return format.replace("hh", hh).replace("mm", mm).replace("ss", ss);
  }

Its literally not black magic

quiet ice
#
int hour = 0;
int min = 0;
int sec = 0;
int ms = 0;
for (int i = 0; i < format.length(); i++) {
  int format = format.codepointAt(i);
  swtich (format) {
  case 'H':
    hour *= 10;
    hour += Integer.parseInt(string.codepointAt(i));
    break;
  // ....
}
sterile token
quiet ice
#

Of course it is that easy!

sterile token
#

why didnt just sent that from the start instead of rounding around a circle, it was going to be faster for all

tall dragon
#

cuz we dont want to spoonfeed

eternal oxide
#

Apache Commons is shaded with Spigot

sterile token
#

thanks to all in general

lost matrix
eternal oxide
#

2 is included or 3 I forget which

onyx fjord
#

2 is what I have in compile only

#

So probably that

quiet ice
#

I believe they got rid of 2

#

but it was commons-text that was removed iirc

sterile token
#

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/time/DurationFormatUtils

#

Fkg spigot 😡

eternal oxide
#

depend on Spigot not API or add the dependency with a scope of compile

sterile token
eternal oxide
#

ah

#

add commons as a depend then

lost matrix
#

Yeah lets shade in half a megabyte for replacing 5 lines of code 😄

sterile token
#

That why i asked if java didnt already implement something like that

lost matrix
#

commons lang is still useful tho

sterile token
#

I mean currently java is being really oddy compare to other langs, i would think why spigot is till coded over Java. Because in others langs you have all the commons utiltiies you will need for parsing durations, dates, etc without harcoding like Java

tall dragon
#

it only takes like 5 lines to make a method that does this for u tho

crimson relic
#

infact you were even given it

#

💀

lost matrix
#

If you would have worked properly with other languages and Time related problems then you know that
Java has a very decent approach (post java 9 at least) in comparison.

sterile token
crimson relic
#

please dont compare js and java

lost matrix
#

JavaScript -> inconsistent nightmare or needs 500mb of node modules
Python -> inconsistent nightmare vanilla but has some decent libraries
C++ -> horribly complicated
C# -> decent
Java -> decent
Rust -> complicated

quiet ice
#

Additionally very few java projects suffer from Y2K38

sterile token
quiet ice
#

Bug that will occur in 2038

hazy parrot
#

overflow ?

quiet ice
#

Yeah

sterile token
#

overflow?

#

Hmnn

#

too much knowledge for me

lost matrix
quiet ice
#

Y2K38 is the prime example why timekeeping and int don't mix

lost matrix
#

All you have are milliseconds in js. For everything else you need massive 3rd party timing libraries

sterile token
pseudo hazel
#

also making spigot in anything else but java would have been a pain since it kinda needs to interface with minecraft java edition xD

sterile token
hazy parrot
#

XD

pseudo hazel
#

barring some exception like maybe kotlin

quiet ice
sterile token
quiet ice
#

MCHPRS is perhaps also another example of why you can't just reimplement minecraft

sterile token
lost matrix
pseudo hazel
#

I see

quiet ice
#

(Cuberite being that implementation)

pseudo hazel
#

good to know I guess

lost matrix
#

I see. Never bothered looking upt the name.

pseudo hazel
#

but it must not have been easy

quiet ice
#

MCHPRS (Minecraft high-performance redstone server) is a more specialised server, but it is written in Rust apparently

lost matrix
#

Meh. You can probably code up a barebones server in js/java/kotlin/python etc in a week or so.

quiet ice
#

it apparently has worldedit

pseudo hazel
#

okay

#

well I guess im dumb then

crimson relic
pseudo hazel
#

anyways ill leav now xD

lost matrix
#

If only writing plugins for that would be possible. I think Rust is a pretty cool language.

quiet ice
#

there also used to be truecraft if you are into that sort of stuff but it wasn't maintained for AGES now and I don't know how good it was

tall dragon
#

if someone decided to create a whole api for it

crimson relic
lost matrix
lost matrix
#

Ah i see they use Bevy...

#

Which means you would still have to recompile the whole server with all your plugins

echo granite
#

What's the difference between Player#hasPermission vs Vault's Permission#has(Player, String)?

eternal oxide
#

they are the same

#

use Vault#playerHas to actualy query a permission plugin

regal scaffold
#

One is a static reference and the other isn't. Usually use Player#hasPermission

echo granite
regal scaffold
#

Algarl doesn't hasPermission still return the same?

eternal oxide
#

Player#has will test active permissions on teh player but will not test against wildcards

eternal oxide
#

Vault#playerHas will support wildcards as it direclt queries the permission plugin

echo granite
#

wdym by wildcards?

regal scaffold
eternal oxide
echo granite
#

oh

#

so * isn't supported by Spigot?

#

like naturally

eternal oxide
#

no

#

Some people get confused because they use LuckPerms and it uses reflection to replace PermissibleBase and as such wildcards work using Player#has

tardy delta
#

dang chatgpt is outdated

regal scaffold
#

Chat gpd doesn't access the internet

tardy delta
#

none of the sites work lol

lost matrix
#

Just use Bing aPES_PoggerDance

tardy delta
#

ew

#

i heard they are using some kind of ai too now

regal scaffold
#

Chatgpt doesn't have access to anything past 2021 cause it doesn't actually connect to the internet

lost matrix
# tardy delta i heard they are using some kind of ai too now

Luke and Linus try out the new Chat-GPT-enabled Bing.

Watch the full WAN Show: https://www.youtube.com/watch?v=AxAAJnp5yms

► GET MERCH: https://lttstore.com
► LTX 2023 TICKETS AVAILABLE NOW: https://lmg.gg/ltx23
► GET EXCLUSIVE CONTENT ON FLOATPLANE: https://lmg.gg/lttfloatplane
► AFFILIATES, SPONSORS & REFERRALS: https://lmg.gg/masponsors
► O...

▶ Play video
tardy delta
#

imma do that tomorrow

#

are you actually watching those whole vids?

lost matrix
#

Nope

#

Only this one

tardy delta
#

kek

bold vessel
#

Som1 have an example how i can give effect on armor equip i try a lot of things with protocol lib and it never work

snow lava
#

how can i execute a method on other thread and receive the result of the method

eternal oxide
#

you can't without waiting for the result.

#

ie locking the first thread

#

usually you would call a method to pass the result

snow lava
#

i solved it, i just used bukkit runnable

hazy parrot
#

that doesn't mean method is executed async

#

bukkit runnable is just interface

hollow hill
#
@EventHandler
    public void AsyncPlayerChat(AsyncPlayerChatEvent e){
        Server server = e.getPlayer().getServer();
        server.broadcastMessage("test1");
        System.out.print("test1");
        for(Player p : Bukkit.getOnlinePlayers()){
            System.out.print("test2");
            System.out.print(p.getDisplayName());
            if (e.getMessage().contains(p.getDisplayName())){
                System.out.print("test3");
                Player player = p.getPlayer();
                e.setMessage(e.getMessage().replace(p.getDisplayName(), ChatColor.YELLOW + p.getDisplayName()));
                player.playSound(player.getLocation(), Sound.BLOCK_AMETHYST_BLOCK_STEP, 10, 29);
            }
        }
    }

any idea why this doesn't work? none of the tests show up and there's no error

hazy parrot
#

Have you registered event?

warm mica
delicate obsidian
#

Hi, I'm trying to make a particle line with this code:

                                Location loc2 = player.getLocation();
                                Vector vector = loc2.toVector().subtract(loc1.toVector());

                                for(double d=0; d<vector.length(); d+=0.5) {
                                    vector.multiply(d);
                                    loc1.add(vector);
                                    Particle.DustOptions dust = new Particle.DustOptions(Color.LIME,2);
                                    player.getWorld().spawnParticle(Particle.REDSTONE, loc1,15,0,0,0,0, dust);
                                    loc1.subtract(vector);
                                    vector.normalize();```
But this doesn't make any line, it just spawn all the particles in the start location. And that's probably because the loc1 value never changes, but I don't know why xD
wet breach
#

Why do you normalize the vector after?

#

Pretty sure you want to do it before and also might want to multiply a large value after normalizing

delicate obsidian
#

ok, will try

regal scaffold
#

Is there any nametag library that can be shaded that's decent enough to change them?

#

NametagEdit works perfectly but it can't be shaded cause it's a actual plugin

#

I can imagine lol

#

But that didn't work for what I needed

#

Do you have any idea?

#

Man nametagedit works perfectly

#

is there no workaround to shade it and not cause any issues?

#

Wait, isn't a nametag just a change ion the display name?

#

Can I not use p.setDisplayName to make my own nametags or am I missing something

#

Where is that from?

undone axleBOT
regal scaffold
#

Thought so

#

Damn

#

I guess time to see how nametagedit does it

#

Fake teams...

#

Oh god

#

Yeah no

regal scaffold
#

Well technically you can't just shade an entire plugin no?

wet breach
#

You can, but most times plugins require being initialized to work properly

regal scaffold
#

Yes I know that's what I've been doing

#

I want a workaround to use NameTagEdit API without having to put the plugin in the plugins folder

wet breach
#

Just modify the main class to not conflict and feed it whatever it needs in the classes

#

And voila can shade and best part is you can probably do all this using maven lol

regal scaffold
#

Wait so I can actually do that

#

I add something in my main that checks if the plugin happens to be installed

#

If not, use the shaded one?

regal scaffold
wet breach
#

Why check at all. Just use the shaded one since it wont get initialized. As long as you relocated there should be no issues

regal scaffold
#

O

#

Ok ok I like this idea

#

So to use maven with a jar I gotta install the jar to my local repo first, right?

wet breach
#

So you would remove the java plugin thing, and the relevant methods in main. And then you would just hand what the classes need from your main

regal scaffold
#

Wait a second

#

Ummmm

#

I think I'm an idiot

#

Straight up

wet breach
#

Relocate is necessary so the package is not the same as the plugin that might be on server

#

Have fun uwu

regal scaffold
#

I have a small idea but a bit confused still

#

I need to read on that configuration to modify the class first

#

Wait did you give me 2 different ways of doing this? Or is the whole thing the same idea

#

How can I edit someones elses code from their main file just like that?

wet breach
#

Because recompiling is a thing and if it is an api it will have sources

#

Sources are basically the uncompiled version of the jar but packaged in a jar

#

Api would be hard to use if it didnt have sources lol

regal scaffold
#

Oh ok so I clone the plugin. Then do the changes. Then save to my local repo, Then use maven to import

wet breach
#

If you really wanted to you could also clone their repo into your plugins repo and then have your pom to treat that as a module to make it easier

wet breach
#

Sources jar is something provided in maven repos typically or included in the api jar

#

You would pull those out make changes toss those files into your project where you want them and compile

#

But you can do it the way you said too

regal scaffold
wet breach
#

Yeah the sources are probably attached to the jar itself

regal scaffold
#

I kinda wanna learn your way. Seems to be something useful learning on

wet breach
#

So if you opened the jar up

#

You should see both class and java files

regal scaffold
#

I only see class

wet breach
#

Hmmm, maybe it didnt attach sources

#

Another way would be to exclude their main class

regal scaffold
wet breach
#

There is multiple ways to do it lol

regal scaffold
#

Their main class has a bunch of stuff going on

#

I don't even need 90% of their actual functionality

wet breach
#

Its not important in what is going on in the main class rather if anything depends on main class exclusively

regal scaffold
#

I literally need 2 methods from their api lol

wet breach
#

If not then you can handle what their main class does

regal scaffold
#

You know, following the path of stuff that happens from the api calls

#

It doesn't seem like it does need the main class

wet breach
#

Typically not

regal scaffold
wet breach
#

Except just passing plugin reference

regal scaffold
#

That's what I need

#

Ok so

#

If I don't need the main class

#

Can I just exclude and test first?

wet breach
#

Sure, but might need to pass a plugin reference to relevant classes

#

It doesnt matter that it isnt their plugin reference just that one is passed

regal scaffold
#

How would I make those changes then

wet breach
#

Pass your plugin reference when creating an instance of the class

regal scaffold
#

Wait wait back up.

#

Since there are no sources in the jar

#

I first need to get editable code

wet breach
#

Reason most times which plugin reference is not relevant is because they are most times just making use of methods provided by JavaPlugin

regal scaffold
#

Ok no lets try this other method instead

#

I wanna try the clone, change and local repo

wet breach
#

Up to you lol

regal scaffold
#

I need to understand this way first because I happen to believe it's a bit easier to understand just not better to do

wet breach
#

Possibly

regal scaffold
#

Ok so what exactly am I trying to do with his main class

#

The idea of this is what

#

To not have duplicate plugin loads?

wet breach
#

So the easiest route is to just change your structure to have modules

regal scaffold
wet breach
regal scaffold
#

Can't I just change the plugins name and some stuff and make it be NameTagEdit2?

#

Is that terrible idea?

wet breach
#

No because the class will still have extends

#

Which needs removed

regal scaffold
#

Ah yes

#

Ok so looking at his main class

wet breach
#

But once you remove that some methods are no longer valid and wont compile

#

Unless you do bytcode manipulation

regal scaffold
#

Man I want to cry

#

I knew this was complicated but not this much

#

So then the clone and compile method won't work correctly

wet breach
#

Well clone and compile is the easiest because you have java files to work with

regal scaffold
#

So when you say, some methods won't work

#

Am I just supposed to straight remove them?

#

Until the whole thing compiles? lol

wet breach
#

All you have to do is just remove their main class and ensure main class references throughout are changed to yours

#

And then compile

regal scaffold
#

Oh

#

And what do I do with the stuff that's in his main file?

wet breach
#

If it isnt needed nothing. If it is needed add it to your main class lol

regal scaffold
#

Alright I understood that part

wet breach
#

But only add what is necessary which is most likely not going to be everything

regal scaffold
#

Now when you say change each plugin deference

#

private static NametagEdit instance;

#

You mean change that to my class?

wet breach
#

Yes or make it generic plugin

regal scaffold
#

But how can I change that to my plugin if this still doesn't have knowledge of my plugin

#

Like I have the plugin cloned, I can't just make it be part of mine

#

It won't compile to even add it to mine

wet breach
#

As i said most times they use main class for the javaplugin methods and not because of something specific in main class

regal scaffold
#

I know I'm making you pull your hair out rn

#

But I can't seem to understand what the changes need to be hands on. I get the idea of what I need to do. Just not how to do it

wet breach
#

You do know when you extend a clas you inherit the methods from that class and any classes it also extends

regal scaffold
#

Yes

#

In this case, their main class ( as does everyones ) extends JavaPlugin

wet breach
#

So most times the reason they use their main class is to get a plugin reference which contains methods like getconfig

regal scaffold
#

Yes so far so good

wet breach
#

If that is all they are doing you can just create a generic plugin object to pass

regal scaffold
#

Ummm

#

lol

wet breach
#

I will be home in a couple of hours

regal scaffold
#

Appreciate it. I am trying to figure it out tho

#

I like learning

regal scaffold
#

What's thge difference between these and why are they 2000kb difference?

remote swallow
#

original doesnt have shaded stuff

regal scaffold
#

If I'm not using any shaded stuff

#

Do I even need it?

remote swallow
#

somethings being shaded, i doubt a jar can be 2mb without it

regal scaffold
#

?paste

undone axleBOT
regal scaffold
#

There's a lot of stuff in the jar compared. But I don't need any of it

remote swallow
#

any deps with scope compile

#

or no scope

regal scaffold
#

Oh yes, 1

remote swallow
#

its that

regal scaffold
#

There you go!

#

Thanks

#

Now I got 3 but all the same size so

remote swallow
#

best to use the one that is BetterPrefix-1.0-SNAPSHOT.jar

regal scaffold
#

All 3 are identical

remote swallow
#

without shading anything they will be the same but shading anything would cause original to be different, idk the point of -shdaded but that would be identical to the no additions

regal scaffold
#

When I make my plugins I should be using spigot api right?

#

Cause currently i'm depending on paper and it suggests to change setDisplayName() to displayName(Component)

remote swallow
#

yeah

regal scaffold
#

But spigot doesn't have components meaning if I do that, It won't work on spigot, correct?

remote swallow
#

depend on spigot/spigot-api and it works on spigot and paper

regal scaffold
#

Gotcha

regal scaffold
#

Ummm

#

Have a command without registering it

tall dragon
#

not registered where

#

in plugin.yml?

regal scaffold
#

It's only in plugin.yml

#

Oh wait

#

Do commands in main file

#

Not need to be registered in onEnable()

#

?

tall dragon
#

aperantly not eh 😄

#

seems weird to me

regal scaffold
#

Doesn't work

#

tf

#

At least in my plugin it doesn't

tall dragon
#

i do know JavaPlugin implements CommandExecutor

#

but im pretty sure commands still need to have their executor assigned

regal scaffold
#

Indeed it goes to JavaPlugin

#

Lets check rn

#

That's kinda cool

#

Had no idea

#

Works without needing executor

tall dragon
#

huh. interesting

#

idk how the plugin would know which command to assign then but okay

regal scaffold
#

I guess if you only have 1 command doesn't really matter?

tall dragon
#

fair enough. but what if u have multiple

regal scaffold
#

I mean like

#

If you have 1 global command

#

Not subcommands

#

Cause you can have /command <subcommand>
As many subcommands as you want

#

But it works perfectly rn with multiple subcommands

#

Which is still interesting

tall dragon
#

yea true, but im still interested as to how this would work with multiple normal commands

regal scaffold
#

You might get an error on enable

rotund ravine
tall dragon
#

is that really the reason?

rotund ravine
#

Yes?

tall dragon
#

so u dont have to register in the main class?

regal scaffold
#

xd

rotund ravine
#

Well, not the entire reason

tall dragon
#

i guess u could assign multiple commands to the same executor tho

#

and it'd work the same way

#

tho i would never do that

regal scaffold
#

New challenge:

Making an entire plugin in 1 file

#

Does ChatColor#translateAlternateColorCodes remove whitespaces?

tall dragon
#

probably not

regal scaffold
#

I'm trying to set a players displayname to

  player.setDisplayName(colorize(prefix + " " + player.getName() + " " + suffix + ChatColor.RESET));
#

And it's not adding the space

tall dragon
#

idk, but thats not from ChatColor.translateAlternativeColorCodes

#

its always worked fine with spaces

terse pumice
#

Is there a Composter version of CauldronLevelChangeEvent?

regal scaffold
#

@terse pumice Composters only work when a player interacts with it right?

#

They don't just update "randomly"

terse pumice
#

Player interact and hopper

regal scaffold
#

Well I have a way to do it but it won't work for hoppers, just players

#

So probably have to wait for someone else

terse pumice
#

I know of a way to do it, it's more whether there is an event that I haven't spotted

regal scaffold
#

There isn't an event no

#

If you wanna triple check

terse pumice
#

Hmm alternatively is there a way to see when an inventory updates, I only particularly need to know when the bonemeal is being generated in the composter's inventory

#

might well just do a BlockPhysicsEvent and do a check to see if it has an item in it

regal scaffold
#

I think that doesn't work with what I've read

tall dragon
#

not a very reliable event

#

some servers straight up disable it

terse pumice
#

valid

#

I'll just manually work out the ways of the item exiting the block and if I miss one I am sure someone will report it to me aha

regal scaffold
#

Just disable hoppers, ez

#

And autoban people that say the word "hopper" in chat

terse pumice
#

LOL

#

it's a public plugin, i don't think i could convince everyone to ban hoppers

regal scaffold
#

hehehe

#

Just hide it in the code

#

See how long it lasts until someone complains

quaint mantle
#

hi

#

i have a few questions about indexing on sqlite.

#

so

#

in the documentation i was reading, it states something along the lines of "indexes are ordered by the first column, the second column, the third column... and so on".

#

what does that mean? Is it like if i have a composite index with (colA, colB, colC), it optimizes queries for colA, (colA, colB), (colA, colB, colC)? Same as how indexes work in MySQL perhaps?

lost matrix
#

It basically means that if you have an index on (colA, colB) then a query on (colA, colB, colC) can be optimized
but if you have an index on (colB, colC) a query on (colA, colB, colC) can not be optimized because the first
queried column does not have an index to optimize for.

#

And for standalone queries: Yes composite indicies help with the speed of single column queries (eg (colA, colB) index speeds up a colB query) but its nowhere as
fast as a single indexing on colB

#

Hm just thinking about if this also applies to sqlite

#

Probably

wet breach
#

I am home now

regal scaffold
#

I had the channel open on third screen lol

#

Just in time

warm mica
#

That's not how it practically works, but it makes it easier to understand

regal scaffold
#

Do you feel like retaking the issue I had earlier @wet breach. I can understand if you got other stuff to do or just don't want to

lost matrix
regal scaffold
#

The hands on part of what you suggested to do lol

wet breach
#

well I suggested a few different things

#

that explained like 2-3 ways to do it lol

regal scaffold
#

Ok so, you said to change the plugin references to mine and remove the extends javaplugin

smoky oak
#

if you dont extend javaplugin youll get an exception

#

unless youre extending the main class of your other plugin but i wouldnt bet on it

wet breach
#

can't have 2 extend JavaPlugins

regal scaffold
#

But then I do need to clone the repo and go from there, correct?

wet breach
#

so easiest way to start with this, is to restructure the project. Need a parent pom, then you have modules. One will be the plugin you want to depend on and shade

#

the other is your plugin

#

make sure the plugin you want to depend on is listed first for module because we want maven to do stuff to that first

regal scaffold
#

Ok let me do the restructuring first but I've never done parent poms

wet breach
#

super easy

#

that repo has it setup where it has a parent pom and the plugin and api are modules

regal scaffold
#

OK sick

#

Wait as a side note

#

That's your plugin? jesus I remember it

#

That's so sick

smoky oak
#

my solution is to just copy pasate whatever project i had last time

regal scaffold
#

Oh wait nvm it's a fork XD

wet breach
regal scaffold
#

2 questions but regarding intelliJ

wet breach
#

so it is indeed mine 🙂

regal scaffold
#

Like in the example, serverTutorial and API are 2 different packages/folders whatever

wet breach
#

yep

regal scaffold
#

Do they go straight under the project?

wet breach
#

yep

#

they are not packages though

regal scaffold
#

Just folder

#

Otherwise intelliJ has a module thing

#

And that was my second question

wet breach
#

after you done with the directory structure you are going to change the top level pom, which is what is currently loaded

#

so that it is formatted to be read as a parent pom

regal scaffold
#

I assume directory

wet breach
#

and when you tell intelliJ to reload the pom

#

it should change it

wet breach
#

so while in BetterPrefix directory, run the git clone command for that plugin you want as a depenency

#

it should create a directory for it

regal scaffold
#

In the nametagedit folder

wet breach
#

and then create another directory to stick your plugin in, and call it BetterPrefix-Plugin

#

move all the sources and everything for your plugin, into that new directory

#

including the pom

#

make a new pom, and structure it to be setup as parent pom

#

modify the pom of your plugin so it points to your parent pom

#

and then you will do the same with the nametagedit pom

#

then tell intelliJ to reload the pom or just close and open the project again

#

and it should make it appear in the IDE properly

regal scaffold
#

ok few moments, I got this

#

OK

#

I got it

#

?paste

undone axleBOT
regal scaffold
#

And added

    <parent>
        <groupId>me.tsans</groupId>
        <artifactId>BetterPrefix-Parent</artifactId>
        <version>dev-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

to both child poms (I hope that's enough?

wet breach
#

in your parent pom

#

swap the modules around

#

you want NTE to be first

regal scaffold
#

Why is that

#

Oh because it'll build that first, right?

wet breach
#

because when you compile from the parent, you want maven to do things to NTE first

regal scaffold
#

Perfect perfect

#

Ok we're set

#

What's next

#

Now comes the harder part

wet breach
#

now, I don't know the code for NTE, but either you manually remove the main class and fix the rest of the references, or you can use maven plugin to do a replacement using some regex or search and replace

regal scaffold
#

Wait I have an issue before that

#

Inside NTE

#

Probably something to do with my poms

wet breach
#

idk

#

don't really see the issue?

regal scaffold
#

Does it not matter that it can't find those?

wet breach
#

find what exactly? the imports?

regal scaffold
#

Yes

wet breach
#

not really and its most likely because in the NTE pom it has possibly an api version then what you currently have available

regal scaffold
#

aaaa gotcha

#

So can just ignore

wet breach
#

which you can fix

#

easy way is if both the NTE and your plugin use the same API version

#

just list that api version in the parent pom as a dependency

#

and it makes it listed for both automatically 🙂

regal scaffold
#

That's sick

#

ok brb

wet breach
#

sub poms inherit anything the parent pom does, and when you add the same thing to the sub poms it means you want to override the parent

regal scaffold
#

Does that mean I should add both the repo and dependency straight to the parent?

wet breach
#

you can yes

regal scaffold
#

me.tsans:BetterPrefix-Parent:pom:1 was not found in https://oss.sonatype.org/content/groups/public/

#

uhhhh

wet breach
#

did you try to build?

regal scaffold
#

I tried reloading the poms

wet breach
#

reload the parent pom

#

or build the parent pom lol

#

brb in about 30 minutes

regal scaffold
#

So it's missing
import org.apache.commons.lang

#

But as far as I know the package changed for newer versions

#

Meh there's a vulnerability but who cares. I just added the old version

#

xd

#

OK Frost when you're back you're gonna be proud

#

now, I don't know the code for NTE, but either you manually remove the main class and fix the rest of the references, or you can use maven plugin to do a replacement using some regex or search and replace

Does this mean I need to manually change every single instance to now be my plugin?

smoky oak
#

good luck lol

regal scaffold
#

I want to cry

#

But am I right in what I said?

wet breach
#

you don't have to manually do it, you can use the maven replacer plugin

#

and use some regex

regal scaffold
#

Wait wait

#

Got another issue

quaint mantle
regal scaffold
#

I wanna do it manual just to check

wet breach
#

probably best

regal scaffold
#

So

#

I copied their main file to mine

#

And checking lines 1 by 1

quaint mantle
#

what combination of column pairs am i gonna have optimized queries on?

regal scaffold
wet breach
#

o.O

regal scaffold
#

Am I dumb?

wet breach
#

I am not sure what it is in reference to

regal scaffold
#

But I can't actually add an import

#

For my file

#

Because it gives me a warning about circular something

wet breach
#

yeah circular dependency that will never be satisfied because you are depending on betterprefix which dependes on NTE

quaint mantle
#

press tab and autocomplete and let the ide do an autoimport thing perhaps, for that sort of issue.

#

i just do that and it seems to work most of the time.

regal scaffold
#

So what do I do then to be able to make the plugin reference be mine

wet breach
#

which is why I said, you should see why it needs a JavaPlugin Object, if they are not making use of anything specific in the main class, you need to use a generic Plugin object

regal scaffold
#

What's a generic Plugin object

wet breach
#

this way from your plugin, when you got to initialize those classes you can just toss your plugins, plugin object and it will still accept it

#

Plugin plugin

#

instead of (Mainclass) plugin

regal scaffold
#

It does some stuff like plugin.debug

#

So instead of just removing infinite debug lines

#

I think generic is the way

quaint mantle
#
    private static JavaPlugin thisPlugin;
    public static Logger logger;

    @Override
    public void onEnable() {
        thisPlugin = this;
        logger = this.getLogger();
    }```
wet breach
#

or just keep their main class

#

but remove onEnable() and onDisable() as well as the extends

regal scaffold
#

And call an instance of their class from my onEnable passing it my plugin instance?

wet breach
#

or better yet if you want to use your main class don't worry about the errors

#

and don't compile the plugin

quaint mantle
#

the code i posted above works for me.

regal scaffold
#

My head is exploding

quaint mantle
#

for getting the main plugin class.

wet breach
#

well if you are going to shade/relocate

#

you don't actually have to build NTE

regal scaffold
#

Ok I like that alternative too

#

Lets try that

#

So I assume keep everything and ignore the errors

wet breach
#

wait that won't work lmao

regal scaffold
#

My head xd

wet breach
#

give me a sec

regal scaffold
#

Oh yeah we need an instance

quaint mantle
#

what are you guys trying to do here? i am a bit lost.

regal scaffold
#

I need to depend on NTE but I don't wanna have to add the jar to the servers

#

So I want to include it entirely in my plugin loll

quaint mantle
#

NTE?

regal scaffold
wet breach
#

hey

quaint mantle
#

just download the plugin from the source maybe?

wet breach
#

I know sgtcaze

quaint mantle
#

then use it.

regal scaffold
#

lol that's funny

regal scaffold
wet breach
#

they showcased both my plugins 🙂

wet breach
regal scaffold
#

Ok so what's the move here frost

#

Did you give their main class a look?

smoky oak
wet breach
#

true, doesn't mean someone can't make a build setup to accommodate such things

regal scaffold
#

My plugin is literally 1 file 4 methods and I need to add this entire thing to make it work

wet breach
regal scaffold
#

But the alternative is even worse

#

Ok so

#

How shall I do that

wet breach
#

but, for the debug stuff you either remove it, or fix it to point back to the main class that isn't a main class anymore

regal scaffold
#

Yes

#

Exactly what I was gonna ask

#

Ok remove it is

#

brb

#

Do I make it extend anything?

#
public class NametagEdit {

    private static Plugin instance;

     instance = this;

Obviously gives an error

#

Wait what method is this. Is this where I remove their main file. Move it to mine?

smoky oak
#

main class extends javaplugin

regal scaffold
#

I can't have that'

#

There can't be 2 extends

smoky oak
#

then this isnt a plugin instance

regal scaffold
#

So how would I use generics here

#

Goddamn so complicated

tardy delta
#

whats the problem

tender shard
#

wdym "how would I use generics here"?

wet breach
regal scaffold
#

I need to depend on NTE but I don't wanna have to add the jar to the servers
So I want to include it entirely in my plugin loll

wet breach
#

ask bukkit to give you a plugin instance of a particular plugin

regal scaffold
#

aka mine?

tardy delta
#

shading it?

regal scaffold
#

It's not made to be shaded

tardy delta
#

then add it to the server?

regal scaffold
#

That's what I want to remove

wet breach
#

Bukkit.getPluginManager().getPlugin("Plugin Name")

tardy delta
#

add it to the libraries section?

#

probably wont work

regal scaffold
tender shard
tardy delta
#

"you cannot"

wet breach
#

will everyone stop making assumptions o.O

regal scaffold
#

...

#

6 hour conversation going on here

#

Frost if I do instance = Bukkit.getPluginManager().getPlugin("BetterPrefix");

then methods like getLogger() won't work.

tardy delta
#

what logger

tender shard
#

what else is meant with "include that plugin in my plugin without installing it on the server"?

regal scaffold
#

I see where this is going ok

twin venture
#

Hello friends , i have something a bit complex to do :
i have a (Registered arenas in a list when server start it load them )

ok so what iam trying to achieve is :
1- broadcast a clickable message (done)
2- broadcast the arena name , minimum players/maximium players(done)
3- if there are no players in any arena (get the first arena loaded in the list and broadcast that arena) , if there are other arena with players broadcast that arena (not done)

so my problem is with
3-

#

if there are no player's in any arena (Get the first arena in the list of arenas that loaded when server start) , if there are players in lets say an arena named Vortex broadcast that arena insted bcz it have players

wet breach
#

make each arena keep track of the players in it, then make a method for said object to obtain that number

#

then when you iterate the list you can use that to compare

twin venture
#

i do have that

#

iam going send the code rn

tardy delta
#

id do some stream stuff

wet breach
#

you can do streams

#

either or works

twin venture
#

this is the broadcast :

#

this is the method to get the avillable arena :

#

i use them both in a runnable

#

just for testing , i set it to 5 seconds

#

but the thing is :
player will not be able to join throw a command

#

only throw the broadcasted message

#

he will click on it and join

#

so in other words , there will never be a players on any arena

wet breach
#

well first problem

tardy delta
#

instantiating bukkitrunnables ew

wet breach
#

you are setting online to the same number of players in a arena

twin venture
wet breach
#

unless online is being used differently then what it would typically mean

twin venture
#

this is how iam using it rn

tardy delta
#

why doing getter on fields if whole class has getter annotation

wet breach
#

so using it backwards then got it lol

twin venture
lost matrix
#

What prevents you from getting the amount of players from the list instead of manually counting up/down?

#

Also: Never ever create getters and/or setters for collections or data structures.
It will always lead to very fragile design.

#

Tremendously important to never expose data structures

tardy delta
#

^^

regal scaffold
#

Ok @wet breach.

Did all that. created an instance of nte and then started stuff. How do I now use that in my plugin import

twin venture
#

alright thanks

wet breach
#

and get it to successfully compile and install to local maven repo

twin venture
#

1 player must join to make it broadcast

#

or it will never broadcast

wet breach
#

which your plugin should be able to use to depend on

regal scaffold
#

Why did I go out of the way to make parent-child poms instead of just doing in a separate project

#

Ok I installed it

wet breach
#

because you wanted to try it the manual way first

regal scaffold
#

ooooo ok ok good

#

I added the dependency now comes the shading part

#

Which pom

wet breach
#

I was going to tell you additional things where you don't have to do it manually lol

#

you could just have a maven plugin take care of most of that for you

regal scaffold
#

It was fine I used find and replace in files

#

Will look into that in future seems useful

wet breach
#

maven replacer plugin will do a find and replace

#

and then if you specify a regex, it will do special finding and replacing

regal scaffold
#

Pretty dope that stuff like that exists

regal scaffold
#

Do I do normal shading as I would always?

wet breach
#

Well if NTE compiled, now you can shade to your plugin

#

and its just normal shade plugin setup with some relocating

#

and then once that is done, run from the parent clean build

regal scaffold
#

Need some assistance with the reloating part

wet breach
#

and see if it all works 😄

regal scaffold
#

Where does all this shading information go?

#

In parent pom or plugin pom

wet breach
#

plugin

regal scaffold
#

I assume pluhin

wet breach
#

thats how you relocate

regal scaffold
#

Ok then it was something diferent than that I confused the terms xd

wet breach
#

once you get this setup you can try a semi or fully automated way, and then its just a progression from there with more efficient ways

#

and then once you learn some of that, then anytime you want to include something like this again where its a plugin but not designed to be shaded you could easily set something up and pretty much does everything that needs to be done to get it to shade XD

regal scaffold
#

I indeed have a jar

#

Here I go

wet breach
regal scaffold
#

Yes

#

I expect that

#

100% honest

silent musk
#

So I got a class implementing Listener, and in its constructor I register that listener, but it doesn't seem to work. Is that actually a thing you can do, or should I register it outside the constructor?

wet breach
#

so what activates the constructor?

silent musk
#

Wdym by that?

#

I create the class implementing Listener if thats what you mean

wet breach
#

well a class constructor doesn't magically run on its own, something outside of the class has to initialize it

silent musk
#

Yeah of course, I create the object

wet breach
#

you create the object and it doesn't register the listener?

silent musk
#

No, its really weird

wet breach
#

?paste

undone axleBOT
silent musk
#

It concerns about 3 classes, kinda hard to paste

regal scaffold
#

Oh no frost

silent musk
wet breach
#

easy fix

regal scaffold
#

oh copy them

#

Can I copy them somewhere where they work but they cannot be accessed by user?

native gale
#

Is there any more effective way to check if the block at a specific coord has a direct access to the sky, other than checking all blocks from top to bottom?

silent musk
wet breach
regal scaffold
#

You know what I meant xd

#

In the jar not the plugins folder

wet breach
#

you could but requires modifying the code to handle such things

regal scaffold
#

So not worth for now

wet breach
#

and wouldn't really make the file editable without more modifications

regal scaffold
#

I have conflict filenames tho

#

If I copy his config.yml to my directory

wet breach
#

either change NTE's config name, or you use a different name other then config.yml

twin venture
#

Hello again , this does work , but is it efficent?

regal scaffold
#

ok

wet breach
#

or

#

share one config file

regal scaffold
#

But I do need to copy the /yml files directly to where my plugins config.yml files are

#

Yes I was gonna do that

twin venture
#

if no players in any arena , it will return the first arena in the list , if there are players in other arenas does contain players it will return that arena

wet breach
regal scaffold
#

yup

wet breach
tardy delta
silent musk
#

Wouldn't surprise me lol

twin venture
#

in the first check or second check?

#

else return right?

regal scaffold
#

How do people do the massive comments

#

Like blocks

silent musk
#

/**/ you mean?

regal scaffold
#

Letters with lines

wet breach
regal scaffold
#

No shot manual I will cry

silent musk
#

What exactly do you mean not implementing? I might be missing some info on abstract, not sure

wet breach
#

well you don't have any EventHandler methods in the abstract class

silent musk
#

I do right

#

Its those inventory events at the bottom of the GUI class

#

I put a comment there

tardy delta
wet breach
#

its quite possible the abstract is messing with it since it can't initialize the class

silent musk
#

Yeah thats what I was thinking