#help-archived

1 messages Β· Page 195 of 1

wraith thicket
#

Hopper minecart

quick arch
#

heh there's no get entity method in the Inventory Move Item Event

solemn grove
#

what will happen if I start server on new version without --forceUpgrade ?

timber prairie
#

{...} See what happens if you disable the firewall on the machine the servers being hosted on or make sure the IP address and port aren't in use on your network.
@frigid ember only I'm developing Minecraft servers and stuff in the family, so no port error. I don't understand firewall..

dusky flare
#

guys plz any one understand with domain names ????

timber prairie
#

no

sturdy oar
#

I have an issue with EntityPotionEffectEvent

#

the event getNewPotion

dusky flare
#

@frigid ember can u come private ?

sturdy oar
#

I literally do event#getNewPotion, and check if the type is poison

#

but it returns false

#

but the potion i gave is poison

timber prairie
#

@dusky flare why are you not asking your friend

#

?

sturdy oar
timber prairie
#

Your friend maybe can help ye, Ender Gamer..

sturdy oar
#

it says "Is not POISON, is: POISON"

#

that does not make sense to me

#

I'm applying poison, how can the type be != POISON

#

and if you want full code, which tbh i don't really thingk it has any use here it is

#

?paste

worldly heathBOT
sturdy oar
#

i am calling that event with EntityPotionEffectEvent listener, i just pass the "getNewPotion()" in the method

#

this is the full class code

#

I'm either being real dumb, or the getNewPotion() makes no sense for me

#

i can try, but enums can be compared with '==' and that worked in other 30 plugins i made

#

btw for anyone to replicate this, I'm on 1.16.1 latest build,
I do /effect give TheViperShow poison 20 1

dusky flare
#

@timber prairie my friend is a dog he dont want to tell me πŸ˜‚ πŸ˜‚

timber prairie
#

...

#

TRIGGERED DEMON+

vital copper
#

@sturdy oar Are you using intellij? Run in through the debugger, that usually clarifies.

#

what is going on at least.

sturdy oar
#

i can use the debugger...

#

but will that really help any further

wet bronze
#

Anybody here know a horse ownership or horse tp plugin that isn’t MMOHorses?

#

For 1.16

left plover
#

is cancelling PlayerBucketFillEvent's not replacing liquids on the client side a known bug, has anyone else experienced this? (it seems to only not replace when there is no block being clicked and its just the liquid but replaces itself when the block by or beneath it is clicked)

sturdy oar
#

[20:18:07 INFO]: TheViperShow issued server command: /effect give TheViperShow minecraft:poison 20 1 [20:18:07 INFO]: getLivingEntity() [20:18:07 INFO]: Is not POISON, is: POISON [20:18:07 INFO]: [TheViperShow: Applied effect Poison to TheViperShow]
I tried with .equals() still same results that doesn't make any sense to be honest.

#

I'll throw the debugger in...

left plover
#

it doesn't appear to be poisony enough πŸ€”

#

wait why

vernal spruce
#

cause reasons

left plover
#

im using 1_8_R3

frigid ember
#

Is there a way to keep up my Server for 24/7? or for more than 1 day with low memory usage?

#

ping me if you can help

left plover
#

is there any way I can stop it doing that without just not using spigot for the event?

vernal spruce
#

buy a host lol

sturdy oar
#

im tryin another thing now

#

that is the most non-sense issue i had so far

left plover
#

ah okay, thanks

#

thanks πŸ‘

sturdy oar
#

@frigid ember should i try printing hashcode?

#

they should be the same... since POISON is an enum

#

and go program in python or something

#

> effect give TheViperShow minecraft:poison 15 0 [20:28:41 INFO]: getLivingEntity() [20:28:41 INFO]: 19 - 19 [20:28:41 INFO]: org.bukkit.craftbukkit.v1_16_R1.potion.CraftPotionEffectType - org.bukkit.potion.PotionEffectTypeWrapper [20:28:41 INFO]: Is not POISON, is: POISON

#

left is value obtained with .get() right is enum constant

#

the hashCode is the same

heavy trail
#

Helo

#

hello any can helpme

worldly heathBOT
#

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.

heavy trail
#

my users can not enter to the server, the server run

#

but i have this issue

#

.... [18:05:00 WARN]: Couldn't look up profile properties for com.mojang.authlib.GameProfile@1b34490[id=dfbd3bba-c640-31d3-82a9-c661d7e4363a,name=erichmauromatis,properties={},legacy=false]

old barn
#

How do i check if the player has 5 free slots in their inventory?

heavy trail
#

is a host problem?

#

online-mode=false

#

AdvancedEnchantments-7.11.5.jar 0.91MB 07/21/20 15:41:45
AuctionMaster.jar 349.57kB 07/17/20 21:29:00
ChatControl-Free-5.8.7.jar 196.98kB 07/17/20 21:29:01
CitizensCMD.jar 263.58kB 07/17/20 21:29:02
Citizens.jar 3.38MB 07/17/20 21:29:02
Clearlag.jar 192.13kB 07/17/20 21:29:03
CrazyCrates.v1.10.jar 779.29kB 07/17/20 21:29:03
DeluxeCombat v.1.17.5.jar 607.34kB 07/17/20 21:29:03
DeluxeMenus-1.13.2-Release.jar 134.53kB 07/17/20 21:29:04
Dungeons.jar 825.01kB 07/23/20 00:33:19
EpicCraftingsPlus-6.0.2-Cracked.jar 181.09kB 07/19/20 18:10:56

#

EssentialsX-2.17.2.0.jar 1.41MB 07/17/20 21:29:05
EssentialsXChat-2.17.2.0.jar 12.54kB 07/17/20 21:29:05
EssentialsXSpawn-2.17.2.0.jar 15.09kB 07/17/20 21:29:06
ExploitFixer.jar 88.72kB 07/17/20 21:29:06
GangsPlus-2.9.0.jar 409.73kB 07/17/20 21:29:06
HamsterAPI.jar 33.36kB 07/17/20 21:29:07
HolographicDisplays.jar 480.45kB 07/17/20 21:29:07
IllegalStack.jar 157.56kB hace 25 minutos
ipwhitelist-1.7-3.jar 12.25kB 07/17/20 21:29:08
Jobs4.15.11.jar 1MB 07/17/20 21:29:08
LeaderHeads-4.0.5.jar 1.18MB 07/17/20 21:29:09
LibsDisguises-10.0.15-Free.jar 768.67kB 07/22/20 12:46:18
LockettePro-2.9.10.jar 85.09kB 07/17/20 21:29:09
LuckPerms-Bukkit-5.1.26.jar 1.33MB 07/17/20 21:54:21
Marriage.jar 176.74kB 07/17/20 21:29:10
Minepacks.jar 1.25MB 07/17/20 21:29:11
MobFarmManager1.5.6.0.jar 264.65kB 07/17/20 21:29:11
Multiverse-Core-2.5.jar 1.65MB 05/13/20 21:37:10
MythicMobs-4.9.1.jar 8.12MB 07/22/20 23:48:50
nuvotifier-2.7.1.jar 2.72MB 07/16/20 03:35:38
PlaceholderAPI-2.10.5.jar 336.11kB 07/17/20 21:29:12
PlugMan.jar 1.35MB 07/17/20 21:29:12
ProtectionStones-2.7.1.jar 506.54kB 07/17/20 21:29:13
ProtocolLib.jar 1.43MB 07/22/20 13:11:51
RandomTeleport-7.9.2.jar 476.73kB 07/17/20 21:29:13
Rankup-3.6.1.jar 128.37kB 07/17/20 21:29:14
SkinsRestorer.jar 7.44MB 07/17/20 21:56:15
TAB v2.7.3.jar 516.15kB 07/17/20 21:29:17
UltimateKits-2.6.5.jar 797.34kB 07/17/20 21:29:

lone fog
#

Cracked server and cracked plugins?

worldly heathBOT
heavy trail
#

Nope

#

Cracked server and cracked plugins?
@lone fog I pay the plugins

vapid kindle
#

EpicCraftingsPlus-6.0.2-Cracked.jar

heavy trail
#

Ah is the only xd

vapid kindle
#

I somehow don't believe you

lone fog
#

We don't support offline server or cracked plugins here

heavy trail
#

@heavy trail Are you using BungeeCord?
@frigid ember Yeah

sturdy oar
#

πŸ€£πŸ€£πŸ€£πŸ€£πŸ€£πŸ•΅οΈβ€β™‚οΈ

heavy trail
#

Yeah i have skin restorer

#

Ok, i try remove it

#

thank you for your help

#

in the bunge have this issue

tiny dagger
#

Do you guys know if it's possible to check the type of a list? πŸ€”

#

i'm about to go loop thru first element

mellow wave
#

Type of list or what's in it?

tiny dagger
#

List<Type>

mellow wave
#

I'd get the first element and check that type :/

#

Not sure if there's a better way

tiny dagger
#

i wonder if there is tho

#

πŸ€”

mellow wave
#

Maybe

stuck quartz
#

i edited a PersistentDataContainer on a BlockState
how can i update the changes to the block itself?
i tried BlockState.update() and it didn't work

mellow wave
#

Tag me if you find anything I would like to know πŸ™‚

tiny dagger
#

update(true)

stuck quartz
#

oh thanks

old barn
#

How do i check if the player has 5 free slots in their inventory?

frigid ember
#

how to check if block is liquid or contains liquid?
1.15

stuck quartz
#

still didnt work Fr33styler

frigid ember
#

block.isLiquid() || block.is...?

dusky sigil
#

So im doing this - java public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (label.equalsIgnoreCase("faction_create")) { if (getConfig().getString("faction.name").contains(args[0])) { sender.sendMessage(ChatColor.RED + "Sorry, this faction name is taken."); } else { sender.sendMessage(ChatColor.GREEN + "You have created the faction " + args[0] + " successfully!"); FactionNum = FactionNum + 1; getConfig().set("faction.name." + FactionNum, args[0]); saveConfig(); } } return false; } } and im getting a null error at line 23 [if (getConfig().getString("faction.name").contains(args[0])) ]. why?

frigid ember
#

check what getString("faction.name") returns

dusky sigil
#

Wont it return a list of all of the factions?

#

...which there arent any of at

#

...means it returns null

#

How do i fix this?

frigid ember
#

log those two variables

#

check which one returns null

dusky sigil
#

faction and name?

frigid ember
#

^

dusky sigil
#

@frigid ember when i use the command and im giving a name to my faction im still getting the error

#

but ill check the string from the config

hoary idol
#

Hey guys I need help with something.

Y’all know when players press the tab key it lists all the players on the server.

Does anyone know how I can disable that?

dusky sigil
#

Why would you?

#

I dont think you can

mellow wave
#

You can make it empty, not disable it

hoary idol
#

Hmm ok

mellow wave
#

Well only show yourself

hoary idol
#

Ok how do i do that?

frigid ember
#

How to check if block contains water?

tiny dagger
#

get blockdata

#

and cast it to isloggable

#

or something

#

πŸ€”

mellow wave
#

I'm not exactly sure how it works since I've never done it myself but you could take a look at the source code of BungeeTabListPlus and see if you can work something out @hoary idol

hoary idol
#

Wait @mellow wave I’m such an idiot I didn’t mean the tab list....

frigid ember
#

found it

hoary idol
#

I meant in the command line

mellow wave
#

hm disable chat?

hoary idol
#

I don’t want people to be able to see the online players by pressing tab in the Chat

mellow wave
#

oh

hoary idol
#

Sorry for the confusion

mellow wave
#

Yeah that's also possible

hoary idol
#

?

old barn
#

How do i check if the player has 5 free slots in their inventory?

dusky sigil
#

theyre BOTH returning null

#

faction AND name

#

which makes sense

sturdy oar
#

List<Type>
@tiny dagger yes

#

But reflection is required

dusky sigil
#

I have an idea

sturdy oar
#

But it's super generic and it may not be working

#

can't you do like List#get(0).getClass()

#

It won't work in empty list of course

dusky sigil
#

so i tried doing this:

#
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (label.equalsIgnoreCase("faction_create")) {
            if (getConfig().getString("name") != null || getConfig().getString("faction.name").contains(args[0]) ) {
                sender.sendMessage(ChatColor.RED + "Sorry, this faction name is taken.");
            }
            else {
                sender.sendMessage(ChatColor.GREEN + "You have created the faction " + args[0] + " successfully!");
                FactionNum = FactionNum + 1;
                getConfig().set("faction.name." + FactionNum, args[0]);
                saveConfig();
            }
        }``` and it still doesnt work
#

still a null

#

oh

#

bruh

#

well

#

i had the right idea i guess

#

i checked

#

both name and faction return config

#

return null**

#

so it doesnt matter

#

Sure

#

so now the config is like this

#

faction:
name:
'1': safd
'2': safd

#

this is great but

#

i shouldnt be able to make multiple factions with the same name

halcyon snow
#

you could use the faction name as the section instead of FactionNum

dusky sigil
#

How can i make multiple factions otherwise?

#

I want a way to sort through them

#

if i just do it with name:

#

there can only be one faction

#

a config...

#

for each faction?

#

sounds heavy

#

also, how do i do that?

heavy trail
#

It is not the bunge, it is the server, it enters my other servers, and this is a server with bunge problems and it still does not work 😦

dusky sigil
#

do i copy my config file again?

#

hmmm

heavy trail
#

i trying deleting the plugins

#

yesterday working fine, today just make a reload

#

and not working

dusky sigil
#

@frigid ember I figured it out, Thanks!

#

Yeah.. i didnt even think of making multiple files

#

Its a great idea

#

i found this

#

File f = new File("FILE/PATH/HERE", "FILENAME_HERE.yml");

#

I want the file path to change automatically

#

so you dont have to enter it every time

#

is that possible?

#

found it

#

getDataFolder()

vocal venture
#

hey could someone help me please

ocean root
#

so were working on a minecraft server on a linux vps and screen doesnt want to detach

worldly heathBOT
#

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.

ocean root
#

we do that

#

it doesnt work

#

and weve tried to reinstall screen

#

nothing

#

and there is a screen running

#

ok thats a lie

#

let me show u

vocal venture
#

what is good CMI like plugin

ocean root
#

root@server:/srv/ftp/server_spigot/server_spigot# screen -ls
There is a screen on:
21560.pts-0.server (07/23/20 19:36:10) (Attached)
1 Socket in /run/screen/S-root.

#

ok

#

so whats happeniong is were runnign screen without screen session active

dusky sigil
#

nevermind i frogot a +..

#

That question never happened

vocal venture
#

yes

heavy trail
#

@frigid ember Yeah is a plugin, now the problem is know what is the plugin hahaa

undone narwhal
#

Hey guys, I never played Factions so I need a small help. My plugin hooks to Factions, and I want to get the Factions name. So for the default Factions plugin (massivecraft) everything is fine: faction.getName(). But now I want to also support SaberFactions. Problem is, there isn't a Faction#getName in SaberFaction. Anyone knows something about this plugin?

#

Okay thanks

dusky sigil
#

What a quick google, I salute you.

undone narwhal
#

omg so much fork, so much differences 😒

#

SavageFactions != Factions but more close to SaberFactions

frigid ember
#

?paste

worldly heathBOT
frigid ember
wheat mirage
#

Voxelsniper won't do it's brushes in naturally generated caves

#

Anyone know why?

quick turtle
#

Where is the FOOTSTEP particle in 1.16...

#

wot

#

:(

#

no this is plugins

#

You can ask in SKUnity tho

tiny dagger
vocal venture
#

Could someone help me set up my server please

vital copper
tough kraken
#

trying to learn nms.

have the pf-goals:

this.goalSelector.a(0, new PathfinderGoalFloat(this));
        this.goalSelector.a(2, new PathfinderGoalMeleeAttack(this, EntityIronGolem.class, 1.0D, false));
        this.goalSelector.a(4, new PathfinderGoalMeleeAttack(this, EntitySpider.class, 1.0D, true));
#

but what is the 0, 2, and 4 at the beginning for? dont get it

subtle blade
#

priority

#

0 = highest priority, will take precedence over others

#

for instance, that entity would prioritize attacking iron golems over spiders

#

(or maybe i have that backwards, its been a bit)

tough kraken
#

ah nice. btw, is there any way to get such infos somewhere? seems like there is no single good help for nms 1.8

subtle blade
#

reverse engineering and figuring it out yourself

tough kraken
#

lmao

subtle blade
#

though we dont advise using 1.8, it's 5 years old

tough kraken
#

1.14 has shitty combat (my opinion) and it would be dumb to make a pvp bot for 1.14 combat

subtle blade
#

don't care

#

literally do not give a single shit

tough kraken
#

lmao

subtle blade
#

you're 5 years out of date, spigot only supports 1.16.1

#

your opinion on the matter is irrelevant

#

it was a recommendation, youre on your own if you choose to stay on 1.8

lone fog
#

Technically we support 1.15 too

#

Since it's still the default for buildtools

subtle blade
#

most likely not in the near future. build delay for 1.16 was extended to 3 weeks

#

at this point id consider 1.16.1 mostly stable. md is likely just waiting on 1.16.2 to make it default

lone fog
#

Fair

#

!.16.2 is too major for a .2 update

#

I don't like it

subtle blade
#

i dont understand their reasoning behind it either

tough kraken
#

your opinion on the matter is irrelevant
@subtle blade btw we are in 2020, would be new to me if opinions doesnt matter... but if you say so, you're the staff πŸ˜‘

subtle blade
#

pressed for time on .0 is likely the reason

lone fog
#

Probably

subtle blade
#

your view on pvp pertains not at all to what this server supports, vngc

#

whether or not you like it, the version you are using is not supported

#

so, no, it does not matter

tough kraken
#

so i am not allowed to tell my opinions? wow, good one

#

lmfao

opal adder
#

Doesn't 1.8 have like the best version performance? I mean isn't that why most servers run on it?

tough kraken
#

i think most servers run 1.8 because of combat

opal adder
#

I'm speaking from running my own 1.8 server, 1.12, and 1.14. I've not done 1.16 yet, but I'm about to

tough kraken
#

but udk

#

idk

lone fog
#

Yeah it's mostly for the combat

#

I mean sure 1.8 runs better, because it has less stuff

opal adder
#

Who cares about that, you can fix the swinging, I was under the impression most server run on 1.8 for the performance

tough kraken
#

I mean sure 1.8 runs better, because it has less stuff
@lone fog doesnt have to be true...

lone fog
#

1.12 performance was good

sturdy oar
#

Is*

opal adder
#

Not 1.13/14

lone fog
#

1.16 should be really good with all the rewritesMojang did

tough kraken
#

1.15 was pretty bad i think, much guys had problems there

lone fog
#

But y'know

opal adder
#

Well that's good to know, I guess I'll just have to find out. If 1.16 ends up running really smoothly on my server, I'll probably update everything to 1.16. Most users (At least on my server) join using the latest version. There are still 1.8 players, but I don't think that's the majority by far

tough kraken
#

then it would'nt be a bad idea

opal adder
#

I feel like there will still be 1.8 servers when 1.30 comes out

tough kraken
#

if they dont add the old combat, that won't end probably

#

or make a better combat system

opal adder
#

Would be sick if they did

lone fog
#

They are

#

Well not 1.8, that was bad

#

But they have been doing combat tests

tough kraken
#

1.7 was good lol

opal adder
#

Well, the only thing I'd say I miss is the block hitting, and the old enchant glow. And Fast swinging obviously, but plugins fix that so it's less of a concern

subtle blade
#

Can we not go into the version debate

opal adder
#

We're not debating though

subtle blade
#

It's had every single day and it serves no purpose here

#

I don't care. It will inevitably turn into one

lone fog
#

1.1 best version

tough kraken
#

alpha best

opal adder
#

Honestly yea, alpha is definitely superior

tough kraken
#

realtalk, the old world generation was so nice lol

opal adder
#

I miss the PvP from it, lets be real

tough kraken
#

lol

#

f

opal adder
#

Lol, we're messing with you guys, obviously.

tough kraken
#

yeah i think

#

dont wanna get a ban, so im outta here xd good evening, or whatever you have atm

opal adder
#

That easy to be banned?

tough kraken
#

idk, won't get that risk

subtle blade
#

not that easy but you're also having an irrelevant discussion in #help-archived

#

im lenient on my banning. unless you absolutely deserve it, i'll just tell you off

tough kraken
#

well idk if its 1.8 related (then just tell me), but
new PathfinderGoalMeleeAttack(this, EntityIronGolem.class, 1.0D, false));
what means the "false" at the end? i think its the same at 1.16 1.15 etc

subtle blade
#

best to open the constructor, find to what field it's assigned and figure out what it affects

#

that varies from goal to goal

tough kraken
#

k

subtle blade
#

thats what a lot of working with NMS is. going in blind and self-documenting things

#

its ever-changing, unsupported and mostly unmapped code

lone fog
#

And I use it a lot

#

:c

vocal venture
#

anyone know where to find dyna map for paper servers

sturdy oar
#

paper

#

Did you ever realize that spigot plugins work there 99%

limber summit
#

can it makes some lag If I do a sql SELECT request every 5 seconds (only want to fetch 1 raw)

ocean root
#

how do i make spigot not keep the chinks loaded and load them only when in view

limber summit
#

can I use a scheduleAsyncRepeatingTask

#

as it is deprecated

opal heron
#

any1 knows how to disable or remove the compass thingy from worldedit for opped players?

#

forgetti how i did it Β―_(ツ)_/Β―

#

E

frigid ember
#
    @EventHandler
    public void onPlayerMobInteract(PlayerInteractEntityEvent e) {
        if (e.getRightClicked() instanceof Horse) {
            Player pl = e.getPlayer();
            Entity ent = e.getRightClicked();
            ent.setPassenger(pl);
            
        }```
#

I want to drive a horse without using a saddle

#

So I made the player a passenger

#

but I can't seem to find a way to control the movement :/

ocean root
#

@frigid ember i have the clearlagg plugn how would i do it in that plugin

frigid ember
#

so?

#

I have to make a custom mob?

ocean root
tacit trellis
#

Do I have to request the permission to use paramorphism obfuscator?

frigid ember
#

@frigid ember Do you know how I can make players be able to drive the custom mob

#

:/

ocean root
#

@frigid ember did u take a look at the timings

tiny pebble
#

Say I have an Overworld world named name. If I were to create another world, being an End dimension, adding _the_end to it, thus resulting in name_the_end, would they be linked together?

ocean root
#

how do i make spigot use more then 1 cpu core?

tiny pebble
#

Pretty sure you can't as that's a Minecraft thing

#

They gotta update that

frigid ember
#

ohh ok

ocean root
#

theres ways

left plover
#

how do I check if a block is a door and then cast it to Door to use one of its methods? I'm using this but it doesn't get past if (block instanceof Door)

@EventHandler
private void onInteract(PlayerInteractEvent event) {
    if (event.getClickedBlock() instanceof Door) {
        ((Door) event.getClickedBlock()).setOpen(true);
    }
}
subtle blade
#

(1) which Door? there are two.
(2) Block will never be an instance of either Door. depending on which one you use, either its getState().getData() (deprecated in 1.13+) or its getBlockData() will

frigid ember
#

will mobs be seen as vehicles?

#

they wont

#

that'll be boats, minecarts

left plover
#

org.bukkit.material.Door and I'll try event.getClickedBlock().getState().getData() instanceof Door

update
it worked thank u ❀️

frigid ember
#

wtf

#

does it work? xd

#

guess ill use that than xd

#

oof

#

doesnt exist in .8 :/

#

wait

#

is that an event

#

there is an itemstand inside u :/

#

ohh xd

#

but how did you do that? 😐

left plover
#

why isn't this opening/closing the door? (if its useful info, door is always an iron door)

Door door = (Door) event.getClickedBlock().getState().getData();
door.setOpen(!door.isOpen());
lone fog
#

You need to update the block

left plover
#

sorry how would I do that?

#

oh I might be able to setType(block.getType(), true) actually

pastel arrow
#

BlockState.update();

left plover
#

oh

#

thanks

pastel arrow
#

np

left plover
#

@pastel arrow the door isn't moving still ;c

frigid ember
#

fuck

pastel arrow
#

the door isn't moving still ;c
Let me see the code please.

frigid ember
#

If I code it in a higher version

#

can I then make it compatible with 1.8?

left plover
#
@EventHandler
private void onInteract(PlayerInteractEvent event) {
    if (event.getClickedBlock().getState().getData() instanceof Door) {
        Door door = (Door) event.getClickedBlock().getState().getData();
        door.setOpen(!door.isOpen());
        event.getClickedBlock().getState().update();
    }
}
pastel arrow
#

Add debug. Check if the code is being ran.

frigid ember
#

@frigid ember ?

pastel arrow
frigid ember
#

can that be done or nahw

left plover
#

yes the code is being ran

pastel arrow
#

edit the message with the debug code and show log.

left plover
#
@EventHandler
private void onInteract(PlayerInteractEvent event) {
    Bukkit.getLogger().info("interact");
    if (event.getClickedBlock().getState().getData() instanceof Door) {
        Bukkit.getLogger().info("clicked door");
        Door door = (Door) event.getClickedBlock().getState().getData();
        door.setOpen(!door.isOpen());
        Bukkit.getLogger().info("tried to open door");
        event.getClickedBlock().getState().update();
        Bukkit.getLogger().info("update");
    }
}
[INFO] interact
[INFO] clicked door
[INFO] tried to open door
[INFO] update
lone fog
#

door.update();

left plover
#

not a method

tacit trellis
#

IS manual obfuscation allowed?

left plover
#

wdym?

#

1.8

#

because its an iron door

#

and its opening/closing like a normal door

frigid ember
#

Not only horse

#

Entities in general will be ok

left plover
#

I already do that, its opening closing and updating that seems to be the issue

frigid ember
#

@frigid ember

pastel arrow
#
door.setOpen(!door.isOpen());
blockState.setData(door);
blockState.update();
```Try this...
frigid ember
#

so i have a map (10752 x 5376) and how can I load in all the chunks so when people travel the TPS doesn't drop below 5 and crash the server. I have so far tried to use plugins such as FastChunkPregenerator and KeepChunks and when I ran the commands it would always crash the server (other info: I am using 1.16.1 and the server uses 6gb of ram)

pastel arrow
#

You need to check if the player is clicking the top half

hardy cedar
#

Weird bug I've found with what you're trying to achieve.
Tf

left plover
#

I came across that, you need to set the block to the bottom block if its door.isTopHalf()

pastel arrow
#

Did you try what I said?

frigid ember
#

@frigid ember Are you only wanting to do this with a horse?
@frigid ember

#

No

#

All entities

#

please help

#

But all apart

opal adder
#

What are you trying to do here?

left plover
#

sorry internet had a moment

#

thanks, I think I did something like that before but stopped because it was being glitchy cause I wasn't checking if it was the bottom half, thanks ill try it when I can

frigid ember
#

ILikeToCode

#

U asked me this

#

@frigid ember Are you only wanting to do this with a horse?

#

Multiple

#

But horse is 1 of them

left plover
#

sorry I just got back, I'll try it now, thank you for your help πŸ™‚

#

it works! thank you!

left plover
#

i did, I just realised theres absolutely no difference between Sound.DOOR_OPEN and Sound.DOOR_CLOSE, they're randomized either way

#

oofrip

frigid ember
#

is there a way to force a player to stop blocking with the shield

quick arch
#

It's a right click yeah?

#

Probably can listen to the PlayerInteractEvent, check action for right click, check if it's a shield, and then cancel it

frigid ember
#

hm ok ill look into that

worthy pewter
#

I'm hitting my head against a wall here, this code should search a dispenser and remove one of item (TNT in this case), and return true if it did or false if it didn't

#
    private boolean subtractItem(@NotNull Dispenser d, @NotNull ItemStack item) {
        for(int i = 0; i < d.getInventory().getSize(); i++) {
            ItemStack temp = d.getInventory().getItem(i);
            if(temp == null)
                continue;
            if(!item.isSimilar(temp))
                continue;

            int count = temp.getAmount();
            if(count <= 0)   //  Quantities are off by 1, a quantity of 0 means 1 item is in the stack
                continue;
            count -= 1;
            temp.setAmount(count);
            return true;
        }
        return false;
    }```
#

it works fine until there are 2 items left in the dispenser (in the same stack, if they are in different stacks it works fine)

#

at which point it tries to subtract one, stays with 2 items in the dispenser, and works infinitely (returning true)

subtle blade
#

you're gonna hit your head against the wall even harder when i tell you there's a method to do all this for you in a single line

#
private boolean subtractItem(Dispenser dispenser, ItemStack item) {
    return dispenser.getInventory().removeItem(item).isEmpty();
}```
quick arch
#

oh fun

subtle blade
#

the ItemStack's amount (ItemStack#getAmount()) is the amount it will try to remove

worthy pewter
#

that makes too much sense

#

thank you, let me do a quick test

subtle blade
#

(removeItem() returns a Map<Integer, ItemStack> of the items it couldn't remove, so isEmpty() just makes sure they were actually removed)

worthy pewter
#

same thing happens lol

#

could this have been a bug that was patched at one point?

subtle blade
#

what about it isn't working? how/where are you calling it? need some context here

#

removeItem(ItemStack) definitely works

frigid ember
#

basically what im trying to do is when they shield and get hit, it puts the shield on cooldown as if it were hit with an axe.

worthy pewter
#

I'm cancelling the dispense of a TNT and spawning it in custom so I can do tracking on it

frigid ember
#

so i dont want to prevent them from blocking per se

#

i want to them to stop blocking

subtle blade
#

Player#setCooldown(Material), though I don't think you can stop someone from blocking

frigid ember
#

i already have it put on cooldown, but they can still block when on cooldwon if they were arleady blocking before

subtle blade
#

really? lol

#

is there not a setBlocking() method?

worthy pewter
frigid ember
#

not that i know of

#

hm but that changes it client side

subtle blade
frigid ember
#

would they still be blocking server side?

#

yea but u cant set it unfortunately

subtle blade
#

right

#

i have a feeling that's because the client wouldn't like it

#

yeah

#

PIE would prevent you from starting a block but can't stop someone from blocking if they are already

frigid ember
#

i was thinking of something really jank like removing the shield from their inv and putting it back the next tick

#

but ill try the packet thing first and see if that works

quick arch
#

Just remove Shields completely

frigid ember
#

ez

subtle blade
#

You may have to update the state, @worthy pewter

#

I don't think that's necessary for inventory manip, but that's my only guess

#

That or one of your conditions earlier in the method aren't being met

frigid ember
#

@frigid ember wait which one did you try?

worthy pewter
#

it spawns the custom TNT, so it makes it through that method

frigid ember
#

the packet or the removing the shield item?

#

o

subtle blade
#

I would give the dispenser a call to update() if that call was successful, Tyler

#

That's my only guess

worthy pewter
#
        // Subtract item yourself
        Dispenser d = (Dispenser) e.getBlock().getState();
        MovecraftCombat.getInstance().getLogger().info("Removing: " + e.getItem().getAmount());
        e.getItem().setAmount(1);
        if(!subtractItem(d, e.getItem()))
            return;
        d.update(true);```
#

same thing rip

subtle blade
#

what version are you on?

worthy pewter
#

1.10.2

subtle blade
#

1

#

lol

worthy pewter
#

(bumped the enter on the numpad rip)

buoyant path
#

anyone here use mongo and could help?

subtle blade
#

i mean you are 6 majors out of date

worthy pewter
#

I'm well aware

subtle blade
#

but i don't recall any issues with removeItem()

#

yeah, removeItem() hasn't been touched since 2012

odd knoll
#

Issue is basically from what I can tell, it's not being called.

#

I assume it could be an async issue.

subtle blade
#

the item is being removed though right, Tyler? You said the custom tnt is being spawned, so the condition is being met?

worthy pewter
#

the item is not being removed

#

that's the issue

#

the dispenser just gets stuck at 2 items

#

and forever spawns TNT

odd knoll
#

Idiot me on that issue BTW, forgetting how I configed my own pl.

subtle blade
#

I'm wondering if maybe this event is called after the item is consumed and if cancelled the item is re-added

#

I know dispenser events are strange

#

ding ding ding

#

Call your logic 1 tick later

worthy pewter
#

then why did it work for all but 2 items...

subtle blade
#

BDE are called in numerous different places

#

it's possible it's handled elsewhere in special cases

#

if you run your tnt spawning logic on the next tick (just wrap it in a Bukkit.getScheduler().runTask(() -> { });) it should work okay

worthy pewter
#

well here's where the fun begins

#

I can't guarantee that dispenser will be there next tick

subtle blade
#

noice

rotund orbit
#

Hey I'm trying to figure out how to add attributes to ItemStacks. I think I need to use the addAttributeModifier() method, but I'm having trouble understanding Attributes and AttributeModifiers. Could anyone help me understand how to do this, perhaps with some quick example code or an explanation?

worthy pewter
#

maybe if there are 2 items subtract 2?

quick arch
#

no idea if that works for anything below 1.14

subtle blade
#

that's kind of what i'm leaning towards tyler, yeah

#

a tad hacky, but i mean... there's really no other option

rotund orbit
#

Oh do I have to worry about NBT Tags? Is there a way to do it without NBT Tags? NBT Tags continue to confuse me.

quick arch
#

look at Choco's reply

#

It's without nbt

subtle blade
#

No. Attributes aim to wrap them

quick arch
#

that

subtle blade
#

as does ItemMeta as a whole

rotund orbit
#

Is it easier to change NBT Tags than it is to store information in them? πŸ˜›

subtle blade
#

no, lol

rotund orbit
#

Haha alright

subtle blade
#

by using ItemMeta, you are modifying NBT

#

it's an abstract, version-independent way of doing so

rotund orbit
#

Well after I figure this out I might as well change my Food Spoilage plugin from item lore to NBT tags xD

quick arch
#

nbt's a mess

#

all of that to set an attribute

#

🀒

rotund orbit
#

Definitely gonna need to create some helper methods to abstract out some of this haha

wet bronze
#

Anyone here willing to code a really simple horse ownership plugin that lets you claim horses and summon/unsummon your horses? πŸ˜ƒ

rotund orbit
#

Thank you for the help

#

That sounds like an interesting project @wet bronze

#

I saw a plugin recently that let you store the horse in a saddle.

wet bronze
#

Oo really?

#

Does it work for 1.16? lol

rotund orbit
#

I'm not sure, I think I saw it in either mechanics or tools and utilities

wet bronze
#

I think this is what you're talking about

#

But it's from 2014 : (

#

Unless anybody here knows how to update plugins

quick arch
#

Storing entities in nbt πŸ€”

simple tiger
#

how do i convert Bukkit.getServer().getOnlinePlayers().size() to a double that i can devide by 50 to set as a bossbar progress?

worthy pewter
#

(double)

simple tiger
#

i feel like i should know this, but HHHWWHHHHAAAAAAATTTTT????

worthy pewter
#

( (double) Bukkit.getServer().getOnlinePlayers().size() ) / 50

simple tiger
#

thx

#

then what do you use?

worthy pewter
#

I think you could also do the .size() / 50d

subtle blade
#

progress for a boss bar is a double

#

0.0 - 1.0

idle parrot
#

anyone now how to make there own command in config using Mycommand

worthy pewter
#

well choco

#

I think this is impossible in the same tick

#

if I subtract two from the dispenser, it now has -1 items (which in my understanding should be 0)

#

then add doesn't do anything

#

is there some way to trigger the task to run later in the same tick?

subtle blade
#

not to my knowledge

uncut bough
#

aight any venturechat experts here?

their docs are garbage and they don't have a discord

worthy pewter
#

ok, I was able to get it working with a task run later

#

which has issues due to the other plugins I have running, but

frigid ember
#

anyone know how i can fully load my world

#

its about 10k x 5k

#

all the plugins i have used seem to crash

#

[10:21:15] [Server thread/ERROR]: Could not load 'plugins\LearningPlugin.jar' in folder 'plugins'
org.bukkit.plugin.InvalidDescriptionException: Invalid plugin.yml
at org.bukkit.plugin.java.JavaPluginLoader.getPluginDescription(JavaPluginLoader.java:170) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:138) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.bukkit.craftbukkit.v1_14_R1.CraftServer.loadPlugins(CraftServer.java:350) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.DedicatedServer.init(DedicatedServer.java:194) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at net.minecraft.server.v1_14_R1.MinecraftServer.run(MinecraftServer.java:776) [spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_261]
Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token
found character '\t(TAB)' that cannot start any token. (Do not use \t(TAB) for indentation)
in 'reader', line 5, column 1:
t:

#

at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:419) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:227) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingValue.produce(ParserImpl.java:586) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:148) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:124) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:236) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:227) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:215) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:144) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.yaml.snakeyaml.composer.Composer.getNode(Composer.java:85) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:108) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:139) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:524) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.yaml.snakeyaml.Yaml.load(Yaml.java:452) ~[spigot-1.14.4.jar:git-Spigot-9de398a-9c887d4]
at org.bukkit.plugin.PluginDescriptionFile.<init>(PluginDe

worthy pewter
#

Do not use \t(TAB) for indentation

frigid ember
#

okay

#

korea chat

#

.

#

how to fix bug?

#

not error at eclipse

#

and plugin.yml file

subtle blade
#

Your plugin.yml file uses the tab character instead of spaces

#

YAML does not like tabs

frigid ember
#

ah

#

thanks

#

name:
version: 1.0
main: test1.Main
commands:
t:

subtle blade
#

Well, you can put things on new lines, just use spaces instead

wet bronze
#

Would anyone be willing to update a plugin for me? ❀️

subtle blade
#
commands:
  t:
    description: "Hello world!"```
frigid ember
#

like this? name:
version: 1.0
main: test1.Main
commands:
t:
description: "Hello world!"

subtle blade
#

yes πŸ™‚

frigid ember
#

Thanks

#

ill try

wet bronze
#

The source code is also available

frigid ember
#

[10:43:14] [Server thread/ERROR]: Could not load 'plugins\LearningPlugin.jar' in folder 'plugins'
org.bukkit.plugin.InvalidDescriptionException: name is not defined
how to fix it?

wet bronze
#

Anyone? 😦

frigid ember
#

OOF

#

IM SO DEAD

#

Thanks

wet bronze
#

Again I'm not hiring.

quick arch
#

He's using it for a boss bar, not a leveling system ._.

keen compass
#

even if you were using it for a leveling system what is wrong with using a double o.O

quick arch
#

^

frigid ember
#

how to break up the plugins?

#

anyone πŸ˜„

balmy sentinel
#

How does the leveling system actually working in Minecraft? Like how much exp is in each level (talking about the level bar above the hotbar). I'm trying to create a point system where it'll show the users points there, but I haven't quite figured it out yet

fleet crane
#

I dont think its linear

#

MC wiki probably has a very in depth article on it

frigid ember
#

md_5 nice meet you are you spigot homepack admin

balmy sentinel
#

I'll take a look at it now! and it's not level 1 is 7exp and level 2 is somewhere between 11-13exp.

high mantle
#

i wish there was a .getLineRaw() or something along those lines to return a string from that sign without any color formatting in it

balmy sentinel
#

@quick arch yeah I just found it working on implementing it now!

quick arch
#

πŸ‘

keen compass
#

or just do a simple replace function to remove color codes

high mantle
#

but its me rn

frigid ember
#

How do I import plug-ins into eclipse and modify them?

#

sorry

high mantle
#

i mean

#

have you gotten permission from the person?

#

pretty sure that doesn't give you source code

#

you'd have to decompile it

#

or get the source code from the author

frigid ember
#

aha thanks im first at plugin so I didn't know.

high mantle
#

ah

frigid ember
#

me too

#

bad at english

#

so im using with translation

#

can i get the plugin Social code

#

everything ok

#

i wanna just learn

wheat mirage
#

Hey, anyone here used Java's hibernate before?

keen compass
#

== is a reference check of equality, that is it checks if both references point to the same memory address. => equals or less then. =< equals or greater then. <= greater then or equals.

idle parrot
#

how would i make a /spawn command with mycommand plugin

balmy sentinel
#

I feel like a derp πŸ™‚ I coded that whole experience until the next level in a method and it turns out when I was searching how to add the exp to a player there is a method to setLevel so all I needed to do was send it the point value

lusty basin
#

One of my users connected to the server today and found his achievements gone, his inventory gone, and he was spawning at 0,0,0 (original spawn for world). Is this a known issue? Any way to restore his prior player data? Is this a known issue?

#

How do you mean validate? Can I check something on the server?

#

What about the player data files?

#

overridden or overwritten?

#

He hadn't logged onto the server for about two weeks and then was on a different client computer. I'm wondering if the minecraft authentication server somehow assigned a new UUID to his account. Is that plausible? Then there might be dupe UUID files for him on my server?

#

I'll check those.

#

Thank you!

#

This is weird. Yesterday all these files got backed up. (I deleted the beginning of each UUID for privacy reasons)... Anyone seen this before?

https://cldup.com/sTRY8U-Co2.png

quick arch
#

they are updated everytime the player goes off

wheat mirage
#

Can someone explain why when parsing RGB chat colors, TextComponent skips 12 chars instead of 6 and only parses every second char?

#

(fromLegacyText)

winged sparrow
#

Text components don’t cooperate with chatcolor in the text

#

Use .color method

wheat mirage
#

@winged sparrow Thanks for answering a question I didn't ask, nor did I want or need the answer to

#

For anyone wondering, the answer is the weird & symbol is put before every letter of the rgb hex

#

Don't quite get why

#

I assume it's for backward compatibility stuff? @fleet crane

lusty basin
#

Anybody know command in console to print the path of the install data or world info? I have several backups and am having difficulty identifying which one is currently running. Linux server. ps -ef | grep spigot just shows the command to launch, but doesn't show which world is in use.

buoyant path
#

[03:21:16 warn]: java.lang.NoSuchMethodError: com.mongodb.client.internal.mongoclientdelegate.<init>(lcom/mongodb/connection/cluster;lorg/bson/codecs/configuration/codecregistry;ljava/util/list;ljava/lang/object;lcom/mongodb/client/internal/crypt;)v

#

could anyone help?

#

Im integrating mongo in my project, even shaded it

#

but apparently these methods dont exist

#

yes its lowercase im sorry

#

google chrome fucked it

winged sparrow
#

I was trying to help, though I admit I only read TextComponent and color. No need to be so standoffish.

spark phoenix
#

Is there a setting that I can tweat to limit iron-golem spawns?

#

One of my players' island is full of naturally spawned iron golems, can't figure out why lol

quick arch
#

FarmLimiter plugin by filoghost

spark phoenix
#

I know that one but it's paid.

fleet crane
#

@buoyant path make sure you arent using minimizejar

#

@lusty basin cat /proc/<process id>/cwd

buoyant path
#

well, ive updated the API thats from, and it now says bad class: class file has wrong version

#

is it possibly because its in a higher version of java?

fleet crane
#

yes

lusty basin
#

@fleet crane -- that's a directory and it shows various sipgot / minecraft files. 'cat' won't work on it, but ls does.

fleet crane
#

realpath /proc/<process id>/cwd

silver girder
#

So, I have a question that has been asked a billion times, but I am asking, because I dont know the answer, tried googling, didnt me much of an anwer.

#

The querstion, to upgrade Spigot from 1.15.2 to 1.16.1 is just a matter of switch the jars right?

fleet crane
#

yes

silver girder
#

No need to convert or anything like that?

lusty basin
#

yes

grim halo
#

Yes switch the jars and run your server with --forceUpgrade once

silver girder
#

Ohh

#

At the end of the start script?

grim halo
#

y

fleet crane
#

not required but good practice

silver girder
#

I rather have good pratice

#

Okay, thank you so much!

#

I am sure this is going to be to all other future minecraft upates.

#

Well, the big ones at least

lusty basin
#

Okay, @fleet crane . That was great. (Thank you!) It showed me a directory that doesn't have spigot in it--

realpath /proc/29975/cwd/

/tmp/mc2/minecraft2

ls /tmp/mc2/minecraft2/

logs origuser.json plugins usercache.json world world_nether world_the_end

I do have spigot in a different directory...

ls /opt/minecraft/spigot*

/opt/minecraft/spigot-1.15.2.jar /opt/minecraft/spigot-1.16.1.jar /opt/minecraft/spigot.yml

How did I start that world where spigot isn't located?

frigid ember
#

Don't know if this is the right place to ask but where would be the best place to learn to code Minecraft plugins. I know a bit of JavaScript.

fleet crane
#

because thats how computers work

#

you can run programs in a place different to where the program is

#

spigot puts the world in your current directory

#

which for you is /tmp/mc2/minecraft2

#

you can use the cd command to change directories

frigid ember
#

yo whats the best place to learn how to code using the spigot API, i used some crappy outdated tutorials to learn, but now my friend wants to start. what should i send him?

lusty basin
#

Looking at my history, I typed start.sh without a path prior to it. I was in the /opt/minecraft dir when I ran it, so I think.

frigid ember
#

ok

fleet crane
#

you mustve done something related to /tmp/mc2/minecraft2/, spigot doesnt just place files randomly

frigid ember
#

Alright I will look in to it

grim halo
#

@frigid ember I think you should learn the basics of java first. There are plenty of tutorials and it wont take long. JavaScript and Java are very different languages so you will need to do that. After that you can check out tutorials:_
https://www.youtube.com/c/TheSourceCodeTutorials/playlists

frigid ember
warm stirrup
#

looking for some advice:
I'm using events and I need to be able to get the instance of an inventory after an event occurs (in this case i want to check the contents of a user's inventory after selecting a trade using TradeSelectEvent to determine if I want to cancel the event or not.

i dont think actually canceling the event like normal is possible due to the fact events run before the actual event takes place. how should I implement this? googling didn't seem to help me :/

#

my usage is I would like to cancel the event if they are trying to trade a specific ItemStack

fleet crane
#

almost every event runs before so that it can be cancelled

#

if the event ran afterwards cancelling wouldnt work because there would be nothjing to cancel

warm stirrup
#

yes

#

my question is how could i implement a way to see a user's inventory after an event occurs so I could revert changes if needed

fleet crane
#

why do you need to see it after

#

why can you not get the information you need from TradeSelectEvent

warm stirrup
#

using Player.getInventory doesnt work during the TradeSelectEvent because the inventory hasnt actually been updated yet

grim halo
#

You could either prevent the selection if forbidden items completely with the InventoryClickEvent
Or check the invs in the InventoryCloseEvent...

fleet crane
#

if (event.getInventory().getSelectedRecipe().getIngredients().contains(stack)) event.setCancelled(true)

#

or something along those lines

#

you're looking at this the wrong way

#

all the info you need is definitely in the event

grim halo
#

Oh its not a custom trade gui...

warm stirrup
#

nonono its just a vanilla trade gui ^^

#

also thanks i will look into that

idle parrot
#

Anyone know how to add custom items no mods

frigid ember
#

Hi
Hi can someone help me download the Metrics Plugin, Plugin PermissionsEx because I do not think and I'm trying to use the Plugin VipZero
Please
I'm waiting
I'm Brazilian and I'm using Google Translate Translation should be a little Bad
?

buoyant path
#

how am I meant to use things coded for newer versions of java with spigot

#

isnt minecraft capped at java 8

warm stirrup
frigid ember
#

That's right, now just missing the Metrics Plugin

#

Aaah went to see the link but does not have version 1.8

#

😦

silent shuttle
#

My suggestion is to use luckperms because it is faster

#

And has a web panel t too

wise flame
#

https://imgur.com/a/oVWqDpc
^ The enchanted books check never returns true; it's not finding an enchanted book even though it SHOULD be an enchanted book
I'm working on adding something that generates a new enchant if an enchanted book has a certain enchant.
I'm getting stuck on this check to find if the result of my trade is an enchanted book so I can swap out the trade

frigid ember
#

@silent shuttle Hi, and that I need the PermissionEx plugins and Metrics to be able to use VipZero

silent shuttle
#

Okay

#

You need Vault too

#

Do you have it

#
  • do you have an economy plugin e.g. Essentials
frigid ember
#

I don't have

silent shuttle
#

Can u tell what VipZero is? I can’t search Rn because on ipad

#

Download Vault from bukkit

frigid ember
#

VipZero is a Vips Plugin for Factions

silent shuttle
#

What does it do.

#

Add On?

#

Brb

frigid ember
#

When executed with a command it gives a Vip to a Player in which he uses the Kits they have seen

#

Brb
@silent shuttle I don't get it.

wise flame
#

Actually I got an answer to my question

#

nvm

frigid ember
#

@silent shuttle If you can help me I'll be very grateful

frigid ember
#

anyone using ultimate ktis plugin here?

#

does ultimatekits.admin

#

enable thre group that has it to access all kits available?

#

or not

wise flame
#

How do I import the API of another plugin to use in my own?

wheat mirage
#

Is there any way around the server erroring when teleporting between worlds without using runTask()?

#

runTask allows events to occur inbetween the event teleported from, and the actual teleportation

#

Help appreciated

lusty basin
#

I'm trying to figure out if my spigot server was hacked because a bunch of files seem to be missing suddenly. Noticing in the world/region folder, I only have:

ls -al

total 36872
drwxr-xr-x 2 root root 12288 Jun 30 04:35 .
drwxr-xr-x 8 root root 132 Jul 24 05:35 ..
-rw-r--r-- 1 root root 6070272 Jul 24 04:20 r.0.0.mca
-rw-r--r-- 1 root root 6701056 Jul 24 05:35 r.0.-1.mca
-rw-r--r-- 1 root root 5779456 Jul 24 04:00 r.0.-2.mca
-rw-r--r-- 1 root root 6623232 Jul 24 04:20 r.-1.0.mca
-rw-r--r-- 1 root root 6689545 Jul 24 05:35 r.-1.-1.mca
-rw-r--r-- 1 root root 5871236 Jul 24 04:00 r.-1.-2.mca

I prior backup from June 30th showed 485 files in this directory....

ancient haven
#

Hi there, good morning!

Yesterday, I swapped my spigot server.jar from back when 1.16.1 was just released with a newly built one to get all the changes that have been made in the meantime.
Upon restarting the Server, one of my maps (integrated using MultiVerse where I did not make any changes) was completely wiped and regenerated to its natural state.

What could have caused this and is there a way for me to salvage all the hard work the players had put in?

#

@lusty basin is it only missing files or has your world rolled back, too?

lusty basin
#

The directory where I had previously run start.sh doesn't have much in it now.

ls -al

total 8
drwxr-xr-x 7 root root 130 Jul 24 03:42 .
drwxr-xr-x 3 root root 24 Jun 30 02:38 ..
drwxr-xr-x 2 root root 318 Jul 24 03:20 logs
-rw-r--r-- 1 root root 972 Jul 24 03:42 origuser.json
drwxr-xr-x 3 root root 23 Jun 12 05:53 plugins
-rw-r--r-- 1 root root 972 Jul 24 02:36 usercache.json
drwxr-xr-x 8 root root 132 Jul 24 05:50 world
drwxr-xr-x 3 root root 57 Jul 24 05:50 world_nether
drwxr-xr-x 3 root root 56 Jul 24 05:50 world_the_end

Missing spigot and in plugins, I had two previously, now only one. Log files only go back to 7/15.

I'm connecting to the server now to see if old creations are still there.

ancient haven
#

Upon restarting the Server, one of my maps (integrated using MultiVerse where I did not make any changes) was completely wiped and regenerated to its natural state.
@ancient haven
Found one more map that has been completely reset

2 of 6 maps have been rolled back

silent shuttle
#

@silent shuttle If you can help me I'll be very grateful
@frigid ember yes for sure, im back home

lusty basin
#

So far, @ancient haven -- my maps are looking correct. But I haven't restarted the server yet. Afraid to try.

wise flame
#

Did you not make world backups?

ancient haven
#

πŸ˜’ πŸ€¦β€β™‚οΈ

#

I will now, that's for sure

wise flame
#

afaik, without any sort of backup, there's no way to recover your data.

#

although

#

I could be wrong

#

but I've had a case where I tried to make a Multiverse world and it regenerated my exact save

#

are you sure the world files have been rolled back, or is it an error that's causing you to go to a new version of each world?

ancient haven
#

How would you go about determining that? What I know so far is that the server starts and stops without errors and it loads and saves the rolled back version of the affected worlds. Are there any files in the world directory I could check?

wise flame
#

hmm

#

Seems like a question for the MV discord. I don't know too much about Minecraft worlds.
As a guess, level.dat would be a good place to start.

ancient haven
#

OK, I found something... I have an old (8. July), manual backup of the world. its region/ folder contains ~450 *.mca files.
The current version only contains ~15 *.mca files

#

Seems like a question for the MV discord. I don't know too much about Minecraft worlds.
As a guess, level.dat would be a good place to start.
@wise flame
what would I look for in level.dat? opnening in text editor it looks like gibberish to me πŸ˜„

wise flame
#

honestly, just the Windows modification date

#

if Minecraft isn't touching it at all, the level.dat will say a recent time

ancient haven
#

30 minutes ago when I restarted the server

wise flame
#

Huh. The default autosave timer is five minutes

ancient haven
#

looks like that's when it regenerated

wise flame
#

Unless you changed it, it should be within the last five minutes

ancient haven
#

the server is currently not running, maybe that's why

wise flame
#

ah, I see

frigid ember
#

hi

#

anyone know how I can integrate other plugin api place holder to essentials?

agile girder
#

i know this is not the correct place to ask about this, but, what is the difference between ubuntu desktop, and ubuntu server? Can you still run a properly made server in ubuntu desktop?

tiny dagger
#

how would you guys go about giving a skull a skin in a non server locking way? πŸ€”

#

i've noticed how bad is setOwningPlayer

#

can i like replace the game profile manually? πŸ€”

frigid ember
#

how to

#

i like to code

#

look

#

How do i fix this mess

#

im using a premium group plugin

#

I am using essentials chat instead its built in feature (which is shit)

agile girder
#

oh ok, thx

sage summit
#

How would I create a new file that stores, for example, player kills and deaths, then puts that new file inside a folder called playerData?

grim halo
wheat mirage
#

https://hub.spigotmc.org/jira/browse/SPIGOT-6002
Is there any way around the server erroring when teleporting between worlds without using runTask()?
runTask allows events to occur inbetween the event teleported from, and the actual teleportation
Help appreciated

grim halo
#

Or you can just write a new .yml / .json / .dat / .bin / .txt (whatever you like) and store per player data

sage summit
#

how would i create a new file every time a player joined?

grim halo
#

Just like you would normally do with java. As start path you can use Plugin#getDataFolder()

sage summit
#

how do i create the folder to put them in?

grim halo
#

Like you normally would in java πŸ˜„ with mkdir() or mkdirs()

sage summit
#

ok, im new to doing stuff with files and java in general

grim halo
sage summit
#

thanks!

grim halo
#
    File subFolder = new File(plugin.getDataFolder() + File.separator + "data");
    if (!subFolder.exists()) {
      subFolder.mkdirs();
    }
quick turtle
#

I would recommend instead of subFolder set it to the actual playerFile ex. File playerFile = new File(plugin.getDataFolder() + File.separator + "data", uuid +".yml");, then instead of subFolder.mkdirs() yuo can do playerFile.getParentFile.mkdirs(), Lastly on a seperate line but still in the if statement playerFile.createNewFile() (change !subFolder.exists() to playerFile.exists() as wel)

#

That just lets u get to the player file easier instead of anothe rif statement to create that file and so forth

grim halo
#

Or he just caches the subfolder as a class scope variable... then write a method getPlayerFile(Player player)
return new File(subFolder, player.getUUID().toString() + ".yml");
Like you would normally do instead of writing the whole path new...

#

Also you never use playerFile.createNewFile() when working with the FileConfiguration api

spring arch
#
private val parent = "./data".toPath()
fun getPlayerFile(id: UUID): Path = parent
    .also { it.createDirectories() }
    .resolve("$id.data")
limber forge
#

Where can i see My Posts and How many i have on SpigotMC?

spring arch
#

probably in ur profile

limber forge
#

Messages?

frigid ember
#

when using onTabComplete how do I restrict it to only the first argument? i dont see a parameter that gives which argument is being typed

@Override
    public Iterable<String> onTabComplete(CommandSender sender, String[] args) {
        final String firstArg = (args.length > 0) ? args[0].toLowerCase() : "";
        return Iterables
                .transform(Iterables.filter(ProxyServer.getInstance().getPlayers(), new Predicate<ProxiedPlayer>() {
                    @Override
                    public boolean apply(ProxiedPlayer player) {
                        return player.getName().toLowerCase().startsWith(firstArg);
                    }
                }), new Function<ProxiedPlayer, String>() {
                    @Override
                    public String apply(ProxiedPlayer player) {
                        return player.getName();
                    }
                });
    }
spring arch
#

check length of the args

frigid ember
#

k

#

That works, how do I return a blank iterable though? returning null doesn't work

spring arch
#

Collections.empty*()

frigid ember
#

I get The method empty() is undefined for the type Collections

grim halo
#

isEmpty()

spring arch
#

emptyAnyTypeOfCollection

grim halo
#

Wait i didnt read waht was going on

frigid ember
#

what is emptyAnyTypeOfCollection? Is it a method on Collections?

spring arch
#

dude

frigid ember
#

oh im dumb

#

lol

round igloo
#

I'm trying to make some custom items and I am creating a custom yml file with it. I am struggling to set a default lore and displayname. currently it is just makes this

weapons:
  thunderaxe:
    name: []
    lore: []

Here are some of the files
https://cdn.discordapp.com/attachments/493232350029807616/736151574920953885/unknown.png
https://cdn.discordapp.com/attachments/493232350029807616/736151607619747840/unknown.png
https://cdn.discordapp.com/attachments/493232350029807616/736151640213815316/unknown.png

grim halo
#

So there are a couple of things wrong here...

#
  1. First of all your main class uses a ton of static abuse. Dont do that. Static is a pretty rare keyword that should be used with caution.
    You can write >90% of your plugins without a single static keyword.

  2. A list should always have a type. eg List<String>

  3. Your name should not be a List but rather a single String as you cant have multiple lines in a item display name.

  4. Your naming conventions are all over the place.

    • ClassNameLikeThis
    • methodNameLikeThis()
    • fieldNameLikeThis
    • STATIC_FINAL_LIKE_THIS
#

You pass instances but never use them.
I think you should rly try to learn a bit more of the java basics before writing more plugins.

dusky sigil
#

what does args[0] mean? and what happens if i use args[1]?

grim halo
#

Thats how you access values from an array. Java 101

#

Or rather programming 101

#

args[0] will access the first element in the array

dusky sigil
#

so

#

say i input /command word1 word2

#

args[0] will output word1 and args [1] will output word2?

grim halo
#

command is the label, word1 is args[0] and word2 is args[1]

#

yes

dusky sigil
#

nice

#

thanks

odd knoll
#

Also just remember Java will throw an error if you try to get an index larger than there is in an array.

dusky sigil
#

like a null?

odd knoll
#

So say you used args[0] on that command and just did /command without the world1, if you don't check the size of args it will throw an IndexOutOfBoundsException.

dusky sigil
#

why not a null though?

#

args[0] == null

#

?

odd knoll
#

args.length < 1

dusky sigil
#

oh

#

okay

odd knoll
#

It's just an error it throws.

dusky sigil
#

so i can catch it?

odd knoll
#

Not everything will throw a NullPointerException.

#

You can catch it, but it would be better to just check the length of args in the first place.

dusky sigil
#

wont that still make a error though?

#

i dont want the internalerror text..

odd knoll
#

if (args.length < 1) {
return;
}
args[0]

If you use that, it will never run the args[0] if there isn't actually an args[0] as it returns before it.

dusky sigil
#

ohh okay

#

thanks

#
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (label.equalsIgnoreCase("f") && args[0] == "create") {
            if (CheckFile = new File(getDataFolder(), args[1] + ".yml").exists()) {
                sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&e&lFlash&a&lPlex &e>>") + ChatColor.RED + "Sorry, this faction name is taken.");
            }
            else {
                sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&e&lFlash&a&lPlex &e>>") + ChatColor.GREEN + "You have created the faction " + args[1] + " successfully!");
                File file = new File(getDataFolder(), args[1] + ".yml");
                FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);
                cfg.set("faction", args[1] + "");
                try {
                    cfg.save(file);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            
            }
        }``` why is this not working? im inputting /f create name and i get nothing
sturdy oar
#

dude

#

you don't compare string with ==

#

that's like java basics , learn java

dusky sigil
#

Yeah i replaced it with .equals, sorry

spring arch
#

you can compare strings using == if you are sure that it is from string pool

dusky sigil
#

nah it works now

spring arch
#

also you don't need to check for label

frigid ember
#

anyone knows how to make formats like that: formats: default: priority: 9999 permission: 'chm.default' format: '&8%player_name% &7Β» ' but user can create unlimited number of it?```

formats:
  default:
    priority: 9999
    permission: 'chm.default'
    format: '&8%player_name% &7Β» '
  exmaple1:
    priority: 8888
    permission: 'chm.example1'
    format: '&8%player_name% &8Β» '
spring arch
#

just store configuration sections?

dusky sigil
#

a... config?

frigid ember
#

yeah but i need to somehow check that priority

spring arch
#

wdym

frigid ember
#

if its bigger than other ones

spring arch
#

can u provide a use case

frigid ember
#

??

spring arch
#

i don't understand what you want

dusky sigil
#

i think he wants to make a condig?

#

config**

frigid ember
#

i want to have in config one default chat format, but make possible to user create other ones

#

when player have permission and uses bigger priority

spring arch
#

and the problem is?

frigid ember
#

how to check priority

dusky sigil
#

...................................what?

spring arch
#

parse chat formats or whatever it is

frigid ember
#

if is bigger that that other ones

spring arch
#

and sort it by priority?

frigid ember
#

but hey i need for loop for that

spring arch
#

do it once?

dusky sigil
#

I have multiple yml files, how can i get a list of thier names?

spring arch
#

dir.list()

dusky sigil
#

or if thats not possible i have another idea

spring arch
#
class ChatFormat(val priority: Int, val permission: String, val format: String) : Comparable<ChatFormat> {
    override fun compareTo(other: ChatFormat): Int = other.priority.compareTo(priority)
    override fun toString(): String {
        return "ChatFormat(priority=$priority, permission='$permission', format='$format')"
    }
}

fun main() {
    val formats = arrayOf(
        ChatFormat(100, "a.1", "a"),
        ChatFormat(200, "a.2", "b")
    )
    formats.sort()
    println(formats.contentToString())
}
sturdy oar
#

kotlin bruh

frigid ember
#

WHO HERE USES KOTLIN

spring arch
#

Kotlin rocks.

sturdy oar
#

I don't like my plugins having to weight >200KB

#

for no reason

spring arch
#

Proguard.

#

And it's gone

#

Also there are flags for Kotlin's compiler to remove all stuff it will add

#

Like null checks, etc.

sturdy oar
#

I still prefer Java + lombok

frigid ember
#

@spring arch thats that solution?

spring arch
#

to each his own

frigid ember
#

or no?

spring arch
#

@frigid ember yes that's how I would implement what you want

blissful verge
#

Someone tf does this meaaaan [13:50:20] [Server thread/ERROR]: Error occurred while enabling TickPlugin v1.0.0 (Is it up to date?) java.lang.NullPointerException: null at me.novato.tickplugin.Main.onEnable(Main.java:51) ~[?:?] at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[server.jar:git-Spigot-800b93f-8160e29] at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:352) [server.jar:git-Spigot-800b93f-8160e29] at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:417) [server.jar:git-Spigot-800b93f-8160e29] at org.bukkit.craftbukkit.v1_15_R1.CraftServer.enablePlugin(CraftServer.java:462) [server.jar:git-Spigot-800b93f-8160e29] at org.bukkit.craftbukkit.v1_15_R1.CraftServer.enablePlugins(CraftServer.java:376) [server.jar:git-Spigot-800b93f-8160e29] at net.minecraft.server.v1_15_R1.MinecraftServer.a(MinecraftServer.java:457) [server.jar:git-Spigot-800b93f-8160e29] at net.minecraft.server.v1_15_R1.DedicatedServer.init(DedicatedServer.java:267) [server.jar:git-Spigot-800b93f-8160e29] at net.minecraft.server.v1_15_R1.MinecraftServer.run(MinecraftServer.java:784) [server.jar:git-Spigot-800b93f-8160e29] at java.lang.Thread.run(Unknown Source) [?:1.8.0_261]

frigid ember
#

oh but i dont understand what appening in that kotlin xd

#

NPE

spring arch
#

@blissful verge see line 51 of ur plugin

frigid ember
#

in main.java

blissful verge
#

if (!cfg.getString("CONFIG_VERSION").equalsIgnoreCase("1.1.0"))

spring arch
#

getString returned null

blissful verge
#

Also dont call me out if is on the same line

spring arch
#

@frigid ember parse your sections into data class (ChatFormat in my example) and sort it once

frigid ember
#

programm it

spring arch
#

that's a great question

#

creating does not mean you download it

frigid ember
#

yep

#

in java or kotlin eazy

#

i recommend some bukkit tuts on youtube

#

or skript maybe

undone narwhal
#

What's a combo minigame?

frigid ember
#

you can use

#

what?

spring arch
#
class ChatFormat(val priority: Int, val permission: String, val format: String) : Comparable<ChatFormat> {
    override fun compareTo(other: ChatFormat): Int = other.priority.compareTo(priority)
    override fun toString(): String {
        return "ChatFormat(priority=$priority, permission='$permission', format='$format')"
    }
}

fun main() {
    val yaml = YamlConfiguration.loadConfiguration(File("blablabla.yml"))
    val formats = yaml.getKeys(false).map { s -> yaml.getConfigurationSection(s) }.map { s ->
        ChatFormat(s.getInt("priority"), s.getString("permission"), s.getString("format"))
    }.sorted()
    val p = org.bukkit.Bukkit.getPlayer(id)
    val format = formats.find { p.hasPermission(it.permission) }
}
blissful verge
#

now the error is weirder

sturdy oar
#

Guys how often can an entity be damaged?

#

in ticks

blissful verge
undone narwhal
#

Infinite I think

blissful verge
#

Every 1 second I think?

spring arch
#

Yes

scenic carbon
#

wdym as in combo minigame

spring arch
#

@blissful verge Don't create instances of your plugin

blissful verge
#

wdym

spring arch
#

i'm meaning exactly what i siad

grim halo
#

@sturdy oar There is a entity bound limit. You can change it i think. Other than that there is no limit.

blissful verge
#

I dont understand

spring arch
#

you create instance of your plugin here at me.novato.tickplugin.events.Ticks.<init>(Ticks.java:16) ~[?:?]

sturdy oar
#

@grim halo yeah I am trying to damage a player each tick, however it doesn't really feel like he's getting damaged often

spring arch
#

@sturdy oar there is setNoDamageTicks

#

or something like that

sturdy oar
#

ty i'll try those

grim halo
#

@sturdy oar You can just amnually reduce the health every tick and fire an damage event yourself

spring arch
#

bruh

sturdy oar
#

i am doing LivingEntity#damage()

spring arch
#

setMaximumNoDamageTicks

#

and setNoDamageTicks

grim halo
#

Yes but this will also affect a lot of environmental behavior and might make the game rly hard to play

sturdy oar
#

yeah because

#

I'd need only my stuff to be able to damage faster

#

I basically am trying to modify poison speed

spring arch
#

there is a thing called attack speed

#

it's an attribute for item

#

oh posion

sturdy oar
#

yeah i have custom runnable objects

#

that basically completely override vanilla poison

#

however I'm limited by the LivingEntity#damage() delay

#

would I have to use packets?

spring arch
#

no

grim halo
#

Packets wont help you here

#

I mean... Kind of

frigid ember
#
class ChatFormat(val priority: Int, val permission: String, val format: String) : Comparable<ChatFormat> {
    override fun compareTo(other: ChatFormat): Int = other.priority.compareTo(priority)
    override fun toString(): String {
        return "ChatFormat(priority=$priority, permission='$permission', format='$format')"
    }
}

fun main() {
    val yaml = YamlConfiguration.loadConfiguration(File("blablabla.yml"))
    val formats = yaml.getKeys(false).map { s -> yaml.getConfigurationSection(s) }.map { s ->
        ChatFormat(s.getInt("priority"), s.getString("permission"), s.getString("format"))
    }.sorted()
    val p = org.bukkit.Bukkit.getPlayer(id)
    val format = formats.find { p.hasPermission(it.permission) }
}

@spring arch i dont understand kotlin 😦

grim halo
#

You can send sound packets and make it look like the player is actually losing health every tick.
So -> reduce health -> send sound

sturdy oar
#

Mh ok, i'll have some fun with NMS

grim halo
#

You can send a sound packet without nms i think.

sturdy oar
#

yes i can play effects

grim halo
#

Spigot does exactly that if you play a sound for a specific player

#

Just sending a packet

spring arch
#

Just call tickPotionEffects more frequently

sturdy oar
#

what does that do

#

oh... no i completely override potion damage

spring arch
#

ticks active potion effect?

sturdy oar
#

and apply it with my own runnables

#

there is no damage by poison, i call damage() every X ticks

#

I think this is an issue with Minecraft itself

spring arch
#

Make it so it do damage?

#

there is no issue

#

there is a delay between damage

grim halo
#

How would you manually tick the potion effects in spigot?

spring arch
#

Only by calling NMS stuff :)

sturdy oar
#

there is a delay between damage
@spring arch so I need NMS to change this?

spring arch
#

why screenshot uploads are disabled

#

thanks md_5

sturdy oar
#

you're not a verified member

spring arch
#

bruuh

#

what a way to increase members count

sturdy oar
spring arch
#

whatever

#

if you still want to use potion normally

#

It's MobEffectList.

#

Don't know why it's called list lol

#

@sturdy oar another solution is to set no damage ticks to zero, damage entity, and revert it back to previous value

#

maybe that's what you want

sturdy oar
#

I'll try some stuff

spring arch
#

it's kinda trivial solution

sturdy oar
#

I usually try all Bukkit stuff before going with NMS

grim halo
#

Thats what you are supposed to do. NMS only as last resort (unless you write for personal use)

spring arch
#
    val ticks = p.noDamageTicks
    p.noDamageTicks = 0
    p.damage(1.0)
    p.noDamageTicks = ticks
sturdy oar
#

tbh setNoDamageTicks() is a really confusing name

#

one would think the entity cannot be damaged if you use it

spring arch
#

@grim halo nms is the only way to not shoot yourself

grim halo
#

I mean if you need more functions you can always PR ^^

spring arch
#

API is already a mess

#

Β―_(ツ)_/Β―

sturdy oar
#

I can't PR, I can't sign the spigot repository thing

spring arch
#

contribution agreement?

#

@frigid ember btw uh it's pretty easy to understand what i'm doing?