#help-development

1 messages Ā· Page 308 of 1

tardy delta
#

i thought that wouldnt give problems but it did

#

now only wondering wtf this is

#

theres a class extending Node if that helps

#

and (Node[]) new Object[26]; works fine, tf java

#

its not even generic that class

#

oh well it compiles but causes a classcast ex

humble tulip
#

Just cast the Node[] to Node[]

tardy delta
#

what

#

i believe its because my CharTree class is generic

#

and wtf java

livid dove
#

Very weird one but... listener for if a certain chunk loads?

tardy delta
#

isnt there a chunkload event?

#

i know there an unload one

livid dove
#

Certain chunk

tardy delta
#

ye just filter on it

livid dove
#

Oh god duh haha

#

There a waynto get a definitive list of every chunk too then?

#

Basically gonna build this damn delete all the shit plugon and have it slowly and passively delete the shitnmoment a chunk loads and theb scratch that chunk off the list

tardy delta
#

working with an Object[] works but looks brr lol

#

wdym a definitive list?

#

of all chunks loaded?

livid dove
#

Every chunk in the server files.

Once a chunk is loaded it..... omfg sorry I'm an idiot. I was gonna have a white list but in reality should be making a black list

tardy delta
#

java is weird

#

bruh now Array.newInstance(Node.class, 26) works

livid dove
#

So

-Chunk loads
-Checks every chest ,inv, shulker and furnace in the chunk
-deletes the item in question from each container-adds chunk to blacklist

tardy delta
#

uh go to all timestates

livid dove
#

?

tardy delta
#

all the tilestates in the chunk

livid dove
#

Ph yeah duh

tardy delta
#

iirc furnaces and chests are tileentities* i mean

#

maybe do some instanceof checks

livid dove
#

Maybe haha

tardy delta
#

furnace and chests are in there

#

those should be inventoryholders too, which has a getInv method

#

hope you actually know how to implement it

humble tulip
#

And try to work with the files itself

#

It'll be more efficient

#
  • no workload on your server
livid dove
humble tulip
#

I wanna try to do it

humble tulip
#

reading abt it here rn

#

@livid dove what mc version u using?

#

there's this

topaz cape
#

the nms world after going to the nether still is the OW fsr

#

it's confusing

#

maybe I'll need to just delay the packet

worldly ingot
#

Because when you change worlds, a new player instance is created

topaz cape
#

huh

worldly ingot
#

A new EntityPlayer instance, that is

#

Oh wait no, I'm mixing it up. Nevermind. It's the same

topaz cape
#

oh

worldly ingot
#

In vanilla it's a new EntityPlayer and we have a PR that restores that behaviour

topaz cape
#

thank god

#

hmmm

worldly ingot
#

Not sure why the world wouldn't update though

topaz cape
#

I'll try find a work around ig

opal juniper
#

or, find a way to fix it 😃

wet breach
#

if you are trying to do it right after they teleport you will still have the previous world since changing worlds is like spawning

#

got to wait a tick or a few

quiet ice
true oxide
#

Hi im new to plugin making and im running into a few errors when I use intelliJ's minecraft plugin. When it auto made a class with "import org.bukkit.plugin.java.JavaPlugin;" i got an error saying "Cannot resolve symbol 'JavaPlugin'. i tried installing spigot and spigot api in library and as dependencies

humble tulip
zinc egret
#

thanks! unfortunately i got this:

> Task :buildSpigot FAILED
It may take a while. To see build logs, start with the option '-d' or '--debug'.
Picked up _JAVA_OPTIONS: -Djdk.net.URLClassPath.disableClassPathURLCheck=true
java version "17.0.5" 2022-10-18 LTS
Java(TM) SE Runtime Environment (build 17.0.5+9-LTS-191)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.5+9-LTS-191, mixed mode, sharing)
*** The version you have requested to build requires Java versions between [Java 8, Java 16], but you are using Java 17
*** Please rerun BuildTools using an appropriate Java version. For obvious reasons outdated MC versions do not support Java versions that did not exist at their release.

but mc 1.19 is java 17 right?

humble tulip
#

What a joke

#

What's your --rev?

zinc egret
humble tulip
#

what command did you run with buildtools?

zinc egret
#

i cant send a pic

#

its like in the top right

#

im using this template from github

#

one of the files says "feat: add support for building jdk17 packages with jitpack"

true oxide
#

can someone try helping me rq please

zinc egret
#

does anyone know a template for 1.19?

pseudo hazel
#

whats a template

sterile token
sterile token
zinc egret
#

but doesnt even show me where to create the file

dry yacht
sterile token
#

I mean, that is not from spigot api

humble tulip
sterile token
#

You must first learn how to code on Java and then You have to start working around with apis or libraries

tardy delta
#

šŸ¤”

sterile token
#

Answerin to that

zinc egret
#

huh wait

sterile token
#

That si what i understand fron your text

zinc egret
worldly raptor
#

I'm trying to setup a claim system using GriefPrevention and the LP editor but im having trouble. Anyone able to help?

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!

sterile token
zinc egret
sterile token
#

Pierre, explain exactly what your question ir issue

#

I don't understand what You need exactly

zinc egret
#

(for now)

sterile token
#

Ok

#

What have so far

#

You told me You are using gradle to build your project

#

That is okay

zinc egret
#

ugh i cant send pics

sterile token
zinc egret
#

i am trying

#

NewTo verify your discord account, please click this link.
Note that this cannot be undone!

#

just sends me this

#

WITHOUT A LINK

sterile token
#

What?

quiet ice
#

on the spigot account

sterile token
#

You have ti verify using your spigot account name

#

Oh geol You are here

zinc egret
#

it bugged out

sterile token
#

Now yes Pierre

#

You can send picks

zinc egret
#

there was no link ....

sterile token
zinc egret
#

what i have

sterile token
#

Okay

#

In My case i always delete the test folder

zinc egret
#

(for context, i have experiences in other languages: Rust, python and C++, so imo im somehwat familiar with programming)

sterile token
#

Oh ok

zinc egret
sterile token
#

Yeah Java si pretty different how You create project

zinc egret
#

yea its really ugly and messy

sterile token
#

Na it's okay

zinc egret
#

opinions differ, maybe i learn to like it 🤷

sterile token
#

Resources folder is like the assets folder from websites

Main is like the src folder

zinc egret
#

yeah

sterile token
#

It's the simple way for ezamplaning

#

So you have to code inside the folder Main/src

#

Have.you learnt Java itself before? Not wondering to sound rude, just to know how to explain some extra things

zinc egret
#

coding is general, but i havent really used java enough to be amature

carmine urchin
#

How would you make an npc disappear from your world and tablist with NMS for 1.19.3? I created a ServerGamePacketListenerImpl to get the player connection and then tried to send an Update Packet: ServerGamePacketListenerImpl ps = getPlayerServerPlayer().connection; ps.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_LISTED, npc)); But it is not doing anything. I also looked at https://wiki.vg/Protocol#Player_Info_Update and it showed "Actions bit 3: update listed" as a boolean but I don't know how to change it to false so that npc is not in tablist

zinc egret
#

but like i know theres gotta be a java thingy in java, with classes inside

sterile token
#

Because from my personal experiences i would first learn the lang itself where i code. And then start trying to use libraries or apis

#

Because Java it's not diff to code on it, but have many basic things to learn

#

I would first look how Java lang works really abstract, to then understand better the coding

#

Because Java is "pretty weird" cuz it's a lang where he compile what You code to a low level called Bytecode and then the JVM interpret that Bytecode

zinc egret
#

i just wanna throw myself in the deep because i have 0 mood to relearn the basic stuff like for loops

#

i will come across those later anyway

sterile token
#

So Java it's a compiled and interpreted lang

zinc egret
#

i know...

sterile token
#

Oh right

#

I told because i don't really know how much You know about Java

zinc egret
#

this is what i got

sterile token
#

Ok

#

1m please

#

?main

sterile token
#

Ignore that

#

Just trying to remember the command name

#

That contains most of what You shouldn know

#

What IDE are You using?

maiden thicket
#

from a CS pov

#

šŸ’€

sterile token
maiden thicket
#

computer science point of view

#

there is no technical reason

#

given

sterile token
#

m

#

I said i run it wromgly

maiden thicket
#

oh yeah no

#

i'm just talking abt the thread

#

dont worry

#

the thread looks like bs šŸ’€

compact haven
#

because there is no technical reason

zinc egret
compact haven
#

the naming of the class means nothing past developers

maiden thicket
#

yeah so therefore there's no actual reason why u shouldnt use Main

#

exactly

#

that thread shouldnt exist

#

its kinda bs šŸ’€

zinc egret
#

why is it still showing those lines

maiden thicket
compact haven
#

the only possible explanation is that Main should hold a JVM entry point, and because it doesn’t then you wouldn’t name it as such

#

but tbh you can change the entry point class anyways

maiden thicket
#

yeah so that thread sroopy

#

stoopy

#

this is why ily dlg

zinc egret
maiden thicket
compact haven
maiden thicket
#

u may have pressed enter before typing the bame

#

name

sterile token
#

I till don't understand what You mean by that replies to Main

sterile token
#

Because he parse the plugin.ynl file shole You coding

compact haven
#

I’ve never touched that plug-in and it happens to me

maiden thicket
#

not about u

compact haven
#

it’s just an IntelliJ thinking you are making a new config section when you enter without a value

maiden thicket
#

its most likely u did

#

name: then hit enter

#

idk tho

#

yeah what dlg did

#

said*

fading spindle
#

in intellij im using minecraft development kit and when I start the servre with the plugin in it and do /plugins it doesn't show my plugin for some reason? anyone know why its my first time using intellij minecraft development plugin usually i just use maven

maiden thicket
#

show the console

#

there should be an error

zinc egret
fading spindle
#

?paste-md

#

?past

#

?paste

undone axleBOT
maiden thicket
#

šŸ’€

sterile token
fading spindle
compact haven
#

you have no resources folder

maiden thicket
compact haven
#

therefore no plug-in.yml, unless you have special build instructions

fading spindle
maiden thicket
#

i was just ranting abt the thread

compact haven
#

oh you do

maiden thicket
compact haven
#

sorry I was in the other dudes GitHub

fading spindle
compact haven
#

what’s in it?

fading spindle
maiden thicket
#

go to plugin.yml

#

for me

compact haven
#

main is not correct

maiden thicket
#

because ur main package is me.code.Makn

#

Main

#

not FirstPlufin

sterile token
#

Scribe any issue ok console

maiden thicket
#

switch main to me.code.Main

#

the value there

sterile token
#

Yeah what he told

fading spindle
#

oh

#

lol

#

im dumb

maiden thicket
#

no worries

sterile token
#

Also don't name your plugin Main class as Main it's not a good practice i'm Java development

maiden thicket
#

basically plugins are loaded with the main class and since it cant find that main class its saying fuck u

fading spindle
maiden thicket
maiden thicket
#

again

#

that thread is bs

compact haven
#

but taah I have to say

#

There’s also no technical reason for us to use lower camel case in field naming

maiden thicket
#

yeah of course again, there is no "reasons" its just "encouraged" i guess

compact haven
#

we just do it because of its usage in the SDK and conventions written years ago

maiden thicket
#

for why irs encouraged? no idea

#

"java naming conventions"

#

but "naming conventions" dont say anything abt Main

compact haven
#

Encouraged because SDK developers did it decades ago xd

maiden thicket
#

as far as i know only people here have said ir

#

if sdk developers tell me not to use Main then sure

compact haven
#

yeah am not sure who started the main thing

maiden thicket
#

real

#

dlg are you in college now my good sir?

compact haven
#

Nope, hs

maiden thicket
#

ohhh so close

#

gonna study cs?

compact haven
#

Tbh we met a long time ago, I was lying about my age most likely lmao

#

Yeah, that’s the most likely route

maiden thicket
sterile token
#

Please just don't dicuss about Java cvoncentions and just foklow them

compact haven
#

It might be a branch like embedded engineering, but I might just go straight cs

maiden thicket
#

that is what we are saying lol

maiden thicket
#

CS is definitely interesting

sterile token
#

Ik but this for programming help if You dicuss is diff to get heped

compact haven
#

How are you doing, on that topic?

maiden thicket
#

i just started my first year in september and finished my first quarter

#

did my first data structures and algorithms class

compact haven
#

Ahh how is it

maiden thicket
#

well now its difficult because discrete math...

#

let us move to #general

sterile token
#

Please for that type of things move to #general

#

@zinc egret how are You going?

#

Doing what morice?

#

Someone was getting helped

#

Read full chat

#

And im surely he stopped asking because they startrd to dicuss

maiden thicket
zinc egret
#

look at my repo

#

14.01 00:02:07 [Server] [INFO] [PLHideHelp] Loading PLHideHelp v0.0.1

#

it loaded on my server

sterile token
#

For creating You have to do some things

  1. Implements the CommandExecutor interface

  2. Finally register your command via plugin Main class and via plugin.ynl too

#

Havent You update your code?

#

Okay what You have done its pretty okay

zinc egret
#

yea im already following that

#

just updated my github

river oracle
#

Updated github???

zinc egret
#

?

#

can i load a json file on start

#

and store it in memory

sterile token
#

For that i recommend using a library for that

sterile token
zinc egret
#

yea but like

#

is it possible to store it globally?

#

instead of loading the json file everytime

sterile token
#

Why do You mean globally?

#

What*

zinc egret
#

well globally or some other way

orchid gazelle
#

What is "globally"

sterile token
#

I don't understand your contexto global

maiden thicket
#

do u mean a static reference?

#

if so, i think so since u can rely on gson / or a json library

compact haven
#

an alternative would just be storing the memory object in the plug-in class, then sharing that with DI

maiden thicket
#

yeah

zinc egret
#
data = json.loads(read("xx.json"))

def command():
  global data
  print(data)

command()

def command(ctx):
  data = ctx['data']

command({'data': {}})

something like this i guess

compact haven
#

At least the closest java can replicate

zinc egret
#

how tho 🄺

compact haven
#

well the real example is with static reference

#

but we aren’t going to teach bad habits

#

?di

undone axleBOT
compact haven
#

oh lovely the tag exists (just kinda guessed)

#

?gson

#

unfortunately not

zinc egret
#

?json

#

?object

compact haven
#

Anyone have a good gson/Jackson tutorial on hand?

zinc egret
rotund ravine
#

Like the guide says

zinc egret
compact haven
#

JSON is the standard, gson is the library to parse it

#

and obviously once you get into gson you need to actually know how to load it and use the memory object, that’s the purpose of a gson tutorial- how to use the library

#

(Gson is just a library by Google to parse and serialize json)

zinc egret
#

wait...

#

the goal of my plugin is only 1 command

#

cant i just pass the json when i this.getCommand("plhhelp").setExecutor(new HelpCommand());?

compact haven
#

Then why do you need json

rotund ravine
#

Just use a yaml

#

.configs

compact haven
#

what json are you using

rotund ravine
#

.config

sterile token
#

He habe done My fault, he startrd coding first without learning all the Java theory basic things

rotund ravine
#

.configuration

compact haven
#

?config

rotund ravine
#

.configurations

#

Oh ?

#

?configs

undone axleBOT
compact haven
#

tag is question

#

yep

zinc egret
#

well actually my goal is this:

like imagine a json file with
{ group_name: [commands..] } (lets call this groupes)
and another json file with
{ command: 'Use this command to ....'} (and this commands)

and whenever someone would call /help it would send "\n".join(commands[command] for command in groupes[group_name]) in chat

compact haven
#

in Minecraft dev we use yaml

rotund ravine
#

Java doesn’t do those oneliners

zinc egret
#

i also have to read the perms of the player because i need to know what plhide.group.xxx theyre in

compact haven
#

unless it’s for user data, then json but we recommend an actual data engine

zinc egret
#

what i need then would be

sterile token
#

Yeah for plugins configuratiom we use yaml files and for storing data either databases or Flatfile (H2, Json, Sqlite, etc)

orchid gazelle
#

Configs yaml yes, but not data at all

compact haven
#

mate read my further messages

#

did I like not specify that

#

to the point you had to comment

sterile token
orchid gazelle
#

You specficied "user data" not data at all

compact haven
#

user data as in user generated

#

not user user data

zinc egret
#

wait can i read the yaml of another plugin?

compact haven
#

my bad, too general

zinc egret
#

or i just copy the file tbh

sterile token
river oracle
orchid gazelle
#

Well, there is a lot of data not relative on players

compact haven
#

I.e region data in world guard is user generated

#

because users create regions

#

and set flags

sterile token
#

You can load another plugin files from your own plugin

zinc egret
# river oracle You could but why...

there's this plugin that hides command auto completion except for the ones they have acces to, but i want to make it so that when someone types /help it only describes the plugins they have acces to

sterile token
compact haven
#

anyways, any data that should be file modified by the user should be in yml

orchid gazelle
compact haven
#

Yml is not simple json, it’s actually an expansion

#

but I digress

river oracle
sterile token
#

Json data storing or data representation

Yaml more for creating configuratioms

orchid gazelle
#

Yes

compact haven
#

and I agree, my message just wasn’t specific enough

#

y’all staying on a topic that is not necessary

sterile token
compact haven
#

DaFeist did

#

not me my friend

sterile token
#

Oh sorry

orchid gazelle
#

Lmao

#

Chill

river oracle
#

Just shush smh

sterile token
#

Well i'm this case i Will use yaml for configurations

#

And Json just for storing data

orchid gazelle
#

You already told us that 3 times now

#

Its okay

zinc egret
#

anyway im in desperate need of help 😭 (like litteraly i want help)

sterile token
#

Pierre what Will your plugin make

compact haven
#

oh

#

then yes you need that

#

the uh yml and groups

zinc egret
#

i can just copy it tbh

compact haven
#

as for yaml, should be well explained in the thread we sent

#

?configs

undone axleBOT
compact haven
#

for groups, loop the group names in the config (loop getConfigurationSection(ā€œmessagesā€).getKeys(false))

#

(Assuming your config is:

messages:
  default:
    - ā€œHelpā€
```)
zinc egret
#
groups:
  #if no group is set via plhide.group.<group> this will be applied
  #do not rename the default group!
  #blocked commands will be automatically removed from the tabcompletion
  default:
    commands:
      - help
      - home
      - spawn
      - delhome
      - claim
      - unclaim
      - claimlist
      - trapped
      - nick
      - nickname
    #If the value is blacklist, the commands are blocked and invisible
    #If the value is whitelist, the commands only executable and visible
    group-mode: whitelist
    #If a player is in two groups, the group with the higher priority number is used
    #The minimum value is 0
    priority: 0
    #here you can add other groups
    #The group mode is taken from the main group, in this case the main group is "default"
    included-groups: []

  #This group for example will remove and block all commands
  #add permission plhide.group.xxx to apply this group
  Donator:
    commands:
      - prefix
    group-mode: whitelist
    priority: 1
    included-groups:
      - default
  Donator+:
    commands:
      - fly
    group-mode: whitelist
    priority: 2
    included-groups:
      - default
      - Donator
  Admin:
    commands:
      - plhide
      - lp
      - op
    group-mode: whitelist
    priority: 20
    included-groups:
      - default
      - Donator
      - Donator+

this is the yaml from the other plugin

compact haven
#

for checking groups, use player.hasPermission(ā€œgroup.ā€ + groupName) assuming player is a CommandSender or Player object and groupName is from the loop value I sent in the example above

zinc egret
#

but honestly i only use whitelist so i can negate the group-mode and priority

compact haven
#

wel im not going to teach you how to code such an extensive plugin, the example was just to show you how to get the keys under a config section in case you didn’t know how to do that (you probably don’t given you just started with snakeyml)

mighty aurora
#

What is the best way to check if two strings match? I know this is a stupid question but it seems like every time I send my code here and I have anything related to string matching somebody says the method is wrong.

compact haven
#

?equals

#

?==

mighty aurora
#

Also can I use spigot to create a book that has clickable text that will add more text into the book(it will be a written book) and so that I don't have to add a ton of different commands and sub commands to change whats inside the book based on the players clicks and such

zinc egret
#

so that i can just loop over?: for command in groups.xxx.commands { commands[command] }

compact haven
#

you sure can

#

stop with the python examples xd

#

or if that’s pseudo code

zinc egret
#

well

#

imo python IS pseudo code

compact haven
#

it looks like it but isn’t lol

zinc egret
#

but this isnt python because i used curly brackets

#

imo python is stupid bcz it uses indentation instead of curly brackets

compact haven
#

Do you want me to write you something to help you do that, and then you can attempt to figure out how it works?

#

will not spoon feed in the future unless it’s a new topic, so I highly recommend actually trying to figure out what each thing does

#

that’s honestly the best way to learn in your case when you have experience in previous languages and just not the syntactical structure and SDK of Java

zinc egret
#

i like being spoon fed because i learn fast from just reading working code

zinc egret
#

oh you said figuring it out myself best way

#

but anyway i figured i need to put Plugin plugin = getPlugin(); somewhere? then plugin.getConfig()

compact haven
#

No I meant figuring out how I coded it

#

Because you can imagine the structures you need to accomplish something, just not how to implement

#

By reading Java code that implements those structures, you’ll make relationships with your previous languages

zinc egret
#

oh yeah i think i can figure it out with the functions you send me

#

just struggling with getting that plugin

#

you meant these right?:
(loop getConfigurationSection(ā€œmessagesā€).getKeys(false))
player.hasPermission(ā€œgroup.ā€ + groupName)

compact haven
#

you’ll see

zinc egret
#

what do you mean youll see?

compact haven
#

from my code ;c

zinc egret
#

ohhh alright haha

#

i for a moment thought i was missing a clue or something

humble tulip
#

@worldly ingot I just forked bukkit and craftbukkit.
Bukkit is fine when I clone it in my ide but craftbukkit has some pom.xml errors
One of the craftbukkit errors was fixed simply by compiling bukkit
Here are the errors in my pom

compact haven
#
public class HelpCommand implements CommandExecutor {
  private YamlConfiguration config;
  public HelpCommand(YamlConfiguration config) {
    this.config = config;
  }

  // Last 4 lines known as a Dependency Injection pattern.
  
  public boolean onCommand(CommandSender sender, Command cmd, String lbl, String[] args) {
    String userGroup = null;
    for (String group : getGroups().clone().reverse()) { // Remove .clone().reverse() if top value of list is the highest group in a hierarchy.
      // .clone() will duplicate the list indexes (not the elements, unimportant to know difference for now) into another list
      // .reverse() will reverse the order of the list, so 0 -> last index, 1 -> last index - 1
      if (sender.hasPermission("group." + group))
        userGroup = group;
    }
    
    if (userGroup == null)
      userGroup = "default"; /* Assuming you have a group named "default" and it's the "member" group */
      
    sender.sendMessage("Help:");
    for (String command : getCommands(userGroup)) {
      String description = getCommandDescription(command);
      sender.sendMessage("/" + command + ": " + description);
    }
    
    return true;
  }
  
  private List<String> getGroups() {
    return config.getConfigurationSection("groups").getKeys(false /* true for the keys of every element below and even further below. */);
  }
  
  private List<String> getCommands(String group) {
    if (group == null)
      return getCommandsAvailable();
      
    return config.getStringList("groups." + group);
    // As an alternative, you can always use config.getConfigurationSection("groups").getStringList(group);. Both work.
  }
  
  private List<String> getCommandsAvailable() {
    return config.getStringList("commands");
  }
  
  private String getCommandDescription(String command) {
    return config.getString("commands." + command);
  }
}
#
public class PLHideHelpPlugin extends JavaPlugin {
  ...
  public void onEnable() {
    ...
    YamlConfiguration config = getConfig(); // getConfig() provided by the parent class JavaPlugin
    getCommand("help").setExecutor(new HelpCommand(config));
  }
}

(abbreviation, will not copy your current code. add lines as necessary)

#

both are untested, written in Notepad++ so import as necessary.

#

Do note that this is immense spoonfeeding, so ask any questions that you have while you DO attempt to understand it

#

strongly encourage you to relate structures from any similar language to Java when you read through it

zinc egret
#

oh damn this is massive spoon feeding haha

#

it just bugs me that

#

things like getConfig and this are "just" there

compact haven
#

well it's not

#

oh

#

yes they are

zinc egret
#

instead of this.getConfig() and onEnable(this)

compact haven
#

but you need to understand that this is implied & added by the Java compiler before it goes to the JVM

zinc egret
#

yeah

#

but its just not explicit imo

compact haven
#

as for getConfig(), get used to it because this class is loaded & constructed by Spigot's plugin loader

#

it's just "there" because the class extends JavaPlugin

#

(to be more explicit you can write super.getConfig())

zinc egret
#

yeah, inheritance, if thats the right word

compact haven
#

yep

zinc egret
compact haven
#

I guess it's also a form of abstraction, but unimportant as all interfaces are abstraction

zinc egret
#

because at first sight you wouldnt know if getConfig() is an imported function or an inherited one

compact haven
#

(abstraction as in the four pillars of OOP, not the Java terminology)

compact haven
#

any time you see just a method name, you know it's either in that class or from a parent class

#

okay well sorry that's a lie

zinc egret
compact haven
#

you can do something called import static in Java, but the number of times I've seen that can be counted on one hand

#

you import classes in java, everything is a class

zinc egret
#

ayo how many fingers you got?

compact haven
#

so you'd have
import xx.x.x.MyClass

and MyClass.someMethod()

compact haven
zinc egret
#

so never
import xx.x.x.MyClass.someMethod
someMethod()?

compact haven
#

unless it has the static modifier after import, correct

zinc egret
#

thats incredibly stupid if im honest

eager yew
#

How can i create a world with the default ChunkGenerator with NMS? Any ideas would help, pls

compact haven
#

it's just how Java was designed. to call a method liek that it HAS to be static, and if it wasn't static you'd need an instance of the class

#

(MyClass.someMethod() or instanceOfMyClass.someMethod())

humble tulip
compact haven
#

This is why you should never do something in Java with Spigot (or any library) without actually learning java

zinc egret
compact haven
#

for example, no you can not import sendMessage from org.bukkit.Player

#

because sendMessage requires a Player instance

zinc egret
compact haven
#

let me explain

zinc egret
#

i know how instances works etc

#

but what if a function doesnt need an instance?

eager yew
humble tulip
#

has anyone here forked craftbukkit?

compact haven
#

you have 2 types of invocations: a static invocation and a direct one (this is not a JVM topic, just a simplification).

A direct one is typically someVariable.hello(). HOWEVER, the exception is when you declare the method OR a class you implement/extend declares the method. Then, you have this as a keyword because you use the instance the code is currently running in of that class. Like, inside of the org.bukkit.Player class, you have sendMessage(String s). Assuming a method inside of that class wants to call #sendMessage(), it doesn't have a variable (called field, parameter, or variable for local declarations) as the instance of the Player. It does, however, have an instance because it's currently executing, and that's what is provided by the this keyword. The inclusion of this is implicit, unless you're attempting to pass this as a parameter. For example if I have Util.sendMessage(Player player, String s) defined as a static method (will attempt to explain shortly), then to call it inside of org.bukkit.Player I'd need to use Util.sendMessage(this, "Hello World")

A static method is a method that doesn't require the instance of the declaring class to execute. That also means you can't access non-static fields from it (variables declared at the class level). The inclusion of this keyword is NOT present to call a static method, because you aren't invoking it with your instance. You may pass this into a static method, but the method will not be invoked from this. this.staticMethod() is not possible, staticMethod(this) is. Do note that the this keyword is also NOT accessible from side static methods because there is no instance for this to represent.

#

As for the question about static modifiers, I don't know that static is a modifier in the import statement per se, it's a token for when the Java compiler compiles the file. However, "modifier" is a term used in Java, and that's for miscellaneous tokens such as "static", "private", "public", etc. These are the first two brackets of info (in my example below) in the method declaration:
[access modifier] [etc modifiers] [method name]([method parameters , ...]_ { ... }

#

(long read but all of it is important info)

zinc egret
#

not really able to take all that text in, its kinda late for me

compact haven
#

you better read it when u wake up, otherwise I'm sending you an invoice for the time it took to write all of that

zinc egret
#

btw you used List, import java.util.List; this one?

compact haven
#

Yes

sterile token
compact haven
#

yes, and I agree with you

#

but he's going to do it anyways

sterile token
#

I don't told it as mad, just for personal experiences

compact haven
#

i never said a word of disagreement about your statement

#

yeah it's because with previous knowledge in programming, you're going to dive straight in

sterile token
#

Oh ok sorry Itzdlg idk why i thought You we're attatching me. My bad

compact haven
#

nah you're good

sterile token
#

I habe relized that Async it's not definitly so simple

#

šŸ’€

#

It's more what You think, idk why ppl said it's easy to understand. I don't really agree cuz the concept is clarify. But not the implementation because you have to take care about sync around the data, concurrencys, threads and pools

zinc egret
compact haven
#

well I agree with VERANO on the learning java

#

but I've been hypocritical in the past on that exact statement

#

like when I was learning Rust, I was attempting to use winsafe crate basically immediately

#

(still don't know Rust, so perhaps that's a testament)

zinc egret
#

šŸ”«

sterile token
#

Itz let do our things because ppl like that won't listen us. Si the Best thing is to ignore them

compact haven
#

well I might be able to do that only because a cool video existed in a series called Rust for Java developers

#

there's no way I would've read the Rust book documentation though

zinc egret
#

but tbf i was coming from python

compact haven
#

doesn't make it any easier coming from Java, it handles that for you

zinc egret
#

true

sterile token
#

Hey please personal problems must be solved vis dns. This discord is for supporting ppl which has knowledge atleast how Java works

zinc egret
#

honestly im not really struggling with the syntax

#

but i am really with the structure of gradle

#

or atleast i was, now i somewhat get it

#

but you have to configure alot and name stuff very specifically

#

like for example Rust has Cargo

#

which is amazing imo

#

but as far as i have noticed you have to supply your own depency source, instead of a centralized one (like cargo from rust or pip from python)

sterile token
#

I personal think You doing things really wrongs, You must first learn the lang we're You coding, then dependency build environments and finally work with 3rd party libraries or apis

zinc egret
#

that wouldve just been so much longer

sterile token
#

So if You expected yo get help You must know the lang we're You coding. So it's not really simple i ask something get all served on plate without knowing what even does

zinc egret
#

i mean if we were talking about java -> rust, yes learn the language

#

but rust -> java, aint no way

sterile token
zinc egret
mighty aurora
#

If I was creating a quest system that used NPC's to basically only give a book that contains the quest information and whether to accept or not would I need or even want to store the NPC's inside a database?

sterile token
#

You making mad because You Dont listen US, WHO we have experiences about Java programming. That males You look like little teen. Not wondering to be rude

sterile token
#

Will You then need to use it?

mighty aurora
#

It needs to be used for the quest

#

and that quest will be done many times

zinc egret
sterile token
sterile token
#

Like i have said before if i would ignore this from the start all this wouldnt happen

zinc egret
#

why in gods name would i want to start watching a youtube tutorial that covers shit like a + b and storing variables, if i can just look at working code and see that [type] [name] = [casting] func(); or [type] [name] = new [type]();

#

of course there are complex stuf out there but i will learn those along the way

unkempt peak
#

You can't just start programming stuff without taking the time to learn and then waste others time due to your lack of experience and unwillingness to learn it properly. If you just take the time to actually understand what you are doing it will save you and others so much time in the future @zinc egret

zinc egret
mighty aurora
#

Also what would the best way to store a book inside a database be? can it be done reasonably with a single MySQL column or would it need/want multiple?

zinc egret
#

i learn quick from examples

sterile token
#

😔😔

#

You know make me raged

zinc egret
#

bro chill

compact haven
#

unless you need to SQL query based on book data but you'll be writing an SQL structure for that for ages

zinc egret
#

itzdlg was willing to spoon feed me (although it was more than needed)

mighty aurora
#

I would be querying based on another column

compact haven
#

then you'll be fine

mighty aurora
#

Would that be like grab the ItemMeta or ?

compact haven
#

uh

#

there's ItemStack serialization gists out there

#

find one that works with books

#

anyone have something on hand that works with complex ItemMeta like books? pls share for this wonderful guy here

sterile token
#

Really thank to heaven we have this option for blocking pol

#

🤣🤣

zinc egret
#
    private List<String> getPlayerGroups(Player player) {
        Set<String> groups = config.getConfigurationSection("groups").getKeys(false /* true for the keys of every element below and even further below. */);
        List<String> joined = new ArrayList<String>();
        groups.forEach((group) -> {
            if (player.hasPermission("plhide.group." + group)) {
                joined.add(group);
                joined.addAll(getInheritedGroups(group));
            }
        });
        return joined;
    }

how does this look to you @compact haven

#

its likely that joined has double groups in it tho

#

wait i can just use set, if its like in python that is

#

oh yeah lol

sterile token
#

I have read abou Async on Java and it's not so simple as most You have said. Because in Async you must care about concunrencies, data sync around the threads, and many other things

zinc egret
#
    private Set<String> getPlayerGroups(Player player) {
        Set<String> groups = config.getConfigurationSection("groups").getKeys(false /* true for the keys of every element below and even further below. */);
        Set<String> joined = new HashSet<String>();
        groups.forEach((group) -> {
            if (player.hasPermission("plhide.group." + group)) {
                joined.add(group);
                joined.addAll(getInheritedGroups(group));
            }
        });
        return joined;
    }
humble tulip
#

anyone here has forked craftbukkit?

compact haven
#

mb was in general

#

let me take a look

zinc egret
#

just gotta take care of nulls in my (other) functions

#

but i will do that later

compact haven
#

well this doesnt make sense

#

if you give them a permission plhide.group.xxx then just check for the groups inside of your config.yml

#

not their actual groups

#

otherwise don't give them a special permission at all

#

you need to work on your logic here

zinc egret
#

?

#

plhide.group.xxx is given by a different plugin

#

it determines what group they are in

compact haven
#

wdym given by

zinc egret
#

which groups someone is in isnt stored inside the config

mighty aurora
#
title: <book title>
author: <author name>
pages:
- <page text>
- < .. more pages .. >
generation: <generation code>```Would this from https://www.spigotmc.org/wiki/itemstack-serialization/ work?
compact haven
#

why do you need all of their plyer groups

#

and not just the one that matched

#

I'd only need the ones that matched because that's all that you'll use

zinc egret
#

someone can have multiple groups

compact haven
#

sure, but you just said that those groups aren't inside of the config

#

you need to make sure the groups they inherit are also inside the config

zinc egret
#

i think we are miscommunicating

compact haven
#

is getPlayerGroups for the help command?

humble tulip
mighty aurora
#

Well yeah

zinc egret
tall dragon
#

oops looks like i wanst looking at most recent messages, sorry

zinc egret
#

haha

#

no worries

tall dragon
#

it'd have to be accepted by maven central i guess. for which im not sure the requirements are.

compact haven
#

||```
Set<String> joined = groups.stream()
.filter(g -> player.hasPermission("plhide.group." + g)
.flatMap(g -> Stream.concat(Stream.of(g), getInheritedGroups(player).stream()))
.filter(g -> groups.contains(g))
.collect(Collectors.asSet());


if you want it to be streams, only providing this because you used the .forEach (which I'm going to assume was copied from somewhere else). however, I will admit this is convoluted and just wanted to expose you to streams (this specific example is probably slower than what you're doing now). ulterior motive haha||
#

read if you want spoiler to a cool Java feature that probably has an equivalent in one of your languages

zinc egret
#

crazy nice

#

its like .iter() in rust

compact haven
#

ah I see, that's where you got forEach from I'm going to guess

zinc egret
#

i found forEach first, streams later when i tried .map

compact haven
#

ahh

zinc egret
#

intellij autocompleted it to stream().map

compact haven
#

yep yep you've experienced the benefit of having previous experience

tall dragon
compact haven
#

new people would be completely clueless to how streams work, u can relate it to iter

compact haven
#

whereas you would've been exposed to that way later on if you followed "how to Java" conventionally

zinc egret
#

although in python its done differently

zinc egret
compact haven
#

@tall dragon what is that from? just curious

zinc egret
#

inazuma eleven

#

its the alien guy

#

even tho theyre not alien

compact haven
#

ah I see

tall dragon
#

yea ^

#

i used ai to greatly up the frame rate

#

and this was the result

zinc egret
humble tulip
compact haven
#

I mean, anyone who has made a spigot fork has

humble tulip
#

i need help

compact haven
#

not in reality, but effectively

humble tulip
#

i forked it but it has a bunch of errors

compact haven
#

(they jsut cloned and made patches, then applied them)

#

well that really sucks lmao

humble tulip
#

building bukkit (not craftbukkit) fixed some

compact haven
#

I'd attempt asking in PaperMC because they're probably experienced in cloning CraftBukkit

compact haven
#

well I ahven't personally done it, so I can't help xd

humble tulip
zinc egret
#

forking paper sounds really stupid in my head

humble tulip
#

lmao

zinc egret
#

like why tf would you wanna put paper on a fork

compact haven
#

well xd

zinc egret
#

@compact haven it worksss first goo letssfffff goooo

#

i changed it to just returning the command names instead of their description (i still have to write those)

compact haven
#

W

zinc egret
#

what does this mean?

compact haven
#

final is a modifier in java

#

it's similar to making something immutable in rust

#

i.e. not including the mut keyword

zinc egret
#

thats what i assumed

#

so bad thing !

#

or wait

#

no good

compact haven
#

though do note that iirc in Rust if it's not mut then you can't modify the values inside of the struct

#

but in Java you can

#

(lmk if I'm wrong on that)

zinc egret
#

if something in rust is not mut, then everything inside is also not mut, well it can be mut but you cant acces it as mut

#

it would be &&mut or something

fiery shadow
#

guys

compact haven
#

gotcha, yeah in Java if it's final then that just means the reference of "config" is locked to that instance of YamlConfiguration, but the values inside are still mutable

zinc egret
#

maybe if you go inside the unsafe terrotory

fiery shadow
#

i need help with some problem in the world generator

humble tulip
#

?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!

zinc egret
compact haven
#

correct

zinc egret
#

yucky behaviour but still fine

fiery shadow
#

i dont know why the world is generated like this

zinc egret
fiery shadow
#

no

zinc egret
#

im just kidding

compact haven
#

I mean if the goal was Minecraft vanilla generation then yes, way off!

fiery shadow
#

xd

compact haven
#

but if you're trying to be unique, then A+

fiery shadow
compact haven
#

it looks like spectator mode ngl

fiery shadow
#

im in creative

compact haven
#

well, minus the falling entities

#

no I know, I mean like if u generate a vanilla world and go into spectator below the surface

#

it looks like that xd

fiery shadow
#

yes xd

humble tulip
#

let's see ur current code

fiery shadow
#

i tried 4 times to generated the world

#

and it is always generated like this

compact haven
#

it's the RNG

#

you're just unlucky

fiery shadow
#

rng?

compact haven
#

will need to repeat 1 billion times to be reasonably positive it's a mistake

#

uhm, RNG = random number generator

#

kind of slang for saying the random number is never in your favor

#

(will assume that there's some sort of random inside of world generation code)

fiery shadow
#

multiversecore dosnt works too

#

xd

humble tulip
#

@fiery shadow show your code

fiery shadow
#

?

#

code of what

compact haven
#

btw @zinc egret an interesting alternative to consider would be instead of groups, just have a list of commands & their permission + description

#

then just display the ones, in order of declaration in config, that they have permission for

zinc egret
compact haven
#

mm, idk the implementation of getInheritedGroups

#

if it is based on the ConfigurationSection, then absolutely

zinc egret
compact haven
#

it is

#

you'll need to find the permission for each command xd

zinc egret
#

yes...

compact haven
#

however it's more structurally sound to me

#

logical might be the better word

#

but both work, absolutely lol

zinc egret
#

current one is cleaner imo

#

btw

#

what if i want to make it so if the command description doesnt exist?

#

contains?

humble tulip
#

should spigot have a method to open an inv with a custom name?

fiery shadow
#

maybe my problem is that the base server is 1.19.3 and I'm on 1.16.5?

#

xd

compact haven
#

oh i see

#

like I have test as an entry in one of the group sections, but no test in the description section?

zinc egret
#

yeah

compact haven
#

you could add a filter(cmd -> getCommandDescription(cmd) != null)

zinc egret
#
    private String getCommandDescription(String command) {
        if (config.contains("commands." + command)) {
            return config.getString("commands." + command);
        }
        return "No description found";
    }
```i came up with this
compact haven
#

or filter(cmd -> !config.getConfigurationSection("commands").contains(cmd))

zinc egret
#

because i prefer to know which one have been added yet

compact haven
#

that works

zinc egret
#

is it good tho?

compact haven
#

however if you want to be special, you can

tender shard
compact haven
#

oh yeah

#

no alex

zinc egret
#

overflows be like 🄓

compact haven
#

that filter was for the stream in the command exec part

tender shard
compact haven
#

the special was going to be ternary, but that is the correct way @zinc egret

#

you can add an extra argument which is the "default" value

zinc egret
#

yeah

compact haven
#

and it's only used when the node isnt found

zinc egret
#

its like python's dict.get function

compact haven
#

the same also goes for a Java Map btw

#

iirc it's required by implementations to have a get(T key, V default) method

#

T & V are generics, another pre-exposure like I tried with streams earlier (unfortunately failed so attempting again)

#

idk about Rust but pretty sure C++ has an equivalent

#

iirc that was one of the languages you know

zinc egret
#

you mean overflows?

compact haven
#

no overflow

zinc egret
#

same functions different ways to put args

compact haven
#

give me an example, overflow as in stack overflow?

#

oh uhm

pseudo hazel
#

overloaded

compact haven
#

in java that's called method overloading

#

not overflowing

zinc egret
#

its overloading ye mb

compact haven
#

but no I meant the letters T and V, they aren't classes but a placeholder of sorts

zinc egret
#

yeah generics

zinc egret
#

if HashMap<T, V> then HashMap.get(T key, V default)

atomic dirge
#

Hello,
Can someone help me to find this plugin?
I need a limitation of claims per group.
For example:
Group 1 - can have only 1 claim
Group 2 - can have 2 claims
Group 3 - can have 3 claims
Group 4 - can have 4 claims
Gruop 5 - can have 5 claims
Group 6 - can have 6 claims

compact haven
zinc egret
#

i love generics

#

they're my e-gf (they also exist offline)

compact haven
#

well prepare to be disappointed, because Java generics only exist at compile time

zinc egret
#

L

compact haven
#

L java

ivory sleet
#

get(Object key) :c

compact haven
#

oh yeah

zinc egret
#

python actually doesnt have overloading btw, because there are no types during compile time

compact haven
#

isn't Map generic, but uses Object in the declarations

ivory sleet
#

yeee

compact haven
#

wtf is up with that, is that because it was written pre-generics?

zinc egret
pseudo hazel
#

yeah python has optional arguments

zinc egret
compact haven
#

oh yeah I meant the class, not the stream method xd

ivory sleet
#

hehe

pseudo hazel
#

they are just overloading but done differently xD

zinc egret
#

big fan of kwargs tho

compact haven
#

idk what kwargs is, but we have varargs in Java

ivory sleet
compact haven
#

oh so varargs is equiv to *args in py

ivory sleet
#

yea

compact haven
#

whats kwargs?

ivory sleet
#

passing a map basically

compact haven
#

ah

#

mate is passing JSON into a method šŸ˜

zinc egret
# compact haven idk what kwargs is, but we have varargs in Java
def function(name, last_name = None):
  if not last_name:
    last_name = ""
  print(f"Hello {name}{' ' if last_name else ''}{last_name}")

function('p', 'v')
function('p')

def function(*, **kwargs): 
  print(kwargs)

function(cheese = "ham")
# ->
# {'cheese': 'ham'}

function()
# ->
# {}

def function(*, ooga_booga = False):
    print(ooga_booga)

function() # False
function(True) # False
function(ooga_booga = True) # True
#

wait shit

compact haven
#

I think that's for optional args

#

we don't even have that in Java

#

it's so lame

#

need Kotlin for that

#

instead we need to write like 20 overloaded methods that call the actual method with the defaults

ivory sleet
#

ye

compact haven
#

I just saw your previous message Conclure

#

and Optional is like not the equivalent 😭

#

you still need to pass Optional.empty() instead of excluding it

ivory sleet
#

but also method overloading with optionals is clowny stuff

compact haven
#

oh yeah

#

because once again, generics erased at runtime

#

and fucking method overloading

humble tulip
#

YESS

#

CONCLURE

ivory sleet
#

java at its purest

#

hi minion

humble tulip
#

hello

#

i'm sure you've compiled craftbukkit before right?

zinc egret
#

@compact haven how can i reload the config without restarting the plugin?

compact haven
#

oh i just realized

humble tulip
compact haven
#

anyone who has written a PR for Spigot has done what you are

compact haven
#

that's a sizeable amount of active peeps here

zinc egret
ivory sleet
#

or not in that way

humble tulip
#

woah rly?

ivory sleet
#

spigot api

#

and paper

#

but not craftbukkit

humble tulip
#

well i mean

#

i forked craftbukkit from spigot stash

ivory sleet
#

yea figures

humble tulip
#

ah so you won't be able to help?

#

ik you're a big brain dude

ivory sleet
#

let me have a look

humble tulip
#

sure ty

compact haven
#

uh Pierre, that's a great question

#

can you reload getConfig() (to the others)

#

or should you just getConfig().load(new File(dataFolder, "config.yml")

#

oh there's reloadConfig()

#

how convenient

#

@zinc egret you'll need an instance of your Plugin class, and then call reloadConfig()

#

so inside of a ReloadCommand, instead of passing YamlConfiguration config, pass Plugin plugin, and use plugin.reloadConfig() inside of the command exec

zinc egret
#

yeye

#

shit im so tired

#

4am 🄱

compact haven
#

lmao that's me all the time

#

I decide I want to try something new too late to actually get very far

ivory sleet
compact haven
#

though tbf you've gotten further than I would've expected

ivory sleet
#

or like... what does ur ide say

zinc egret
compact haven
#

kay that might be an overuse of streams

zinc egret
compact haven
#

yes

zinc egret
#

wouldnt have been without you

humble tulip
zinc egret
#

honestly i shouldnt have continued when i came back to my pc at ~23:30

humble tulip
ivory sleet
compact haven
#

nah its ok

ivory sleet
#

thats a prop

compact haven
#

W spigot programming

ivory sleet
#

i looked at the pom

compact haven
#

or actually

ivory sleet
#

it isnt listed

compact haven
#

W java (exception of old libraries that haven't been updated since like Java 6)

ivory sleet
#

weirdly enough minion

humble tulip
#

also this happens

#

a decent amount of classes have errors calling nms methods

zinc egret
#

i love those one liners

#

because its linear

#

you dont need to jump lines to understand it

compact haven
#

I mean, technically, you can put that entire java file into one line

#

and it'll still compile

#

though I understand what you mean xd

zinc egret
#

like

#

if you'd be adding to a variable thats defined earlier

#

you gotta look back at that variable whenever something gets added to it

#

linear is just easier to understand for my smooth brain

compact haven
#

lol

#

btw I'd recommend not using Set for commands

#

because ideally you'll have some sort of organization

#

if you want to return it as a set from the config, then in the stream use a sort alphabetically (where you sendMessage)

zinc egret
#

bro as if you read my mind

#

i was going to do that from the start

#

was looking over my code for cleanup and finalization

#

realised i didnt do it yet

compact haven
#

lmao

zinc egret
#

implemented it and came back to disc

#
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (sender instanceof Player player) {
            player.sendMessage(
                    getPlayerCommands(player)
                        .stream()
                        .filter(Objects::nonNull)
                        .sorted()
                        .map(c -> "/" + c + ": " + getCommandDescription(c))
                        .collect(Collectors.joining("\n")
                        )
            );
        }
        return true;
compact haven
#

am just that good of a peer-reviewer

zinc egret
#

for real

compact haven
#

please put a space before the return and move the closing bracket of the stream & sendMessage to the end of collect

#

before I come after you with an axe

zinc egret
#

no

compact haven
#

you must format the way I would. sorry.

#

oh well. seems you need an intervention in the form of capital punishment

zinc egret
#

im gonna give it a final test

#

then cry myself to bed bcz im hella tired

compact haven
#

lol

zinc egret
#

bro

#

i just joined my server

#

typed /stop

#

then got confused when the server suddenly stopped

#

thats my brain rn

compact haven
#

uhm dw you'll do stupider in the future

zinc egret
#

thanks

compact haven
#

with a fully active brain I've recompiled several times to ask "why isn't this updating"

zinc egret
#

or i just stop developing java plugins

compact haven
#

to realize I didn't actually put the new target into the server

zinc egret
#

jk i'll be having java next semester lmao

#

L

compact haven
#

OR I've put the recompiled plugin into the root directory instead of the plugins directory

zinc egret
#

šŸ’€

compact haven
#

(if you ever come across this in the future, the root directory is called the "worlds directory" in Bukkit and is accessible via Bukkit.getWorldContainer())

zinc egret
#

lmao, thing for tmrw i guess

zinc egret
compact haven
#

like command. vs commands.

zinc egret
#

pls

#

dont make me look

compact haven
#

go look

#

then dont compile

#

and make yourself think "was that the solution"

#

all night while u attempt to sleep

#

see I can be a sadist at times

zinc egret
#

reloading also doesnt work

zinc egret
#

as soon as i hit my bed im gone

compact haven
#

lmao

#

that FR is clearly the "im done and we'll talk later" cue

#

go sleep lol, dont forget abt Java

zinc egret
#

yes thanks for the help <3, will be back tmrw

compact haven
#

have a goods night rest

#

and I'm going to assume a good afternoon rest as well

humble tulip
#

let's see the line that it occurs

#

seems like you're calling setProcessComments on a snakeyaml configuration

#

which isnt a method according to the stacktrace

#

what mc version?

#

that may be the issue

#

the snakeyaml in 1.8.8 is OLD

#

waterfall is the proxy

#

?1.8.8

#

yeah 1.8.8 snakeyaml is very old

#

not sure

#

I'm not familiar with this lib

mighty aurora
#
    at us.newrealms.timebounditems.TimeBoundItems.onEnable(TimeBoundItems.java:28) ~[TimeBoundItems-0.062Snapshot.jar:?]
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[paper-api-1.19-R0.1-SNAPSHOT.jar:?]
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[paper-api-1.19-R0.1-SNAPSHOT.jar:?]
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:536) ~[paper-api-1.19-R0.1-SNAPSHOT.jar:?]
    at org.bukkit.craftbukkit.v1_19_R1.CraftServer.enablePlugin(CraftServer.java:561) ~[paper-1.19.jar:git-Paper-31]
    at org.bukkit.craftbukkit.v1_19_R1.CraftServer.enablePlugins(CraftServer.java:475) ~[paper-1.19.jar:git-Paper-31]
    at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:633) ~[paper-1.19.jar:git-Paper-31]
    at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:419) ~[paper-1.19.jar:git-Paper-31]
    at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:306) ~[paper-1.19.jar:git-Paper-31]
    at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1121) ~[paper-1.19.jar:git-Paper-31]
    at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:302) ~[paper-1.19.jar:git-Paper-31]
    at java.lang.Thread.run(Thread.java:833) ~[?:?]``` I'm not sure what would be wrong inside of my code to have caused this. if anyone can help I would appreciate it.
humble tulip
#

check your plugin.yml

#

the command isnt there

warm light
#

@humble tulip can you give me an example of 'Forward' channel? I read the docs many times. but can't understand it

#

I want to send a custom string. so look like I need to use Forward channel

humble tulip
#

@warm light show code

warm light
humble tulip
#

you can copy the code from here

humble tulip
warm light
humble tulip
#

it tells you how to

#

change MyChannel

warm light
#

so I can set the channel name to anything?

humble tulip
#

yes

warm light
#

what does this called "Forward", "MessageRaw" etc?

humble tulip