So super noob question (been out of the game for ~2-3 years now). Just redownloaded eclipse 2022, can add my old spigot-1.15.1.jar as an external jar and successfully import from it, but anything new (1.18+) that I build or find jars online for isn't recognized. I installed JDK 18 and am using that for the project. Rebuilt spigot+paper spigot several times with no luck. fresh installs all around - any help is appreciated
#help-development
1 messages · Page 58 of 1
Oh hm, I wonder, can I change the weather state to stormy/rainy without the rain? It kinda gets foggy during a rain doesn't it
Use the spigot api (no need for the jar unless you're dealing with NMS)
Let me check
What does that mean exactly?
Minecraft runs on one thread (mainly), attempting to interact with entities/blocks/anything else apart a couple specific things on another thread will cause an error
to fix that
Bukkit.getScheduler().runTaskLater(plugin, () -> {
// get entities
});
?bootstrap
Bootstrap Jar
The main spigot-1.18.jar is now a bootstrap jar which contains all libraries. You cannot directly depend on this jar. You should depend on Spigot/Spigot-API/target/spigot-api-1.18-R0.1-SNAPSHOT-shaded.jar, or the entire contents of the bundler directory from your server, or use a dependency manager such as Maven or Gradle to handle this automatically.
Please read the release notes for further information: https://www.spigotmc.org/threads/9-years-of-spigotmc-spigot-bungeecord-1-18-1-18-1-release.534760/#post-4305163
Btw, after using eclipse for ~3 years I switched to intellij (for two years now), it's so much better
Oh nvm, it doesn't create fog
I can't seem to find it right now, I do remember it was somewhere
It's all the same, just a bunch of rain
yeah
maybe snowy weather was the one?
nope
Snowy is just rainy in a snow biome right
yep
try the blindness/darkness effect?
:o interesting lemme see
Oh wow, darkness is really good, I wonder if i can change the color
Blindness just sorta blinds me
you can't change darkness's color iirc
aw okay
Tough luck
Any way I can team up zombies A and B and make them fight btw?
Yeah there was a way
Thanks
iirc summoning a snowball with the shooter as zombieA above zombieB's head, it will cause zombieB to get mad at zombieA
Was a way? :O
I don't know if there is a better way in newer versions
Lol, can I just make them inherently mad at each other tho?
Would it also be possible to await event? Basically I want to wait till a user sends a message but making another event handler is a really pain and non effective way
how can i double the damage dealt by tridents when thrown
nope
Like they'd attack the nearest zombie from an enemy team
😭 alright
Tho I am working on an API and it has that functionality
Uhhhhh give me a second
Okayy take your time
How to make polar bears and ravagers fight each other with commands
:o I see, is there a way to execute these commands through the plugin?
if the plugin supports it
what plugin do you mean?
Ohhh
then yeah
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "commandWithoutTheSlash")
that will execute as console
(you can also pass in a player instead of the console sender, so Bukkit.dispatchCommand(player, "commandWithoutTheSlash"), but in that case it's easier to run player.chat("/command"))
awesome thank you so much!
No problem! :D
Because the returned Map is the parameter index to the remaining ItemStack quantity. So every single one of those Maps will return a Map with a single entry where the key is zero, effectively overriding each other
Inventory#addItem() takes varargs of ItemStack. You can just pass them all into one call instead and it will resolve the issue
hello, i'm searching for a way to transform an args of my command (in my command class) into a timer (in my class bukkitrunnable class)
example: /potato tomato 50 -> args[1] = my timer = 50 sec
Can you help me pls ?
this.dropMissingItems(player, inv.addItem(
new ItemStack(Material.EMERALD_BLOCK, 64),
new ItemStack(Material.GOLD_BLOCK, 64),
new ItemStack(Material.IRON_BLOCK, 64),
new ItemStack(Material.LAPIS_BLOCK, 32),
new ItemStack(Material.DIAMOND_BLOCK, 4),
));```
This will work, trust me
o/
So, what's the problem? What have you tried so far?
i tried to save my timer into an arraylist<Integer> and call him in my timertask but it failed
this
yup, saw it, just dont even fixed yet
Should use the logger too instead of sysout
Why not just create a constructor taking an integer?
idk how to do it, i'll try to find
im i allowed to ask somebody to join my server i just need to test my command really quick
okok, but this only works if i put my command in my main right ?
ok i'll try see you in 1 min
Trying to work with NMS, when I try to add the spigot dependency in my plugin, i get this issue:
Dependency 'org.spigotmc:spigot:1.19.2-R0.1-SNAPSHOT' not found Do i need to add a specific source or something?
Did you run build tools with --compile craftbukkit?
Is that for when i run the jar file?
Don't do this, not needed
Why not?
CB is in Spigot, you just have to build Spigot is all
Oh wow wait I found an issue in the log
[WARNING] Failed to write tracking file C:\Users\User\.m2\repository\net\java\dev\jna\jna\5.10.0\jna-5.10.0.jar.lastUpdated
java.io.IOException: There is not enough space on the disk
at java.io.RandomAccessFile.writeBytes (Native Method)```
if you built spigot you don't even need a repo (other than local) to depend on spigot.
how many gigabytes is it supposed to need?
Yikes, how much storage do you have?
I literally had like 4-5 gbs free
have 1.1 TB but kinda full
delete that porn, your drive will be empty 😉
👀
Clear some space bro, it'll make ur computer faster
getting your personal PC to that level of full on the drive is gonna get fun for you
It's all on mega actually
right lemme see what i can remove
1 TB of ssd is like 100$, just buy more 
Hmmm, even with 5GB or remaining space, BuildTools only takes up like 1GB at most. However, at such little space remaining, I wouldn't be surprised if weird behavior like that just happens.
Lol it got me down to like 23kbs of free space
that's not a lot
surprised your OS has not died yet
how does one create a custom block
you don't really
Using the illusion of existence
usually people take some specific iteration of like, mushroom blocks and retexture
or mob spawners, tho those get heavy
wym
mushroom block has a lot of unique block states
which each can have their own texture
so you reserve one of those, custom texture it
and go from there
how many
eh I think 2^6
@last temple alright, i'm lost sir x)
64
Yes that would be 2^6
oh ok, it remove the error, thx
and now, how i setup args[1] in my command class ?
well can do the same with brown mushroom
to double your available space
beyond that, some entity fuckery
and using item custom model data
Just do java new TimerTask(yourSecondsHere)
^
Have a look into OOP @outer river , gonna make your life a lot easier
okok, i take note, i'm new in java sry btw x)
What would you have to be sorry for? We all started somewhere
Although I find that try catch kinda ugly
When I have stuff like that I tend to make a isInt(String input)method, as I'm probably gonna use it more than once
sure
but in some utility class
It's the same ofc, but just looks better in my eyes
Even more when u have to use it multiple times
holy molly, it works thx for all mates ! 🙂 @iron glade @last temple
btw, you know a good ytb channel for OOP ?
Hi I have a problem with gradle, when I build jar and use the plugin, I have a problem with HikariCP java.lang.NoClassDefFoundError: com/zaxxer/hikari/HikariConfig
It doesn't find HikariCP even though I put it in the build.gradle, any idea please?
repositories {
mavenCentral()
maven {
name = 'spigotmc-repo'
url = 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/'
}
maven {
name = 'sonatype'
url = 'https://oss.sonatype.org/content/groups/public/'
}
}
dependencies {
compileOnly 'org.spigotmc:spigot-api:1.19.2-R0.1-SNAPSHOT'
implementation 'com.zaxxer:HikariCP:5.0.1'
implementation 'org.jetbrains:annotations:23.0.0'
}
you need to shade it
when using gradle, use the shadow plugin
and relocate the dependency
their wiki should go over everything you need to know
hi i made such a simple configuration filesystem with gson, how does it load configuration from ItemStack, get this error? I searched on the internet but nothing works https://paste.md-5.net/raw/fogawubezi
why not use yaml
because json is more readeble and I got bored of yaml
so i want to try something new
json is more readable
In what world do you live in? JSON is nice and all, but it is far from the easiest readable language format.
thats my opinion ok?
toml
thanks @rough drift just got setup with intellij and i think its a good swap
I took a brake of 15 days from Spigot developing and now the server is not recognising my plugin in the plugins folder, I'm about 2 days trying to fix this but I ran out of ideas, could someone please help me? (is not the server 'cause downloaded plugins are working)
provide a server log
Unless you changed something in your plugin, there is no reason it should stop working if it was working before. (Provided you are using the same server)
Yaml is json tho, type theoretically any term expressed in type json is capable of being expressed in type yaml
it seems a UnsupportedClassVersionError has been thrown
probably because the java version
Anyone know a free place I can test my plugins without making my own local server
Have a nice gradle/maven setup which provides a bootleg server env
(Else any free host would do?)
can you link a free host?
thanks
What's chat header packet for
Just as an aside. JSON is not a configuration specification. It's a data storage specification
Yes you can technically make a configuration out of it... but like... you're definitely using the wrong tool for the job
The day when json becomes turing complete

This is most probably a question with a dumb solution, but how can I use the string Currency as a value in these finals?
String Currency = getConfig().getString("shop.currency");
public final Material SHOP_CURRENCY_MATERIAL = Material.Currency;
public final XMaterial SHOP_CURRENCY_XMATERIAL = XMaterial.Currency;
Thanks!
This is why matchMaterial is better
It also does some string processing and supports namespaces
Material.matchMaterial("mInEcRaFt:dIaMoNd SwOrD") will return Material.DIAMOND_SWORD
XMaterial has the #parseMaterial() method. Not sure if does namespacing, but it does work with strings.
package xyz.praydev.utils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.scheduler.BukkitRunnable;
import xyz.praydev.CustomTimer;
import java.util.Objects;
public class TimerManager extends BukkitRunnable {
private final CustomTimer plugin = CustomTimer.plugin;
long secLeft;
public TimerManager(long seconds) {
secLeft = seconds;
plugin.setRunning(true);
}
@Override
public void run() {
if (secLeft == 0) {
if (plugin.config.getString("completion.message") != null) {
Bukkit.broadcastMessage(Objects.requireNonNull(plugin.config.getString(format("completion.message"))));
plugin.setRunning(false);
plugin.setTManager(null);
}
this.cancel();
}
secLeft--;
}
private String format(String s) {
return ChatColor.translateAlternateColorCodes('&', s);
}
public long getRemainingSeconds() {
return secLeft;
}
}
I am running this task, but for some reason it takes like 3 seconds to run 1 second, anyone know what could be causing this? Maybe I need to run it async as rn I'm doing:
tManager = new TimerManager(seconds);
tManager.runTaskTimer(plugin, 0, seconds * 20);
Although other than that, I don't get why this would be happening unless maybe it's because I'm on a server.pro server lol
so instead of each "run" being 1 second, it takes around 3 seconds instead?
Yea it goes:
10...
3 seconds later*
9...
I tried with a simple task, just sysouting nothing special
I'm thinking its the host
What is your seconds variable set to? Because it's likely the issue.
Yeah, your "runTaskTimer()" should be accepting 20, not seconds * 20
That's the interval of time between each run
What is your seconds variable set to? Because it's likely the issue.
If you want to run a 10 second timer, you're going to be running a 10 second timer that goes down every 10 seconds ;p
^
seconds * 20, ie: 10 seconds * 20 = 200 ticks
Yeah, your TimerManager constructor should accept seconds, and your runTaskTimer() should accept just 20
runTaskTimer will run indefinitely until you cancel it, but the two longs in that method are the delay and the interval
If there's a 200 tick interval between each call of run()...
This will work as you expect it to:
tManager = new TimerManager(seconds);
tManager.runTaskTimer(plugin, 0, 20);```
will do, and with a video for it cause its very uhm broken
it can be used to dupe items
or ig it just does as a side effect of the bug
gonna make the issue which will have everything for it
ill send the link after its opened
My favourite kind of issues 
Would this be a minor issue i assume
Yes
if i unload a world do i have to create the world again and wait for the stuff to be loaded
what
do you mean remove?
so you want to load a world just to unload it again?
well after the game is finished i want to reload the same map without any of the blocks broken from before the first game is finished
idk if that make sense
thanks
SlimeWorldManager*
yee got it thanks
hello! i'm working on a command that will send a message if a player die, but only if command is typed before... (it contains a duration) so i added a boolean in my listener but actually, whatever i type the command or not, each player death send a message (like if boolean always set on true) i think its a beginner mistake but i dont find it, can you help me pls :
if my server's environment is paper is this still ok to report as the issue is using the spigot api and everything the server just happens to be paper?
Just want to add something: Usually you dont want to decrement a timer when doing countdowns or cooldowns.
You want to save timestamps and then periodically check how long the timestamp lays in the past.
Always prefer timestamps over manual decrementation.
It should be replicable on Spigot
yeah
public class krCommand implements CommandExecutor{
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
Player player = (Player) sender;
if (cmd.getName().equalsIgnoreCase("kr") && args.length == 0) {
player.sendMessage("§6/kr §f§o<reward> <duration> §8:arrow_right: §7define a reward wich will be given for each kill made by a player.");
}
if (args.length == 2) {
try {
int timer = Integer.parseInt(args[1]);
TimerTask chrono = new TimerTask(timer * 60);
chrono.enableEvent();
chrono.runTaskTimer(Main.getInstance(), 0, 20);
}
catch (NumberFormatException errornumber) {
player.sendMessage("§c " + args[1] + " is not a number!");
}
}
else if (args.length == 1 || args.length >= 3) {
player.sendMessage("§cWrong usage: /kr <reward> <duration>");
}
return false;
}
}```
Server software definitely matters so ideally you'd get it replicated on Spigot at least
Perhaps it's just a Paper-exclusive bug
will do rq
public class Event implements Listener {
@SuppressWarnings("unused")
private boolean button;
public Event(final boolean button) {
this.button = button;
}
@EventHandler
public void onKill(PlayerDeathEvent death) {
if (button = true){
System.out.println("true");
}
else if (button = false) {
System.out.println("false");
}
}
}```
kill instanceof Player is redundant
@outer river
public class TimerTask extends BukkitRunnable {
private int timer;
public TimerTask(final int timer) {
this.timer = timer;
}
private boolean back;
Event state = new Event(back);
public void enableEvent() {
System.out.println("enable");
back = true;
}
@Override
public void run() {
if (timer != 0) {
}
if (timer == 0) {
System.out.println("end");
back = false;
cancel();
}
timer--;
}
}
👌
now :)
The same goes for you. Dont decrement values inside a timer. Use a timestamp and periodically check how far it is in the past.
Imagine having to distribute your timer variable to different places. That would be a very messy dependency problem.
@outer river
Player kill = death.getEntity().getKiller();
if (kill instanceof Player) {
}```
wrong order here, do
```java
if(death.getEntity().geKiller() instanceof Player killer) {
//do stuff with the killer
}```
ps: This also covers null checks for getKiller()
null is never an instancof anything
okok
okay
what i dont understand is, whatever is my button state in my listener, if player dies, message "true" will pop, like if button always set on true...
is the button stored locally
button state is changed in my TimerTask class
Would you mind elaborating? I dont know in what context a button state exists.
private boolean back;
Event state = new Event(back);```
you are creating an object with a boolean that has no value yet
Or does this default to false in this case?
i though if i dont put any = true/false after, it will be false by default
i guess i'm wrong
okok
What exactly is this Event state?
i just want to get state of "back" and send it on my listener class
method wich will change button's state
Ok but then your runnable has the wrong task. Its responsibility is updating a button state. Not decrementing a timer.
oh i see
i just have to change boolean's class then ?
I cant give you an answer to this because you didnt elaborate on what you are trying to achieve. There is most probably
a better, overall approach.
@lost matrix
What better way to check when the player is afk? X minutes doing nothing
Compare player's yaw value to one from X minutes ago and if they are the same, they are still AFK.
Ok so you want to do this:
- A player uses a command
- After that, for a fixed period of time, you want certain death messages to appear
- After the time is over: The death messages no longer appear.
Then the solution is simple.
When the command is called: You save a timestamp + a duration.
When the death event is called: You check if the timestamp is in the past. If not -> Change the messages.
No need to use any runnables here.
And now to one of the most common questions asked on this discord: How do you get the timestamp to
both the command and the Listener?
You simply create a manager class, create one single instance in your onEnable and pass this instance to both
the listener and the command, through their constructor.
okok thx, i'll try to do this
This would be a skeletal start you could use.
public class DeathTimeManager {
private long deathTimeEndStamp = 0;
public boolean isDeathTimerActive() {
return System.currentTimeMillis() < deathTimeEndStamp;
}
public void setDeathTimerActiveFor(long milliseconds) {
deathTimeEndStamp = System.currentTimeMillis() + milliseconds;
}
}
ohh thx a lot, did it inherit from main then ?
This would be a more sophisticated approach
public class DeathTimeManager {
private static final Duration defaultDuration = Duration.ofSeconds(120);
private Instant deathTimeEndStamp = Instant.now();
public boolean isDeathTimerActive() {
return Instant.now().isBefore(deathTimeEndStamp);
}
public void setDeathTimerActiveFor(Duration duration) {
deathTimeEndStamp = Instant.now().plus(duration);
}
public void setDeathTimerActive() {
this.setDeathTimerActiveFor(defaultDuration);
}
}
No. This is a manager class. You should only every create one single instance of that class and pass it to where its needed.
okok, i take note thxxx
Can anyone suggest best plugin for custom enchants
What do you guys reckon the best approach to an rpg-style spawning system is?
i was thinking have pre-defined regions with set spawn points, keeping track of each entity in there making sure they dont spawn over the cap
but idk if thats the best way of doing things
```
Most actual rpg games have fixed spawn points and a fixed number of entities per point.
Kind of like a spawner block in minecraft but invisible.
yeah i was thinking of doing the same
i think anything more would be pretty taxing on the server
You could also have a number of spawn points each corresponding to a single spawner instance that decides how many mobs should be active
You just need a smart way of preventing them to wander away.
The farther they wander off the higher the chance that they wander in the direction of their spawn point.
Then you need an aggro system. How far (or rather long) should they follow players. What should be done on aggro drop.
Then there is the problem of chunk unloading. Do you simply save the mob and try to find the spawner it belongs to when
the chunk is loaded again? Do you just remove it and let the spawner spawn one again?
yeah need to do that in a way thats not too taxing
so far have ~13k loc and still 20tps
trying to keep it that way
It is sorry this took so long got busy Irl! Issue is opened: https://hub.spigotmc.org/jira/browse/SPIGOT-7136
Is there a way to change your source version (Java 11 to Java 8) from a IntelliJ project plugin?
How to get all console output like discordsrv with bukkit/spigot api?
Yes. So not using maven, right?
oh, that might be a problem
oh, thank you
Are you using maven?
yes
Then you need to change it in your pom.xml
I usually do it the explicit way by configuring the maven-compiler-plugin
<properties>
<java.version>17</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
There is also a shorter way
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
How do you compile?
artifact
So you dont use maven?
Because this way you can just delete your pom because it does nothing
using maven changes something important?
Im guessing you are also adding jars manually to your project?
oh, sorry, my mistake, I use maven
How do you compile then?
If you are new to java then you should probably not tinker with maven.
And be sure to learn the basics because Spigot is not beginner friendly.
Here is a link that tells you how to create a simple spigot plugin in IntelliJ
without maven:
https://www.spigotmc.org/wiki/creating-a-blank-spigot-plugin-in-intellij-idea/
I highly recommend you to setup a new clean project with this guide.
The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy.
yeah, my programming experience is very low besides my code runs pretty well, I'm not graduated or something but I'm currently studying
thank you for your advice
public class DeathTimeManager {
public int timer;
private final Duration duration = Duration.ofMinutes(timer);
private Instant current = Instant.now();
public DeathTimeManager(final int timer) {
this.timer = timer;
}
public DeathTimeManager() {
}
public boolean isEnable() {
return Instant.now().isBefore(current);
}
public void setTimerFor(Duration duration) {
current = Instant.now().plus(duration);
}
public void setDeathTimerActive() {
this.setTimerFor(duration);
}
}
public class Event implements Listener {
DeathTimeManager instance = new DeathTimeManager();
boolean isEnable = instance.isEnable();
@EventHandler
public void onKill(PlayerDeathEvent death) {
if (isEnable == true) {
System.out.println("true");
Player kill = death.getEntity().getKiller();
if (kill instanceof Player) {
System.out.println("killer");
}
}
else if (isEnable == false) {
System.out.println("false");
}
}
}```
@lost matrix sorry to ping you again, i need you help one more time : when i execute my command, my event stay on false, idk where it comes from
Anyone have any ideas how I could work around this issue: https://hub.spigotmc.org/jira/browse/SPIGOT-7136
Player kill = death.getEntity().getKiller();
if (kill instanceof Player) {
System.out.println("killer");
}``` this still not good
yeah, dw about that, i will delete this later
Don't need to use == on booleans
hem, if i use only one, it set my event on true
You can do
if (isEnable) {
} else {
}```
The code still does the same, it's just simplified
Shouldn't you have a per-player death counter?
yeah i'm dumd
nop
What exactly do you want to do, so I can better help you
;\ that code seems faulty no matter what you want to do
i want to do a command wich willget a duration, and for the given duration, event(s) will happen(s)
just add the player to a list and remove him after x seconds
and in the events check if the player is in the list
like i do : /kr qfdgsdfg 10
-> for 10 sec, if player dies, message will appear
Yeah I think you're overcomplicating it
hmm; i see what do you mean, i'll test it
Because you didnt do what ive suggested to you.
Every time you create an instance of your manager class, the manager class
has its own unique variables. So if you create one instance in your command
and one instance in your listener then those two instance have their own variables
and dont know each other.
Never create more than one instance of manager classes
Is there a consumer that doesn't have a pass value?
Runnable
Runnable someAction = () -> System.out.println("Hi");
No
public LanguageManager setLanguageCode(Function<String, String> languageCode) {
LanguageManager.languageChangeConsumer = languageCode;
return this;
}```
I need something like this
but without the first string
hmm okay i see, but how i get my duration in my command and send in my event class the state of my boolean ?
because its irrelevant
That would be a supplier
private static final String[] names = {"Bob", "Peter", "Eleven"};
Supplier<String> nameSupp = () -> names[new Random().nextInt(names.length)];
A supplier, got it, thank you
You create one instance of your manager and pass it in the constructor of your command and listener.
7smile7 do you know why repo.codemc.io is always down?
its slowing down my compile times
Thats why i said you need to understand the basics of java. If you dont understand what any of the words mean (like instance or constructor)
then you can ask or search online
to like 6-10 minutes
Which dependencies are hosted on there?
I think its anvilgui for me
Because you usually only need to access it once. And after that the dependency is in your local maven cache
Unless you change the version or depend on a snapshot
If the version is tailed by -SNAPSHOT then you are depending on a snapshot version which gets pulled every time
so yes its a snapshot
This is illegal
And also not even available to the public
Run BuildTools with this minecraft version
And --remapped
If you use the special sources plugin
Oh but I need it because I code on my school laptop and I cant run build tools
they blocked terminal
Is it a windows machine?
yes
Well... can you create batch files?
batch files are blocked
Can you install programs?
you cant even open settings
nope
well you could if it doesn't need elevation
Hm. You could try using git bash. Anyways, there is not much you can do then.
why does bukkit have the static bukkit class instead of forcing everyone to use JavaPlugin#getServer()
seems kinda anti oop
is it just an old holdover that too many people use to do anything about?
?
Thats called the facade pattern. Common in APIs.
i guess
just seems better to have everyone use org.bukkit.Server
oh well
is there a benefit of either
this is much older than spigot
When using Bukkit you dont need to DI your JavaPlugin everywhere.
i guess
And there are quite a few questionable design decisions in Spigot. Thats just how
software ages over a decade.
And if it wasnt for years of legacy compatibility (looking at you 1.8) then spigot would be in a much better spot right now.
I had no idea there was a standard for api development, hope my library doesn't look like a mangled dog
nevermind
bad question
you would change everything
I am happy with where spigot is going though
special source for mojang mappings
the server autodownloading maven central libraries
any idea why its still supported?
instead of shading
Its not
technically it isn't
but so many people still use it
Honestly pvp isn't a good enough reason for 1.8 anymore
wasn't 1.8 7 years ago?
Well its really just a vocal minority
?1.8
Too old! (Click the link to get the exact time)
yeah 7 years
and most of those people are not hypixel with a large team of developers who can keep updating the software
so it really is a massive vulnerability
sure
its still like a sizable chunk though it isn't no one
for some it is
im happy to hop on 1.8 and play a bit of hypixel from time to time
If i had something to say when CVE-2021-44228 hit i would have left out 1.8 and cleansed it.
There would probably be plugins then
maybe if spigot didn't release a patch for it
someone else would start a 1.8 based fork
that would actually be maintained and patched to keep security going
then we wouldn't have to deal with the 1.8 people
and they would stay safe
perfect society
If you fork 1.8 and actually maintain it then im not mad at you. But if you still write plugins and expect
anybody to help you with issues then im going to point you to old forum posts.
how far do you guys go as of supporting versions?
i just want a guarantee all my users have simplewebserver
java 18 isn't LTS iirc
only the latest
1.16.5+ at the least
then i don't have to write my own just to serve a zip file
i may have been wrong
I'm aiming on 1.17-1.19 currently
you'll definitely get help here with those versions
1.16.5+
Did something special happen in 1.16.5?
I have to be honest, besides creating plugins I'm not really playing MC myself
Quite a few things. But most of them are really only important for private servers.
Usually i write plugins for the latest version and if it works for older ones then thats just a "nice to have"
Makes sense
I rarely know devs that actually play the game a lot
I've been pretty much only writing in 1.18.2 even after 1.19's release i've yet to move up to the new API
i would love to play the game
but whenever i make a server i just find myself writing plugins 😭
Just today I got a comment on one of my projects saying
ThIs DoEsNt SuPpOrT 1.15?ß??ß
I feel like I'm the outlier where I actually play minecraft quite a bit outside of development
and my friends always complain about me never playing
I only play modded versions. With machines and factories 😄
i don't know what happens
I will play the vanilla smp here or there with some friends but yea mostly modded for me too
🤦
bruh 1.15 lmfao
usually once a year or so some friends and I host a modded server and play on it for like 4 weeks
I have actually been building quite a bit last year too. Let me see if i got some screenshots.
I'm playing project ozone 3 right now lol
Oh damn sometimes when I start building I can't stop
I'm glad other clients exist because god I will never install the malware that is overwolf
Is there a way to get all the output from the server? The Logger Handler doesn't fetch chats, etc. I've tried a lot, but it doesn't work
Being a perfectionist is both a blessing and a curse
latest.log file
Well i didnt find much
in Java plugin...
dude there's totally a giant bridge missing
agreed
connecting those towers
what are you trying to do
In the finished versions there is a broken down wall in between. Let me search if i got a pic of that
I want to send all server's output out through socket. The socket is working but getting the output is not working.
usually I just run that stuff externally and trail the latest.log I'm not sure if theres a better way 🤷♂️ probably
I decided that latest.log was inappropriate because I wanted to transmit in real time.
I've been working on this issue since a few days ago....
latest.log is real time
minus the short delay to write
I mean its not like the entire log is cached until the server goes down
it prints real time
given you properly listen for it
oi
Thank you. But plugins like discord srv are imported through Java and I will try it.
what was that
I'm Korean and I'm not good at English, so I use Google Translate, but I sent the original.
ahh I understand
just decompile DiscordSRV and see how they do it
oops wrong reply
dw
yea I would stay away from it as a rule of thumb
is the pathfinder goal index the priority?
im making a system where multiple plugins can register custom items using namespaced keys
so if the player wants to give themselves the custom item
I looked at the source code, but because of their classes and various things, I couldn't even try looking at it.
it would be so much easier if i could just make a namespaced key using what they say and just get that from the hashmap instead of looping through the set in the hashmap
whadeva
is there perhaps a way to get the JavaPlugin with said namespace
or plugin interface or whatever
not neccessarily javaplugin
and then i could check if said namespace even exists like if there's even a plugin on the server that has that namespace
is the namespace of a plugin just said plugins name in all lowercase
Is ConfigurationSerializable#registerclass really necessary? spigot's serialization works even without it
is there a way to do ItemMeta#setDisplayName without italics
displayName = displayName.replace("&o", "");
does copy defaults work with comments?
appreciate it
Don't do that, just use ChatColor.RESET
Why not to do that? your solution clears all colors and not just italic.
no ky is right
i think you misunderstand what im doing
there's a function called setDisplayName
If you want colour on there use the reset then apply colour
wtf
- I showed you what to do with your name variable, wasn't gonna write full code of
ItemMeta, just the relevant part. - His solution is irrelevant because it removes all colors, and mine does only what you said.
when i put something inside ItemMeta#setDisplayName it isn't italic
set display name adds the italic
i have to put the reset its the only option
oh -_-
I thought you were talking about removing the italic color code from a name, not vanilla's italic name
please elaborate next time
how can i make custom recipes unlockable in the crafting book?
does it happen automatically?
It happens when the player has enough ingredients for this recipe
@Override
protected PathNavigation createNavigation(Level world) {
final PathNavigation vanillaNav = super.createNavigation(world);
FlyingPathNavigation navigationflying = new FlyingPathNavigation(this, world) {
public boolean isStableDestination(BlockPos blockposition) {
return vanillaNav.isStableDestination(blockposition) && blockposition.closerThan(blockposition, 32);
}
public void tick() {
vanillaNav.tick();
}
};
navigationflying.setCanOpenDoors(false);
navigationflying.setCanFloat(false);
navigationflying.setCanPassDoors(true);
return navigationflying;
}
Trying to make this so my NMS bee doesnt wander over 32 blocks away but when it collects pollen it breaks pathfinding entirely and floats until the end of eternity
Do some debugging, playing around and reverse engineering. NMS is a wildland and your are mostly on your own.
RIP
Idk shit about pathfinding so
wait..
this is even weirder
if theres no flowers nearby when it spawns, it flies for a few seconds then completely stops all animations and everything
pathfinders suck :/
I have a few questions about recipes:
- How would I make it so when any of the required materials are obtained, it will add the recipe to the player's recipe book?
- Any way to make the recipe override vanilla recipes using the same material types in the same spots? (for example, iron block to 9 iron ingots but using ExactChoice to get custom ingots from custom blocks will instead just craft normal ingots)
Yes I had to put the formatting :D
When i get to writing the custom mobs on the project im currently working on i can probably help you. But this will def take some more weeks
@lost matrix Can you think of any other way to make them not wander more than a certain distance away...?
crap
@chrome beacon You were the one that gave me this example I think... got any other ideas?
Couldn't you just make them turn around after a certain distance?
I mean maybe but idk how.
Set the target block to a random place within 32 blocks or smth
- This happens automatically
- Just register a recipe with the ingredients. Custom recipes are checked first.
When it goes out of range
currently if it goes out of range it finds a different hive
which is a huge issue
1 doesnt happen until after crafting the recipe, and 2 doesn't work with certain recipes for some reason. Ingots to blocks worked but not blocks to ingots ¯_(ツ)_/¯
Show your blocks to ingots recipe
This was earlier, don't have pc access rn
Blocks to ingots was an ExactChoice with an itemstack that had custom name, pdc, etc.
Or I'm just stupid and changed a property of the block and used an old version of the itemstack
So that it mismatched
Im suspecting a mismatch in the choice or a wrong shape.
Shape was literally just "B"
And b is the block
Then its probably a choice mismatch
On the topic of pdc, how would I store an itemstack as pdc? Sounds stupid, but nbt does it everywhere anyways
Wait didn't someone make an api for that
I think I've literally used that in the past
Like you would store it in a File too. Serialize it and throw it in.
Thought as much
@arctic moth https://github.com/JEFF-Media-GbR/CustomBlockData
K
its amazing
That's custom block data
But this is not what he needs
I already have that imported lol
You sure?
yup
Or a List of itemstacks can be done with DataType.asList(DataType.ItemStack)
If ill use that already have the maven dependency anyways
*ig
And finally, how would I change a block's drop? #getDrops() and then clearing and adding a new item didn't work
Could somebody help me with updating MySQL information
public void set_rank(Rank R){
PreparedStatement STATEMENT = null;
try{
STATEMENT = Database.get().prepareStatement("UPDATE userinfo SET RANK = " + R.index() + " WHERE UUID=?");
STATEMENT.setString(1, this.UID.toString());
STATEMENT.executeUpdate();
}
catch(Exception e){ e.printStackTrace(); }
}
I just want to make sure I'm doing this right, I got it from a tutorial online 😳
userinfo is the category.
clear drops, then world#dropitemnaturally with the itemstack
I meant Block#getDrops, not an event. Couldn't find getDrops in blockbreakevent unless I'm dumb
"UPDATE userinfo SET RANK = " + R.index() + " WHERE UUID=?"
to
"UPDATE userinfo SET RANK=? WHERE UUID=?"
And then replace index 1 with the rank and index 2 with the uid
And using Strings in SQL makes no sense. All SQL DBs support UUID as a data type.
Oh my, I'll fix the UUID situation then - thank you so much for this
Thank you, I don't see a .setUniqueId() or .setUID, UUID, etc. in the PreparedStatement class
Should it be an Object, rather?
My first time writing a doc, can someone tell me if I am missing anything? https://www.spigotmc.org/resources/neoconfig.104089/field?field=documentation
Use setObject
This is allowed for all Object types which are supported by the codec
Ahh, I see - thank you so much ❤️
Have a blessed day
Should UUID remain a VARCHAR?
UUID should be a UUID type in your database
Oh okay
Which DB are you using?
phpMyAdmin...?

sqlite, mysql, mongo?
OH, MySQL
...
Many apologies - I'm not brushed up on databases
............
Oh
lord have mercy
😳
No UUID is something globally used. (In every language)
Its literally just a random 128bit number. Thats all.
ive never had a reason to look up uuid
That seems like a problem
oh hi rainny
Who dis? Never seen him here.
7smile7 is this detailed enough?
hi
depends on what you mean by pathfinder stuff
oof why is the bottom all the way over to the right
beeessss..
Trying to overwrite the pathfinder
@Override
protected PathNavigation createNavigation(Level world) {
final PathNavigation vanillaNav = super.createNavigation(world);
FlyingPathNavigation navigationflying = new FlyingPathNavigation(this, world) {
public boolean isStableDestination(BlockPos blockposition) {
return vanillaNav.isStableDestination(blockposition) && blockposition.closerThan(blockposition, 32);
}
public void tick() {
vanillaNav.tick();
}
};
navigationflying.setCanOpenDoors(false);
navigationflying.setCanFloat(false);
navigationflying.setCanPassDoors(true);
return navigationflying;
}
oh that fun stuff
This makes it only move if theres nearby flowers, and after it harvests it breaks
Why is this needed? Arent the scopes enough?
Doesn't work for me
yeah so uhh
I need to include it that way
you'd need to do some checks to check for flowers
and if the checks fail for ALL blocks, then return the super method
This is the default one
protected PathNavigation createNavigation(Level world) {
FlyingPathNavigation navigationflying = new FlyingPathNavigation(this, world) {
public boolean isStableDestination(BlockPos blockposition) {
return !this.level.getBlockState(blockposition.below()).isAir();
}
public void tick() {
if (!Bee.this.beePollinateGoal.isPollinating()) {
super.tick();
}
}
};
navigationflying.setCanOpenDoors(false);
navigationflying.setCanFloat(false);
navigationflying.setCanPassDoors(true);
return navigationflying;
}
I was just trying to make it not go over 32 blocks away
Honestly when overriding pathfinders I just made my own class that extended GroundPathNavigation and rewrote most methods
ffs you can't format for shit in spigot code fields
Went something like this
got an example..?
oh
How does it know what to do when idle or whatever though
Adding the dependency and adding a
<scope>provided</scope>
Is enough
that might be a fly pathfinder specific thing
Then how were you setting the pathfinder to your custom class?
Looks good. I would also make sure that your documentation covers every feature of your plugin.
Or are those 3 lines enough?
They are pretty much everything atm
My custom class extends WalkNodeEvaluator
Because mojang
I did this in a late night after drinking a few beers
I'm surprised it works
But be ready to waste like 3 hours
ive already wasted more than that 🤡 fml
sounds like fun to me
no inv?
which class
CustomPathfinderNormal
oh..
I did it before setting up mojmaps too
Well theres no tutorials on mojang maps
All obfuscated
Looks like bees also choose to drop and blacklist hives..
am i gonna have to set the hive location on every tick
💀
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>1.19-R0.1-SNAPSHOT</version>
<classifier>remapped-mojang</classifier>
<scope>provided</scope>
</dependency>```
My installation of NMS doesn't have the entities classes under the name `server`, is this normal or did i do something wrong? I'm trying to create a new mob
can't send pictures? rip
gotta get the verified role
Ahhh
Do I have to use the classes under net.minecraft.world.entity.monster.Zombie;? The tutorials I've seen do not touch on mc 1.19 and they access the classes through net.minecraft.server.vx.xx.x.EntityZombie
Which should tell you that the guy in the tutorial doesnt use mojang mappings
Oh I see, so the discrepancy is normal?
But you should
What do you mean?
bruh
PS: Dont forget to set up the special sources plugin in maven
1.17+ doesn't use the v1_123_123 format
Yep I have thanks <plugin> <groupId>net.md-5</groupId> <artifactId>specialsource-maven-plugin</artifactId> <version>1.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>remap</goal> </goals> <id>remap-obf</id> <configuration> <srgIn>org.spigotmc:minecraft-server:1.19-R0.1-SNAPSHOT:txt:maps-mojang</srgIn> ...
@lost matrix Would it be a bad idea to set my bee's hive back to what I want every tick...
😓
only way I see this happening.
Yes
welp
Ah okay, so do i have to access it through net.minecraft.world?
guys i got an question which is about help-server
Is there documentation on this?
cloud anyone take a look at it
yessir
Would be nice if we had a channel for that...
we have
Okay thanks
but the people there are 2 digit iq apes.
then why in the absolute hell are you asking here
and you guys probably never visit there
@echo basalt can u help in dms with pathfinders..
for a good reason
this is why
there alot of guides on the topic
ah
just wanna be able to have a convo without 50 other ppl lol
threads are a thing
Any reason why someone would get this error on 1.17.1 but not 1.19?
Pastebin
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
Does anyone know a good opensourced plugin/tutorial/documentation to see how to do basic stuffs like packets, weather states and custom mobs with NMS 1.19?
I have this dumb method to check if a world (passed in as a string) is one of the worlds in the switch statement. Here's the code:
public class RunnerVSHunter extends JavaPlugin {
public boolean inWorld(String world){
return switch (world) {
case "RunnerVsHunterhub", "RunnerVsHunterMap1", "RunnerVsHunterMap2","RunnerVsHunterMap3", "World" -> true;
default -> false;
};
}
But when I call it in the same class, I get this:
Invalid method declaration; return type required
First of all: This should be a Set<String> on which you call contains() on.
Secondly: This error is not caused by this method
why people use those ->
How so?
It might be caused by your weird switch statement which makes no sense.
It should be
return switch (world) {
case "RunnerVsHunterhub", "RunnerVsHunterMap1", "RunnerVsHunterMap2","RunnerVsHunterMap3", "World": yield true;
default: yield false;
};
Anyways just remove that switch all together
Ok, but how should I identify worlds then?
First of all: This should be a Set<String> on which you call contains() on.
private static final Set<String> hunterWorldNames = Set.of(
"world1",
"world2",
"world3"
);
public boolean isHunterWorldName(String worldName) {
return hunterWorldNames.contains(worldName);
}
Still tho:
Invalid method declaration; return type required
Show your whole code pls
public class RunnerVSHunter extends JavaPlugin {
private static final Set<String> hunterWorldNames = Set.of(
"world1",
"world2",
"world3"
);
public boolean isHunterWorldName(String worldName) {
return hunterWorldNames.contains(worldName);
}
if(isHunterWorldNames()){
}
}
What is this random piece of code doing in your class file?
🤦
Btw i really hope that you only have one class which extends JavaPlugin
if anyone can help me in #1007898521942372364 it would be great..
yea
this is propably a really stupid question, but why cant i call the method in the same class I declared it?
You can. But you cant run any code in your class file. I mean you technically can, but only if you define a context in which the code is being run.
yea but then why do i get that weird needs a return type
Those contexts are: initialisation, construction and class loading
it has been defined in my minds
You can not run code in a class file.
You cant just write code in there. When do you expect this to execute?
Sure you can
so (sorry I am so new to java), how could I execute this method in another class
Spigot is not beginner friendly. I would suggest learning the basics first before jumping into Spigot.
?learnjava
Here are some links to get you started on learning Java:
- https://www.codecademy.com/learn/learn-java
- https://www.sololearn.com/learning/1068
- https://www.learnjavaonline.org/
- https://programmingbydoing.com/
- https://docs.oracle.com/javase/tutorial/java/index.html
The last one is the only official one, however some of those concepts assume that you already know a bit about programming.
Here are some helpful links
How do I put on equipments on a custom mob in 1.19? like chestplate swords
You mean an NMS entity?
Yep, that I mean
try calling equipItemIfPossible
Whats spigot() from 1.16.5 in 1.17.1?
Would that equip on the main hand?
It looks for a viable slot and equips the item when it fits
This method is called when zombies pickup items to determine if they can equip it
Ohhh I don't want it to pick anything up
What does this even mean?
Just want to put something on it when it spawns
I mean this method will do
to example player.spigot().sendMessage(textComponent);
Its the same
Oh wow wait, I can't make an item stack from materials anymore?
More code pls
You need to call CraftItemStack.asNMSCopy(org.bukkit.ItemStack) if you want to create an NMS ItemStack from a spigot one.
Player target = Bukkit.getPlayer(args[0]);
Im assuming that you imported the wrong Player
tysm mate, this does the job
i upgrade a 1.16.5 plugin to a 1.17.1 plugin
Bump
Try cancelling the PlayerInteractAtEntityEvent instead and see if this helps
Cancelling both?
And if nothing helps then you need to use packets
Alright
Packets and me don’t get along so I hope cancelling the playerinteractatentity event works
What is the difference between both of them?
Hey, I have this event
public static void onMove(PlayerMoveEvent event) {
Player player = event.getPlayer();
RunnerVSHunter obj = new RunnerVSHunter();
}
It works fine, but when I create the object, it throws this:
org.bukkit.event.eventexception: null
Yeah same problem, I’ll look into what packets I’ll need to figure out
Im suspecting that your RunnerVSHunter still extends JavaPlugin?
Also post the full stack trace pls
yea, why?
You wouldn’t happen to know what packets those are would you xd
If not it’s fine I’ll search through the wiki.vg/Protocol
Dont
You are only allowed to have one class that extends JavaPlugin. And this class is your main class.
hey im trying to reload my plugins config using plugin.reloadConfig() but it isnt reloading anything
yea...?
Because you need to get the new config to the places where its being used
Okay well so far this has proved fruitless, do you have any idea of any I should look at?
well shit my bricks that actually worked
thank you 🙏
the packet that is send on interacting
Okay but how would I figure out what entity it’s being sent from
I get an entityID but no where seems to know how to use it
or should I save like a hashmap of an entity’s ID whenever it’s spawner to whatever I need to use and hope that the entity ID doesn’t change under any circumstances
Or like loop through existing mobs
It just feels so inefficient but yeah ig ill do that
nms has methods to get an entity by its id
ProtocolLib also provides util methods for that
It does?
Also looking at the Java docs I don’t see a interact packet in protocol lib
Yeah I realized that wouldn't work
Tho for whatever reason I can’t use the search in the protocollibs javadocs
I'd say you need to replace the goals
yeah cant find the packet for this in the packet type from protocollib
One of
PacketType.Play.Client.USE_ENTITY
PacketType.Play.Client.USE_ITEM
PacketType.Play.Client.ENTITY_ACTION
Just debug them and see which one fires
alr
why am I getting this error?
java.lang.NoClassDefFoundError: org/apache/commons/io/IOUtils
must I shade it?
IOUtils is part of apache commons lang which is no longer included into spigot
so what do I do?
Lang3 is now
Relocate it
This is ridiculous
add it to the libraries section of yoru plugin.yml
I don't use libraries
i'd personally just add this to your pom:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
<scope>compile</scope>
</dependency>
that worked for me in past
Is there a way to enchant items without the sparkle?
So the items look un-enchanted to people
i don't think so
you can probably remove the glint in a server resourcepack, but afaik enchantment glint is completely handled by the clients
Ohh I see, no way even with packets and NMS?
Ahh alright
You could recreate the enchantments with code
sharpness, increase damage
Fire aspect, set fire
that'd be an awful process
This didn't work for me
did you set the scope to compile?
yes
did you build it with maven?
yes
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
<scope>compile</scope>
</dependency>```
shade and relocate?
i mean
this is what i have my pom like:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.chloecdn</groupId>
<artifactId>lobby</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>Lobby</name>
<properties>
<java.version>18</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<url>https://chloecdn.de/</url>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<outputDirectory>C:\Users\Chloe\Documents\Localhost\Lobby Development\plugins</outputDirectory>
<shadedArtifactAttached>true</shadedArtifactAttached>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<repositories>
<repository>
<id>spigotmc-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<id>sonatype</id>
<url>https://oss.sonatype.org/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.19.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>de.chloecdn</groupId>
<artifactId>cdnlib</artifactId>
<version>1.6</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
and it compiles my lib down the way into the jar perfectly fine
want to see my pom?
What do you mean? Like a new item with the enchanted properties combined?
i don't see any way why it wouldn't work tbh
?paste
add a custom tag to them, and then manually check if the tag is applied, and if it is, apply functions like more damage for sharpness, burning for fire-aspect, etc
but it'd require to take a look at the exact values of minecraft's own enchantments
and a lot of code lol
Oh dear, I see
Oof, I don't envy you
Would just creating a custom item for this process work?
i mean
I just want them to be completely unbreakable (without looking like its enchanted)
maybe?
enchantments essentially are just tags
Yeah?
just add a tag to the item, and then in PlayerDamageItemEvent or smt like that, cancel it if the tag is on the item
Oo I see, would that stop the item from taking health losses?
basically
Interestinggg
it'll cancel the event, which also cancels the damage applied to the item
Oh okay, would it cancel the damage whoever is getting killed must take?
why would it do that
I'm just wondering :)
it's the PlayerDamageItemEvent, which is only called when a player damages an item (breaks a block with a pickaxe for example)
OH
I misread that
I was imagining it as a weapon
I suppose there has to be some event which checks on that
uh
you mean damage dealt to a player when he was hit by an entity/player?
if so, EntityDamageByEntityEvent i suppose
Yep, I'm arming a bunch of zombies with swords and I don't want it to break
oo okay I will check that out
execuse me? [INFO] Excluding commons-io:commons-io:jar:2.11.0 from the shaded jar.
tf
thanks cxlina!
sure
you can try to copy the most stuff from my pom above, and see if that fixes your issue
in the process of
I think its due to me using the shade plugin?
If I wasn't using it maybe it would shade?
wait no
maybe include?
i mean, i use it as well
but you don't use include
idk
I'll just include it in my includes
is it possible to have colored tab completion?
no
Can i replicate the "stare and me and you die" goal for endermen on zombies and the link?
But I have seen plugins use titles and action bars
kind of
but it's kinda buggy
sometimes it shows the colorcodes instead of coloring the text
Just use the action bar
ugh
i tried putting chatcolors through and although they render colored, the completion fills in the color char which is undesired... especially given it kicks you upon sending the command
in the end: just don't color your tab-completion
and?
Its better than a buggy tab completor
it can't be done without bugs
oh welp
the actionbar used for tab-completion... i've now officially seen everything
idk if it's possible to strip the text from color-codes as soon as you tab-it, so it doesn't apply into the text field
i actually would've considered it if i didnt have another plugin that uses it to display temperature
i wanted to do that
but the tab completeEvent doesnt have anything like that
whats wrong? target is btw a Player
uhh
i use the 1.17.1 api
in the 1.16.5 works
my server is on on Java 17
its the first version on java 17 isn't it?
16 iirc
yes it is
no i mean