#help-archived
1 messages · Page 172 of 1
Well yes, but you can see why you continuously saying "spawn location" could be misleading
that is why when you teleport the respawn packet is used
because the server really does remove them from the world and then respawns them
Well I am not talking to everyone else, you are understanding what I am referring to
I didn't until I realised you meant the players stored location while offline
and not their spawn point
well just about everything with the player you can get while they are offline
Could you point to where in OfflinePlayer that is possible?
As far as I can tell OfflinePlayer#getPlayer gets a Player instance if they are online
But has no inventory related methods
Also, getting is different to modification
From what I can tell, basically 90% of what you've said is wrong.
why the hell if i execute /kill @a , the event is EntityDamageByBlock
is it because command block
@sturdy oar Probably, yeah.
@sturdy oar EntityDamageEvent should still fire though perhaps, or at the very least death events
@wheat mirage you can cast OfflinePlayer to HumanEntity for the inventory stuff if necessary. Can even technically cast to Player as well. Not all methods actually require a player to be spawned in or Entity. They can merely exist in memory without being present physically. Anyways, thought there was method for the last location, what you could do instead is just look at the PlayerDat file
@keen compass You can't cast OfflinePlayer to human entity
Player extends the HumanEntity interface
Not OfflinePlayer
Player extends OfflinePlayer
Why are you giving out advice you're not even sure is correct?
Cast to Player and then to HumanEntity
since you are not spawning them in, you don't need their gameprofile o.O
Nah, none of the HumanEntity stuff is accessible from an offline player
Two separate entity trees
Not directly
Only way you'll get a Player instance is if the player is online 
if I check if an OfflinePlayer is online and they are, can I just cast it to Player or do I need to use getPlayer(OfflinePlayer.getUniqueId())
yes
You can also just do OfflinePlayer#getPlayer @fringe cairn
Basically does what you've just said tbh
^
Which is just a cast, but yes
what does offlinePlayer.getPlayer do if player is offline
Returns null
I'm not sure
Well a cast would give you a CCE
I think it's a different object
You're best to use OfflinePlayer#getPlayer() in this situation
Yeah what Choco said
okay
Anyways, you can use the playerdat file to modify their last saved location
declaration: package: org.bukkit, interface: OfflinePlayer
Here you may want to use that to learn the spigot api
I know it
Clearly not very well
Would be nice to shift the last location into OfflinePlayer though
not hard to do
and I it wont produce a null pointer unless player is offline?
Nah, would just require some deprecation and a different name
@subtle blade Would require editing of the player.dat file for changes. I reckon that's more trouble for md_5 than it's worth
its just NBT data
I agree it would be good though
because intelliJ is yelling at me bc it thinks itll produce null pointer even though it already checks if player is online and only runs if they are
@fringe cairn IntelliJ can't infer if a null pointer won't occur
It will always give that warning if a method can return null
And you've not directly checked
You can always supress warnings on certain functions etc
But like I said, not all methods of a player object, actually requires a game profile though. Therefore you can technically create a player object without there being a valid player to facilitate some of these things.
how do you suppress warning with intelliJ?
@keen compass just quit.
@fringe cairn There's an annotation, I think @SupressWarnings
You can give it a certain type
@keen compass That would be useless, as it won't actually connect to any relevant player data most likely.
And would cause huge issues if that player actually logs in I wager
are you certain of that?
No, but I'm certain you're either trolling or have no clue what you're talking about
As you've changed your stance 10 different times acting like you're correct all along
You're clearly not educated enough to help anyone having anything more than basic issues, and you're costing people more time than you're saving
fin
Never heard of the Citizens plugin? Pretty sure it does some of the things that you’re refuting
@red zenith not the same thing, AT. ALL.
Please can all members of the frost clan go to some other discord to spread mis-information.
Pinging @subtle blade as I've had my differences with him, but he knows his stuff.
I don't know if there's anything to be done about people spreading mis-information in here, but it's definitely not good for quality of this discord
No, stop strawmanning
Are you saying it is impossible to get an offline players inventory?
Leave me alone, you're wrong, move on, educate yourself
You've been wrong about literally almost everything you've said
I am not, I have done it and there is plugins that do it as well
Stop trolling
ever since 1.7
Leave me alone.
Now for the last location thing, probably will either need to look at the playerdat file or just create a player object to facilitate that
one of the two will work
As for your event to solve that, will need a task so that the event completes and not get that Ticking Entity Exception
Right, comrade, how’s the weather in Москва? I think you’re just another self obsessed troll, trying to exert yourself in a toxic, divisive way @wheat mirage. I wouldn’t care if you created the Java language.
It did, but I find typing on a phone to be cumbersome
@wheat mirage it actually is possible to get offline inventories, idk how, but i saw it on the youtuber's "Varo" projects, where they got invcleared while offline. so dont tell stuff if you dont know it exactly
does OfflinePlayer#getPlayer() not work
it will probably return null, but idk
i think its maybe possible with saving them somehow if they go offline, but idk
There is a few different ways to do it @tough kraken
I'm so sad, they removed the feature to make someone sleep anywhere with packets on newer versions
😦
I've been told this twice in ViaVersion discord, after having noticed that I couldn't replicate 1.8 sleep packets on newer versions
just wanted to share this info with you all
why does this actually need about 1-2 seconds to get recogniced as "not moving"?
Fendi
?paste
dude use a switch smh
i got a question, if i ban-ip someone. what ip does it ban.??
@sturdy oar Really? Why would they do that? 😦 That was my favourite packet
because of your interval. You have it set to check every second
Also, don't switch at all. Use some basic logic
because of your interval. You have it set to check every second
@subtle blade isnt it?
@sturdy oar Really? Why would they do that? 😦 That was my favourite packet
@wheat mirage They didn't remove the packet, you now set that in the metadata packet
I'll wait on posting my issue until you guys are done
the interval is actually at 20ticks
But it has to be done as a part of a much larger packet
The bed packet now got deleted, you now have to set the entity status in the entity metadata packet
and it looks real bad tbh
I've been unable to make someone sleep on NON-BED locations, so they probably blocking this
@sturdy oar but that was actually a pretty cool feature.
congrats 🙂
I can't think of a reason for doing that other than to prevent players accidentally seeing playerrs as sleeping
hmm
which sets correctly, however after having sent a metadata packet to nearby players, I don't see the entity sleeping
I'll try one more thing
I can put this on a private GitHub repo, right?
@sturdy oar Try removing the player move packet after
The move packet may auto cancel sleeping on the client now
Or something
@tough kraken What the hell is going on with those ifs
I'll try , however i don't really think that's the issue.
@sturdy oar Just a thought, but the other option is it's just disabled now lol
So wishful thinking
Do you have another idea?
?paste
idea for what
Why it isn't working
K can I post my issue now?
Always @wet bronze 🙂
@tough kraken What the hell is going on with those ifs
@wheat mirage maybe im dumb, but whats the difference between if's and case's in my code?
I have no idea why it's working, i think the client now checks if the sleeping packet is in an actual valid sleep location , otherwise it doesn't display
I'll check my incoming packets to see if i actually receieve it
All your ifs are doing the same thing @tough kraken
@sturdy oar is a bed nearby?
This is horrible coding practice
There is something on my server breaking Movecraft and I have verified that it’s not Movecraft’s fault due to the fact that it works perfectly fine on other servers and that the developer has updated it and it still has the same glitch.
@sturdy oar Try without the move and lmk what happens
no @forest plaza, the thing is that there should be no bed involved in this
I read that there has to be a bed, try it
The plugin loads fine, but it has a major glitch
the thing is that it's not useful anymore if i need a bed
That’s why it’s not working anymore afaik
the cool thing about PacketPlayOutBed was that you didn't need a bed
@forest plaza No the whole point is we want it to display with nobed
its anyway not fixing my problem i think
He could test it, if it works, he at least knows why it doesn’t work
@tough kraken Do yourself a favour and learn good coding practices. You're using 20 lines for what could be done in 2
You'll save so much time and stress in the long run
And you'll be infinitely more hireable
Can I put the code of the updated plugin on a private GitHub?
nobody sees your private stuff anyway
I have an issue with my server just crashing for some reason, it just started when I added some code to make totems also give you invulnerability for a few seconds when activated. i honestly have no idea what's going on. any help would be appreciated; thanks in advance!
here's the crash report: https://paste.md-5.net/eyokugakuw.rb
here's the code i added: https://paste.md-5.net/guwewosepi.java
and here's the server output when it crashed: https://paste.md-5.net/pabikesawu.bash
i am nowhere coding for anyone else, i am coding for my own server, and my public plugin thats for free, i dont even want to code for anyone so in my opinion if something works it works...then i see no cause to change it.
maybe a weird point of view but idk
i actually see your point, but i think i have different sight of that
if it works it works is not a good thing
i would be doing a loop from 1 to 1000 by writing 1000 lines of code, just because it works, is not a good idea
so just tell me, why should i do anything other because of "its the better way" if it works the same way? idk
yeah 1000 is a big difference, but that if thing costed me 2 minutes so idk
Performance and readability
You may come back later and want to add something, a good Code base is a first step
i am the only person that reads my code (i hope so) and i can understand all
never really had problems read my code
I mean, I document private repositories 🤷♂️
Told myself that way too often
i dont really think we will get to the same point so,
does anyone know my problem anyway?
i am checking the moving every second
Did you send it somewhere further up?
?paste
that my codes are bad to see for others is possible, but i can understand my code
not cost you it
@sturdy oar could probably look at https://wiki.vg/Protocol#Block_Entity_Data
it does, it takes my time for learning stuff i dont need (in my opinion!!) so i am only learning stuff i need for myself
notMoving.put(player.getName(), currentTime);
TimerClass.moveTime = currentTime;```
i am checking if someone is moving or not
But I don’t understand what’s not working
I'm trying to save YOU time and stress.
if it is moving, it gets marked as "10"
but it needs nearly 4 seconds to change to "9"
You're being ignorant
using if blocks isn't any less valid
we won't get to the same point
Updated do-not-listen-to list of #help-archived:
- Frostalf
- VNGC
- frost-byte
so what should i say wtf
@subtle blade May want to pin this
lmao
@wheat mirage if blocks are most of the time faster speed wise, however reduces readability
Want to prove it?
if it is moving, it gets marked as "10"
but it needs nearly 4 seconds to change to "9"
@tough kraken are you calling this in the player move event?
@subtle blade Can this guy actually be banned from #help-archived
nah, its on starting my timer
its like when using bitshifting that it is faster to use a bitshift then it is to have the JVM do some math, again readability is reduced
The formatting is a little weird
@tough kraken lastLocation only ever gets updated if they're not already in the list
You need to update each cycle
Also, I'm trying to help YOU save time and effort
With my advice
I have no other motive
VNGC, this is pretty objective as far as coding goes
I'd recommend maybe making a post on stackoverflow asking why your code is being called bad quality
They'll explain it far more eloquently than me
It's always worth the effort to learn
Yes but you're costing yourself more time and hassle by not learning
and I can't understand that
2-minutes, yeah i see
Aren’t you coding to have fun? For me the fun comes from learning and writing code as clean as possible
Yes, but it's a more extensible concept
If every code you write could be done 2 minute shorter
you'll save hours
days
weeks
In the long run
And debugging will be 10x faster
Changing something will be 10x faster
I speak from experience here
I once wrote code like yours
It's not a preference, it's an objectively bad choice.
There is something on my server breaking Movecraft and I have verified that it’s not Movecraft’s fault due to the fact that it works perfectly fine on other servers and that the developer has updated it and it still has the same glitch.
https://pastebin.com/aNLpB1EY
Can anybody help me with this?
@wet bronze What spigot are you running
Is it the latest build
Aka does your server startup without a 20s delay
From what I can tell that plugin has a bug with 1.16
PaperMC because it's optimized for 1.16
I have
Yeah?
Give it a try on vanilla spigot
PaperMC because it's optimized for 1.16
So
why
are
you
here
Otherwise you may want to visit the paper discord
Because the PaperMC discord is useless
true call
@subtle blade u see my pings lol
This issue has to do either with Movecraft or with the server software
It's to do with their towny integration
Wait what?
try the same thing on spigot and see if u still have the problem?
Oh yeah I just noticed that too
Fun fact, they have two issues
et.minecraft.server.v1_16_R1.WorldServer.notifyAndUpdatePhysics(Lnet/minecraft/server/v1_16_R1/BlockPosition;Lnet/minecraft/server/v1_16_R1/Chunk;Lnet/minecraft/server/v1_16_R1/IBlockData;Lnet/minecraft/server/v1_16_R1/IBlockData;Lnet/minecraft/server/v1_16_R1/IBlockData;I)V
They're also using a method from the server that no longer exists in 1.16
Presumably because they're using reflection
Yeah that was my thoughts too
I don't get what you mean by that
To me this looks like a plugin being stupid trying to support 10 different versions
So go bother the developers
I'll tell him about the towny integration but what do you mean by reflection
Just send them that stacktrace and tell them there are 2 different errors
They should be competent enough to fix them
If every code you write could be done 2 minute shorter
@wheat mirage shorter doesn't always mean better
Anyways obviously the person likes their way and it isn't a problem for them 😉
et.minecraft.server.v1_16_R1.WorldServer.notifyAndUpdatePhysics(Lnet/minecraft/server/v1_16_R1/BlockPosition;Lnet/minecraft/server/v1_16_R1/Chunk;Lnet/minecraft/server/v1_16_R1/IBlockData;Lnet/minecraft/server/v1_16_R1/IBlockData;Lnet/minecraft/server/v1_16_R1/IBlockData;I)V
They're also using a method from the server that no longer exists in 1.16
@subtle blade I send him this?
And the towny integration thing?
if you wanna tell me you dont wanna help me because you dont like my coding-style its okay, but i won't change it just because you say it, no front of course
like said, i appreciate your help
I was trying to help you, but it’s rather hard to read
i meant Liquake
But I think liquake spotted your mistake
@tough kraken I sent you new code to use
It's a spoonfeed which I hate but I think you can look and see what it's doing
@tough kraken I'll write a fixed version of your class if you can promise to try learn from it to help yourself in future.
i dont think, because it doesnt helps me if i dont really want it
if someone tells me, to buy another car that i want, just because its faster, and would take me faster from a to b, but costs less then what i want, i actually would tell them i dont want that, because i dont need it
like i said, maybe my pov is weird
and maybe a very weird comparison yeah
Actually, why not use server ticks as a way to measure passed time?
Or integers in the map?
i dont know how... thats the thing
and learning it would not help me, as it makes no difference FOR ME
Performance
and Liquake, where did you sent it to me? got no message
or anything
then i maybe look at it
@tough kraken lastLocation only ever gets updated if they're not already in the list
@wheat mirage
notMoving.put(player.getName(), currentTime); TimerClass.moveTime = currentTime;```
@tough kraken Not an accurate simile, and that code buddy just posted lowers your entire class down
@forest plaza Ah, I missed a "" + on the last moveTime =
To convert to a string
But that's all
Idek if the static thing is a good idea lol
But why even use strings?!
I would do it with server ticks
but this guy wants to not be bothered
Maybe even system.currentMillis
@forest plaza I maybe wouldn't, as the less this task runs the better
You've got to think the level of precision you actually need
in order to optimise
No I mean, saving the last ticks, and then check time passed every second or so
Don't quite get what you mean
But honestly
I'd probably just hook into moveevent
and check if loc was different
He’s running a task every second right?
yeah
yeah every 20 ticks
Also VNGC
I'd probably just hook into moveevent
@wheat mirage doesnt PME only gets called on move?
obviously
Just save the current server tick, and then check every second if enough time has passed
Just save the current server tick, and then check every second if enough time has passed
@forest plaza how? 😦
@tough kraken You've also got to think of efficiency concerns, on small scale it doesn't matter. But the difference between your if statements and my one line of subtraction
It's a huge efficiency difference
Wdym how?
@fallen hatch I don't understand what you're saying either
i dont even know how to save server tick...
In a map?
@fallen hatch Do you mean store the server tick each time they move?
It should be a long
Thanks
@forest plaza What's the method to get server tick?
Don't worry about ticks. System.currentTimeMillis() will suffice
I would have to google
Oh sorry man
Don't worry about ticks. System.currentTimeMillis() will suffice
@subtle blade if he only checks every second, this will not suffice
that qctually was my question
@forest plaza What's the method to get server tick?
@wheat mirage
apparently there is 2 buddy's on this server o.O
someone is going to wake up to why they were pinged
Wait I got pinged every time
Sure it will. Checking every second won't interrupt that at all. You still have a time period against which you can compare every interval
@fallen hatch lets be buddies
System.currentTimeMillis() the last time the player moved (optionally excluding head movements, that's up to you). Every second, check if current time - saved time > 10 seconds
oh god...
Yes, but if he’s checking at 9,999 seconds because the server lagged the delay will be one second longer
LUL
@tough kraken It can be easy to get overwhelmed by this.
@forest plaza if server lagged player movement will lag too
@tough kraken I'd be willing to guide you personally on a call if you'd like. But it's important to look at your inefficiencies too in that scenario.
Alternatively you can run your own timer if you really care
Though 1 second difference isn't terrible
NBT Tags seem confusing to me. Is using an item's lore a bad way of implementing a food spoilage system?
It’s 10% inaccuracy
at most you will miss 2 movement packets in a single second if you miss that 1 second
He could check if it’s >9, that would be enough buffer
well i would set the player in spectator if he is not moving for 10 secs
and showing the time, he is not moving in the actionbar
Yeah, that'd do too
at most you will miss 2 movement packets in a single second if you miss that 1 second
@keen compass it’s not about Movement packages
Depends on whether you want to fire too early or too late
I'd also honestly prefer earlier
True
like this, and if its 0 set it into spectator
9 should be just the right time though
Then system.currentMillis is the best way to go
whats about making a own Timer?
just fyi, depending on your system, currentMillis() isn't accurate
You would have to cancel it every move event then
well...
just fyi, depending on your system, currentMillis() isn't accurate
Really? Why?
also every 4 years currentMillis() becomes an issue too 😛
currentMillis() every 4 years, you can go back into the past 😉
on windows milliseconds are not updated every millisecond
Every 50 milliseconds should be enough
but, I can see some of these plugins that use currentMillis() having some issues every 4 years 😛
I tend to use p.getStatistic(Statistic.PLAY_ONE_MINUTE)
Despite the name
It's updated every tick lol
most people don't realize your system can go backwards as far as time goes XD
but, I can see some of these plugins that use currentMillis() having some issues every 4 years 😛
I use it for cooldowns that last 5 seconds, imagine it would be 4 years and 5 seconds
well what would actually be the less-lagging method
repost
I have an issue with my server just crashing for some reason, it just started when I added some code to make totems also give you invulnerability for a few seconds when activated. i honestly have no idea what's going on. any help would be appreciated; thanks in advance!
here's the crash report: https://paste.md-5.net/eyokugakuw.rb
here's the code i added: https://paste.md-5.net/guwewosepi.java
and here's the server output when it crashed: https://paste.md-5.net/pabikesawu.bash
@frigid ember
IMO current Millis
@tough kraken Either you're concerned about efficiency, or you're not.
I will help you rewrite it in a fixed state if you wish.
During leapyear, depending how you use currentMillis(), you will get a negative number instead @forest plaza
I deal with bad code all the time in my job
I want to stop it before it reaches somewhere important
if i get help, i would appreciate it, but things like "just learn" actually sucks me down, as thats no help for me
thats my opinion
Sure, give me a PM and I'll call you in a bit and break down your code for you.
In an easy to understand way
well im german... that would not be a good call xd
cant speak english, my writing is good(i think) but if i speak english... pray to god
hey guys. Please advise plugin for bungee portals for 1.16.1
How would I disable spawn protection in a world from a plugin?
@tough kraken Pm me and I'll do my best via text
@tough kraken @wheat mirage I suggest you guys use this: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/World.html#getFullTime-- and check how much time has passed, after storing it in a map
thanks
Ticks
That's pretty cool
Doesn't work for cross dimensional stuff
But for the majority of stuff
very nice
I personally like eitherr the statistic
Or for non players
Changing dimension would be considered moving
getTicksLived
Ah that’s nice too
Yeah but a general use I mean
This was just a quick google search for ways to get time passed in server ticks
changing dimension is a teleport
I know
Don't think a movement packet is thrown along with a teleport
Well that’s one case he would need to check too then
yep
Unless theres no way to teleport in his server
anyone know if theres a way bridge chat between a forge server and spigot/paper?
write a spigot plugin and a forge mod which socket to each other or use a proxy
is spigot better than paper
Is there any way to clear all bossbars for a player?
Having issues with bossbars sticking around when a player switches server
is spigot better than paper
don't start this discussion
Clearing it in the leave event doesn't work
Hi
I was wondering if someone could help me figure out why the heck people on my server no matter what join with like an unholy amount of speed
but when they look in their inventory they have no effects
Also opped players for some reason don't get the same effect
guy
whos beest essentials or essentialsx ?
how do I check @wheat mirage
could use https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Bukkit.html#getBossBars()
to get the bossbars and then use https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Bukkit.html#removeBossBar(org.bukkit.NamespacedKey)
declaration: package: org.bukkit, class: Bukkit
whos beest essentials or essentialsx ? ?
only other sure method would be to grab the packets
EssentialsX is the continuation of Essentials @peak glade
@keen compass I only need to remove it once the player has switched servers
i am making a skyblock server and i am wondering what are good plugins for it to make it more my own
i allready have ore gens, shop, quests
fabledskyblock is heavily customizable
hi, I am having some problems with EssentialsX.
yes me too
hi, I am having some problems with EssentialsX.
@fathom coral Is it the spawn height?
I do not think so. What happens is the plugin is red when I do /plugins and it does not work. The only command that works is /tps.
Anyone know a way to clear all boss bars in the PlayerQuitEvent
I don't think it works because the client can't actually receive anymore packets
well do you have their instances?
But I need to clear all bossbars when they change servers
I do
And I tried it
But it doesn't work
As the client has already left
Problem is, on bungee
oh so do it in bungee then
So the bossbar never gets removed naturally
🤔
I... don't know how?
seems like a proxy oversight to me
Yeah, any ideas? Kind of need to fix this. @tiny dagger
let me see the packets first
is there a essentials for 1.8.0?
.-. yes
Yeah I've taken a look myself and it seems only the client really knows what bossbars it currently has when it switches server
I might try upating bungee
.-. yes
@sturdy oar where can I find it?
Hey guys ! I'm actually trying to develop a plugin which allows me to add crafts for Items with nbt in datapacks. So I tried to create a method which would make things way easier. https://pastebin.com/A3Xv9Drc Here is the pastebin of my code. I'm trying to understand what should I put instead of these "?" which are in the "onEnable" method
@wheat mirage there seems to be a packetplayout boss packet
@tiny dagger Yeah but it requires knowledge of the boss bar ID or something I think
it wouldn't be impossible to fetch on packet listening
did bungee had a built in way to listen to packets or?
@tiny dagger Updated to latest bungee
Issue is gone
Lol
I only updated like 4 days ago
There you go I guess
Either that or the new bungee lets my leavelistener code work?
Who knows
good to hear
I know the essentials 1.8 is here: https://hub.spigotmc.org/jenkins/job/Spigot-Essentials/
but what build do I use for Spigot 1.8.0?
no problem
I have just spent a wonderful amount of time re-organizing all of my code as well as making my gigantic class file separated into 7 different classes. As well as that, I got my one problem solved from last night that I worked hours on. Thank you @keen compass ! Wonderful tutorial btw on github
does anyone know why it says in JavaPlugin is null?
I have this code in my main class
@Override
public void onEnable()
{
//...
PocketWatch.nameUpdateRunnable.runTaskTimer(this, 0, 5);
//...
}
But whenever I run it on my server it throws:
Caused by: java.lang.IllegalArgumentException: Plugin cannot be null
the file extends JavaPlugin right?
yup
hmmm
i tried doing workarounds like getting my plugin through Bukkit.getPluginManager() but its still null
within onEnable() do you have something like
instance = this;?
In all of my plugins I have:
private static Main instance;
And then I set it so instance = this within onEnable() and instance = null in onDisable()
not sure if everyone does this, but just wanted to put that out there
also yeah static isn't always the best idea to use
@tiny pebble lol, the plugin code I showed you isn't so much a tutorial on how to do something, its named that because it allows creating tutorials in the server. Need to update it though. However, I from time to time use it to show examples 😛
Ah, well, it was still a tutorial in my eyes since it was a great example hahaha
the thing I really use it for to show an example of most commonly is conversation API
and what you can use it for 😉
@tiny pebble i have something like that but idk what difference it would make since instance and this would reference the same thing in this case. I'll try making my runnable non-static though ill see how that goes
I make use of the conversation API to allow altering of the config from in game 😛
instead of a series of commands
ah that sounds nice
its so weird
using static to allow referencing the main class isn't necessarily bad btw
I use it sometimes
Main class of a plugin isn't just going to magically go away so its ok 😛
my message sents after minutes sorry
would help if you showed the relevant code @austere flame
specifically what is in PocketWatch.nameUpdateRunnable
How would I make a command that loads a fake chest from config?
But have the players actions be synced to config
create custom inventories
you can create an inventory that is the size of a chest or double chest
public class RewardStorage implements Listener {
public Inventory inv;
public RewardStorage() {
this.inv = createInventory();
Bukkit.getPluginManager().registerEvents(this, Main.getPlugin(Main.class));
}
public static Inventory createInventory() {
return Bukkit.createInventory(null, 9, ChatColor.GOLD + "Unclaimed Rewards");
}
}
like this?
I defined PocketWatch.nameUpdateRunnable like this
public class PocketWatch {
...
public static BukkitRunnable nameUpdateRunnable = new BukkitRunnable() {...};
I know the event works fine because I launched it before from other methods it just started breaking down in onEnable()
it depends how you are setting the Plugin requirement in that class
which is why it would help if you showed the code for that
@lyric cypress yes something like that
nameUpdateRunnable = new BukkitRunnable(){
@Override
public void run() {
String newTime = ChatColor.GREEN + Time.getCurrentTime().toString();
for(Player p : Bukkit.getOnlinePlayers())
{
ItemStack watch = findPocketWatch(p);
if(watch != null)
{
ItemMeta newMeta = watch.getItemMeta();
newMeta.setDisplayName(newTime);
watch.setItemMeta(newMeta);
}
}
}
};
probably loops players inventory -_-
public class RewardStorage implements Listener {
public Inventory inv;
public RewardStorage() {
this.inv = createInventory();
Bukkit.getPluginManager().registerEvents(this, Main.getPlugin(Main.class));
}
public RewardStorage(ArrayList<ItemStack> items) {
this.inv = createInventory();
items.forEach(item -> {
if(item!=null) {
this.inv.addItem(item);
}
});
}
public static Inventory createInventory() {
return Bukkit.createInventory(null, 9, ChatColor.GOLD + "Unclaimed Rewards");
}
public void openInventory(HumanEntity ent) {
ent.openInventory(inv);
}
}
In Main
public HashMap<String, RewardStorage> rStorages = new HashMap<String, RewardStorage>();
on Command
ArrayList<ItemStack> inv = (ArrayList<ItemStack>) plugin.getConfig().get(p.getName());
if (inv != null) {
plugin.rStorages.put(p.getName(), new RewardStorage(inv));
plugin.rStorages.get(p.getName()).openInventory(p);
} else {
RewardStorage storage = new RewardStorage();
plugin.rStorages.put(p.getName(), new RewardStorage(inv));
plugin.rStorages.get(p.getName()).openInventory(p);
}
use BukkitScheduler to pass in your bukkitrunnable
and gets the required item
i mean i know the event itself is problematic but im just trying to get it to launch from onEnable without throwing execptions
he is running this code every 5tick
I put event handlers in the RewardStorage, but they do not run when they are opened from the hashmap
also I managed to get it going by making the runnable nonstatic so ty everyone!
They do run if the RewardStorage is opened as a RewardStorage instead of an element of the hashmap
Which build is for 1.8.0?
https://hub.spigotmc.org/jenkins/job/Spigot-Essentials/
Bukkit.getPluginManager().registerEvents(this, Main.getPlugin(Main.class));
this is your issue here ^
your event isn't in the Main class
it is in the rewardstorage
the event is in the rewardstorage
yes, but you are specifying the event class as the main class
instead of the class that actually has the EventHandlers
Main is the plugin
@fathom coral search for eseentialsx
this, is this
@lyric cypress get reference of main class
i want spawn plugins ?
oh
hello ?
ok
it will give you thousonds of spawn plugin
it says listener first though
void org.bukkit.plugin.PluginManager.registerEvents(@NotNull Listener arg0, @NotNull Plugin arg1)
@EventHandler
public void onInventoryClick(final InventoryClickEvent e) {
Bukkit.broadcastMessage("click event");
if (e.getClickedInventory() == inv && e.getSlot() > -1) {
Bukkit.broadcastMessage("in inv");
ItemStack slot = inv.getContents()[e.getSlot()];
if (e.getCurrentItem() != null) {
if (Events.availableSlot((Player) e.getWhoClicked())) {
e.getWhoClicked().getInventory().addItem(slot);
slot = null;
Main.getPlugin(Main.class).getConfig().set(e.getWhoClicked().getName(), this);
} else {
e.setCancelled(true);
e.getWhoClicked().sendMessage(ChatColor.DARK_RED + "You do not have inventory space");
Bukkit.getScheduler().runTask(Main.getPlugin(Main.class), task -> {
e.getWhoClicked().closeInventory();
});
}
}
e.setCancelled(true);
}
else {
Bukkit.broadcastMessage(e.getClickedInventory().toString() + " != " + inv.toString());
Bukkit.broadcastMessage("slot " + e.getSlot());
}
}
this is in RewardStorage.java
so then yeah you need
fuck my internet connection
like frostfalt told
your main instance is wrong
you can use singleton to get it
go your main class
private static Main instance;
public static Main getInstance(){
return instance;}
public synchronized void onEnable() {
....
instance = this;
...}
sometimes i get this on join, followed by an crash:
(crash report)
https://hastebin.com/eyivojetav.makefile
@fathom coral search for eseentialsx
@fair abyss EssentialsX does not work for me. That is why I am trying to use the essentials that I linked.
I dont know
it wont work
you don't need the synchronized modifier
why?
because onEnable() isn't called from another thread
It just shows up as red when I type /plugins and none of the commands work.
so check console for errors
ty kingOf0, that makes the event work!
I thought Main.getPlugin(Main.class) was just a slower method of getting the plugin
@EventHandler
public void onInventoryClick(final InventoryClickEvent e) {
Bukkit.broadcastMessage("click event");
if (e.getClickedInventory() == inv && e.getSlot() > -1) {
Bukkit.broadcastMessage("in inv");
ItemStack slot = inv.getContents()[e.getSlot()];
if (e.getCurrentItem() != null) {
if (Events.availableSlot((Player) e.getWhoClicked())) {
e.getWhoClicked().getInventory().addItem(slot);
slot = null;
Main.getPlugin(Main.class).getConfig().set(e.getWhoClicked().getName(), this);
} else {
e.setCancelled(true);
e.getWhoClicked().sendMessage(ChatColor.DARK_RED + "You do not have inventory space");
Bukkit.getScheduler().runTask(Main.getPlugin(Main.class), task -> {
e.getWhoClicked().closeInventory();
});
}
}
e.setCancelled(true);
}
else {
Bukkit.broadcastMessage(e.getClickedInventory().toString() + " != " + inv.toString());
Bukkit.broadcastMessage("slot " + e.getSlot());
}
}
does anyone know why this if is false?
if (e.getClickedInventory() == inv && e.getSlot() > -1) {
Plugin.getPlugin(Class<? extends Plugin>) it is a slower method
i wouldn't recommend it
should use .equals() for this check
== does a reference check and thus even if the inventories might be the same, they are probably not pointing to the same memory address
.equals() will do a check on the objects values instead, to see if they are the same
ok I replaced it with .equals(), but it is still not going in
This is what the console said @fair abyss:
https://cdn.discordapp.com/attachments/700759822387380377/731622404614389780/unknown.png
someone know about a free plugin that is kind of like Jets Minions
not sure why people want to stop tab
XD
not like hiding it makes your server magically secure
It doesn’t make it secure but if you want to hide what plugins you’re using it’s a valid thing to do
who cares who knows what plugins you use
Yes but if you’re using public plugins you may want to make it harder to copy you without having to pay to develop a custom server
in Main
public HashMap<String, RewardStorage> rStorages = new HashMap<String, RewardStorage>();
plugin.rStorages.put(p.getName(), new RewardStorage(inv));
plugin.rStorages.get(p.getName()).openInventory(p);
@EventHandler
public void onInventoryClick(final InventoryClickEvent e) {
Bukkit.broadcastMessage("click event");
if (e.getClickedInventory().equals(inv) && e.getSlot() > -1) {
Bukkit.broadcastMessage("in inv");
ItemStack slot = inv.getContents()[e.getSlot()];
if (e.getCurrentItem() != null) {
if (Events.availableSlot((Player) e.getWhoClicked())) {
e.getWhoClicked().getInventory().addItem(slot);
slot = null;
Main.getPlugin(Main.class).getConfig().set(e.getWhoClicked().getName(), this);
} else {
e.setCancelled(true);
e.getWhoClicked().sendMessage(ChatColor.DARK_RED + "You do not have inventory space");
Bukkit.getScheduler().runTask(Main.getPlugin(Main.class), task -> {
e.getWhoClicked().closeInventory();
});
}
}
e.setCancelled(true);
} else {
Bukkit.broadcastMessage(e.getClickedInventory().toString() + " != " + inv.toString());
Bukkit.broadcastMessage(
e.getClickedInventory().getContents().toString() + " != " + inv.getContents().toString());
Bukkit.broadcastMessage("slot " + e.getSlot());
}
}
It is still going into the else, even though it should be going into the if
lol anyways, stupid endeavor to block such a petty thing
because you believe copied servers magically do better
if someone copies your server and does better, then you were obviously doing something wrong 😛
tab complete removing is bad
Makes it harder
no
it makes it so much harder to type commands
If you can’t figure out how someone does something, it’s harder to copy them
I can make a server right now to compete with whatever server I want. I don't even need to know the plugins you use
I didn't even really need to join it
But you know how to develop plugins
The average person doesn’t know how to develop
They just know how to copy public plugins
the average statistic is a lie too 😉
Lol
but that is a different topic though
anyways, I agree it will stop the less competent people
shouldn't double click the jar lol
Is there spigot support for setting a player's spawn, or do I have to keep track of them individually and teleport them when they die?
do you think we can get in a call so i can screen share?
read the wiki
or use paperspigot
yes
probably
yes
so .equals() is not working
I would recommend using spigot via build tools rather than paper
yeah actually use normal spigot
is there a event for player fall damage?
is there a event for player fall damage?
Just EntityDamageEvent
There are damage causes though
please help my discord is not accepting my images
hm, it seems this is the only server I cannot post the picture in
😩
it just said failed to upload
whenever I regenerate a world, I keep getting the same seed for some reason
public static void createWorld(){
String worldName = ResetWorld.getInstance().getConfig().getString("worldName");
if (doesWorldExist(worldName)){
System.out.println("A world already exists with the name: " + worldName);
}
else {
Bukkit.createWorld(new WorldCreator(worldName).seed(new Random().nextLong()));
Bukkit.getWorld(worldName).getWorldBorder().setSize(10000);
System.out.println("New world created with the name: " + worldName);
}
}```
did i do this wrong public String replace("[" with " ")
how can I get 1.16 block type without specifying api-version?
should i use a webserver manger
@kindred plover for what
like pterodactyl?
Tbh many times it's not worth it
I only install pterrodactyl or Multicraft when I have to manage huge networks
If you have something like 2-3 servers I personally feel like it would be a waste of resources
Yeah definitely not worth it
whats warps xd
Why would it be a different server
Are you experienced with Linux?
@tacit trellis You don't
How could i make a lobby compass?
👏
You mean a gui with server selection
yea
will an abstract function carry over its annotations?
Yes I think so
sweet
You basically listen to player interact event I think
Ubuntu is a distro based on Debian
ah
Maintained by community and experts
You remember Unix?
? What does this mean
ik i was trying to say i never used linux in the pass so i have no experience with it
@kindred plover you should learn Linux. If you learn it well you won't ever need a web panel
The guy that made linux got the name from unix
@unborn jewel Linus Torvalds
Pretty sure he got Linux from his name...
Didn't he make it in his basement
I remember reading it was from unix
but idk people got different stories
linux isn't hard to use
Well
it's just like command prompt
I use Ubuntu on my PC
but you can do more things
I use Ubuntu on my dedi
ok so how would I give the user an item
is there like a spigot doc
or something
Yes
Look at Inventory
I'll send link
declaration: package: org.bukkit.inventory, interface: Inventory
How does WorldGuard make words appear on a player's screen like this?
https://cdn.discordapp.com/attachments/718250417867194398/731649751363092480/unknown.png
Title
I don't need @NotNull right?
NotNull is just an annotation
so I really don't need it then
Means that if will never be null
yea
Yeah it's not the same thing
is this what you mean Tony?
https://www.spigotmc.org/threads/send-titles-to-players-using-spigot-1-8-1-11-2.48819/
Probably 99% that's a title
I'll give it a shot, thank you
@sturdy oar Any luck with the bed stuff?
@NotNull
HashMap<0345, minecraft:compasss> {
}
``` did i do this wrong
Are you randomly putting java stuff together
noooo
Learn java
player.getInventory.add(new ItemStack(Material.COMPASS, 1));
Really wow
player.getInventory.add(new ItemStack(Material.COMPASS, 1));
@frigid ember why add
More like setItem
Friendi I am
How come that’s soo much different then the doc
How hard is it to update a plugin from 1.15.2 to 1.16.1?
Not hard just switch the jar file
Are you using NMS
What is NMS
Or reflection on server code
Reflection?
net.minecraft.server @rotund orbit its coding stuff
just switch jar file if you dont know what hes talking about
It's fun dependency
I don't mess with NMS or reflection no haha
I pretty much rely on my own stuff
and Spigot
I like NMS, they are the best
So plugins that work with 1.15.2 generally work with 1.16.1?
More often than not, yes
@rotund orbit most times yes
anyways can someone please tell me how to convert the three world files (world, world_the_nether, and world_the_end) to a world that I can run on single player
And how do I switch my jar file?
okay, so let's just clarify real quick lol. When you say "Updating a plugin", are you speaking from the perspective of a server owner or a developer?
You have two people giving two answers from two different perspectives
I know how to update my server
o ok
I have a Medieval Factions plugin and several others
So yeah, just update your dependencies and see if there are any breakages
If you're using internal server code (anything from CraftBukkit or NMS) it will likely need an update
else, Bukkit API had no breaking changes in 1.16
Great!
Sounds like my plugins will just work then
I appreciate it 🙂
I'll update the Spigot dependency
That's generally Bukkit's goal is to update without breaking plugins
I think it's my only one
Well that's good
My current version in my pom.xml is <version>1.15.2-R0.1-SNAPSHOT</version>
Do I just change the 1.15.2. to 1.16.1? And is this all I need to do to update my dependencies?
Yes, though if there are no breaking changes, you can keep it on 1.15.2
Just update real quick to see if anything broke. If not, revert back to 1.15.2
It's best to stay on the lowest version you're supporting unless you need to use something from a future version
Oh is that so?
My VeinMiner plugin for instance depends still on 1.13 but supports up to 1.16.1
I just use API
Should I try to make it depend on 1.13?
If you want to, sure
Only if I test it huh
Breaking changes were far and few between since 1.13
Well then I'll just say it supports 1.13, 1.14, 1.15 and 1.16 but that the native version was 1.15
And I'll switch to 1.13
Thanks! 😄
Is it 1.13 or 1.13.1? It's 1.13.1
@sturdy oar I had it working in 1.12 using protocollib
Just sent the entity metadata packet i think
Well that all depends on the api-version in your plugin.yml, Dan
If it's set to 1.15, it won't load on 1.13 or 1.14 servers
(Native Version on your resource page should match the api-version in your plugin.yml)
I'm using api version 1.13
I thought Native was the version you programmed it for my bad haha
@sturdy oar Oh yeah Fendi I know how I did it
I sent a block change for a bed
Send the sleeping packet
Then use entitymove to get the sleeping entity where i want
Job's a good'en
I recommend checking if the player is in the top half or bottom half of the world
If top half, send the block change 1 above bedrock
if below, send it to the top of the world
That's best advice I have, but it WILL work! 😄
Bruh
how do i get when a player takes an item from an inventory? ive forgotten its been months since ive had to do it
So I need a bed after all
Sadly I think so
But the headline here
is you can move them once they're in a bed
So you just need to fake a bed
then move them where you want them to be
no bed needed in that location
@sturdy oar So yes, you need a bed, but it doesn't have to even be visible. You can have them sleep anywhere you want, just a bit of legwork for developers.
So I managed to use a title, but it is super small
https://media.discordapp.net/attachments/718250417867194398/731661369019072552/unknown.png?width=1204&height=677
Any way to increase the size or get it to show at the top of the screen?
using this:
event.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, new ComponentBuilder("Entering The Wilderness").create());
Player#sendTitle()
Any way to increase the size or get it to show at the top of the screen?
@rotund orbit I dont think so. Maybe make it a title. (player#sendTitle())
Titles and action bars are not the same thing
ohhh
I have a hashmap to save RewardStorages
private HashMap<String, RewardStorage> rStorages = new HashMap<String, RewardStorage>();
And a command to load the storage
if (command.getName().equalsIgnoreCase("reward")) {
ArrayList<ItemStack> inv = (ArrayList<ItemStack>) plugin.getConfig().get(p.getName());
if (inv != null) {
rStorages.put(p.getName(), new RewardStorage(inv));
rStorages.get(p.getName()).openInventory(p);
} else {
rStorages.put(p.getName(), new RewardStorage());
rStorages.get(p.getName()).openInventory(p);
}
}
I know it will reset when the server resets but I'm just trying to get it to work right now
this is the class
public class RewardStorage implements Listener {
public Inventory inv;
public RewardStorage() {
this.inv = createInventory();
Bukkit.getPluginManager().registerEvents(this, Main.instance);
}
public RewardStorage(Inventory invIn) {
this.inv = invIn;
}
public RewardStorage(ItemStack[] items) {
this.inv = createInventory();
for (int i = 0; i < items.length; i++) {
if (i > 9) {
Bukkit.getLogger().log(Level.WARNING,
"Too many ItemStacks in RewardStorage ItemStack array constructor");
}
this.inv.setItem(i, items[i]);
}
}
public RewardStorage(ArrayList<ItemStack> items) {
this.inv = createInventory();
items.forEach(item -> {
if(item!=null) {
this.inv.addItem(item);
}
});
}
public void openInventory(HumanEntity ent) {
ent.openInventory(inv);
}
public static Inventory createInventory() {
return Bukkit.createInventory(null, 9, ChatColor.GOLD + "Unclaimed Rewards");
}
public static ItemStack[] addItem(ItemStack[] items, ItemStack toAdd) {
for (int i = 0; i < items.length; i++) {
if (items[i] == null) {
items[i] = toAdd;
return items;
}
}
return items;
}
@EventHandler
public void onInventoryClick(final InventoryClickEvent e) {
Bukkit.broadcastMessage("click event");
if (e.getClickedInventory().equals(inv) && e.getSlot() > -1) {
Bukkit.broadcastMessage("in inv");
ItemStack slot = inv.getContents()[e.getSlot()];
if (e.getCurrentItem() != null) {
if (Events.availableSlot((Player) e.getWhoClicked())) {
e.getWhoClicked().getInventory().addItem(slot);
slot = null;
Main.getPlugin(Main.class).getConfig().set(e.getWhoClicked().getName(), this);
} else {
e.setCancelled(true);
e.getWhoClicked().sendMessage(ChatColor.DARK_RED + "You do not have inventory space");
Bukkit.getScheduler().runTask(Main.getPlugin(Main.class), task -> {
e.getWhoClicked().closeInventory();
});
}
}
e.setCancelled(true);
} else {
Bukkit.broadcastMessage(e.getClickedInventory().toString() + " != " + inv.toString());
Bukkit.broadcastMessage(
e.getClickedInventory().getContents().toString() + " != " + inv.getContents().toString());
Bukkit.broadcastMessage("slot " + e.getSlot());
}
}
}
It always goes to the else. How do I make the check work properly?
&& e.getSlot() > -1 this part is what is throwing it off
you have &&, so it will only be true if both conditions are true
if either one is false it is false overall
Is actionbar ever going to be moved out of player.spigot()?
Not sure I understand why its in there really
Is it because it depends on Bungee chat componentz?
How can i reload my scoreboard
idk
block.getType()
Though really, an if statement is probably best here anyways
unless you're using a fall-through, a switch statement typically isn't necessary
kk
@keen compass
&& e.getSlot() > -1 this part is what is throwing it off
e.getSlot() is almost always true though. It's only not true if the click is not on a slot, where e.getSlot() would be -999
Did 1.16 finally add a brown chat color?
@frigid ember they added over 10000+ new colors.
You can basicaly get any color to the game.
How?
With hexcolors
oh.....
Gotta say I love me some good old COLOR.{color name}
Any idea of what could be going wrong?
really?
*should always be Spigot
give me a good reason
the Spigot Discord
I want a University Level Reason
I mean he could of googled it
At which point it's beyond our control
Ask in here, you'll get Spigot as an answer
Ask in the Paper discord, you'll get Paper as an answer
¯_(ツ)_/¯
you want to go to the original source maintainers and ask which is better? o.O
that is pretty disrespectful XD
So i've been wondering if modifying the swimming speed is possible (for changing how fast you can swim in water/lava)
I think I found where the speed is defined but it is hardcoded in this method in EntityLiving.java:
protected float dL() {
return 0.8F;
}```
any way to change this? either by overriding or reflection?
No and no, would have to be done with either ASM or a server patch. Though I have a feeling the client will hate you
can change their velocity maybe
i'll try that but i feel like that would end up looking janky
i guess that's as good as it well get though
I guess you can always hope for 5G in your area @subtle blade and then use that for internet XD
1.8.8
Can someone point me in the correct direction to see how spigot api helps with making messages?
Yeah
I created a persitentDataType to convert LinkedLists<UUID> to long arrays, but it isn't actually saving any of that longs. It worked with the same code converting UUID[] to long[] (and I've tested both the toPrimitive and fromPrimitive and they work correctly), and the only thing I changed was the variable type and the getComplexType method to return (Class<LinkedList<UUID>>) new LinkedList<UUID>().getClass();.
https://pastebin.com/2fR1bH3z
codes there if anyone want's to take a look
Hey, since updating my server to 1.16, I've been having alot of issues with crashing. I get "exception generating new chunk" errors when my server crashes. This only started happening after updating to 1.16
Can someone help me with my minecraft server I have tried multiple times to port forward and it isnt opening the port
@subtle blade maybe
Hey, since updating my server to 1.16, I've been having alot of issues with crashing. I get "exception generating new chunk" errors when my server crashes. This only started happening after updating to 1.16
@tawny whale same for me. seems to happen at old worlds, or in my case, if you use < 1.16 plugins, specially in world-category
i created a world with a 1.14 plugin. for sure it breaks on 1.16
@tough kraken See, I created a new world for 1.16 to try to avoid this problem. The only world I have left from 1.15 is my spawn world
I was digging through my files and I found that there was a stray 1.15 spigot jar hiding out, and deleted a few plugins that could be conflicting with it
now its fixed?
I haven't had any crashes yet, but they happen very inconsistently
well good luck in future 🙂
I had someone go on and spam /rtp and ender pearls, which could be contributing to the crashing, and the server didn't crash at all. So, I'll update again when/if it crashes again
Issue ticket shout-out
I were looking to how to make translate text (text that change depend on the player client language setting //rp dependent) and I run into a problem. I digging around and found that the ticket created on Mar/19 but it hasn't been fix yet.
So I need some help please vote the ticket to push it up. 🔥 thx a lot
Is there a way to make blazes not fly? I have AI disabled and gravity set to true but they don't fall
apply a constant velocity
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application``` ?
[17:33:40] [Server thread/ERROR]: Cannot load plugins\AdvancedHelp\gui.yml
org.bukkit.configuration.InvalidConfigurationException: while parsing a block mapping
in 'string', line 615, column 9:
item-name: '&9? ? ? &f&lNo Grief ...
^
expected <block end>, but found '<scalar>'
in 'string', line 620, column 25:
- '&bIf you don't have permission to'
^
at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:56) ~[server.jar:git-Spigot-800b93f-8160e29]
at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:160) ~[server.jar:git-Spigot-800b93f-8160e29]
at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:128) ~[server.jar:git-Spigot-800b93f-8160e29]
at org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(YamlConfiguration.java:183) ~[server.jar:git-Spigot-800b93f-8160e29]
at me.codedred.advancedhelp.data.files.GUI.reloadConfig(GUI.java:32) ~[?:?]
at me.codedred.advancedhelp.commands.AdminHelp.onCommand(AdminHelp.java:47) ~[?:?]
at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[server.jar:git-Spigot-800b93f-8160e29]
at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:149) ~[server.jar:git-Spigot-800b93f-8160e29]
at org.bukkit.craftbukkit.v1_15_R1.CraftServer.dispatchCommand(CraftServer.java:711) ~[server.jar:git-Spigot-800b93f-8160e29]
at me.codedred.advancedhelp.listeners.AdminGUIClick.onAdminClick(AdminGUIClick.java:29) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_251]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_251]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_251]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_251]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:316) ~[server.jar:git-Spigot-800b93f-8160e29]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[server.jar:git-Spigot-800b93f-8160e29]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:529) ~[server.jar:git-Spigot-800b93f-8160e29]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:514) ~[server.jar:git-Spigot-800b93f-8160e29]
at me.codedred.advancedhelp.listeners.GUIClick.onClick(GUIClick.java:30) ~[?:?]
at sun.reflect.GeneratedMethodAccessor41.invoke(Unknown Source) ~[?:?]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_251]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_251]
So