#help-development

1 messages · Page 1523 of 1

broken lava
#

I'll give it a shot

#

o

wild sinew
#

...

sage swift
#

BlockFadeEvent, BlockPhysicsEvent, or BlockFromToEvent are your best bets

wild sinew
#
Caused by: java.lang.RuntimeException: Failed to find NMS class: Item
sage swift
#

i told you what to do

wild sinew
#

where I Can found this class and replace?

broken lava
#

also, I think I recall your username

sage swift
#

use buildtools, look at the new class structure, and get that path

broken lava
#

oh townyhavens

wild sinew
hexed hatch
sand raven
#

detect packet WORLD_EVENT (61) and check if the ID is 1020

hexed hatch
#

Oh yeah, that

#

lol

quaint mantle
# wild sinew

posting the same thing isnt going to change the answer

wild sinew
#
static {
        hasProtocolLib = Bukkit.getPluginManager().isPluginEnabled("ProtocolLib") && VersionUtils.isVersion(9);
        if (hasProtocolLib) {
            ITEM_CLASS = MinecraftReflection.getMinecraftClass("Item");
            getItem = Accessors.getMethodAccessor(MinecraftReflection
                            .getCraftBukkitClass("util.CraftMagicNumbers"),
                    "getItem", Material.class);
            getMaterial = Accessors.getMethodAccessor(MinecraftReflection
                            .getCraftBukkitClass("util.CraftMagicNumbers"),
                    "getMaterial", ITEM_CLASS);
        }

    }
sage swift
#

hmm yes thank you for that

quaint mantle
#

cool code, nobody asked for it

wild sinew
quaint mantle
wild sinew
sand raven
broken lava
#

if you're just using protocollib shouldn't the mappings already be available

quaint mantle
#

protocol lib is fucked in 1.17 from what ive heard

broken lava
sand raven
#

np

broken lava
#

the only constant is suffering

tidal cairn
#

hi

#

can i have help with coding

hexed hatch
#

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

tame fern
#

Hey guys, working on a World Generation Plugin. Is there a way I can override the vanilla generators biomegrid? Id like to modify the biomes during generation, but not the base terrain.

tidal cairn
#

why isnt this working

#
@EventHandler
public void onEnable() {
  startPlugin();
  return;
}```
hexed hatch
#

What is that lol

#

That should be an @Override

tidal cairn
#

onEnable

dusty herald
#

onEnable is not an event and you don't need to return on voids

tidal cairn
#

no i like it how it is just please tell me why it isnt working

#

i like the orange collor

dusty herald
#

oops

hexed hatch
#

Make that @fresh templethandler an @Override

tidal cairn
#

no i prefer event handler please tell me why its not working

dusty herald
#

show entire code

hexed hatch
#

This has to be a troll

#

Don’t feed the trolls lol

tidal cairn
#

thats my only code

#

i thought it was just that

dusty herald
#

😂

tidal cairn
#

do u want me to show u the class

dusty herald
#

yes

hexed hatch
#

Let’s see that beautiful code boy

tidal cairn
#

hold on

weary geyser
#

?learnjava

undone axleBOT
weary geyser
#

^^^^

tidal cairn
#
public class MainClass extends JavaPlugin 
{

  @EventHandler
  public void onEnable() 
  {
    startPlugin();
    return;
  }

}```
#

thats the class

weary geyser
#

Omfg

#

Why are you using event handler

hexed hatch
#

That’s beautiful

#

Because he prefers it

tidal cairn
#

it looks sexier

hexed hatch
#

Also, it’s a troll. Don’t waste your time.

tidal cairn
#

wat?

weary geyser
#

Yup 100% troll

tidal cairn
#

how am i trolling

#

im concerned why it isnt working

dusty herald
#

what ide are you using

weary geyser
#

@tidal cairn bro.

tidal cairn
dusty herald
#

are you seeing any errors in your ide

tidal cairn
#

no

dusty herald
#

?kick @tidal cairn

undone axleBOT
#

Done. That felt good.

dusty herald
#

startPlugin() doesn't exist 🤷‍♂️

hexed hatch
#

That’s a good reason to kick someone

#

For using Eclipse

#

We should kick all Eclipse users

dusty herald
#

that's not why I kicked him 😂

hexed hatch
#

Shaking my smh my head

proven sierra
#

he could have a method called startPlugin

#

that code on its own would actually work as a plugin, lol

#

kicking people for not understanding 👍

weary geyser
hexed hatch
#

Funnily enough I actually had a method just like that back when I was dumb and didn’t understand OOP

dusty herald
#

🤷‍♂️ he was obviously trolling imo but you do you

weary geyser
latent depot
#

Hi im having troubles with Voting Plugin, is this a good place to ask for help? Or shall i look elsewhere?

dusty herald
latent depot
#

Thank you

prisma badge
#

hello i am new to codeing

#

can someone help me with my code

unreal quartz
#

not until you ask us properly

prisma badge
#

what

hexed hatch
#

lol

unreal quartz
#

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

prisma badge
#

i want md 5 to answer

unreal quartz
#

tough shit

prisma badge
#

ok fine

#

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

prisma badge
#

@unreal quartz

#

read that

unreal quartz
#

sorry i'm illiterate

prisma badge
#

ok

#

why isnt this working

hexed hatch
#

You just have to try harder

#

But I have faith in you

prisma badge
#
public boolean banana() {
  if (banana) {
    return true;
  } else {
    return false;
  }
}```
quaint mantle
#

Imagine using an else

dusty herald
#

elses have uses you know 😭

prisma badge
#
public void countdown() {
  System.out.println("countdown");
  return;
}```
#

why is that not working

dusty herald
#

are you calling the method

unreal quartz
#

have you tried turning it off and back on again?

dusty herald
#

that too

prisma badge
unreal quartz
#

you need to pick up your phone and dial the method

#

that's why there are letters on the keypad

prisma badge
#

OHH

#

I get it now

quaint mantle
#

Lmao

prisma badge
#

how do i dial it

quaint mantle
#

Learn Java basics, you’ll learn how to press the keys

dusty herald
hexed hatch
#

Guys, this is obviously the same troll

prisma badge
#

new question

#

how do i create a new instance of a class

quaint mantle
#

U have you buy another one

prisma badge
sullen marlin
#

psst hey kid, want some class instances?

prisma badge
#

yes

quaint mantle
#
java.lang.NullPointerException: null
20.06 18:34:07 [Server] INFO at dev.bleepo.bleepohelp.Bleepohelp.onEnable(Bleepohelp.java:30) ~[?:?]
20.06 18:34:07 [Server] INFO at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[patched_1.12.2.jar:git-Paper-"77cce8236"]
20.06 18:34:07 [Server] INFO at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:316) ~[patched_1.12.2.jar:git-Paper-"77cce8236"]
20.06 18:34:07 [Server] INFO at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) ~[patched_1.12.2.jar:git-Paper-"77cce8236"]
20.06 18:34:07 [Server] INFO at com.rylinaux.plugman.util.PluginUtil.load(PluginUtil.java:304) ~[?:?]
20.06 18:34:07 [Server] INFO at com.rylinaux.plugman.command.LoadCommand.execute(LoadCommand.java:114) ~[?:?]
20.06 18:34:07 [Server] INFO at com.rylinaux.plugman.PlugManCommandHandler.onCommand(PlugManCommandHandler.java:95) ~[?:?]
20.06 18:34:07 [Server] INFO at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[patched_1.12.2.jar:git-Paper-"77cce8236"]
20.06 18:34:07 [Server] INFO at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:152) ~[patched_1.12.2.jar:git-Paper-"77cce8236"]
20.06 18:34:07 [Server] INFO at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:685) ~[patched_1.12.2.jar:git-Paper-"77cce8236"]
20.06 18:34:07

What is wrong? Im confused

prisma badge
#

@unreal quartz

quaint mantle
#

md5 is pretty cool

undone axleBOT
quaint mantle
#

first 2 lines give the entire issue

#

?

#

Follow the stack trace

#

I need to learn how to read errors

#

Yes

#

That is a very helpful skill

#

lmao

#

Look around google of "java understanding stacktraces"

#

Thank you

#

java is super helpful with stacktraces

sullen marlin
#

[[core dumped]]

quaint mantle
#

maybe except a jvm crash 🙂

#

I had a JVM crash once where my research gave the answer of "who the fuck knows" and "couple important bytes of memory corrupted so java saved itself by crashing" were the two answers.

grand coral
#

Anyone knows how to ask if the Block is natural or is it placed by a Player

hexed hatch
#

Java is magical

sullen marlin
#

you'd have to track every block placed

#

its not a great thing to do

#

if you have a block logger / rollback plugin you can hook that

#

but its still gonna be slow

quaint mantle
#

Imagine if md5 friended me 😳

granite stirrup
dusk flicker
#

Imagine wanting MD to friend you

quaint mantle
#

I dont

#

actually

granite stirrup
#

i do

dusk flicker
#

Cause I 100% do so if you don't you shouldn't be here

hexed hatch
#

If md tried to add me as a friend I would file a restraining order

quaint mantle
#

Id rather just chill

#

hes too smart for me

granite stirrup
#

@quaint mantle

#

add me

quaint mantle
#

Lol

granite stirrup
#

lol

#

:(

worldly ingot
#

If it makes any of you feel any better

#

I don't have md_5 on my friends list

onyx shale
#

neither i have you

#

wtf

worldly ingot
#

Friends are overrated

granite stirrup
onyx shale
#

the request been sitting there

#

for months

quaint mantle
#
kill.setExecutor(new kill(this));

so this is the line thats erroring

granite stirrup
#

whats kill

#

also why are u doing new kill()?

#

shouldnt it be new Kill()?

quaint mantle
#

No, it shouldnt

granite stirrup
#

why

quaint mantle
#
PluginCommand kill = server.getPluginCommand("kill");
        kill.setExecutor(new kill(this));
#

thats why

wraith rapids
#

yeah, don't do that

#

classes should start with an uppercase character

quaint mantle
#

What should i do then?

floral flare
#

How can I check if a player's inventory contains any items?

quaint mantle
#

Alright

wraith rapids
#

like here for example, there is an issue of confusion

#

you have a variable named kill

#

and a class named kill

granite stirrup
#

wtf

wraith rapids
#

and without syntax highlighting it would be pretty difficult to tell which is which

quaint mantle
#

Good point

granite stirrup
#

wtf is that class naming convention

#

are u using camelCase for fricking classes

#

XD

#

i use Pascal case case for classes i think thats what its called

#

so its like ClassName

quaint mantle
wraith rapids
#

what's the error

granite stirrup
wraith rapids
#

i can't see replies

#

client doesn't support em

wraith rapids
#

is it a NPE

#

make sure the command is declared in your plugin.yml

granite stirrup
quaint mantle
#

LMAO

wraith rapids
#

getCommand is nullable; if the command isn't declared in the plugin.yml, it will return null

quaint mantle
#

What happens when you dont code for 4 months

#

🤦‍♂️ Im so absolutely stupid

granite stirrup
dusk flicker
#

Registering commands in the description file is overrated

#

Be a man and directly insert them into the command map

granite stirrup
#

that isnt recommended lol

dusk flicker
#

Who doesn't recommend it?

granite stirrup
#

spigot

dusk flicker
#

papers not recommended by spigot either ¯\_(ツ)_/¯

wraith rapids
#

basically all command frameworks and libraries register them programmatically

covert bluff
wraith rapids
#

see the protocol

#

iirc paper has an event/method for setting that

#

idk bout splögget

covert bluff
#

hmm

granite stirrup
covert bluff
#

what is it called

#

i have no idea what its called so i have no idea how to google it

granite stirrup
#

oh wait they might not have a way to change it

wraith rapids
#

server ping event on paper iirc

quaint mantle
#

its still erroring at line 30

#

lemme restart the server

covert bluff
#

was able to find ito n google

#

its ProxyPingEvent

wraith rapids
#

that's for bungee

covert bluff
#

it's a thing for spigot too if these threads aren't incorrect

#

huh'

wraith rapids
#

like, that 100% sounds like its somehow related to bungee

covert bluff
#

yea, bungeecord has it

granite stirrup
#

serverListPingEvent but that doesnt have a method to set that text

quaint mantle
#

ah, i had to restart the server

granite stirrup
#

so if u wanted to do it in spigot u have to use nms probs

quaint mantle
#

plugman was being dumb

wraith rapids
#

protocollib or nms

#

probably protocollib

#

i don't think nms lets you listen to packets arbitrarily

granite stirrup
#

has it i think

dusk flicker
#

First of all don't use reload or plugman

#

They are both shit and cause errors a lot

granite stirrup
#

/reload causes memory leaks

wraith rapids
#

it's fine during testing but you need to be aware of it

granite stirrup
wraith rapids
#

that is, if shit looks like it isn't getting reloaded properly, don't bash your head into a wall for 4 hours

#

and you don't even know how to measure memory usage

granite stirrup
wraith rapids
#

the host doesn't know how to measure it either

granite stirrup
#

lol

wraith rapids
#

no, legitimately

#

all hosts I've seen so far show allocation and allocation only

granite stirrup
#

when i used /reload

wraith rapids
#

yes, because it spins a lot of logic and allocates a lot of objects

#

which causes the gc to fire a ton and the jvm to allocate more memory

#

that doesn't mean that more memory is used

granite stirrup
#

no i mean it goes up permanently

wraith rapids
#

yes

#

what you are looking at is allocation

covert bluff
#

/reload works fine for me whwen testing

granite stirrup
#

and it keeps going up

wraith rapids
#

which may or may not rise permanently

covert bluff
#

because my crappy pc takes a lot of time to start up a server

wraith rapids
#

i just use plugman to reload individual plugins

granite stirrup
#

i think to change that thing on spigot u need protocollib

wraith rapids
#

if it's for your own server, just use paper tbh

spare socket
#

Ok, Because It's making me bash my head into a wall, I'm trying to schedule a task to run after X amount of ticks, and every single method I've tried has been Depreciated and thrown errors, Idk what to do here and I'm hoping someone does.

wraith rapids
#

Bukkit.getScheduler().runTaskLater(plugin, () -> { delayed code }, delay);

sage swift
#

you fool!

#

you dont need brackets for a single line!

spare socket
#

() -> { delayed code } Can I replace this with a new MyBukkitRunnable()?

wraith rapids
#

you don't need a bukkit runnable, but yes

spare socket
#

Well I had this

public class BloodMoonEnd extends BukkitRunnable
#

So can I just slap it in?

sage swift
#

ehh

#

ive never understood how those classes are supposed to work

spare socket
#

Join the group

sage swift
#

so dont use it

#

just use the lambda

#

put the code in-between the brackets

spare socket
#

Oh fair

wraith rapids
#

you can either instantiate that class or copy the code into the lambda

spare socket
#

I just copied it, I'll see if that works

wraith rapids
#

the advantage of it being a named class is that it is displayed better in timings; it has an actual name that gets displayed and tells the end user what the task is

#

the advantage of it being a lambda is that it's usually easier to read and doesn't clutter your project with redundant classes

spare socket
#

Fair, I assume the Delay is in ticks like everything else? lol

wraith rapids
#

yes

dense geyser
#

Is HttpURLConnection unable to handle bearer auth tokens? Every request I send with a bearer token comes back as forbidden, I can't see the forbidden message, and when I print the headers, the bearer token doesn't appear

shadow pulsar
#

I still have not found out how to move a location relative to its rotation

wraith rapids
#

swap the components of the vector and flip their signs

quaint mantle
#

o guys

#

so yesterday someone helped me inport event handler

#

but it doesnt do anything..

narrow vessel
#

yes

#

you imported it

#

but are you using it

quaint mantle
#

tried to @ EventHandler did nothing

wraith rapids
#

what do you expect it to do

quaint mantle
#

well allow me to use player.XYZ functions

wraith rapids
#

learn java

quaint mantle
#

i mean

#

i did

#

until i forgot

#

im stupid

#

wait

#

didnt i do all the imports i needed? thats all the tutorial showed

#

~~How do you get an inventories name again?~~Solved, inventoryview weSmart

quaint mantle
#

cause apparently what 3 ppl have told me so far

#

theres a difference between not knowing java and not being able to find a method in an api

#

what the fuck are you even trying to do? lmao

#

well, if you couldnt fucking tell

#

trying to fucking call event handler and use the functions no shit

wraith rapids
#

you clearly have absolutely no fucking clue about what you are doing

#

an event handler does not have functions

#

you do not call an event handler

quaint mantle
#

WELL I DONT

#

tHATs wHys I fycking adsked

#

no shit

wraith rapids
#

@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) { event.method().doStuff(); }

quaint mantle
wraith rapids
#

an event handler is a method

#

it must be annotated with the @EventHandler method

#

it must declare exactly one parameter

#

the parameter type must extend Event

#

the parameter type must also declare a static getHandlers method

quaint mantle
wraith rapids
#

the object declaring the event handler method must be registered with the bukkit event bus with Bukkit.getPluginManager().registerEvents(object, plugin)

quaint mantle
wraith rapids
#

basically, read the docs

#

and learn java

quaint mantle
#

sorry guys

#

@wraith rapids @quaint mantle im sorry, imma go learn java again sorry for being rude

mental moon
#

Hey guys. I'm making a plugin that utilizes PersistantDataStorage and data serialization to capture and release various LivingEntities with their important unique properties.
Everythin has gone well up until trying to add items back into the new Llama's inventory.

llama.setDecor(decor);```
doesn't work,  even if I make a ```new ItemStack(Material.CARPET)```

I don't know if these functions related to a Llama's inventory are bugged or if I'm doing something silly wrong.

I can't get any items including any in the Storage contents, even when accounting for a llama's strength and not exceeding my arrays.

I'm open to PMs if anyone has an idea
mental moon
#

https://pastebin.com/biPCKkJJ

The creation and retrieval of all the items appears to work.

The Llama's data serialization starts at line 264, and is reconstructed starting at line 463.

The code in the two Llama areas is very messy, as I've been trying many things to no avail.

#

What works:
Entitytype
Everything from and below interface "Tameable"
setCarryingChest
setColor
setStrength

Itemstack deserialization (Items are shown in Console on reconstruction, but they never get applied)

quaint mantle
hardy swan
#

Why do people write event handlers without registering listener

shadow pulsar
gaunt hatch
#

Does any know why,

Bukkit.getEntity is not available during async, but
Bukkit.getPlayer is available doing a async?

Seems a bit werid

quaint mantle
#

I need to cancel the EnchantItemEvent so I can change the behavior of the enchanting table, but I also want to keep the random enchant offers. The problem is that because I'm cancelling the event, the enchants are always the same. I tried without cancelling the event but I also want to remove the item from the first slot but I can't because its changing it to an enchanted book. is it even possible to do this?

sage swift
#

look at how IllegalStack does it maybe

sage swift
quaint mantle
subtle kite
#

How do you register a plugin
i know how to do it just I think my intelji is broken?

waxen plinth
#

I imagine that has to interact with the world somehow

#

Which is a big no-no

#

Meanwhile all the players are just stored in a list internally

#

And a map

#

When you call getPlayer it just checks the map for that player

#

No interaction with the world happens

#

And it's interacting with anything that is related to a world that causes issues async, generally

#

Also certain things related to players need to happen asynchronously, like chat

gaunt hatch
#

I think that is list based also

waxen plinth
#

What is?

#

The entities?

gaunt hatch
#

Yea I think it’s stored in world level in a list

#

I have to look later.

waxen plinth
#

Well it's stored in the world

#

Specifically they are stored in the chunks

#

It's possible that it loops over the chunks

#

Though I think there might be a UUID entity map

#

I remember looking into that at one point, don't remember what I found

gaunt hatch
#

Hmm true chunks hmmm

waxen plinth
#

I can check again

gaunt hatch
#

Yea been a while since I looked at that myself.

#

I will have to take a look at the resolve of the method

keen kelp
#

Is there a way to make a command "sandbox"

waxen plinth
#

Ok so it iterates the world and calls getEntity on each world

keen kelp
#

like run a command without any actual effect

waxen plinth
#

Why would you want that?

#

This sounds like an x y problem

keen kelp
#

Well

waxen plinth
#

Ok so each world has a map of entities by their UUID

#

But it's not a concurrent hash map

#

And it's definitely more frequently mutated than the player map

#

I imagine that's why it has issues async

gaunt hatch
#

Hmm, I will have to see if I can grab them from the world without the bukkit get.

waxen plinth
#

What are you trying to do async

gaunt hatch
#

Thx, just thought it was Werid.

#

Get the entity lol

waxen plinth
#

Well duh

#

But why

#

What is your goal

gaunt hatch
#

Npc plug-in to adjust there moment and head spin and player moving

waxen plinth
#

Why would you do that async

gaunt hatch
#

Cause the math

#

And it’s safer

waxen plinth
#

How the fuck is doing it async safer

#

And unless the math is incredibly heavy it's probably pointless to async it

gaunt hatch
#

The way I coded it safer with a sync call back when the main thread is needed

#

I have to disagree

waxen plinth
#

What math are you even doing

#

Show your code

gaunt hatch
#

When trying to do something you can take it of the main thread and not effect the game with the proper call back

waxen plinth
#

If nothing else you could retrieve the entity sync, then do the math async, then apply the changes sync

gaunt hatch
#

Not at my Pc

keen kelp
#

I wanted to run a command multiple times, but if the command doesn't exist or the argument is wrong, only output one unkown command message instead of a lot

waxen plinth
#

Well what kind of math are you doing

gaunt hatch
#

That is why I do already get it with a call back await and then keep going async

waxen plinth
#

Run your own command multiple times?

keen kelp
#

basically I'm trying to make a /loop command but currently it's flooding the user and console

waxen plinth
#

Oh

next zinc
#

Anyone know how I could strike a lightning where the player is looking?
I've tried:

player.getWorld().strikeLightning(player.getEyeLocation());

But it didn't work

keen kelp
#

like /loop 10 summon creeper

waxen plinth
#

Well why are you trying to do that

gaunt hatch
#

Just wondering why the 2 where different in the lock.

keen kelp
#

that would run /summon creeper 10 times

waxen plinth
#

Right but why not just use something like the essentials command that summons a certain number of a mob

#

In what other case will you need to loop a command like that

keen kelp
#

It doesn't have to be this command

waxen plinth
gaunt hatch
#

I can dig more into it and see might find a way to be able to get the entity a different way 🙂

waxen plinth
#

You want rayTrace I think

next zinc
#

OH

#

That makes sense

waxen plinth
#

I feel like whatever math you're doing is probably nowhere near as heavy as you think it is

keen kelp
#

sometimes I need to run my own commands for testing purposes aswell

waxen plinth
#

And if it's really that heavy then you should try to optimize it rather than multithreading it

keen kelp
#

it's not just about /spawn

gaunt hatch
#

There is no need to. Not everything has to be on the main thread.

keen kelp
#

I would like it to not spam the console/user, thats all

gaunt hatch
#

If you do it right, you don’t have to

waxen plinth
#

Okay man

#

Shoot yourself in the foot if you want to

gaunt hatch
#

Trust me it’s no issues been coding for 15 years for living.

waxen plinth
waxen plinth
keen kelp
#

you mean gamerule sendCommandFeedback?

waxen plinth
#

No

#

I mean if the commands have different results or something

gaunt hatch
#

I am not near my PC I am in bed cause I have to work in the morning. And I said what it does

waxen plinth
#

Some of it will have to be lost

#

Though

#

Hmm

keen kelp
#

I see what you mean

waxen plinth
#

There's only one good way to do this

#

And it's nasty

keen kelp
#

I can just add an exception flag right

waxen plinth
#

Isn't that just basic trig

#

Trig is not slow

keen kelp
#

like if I do -c, it would not compact it

#

or smth like that

waxen plinth
#

Well here's what I'm thinking

#

It's really hacky but would likely produce the results you want

#

But how experienced are you with java?

#

This is a solution that isn't going to make sense unless you're experienced

keen kelp
#

And by that youre saying it is possible to run multiple commands while only keeping the result of one?

waxen plinth
#

Better

keen kelp
#

oh?

waxen plinth
#

You can run the command multiple times and compress the results by count

#

So for example if it says You do not have permission to run this command 10 times

keen kelp
#

I see like those client side mods

waxen plinth
#

You can make it say You do not have permission to run this command (x10)

#

Though there's a catch

keen kelp
#

I didn't that's possible

waxen plinth
#

This would only work for non-vanilla commands

keen kelp
#

I didn't know you can see the result of running a command

waxen plinth
#

It's possible, but again, you need to be experienced with java to do this

keen kelp
#

So i have to use something other than dispatch then?

waxen plinth
#

No, you'd use dispatch

keen kelp
#

oh ok

waxen plinth
#

Which is why it wouldn't work for vanilla commands

keen kelp
#

you can dispatch vanilla command wdym?

waxen plinth
#

How experienced are you with java

keen kelp
#

Decently?

waxen plinth
#

Alright

keen kelp
#

I mean all I have it time so XD

waxen plinth
#

Are you familiar with proxies

keen kelp
#

I think I know the premise of it

#

never used it tho :P

waxen plinth
#

Alright

#

We could do something like this

keen kelp
#

sorry off topic

waxen plinth
#
Player player; //Assume this is set
Map<String, Integer> map = new LinkedHashMap<>();
Player proxy = (Player) Proxy.newProxyInstance(player.getClass().getClassLoader(), new Class<?>[] {Player.class}, (proxy, method, args) -> {
  if (method.getName().equals("sendMessage")) {
    String msg = (String) args[0];
    map.compute(msg, (k, v) -> v == null ? 1 : v + 1);
    return null;
  }
  return method.invoke(player, args);
});
for (int i = 0; i < loopNum; i++) {
  Bukkit.dispatchCommand(proxy, "some command here");
}
map.forEach((k, v) -> player.sendMessage(k + ChatColor.GRAY + " (x" + v + ")"));```
#

Haven't tested but I think something like this would work

#

It's very hacky though

#

Essentially, we create a proxy instance of the player

keen kelp
#

did you just...

waxen plinth
#

And if something tries to call sendMessage on it, instead of sending them the message, we add it to a map tallying the count of each message that was sent

keen kelp
#

code in discord?

waxen plinth
#

Then at the end we send all of the messages with their counts

#

Yes

keen kelp
#

holy $hit

#

Is it possible to learn this power XD

waxen plinth
#

¯_(ツ)_/¯

#

I had to check some of my existing code to remember how to do proxies

keen kelp
#

;-;

#

It's every day you would need this

waxen plinth
#

So it's not like I just wrote the entire thing in discord without stopping

#

But try it and let me know if it works

#

I'm curious

#

It should work for non-vanilla commands because they all call sendMessage

#

Vanilla commands are not built on top of the spigot API

#

So they don't call sendMessage and they don't interact with the Player object at all, they do it at a lower level

keen kelp
#

Another day of learning java

waxen plinth
#

The only other way to do this would be to intercept the packets but that would be even messier

keen kelp
#

so from what I can understand rn

#

we are copying the player

waxen plinth
#

Not copying

#

Wrapping

keen kelp
#

yeah ik

#

it's easier to understand

#

it's basically like network proxies

waxen plinth
#

A bit, I guess?

keen kelp
#

send to me instead of directly the target, and I will relay it

waxen plinth
#

It allows you to implement interfaces at runtime

keen kelp
#

no more like reverse proxy for networks

waxen plinth
#

Yeah in this case that's what they're doing

#

But they can be used for other things than proxying method calls

#

You can use it to fully implement something if you want, though I'm not sure why you would

keen kelp
#

so that's kinda what Im thinking when I said "sandbox"

#

so like some wrapper I have control over and can overwrite the results

#

so yeah idk why I didn't think of a proxy

#

Maybe cause my english is bad :P

#

Imma try it out and tell you the result

waxen plinth
#

Alright

keen kelp
#

wait but what if the sender is console :/

waxen plinth
#

You should be able to just replace Player with CommandSender

#

But you'd want to do it like this

keen kelp
#

Imma try

#

It should work

waxen plinth
#
Class<?>[] interfaces = {sender instanceof Player ? Player.class : CommandSender.class};```
#

Then toss that in place of just {Player.class}

keen kelp
#

why do we need to know if it's a player tho

waxen plinth
#

Well

keen kelp
#

Player is also CommandSender righgt

waxen plinth
#

Consider that some commands require the sender to be a player

#

If you only ever make it a CommandSender

#

Those commands will never work even as a player

#

Because instanceof Player will return false

keen kelp
#

wait what

waxen plinth
#

On the proxy instance

keen kelp
#

oh cause the proxy is commandsender?

waxen plinth
#

Yeah

keen kelp
#

proxy instanceof Player will be false

waxen plinth
#

Mhm

keen kelp
#

so all executors will thing it's not a player

#

ok makes sense

#

so it's like this?

CommandSender proxy = (CommandSender) Proxy.newProxyInstance(sender.getClass().getClassLoader(), new Class<?>[] {sender instanceof Player ? Player.class : CommandSender.class}, (proxy, method, args) -> {```
waxen plinth
#

Yep, that should work

keen kelp
#

bruh

waxen plinth
#

?

keen kelp
#

proxy and args is alr defined XD

waxen plinth
#

Oh right lol

#

Just rename the lambda parameters

#

proxyObj, method, cargs

#

And make sure to replace them within the lambda

keen kelp
#

what does the c in cargs mean

waxen plinth
#

I dunno

#

It doesn't really matter

keen kelp
#

imma call it arguments

#

cause I hate being underlined

waxen plinth
#

k

keen kelp
#

if this the sh*t Im doing for the first change today, today's gonna be craazy

waxen plinth
#

Is it working?

keen kelp
#

1m

#

it's throwing errors when running vanilla commands

#

and nonexistent commands

#

:/

#

at least running custom commands work

#

org.bukkit.command.CommandException: Unhandled exception executing command 'loop' in plugin CommandLoop

#

that's when the command doesn't exisit

waxen plinth
#

Well can you show the full stack trace?

keen kelp
#

?paste

undone axleBOT
keen kelp
waxen plinth
#

Ahhh

#

Change if (method.getName().equals("sendMessage")) to if (method.getName().equals("sendMessage") && args[0] instanceof String)

keen kelp
#

how long have you been making plugins? I can't get anything from the stack and I think Im ok at it

waxen plinth
#

Long time

#

Been doing java ~7 years and writing plugins for 4 or 5 of those years

keen kelp
#

bruh

waxen plinth
#

What's happening here is that it was intercepting all sendMessage calls

#

But there's a variant that doesn't take a string

#

And it was intercepting those too

keen kelp
#

oh

waxen plinth
#

That will be an issue for some commands, surely

#

Because calling sendMessage(BaseComponent) will break some things, undoubtedly

keen kelp
#

it still seem to be doing that :/

waxen plinth
#

So this will cause it to still spam if the command uses base components as feedback

#

Easiest fix is to convert the strings to base components

keen kelp
#

same thing

#

did && instanceof String

#

build, deploy, reload

waxen plinth
#

Show full code?

keen kelp
#

full?

waxen plinth
#

The method at least

keen kelp
#

?paste

undone axleBOT
keen kelp
#

why is this detected as coffeescript bruh

waxen plinth
#

Where is line 51?

keen kelp
#

l15

#

I have some other code above the method

waxen plinth
#

Change it from args[0] to arguments[0]

keen kelp
#

wait

waxen plinth
#

You're checking args which is the command arguments

#

You want to be checking the method arguments

keen kelp
#

oh right

#

bruhh

#

it was args in the if statement :/

waxen plinth
#

Yeah

keen kelp
#

also do you use Intellij

waxen plinth
#

Yep

#
        StringBuilder loopCommand = new StringBuilder();
        for(int i=1;i<args.length;++i)
        {
            loopCommand.append(args[i]).append(" ");
        }```
keen kelp
#

Is there a way to trigger deployment at the end of a run task?

#

I know there's prob a better way that like trims it but I just dont know how to work with Strings

waxen plinth
#
String loopCommand = String.join(" ", Arrays.copyOfRange(args, 1, args.length - 1));```
#

Would you be interested in trying my command manager?

#

It'd make this much easier

#

You could do something like

keen kelp
#

is it open source?

waxen plinth
#
@CommandHook("loop")
public void loopCommand(CommandSender sender, int times, String command)```
#

Yeah

keen kelp
#

Does it require the project using it to be open source?

waxen plinth
#

No

#

It's MIT license

keen kelp
#

nice

waxen plinth
#

It's fully-documented and has a wiki

keen kelp
#

cause I wanted this project to be private

waxen plinth
#

I've used it for loads of private projects

keen kelp
#

can I check it out

waxen plinth
#

Sure

keen kelp
#

github pog?

#

ayy

waxen plinth
#

Go to the wiki/Command Manager for info on that

#

But it has a lot more than just the command manager

keen kelp
#

currently I have some really jank extending code for my commands :P

waxen plinth
#

Command manager is the most useful part though

#

Yeah commands are annoying as hell without a framework

#

But my command manager would make your command look like this:

#

Command file with metadata

keen kelp
#
public class CustomCommand implements CommandExecutor {

    String[] command;
    public CustomCommand(String[] CommandString)
    {
        this.command = CommandString;
    }
    public CustomCommand(String CommandString)
    {
        this.command = new String[]{CommandString};
    }
    @Override
    public boolean onCommand(@NotNull CommandSender sender, @NotNull org.bukkit.command.Command command, @NotNull String label, @NotNull String[] args) {
        if(CheckArgs(args,sender))
        {
            return run(sender,command,label,args);
        }else
            return false;
    }

    protected boolean CheckArgs(String[] arg, CommandSender commandSender)
    {
        return true;
    }

    protected boolean run(@NotNull CommandSender sender, @NotNull org.bukkit.command.Command command, @NotNull String label, @NotNull String[] args){return true;}

    public String[] getCommand() {
        return command;
    }
}
#

I jsut did this

#

wait

#

yeah

waxen plinth
#
loop int:times string...:command {
  help Loops a command
  permission loop.use
  hook loop
}
#

Then the method

keen kelp
#

wow

waxen plinth
#
@CommandHook("loop")
public void loopCommand(CommandSender sender, int times, String command) {
  // Do stuff
}```
keen kelp
#

frameworks man

waxen plinth
#

It handles argument types checks and conversions for you

#

And you can add your own types and such

keen kelp
#

wow

waxen plinth
#
  • tab completion
keen kelp
#

I fu*ing needed this

#

yeah I was thinking how hellish it would be to make tab completion

waxen plinth
#

It can also check and provide context (i.e. make sure they are holding an item, if they are pass it to the command hook)

#

And it supports unix-style flags

keen kelp
#

shading time

waxen plinth
#

Not shaded

keen kelp
#

can I not shade it?

waxen plinth
#

No

#

You install it on the server

keen kelp
#

oof

waxen plinth
#

Messages for RedLib are globally configurable and it has standalone features for developers though

#

Everyone always complains about it not being a shaded library 🙃

keen kelp
#

Why can I not shade it ;-;

waxen plinth
#

Because there are both advantages and disadvantages to shading

#

Shading inflates jar sizes

#

RedLib is a rather large library

keen kelp
#

yeah?

waxen plinth
#

Shading makes it hard to update for all your plugins that rely on a dependency

#

You have to recompile them all after modifying the build file

#

Having it be external also means you can configure the messages globally very easily

#

It auto-generates help menus, and you can tweak the colors and messages and such for those, among other things

keen kelp
#

but by default it does nothing right

waxen plinth
#

What does nothing?

#

The plugin?

keen kelp
#

if I drop it in my plugins

#

except like its /help and its command and stuff

waxen plinth
#

It won't do anything unless you enable dev mode, and enabling dev mode just adds a few handy commands and tools

keen kelp
#

yeah I hated those plugins(like ess) who just replaces everything

waxen plinth
#

It doesn't do anything at all except register a few events

keen kelp
#

and I have to manually disable them

waxen plinth
#

Same, I keep it very lightweight

keen kelp
#

instead of enabling only things I need

waxen plinth
#

Mhm

keen kelp
#

youre very pog

waxen plinth
#

Dev mode enables a selection tool for the multi block structure library to easily export them

#

And it adds an in-game profiler and browser for the profiler

keen kelp
#

I see

#

do debugging sutff

waxen plinth
#

A command called cchain that lets you run multiple commands in a row, like /cchain say hi; say hi will say hi twice

#

That's all though

#

So even with dev mode enabled it's not intrusive at all

keen kelp
#

I love non-intrusive plugins

waxen plinth
#

Lemme know if you wanna try it out, I'm always willing to answer questions about it and it has a slew of very useful APIs in it

#

Command manager is only a small part of what it has to offer

keen kelp
#

I can tell

#

shadow doesn't shade implementation right

waxen plinth
#

I don't think so?

#

I rarely use it

keen kelp
#

I dont know how to exclude things from being shaded

waxen plinth
#

Pretty sure implementation isn't shaded

#

I could be wrong

keen kelp
#

I have 0 idea on how do use gradle

#

except ctrl c ctrl v

waxen plinth
#

lol

#

The readme does say implementation

#

So I'm guessing that's what you want

#

I just copied that from jitpack though

#

So it could very well be wrong

keen kelp
#

I see how it is

#

also do you know how to, if possible at all, trigger a deployment at the end of a run config?

waxen plinth
#

Yeah I added a deploy task to my buildscript

#

I type gradle clean deploy and it builds the jar and drops it in my plugins folder

keen kelp
#

oh Im using sftp :/

waxen plinth
#

You could do it with sftp too

#

You'd just need to use scp

#

With an RSA key so it can skip password auth

keen kelp
#

sounds complicated as heck

waxen plinth
#

¯_(ツ)_/¯

#

I think you can pretty easily run bash commands from gradle

keen kelp
#

you spend a lot of time sharpening those tools ey

#

auto deploy to all versions for test.. damn

waxen plinth
#

You'd just need to have it run scp build/libs/*.jar name@ip:~/server/plugins or something

keen kelp
#

I never even thought of multi version

waxen plinth
#

Yeah it's compatible with every version from 1.8 to 1.16

#

Should work on 1.17 but I haven't had time to really test it

#

I don't see any reason it wouldn't work though

#

Some of its features do not work with 1.8 though because 1.8 is a piece of shit 👀

keen kelp
#

I heard a lot has changed

waxen plinth
#

Internally in nms yes

#

But spigot has a history of doing everything possible to not break backwards compatibility

#

And I doubt that has changed

#

RedLib doesn't touch anything nms

#

Its abstractions are built on top of the spigot API, not nms

keen kelp
#

nice

west linden
#

any one know why i cannot get a unreported exception java.io.IOException; when i try to load a config

waxen plinth
#

Because it can throw an IOException

keen kelp
#

if file doesn't exisit im guessing

waxen plinth
#

Well it's because it uses io

keen kelp
#

and you dont have code to handle it

waxen plinth
#

And everything io throws IOException 🙃

#

I hate checked exceptions

#

So you need to either catch that exception or put a throws declaration

#

Alright, it's late and I have work tomorrow so I'm going to bed

#

@keen kelp Feel free to ping or DM me if you have any questions about my library, I'm always happy to answer

west linden
#

the file it ther

waxen plinth
#

Put a try/catch around it

west linden
#

seemed to fix it according to the compiler

#

What the variable should be. like getConfig().getString(path);

valid totem
#

whats the packet for when creepers expand before exploding

quaint mantle
#

nms is going to give me a brain aneurysm, i swear

subtle kite
#

can someone do some very instruction clear on how to work and set up a config

#

I legit can't find anything useful

quaint mantle
subtle kite
#

yeah like I said that was useless for me

maiden thicket
#

how so

subtle kite
#

it doesn't really show how to format it, and also it was to much information that wasn't needed tbh.

maiden thicket
#

wdym format it

#

its auto formatted

eternal oxide
#

Manually writing the file is quite simple. Stick to YAML formatting standards. ALL spaces, no tabs

#

?learnjava first

undone axleBOT
quaint mantle
#

I don't know what it is but I can't cancel/modify any Async events (chat, login)

    @EventHandler
    public void onJoin(AsyncPlayerPreLoginEvent e){
        Bukkit.broadcastMessage("Get the fuck outta here;");
        e.setLoginResult(AsyncPlayerPreLoginEvent.Result.KICK_BANNED);
        e.disallow(AsyncPlayerPreLoginEvent.Result.KICK_BANNED, "test");
        Bukkit.broadcastMessage("The player is still there...");
    }```
Like this kind of shit just lets the player login no problem
#

Hello, how can I cast IChatBaseComponent to String?

quaint mantle
#

both of them, yes

eternal oxide
#

You are using a deprecated method by the looks

tame coral
#

You probably need to set a
setKickMessage​(String message)

stoic glade
tame coral
eternal oxide
tame coral
#

Still

stoic glade
tame coral
#

The method isn't deprecated

eternal oxide
#
disallow​(PlayerPreLoginEvent.Result result, String message)
Deprecated.
This method uses a deprecated enum from PlayerPreLoginEvent
tame coral
#

They're using the first one

eternal oxide
#

ah sorry

eternal oxide
#

I missed the constructor diffrence

#

In which case, I see no reason for that to not work

tame coral
#

void
setKickMessage​(String message)
Sets the kick message to display if getResult() != Result.ALLOWED

#

It might be necessary

eternal oxide
#

unless you are doing something else in the code that you haven't show us

smoky finch
#

Is it possible to set a NBT data on an item without Bukkit modifying the key? They use NamespacedKeys that just completely changes the NBT entries.

wraith rapids
#

not through the api

#

that the server uses NBT to store data is an implementation detail; it's not part of the API

smoky finch
#

The only way I found is to use reflection on the NamespacedKey class, I guess that's better than using reflection on the entire nms nbt system

wild sinew
#

I cant import net.minecraft.world.item.Item

#

but used api

obtuse basin
#

Is there an alternative to java file to copy folders that won't will slowdown whole server when copying large folders?

wraith rapids
#

do it off the main thread

obtuse basin
#

nvmm ye im dumb, I now see what u mean

solemn shoal
#

how can i add a recipe?

wraith rapids
#

bukkit.registerrecipe or something

solemn shoal
#

current code:

#
ShapedRecipe rcp = new ShapedRecipe(
                    new NamespacedKey(this, randomString()),
                    getRandomIS()
            ).shape("abc", "def", "ghi")
                    .setIngredient('a', getRandomIS())
                    .setIngredient('b', getRandomIS())
                    .setIngredient('c', getRandomIS())
                    .setIngredient('d', getRandomIS())
                    .setIngredient('e', getRandomIS())
                    .setIngredient('f', getRandomIS())
                    .setIngredient('g', getRandomIS())
                    .setIngredient('h', getRandomIS())
                    .setIngredient('i', getRandomIS());
            this.getServer().addRecipe(rcp);```
#

throws:

java.lang.NullPointerException: Cannot invoke "[Ljava.lang.String;.clone()" because "this.rows" is null```
tame coral
#

On which line ?

solemn shoal
#

ShapedRecipe.java:194

wraith rapids
#

and which line is that

solemn shoal
#

wait

tame coral
#

No it should point at a line in your code

solemn shoal
#

its not showing a line in my code lol

wraith rapids
#

the exception is happening inside bukkit

#

but it will still show what in your code invoked it

solemn shoal
#

yeah

wraith rapids
#

what is that line

solemn shoal
#

its showing my for loop

tame coral
#

Send it

wraith rapids
#

there is no for loop in the code you sent

solemn shoal
#

one second im putting it on a paste servcie lol

tame coral
#

ok

solemn shoal
#

yes i know plugman etc but still

tame coral
#

You

#

You're adding 5000 random recipes ?

solemn shoal
#

yes

#

the entire reason should be clear from the plugin name

wraith rapids
#

the warning points at the for loop

#

not the exception

tame coral
#

Can you send the whole error please ?

wraith rapids
#

the exception itself is caused by addrecipe

tame coral
#

Like the full stack trace

solemn shoal
#

that IS the full stack trace

solemn shoal
#

its in the paste

#

line 60 onwards

wraith rapids
#

i'm not sure why but the internal shape string array seems to be null

tame coral
#

oh yeah my bad

#

didn't scroll lmao

solemn shoal
tame coral
#

it says you're using a depreacted method

#

Oh that's only the warning

wraith rapids
#

yeah i see you're defining the shape

#

that's why I don't know why it's null

#

try maybe not chaining the methods?

solemn shoal
#

brr

#

apparnetly the way im doing random strings bad

tame coral
#
ShapedRecipe rcp = new ShapedRecipe(
                    new NamespacedKey(this, randomString()),
                    getRandomIS()
            ).shape("abc", "def", "ghi");
                    rcp.setIngredient('a', getRandomIS());
                    rcp.setIngredient('b', getRandomIS());
                    rcp.setIngredient('c', getRandomIS());
                    rcp.setIngredient('d', getRandomIS());
                    rcp.setIngredient('e', getRandomIS());
                    rcp.setIngredient('f', getRandomIS());
                    rcp.setIngredient('g', getRandomIS());
                    rcp.setIngredient('h', getRandomIS());
                    rcp.setIngredient('i', getRandomIS());
            this.getServer().addRecipe(rcp);
solemn shoal
#

.�{�n�<ִ��$����v2����"f�y�xception: Invalid key. Must be [a-z0-9/._-]: i�v

#

lol

solemn shoal
#

time to fix that

tame coral
#

Yeah

#
int leftLimit = 48; // numeral '0'
    int rightLimit = 122; // letter 'z'
    int targetStringLength = 10;
    Random random = new Random();

    String generatedString = random.ints(leftLimit, rightLimit + 1)
      .filter(i -> (i <= 57 || i >= 65) && (i <= 90 || i >= 97))
      .limit(targetStringLength)
      .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
      .toString();
solemn shoal
#

oh

tame coral
#

Found this online

solemn shoal
#

i was just gonna define a char array lol

tame coral
#

faster this way i guess

#
    int length = 10;
    boolean useLetters = true;
    boolean useNumbers = true;
    String generatedString = RandomStringUtils.random(length, useLetters, useNumbers);

    System.out.println(generatedString);
#

even easier way

#

String generatedString = RandomStringUtils.randomAlphanumeric(10);

solemn shoal
#
public String randomString() {
        char[] chars = "abcdefghijklmnopqrstuvwxyz".toCharArray();
        String str = "";
        for(int i = 0; i < 32; i++){
            str += chars[rnd.nextInt(chars.length)];
        }
        return str;
    }```
tame coral
#

One liner

solemn shoal
#

java.lang.IllegalArgumentException: Recipe must have non-AIR result.

#

mmmyes

sage swift
#

return "4";

tame coral
#

That's bound to happen since you create 5K recipes

solemn shoal
#

yeah

#

fixed

tame coral
#

Nice

solemn shoal
#

lol

#

memory doesnt like it

#

lets see what it looks like ingame

tame coral
#

That's what you're looking for isn't it ?

solemn shoal
#

yep

tame coral
#

Ahah

solemn shoal
#

that spike tho

#

time to put it in a runnable LOL

tame coral
#

Oh no

#

Why would you create such a plugin lmao ?

solemn shoal
#

time to see ingame

#

oh

tame coral
#

lmaoooo

solemn shoal
#

uhhh

tame coral
#

It can't load anything else ?

solemn shoal
#

😂

tame coral
#

Isn't your computer like dying rn ?

solemn shoal
#

looks like my AV is spamming errors

#

nah its fine

tame coral
#

The memory tho

#

You gave 14Go to the server i guess

solemn shoal
#

aight it lives

solemn shoal
tame coral
#

Oh

#

That's why

solemn shoal
#

first is client, second is server

tame coral
#

Hmmm

solemn shoal
#

lmao

tame coral
#

hmmmm

solemn shoal
tame coral
#

wait what

#

how

solemn shoal
#

you can use air as an ingredenti

tame coral
#

Oh you just can't craft it

solemn shoal
#

@tame coral this is one of my other plugins during shutdown

tame coral
#

oof

solemn shoal
#

lets try 50k recipes

#

nope

#

i did it @tame coral

tame coral
#

Noice

solemn shoal
tame coral
#

But why though

#

Why would you create such a plug-in

solemn shoal
#

nice benchmark ngl

solemn shoal
wraith rapids
#

not really a viable benchmark for testing memory related flags

solemn shoal
#

just need to dial it back

wraith rapids
#

all of the memory impact is from you stuffing old gen to the brim

#

actual memory usage patterns that happen on a real server mostly involve young gen spam

solemn shoal
#

i should probably mod the server to display the different gens

keen kelp
#

?paste

undone axleBOT
keen kelp
eternal oxide
#

From the information you have provided there is no reason this does not work. Provide more information

eternal oxide
keen kelp
#

yeah but idk what it wants me to do

eternal oxide
#

well, whats on line 62?

keen kelp
#

new CommandParser(this.getResource("command.rdcml")).parse().register("prefix", this);

#

well actually

eternal oxide
#

clearly you havn;t setup redlib correctly

keen kelp
#

for debug reasons a removed a part of it

#

new CommandParser(this.getResource("command.rdcml"))

#

there's no setup guide

#

I dont see where a guide to set it up

eternal oxide
#

You probably have to call some init method

keen kelp
#

there's no "getting started" section

eternal oxide
#

No clue, never used it

wraith rapids
#

getting started:
#1 delete

#

.txts are gay

keen kelp
#

me?

#

delete what

eternal oxide
#

every plugin gets to see every event

hybrid spoke
#

you can give the eventhandler a priority if you mean that

solemn shoal
#

how can i get all registered recipes on a server?

wraith rapids
#

read the docs

solemn shoal
#

?jd

solemn shoal
#

i cant find a way to get them by key tho

keen kelp
#

When I type ChatColor, it always tells me to choose between Chat API and Spigot, is there a way to prevent this? From my understanding they're the same thing.

solemn shoal
#

they arent

keen kelp
#

then which do I use

solemn shoal
#

i'd say chat api

wraith rapids
#

uh

#

exclude bungee in your dependency manager

quasi flint
#

i think i use chat api

keen kelp
#

oh right

wraith rapids
#

what you should use depends on where you're using it

#

if it's just appended to a string, it doesn't matter