#help-development

1 messages Β· Page 2193 of 1

odd adder
#

inside onEnable i set a schedule to call getNBTFromEntity every 2 ticks

odd adder
#

hmm, i want get NBT by NMS function

#

getNBTFromEntity(Entity target)
if it is player , it can not work
but if is is not player (cow , sheep ,etc) it can work

sterile token
#

Lmao is so strange, MongoDB by default doesnt save documents with objects. But i setted a class as codec and now i can save class object directly into the collections

quaint mantle
#

Is it recommended to use a db or json/yml for massive player storage?

humble tulip
#

db

quaint mantle
#

any specifics? mongodb, sqlite etc

humble tulip
#

it depends on what you're storing

quaint mantle
#

say economy and magic stats

humble tulip
#

sql

#

u can use sqlite or mysql

quaint mantle
#

whats a good use case for mongoDB then?

dusk flicker
#

so sql is very structured

#

Mongo not so much

#

In reality, everything has a use case. For most of this its up to preference on what you use

quaint mantle
#

so, in your opinion, which is easier for a beginner in DB's?

humble tulip
#

most ppl using spigot start with sql

quaint mantle
#

then ill look into that, ty for the help :D

somber hull
somber hull
#

Could be wrong

odd adder
#

ok

quasi patrol
#
                    if (!plugin.getConfig().getStringList(event.getMessageId() + "-likes").contains(event.getInteraction().getUser().getId().toString())) {
                        likes += 1;
                        plugin.getConfig().set(event.getMessageId() + "-likes", plugin.getConfig().getStringList(event.getMessageId() + "-likes").add(event.getInteraction().getUser().getId().toString()));
                        if(plugin.getConfig().getStringList(event.getMessageId() + "-dislikes").contains(event.getInteraction().getUser().getId().toString())) {
                            dislikes -= 1;
                            List<String> likelist = plugin.getConfig().getStringList(event.getMessageId() + "-dislikes");
                            likelist.remove(event.getInteraction().getUser().getId().toString());
                            plugin.getConfig().set(event.getMessageId() + "-dislikes", likelist);
                        }
                        plugin.saveConfig();
                    }``` For some reason, it is saving as ``true`` and not a list of Ids.
somber hull
#

My eyes!!!

#

Make a config object lol

#

So you don’t have to constantly do plug-in.getConfig

#

Anyway lemme look into the other thing you said

tall dragon
#

does anyone here know how to best serialize/deserialize BlockStates?

somber hull
tender shard
tall dragon
#

well bassically creating a very basic version of a schematic

#

without all the tileentity stuff/entity stuff

#

just blocks & block states

odd adder
#

is getPersistentDataContainer also do get nbt from entity?

tall dragon
#

split the string by some character, parse world, xyz

odd adder
#

slice "[" and "]" off , and split(",") , get [0~2] and put it to a list or vector or array.

tender shard
tall dragon
tender shard
#

but serializing BlockStates themselves? No, not possible, but also not helpful because there's no thing like block.setState anyway

tall dragon
#

they preserve blockstates in schematics

tender shard
#

look at their source πŸ˜›

tall dragon
#

isnt there BlockState#getAsString?

tender shard
#

no

#

that's for BlockData

tall dragon
#

ya but doesnt the data contain the state?

tender shard
#

no

#

well

#

depends

tall dragon
#

let me clarify i just need a way for, for example stairs to keep their direction

#

am i gonna need to write a custom serializer/derserializer for each thing?

tender shard
#

for example, BLockData can tell you

  1. is a block waterlogged
  2. how many candles does this block contain if it's a block of candles
  3. etc...
    but it doesn't include the block's inventory (if there's any)
tall dragon
#

i dont want inventories

tender shard
#

then just get the blockdata

#

you can get that as string and later set it back

tall dragon
#

so how do i best do that using blockdata

#

using the method i described?

tender shard
#

BlockData implements ConfigurationSerializable

#

you can use the serialize() method to turn it into a Map<String,Object> or you can get it as string using getAsString()

somber hull
tall dragon
#

i dont suppose this is possible using IBlockData.

tender shard
tall dragon
#

?paste

undone axleBOT
somber hull
#

A

tender shard
#

EVERYTHING that's PDC is stored inside an NBT tag called "PublicBukkitValues"

somber hull
#

Really?

#

I didn’t know that

tender shard
#

yes

#

you can check it yourself by doing /data get entity <youringamename>

quasi patrol
tall dragon
#

for example i am using this to set blocks really quickly. it would be amazing if i could imcorporate it into this https://paste.md-5.net/inunotuzeg.java
but i have no idea how to do that since it uses nms. and im not that amazing at nms

eternal night
#

Welll, PublicBukkitValues iirc is only for those PDC values that are visible to the client

#

e.g. item meta

#

as that is sent to the player

tender shard
eternal night
#

basically all others are never shared with the client

tender shard
#

oh yeah wait

#

I think on ItemMeta it's always "PublicBukkitValues" and on entities etc it's simply "BukkitValues"

eternal night
#

Ye

#

Same should be the case for chunks and block entities

quasi patrol
patent horizon
#

is there a way i can return two objects from a method and then store those into two vars thru unpacking?

#

like: var catch, rarity = generateCatch();

#

first var gets an ItemStack, second gets an enum value

tall dragon
#

uhh i think thats not possible

#

you could just make an object holding them both though

ivory sleet
#

@patent horizon there will be deconstruction in the future

#

as of now, sadly not

patent horizon
#

awh

#

would deconstruction work like: return ItemStack, FishRarity; or would you need to add both values to an empty class instance and pass the instance?

ivory sleet
#

oh

#

uh well

#

idk exactly

knotty gale
#

?variables

#

?var

#

?variable

dusk flicker
#

not a command

#

what are you looking for?

knotty gale
#

wat is it

knotty gale
dusk flicker
#

what about them?

knotty gale
#

like how to use them

#

well

dusk flicker
#

?learnjava

undone axleBOT
knotty gale
#

I mostly just want to learn how to use static variables

#

like put them from one class to another

dusk flicker
#

then find a java course that covers static

knotty gale
#

ok

dusk flicker
#

a very indepth topic

knotty gale
#

@dusk flicker im not wrong by when I call a static global variable, I do '(class).(variable)'

tall dragon
#

yea. because the event is long processed by then

dusk flicker
tall dragon
#

i think you're gonna need to clear the drops in the event.

#

then drop the items yourself

#

so you can keep track of those

#

to remove them after 600 ticks

knotty gale
somber hull
#

Yea Item is the dropped item entity if I’m not wrong. Whilst itemstack is an item that exists in an inventory

#

If I’m not wrong

humble tulip
#

getLocationFromString

knotty gale
#

does anyone know how to set a variable to a player, like if I had a plugin that makes one person have a spectral arrow, the variable would be set to who has that arrow

#

I know how to use the variable just not sure what type that is

dusk flicker
#

Player?...

knotty gale
#

so like

#

variable HasArrow

#

and I wanted to set the variable value to the player who has it

#

how would I do it

dusk flicker
#

?learnjava if you are asking questions like that, you really need to take the time and learn a lot more about Java. These are basically entry level questions

undone axleBOT
knotty gale
#

ok πŸ’€

#

I had an idea just wanted to know if there was a better way

dusk flicker
#

You would set it to either a player object or a UUID, in most cases a UUID would be better. I'm directing you to overall Java help rather than just help for the Spigot API based on previous messages

knotty gale
#

I was just using like setting the players name to the variable

#

and then if I wanted to check I would just check if the variable equaled a certain players name

tender shard
#

yo everyone I'm back bitcheeeees

eternal night
#

πŸ‘€

tender shard
odd adder
#

i tried use CraftPlayer , but same , can not get nbt from player

entity = (CraftPlayer) target;
            CompoundTag nbt = new CompoundTag();
            entity.getHandle().save(nbt); //this return false
            System.out.println(nbt);//same as line 2 , empty CompoundTag
humble tulip
#

Wtf are u doing

odd adder
#

get nbt from entitiy

tender shard
#

yeah makes no sense

#

you create an empty NBT CompoundTag

#

obviously it's empty

humble tulip
#

πŸ˜‚πŸ˜‚

odd adder
#

entity.getHandle().save(nbt);

#

after this

tender shard
#

what did you expect to happpen?!

humble tulip
#

Yeah ur saving an empty nbt tag

#

And then ur complaining the nbt is empty

tender shard
#

also

#

?xy

undone axleBOT
odd adder
#

the function entity.getHandler().save(nbt)
it should save nbt to nbt in arg

humble tulip
#

What do u want to do

odd adder
#

just get nbt from entity

tender shard
#

why?

odd adder
#

test

#

for test

tender shard
#

what do you need it for

odd adder
#

i just write it for test

tender shard
#

in 99.9% of case you don't need NBT

humble tulip
#

To test what

knotty gale
#

Anything wrong with this?

@EventHandler
    public void EntityPickupItem(EntityPickupItemEvent e) {
        if(Main.BasketballMode == true && Main.HasBall == e.getEntity()) {
        if(e.getEntity() instanceof Player) {
        if (e.getItem().getItemStack().getType() == Material.SPECTRAL_ARROW) {
          Bukkit.broadcastMessage(ChatColor.WHITE + "<" + ChatColor.AQUA + "BlockyRef" + ChatColor.WHITE + "> " + ChatColor.RED + e.getEntity().getName() + " picked up the ball");
          e.getEntity().addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, 20000, 0));
        }
    }
    }
    }
#

it just wont work

undone axleBOT
undone axleBOT
#

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

knotty gale
humble tulip
#

Whatever u wanna get from the nbt u can most likely do player.getWhatever

#

Did u register the listener

quaint mantle
#

how can i use .setContents and have the contents each set in a random slot?

knotty gale
tender shard
odd adder
#

i just want to write a function to get nbt from all entity , item ......

humble tulip
#

For what purpose

tender shard
tender shard
#

and you never explained why

odd adder
#

like change entity's name , inventory ...

tender shard
# knotty gale huh?

You should block that person. They keep asking questions without explaining "why" they need what they ask for

humble tulip
#

What is Main.HasBall

knotty gale
tender shard
knotty gale
#

I call it ball for reasons

humble tulip
#

Well the person who has the ball won't be picking up the ball?

#

So that could never run

quaint mantle
#

how can i use .setContents and have the contents each set in a random slot?

knotty gale
humble tulip
#

Broadcast the message outside tje ifs

#

At the top

#

And see if it broadcasts

knotty gale
#

ok

tender shard
knotty gale
#

ok

tender shard
#

if that still doesn't show up in chat, you didn'T properly register the listener

knotty gale
#

ok

#

wait I have a diff idea

quaint mantle
# tender shard whut?

so if i want to add like 3 diff items to the chest, i want each of the items to go into a random slot

tender shard
humble tulip
tender shard
#

e.g. ThreadLocalRandom.getCurrent().nextInt()

humble tulip
#

Esp if the chest is almost full

tender shard
humble tulip
#

Get a list of all empty slots and get a random number from the list

#

When u add an item to a slot, remove that slot from the list

#

And repeat

tender shard
#

yeah

#

sth like that

humble tulip
#

Spent my entire day writing one method to load data from a file

#

Not even done yet

tender shard
#

no woman no cry

knotty gale
#

would this be the correct way of setting up a listener?

getServer().getPluginManager().registerEvents(new PickedUp(), this);
humble tulip
#

Yes

knotty gale
#

Because I am very sure it is

#

ok

humble tulip
#

Does it broadcast the message?

#

Well did you put it at the top of the method?

knotty gale
#

I have been trying to recover the fucking message because I deleted the shit

#

Istg

#

alright lemme try now

knotty gale
humble tulip
#

something's not being done properly

river oracle
#

do you have an annotation above your event

humble tulip
#

can you send your onEnable and your listener class?

knotty gale
#

ok

humble tulip
knotty gale
#
@Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(new Caught(), this);
        getServer().getPluginManager().registerEvents(new Pass(), this);
        getServer().getPluginManager().registerEvents(new PickedUp(), this);
        getServer().getPluginManager().registerEvents(new Start(), this);
    }
humble tulip
#

onEnable && listener class

#

ok

#

nice

odd adder
# tender shard API exists for this stuff

sometimes , get the nbt of entities help me to get the data from entities more convenient
if i want throw the whole entity data to a file , or throw it to a web server display ......
call every function to get all data seems not a convinient way

humble tulip
#

now listener class

knotty gale
#
@EventHandler
    public void EntityPickupItem(EntityPickupItemEvent e) {
        Bukkit.broadcastMessage(ChatColor.WHITE + "<" + ChatColor.AQUA + "BlockyRef" + ChatColor.WHITE + "> " + ChatColor.RED + e.getEntity().getName() + " picked up the ball");
        Projectile projectile = (Projectile)e.getItem();
        if(Main.BasketballMode == true) {
        if(e.getEntity() instanceof Player) {
        if (e.getItem().getItemStack().getType() == Material.SPECTRAL_ARROW) {
            if (projectile.getShooter() == Main.HasBall) {
          e.getEntity().addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, 20000, 0));
          Main.HasBall = e.getEntity();
        }
    }
    }
    }
    }
tranquil viper
knotty gale
#

"ur doing shit wrong"

#

I already know thats what I am about to hear

tranquil viper
#

So if you're tracking it ouside, maybe set that event's priority to higher than this event

humble tulip
#

listen to PlayerPickupItemEvent

#

not EnitityPickup

knotty gale
#

ok

tranquil viper
#

And I would never say "ur doing shit wrong" - clearly you are but everyone will always do things wrong. Even people that have been using the library for years will do stuff wrong

knotty gale
tender shard
knotty gale
#

well I use it for other things and it works, but it is simply bad habits for the uppercase stuff

tranquil viper
#

Static variables in general are bad habits

humble tulip
#

Honestly, I can't tell why your code doesnt work

tender shard
river oracle
#

:/

tender shard
#

static is totally fine to use, when one knows what "static" means

river oracle
#

static vars can be fine if used correctly

tranquil viper
knotty gale
#

well I am obviously using them incorrectly rn

#

πŸ’€

humble tulip
#

i make everything public static. that way i dont need to create stupid instances to get stuff

subtle folio
#

smart

knotty gale
#

I just learned how to use static stuff 15 minutes ago btw

tranquil viper
#

Everything is useful if used properly, but most of the time people use it improperly... ESPECIALLY beginners

#

I did the same thing

subtle folio
humble tulip
#

oh shit i forgot there's a beginner here

tender shard
humble tulip
knotty gale
subtle folio
tender shard
#

JavaPlugin classes are a singleton by design so there's nothing wrong in making everything static in this class

knotty gale
#

I just looked at 2 tutorials and then said "fuck it" ima go do my own stuff

#

and now im here

tranquil viper
#

@knotty gale if you want to upload your code to github or post your full classes to hastebin.de it will help us a lot

#

?hastebin

#

someone run the command

subtle folio
#

?paste

undone axleBOT
knotty gale
#

?pastebin

tender shard
#

?paste

undone axleBOT
knotty gale
#

...

tranquil viper
#

thanks

tender shard
#

RIP too late

subtle folio
#

incase you needed it twice 😽

tranquil viper
#

paste your full class(es) in there and we can look

tender shard
#

anyway, you can make EVERYTHING static in the main class

knotty gale
#

what code do I post there though>

tranquil viper
#

The entire class

subtle folio
knotty gale
tranquil viper
#

ctrl + a

#

ctrl + c

#

ctrl + v in hastebin

#

send me the link

subtle folio
tender shard
knotty gale
tender shard
#

because a plugin is always a singleton object

tranquil viper
#

send your main class too

subtle folio
#

why

knotty gale
#

ok

subtle folio
#

not everything needs to be static

humble tulip
#

making things configurable for end users are so tedious because users are dumb

knotty gale
tranquil viper
#

httpspaste md 5 netyocibuniqa java

#

join this

knotty gale
#

I did

tender shard
# subtle folio why

why not? imagine your plugin has some "XY" field. You never have more than one instance of the plugin. so why not make the "XY" field static?`You will NEVER EVER hve more than one instance of your plugin anyway

humble tulip
#

are you using intellij?

subtle folio
subtle folio
#

still not going to do it πŸ˜›

#

me and my MainClass.getInstance() will be fine

tender shard
#

sure, your choice. all I wanted to say is: there is no point in trying to make singletons behave like normal objects

humble tulip
#

lmao that's the same thing

tender shard
#

it's pointless

subtle folio
tender shard
#

I mean it's not like Bukkit would allow your plugin to be loaded twice

subtle folio
#

you seem like you static abuse a lot

#

joking

tender shard
subtle folio
#

ikik

tender shard
#

I just think that you don't understand what a singleton is πŸ˜›

subtle folio
#

πŸ™„

tender shard
#

or maybe you do, sorry then

subtle folio
#

such a polite debate

tender shard
#

but every plugin is a singleton and hence EVERY FIELD and EVERY METHOD could be static, although it seems weird

humble tulip
subtle folio
#

but it could provoke bad practice in beginners

tender shard
#

but there is really no point in ever needing any instance of a plugin when the contract is "there can never exist any more instances than 1 of this class" anyway

tender shard
#

you're totally right about this

humble tulip
#

i wanna write a plugin with public static variables

#

all global

#

no method variables

tender shard
subtle folio
#

per player public static variables 😢

humble tulip
#

it's a pain in the ass to debug tho

subtle folio
#

wait why don’t you just save variables to a config instead!?!?

humble tulip
#

it'll remind me of classical programming

subtle folio
#

why would you hardcore variables

humble tulip
#

mc is single threaded so it's very possible to do it

subtle folio
#

technically making bedrock better cpu wise

#

bc it’s multi threaded

tender shard
#

https://github.com/JEFF-Media-GbR/StackResize to anyone who wonders, no obviously you should not make everything static. you should however make EVERYthing static than can be static.

NO use of instance = it should be static. Period

#

everyone who claims otherwise didn't understand the concepts of classes vs instances of classes

subtle folio
#

the way i liek to think of it for making methods static or not is: is it apart of the class or is it a function for all classes

subtle folio
#

in my brain no

tender shard
#

oh

#

you said "apart" and not "part"

#

sorry mb

subtle folio
#

oh yeah no worries

tender shard
#

yeah basically the idea is "do all instances of this class share the same behaviour for this" and if the answer is "yes" then it should be static

quaint mantle
#

not exactly spigot related but how can i combine a sharpness 6 book with my sword? thisll come in useful later but is it doable thru vanilla or do i need to make an event of some sort

subtle folio
#

i don’t think you can do such a thing unless you listen for anvil gui being opened snd like both items are in the proper slots

#

it would be kinda messy i think

#

are you asking how to do it in java or with vanilla ?

quaint mantle
#

both

subtle folio
#

do you know how to use the spigot api and make a plug-in?

quaint mantle
#

indeed, im still learning tho

subtle folio
quaint mantle
#

yeah im looking as well, im only seeing stuff for when a player is inside the anvil

#

public void onOpenInventory(InventoryOpenEvent event)

#

maybe this?

#

and i check for the inventory type

subtle folio
#

yeah

#

instanceof

quaint mantle
#

whoops

#

unsure if this is what we need

subtle folio
#

InventoryType.Anvil

#

check out this

#

anvil gui’s slots are one and two so maybe you can listen for it to be opened then in a inventory click event check if those two slots have your items

#

if so addUnsafeEnchant blah blah

humble tulip
#

think i'm done

subtle folio
#

show show

quaint mantle
#
@EventHandler
    public static void onAnvilGUI(InventoryOpenEvent openInv) {
        if(openInv.getInventory().getType() == InventoryType.ANVIL) {
            
        }
    }```
so im here so far, how do i get to check the items which are in the slots?
subtle folio
#

then i’m sleeping

humble tulip
#

?paste

undone axleBOT
subtle folio
humble tulip
#

spent all day writing this

quaint mantle
#

oh my gosh wait youre so smart lol

humble tulip
#

and the methods found in it

subtle folio
#

that’s beautiful

#

off to bed

humble tulip
#

lmao

subtle folio
#

best of luck @quaint mantle

humble tulip
#

now to test

quaint mantle
#

just a quick question, should my EventHandlers be static? i was told earlier no but hmm

humble tulip
#

expecting alot of failures

quaint mantle
#

ty lol, gn :D

humble tulip
#

no

quaint mantle
#

thanks for the heads up, can i ask why exactly?

humble tulip
#

because you register an instance of the listener class

#

not the class itself

quaint mantle
#

oh yeahh that makes sense

humble tulip
#

OMG IT WORKED FIRST TRY

#

yeah?

quaint mantle
#

how can i get the enchant on an item, f.ex an enchanted book? Im making it possible to combine a sword with a sharpness 6 book or whatever

tranquil viper
#

EnchantmentStorageMeta I believe

humble tulip
#
  item:
    type: 'PLAYER_HEAD'
    url: 'http://textures.minecraft.net/texture/dfbf1402a04064cebaa96b77d5455ee93b685332e264c80ca36415df992fb46c'
    name: '&aNext Page'
    lore:
      - ''
      - '&7Go to the next page'
      - ''
      - '&7<page>/<num-pages>'
#

if you had to add more stuff to make this more configurable, what would u add?

#

thus far, u can add name, lore and if it's a player head, set the texture

#

it's for a gui so it doesnt need enchantments

waxen plinth
#

I don't think you really need anything else

somber hull
humble tulip
#

what's tabdodging?

somber hull
#

Nvm

#

Dumb joke

somber hull
humble tulip
#

lmao

#

i was so confused

somber hull
#

I first heard of it playing Gmod where people would say β€œstop tab-dodging” as if they were chesting

#

Cheating

#

But tabdodging doesn’t exist

#

It just sounds like it exists

dreamy arrow
#

how long does it usually take for buildtools to come out after a major update release

somber hull
#

Kinda depends

#

I tend to stop making plugins around that time cause dealing with versions is annoying

#

So I’m not 100% sure

#

But I think like a month max usually

#

But 1.16 or 1.18 took a long time I’m not sure Wich one

dreamy arrow
#

oh

humble tulip
#

Have any of you experienced someone trolling you about a plugin bug?

humble tulip
#

A guy dmed me about a bug in my plugin

#

He says my plugin deletes all it's data on restart which is a pretty easy bug to replicate

somber hull
#

Im assuming you tested it

humble tulip
#

I cant replicate it

somber hull
#

So

#

Double check

#

By

#

Downloading the version off of spigot

humble tulip
#

I asked other ppl using my plugin and they also said no

#

I did

somber hull
#

Cause there were a few times

#

Where I got a big report

#

And used the wrong version

#

To test it

humble tulip
#

My version has a few updates

#

So i downloaded it from spigot

somber hull
#

Hmmm

#

Ask them to redowbloa sit

#

Redowbload it

humble tulip
#

I'm pretty sure he's trolling because he first message saying it was cleared on death

somber hull
#

Redownload it

humble tulip
#

then it changed to on restart

humble tulip
#

asked multiple times for a plugin list or a video or anything that can prove that it's acually happening and he always tells me to give him some time he'll do it

#

and then the sends nothing

somber hull
#

The wait

#

Then

#

If he’s the one with the issue

#

He should be the one trying to be urgent

#

You could care less because if he is trolling then it’s not worth your time

humble tulip
#

people seem to also keep the plugin in their server so ig it works properly

somber hull
#

Bro how tf do you set up bstats lmao

humble tulip
#

it's really easy lol

somber hull
#

I tried

#

I while ago

humble tulip
#

u use maven?

somber hull
#

Ye

humble tulip
#

u at ur comuter rn and got time?

somber hull
#

Nah

#

But I would like to see an example

#

How does it work? Are there custom stats you can add?

#

If so that might be why I was confused last time

summer scroll
#

All you need to do is put this on your code new Metrics(this, BSTATS_ID);

somber hull
summer scroll
somber hull
#

Oh wait

#

Do you have tk shade

#

Thaaaats where I got confused

#

Cause

humble tulip
#

lol

somber hull
#

(I haven’t done java in so long lol)

#

So

#

I forgot I switched to gradle

#

And I have no fucking clue how to shade in gradle

humble tulip
#

u can also just copy a class to ur project

summer scroll
somber hull
#

I’ll figure it o it later

#

I’m away from home

#

Don’t have pc

summer scroll
#

So add the repo and dependeny and then add this section

shadowJar{
    relocate 'org.bstats', 'your.class.package'
}
somber hull
#

Wow

#

That’s easy

#

Imma save that lmao

summer scroll
#

Yup, it's easier on gradle imo (to shade)

somber hull
#

Gradle easier for everything

#

It has a slower build time than maven tho

#

You wouldn’t think so because it’s simpler but it is

summer scroll
#

Maven is slower xd

somber hull
#

Damn

#

Well

#

From my experience

#

Maven is wayyyy faster

#

Idk

#

I use gradle

summer scroll
#

I have a multi module project, on gradle it only takes 7 seconds, and on Maven it's 20+ seconds to compile.

somber hull
#

Idk it’s opposite for me lol

#

Maybe it’s dependent on your pc or smthng

summer scroll
#

probably

ivory flume
#

does the async chat event allow you to cancel it

#

and thus the message cant send

humble tulip
#

u can check if there is a setCancelled method

#

no need to ask here

ivory flume
#

but that never has any javadocs on what it cancels

#

its not very clear, and having specifics is always nice on it

humble tulip
#

when u cancel an event, it's as if it never happened unless another plugin uncancels it or does something with it like broadcast the chat message

dense geyser
#

am I supposed to push unversioned changes on git? its the random shit in target (thats in my .gitignore) that intellij yells at me for for not comitting

slate mortar
#

i'd guess just ignore it

dense geyser
#

aight

slate mortar
#

my intellij also yells at me for not commiting my resources folder, which contains my mod's assets

somber hull
dense geyser
#

relax this isn't the forge discord

slate mortar
somber hull
somber hull
#

What are these repsonses lmao I’m either really stupid or they don’t make sense

somber hull
somber hull
#

What

fading lake
#

I think they're trying to compare you calling on mods to the forge discord, since its a corrupt police state over there

slate mortar
#

but yea, i don't expect much anymore

somber hull
slate mortar
#

read the message, and you'll get it. hopefully

#

i was not talking about mods as a thing

thorny dawn
#

oh my god

#

forge logs are so scary

slate mortar
#

and even if i would've been, it doesn't matter, because as people pointed out, this is not the forge discord

slate mortar
thorny dawn
#

no getters and setters

slate mortar
#

getters and setters... reminds me of my horrible c# times somehow

thorny dawn
#

oh god

#

dont get me started on that

slate mortar
#

where you had to go into EVERY class to see if something is a getter, setter, or nothing

#

awful

thorny dawn
slate mortar
#

also, vs sucks ass

thorny dawn
humble tulip
#

kotlin is shit

#

swear it's so weird

#

It does do some nice things tho

#

But it's such a weird language to be a Java alternative

#

Syntax is too different

thorny dawn
#

especially the property access syntax

#

i find it weird that there is no "new" keyword

#

but i got used to it

urban kernel
#

how do i set the players gamempde?

#

gamemode*

humble tulip
#

player.setGameMode

#

Will need to out the gamemode in the ()

urban kernel
#

what are the options

#

like how do i write the gm

humble tulip
#

Which ide are u using?

urban kernel
#

intellij idea comminity

#

community*

humble tulip
#

Ok hold control and click on the method

#

It will show u what u need to give it

urban kernel
#

ok

humble tulip
#

Click on wjat u need to give it and if it is an enum u will see all the possible values

urban kernel
#

how would i prevent console from trunning it

humble tulip
#

U figured it out?

urban kernel
#

running*

humble tulip
#

Orevent console from running what?

urban kernel
#

the cmd

humble tulip
#

If sender is not a player then it is the console

urban kernel
#

yeah ok

humble tulip
#

So say you need to be a plauer to run this command and return

urban kernel
#

i'm not serting the gamemode options

#

seeing*

#

i cannot type xdddddd

humble tulip
#

I wanna teach u to help urself so show me what u see when u click the gamemode class

urban kernel
#

im using a trackpad

humble tulip
#

Ok??

urban kernel
#

all it does is highlight it green

humble tulip
#

Control and click

#

Not regular click

urban kernel
#

oh god

humble tulip
#

So?

urban kernel
#

im in the code now

#

i have fould a link to the list hovering over shit

#

this?
player.setGameMode(GameMode.valueOf("CREATIVE"));

humble tulip
#

Great so u know how to set gamemode now?

#

No not valueof

urban kernel
#

yes

iron glade
#

you can just use GameMode.CREATIVE

#

or survival, etc

humble tulip
#

^^

iron glade
#

Hey minion, how are you?

humble tulip
#

Wassup I'm great

#

Wanna see something?

#

I'll dm u

iron glade
#

sure :)

urban kernel
#

aaaand compiling

#

essentialsk 0.0.5

dense geyser
earnest forum
#

anyone know why this is happenng

dense geyser
#

are you using spigot or spigot-api

earnest forum
#

spigot

#

other nms classes work

dense geyser
#

strange

earnest forum
#

its giving me this error where i dont even see an NBTBase class being used

#

nvm

#

im running this 1.8 plugin on a 1.18 server

dense geyser
#

that'll be why lmao

final monolith
#

i know that an entity unloads if the chunk unload too, but... can a entity unload by another method? Bukkit have any event for that?

#

I'm creating a system and need know with precision accurately whenever an entity unloaded

frail sluice
#

how can I store data in a chunk?

final monolith
#

persistent data

frail sluice
#

wdym by maps?

final monolith
#

Map<Chunk, ChunkDataClass> map

#

map.get(chunk);

frail sluice
#

ok, where do I store it then?

#

the user shouldn't be able to access it

final monolith
#

ok private final Map<Chunk, ChunkDataClass> data = new HashMap<>()

frail sluice
#

yea I get that

final monolith
#

map.put(chunk, new ChunkData())

frail sluice
#

but its not persistent

final monolith
#

yeah

#

for persistent datas you need persistent data containers

#

but works only on newer versions i think

frail sluice
#

thats not a problem

final monolith
#

ok, good luck πŸ˜‰

frail sluice
final monolith
#

chunks has persistent data container support too

frail sluice
#

Thanks

final monolith
#

np

eternal oxide
#

Chunk and World

dense geyser
#

the classes in net.minecraft.server in the spigot repo doesn't have all the classes in it, instead it inherits most from the minecraft-server repo. If I created a class with the same name in the spigot repo in the same place, would it replace that of the one inherited from minecraft-server?

eternal oxide
#

You are talking about NMS. You can't simply replace classes like that, they have a namespace (package) and must be in teh same namespace in the classLoader

#

?bootstrap read teh 1.18 and the linked 1.17 post about nms

undone axleBOT
#

Bootstrap Jar
The main spigot-1.18.jar is now a bootstrap jar which contains all libraries. You cannot directly depend on this jar. You should depend on Spigot/Spigot-API/target/spigot-api-1.18-R0.1-SNAPSHOT-shaded.jar, or the entire contents of the bundler directory from your server, or use a dependency manager such as Maven or Gradle to handle this automatically.

Please read the release notes for further information: https://www.spigotmc.org/threads/9-years-of-spigotmc-spigot-bungeecord-1-18-1-18-1-release.534760/#post-4305163

dense geyser
eternal oxide
#

nms = net.minecraft.server. Those classes and code are owned by Mojang. If you want to modify them, good luck

harsh totem
#

I have this config and I have this command that reloads the config.
When I set the value in the config to false and reload it, it is still true.
any ideas?

eternal oxide
#

did you saveConfig()?

harsh totem
eternal oxide
#

or are you manually editing the config file?

harsh totem
eternal oxide
#

then you are not correctly reloading it

dense geyser
harsh totem
#

how do I reload it correctly then?

eternal oxide
frail sluice
#

I am implementing a PersistentDataType, and the complex type is a List<Coordinate> (Coordinate is a data class), but then I can't implement getComplexType()

        @Override
        public Class<List<Coordinate>> getComplexType() {
            return List<Coordinate>.class;
        }

Cannot select from parameterized type

dense geyser
#

ah I see

#

wanted an easy way to change all the variables from private to public, ig ill just have to reflection them all ;-;

harsh totem
eternal oxide
harsh totem
eternal oxide
harsh totem
#

and in the config file itself it does stay false

frail sluice
eternal oxide
#

You probably can not

#

one sec and I'll test

frail sluice
#

so I need to use an array, or contain it in another class?

eternal oxide
#

an array would be good

harsh totem
#

I have this ban.addBan(dead.getName(),ChatColor.RED + "You lost all your hearts!",date,null);
and I wanted to know how to make the ban screen have 2 lines of text

#

because now I just get "You lost all your hearts!"

#

nothing else

eternal oxide
#

You probably can't but try using \n

#

also, if using current version ban by UUID not name

harsh totem
#

There is no such thing

eternal oxide
#

not when getting the BanList, when adding a ban

harsh totem
#

how do I get the uuid of a player

eternal oxide
#

dead.getUniqueID() instead of dead.getName()

harsh totem
eternal oxide
#

.toString()

#

Bans by name are no longer supported and this method will return null when trying to request them. The replacement is bans by UUID.

harsh totem
#

yes yes I understood why

#

I just didnt think of it

eternal oxide
#

The javadoc is a mess on this but I'd attempt to use UUID as it says

#

Why are you moving the eye location by 5?

#

Then calculating the vector back to the player?

harsh totem
#

How do I make this ban reason more than 1 line?

eternal oxide
#

did you try using \n ?

harsh totem
#

idk what that is

eternal oxide
#

"this is your\nBan reason"

#

If supported it inserts a new line

harsh totem
#

ok

earnest forum
#

doesnt show up on the text

harsh totem
#

i'll try

eternal oxide
#

Its called an escape code\sequence

earnest forum
#

are you using system.out

harsh totem
#

oh bruh nvm I thought it was something else

eternal oxide
#

thats also a Paper message, nothing to do with Spigot

harsh totem
#

I have this ban.addBan(dead.getUniqueId().toString(),ChatColor.RED + "You've been banned forever for the reason: \n" + ChatColor.WHITE + "You lost all your hearts!",null,null);
and all I see is this picture

#

no errors in console

eternal oxide
#

looks to me you didn;t update teh jar on your server

earnest forum
#

looks like \n works for other people on kick messages

#

should work for ban

eternal oxide
#

delete your bans too

#

make sure its taking the UUID

frail sluice
#

does BlockExplodeEvent gets called for the exploding block (tnt?) or for the broken blocks?

eternal oxide
#

exploding TNT is an entity

#

beds in the nether are exploding blocks

frail sluice
#

ok

terse raven
#

i am sending ghost blocks to the user and they sadly disappear when clicked, how do i prevent that?

eternal oxide
#

You re-send the fake block if they interact with it

terse raven
#

how do you prevent spigot from setting this block to air?

eternal oxide
#

Spigot isn;t setting the block to air, thats client side

terse raven
#

what

#

no

terse raven
#

yes i used that

eternal oxide
#

it doesn't make any changes to the world

terse raven
#

but the bock disappears when clicked

eternal oxide
#

yes

#

the client updates

terse raven
#

how do i prevent spigot form sending a air block change

#

on an interaction

eternal oxide
#

you detect the interact and resend the fake block

terse raven
#

then i send 2 block changes to the client

#

how do i prevent it from changing it in the first place

eternal oxide
#

its just a packet

#

you don;t

pastel juniper
#

I made a gui and I disabled the Inventory Click event but when I open the gui, I can shift click to an item that is in my inventory andit moves to gui.

eternal oxide
#

prevent drag events too

pastel juniper
#

ohhh

eternal oxide
#

also, make sure you are properly detecting the inventory when clicked

pastel juniper
#

ty

terse raven
rocky kelp
#

is it possible to change a player's name in bungee from a spigot server plugin?

quaint mantle
#
    @EventHandler
    public void onDeath(PlayerDeathEvent event) {
        Player player = event.getEntity();
        Player killer = player.getKiller();

        if (killer instanceof Player) {
            double kmh = killer.getMaxHealth();

            if (player.getMaxHealth() <= 3.0) {
                killer.setMaxHealth(kmh + 2.0);
                Bukkit.getBanList(BanList.Type.IP).addBan(String.valueOf(player.getUniqueId()), "StraciΕ‚eΕ› wszystkie serca!", null, null);
            } else {
                player.setMaxHealth(player.getMaxHealth() - 2.0);
                killer.setMaxHealth(kmh + 2.0);
            }

        }
        if (!(killer instanceof Player)) {
            if (player.getMaxHealth() <= 2.0) {
                Bukkit.getBanList(BanList.Type.IP).addBan(String.valueOf(player.getUniqueId()), "StraciΕ‚eΕ› wszystkie serca!", null, null);
            } else { player.setMaxHealth(player.getMaxHealth() - 2.0); }
        }

        if (player.getMaxHealth() <= 2.0) {
            Bukkit.getBanList(BanList.Type.IP).addBan(String.valueOf(player.getUniqueId()), "StraciΕ‚eΕ› wszystkie serca!", null, null);
        }
    }

why my ban code is not working?

karmic hull
#

how can I disable damage from arrows but not cancel the knockback (event)?

summer scroll
eternal oxide
#

player.getUniqueId().toString()

quaint mantle
#

i did this

eternal oxide
#

not String.valueof

quaint mantle
#
    @EventHandler
    public void onDeath(PlayerDeathEvent event) {
        Player player = event.getEntity();
        Player killer = player.getKiller();

        if (killer instanceof Player) {
            double kmh = killer.getMaxHealth();

            if (player.getMaxHealth() <= 3.0) {
                killer.setMaxHealth(kmh + 2.0);
                Bukkit.getBanList(BanList.Type.IP).addBan(player.getUniqueId().toString(), "StraciΕ‚eΕ› wszystkie serca!", null, null);
            } else {
                player.setMaxHealth(player.getMaxHealth() - 2.0);
                killer.setMaxHealth(kmh + 2.0);
            }

        }
        if (!(killer instanceof Player)) {
            if (player.getMaxHealth() <= 2.0) {
                Bukkit.getBanList(BanList.Type.IP).addBan(player.getUniqueId().toString(), "StraciΕ‚eΕ› wszystkie serca!", null, null);
            } else { player.setMaxHealth(player.getMaxHealth() - 2.0); }
        }

        if (player.getMaxHealth() <= 2.0) {
            Bukkit.getBanList(BanList.Type.IP).addBan(player.getUniqueId().toString(), "StraciΕ‚eΕ› wszystkie serca!", null, null);
        }
    }
#

still not working

#

there is no error in console

eternal oxide
#

BanList.Type.NAME

quaint mantle
#

so what do i do

eternal oxide
#

but ban them by UUID

quaint mantle
#

.

eternal oxide
#

yes, you get the BanList and ban by UUID

quaint mantle
#

aaaaaaaa

#

ok

#

i understand

eternal oxide
#

the Javdoc on this is quite messed up

quaint mantle
#

still not working

eternal oxide
#

?paste yoru code here, so its readable

undone axleBOT
quaint mantle
eternal oxide
#

much better

quaint mantle
eternal oxide
#

why ban twice if their health is below 3.0?

quaint mantle
#

dunno

#

i removed it

#

yes

eternal oxide
#

So, this code is supposed to...
If the player dies they lose 2.0 max health.
If the player is killed by another player the killer gains 2.0 max health.
If they run out of max health they get banned.

quaint mantle
#

yes

#

yes and?

#

it's good

eternal oxide
#

what version of Spigot are you using?

quaint mantle
#

dunno

#

how to check?

eternal oxide
#

it tells you in teh log when you start the server

quaint mantle
#

This server is running CraftBukkit version 3496-Spigot-b081915-a59dc59 (MC: 1.18.2) (Implementing API version 1.18.2-R0.1-SNAPSHOT)

#

how do i do thisssssssssssss

earnest forum
#

if you're banning the name why put in the uuid

#

lol

eternal oxide
#

bans are now supposed to be by UUID not name

quaint mantle
#

noooooooo

#

i have 1 heart

#

oh wait

#

i know

#

bruh

eternal oxide
#

once you have it working you should change it to use Attributes rather than getMaxHealth

kindred valley
#

Yes

#

Anyone knows how to clear java console

#

"Java Console"

quaint mantle
#

i dunno why its .cs

eternal oxide
#

yeah that .cs gets annoying

quaint mantle
#

it is

quaint mantle
#

ik

#

i have it

#

in my code

eternal oxide
#

I added a check to make sure it doesn't go below zero

quaint mantle
#

oh ok

eternal oxide
#

If you are still not being banned teh banlist is fubar and does use names

#

they are on 1.18.2

#

odd, I guess we need to kick them too then

quaint mantle
eternal oxide
#

what line is LSPlugin.java:63

quaint mantle
eternal oxide
quaint mantle
#

player.setMaxHealth(player.getMaxHealth() - 2.0);

eternal oxide
#

then you are not using teh code I gave you

#

oh greater than

#

change the check to if (player.getMaxHealth() >= 3.0)

quaint mantle
#

oooooo

#

works

#

ok tysm! @eternal oxide

subtle folio
#

iirc setMaxHealth is deprecated

eternal oxide
#

its his base code not mine πŸ˜‰

#

Yep

subtle folio
quaint mantle
#

@eternal oxide how to change name of itemstack

prime kraken
#

Hello team hope your are all good, how is it possible to have the an entire door in a variable like not just the bottom or the top ?

subtle folio
eternal oxide
#

a Door is BiSected. Cast and you can get Top/Bottom relative

subtle folio
#

tow

prime kraken
# eternal oxide a Door is BiSected. Cast and you can get Top/Bottom relative

Yes i know how to do, but i'm trying to make a lock system, I delete my code, bcs doesn't work that's why I ask, if the door is to nobody, the player buy the door and can interact with the door (open or close) and at this moment, if i want it works, i have to click on the top and bottom part of the door, i would like to just one click affect the two part

eternal oxide
#

When they click, you test to see if is top or bottom, then get the other half as well

prime kraken
#

Thanks you for your help !

eternal oxide
prime kraken
#

Hello, I've one question, I have this error : Caused by: java.lang.ClassCastException: org.bukkit.material.Door cannot be cast to org.bukkit.block.data.type.Door

#

How may i solve that ?

#

Door door = e.getClickedBlock().getState();

eternal oxide
#

getBlockData() not getState()

prime kraken
#

Damn

#

Thanks

#

πŸ™‚

prime kraken
#

Please* (better when polite)

eternal oxide
#

I'm not sure what you are asking

prime kraken
eternal oxide
#

You could store teh protection data in the chunk PDC

prime kraken
#

Didn't think about that, but data persist when player leave the server ?

tardy delta
#

?pdc

tardy delta
#

yes

subtle folio
#

pdc moment

river spear
#

I have a custom tab with 80 slots but now I see the fake slots when I tab in chat or in the player list when I press P. Can this be removed?

river spear
quiet ice
#

What is more efficent? ClassValue or HashMap<Class, T>?

#

Assuming that the classes will never get GC'ed

ivory sleet
quiet ice
#

Yep. (I'm talking about CPU efficiency there, memory is kinda irrelevant for me)

ivory sleet
#

Hmm, honestly haven’t read ClassValue’s internals but I usually go with IdentityHashMap regardless when the key type is of Type or Class

misty current
#

can you clone a Structure?

hushed spindle
#

does anyone happen to know if its possible to animate custom unicode characters for a resource pack

#

i cant seem to find if and how thats possible

river oracle
#

E.g. ue000 is the first texture in the animation and ue001 is the second texture in the animation

hushed spindle
#

so you just cycle through each frame in the animation

#

shame

river oracle
#

Si

hushed spindle
#

i wanted one for a gui but you cant change the inventory title without reopening the inventory

river oracle
#

Unfortunate ;) I got ideas to fix that but nothings tested

eternal oxide
#

7smile7 did a renaming Inventory a while back

hushed spindle
#

packet shenanigans im assuming?

tall dragon
#

i could show you my method

river oracle
#

Let's see it I'm interested

misty current
tall dragon
#

?paste

undone axleBOT
tall dragon
#

not made by me btw. this requires way too many brain cells

misty current
#

i'd rather reopen the inventory than making this thing version compatible

river oracle
#

Nice might makw something like this this weekend

keen star
#

hi i want to make random ore drop when break per % but i don't know how to make drop per % someone help

river oracle
hushed spindle
#

first make a random, preferably make it static and accessible because making a random each time you need one is unnecessary

#

new Random()

tender shard
hushed spindle
#

then you take that random and do .nextDouble() and it'll return a random double between 0 and 1

tender shard
# keen star hi i want to make random ore drop when break per % but i don't know how to make ...
GitHub

Avoid writing the same code over and over again - use JeffLib for your Spigot plugins! - JeffLib/RandomUtils.java at dc71756f3b0371480d4895a9c1ec7834e8aca9c9 Β· JEFF-Media-GbR/JeffLib

hushed spindle
#

if you want your drop change to be 40% for example check if (random.nextDouble() < 0.4)

#

or 40/100

#

and listen to a BlockDropItemEvent

#

something to note though

#

if you're on spigot you can't simply add drops to the list of drops, so you have to drop the item manually if your conditions are met

#

if you're using paper or a fork of it you can just add items to the list

misty current
#

can you clone a Structure?

dry forum
#

im trying to get a head with a custom texture but public static ItemStack makeSkull(String base64EncodedString) { final ItemStack skull = new ItemStack(Material.PLAYER_HEAD); SkullMeta meta = (SkullMeta) skull.getItemMeta(); assert meta != null; GameProfile profile = new GameProfile(UUID.randomUUID(), null); profile.getProperties().put("textures", new Property("textures", base64EncodedString)); try { Field profileField = meta.getClass().getDeclaredField("profile"); profileField.setAccessible(true); profileField.set(meta, profile); } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } skull.setItemMeta(meta); return skull; } doesnt work i cant import GameProfile

tall dragon
#

then u dont have nms

dry forum
#

1.17

eternal oxide
tardy delta
#

what about not using the latest version 😎

tall dragon
dry forum
#

i dont need a player though i want to put a texture in to get a head not a player name

tender shard
#

i ams orang

jagged thicket
#

i ams orang

native tendon
#

i ams orang

tender shard
#

everyone is orange

tender shard
#
        <dependency>
            <groupId>com.mojang</groupId>
            <artifactId>authlib</artifactId>
            <version>3.2.38</version>
            <scope>provided</scope>
        </dependency>
#

should be available after running buildtools

misty current
#

can you clone a Structure?

tardy delta
#

the blocks or tje object?

misty current
#

the object

tender shard
#

I doubt it

misty current
#

what if I have the file? does bukkit allow you to create multiple Structure objects out of it?

tardy delta
#

is the difference between CompletableFuture#supplyAsync and scheduler.runTaskAsync(future::complete) that the 2nd one will use the schedulers threadpool to execute the stuff on?

#

instead of the commonpool of the future

#
CompletableFuture.supplyAsync(() -> System.out.println())

// vs

CompletableFuture future = new CompletableFuture();
scheduler.runTaskAsync(plugin, () -> {
  // calc
  future.complete(result);
});```
mellow edge
#

ever wondwred how hypixel bedwars work?

tardy delta
#

no

mellow edge
#

idc

#

but anyways

tardy delta
#

ah nice

mellow edge
#
public void addTeam(String name) {
  
  Account account = Account.getAccount(name);
  
  if(!(account.getRank().getType() == AccountRank.MVP++) && account.getHistory().wasGayBefore()) {
       TeamManager.getGayTeamOfTheDay().add(account.getPlayer);
       account.setBadLuck(true, 10000000000 /*level*/);
  }
if(game.shouldStart) game.start();

tardy delta
#

so much weird stuff

mellow edge
#

thats the point

tender shard
mellow edge
#

no shit

#

that is in their plugin

tardy delta
#

is it opensource?

mellow edge
tender shard
#

my jame is neff

tepid ore
#

I get this error when I load my plugin java.lang.NoSuchMethodError: 'void org.apache.commons.io.FileUtils.copyToFile despite listing commons-io version 2.11.0 as a dependency. Any idea how to fix it? I'm using Java 8 to compile the project

tender shard
tepid ore
#

I tried that, no difference

tender shard
#

that can't be

#

?paste your pom.xml pls

undone axleBOT
tepid ore
#

With or without the shading

tender shard
#

with shading

tepid ore
tender shard
#

try to set <scope>compile</scope> in the commons dependency

#

then run mvn package again

#

you should also set a scope for javassist

#

and set the annotation dependency to "provided"

tepid ore
#

Noop

#

Still nothing :/

#

I'm getting the same error

tender shard
#

how do you compile?

tepid ore
#

I'm using Eclipse :> So Run -> Maven Build (That has package as goal)

tender shard
#

hmmm

#

can you ?paste the full maven log putput?

tepid ore
#

I get this in the console tho [INFO] Excluding commons-io:commons-io:jar:2.11.0 from the shaded jar.

tender shard
#

hmm yeah

#

pls run mvn clean package -X and send the full output

#

oh wait

#

I see

#

you are using <includes> in your shade configuration

#

but didnt add apache commons

#

either remove the include set or also add apache commons there

tepid ore
#

I get [INFO] Including org.javassist:javassist:jar:3.28.0-GA in the shaded jar. now

#

But it still does not work 😦

#

I get the same error lol

brittle lily
#

?learnjava

undone axleBOT
tender shard
#

alternatively get rid of the whole <artifactSet> and just shade everything that's set to "compile"

vale ember
#

if i have the Class of the event and a consumer that accepts that event, how can i register it, so that every time the event fires the consumer will be called?

knotty meteor
#

Im trying to make a plugin where you can plant a seed on an other block
But after a few seconds it cleares and drops itself
How can i prevent this?
Also i cant place them next to each other

tepid ore
tender shard
#

the block must be FARMLAND

tepid ore
#

Sorry for the ping btw

#

Forgot to disable it

knotty meteor
#

Ah alright then i will do it on farmland