#help-development
1 messages · Page 1394 of 1
?paste the BuildTools.log.txt
Ok I pasted it
save and post teh link here
wait, i dont understand -_-
do you want me to use InventoryView instead of InventoryClikEvent as an event?
no
InventoryClickEvent extends InventoryEvent
InventoryEvent declares a method called getView
getView returns an InventoryView
InventoryClickEvent inherits this method because it extends InventoryEvent
Tried, it says something went wrong
take the event -> get the view -> get the title
real men use hatebin
problem is, there is no view, there is getViewers
Can you let me send you a message? I cant send logs here
The type can never be null
it's redundant
item.gettype can never be null
gettype is annotated as @NotNull; it will never return null; the condition will always be true
That means if the slot is empty?
ah
item != null would be true then
okey i get it i think
alternatively, the type of the ItemStack might be Material.AIR
you never know with bukkit
sometimes the item is null, sometimes it's air
best practice to always check both
the new form is now
alright, next, delete everything
you're not supposed to use the inventory title to identify the inventory
use the inventory holder or compare the inventory instance instead
a player can literally place down a chest they have renamed in an anvil and your inventory logic would fire for it
okey @wraith rapids one more problem xD
"page" int defined
i mean it must be
but wtf is this
ah true
sorry -_-
Required type: String
Provided: int
it even suggests a solution: "Wrap using String.valueOf()"
so i'm trying to make a bungeecord cloud type system and for whatever reason it gives me that "could not connect to default or fallback server" even when i register the servers like this
ServerInfo info = ProxyServer.getInstance().constructServerInfo(id, InetSocketAddress.createUnresolved(address, port), "motd", false);
ProxyServer.getInstance().getServers().put(id, info);
my bungeecord config.yml is the default one with no changes (am i meant to change something?)
proxy and spigot servers are both online and the register function is being called
all variables are correct (checked by logging them into bungeecord log)
when i do /server in bungeecord console the spigot server name shows up
i don't really fuck with bungee, but are you sure getServers().put is the right way to register a server
seems like a dubious design choice, but then again, all of bungee is one giant fucking dubious design choice
pretty sure lol
it is getting registered because /server gives me the server name and all that. just really clueless why it doesnt connect me
its probably something really obvious that i've been literally staring at for the past 3 hours knowing me lmao
Make sure the ip and port are correct
you're making it unresolved so its probably not gonna work if you enter a dns entry
i changed it to
new InetSocketAddress("localhost", port)
(it's on a localhost) and it still wont work. It actually registers the server on the proxy before the spigot server has fully started, could that be the problem?
Which version of the spigot API do you guys suggest to use? I just use 1.16 because my server is 1.16 and it's the most recent, although if I release the plugin it should work on 1.8-1.16
just drop support for anything other than latest and don't think about it
Go for the latest version. I wouldnt bother supporting versions below 1.13
1.12 is a consideration but 1.8 is just ancient. You are handicapping yourself if you use older APIs.
most things are very painful to support on a wide range of versions
you'll probably end up having to do reflective hacks everywhere and can't take advantage of the modern api
You just miss out on so much API. The plugin im currently writing would take at least 10 times as long if i would use the 1.8 API.
if you absolutely insist on supporting 1.8, use a module based approach and write a completely different module for 1.8
Ok
Makes sense
Just a lot of people use 1.8 or 1.12 so I was thinking there would probably be considerably less downloads
Good idea, thanks
most people who use 1.8 are pvp nerds and probably wouldn't use your plugin anyway
unless it's some pvp minigame or something
can anyone help me out? https://www.spigotmc.org/threads/navigation-zombie.502040/
use paper's pathfinder api
it's like 2 method calls or something
ez to use and nicely documented
so i would have to change to paper instead of spigot?
myes
regrettably spigot is quite a bit behind the times and lacks a lot of API stuff that makes a developer's life easier
the vast majority of servers run paper anyway, so you might as well jump off the boat before it sinks completely
why would you say that on the spigot discord lmao
why wouldn't I
idk maybe it's a little rude
the truth doesn't care about peoples' feelings
ok
and regardless, I'd place the well-being of you, my dear, aspiring developer, far above the feelings of some guy somewhere
How do you make bold color for the enums?
real men would just use §l
xD
prefix the 2 chatcolors with a "" + or call toString on them
it doesn't know you want a string; you can't + together 2 random objects
nope i cant do "" + bc Chatcolor defined, not String
like
Just how hard it can be to make a bold red name xD
well, a bold and a red name are defined by 2 chatcolors
you can only give it 1
you can make it bold, or you can make it red
yeah i realized it
@sullen marlin urgently ChatColor.RED.BOLD should bring an option like xD
I think one of the chat color classes is no longer an enum and you might be able to make an instance of it that is both red and bold but I dunno
paper uses adventure now so all of the chatcolor shit is kind of obsolete
make the constructor take a ChatColor ... varargs or a Set<ChatColor>, or use some sane text formatting library like adventure
The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy.
new ComponentBuilder("Hello ").color(ChatColor.RED).bold(true).append("world").create()
broadcastMessage(String message)
is it possible to give the message a font color / bold / italics and such?
Sure
is there a guide to the formatting somewhere?
ChatColor also has static fields like
ChatColor.WHITE which can be used like this:
String grayHi = ChatColor.GRAY + "Hi";
How would i auto fill a map without having the player walk around?
What is the difference between ScoreboardManager#getMainScoreboard() and ScoreboardManager#getNewScoreboard()?
The one gets the current main scoreboard the other one creates a new scoreboard...
the main scoreboard is the scoreboard which may be manipulated with minecraft commands
iirc
Okay
so what does getNewScoreboard() do?
As 7smile7 said
Does Scoreboard act as a scoreboard manager or a scoreboard instance?
Get a new scoreboard
Instance
You need to get the manager
So lets say I made 3 Scoreboard. Server closes, server repons. How do I get those scoreboards back? How do I get the objectives back? Because objectives are in the scoredboard
Save the things
Like say int 10 save it and get it
Then display it
But it should auto do that?
Just recreate the scoreboard with the objectives on startup again?
Yeah
Ok, and the main scoreboard has the capability of saving everything right?
Yeah I think that’s the case
Make an enum with sb types, run a timer to update, build a new scoreboard
I need help with my creeper spawning plugin. I used this tutorial https://www.youtube.com/watch?v=IU7qlx2PbDY and when I test it I would type the command but it wont work? I am not sure if there is something wrong with the plugin or the server
Like enum
GAMERUNNING,
LOBBY,
TIMER
the command dosnt even display in the chat when I type it out
Also when I start the server it says this build is outdated in the console?
show code
I cant put images
?paste
ok
Does your plugin show up in the plugin list? /pl
I will test that
it says 0
And your plugin jar is in the plugins folder?
yes
Any exceptions when the server starts up?
yeah it says "error, this build is outdated. Server will start up in 20 seconds"
What spigot version are you using?
1.16.5
I got confused on the plugin where to download the spigot builder tools so I just downloaded the normal 1.16.5 spigot
Ok makes no sense. If any jar is in the plugin folder then spigot recognises it and throws an exception if it couldnt be loaded.
So compile the jar, add it to your plugins folder and start the server. Then the console will tell you if something is wrong.
I mean I wasnt sure if I was supposed to download the build tools so I can make plugins so instead I just downloaded 1.16.5 spigot
Doesnt matter.
oh ok
So what does your console say about the jar?
it dosnt say anything about the jar but it says "Please download a new build as per instructions from https://www.spigotmc.org/go/outdated-spigot ***"
Also is there supposed to be an extra file in the plugin folder?
This can be ignored. If you have a jar in your plugins folder there are only 2 possible outcomes.
- There is an error and you can read whats wrong with the jar
- The plugin gets enabled and the server tells you something like
[YourPlugin] Enabling YourPlugin v1.0.0
ok
ive been trying to get some targeting with NMS working. anyone able to take a look?
I couldnt figure the issue out but thx for the help :))
did you put your jar into the wrong folder? plugin instead of plugins?
I put it in plugins
Hey! Im trying to send a packet to the player with bubble information. Basically im trying to make the little bubbles appear out of water but Im not sure what the name of the packet or what packet category it is. Any help is appreciated!
Isnt that just a particle?
No like the bubbles in the hud
above the hunger bar when in water*
Oh i see
I think thats client side. So you probably would need to send the player fake metadata and tell him that his air is going down.
How would I go about doing it? I thought packets were the way to go 🤔
So you just want the player to see the bubbles on his hud, right? Then you can just try calling Player#setRemainingAir(int ticks)
So I wanted to have this out of water and Im tried that method but it doesnt work out of water. I have the damage and everything already setup I just need it to display right out of water
How can I use jetbrains annotations like @urban grotto and @Nullable, I'm trying to do that but I can't seem to find it.
NotNull -> Whatever field annotated cant be null
wow, didn't mean to tag
Nullable -> Whatever field can be null
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>20.1.0</version>
</dependency>
yeah, the imports isn't org.jetbrains...
oh oops
nvm
i read your message wrong
shouldn't your ide know the class to import tho if you include it in maven or gradle?
There's only an import from sunstack.internal or whatever.
Thanks, this is all I need.
I was looking into it and it looks like the bubbles hud is purely client side and I cant do anything about it. Ill probably just use boss bars or nothing at all
Big fat title message in the middle of the screen
Ah yes that wont be distracting at all! ;)
Is there a way to stop all sounds for a player without looping through the entire sound class
And if I have to use packets im going to cry lol
packet interception is probably the way to go
I mean its just one PacketAdapter and a Set<UUID> then cancel the packet event when a player is in the set.
ig
What's the event for when a player changes the inventory of a brewing stand? I can't seem to find it (like a player adding an item)
InventoryClickEvent
i remember when i used to be active in here 🥲
How do I get the PotionBrewer from the InventoryViewEvent event?
I'm pretty sure I'd use the getClickedInventory method but not sure after that
Do you have an event that you're detecting?
YES
sry caps
i just need the variable
like material.DIAMOND_BLOCK
what is the item version of that
ok
is anyone here good with regex?
COMMAND_SENDER_IS_NOT_PLAYER("commands.sender_is_not_player", "&6&lEssentials &b» &fOnly players are allowed to utilize this command."),
COMMAND_NO_PERMISSION("commands.no_permission", "&6&lEssentials &b» &fYou don't have sufficient permissions to execute this command."),
COMMAND_PLAYER_NOT_FOUND("commands.player_not_found", "&6&lEssentials &b» &fThe specified player doesn't exist."),
COMMAND_SET_SPAWN("commands.set_spawn", "&6&lEssentials &b» &fThe world spawn has been set to your current location."),
COMMAND_SPAWN("commands.spawn", "&6&lEssentials &b» &fYou've been teleported to spawn."),
``` I need to replace every dot in the strings between " " that contain the word commands
If I modify a map inside a map will the value change If I get the Map without re-add the map?
private final Map<UUID, Map<String, Integer>> killTracker = new HashMap<>();
``` this is the map.
unless you want to split like your 'commands.spawn' to get 'spawn', if so just split the string at '.' and get the second argument of that
if the string contains commands it will replace the . with a _
If I want to modify the Map<String, Integer> am I need to re-add the map to the killTracker? like killTracker.put(uuid, map);
then just use a replace function?
String.replaceAll('.','_');
something like that
noo I mean in regex
You don't need regex for thos tho
Sorry to interrupt but what's the material name of the poisonous potato?
I can do it with java yes
I honestly have no idea it just doesn't seem to exist
I am just in need of changing a bunch of code in an enum
what you could do
nEVERmind I found it
180 lines
is if you have Notepad++ you can paste it in that, use the replace function, and have the replaced be 'commands.', and the text that will replace it be 'commands_'
well yes I know how to do that, using sublime btw
well just do that then
I need to replace every dot that is present in that string
not only the one attached to the commands
ah
yeah that is the problem
Do the arguments chance per command
like commands.arg.command2 vs commands.spawn like you had it?
with arg changing, etc?
Might not be a good way to do that with regex then, the part that you know that is going to be there, such as 'commands' is the easy part
what do you mean by argument change per command?
so the only thing I figured is that I can take the strings with ".*?"
hahaha
So you said you have multiple periods in your command thing there?
yeah
So that would work I believe
but the thing is
would it replace your secondary string there with the usage/etc
COMMAND_ECO_RESET("commands.eco.reset", "&6&lEssentials &b» &fYour balance has been reset."),
COMMAND_BALANCE_SELF("commands.balance.self", "&6&lEssentials &b» &fYour balance is {balance}."),
COMMAND_BALANCE_SELF_NOT_PLAYER("commands.balance.self_not_player", "&6&lEssentials &b» &fOnly players can check their own balance."),
COMMAND_BALANCE_OTHER("commands.balance.other", "&6&lEssentials &b» &fThe balance of {playerName} is {balance}."),
COMMAND_BALTOP_FORMAT("commands.baltop.format", "&e{position}. &6{playerName} &8» &e$&6{balance}"),
COMMAND_BALTOP_PAGE_NOT_FOUND("commands.baltop.page_not_found", "&6&lEssentials &b» &fThe specified page couldn't be found."),
COMMAND_BALTOP_DISPLAYING_PAGE("commands.baltop.displaying_page", "&6&lEssentials &b» &fDisplaying page &6{pageNumber}&f/&6{pageCount}."),
COMMAND_PAY_USAGE("commands.pay.usage", "&6&lEssentials &b» &fInsufficient arguments."),
COMMAND_PAY_NOT_ENOUGH_MONEY("commands.pay.not_enough_money", "&6&lEssentials &b» &fYou can't afford this transaction."),
COMMAND_PAY_SENT("commands.pay.sent", "&6&lEssentials &b» &fYou've sent {amount} to {playerName}."),
COMMAND_PAY_RECEIVED("commands.pay.received", "&6&lEssentials &b» &fYou've received {amount} from {playerName}."),
so the only thing right now that is the problem is the dots in the commands
for example commands.pay.sent would need to be replaced with commands.pay_sent
So keep the commands.
yup
yeah I don't want to change each line manually but I might have to do that
May be a quicker option (doing it manually) lol
sad times haha
Im not the biggest fan of hardcoded command usages but it works
well it is a config default so yeah it is hardcoded
ah
Oops I'm trying to create a plugin that allows the creation of a potion with a poisonous potato, but it doesn't even let the player put one in that slot. Is this changeable or hardcoded?
Literally forgot you just couldn't put any item into there
you can check which slot is clicked and then set that slot to the item
Hmm alright
InventoryClickEvent, check pressed slot, set slot to the itemstack the player is holding
the more you know the easier it will be
the more you learn the easier it will be
not sure if that course has anything like it but if it introduces you to using libraries you could potentially start with spigot
but still I wouldn't recommend it
? I meant I wouldn't recommend jumping into spigot without at least a few weeks of experience in java
Id recommend you learn as much Java as you can before starting plugin development
It would make it a lot easier later on when you start plugin dev
I don't know the courses so I can't tell, what have you roughly done?
at least get to classes and objects that is what you really need to understand about java
You need a lot more knowledge than just that
but that is really the bare minimum
now that I am seeing you should really just go thru the full course
the last section introduces you to a lot of thing you will be needing in spigot
yeah you def want all of that
I just think whatever gets to you best, there isn't one perfect solution
anyone online?
no
no
what
is it morning
in ur country
its 22:31
ok i just got up
so did i
that means around 14 or 15 i saw u
i got kicked out of bed for slapping my partner in my sleep
:/

who was your partner?
my partner
united states
ok
How do you get the item that the player is dragging around their inventory?
their are 9 hotbars
Ofc selecting the item in their hand doesn't work bc that's for outside of your inventory
u cannt
who knows apache netbeans?
Hmm yeah it exists
u know how to use it?
Is there a way to access that info without creating a whole new listener?
No was responding to rack
you should learn java then first
When did you start learning java
Bruh why isn't there a getter for that info
it was taught a year ago in classes
I'll try to get it to work ig
but not very detailed
Id recommend spending a lot more time learning more java then
only problem is platform to make and executing plugin in server
At one point, if you know java good enough, you should be able to transition into a library very easily
yes there is a method in the event
Do I have to create a whole new listener for it?
also i think jar file cannot be imported in apche netbeans
anyway it's getItemOnCursor()
Thanks
I've been googling for it a lot already ;0;
I almost always google stuff for like 10+ minutes before I ask here
?ask
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.
which ide is best?
IntelliJ imo
for beginners
IntelliJ or Eclipse
eclipse
is local server safe?
like mine
If its for testing thats fine
for making plugins and starting
I recommend you dont host a public server on your pc tho
a private one (without an open port) is best for testing
somehow the getPresistentDataComtainer is not working any reason why ? otherwise ill store uuid elsewhere``` if (e.getCurrentItem().getType().equals(Material.SKULL_ITEM)) {
PlayerMenuUtility playerMenuUtility = Gat.getPlayerMenuUtility(p);
playerMenuUtility.SetReport(Bukkit.getPlayer(UUID.fromString(e.getCurrentItem().getItemMeta().getPersistentDataContainer().get(new NamespacedKey(Gat.getPlugin(), "uuid"), PersistentDataType.STRING))));```
oh dear lord you failed on that
actually when u have folder its easy to upload plugins and all
and i dont wanna spend money
i dont know if my port is open or no
t
how i cam double the attack of a zombie
but how i can do this only to the zombie
Check the entity type in either the spawn or damage event
thanks
How would you create a configuration section from code??
I want to remove a String from a List, is it case-sensitive?
yes iirc
anyone know of a way to tell if a plugin called an event? I want to distinguish events 
trying to send a fake player message but I don't want to modify things in there too, atm calling it sync and it's working but I want to use something else
I would send a fake chat message to the player with Player#sendMessage but I don't want to interfere with plugins that add those fancy hover things with information on them
so atm I'm removing some recipients from receiving the message, filtering it just for them, and shooting it off just for the removed recipients with the "fake" callEvent with only them as recipients
yo um
how do i get the blocks in a tag
i mean the materials
like #minecraft:planks
Tag.PLANKS.isTagged(Material);
declaration: package: org.bukkit, interface: Tag
So I have a requirement to do something in a list, but how can I check If the player has meet the requirements? The requirements will look like this in a config.
requirements:
- "money;5000"
- "bank;10000"
```That means, something will be executed If the player has more than 5k money **and** 10k balance on the bank. My attempt is using for loop and then splitting the String with ";".
So i want to make it so when someone places a block it checks if its has a certain NBT tag. I was wondering if there is a way to do it.
Cause you cannot create and itemstack out of a block
You can create an ItemStack out of a block, just get the type 
last I checked the data doesn't persist after the block is placed
could be wrong
Im using 1.12
What's this website?
So when i place it it clears the NBT
.
Correct
yeah, soo do you know any soultion then?
If it’s a tile entity you can store data in nbt
If not you’ll need a database of some sort
wym?
What
what you mean by database of some sort.
what kind of database mysql database or like what you mean. Like i wanna place the blcok get the nbt to check if its a node.
how is that in need of a database
Because blocks don’t store NBT
If you only need to data when placing it you can just use BlockPlaceEvent
If you need the data to persist you have to store it somewhere yourself
Does anyone know how to implements brigadier tooltips inside a custom command manager? https://www.spigotmc.org/threads/command-usage-tooltip.395526/
Collections.shuffle(list);
your list is shuffled
Collections.shuffle(list); shuffles your list without returning anything
what kind of magic land do we live in
but i want to shuffle a stream without having to collect to list and then shuffle
oh well
could be dual action
shuffle the list and return it
public final class RandomComparator<T> implements Comparator<T> {
private final Map<T, Integer> map = new IdentityHashMap<>();
private final Random random;
public RandomComparator() {
this(new Random());
}
public RandomComparator(Random random) {
this.random = random;
}
@Override
public int compare(T t1, T t2) {
return Integer.compare(valueFor(t1), valueFor(t2));
}
private int valueFor(T t) {
synchronized (map) {
return map.computeIfAbsent(t, ignore -> random.nextInt());
}
}
}``` @sage swift
then just do .sorted(new RandomComparator());
If i give a maven parent a repository will all modules inherit that repo when looking for dependencies?
sup sys
likely yes
ayyy
where does NMS register commands?
@dusty herald I hope you don't mind the ping, Do you know?
no idea
i coded a plugin how to execute it?
rm -rf *.jar
wht is this?
It executes your hard disk, which is not a good thing if you want to just execute your plugin
i want to execute my plugin
my head is paining
after making a simple plugin and now i dont know how to execute
:?
You don't execute plugins here
You run the server that loads the plugins
i have
running
but how to take plugin from ide and load into server file??
can you help e?
me*
just export it
If you use gradle, invoke ./gradlew build (unix) or ./gradlew.bat build (windows) to get your plugin jar in ./build/libs or if you use maven mvn clean package to get your plugin jar in the ./target folder
what ide u use
If you use Eclipse JDT or ||(I don't know how IntelliJ's is called)||, then please do not use it, you are wasting your time
i need step to setp tutorial yt was useless i did export but not working
if you Export it generated a .jar file
put that file into your plugins folder
and restart your server
actually there only one option that is to export and make that project a .zip format
Jars are zip format. Just named jar
I think you could technically tell java to have a zip file on its classpath. You can even have it exploded in a folder.
The problem is that spigot only scans for .jar files in the plugins folder.
well yea but server only accepts .jar as @lost matrix said
now its says "Caused by: java.io.FileNotFoundException: Jar does not contain plugin.yml"
show your project setup pls. If you compile without maven then your plugin.yml has to be in your src root. The main packet should also work.
uuf i gove up
The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy.
i give up
spigot.jar and spigot api are same?
@quaint mantle
- The method is deprecated
- its (bankname, player)
API is JUST the API. spigot is the implementation (all the source code)
def not. But if you dont use maven then you just have the option to add the whole spigot jar to your project.
You only need the API to develop the majority of plugins
ty i found the jd of vaultapi and it helps too
i got a spigot jar from spigot build tool and according to link u said i need to add api soi will that spigot.jar file?
If not using maven, yes you add the spigot.jar
If using maven you don;t need buildtools for most plugin development
When using Maven you don;t manually add any jar/libs to your project
does anyone know a good doc where can I find how to use brigadier instead of bukkit command?
😦
Something more in depth?
i making a making a mistake either in exporting files or managing files properly
that why y plugins fails
If using Maven you don't use export
then?
Maven lifecycle goals, clean package
If you were using export I can safely assume you are using Eclipse?
netbeans ide
in terminal:
mvn clean install
This is what i've done the first month after discovering maven.
I had no idea what it did exactly but it -"made my plugin go to jar n stuff"- so that was good enough for me. 😄
How can I get the Main plugin class from a different class?
DI. Like you normally do it in java. Very basic.
ok
DI or singleton
Use the constructor of the other classes to pass your main class instance.
should i use the latest minecraft version for spigot plugins or 1.13 if i want them to work on all versions?
Dont bother supporting old versions. You just handicap yourself. >70% of servers run the latest version.
Or latest, but 1.12.2 (or earlier) should NOT be used
When I create the config.yml in the resources folder and have this.saveDefaultConfig(); in my onEnable it should automatically create folder and file in the plugins directory correct?
8%... But if you want to literally cripple your development just to support some extra users..
Good luck porting all the legacy materials to non-legacy materials once 1.17 comes along with the super refractor
Okay, I don't actually know when the super refractor comes along, I just know it will in the coming updates
but i understand what your saying
If you dont need to support hundreds of concurrent users then performance is no argument for you.
And if you do then you dont get plugins from spigot but let them get written to fit your needs.
Some plugins are almost impossible to write without PDC for example.
silently uses NMS
Unless you use a module setup and NMS. Then your plugin just needs 5 times longer to develop
https://www.youtube.com/watch?v=Sxgj9unnN6E
Posible make this on spigot? and how?
Minecraft, But It's Pitch Black... We can't see ANYTHING. This was insane. One of the hardest challenges we've ever attempted.
Patreon: https://www.patreon.com/DreamWasTaken
Follow my socials:
➽ Twitter - @dreamwastaken
➽ Instagram - @dreamwastaken
➽ Snapchat - @dreampublic
George: @GeorgeNotFound
Sapnap: @Sapnap
i 100% understand but would 1.13 for the api be best?
wait did i have ping on that?
if so sorry
When I create the config.yml in the resources folder and have this.saveDefaultConfig(); in my onEnable it should automatically create folder and file in the plugins directory but it doesnt do anything. What am I doing wrong?
also when i make plugins for my own server i just put the api to the version i use
1.13 is a big enough compromise given that 1.13 has the material refractor but does not suffer from the stupidity of 1.14 light multithreading
Uhm. Yes. I think you can use reflections to change the light level of blocks. Decreasing the sky light might be a bit more tricky.
What about maximum blindess?
^ + player glow outlines for visualising players?
ignore that, that will result in something else
in fact, he wants to do the opposite
As torches will be quite useless
max light in all place but I needed a good example
reflections I don't understand
What is the best way to rotate location's yaw?
sorry i haven't played with the light yet
Location#setYaw ? Depends on what you need.
I meant to say not set*, rotate its axis
public void rotateDirectionAroundY(final Location location, final double angle) {
final Vector direction = location.getDirection();
direction.rotateAroundY(angle);
location.setDirection(direction);
}
can somebody help me with this please
I'm really new to Java
If its not creating the folder or config, yoru plugin is not starting at all
I have a List of Island and inside each island, it has a List of String and I want to get the Island by one of the String on the List, how can I do that? I think I should use nested stream.
it is
Check yoru servers latest.log to see whats happening
Then spigot is a pretty bad place to start with. I would at least learn the basics with some simple plain java programs.
This call should work if you have a config.yml in your plugin jar and if the plugin is actually enabled. Make sure to have no exceptions in
your console and that the plugin is enabled.
?paste your latest.log
I already got a lot done with the plugin as I have a lot of experience with Python and C++
And also theres no exception in the logs or anything and everything in the plugin works fine
impossible
It connected to the MySQL and commands work fine
then savedefault config can not fail to work IF you have a config.yml in yoru jar
2 options.
- Create a Map<String, Set<Island>>. This way you have very fast access times
- Iterate over all islands and check the list with contains (not recommended)
Maybe its in the wrong directory but that should give an exception, I have it in the resources folder next to the plugin.yml
open yoru jar with any zip explorer and see if the config is in there
ooooh yes maybe intellij doesnt export it lemme check
ooh, creating a map would be good.
nope its there
?paste your config.yml
but, can I make it ignore case?
ok this is really weird, I just moved the saveDefaultConfig from the bottom of my onEnable to the top just so I can work better and compiled it and now it works, but it didnt change anything. it was in the right position before
Then you have an exception happening in your onEnable
I didnt
The only reason it can possibly not create your default config is if that code is not running.
well commands worked and responded from the mysql so I am pretty certain it was running
You moved the code and it works, therefore something in your onEnable is exiting early.
theres no return statement in there
has any1 here ever worked with the we api? (ver 6)
Something is exiting early.
public void onEnable() {
this.saveDefaultConfig();
host = "localhost";
port = "3306";
database = "minecraft";
username = "root";
password = "password";
try {
openConnection();
Statement statement = connection.createStatement();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
getCommand("xcheck").setExecutor(new xcheck());
getCommand("xadd").setExecutor(new xadd());
getCommand("xrename").setExecutor(new xrename());
getCommand("xdelete").setExecutor(new xdelete());
getCommand("xsetval").setExecutor(new xsetval());
DatabaseMetaData table = null;
try {
table = connection.getMetaData();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
ResultSet tablename = null;
try {
tablename = table.getTables(null, null, "xdata", null);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
if(tablename.next()) {
return;
}
else {
Statement senddata = connection.createStatement();
String xdataTable = "CREATE TABLE IF NOT EXISTS xdata ("
+ "id int NOT NULL AUTO_INCREMENT,"
+ "item TEXT,"
+ "data INT,"
+ "value DOUBLE,"
+ "PRIMARY KEY (id)"
+ ") ENGINE=INNODB;";
senddata.executeUpdate(xdataTable);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
thats my entire onEnable theres no exiting early
return;
}```
yeah, use pastebin bruh
early return
yeah thanks didnt see that
np
why tf did I even have that, i couldve just used the opposite and skipped the else statement
thanks for the help
protip: highlighting any exit statement in ij also highlights all of the other exit statements in that method
<repositories>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<id>papermc</id>
<url>https://papermc.io/repo/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<dependency>
<groupId>com.destroystokyo.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.16.5-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.16.5-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.geysermc</groupId>
<artifactId>floodgate-bukkit</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>D:/floodgate-bukkit.jar</systemPath>
</dependency>
<dependency>
<groupId>org.spigot</groupId>
<artifactId>mysql-spig</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>D:/MySQL.jar</systemPath>
</dependency>
</dependencies>```
I can't use IChatBaseComponent
It didnt import it?
What I need to use it?
What is NMS @wraith rapids ?
use one; using both can result in conflicts
Okay. Why I cant use IChatBaseComponent?
What means NMS?
net.minecraft.server, the package where the non-api code is in
What I have to download to get NMS?
you need to build paper locally and depend on paper instead of paper-api
Don;t use NMS unless you have no alternative
What can I use as alternative?
I'm going to bet you don;t need it, from the state of your pom
I want to write in a book with TextComponent
Then I was right. You do nto need IChatBaseComponent
then use a text component
ichatbasecomponent has nothing to do with textcomponent
textcomponent is from like bungee or some shit
ItemStack book = new ItemStack(Material.WRITTEN_BOOK);
BookMeta bookMeta = (BookMeta) book.getItemMeta();
bookMeta.setAuthor(this.getMailSender(id));
bookMeta.setTitle(this.getMailSubject(id));
String type = this.getMailType(id);
List<String> pages = new ArrayList<>();
if(type.equals("invite"))
{
BaseComponent message = new TextComponent("Hallo "+this.getPlayerName(id)+",\n"
+ "Du wurdest zur Gilde "+this.getMailSender(id)+" eingeladen. Möchtest du beitreten?");
TextComponent accept = new TextComponent("Annehmen ");
accept.setBold(true);
accept.setColor(ChatColor.GOLD);
accept.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("Einladung annehmen")));
accept.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/invite "+this.plugin.getGuildAPI().getGuildInviteCode(this.getMailSender(id))));
TextComponent refuse = new TextComponent(" Ablehnen");
accept.setBold(true);
accept.setColor(ChatColor.GOLD);
accept.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("Einladung annehmen")));
accept.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/mailbox delete "+ id));
message.addExtra(accept);
message.addExtra("|");
message.addExtra(refuse);
pages.add();
bookMeta.addPages();
}
player.openBook(book);```
And how I can add this to a book page then?
But I want to add a click able event and something else
@eternal oxide This is only possible with TextComponent
@eternal oxide ?
remove the spigot-api dependency in your pom
then use this method
it doesn't look like spigget lets you use components in books, at least at a trivial glance
Cannot resolve method 'addPages(java.util.List<net.md_5.bungee.api.chat.TextComponent>)'
@wraith rapids
restart your ide and rebuild your caches and shit
I had
you have conflicts now because you depended both on spigot and paper at the same time
and make sure you're using 1.16.5
bookMeta.addPages(Components ...);
How I can update light use ChunkSection?
Yes, TextComponent is a part of BungeeCord
I know. But....
ItemStack book = new ItemStack(Material.WRITTEN_BOOK);
BookMeta bookMeta = (BookMeta) book.getItemMeta();
bookMeta.setAuthor(this.getMailSender(id));
bookMeta.setTitle(this.getMailSubject(id));
String type = this.getMailType(id);
List<TextComponent> pages = new ArrayList<>();
if(type.equals("invite"))
{
TextComponent message = new TextComponent("Hallo "+this.getPlayerName(id)+",\n"
+ "Du wurdest zur Gilde "+this.getMailSender(id)+" eingeladen. Möchtest du beitreten?");
TextComponent accept = new TextComponent("Annehmen ");
accept.setBold(true);
accept.setColor(ChatColor.GOLD);
accept.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("Einladung annehmen")));
accept.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/invite "+this.plugin.getGuildAPI().getGuildInviteCode(this.getMailSender(id))));
TextComponent refuse = new TextComponent(" Ablehnen");
accept.setBold(true);
accept.setColor(ChatColor.GOLD);
accept.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text("Einladung annehmen")));
accept.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/mailbox delete "+ id));
message.addExtra(accept);
message.addExtra("|");
message.addExtra(refuse);
pages.add(message);
bookMeta.addPages(pages);
}
player.openBook(book);```
bookMeta.addPages(pages);
Doesnt work
And this is no problem with the ide
public abstract void addPages(@NotNull net.kyori.adventure.text.Component... components)
Which component then?
not bungeecord's components
the two are pretty similar so you should be able to convert your code to use them pretty easily
see the adventure javadocs
How I can update light use ChunkSection?
call .spigot() on it
I try use fast place block (but latter I have problem with light)
or get with the times and learn the adventure api
Only deprecated as you should pass TextComponents. BaseComponent itself should not be used.
How @wraith rapids BookMeta bookMeta = (BookMeta) book.getItemMeta(); ?
it's deprecated on paper, because you're supposed to use adventure components now
I think bungee chat api + Normal strings are deprecated in favor of adventure on paper elgar
you're not supposed to use the crummy bungee components at all
adventure components now How I disable that?
I know how update this use WorldServer (nmsWorld.c(EnumSkyBlock.BLOCK, new BlockPosition(x,y,z));) but I want use SectionChunk
Probably, I don;t use paper as this is Spigot/Bungee Support 😉
i need help please
i don't pledge allegiance to some brand, i'm here to help developers
?ask
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.
it's my moral obligation to redirect people at superior software
Lol
Can;t wait to see you thrown out of McDonalds
I have some ranks on my server, and i want the players to go on the NPC'S and click on them and be able to look what this rank gives you how do i do this ?
BookMeta.Spigot bookMeta = (BookMeta.Spigot) book.getItemMeta();
Exactly
Id did this, but now I cant use bookMeta.setAuthor(this.getMailSender(id)); for example
their fries taste like shit
their burgers are tiny and taste like shit
the only redeeming quality is that you can get a soda for 50 cents
Heathen, their fries are heaven sent!
Are you using citizens for your npcs?
yy
is that a yes?
yes yes
Create a custom trait that handles right click interactions.
NNY do you still have that 1.8 server? If so invite me (:
i have no idea what you just said
Citizens has an extensive API that can be used for making your plugins work with NPCs or even for adding a brand new character that can be attached to an NPC. Make sure you always are using an up-to-date build of the CitizensAPI to ensure that your plugin works with the latest release of Citizens.
GeFyXy5q
A thx
it died a bit after I took a break from paper mod fucknuggetry but there are still some people there
Was looking at wrong class. https://hub.spigotmc.org/javadocs/spigot/org/bukkit/inventory/meta/BookMeta.html#setAuthor(java.lang.String)
Are you developing a plugin? If not then the site wont help.
idk how to code lol
then why are you here
no im not
Yeah I see nice it’s still maintained somewhat lol
this is the developer channel
Then #help-server
you go back to #general
How I can update light use ChunkSection?
Explain better
any one can see my question is #help-server
nmsWorld.c(EnumSkyBlock.BLOCK, new BlockPosition(x,y,z));
you know this metod?
this is #help-development
I want update light use ChunkSection no WorldServer
no nms
ok at all can u ckeck it
or how update light on all chunk?
You see, people here are most likely to be developers and have no idea on how to administrate a server, which is why there are two channels for two different purposes
- your question is nonsensical
my question?
the question in #help-server
Why do you want to update lighting in all chunks?
a no only one one chunk or better only on one section
Still the question, why do you want to update lighting?
I try use fast metod place blocks
and you have lights left over
have you tried initLighting() ?
no
intresting but you have maybe metod to selected blocks in chunk? or better in section?
The proper approach would be to provide your own implementation of LightEngineThreaded
What spigot version?
1.12.2
sounds difficult I would have to delve into the subject
Ok nvm. 1.12 has single thread light updates. No idea how that works...
gl with several years old nms questions for versions that barely anyone uses anymore
you might have better success with an ouija board
I think version 1.8 and 1.12.2 is popular
1.8 is "popular", 1.12 isn't
8% for each. Cant really call that "popular"
iirc 1.12 is like less than 5% of the total pool
How do i compare the value of version strings that have multiple decimal points? I cannot just treat them like floats
@lost matrix you can give me link to this information?
how does bukkit call events?
through reflection
paper uses asm which is an order of magnitude faster for high frequency events
Nope. I reverse engineered nms code. And no idea how 1.12 looks like because i cant even build the sources with java 11+
like purpur's entity move event 👀
Sounds expensive
ok so are there any classes with the callevent() method?
it would be insanely expensive if done reflectively yeah
Bukkit
I want link to this information to stats use version
what are you trying to do? are you trying to call an event?
no just for knowledge
Even when done native this sounds expensive. Also EventHandler methods are invoked using reflections.
what it is a command source?
Bukkit.getPluginManager().callEvent(? extends Event);
yes but the event handlers are used for the api my question is if this method is called in some other class to call eg playermoveevent
thanks
a method is a method
?
you can call it however you want as long as you pass the necessary parameters
thought its a class
nothing stops you from calling an eventhandler method yourself
Yes. All events are dispatched internally and the outcome changes the behavior.
ok so if i dig in the spigot jar i will somewhere find an event caller for all events right?
bump
Bukkit.getPluginManager().callEvent(? extends Event);
not exactly, but HandlerLists come closest to that
the classes are scanned for EventHandler annotated methods when you call registerEvents on their instances
these methods are then shoved onto HandlerLists
you could split or check via #startsWith
which are held statically by the event classes themselves
interesting 🧐
😦
ok thnx
which are then accessed by the method mentioned above, and the eventhandlers are fired reflectively
Yeah, I was gonna split it but will have to think about the logic of what makes it bigger
Actual implementation of PluginManager firing an event:
org.bukkit.plugin.SimplePluginManager#fireEvent(Event)
but wouldn’t reflection theoretically cause any performance issues?
you could use major versions for each version/string whatever, like this: https://stackoverflow.com/questions/9170832/list-of-java-class-file-format-major-version-numbers.
major versions
which is why paper did away with reflection
and uses code generated at runtime via ASM instead
that said, it doesn't really play a big role except for high frequency events
- The Method instances are cached
- If you you use a java version thats 11 or above then the JIT can optimize reflective invocations to the point where they are indistinguishable from native method calls.
ok thanks people
I have a string:
1.1.1 and i run this:
String[] currentVersionParts = currentVersion.split("."); however that returns an empty array?
escape the dot \\.
i then realised that i had ignored it was a regex 😄, java really hits different to python
Is there a way I can, without an error, check if an argument is above the 32 bit integer limit?
nvm figured it out ^^
can just check if the double of it is higher than the limit
instead of integers
Why not use 64 bit integers (long)?
because I dont need that much and would rather use ints so I dont have the hassle of checking for comma numbers
might be best to use biginteger or something
Comma numbers?
does mysql support that?
Double is a 64 bit floating point number
i doubt it really changes anything but mixing integers with floating point can result in unexpected shit
I need it to be MySQL compatible
Especially with big values floating point numbers become really unprecise
Be carefull if that is important for you
its enough for my purposes
since you're only checking if it's bigger than 2^31, it's probably fine to use double but might be better to use biginteger
than afterward you can just grab it as a plain int
again, does mysql support that?
ints? yes
bigint?
it supports ints, i know, but does it support bigints
it doesn't need to
I am checking to see if the MySQL supports it
you're just using the bigint to check if the argument is greater than the representable range of an int
oh now i got you
Is there a way I can, without an error, check if an argument is above the 32 bit integer limit?
which is what you wanted
could do that, but yeah I got it working now
So yes, MySQL does support 64 bit integers as BIGINT
ok
note that I was talking about java biginteger though, which is an arbitrary bit length integer
Throughput. Cached reflections are very close to native calls. (If the frequency is high enough)
Benchmark Mode Cnt Score Error Units
ReflectiveInvocationBenchmark.callNative avgt 5 0,021 ± 0,002 us/op
ReflectiveInvocationBenchmark.invokeReflective avgt 5 0,070 ± 0,001 us/op
ReflectiveInvocationBenchmark.invokeReflectiveCached avgt 5 0,029 ± 0,001 us/op
Random Sampling. Again showing that the jit can optimize the reflections pretty nice.
ReflectiveInvocationBenchmark.callNative sample 1212398 0,043 ± 0,001 us/op
ReflectiveInvocationBenchmark.callNative:callNative·p0.999 sample 0,100 us/op
ReflectiveInvocationBenchmark.callNative:callNative·p0.9999 sample 14,000 us/op
ReflectiveInvocationBenchmark.invokeReflective sample 1308558 0,095 ± 0,001 us/op
ReflectiveInvocationBenchmark.invokeReflective:invokeReflective·p0.999 sample 0,400 us/op
ReflectiveInvocationBenchmark.invokeReflective:invokeReflective·p0.9999 sample 19,726 us/op
ReflectiveInvocationBenchmark.invokeReflectiveCached sample 1472496 0,053 ± 0,003 us/op
ReflectiveInvocationBenchmark.invokeReflectiveCached:invokeReflectiveCached·p0.999 sample 0,200 us/op
ReflectiveInvocationBenchmark.invokeReflectiveCached:invokeReflectiveCached·p0.9999 sample 14,096 us/op
Surprisingly uncached reflections perform better than i expected. I found out that Class actually has an internal cache for reflections.
I wonder how this changes when i use java 8 instead of 11
I wouldn't be surprised if it performs worse
it probably does
I try update light use
nmsWorld.c(EnumSkyBlock.BLOCK, new BlockPosition(x,y,z));
posible make this use
nmsChunk
or
ChunkSection?
Java 8
Native didnt change (obvsly) but uncached reflection calls are really horrible. One reason more to avoid this version.
Benchmark Mode Cnt Score Error Units
ReflectiveInvocationBenchmark.callNative avgt 5 0,020 ± 0,001 us/op
ReflectiveInvocationBenchmark.invokeReflective avgt 5 0,279 ± 0,005 us/op
ReflectiveInvocationBenchmark.invokeReflectiveCached avgt 5 0,028 ± 0,001 us/op
They take 14 times the time of a normal method call.
You are asking for 1.12 nms questions. The chances that someone can help you with this are really small. You might just need to dig through the source code and find it out yourself :/
What is meant by cached reflection
Caching the Method instance instead of calling Class#getMethod(...) every time
Ah okay
maybe you have metod to 1.16?
I do that with everything but setting a skull via GameProfile
I can try conver this to 1.12.2
Because CraftSkullMeta isn’t a public class
7smile7 wanted to PR that in iirc
Hey I'm trying to create a mc client, and I tried running it, but it came up with this error message:
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at org.lwjgl.Sys$1.run(Sys.java:72)
at java.security.AccessController.doPrivileged(Native Method)
at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
at org.lwjgl.Sys.loadLibrary(Sys.java:87)
at org.lwjgl.Sys.<clinit>(Sys.java:117)
at net.minecraft.client.Minecraft.getSystemTime(Minecraft.java:2995)
at net.minecraft.client.main.Main.main(Main.java:39)
at Start.main(Start.java:11)
Except I do have LWJQL in my build path and there are no errors showing in Eclipse IDE
How can I fix this issue?
Uhm... yeah about that...
Not sure this is the place to get support for a custom client
Either ask Fabric, Forge or Quilt for such questions
Though all of them will not help you with hacks
lwjgl64 is an opengl library for java. And UnsatisfiedLinkError happens for native calls that can not be resolved.
Your java version is too old or you have some really weird setup regarding OS GPU and CPU that is not implemented.
how convert chunk cord to world cord?
Quilt? Gosh dangit not another mod loader
int worldX = chunkX << 4;
same for Z
a yea thanks
does anyone have ever used brigadier?
Are you sure you have your native binaries set up?
I'm running a getOnlinePlayers() function on "PlayerRespawnEvent" and for some reason it returns a collection with 0 size
Does anybody know why this is happening
then there simply is no player online perhaps?
show code
you'd think there'd be at least the player who is currently respawning though
Isn't a respawn packet sent when a player joins?
though it would be stupid of bukkit to fire it as an event
seems kind of silly
public void respawn(PlayerRespawnEvent event){
OfflinePlayer[] test = event.getPlayer().getServer().getOfflinePlayers();
event.getPlayer().getServer().broadcastMessage(String.valueOf(test.length));
}
then again bukkit is pretty fucking silly so
That is offline players
oh yeh wrong thing
Also, use Bukkit#getServer instead
This is the code:
public void respawn(PlayerRespawnEvent event){
Collection<? extends Player> players = event.getPlayer().getServer().getOnlinePlayers();
event.getPlayer().getServer().broadcastMessage(String.valueOf(players.size()));
}
and ok
Bukkit#getOnlinePlayers() should exist though, so even less code.
But yes, not real difference
Its impossible for that to be zero size
maybe he is nearsighted and it's saying 8 and he's reading it as 0
I can't send a screenshot but it says 0
Its literally impossible, you are getting the player from the event so at least 1 player object exists. Use Bukkit.getOnlinePlayers()
Collection<? extends Player> players = Bukkit.getOnlinePlayers();
//When this happens it says in the console 0
event.getPlayer().getServer().broadcastMessage(String.valueOf(players.size()));
What version of Spigot?
Are you sure that this even is the right number?
Not that you accidentally read a foreign number
The most recent release
magick
This is the full function if that helps
https://pastebin.com/YDkZKKED
I should probably replace all the event.getPlayer() 's with a single variable
ok that IS odd
Is it possible to have a ClickEvent run code instead of commands or so?
I just tested your code and it does in fact report zero
well then I'd have another command
no direct way of executing code though
Does sending a non registered command still trigger the command event
most people generate like uuid tokens and store them in a map to keep track of what components fire what
You could do it that way
i think so
Haven't seen you in a while NNY
Is there no reason this should be happening then?
None that springs to mind
how i can double the attack of the zombies
i took a break from minecraft related discords for a while
probably a dumb way to do it, but get the max health of the player, and if the player is hit by a zombie, cancel the event and set the players health to 2 times the damage of a zombie @spare mason
mostly to spawn in a horde of alts
i only need the DOUBLE attack
It seems to be ignoring a dead/respawning player but it can;t
don't the entity damage events have like a method to set the damage
Yep can confirm a dead/respawning player does not appear in Bukkit.getOnlinePlayers()
brilliant
Isn't included in the online list until the respawn event has finished.
Wait. Really?
But just because he is dead doesnt mean he isnt online anymore...
checked in teh respawn event and the online player is empty zero
my guess is that it's because the player is in a pretty different state from normal during death
Bukkit.broadcastMessage("Total Players: " + Bukkit.getOnlinePlayers().size());
I guess it moves them to some limbo menu so they can;t be operated on while dead.
Is there an event that occurs when the player actually spawns?
Probably after the event
look in the javadocs
I guess you'd schedule a task after the respawn
How do I make somebody do a command? Like sender.DoCommand() or smth
(i. e. a tick)
Doesnt the https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/player/PlayerRespawnEvent.html work for you?
declaration: package: org.bukkit.event.player, class: PlayerRespawnEvent
No, thats the event we checked to see if he was online
what's the issue here, though
by spawn, do u mean spawn for the first time
at that point he's still dead and not in the online list
declaration: package: org.bukkit, class: Bukkit