#help-development
1 messages · Page 2073 of 1
me either
mainly because we have all kinds of elderly homes in the US
Here you can watch it https://www.youtube.com/watch?v=GbwcCGcaVXc
This is a TV advert from the International Fellowship of Christians and Jews fundraising organization.
From MinistryWatch.com: "...(IFCJ) founded and run by Rabbi Yeckiel Eckstein (...) Rabbi Eckstein is said to now have a database of over 1 million Christians who donate to his ministry. In the most recent year, the ministry raised over $113 m...
do you yell: get them a straw at the screen?
It's really annoying to watch not going to lie.
at least the christians are working with the jews, more than we can say for the catholics
yall ever got punched in the face?
wonders how rivex's quest goes
She dead
obsificated out of existence ?
-_-
Whoops let me deobfuscate that. `how goes it? All is well I hope
my pfp is awesome
Probably for the best. I gave up on the disaster which was forge to spigot
well i before tried to use the plugin messaging channel (i guess at least), and that "worked"
but on clientside, i had problems getting those written values then
the "packet" was sent, but the values were wonky
Forge has the nicest messaging imo
is anyone familliar with visual bukkit
no
Da Heck is visual bukkit
better than bad is still bad
yes
and
No
methods
Shut
have their exact names
nothing is abstracted
you can use runMethod to run a method
its that rainbow plugin again!
Im trying to build my plugin but it is coming with this error during build.
cannot access org.bukkit.ChatColor
cannot access org.bukkit.entity.Player
L
cannot access org.bukkit.event.EventHandler
cannot access org.bukkit.event.Listener
cannot access org.bukkit.event.player.PlayerJoinEvent
Okay
?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.
you should probably provide access to those if you want to use them
haha
learn java
hey Jens
Hello there long time no see :p
run mvn clean
what do u think i have done
yeah its been a bit, you are a busy person
Yea haven't had much time these days sight. :d Life
that the way spring goes!
same error
invalidate caches and restart
Are they using maven?
yeah
mvn clean your gradle projects. If you're lucky it'll work and you'll stop using gradle
im using maven
think he meant me
that might work
Nvm im so dumb i forget to cahnge my java version from 11 to 17
i like gradle, it counts for me
new error.
[22:36:05 ERROR]: Error occurred while enabling DesertValleyEssentials v1.0 (Is it up to date?)
java.lang.IllegalMonitorStateException: current thread is not owner
at java.lang.Object.wait(Native Method) ~[?:?]
at xyz.desertval.desertvalleyessentials.DesertValleyEssentials.onEnable(DesertValleyEssentials.java:17) ~[DesertValleyEssentials-1.0.jar:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:501) ~[paper-api-1.18.2-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_18_R2.CraftServer.enablePlugin(CraftServer.java:559) ~[paper-1.18.2.jar:git-Paper-276]
at org.bukkit.craftbukkit.v1_18_R2.CraftServer.enablePlugins(CraftServer.java:473) ~[paper-1.18.2.jar:git-Paper-276]
at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:664) ~[paper-1.18.2.jar:git-Paper-276]
at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:431) ~[paper-1.18.2.jar:git-Paper-276]
at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:316) ~[paper-1.18.2.jar:git-Paper-276]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1163) ~[paper-1.18.2.jar:git-Paper-276]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:315) ~[paper-1.18.2.jar:git-Paper-276]
at java.lang.Thread.run(Thread.java:833) ~[?:?]```
are you playing with threads?
Paper 
whats your onEnable ?
paper has good events
How do you remove values from a Set<CustomObject> when you dont have the object iself?
paper has events we like
@Override
public void onEnable()
{
Bukkit.getLogger().info("Plugin has been enabled.");
loadCommands();
loadEvents();
}```
show us line 17
can I tell the maven surefire plugin to only execute tests AFTER package has created a .jar?
guessin its in the loadEvents()
alr
some of my dependencies need to access the .jar file so I have to delay tests until after the .jar was created, and use that to run the tests
this is line 17.
}```
Doesnt your ide tell an error?
you can only iterate over it
java.lang.IllegalMonitorStateException: current thread is not owner
oh ide 😛
im using intellj
Guessing it is how you are registering your listeners
public void loadCommands()
{
getCommand("fly").setExecutor(new FlyCommand());
}
public void loadEvents()
{
Bukkit.getPluginManager().registerEvents(new OnPlayerJoin(), this);
Bukkit.getPluginManager().registerEvents(new OnPlayerQuit(), this);
}```
the error message you sent cannot come from a }line. you must have changed something or ran an old version of your .jar
that's fine
did u do wait()
on a thread
no
what did you do?!
Recompile it -> run -> paste error and full class file
Alright im gonna ask this again because for some reason as it seems this guy im talking eith does beileve me
show ur whole class
But how do i delete it? I dont have the object i just have a value inside that object.
For example i have a Set<Claim>
Claim object contains: uuid, name, location
So i dont have the uuid either name, so to delete it i just have the location
wdym
extending on this:
Nobody want's to steal your code, especially your broken code
sure
please do
i think i get what u wanna do
u wanna remove an object from a set based on one of its fields
set.removeIf(new Predicate<Object>() {
@Override
public boolean test(Object o) {
if (something) return true;
return false;
}
});
or as lambda:
set.removeIf(o -> {
if (something) return true;
return false;
});
Yes
or
return something;
Is there a way to change strings in the enchantment table previews (the 3 bars on the right) using classes extending Enchantment and then registering them as enchants
Im 100% certain this is a client limitation due to enchant maps client side and language handling
No we don't want to use resource packs either
Sorry to ask this again but I need to somehow convince this person im dealing with that this really isn't possible without creating a GUI
example:
set.removeIf(myObject -> {
if (myObject.getLocation().equals(anotherLocation))) return true;
return false;
});
no
you cannot do it
set.removeIf(e -> e.equals());
only mods can do that
?
set.removeIf(e::equals);
an empty equals?
that makes no sense
Well throw something into it lol
Lmao
set.removeIf(e -> e.equals(xyz));
no
haven't you all listened?
his e won't be equal to xyz
but his e.getLocation() will equal to xyz
this is a mess
²
set doesnt contain that opion
(its a bit messy but you get the point)
yes it does...
What class is the set from. Is it a custom impl?
java.util set does
Set<Object> set = new HashSet<>();
Location locationToGetRidOf = /*something*/null;
set.removeIf(myObject -> myObject.getLocation().equals(locationToGetRidOf));
Fuck its because im java 8
🤡
Works in 8 yeah
no u can use a reference for that
wait
u cant
nvm
sucks
why are you all making this so complicated, it's a simple lambda to check one property lol
lol
and no it cannot use a method reference
yeah
😄
ARE YOU WORKING WITH ENUMS?
It's in my job description
private UUID getPlayerUUID(String nameOfPlayer) {
return Optional.of(Bukkit.getOnlinePlayers().stream()
.filter(onlinePlayer -> Objects.equals(onlinePlayer.getName(), nameOfPlayer))
.collect(Collectors.toList()).get(0).getUniqueId())
.orElse(Optional.of(Arrays.stream(Bukkit.getOfflinePlayers())
.filter(offlinePlayer -> Objects.equals(offlinePlayer.getName(), nameOfPlayer))
.collect(Collectors.toList()).get(0).getUniqueId()).orElse(null));
}
old shit i found in my project
i bet no one here can read this without going to an eye doctor
rm - rf /*.* will
I can read this
were you drunk lol
but i wanna do the self oof
how can i place a light with custom level?
Won't even work guaranteed cause names aren't safe for getting offline players
xD
5 giorni fa
5 days ago
I too enjoy 5 giorni fas
anyone?
there's a light block
yes
you can change its block state iirc
I'd have done it like this
@Nullable
private static UUID getPlayerUUID(String nameOfPlayer) {
final Optional<OfflinePlayer> optional = Arrays.stream(Bukkit.getOfflinePlayers())
.filter(player -> nameOfPlayer.equals(player.getName()))
.findAny();
return optional.map(OfflinePlayer::getUniqueId).orElse(null);
}
Means:
"Tf you sayin"
say I want to send the player like 10 different chat messages delayed, should I use the Conversation API
plus first simply checking if the player is online
Bukkit.getOfflinePlayer(nameOfPlayer);
I dont really need player input
bukkit scheduler
please
if player is online that wont work
Just use a runnable then
i did a way to change its level when it is in the groud, but i cant place it with the level i want
bruh
If they're complicated messages use an API otherwise schedule
that sounds so cursed
why wouldn't it work? o0
that does contain all online players too
but yeah it's still bad
but also doesnt make sense
because offline player list can be huge
so yeah I'd do this
@Nullable
private static UUID getPlayerUUID(String nameOfPlayer) {
final Player online = Bukkit.getPlayerExact(nameOfPlayer);
if(online != null) return online.getUniqueId();
final Optional<OfflinePlayer> optional = Arrays.stream(Bukkit.getOfflinePlayers())
.filter(player -> nameOfPlayer.equals(player.getName()))
.findAny();
return optional.map(OfflinePlayer::getUniqueId).orElse(null);
}
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff;
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;
}, 20L); // 2 sec delay
}, 20L); // 1 sec delay
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff3;
}, 20L); // 1 sec delay
stuff, then stuff3, then stuff 2
doesnt exists something computeIfAbsent but in Set?
of course not
what should a set compute
good old bukkit scheduler
Use a repeating task and a dequeue
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff;
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;
}, 20L); // 2 sec delay
}, 20L); // 2 sec delay
}, 20L); // 2 sec delay
}, 20L); // 2 sec delay
}, 20L); // 2 sec delay
}, 20L); // 2 sec delay
}, 20L); // 2 sec delay
}, 20L); // 2 sec delay
}, 20L); // 2 sec delay
}, 20L);```
Soemething like: Set#addIf()
you can just use 40L if you don't wanna nest
yes, perfect
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff;
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;
}, 20 L); // 2 sec delay
}, 20 L); // 2 sec delay
}, 20 L); // 2 sec delay
}, 20 L); // 2 sec delay
}, 20 L); // 2 sec delay
}, 20 L); // 2 sec delay
}, 20 L); // 2 sec delay
}, 20 L); // 2 sec delay
}, 20 L); // 2 sec delay
}, 20 L);```
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff;
}, 20L); // 1 sec delay
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff2;
}, 40L); // 2 sec delay
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> {
stuff3;
}, 20L); // 1 sec delay
stuff, then stuff3, then stuff 2
there
well there you go prettified
ez
Stop spamming
what is that supposed to do o0
yeah I didnt bother changing the stuff2
If someting and then add the value? 🤔
but if I have like 10 chat messages isnt that what I'll have in the end
this works fine
i got nice memories about this
.
no
if(something) set.add(...);
????
you can do this
no nesting
it just easier to keep track of nests imo
hm alright
Its a Set<Object> so for checking i would have first to loop it :/
sounds so whacky but ty
np
yeah but erm wtf are you trying to do
Im trying to add a claim object if it doesnt exists
if your custom object properly override the equals() method, it's not possible to add the same claim object twice anyway
woah
private static UUID getPlayerUUID(String nameOfPlayer) {
return Bukkit.getPlayerExact(nameOfPlayer) == null ? Arrays.stream(Bukkit.getOfflinePlayers())
.filter(player -> nameOfPlayer.equals(player.getName()))
.findAny().map(OfflinePlayer::getUniqueId).orElse(null) : Bukkit.getPlayerExact(nameOfPlayer).getUniqueId();
}
turned into sigma male one liner
how do i place a light with custom level?
(sarcasm)
well one thing that makes it bad is that ur getPlayerExact twice
but otherwise its same thing
here, now it's one line without getting onlineplayer twice lol
@Nullable private static UUID getPlayerUUID(String nameOfPlayer) {final Player online = Bukkit.getPlayerExact(nameOfPlayer);if(online != null) return online.getUniqueId();final Optional<OfflinePlayer> optional = Arrays.stream(Bukkit.getOfflinePlayers()).filter(player -> nameOfPlayer.equals(player.getName())).findAny();return optional.map(OfflinePlayer::getUniqueId).orElse(null);}
My object doesnt include equals method
tf is this
LMOAOOO
then add it
bruh
you have no idea what a hashset is for, right?
1922 deobfuscators:
using a hashset without a proper equals and hashcode method makes using a set useless
Can I get the player who dealt the damage on EntityDamageEvent?
it's called HASHset for a reason
because it uses hashcode() and equals()
It's because it's made of hash browns
we call this max efficiency
i just want the light thing lol
Make sure to brown your hashes before consuming them
if you don't properly override hashcode and equals for your custom object, your hashset will behave like a slow list instead of a set
cant u generate an equals and a hashcode with intellij
so no reason to use a set in the first place when you don't override equals and hashcode
ofc, it's 3 clicks
lol
Im using netbeans because im developing in cellphone dont ask why
BRO
coding on a cellphone?
wait u can code in a phone
okay I'm out
when I was 10, no phone had wifi lol
r u like 50
I dont thin the program its netbeans but i find an apk and try it and worked
no, 27
oh right
technically it did
no phone that 99% of people had
i am going white shopping
and there definitely weren't any "apps" or similar
i assumed ur a teenager
you never played them nokia apps?
there was stuff like "calender" and "notes" and "contacts" and maybe a weird browser that couldn't display any normal websites
oh also 1MB was more expensive than my monthly rent
there are lots of programming android apps
Browser was a joke
the browser for phones back then was weird
they dont have auto completion
oh also guys, I once COPIED A YOUTUBE VIDEO CODE, EACH CHARACTER ONE BY ONE IN AN ANDROID PHONE
dcoder, jstudio, code editor, codeacademy, etc
god
who uses autocompletion?
I rember that when i was 5 years i had cellphone number and the cellphone was a Nokia C5
That its the prove that technology have improved in about 10 years
I remember when a razr was essentially the iphone of the day
~~cap ~~ cant believe it
Oh lamo coding on cellphone its so difficult
Im planning to edit the apk to integrate github copilot
is this the correct way to access another plugins fields? btw this is only a temporary solution til ive got the sql database working
try
{
Field f = Bukkit.getPluginManager().getPlugin("SystemControl").getClass().getDeclaredField("playerUUIDList");
f.setAccessible(true);
@SuppressWarnings("unchecked")
HashMap<String, UUID> playerUUIDList = (HashMap<String, UUID>) f.get(Bukkit.getServer());
f.setAccessible(false);
if (playerUUIDList.containsKey(player))
{
return playerUUIDList.get(player);
}
}
catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e)
{
e.printStackTrace();
}
formatting 😔
Its wrong, you should access via main class
You should use reflections when you want to access to something that you dont have access to it
hm
MainPluginClass main = (MainPLuginClass) Bukkit.getPluginManager(),getPlugin("PLuginName");
um, why do you need to access another plugins fields?
Do you agree to what i said?
yes
that's correct
temporary, to store all uuids from offline players so i dont have to iterate it every time
how do i place a light with custom level? it only places in max level
but thats only til i get the sql database working
Some months ago i was told to use reflections in this ocations
that's exactly what they are doing?
getPlugin(...) obviously returns the other plugin's main class instance
wonders if they know there is a file that stores player uuid and names?
But you can do it via MainClass? isnt the better?
bukkit already has a usercache.json
oh wait, you use Bukkit.getServer() inside f.get
that's of course wrong
No one uses that shits, its to oddy
you have to provide the plugin instance instead of just Bukkit.getServer() in f.get
I have no idea what you are talking about tbh
to oddy?
And most plugins use custom users because they use custom values
what are you on about
HashMap<String, UUID> playerUUIDList = (HashMap<String, UUID>) f.get(Bukkit.getPluginManager().getPlugin("SystemControl"));
xD
hello
Can someone help me how to create a command that sends a message please?
yeah well just cache the main instance once
Plugin otherPlugin = Bukkit.getPluginManager().getPlugin("...");
Field field = otherPlugin.getClass().getDeclaredField(...);
Object value = field.get(otherPlugin);
is it even possible to place a light with level lower than max?
In my case i have a user manager getter in my main class:
ProtectionPlugin protection = (ProtectionPlugin) Bukkit.getPluginManager().getPlugin("ProtectionPlugin");
UserManager users = protection..getApi().getUsers();
not without havking into the light engine I guess
wdym
yes, good luck using that to access private fields
To access private methods exits reflections lamo
so i can only change the level of the light that is already in ground?
Why are you adding reactions to your own message
I highly doubt that you can change the light level using the API, and I even think you can't change it using NMS since at least paper runs the light engine on its own
You can with the block
you can change it when its on ground
Which is what I think they are talking about
i did that :p
Is it possible to set the source of damag dealth by the plugin to a player?
and how do i place it
block.setType
that only accepts Material
mhm
Set material, get data, set data
Or you can get the base data, edit that, and then block.setData
I don't think that you can do anything with the light interface
[23:18:57 ERROR]: [Test] [ACF] java.lang.ClassCastException: class org.bukkit.craftbukkit.v1_18_R2.block.data.CraftBlockData cannot be cast to class org.bukkit.block.data.type.Light (org.bukkit.craftbukkit.v1_18_R2.block.data.CraftBlockData and org.bukkit.block.data.type.Light are in unnamed module of loader java.net.URLClassLoader @4f8e5cde)
[23:18:57 ERROR]: [Test] [ACF] at Test.jar//de.jeff_media.test.TestCommand.msg(TestCommand.java:25)
[23:18:57 ERROR]: [Test] [ACF] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[23:18:57 ERROR]: [Test] [ACF] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[23:18:57 ERROR]: [Test] [ACF] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[23:18:57 ERROR]: [Test] [ACF] at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[23:18:57 ERROR]: [Test] [ACF] at Test.jar//co.aikar.commands.RegisteredCommand.invoke(RegisteredCommand.java:152)
[23:18:57 ERROR]: [Test] [ACF] at Test.jar//co.aikar.commands.BaseCommand.executeCommand(BaseCommand.java:577)
[23:18:57 ERROR]: [Test] [ACF] at Test.jar//co.aikar.commands.BaseCommand.execute(BaseCommand.java:513)
[23:18:57 ERROR]: [Test] [ACF] at Test.jar//co.aikar.commands.RootCommand.execute(RootCommand.java:99)
[23:18:57 ERROR]: [Test] [ACF] at Test.jar//co.aikar.commands.BukkitRootCommand.execute(BukkitRootCommand.java:84)
[23:18:57 ERROR]: [Test] [ACF] at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159)
[23:18:57 ERROR]: [Test] [ACF] at org.bukkit.craftbukkit.v1_18_R2.CraftServer.dispatchCommand(CraftServer.java:905)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:2306)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:2117)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:2098)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.network.protocol.game.PacketPlayInChat.a(PacketPlayInChat.java:46)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.network.protocol.game.PacketPlayInChat.a(PacketPlayInChat.java:6)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.network.protocol.PlayerConnectionUtils.lambda$ensureRunningOnSameThread$1(PlayerConnectionUtils.java:51)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.server.TickTask.run(TickTask.java:18)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.util.thread.IAsyncTaskHandler.d(IAsyncTaskHandler.java:153)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.util.thread.IAsyncTaskHandlerReentrant.d(IAsyncTaskHandlerReentrant.java:23)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1399)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:188)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.util.thread.IAsyncTaskHandler.y(IAsyncTaskHandler.java:126)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.server.MinecraftServer.be(MinecraftServer.java:1376)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.server.MinecraftServer.y(MinecraftServer.java:1369)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.util.thread.IAsyncTaskHandler.c(IAsyncTaskHandler.java:136)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.server.MinecraftServer.x(MinecraftServer.java:1347)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1229)
[23:18:57 ERROR]: [Test] [ACF] at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:315)
[23:18:57 ERROR]: [Test] [ACF] at java.base/java.lang.Thread.run(Thread.java:833)
this is what happens if you cast a torch's or candle's blockdata to light
?paste
well im trying to replace air with light
Literally a block called light
Me?
Are you alex?
fr
yep
awesome
why did noone ever mention that before
And can be waterlogged
and why is it not in the creative tab
Idk, ask mojang
yep, and i trying to place it in level 7
Material.LIGHT.createBlockData, cast it, set the level to 7, and then block.setData
yeah for light blocks it works without problems
I really didn't know this existed at all lmao
why what happens?
The red "AxleCrates"
is that your plugin?
Yes, I'm trying to make the ServerBasics as a plugin reloader.
and what's your code for "reloading" other plugins?
Plugin target = null;
File pluginDir = new File("plugins");
if(!pluginDir.isDirectory()){
return ChatColor.RED + "DIRECTORY COULDN'T BE FOUND";
}
File plugin = new File(pluginDir, name + ".jar");
if(!plugin.isFile()){
for(File file : pluginDir.listFiles()){
try{
PluginDescriptionFile desc = ServerBasics.getInstance().getPluginLoader().getPluginDescription(file);
if(file.getName().endsWith(".jar")){
if(desc.getName().equalsIgnoreCase(name)){
plugin = file;
break;
}
}
} catch (InvalidDescriptionException e) {
return ChatColor.translateAlternateColorCodes('&', ServerBasics.getInstance().plugin_prefix + "Plugin description was not set.");
}
}
try{
target = Bukkit.getPluginManager().loadPlugin(plugin);
} catch (InvalidPluginException e) {
return ChatColor.translateAlternateColorCodes('&', ServerBasics.getInstance().plugin_prefix + "The plugin was not found.");
} catch (InvalidDescriptionException e) {
return ChatColor.translateAlternateColorCodes('&', ServerBasics.getInstance().plugin_prefix + "The plugin description was not found.");
}
Bukkit.getPluginManager().enablePlugin(target);
}
return ChatColor.translateAlternateColorCodes('&', "The plugin &a" + name + " &f was successfully loaded.");```
so where exactly are you unloading the old plugin?
I just do java plugin.getServer().getPluginManager().disablePlugin(plugin.getServer().getPluginManager().getPlugin(args[0])); in the CommandExecutor
you only disable the plugin
is there a way to make an entity only glow to specific players?
- you can't properly unload it without reflection and class loading magic
- you can only make bukkit think that's it not there anymore. check out the SimplePluginManager class and its private fields
- unloading plugins at runtime is a bad idea and it will never work reliantly
I'll look into the 1st one.
Why MongoDatabase#getCollection()#find()#foreach(document -> bla bla) its deprecated?
you need to have all those 3 things in mind
also what is that /test thing
- remove the plugins from the SimplePluginManager, especially the fields I have marked
- and now, you'll want to have the classloader forget about the already loaded classes from that plugin
and only now you might have a small chance of actually getting it to load properly again
Is there ways to change mining of speed with blocks?
I assume only way to do this is with NMS (Dont want to apply mining fatige to player)
a command I wrote to change the nearest "light"'s light level
ah
what tasks do you need to wait for?
doesn't it return a CompleteableFuture or similar?
usually youd just append a callback
how do i check if clicked block is a sign?
Block block = rightClickEvent.getClickedBlock().get();
i tried MaterialTags.SIGNS but it says that needs a Material
i don't understand why you want to schedule a new runnable in on disable
you can provide your stuff to the completablefuture to run it after it has completed
and also this ^
join or get will block the thread until the future has completed
yes, in particular using the bukkit scheduler wont work as onDisable runs the last server tick, but look what alex aforementioned
basically you can pass your runnable to the future once you get the future, then in ondisable you can .get() or .join() your future to make it complete (if i am not mistaken)
or do you actually only call the structureblocklib in ondisable?
because that probably won't work
how can i check if block is a sign
getType().equals(Material.BlaBla)
there's WALL_SIGN too so I'd rather check the blockstate
if(block.getState() instanceof Sign) ...
will that get all signs?
also there's like 20 different types of signs
the blockstate, yes
so spruce, birch, etc?
if(block.getState() instanceof Sign) will work for wall signs, for normal signs, for spruce, for birch, ...
ok
im just trying to make a neon ink lol
k seems to work
now how do i make it glow
declaration: package: org.bukkit.block, interface: Sign
thx
hm it's a bit hard to explain lol
What would be the better way for checking the claims? I had a claim manager which contains all claim and a user manager
how i create a boss bar without bar style?
bossbars always have a barstyle
are you talking about BarFlags instead of BarStyle?
well then just don't provide any barflags
the createBossBar method takes a varargs array of BarFlag
Bukkit.createBossBar("title",BarColor.YELLOW,BarStyle.SOLID);
it's a varargs constructor
you don't have to pass anything as barflag if you don't need one
true
you can also pass an empty array
Bukkit.createBossBar("title",BarColor.YELLOW,BarStyle.SOLID); // works
Bukkit.createBossBar("title",BarColor.YELLOW,BarStyle.SOLID, new BarFlag[0]); // works too
so for whatever reason, in this code, the top of a kelp plant gets triggered by this
if (!Main.unstableblocks.contains(nblock.getType()) && Main.unstableblocks.contains(nblock.getWorld().getBlockAt(nblock.getX(), nblock.getY() - 1, nblock.getZ()).getType()) && !Main.stableblocks.contains(nblock.getType()))
Material.KELP_PLANT is in unstableblocks btw
Kelp is two blocks iirc
so for whatever reason, in this code, the top of a kelp plant gets triggered by this
wdym?
oh the top of a kelp plant is called kelp
kelp is giant
the reason for 2 materials is where it can be "placed"
a KELP_PLANT can be placed on KELP and KELP_PLANT while a KELP_PLANT can only be placed on... idk, dirt, etc?
oh
no
other way around
KELP is the top most part
KELP_PLANT are the ones below that don't need any "ticking"
so it's not stupid at all, also given that every "block" has a bounding box and the box of the top most part is only half the size of the ones below
Bounding box can be changed with just data tho
i have made a severe and continuous lapse in my judgement
and I don’t expect to be forgiven. I’m simply here to apologize.
There's a lot of things I should have done differently but I didn't. And for that, from the bottom of my heart, I am sorry. I want to apologize to the internet.
Like I said I made a huge mistake. I don’t expect to be forgiven, I’m just here to apologize. I'm ashamed of myself. I’m disappointed in myself. And I promise to be better. I will be better. Thank you.
well
Hex wtf you on about lmao
do u have a completable future
he probably used 1.8
LMFOAOO
Ohhh!!!
Yes that is your issue hex, please update to a supported version of minecraft and this should solve your issues
🙂
that seems like a shit library
so many functional interfaces
can't you just call .join() or .get() at the end?
why?
do you have a github link to that api?
thx
I mean .getCompletionStage().toCompletableFuture().join()
they should make a onDisable(Stage stage) {}
yeah that should do it, right?
ye
Its possible to disable the shity message from spigot saying that "plugin name version bla has been loaded"?
Stage.EARLY, Stage.PRESENT, STAGE.AFTER
uh yes but why
how is that stupid?
it's a pretty important information
^
A friend want to do it
and why?
What does he have to do?
well you'd have to do it in your constructor
reflecting the plugin manager instance or sth
change the logger
you can attach custom filters or however they were called again
Oh its by code?
or yeah perhaps just manipulating the logger could be somewhat easier
early is 10 seconds before the server starts shutting down, present is when it starts shutting down, after is after 10 seconds, when the server has shutdown but doesnt kill the program, leaves the thread for the Stage.AFTER listeners
but it's a pretty stupid idea unless you want to hide some malware
I dont know what he want to do
sure, you can change the logger by code but I don't think anyone should ever do it
Its no my problem if he is doing bad things
check the source code of AuthMe
no
Allright
wait
?paste
sry needed that link
authme is the plugin that does /password whatever right?
yes
yeah then check the source of that
it attaches a custom logging filter or however its called to prevent the passwords from appearing in the log
Allr thanks, he literally paid me for asking me that question
ok
we get 50% right
I told him i help u for free and them i check paypal and he already paid me :/
yeah where's our share
And i didnt give him money back because he we would receive back 0.something dollar
Because commisssions are amazing
😡
if you send a refund on paypal, there is no fee whatsoever
how much did he gave u
OH lol i didnt know that i would tell him
obviously not much if the remaining amount is under a dollar lol
Literally 4 ddls
oh
ah yes, the ddl currency
I will do a refund so he get his money back
do a refund to me
Because i dont ask for money to friends
:)
Im about to beat mavens ass: https://paste.md-5.net/giwosidisa.xml
Is there a reason that org.reflections cannot import? Just tells me that it cannot be found (Its a maven central repo, linked here: https://mvnrepository.com/artifact/org.reflections/reflections/0.10.2)
I assume its likely something that the SpecialSource plugin does that prevents it maybe?
send your full maven log pls
the full log
do this:
mvn compile
- when the error occurs, click the uppermost thing on the left side (where it rn says "sync")
then send the full log
oh fucks sakes
I assume its likely something that the SpecialSource plugin does that prevents it maybe?
nope
ugh
accidentally set maven in offline mode lmfao
I didn't even know that button exists lol
its annoying i press it all the time
Mongo $_id its always unique or can be overriden?
if it still doesn't wanna update, do mvn clean compile -U
Because i dont know why to mongo objects id are duplicated
its likely due to the way your setting data
$_id can be duplicated if you set data incorrectly
you need to set using the id from the get object you received from mongo iirc
otherwise it just sets the data you have again
fun fact: "mongo" is a pretty bad german insult against disabled people
I always wondered why they called their database like that
nah it worked once i ran in online 🙂
see, stop hating maven, hate yourself instead 😛
we have that too in arabic but
damn mongos
its only in algerian accent
i just wanna use gradle 
maven is fine too but I understand you wanna use the one you already know 😄 I for myself don't like gradle, just because I always use maven lol
"mongo" isnt the full one
oh i know both maven and gradle, i just like gradle cause speeeeeeeeeed
shits so fast
imho maven can do 99% of what gradle can, while being 30% easier to use for MOST things
In my experience gradle has been really slow lol
well the first time setup always takes ages
Yeah
indeed
yeah I also think gradle is way slower
but after that its speedy
yeah sure it always has a daemon running
Its just preference i guess
definitely
neither is better or worse, they are just different and have different philosophies
it's a bit like nginx vs apache
ngl is there a setting for maven to always have its own daemon running?
i doubt it does
no
that just means you don't know maven
what type of in-game tree is TreeType.REDWOOD
but tbh if your pom is setup correctly and you do not have a ton of unused plugins and goals and executions and whatever, it won't be slower
after all it only calls javac too, just like gradle
when I compile stuff that doesn't have 10+ modules, javac is always the thing taking up the most time
like is it jungle or smth?
maven out of the box is very conservative on resource usage. If you have resources for it to use, you can specify in your pom for compiler args to give it more ram and you can even build concurrently too
idk when compiling this plugin with just one class using maven i feel like it takes a few seconds, but when compiling a larger 31k line+ project with gradle it feels instantaneous
just told you why
spruce
build concurrently? as in build while im programming?
havent heard of that before
no it will build dependencies and modules concurrently for the project
but that is if only you tell it can do so
i haven't ever heard of that
how i do set it ith mongo id?
some projects rely on certain modules to be built first and in those scenarios the project couldn't be built concurrently
you dont you set data by the mongod id
I dont think i have any code examples for this sorry, i had a old plugin that use mongo
maybe i still have it but i think i deleted that project
and how would one enable this? maven always builds all my NMS modules one after another
although they don't depend on each other, obviously
?
e.g. 1_18_R2, 1_18_R1, etc
how do I make it compile those concurrently?
I have never ever heard of such an option
mvn -T 4 clean install
will tell maven to use 4 threads
oh hey i still have the project what do yah know
probably a better way to handle this
but this things really old, like 2-3 years old
define better
ie cleaner and or just without needing to remove the _id from the Document
let me try that
not sure i havent used mongo in a while
Yeah
people are gonna hate me for this
well, maybe that java code sent helps but im not sure how the wrappers work between versions
I do hate you for that
here is another command similar to the first one
mvn -T 1C clean install the difference here is this will tell maven to use 1 thread per core
use an enhanced switch please
agree
event.getLocation().getBlock().setType(switch (event.getSpecies()) {
case DARK_OAK -> Material.DARK_OAK_LOG;
case ACACIA -> Material.ACACIA_LOG;
// etc.
});```
Will clean things up significantly
hopefully you learned something new of maven 😛
I'd just create a method for that o0
Or a Map, yeah
Material getLog(TreeType)
whoa wtf the -T option sped up my building from 2 minutes to 30 seconds
gonna try this now
Man you could have at least made the block a local variable
why the heck doesn't maven enable that by default
EnumMap is preferable there actually
because maven is designed to run on low end systems out of the box
that only helps you if you have a lot of modules
yeah but 1 thread per core, why not
well not only just if you have modules but proper modularization too
and your dependencies are setup appropriately
as said, my stuff went down from 2 minutes to 30 seconds using -T 1C 😄
nice and that wasn't even increasing the ram allotment either 😛
which is another thing you can do as well
also why didn't you merge existing cases?
by default maven starts with 512mb of ram and I think only uses at most 1GB or something like that
but you can just arbitrarily give maven more ram to use as well
especially if your project is large 🙂
so what do you think now @tender shard with maven vs gradle? 😛
tbh i kinda forgor ¯_(ツ)_/¯
I mean you could at least do it like this 😄
public static Material getLog(TreeType type) {
switch (type) {
case REDWOOD:
case MEGA_REDWOOD:
case TALL_REDWOOD:
return Material.SPRUCE_LOG;
Enabled -T 1C but time didnt change
But at the same time, this project is legit just 1 class, 1 compiled dependency, and one class lmao
Cant really get faster than 6.9 seconds for something like that i assume
I was always on the maven side
Ill have to try on a larger project i have
Could not pass event PlayerInteractEvent to HitsCrafting v1.0 org.bukkit.event.EventException: null + an npe, i have no idea why it would do this even after i put all of the checks for stuff that would be null
https://pastebin.com/cFpZTQnA error
https://pastebin.com/LpyAQMPQ my code
https://pastebin.com/mha6XxLV main class
https://pastebin.com/mBLK2537 config
it won't help you if you don't have multiple modules
still at least now you know you can do something to increase performance if necessary 🙂
ahh
index[2] is null
ok that explains the npe but im still confused about the event exception
the event exception is caused by your nullpointerexception
i had it before that tho
EventException = there was an exception in one of the event handlers (yours)
you only care about the "Caused by: " part
does ExplosionPrimeEvent happen when the thing is ignited?
I mean gradle also is parallel capable
I didn't say it wasn't, but most people use that as one of the comparisons
probably isnt very helpful for my case since im not really using multiple modules yet
@wet breach can I somehow add the -T parameter to my pom.xml so I don't have to type it everytime? 😄
Oh well I haven't seen anyone using that as an argument towards the justification of gradle being superior but ye
you can add it to your settings.xml for the project or for the system as the arguments to run with maven
how can I add it to settings.xml?
I mean, can't hurt to use 8 cores all the time
so why not
there is a line somewhere saying something something arguments
don't have maven installed currently so I don't have anything to look at XD
my settings.xml only has repository credentials 😄
For Windows (Linux in parens):
Open the Environment Variables window: Computer -> Properties -> Advanced System settings -> Environment Variables
Add the property MAVEN_CMD_LINE_OPTS with your desired value. In my case -T 3 as I want Maven to use 3 threads to build in parallel.
Edit the mvn.cmd file (In Linux: the mvn file). Find the part where the Java command is actually executed, the line starting with %MAVEN_JAVA_EXE% (In Linux: generally after the line defining the main class: org.codehaus.plexus.classworlds.launcher.Launcher)
Add %MAVEN_CMD_LINE_OPTS% to the end of the line (In Linux: $MAVEN_CMD_LINE_OPTS)
When you run mvn compile on a Maven project you will now see the following line:
Using the MultiThreadedBuilder implementation with a thread count of 3
This has the advantage of the user being able to 'override' this value. So if the user executes mvn -T4 compile, then 4 threads are used instead of the default 3.
also, you can configure maven to download more dependencies at a time too
what do u have as of now?
does PlayerJoinEvent get triggered when a player changes worlds?
or is there a different event for that
can use MVN_OPTS for this as well
mvn -Dmaven.artifact.threads=1 verify
export MAVEN_OPTS=-Dmaven.artifact.threads=3
first one will download 1 artifact at a time second one will download 3 at a time, by default maven downloads 5 artifacts at a time
also during development you can build a specific module only as well
where does it go wrong
using mvn compile -pl module-c
so it just doesnt save?
well thats because you're just writing to the output stream
in principle you need to save the bytes from it
I have a plugin that reads a lot of yml files constantly. If i was to load them all to ram it would use up like 2gb of ram. it there any better way to read lots of files constantly? the tps often drops to 18
send your structure util as well
well don't, cache stuff instead
utilManager.utility.savePlots();
this one
isnt that in ram or am i thinking of the wrong thing
Bukkit.getScheduler().runTaskAsynchronously(BlobPlots.getInstance(), () -> {
this is illegal
or well
it becomes illegal/useless in onDisable
line 78
yes
which in itself should in principle not hurt your tps
unless you're doing sus stuff on the main thread
it uses like 2gb+ in ram because there are a few thousand files it stoes in ram
you should look into expiration/timeout caches
hmm
can u link the lib
I will take a look
Hello, can someone help me how to create a command that sends a message in the minecraft chat in vs code? please
@quaint mantle in principle no
but like
you could proxy it
or actually no, I mean just pass a custom instance of ProxyService that you implement
which does not use the bukkit scheduler
altho it gets hard if you wanna execute things synced still
but that could be a temporary solution
but you should ask the developer if they could redesign such that you could pass a custom Executor
its not that easy
Isnt better to fork the repo and fix the issue?
thx but I'd rather have something in the pom or similar :/
yes a pr could be one way to address this issue
but this lib is a plugin lib, so he has no control over it in principle
Simply uses a custom maven plugin
I have done for using the ZKM obfuscator and works reallly good
wtf have you actually BOUGHT zelix?
Yes lmao
Hey can anyone help? It does this whenever someone does /home and I’m lost
I paid i think 3000 dollars or something like that
just admit it, you're using a cracked version of ZKM lol
No lmao i just paid $256 ddls it wasnt so expensive
Stringer its the one that costs $3000 dollars
I'm having a weird quirk (not sure if it's a new 1.18 thing.)
When doing:
@EventHandler
public void onPlace(BlockPlaceEvent e) {
e.setCancelled(true);
e.getBlock().setType(Material.SAND);
}
Nothing gets placed?
probably because you're not calling the method
Its a listener
Oops type on my end, on my code I am
.getBlock
Does your class implements Listener?
Did you register the listener on your main class?
Oh prob try giving a small delay before setting the block again
that is a bad idea
No? Because you cancelled it
Maybe I just have bad memory but that's how it works on older versions?
No they're not
they get triggered after the event actually happens
If you cancel the event its because you dont want to happen its right what saying Mike
most events get called before anything actually happens ingame
And this one is no exception
it is
It's called before it's placed
You cancel it means no block is placed
after*
You change the material of a block that doesn't exist
It should be called after setting the event
it is placed actually
but then its just stopped
its pretty weird
So how do you spawn a block somewhere?
i have had multiple issues with it
i ended up having to switch to playerinteractevent and checking right click block
The weird part is if you get the type it returns SAND even though the change hasn't occurred in the game.
Hello, can someone help me how to create a command that sends a message in the minecraft chat in vs code? please
So setting the material and not canceling the event doesn't work?
It does but I don't want the player placing their blocks
(and adding blocks back to their inventory after they've placed one is not an option)
Ah
you should just be able to do event.setCancelled(true)
So wait does this method work or not
without the sand part
Right but I want to place a sand at the location they attempted to place a block
@EventHandler
public void blockPlace(PlayerInteractEvent event){
if(event.getAction() != Action.RIGHT_CLICK_BLOCK || event.getItem() == null) return;
event.setCancelled(true);
Block block = event.getClickedBlock().getRelative(event.getBlockFace());
if(block.getType() != Material.AIR) return;
block.setType(Material.SAND);
}
@granite beacon this could work for what you're trying
This is what occurs, might take a second to load
Alright so it doesn't
lol
What is Spigot's build.gradle? I tried this and not working...
https://www.spigotmc.org/wiki/spigot-gradle/
The home of Spigot a high performance, no lag customized CraftBukkit Minecraft server API, and BungeeCord, the cloud server proxy.
Try getting the location and world from the block and setting the block material using the location
I'll give it a go
No don't use that code
is there a way to prevent this with this code https://paste.md-5.net/awuweyorok.cs
Firespreadevent?
like idk is there a way of detecting the reason its supposed to fade
im making it never disappear in rain or smth
?jd-s
so e.getBlock().getWorld().getBlockAt(e.getBlock().getLocation()).setType(Material.SAND);?
lol
Because I tried that before and still did the same thing as above
@sterile token ?
basically im trying to make it so when rain or smth puts out the fire, it gets cancelled, but i dont see a way of detecting whether it was rain or it broke a block, because it doesnt extinguish when it breaks a block
and then leaves floating fire
All good lol
No worries
You have op on the server right? Not in spawn chunks?
Yes and Yes
Kk
It also wouldn't make sense why not canceling and setting the type works
Might have to use the interact event code
Probably because when you cancel it the event just ignores any block state changes
Maybe idk
You'd probably have to run a runnable to change it 1 tick after
Yeah but that just seems kind of absurd for replacing a placed block
I told him that before
Less than ideal
or just do a (System.currentMillis() - now millis) -> and them replace isnt better?
yeah using a runnable is not a good idea
I don't see where you're going with that
have you tried this?
someone tell me how to create a command that sends a message in the minecraft chat or at least create a plugin well and 100% funsional in vs code
Don't use vs code for Java
In this episode, I show you how to make commands for your Minecraft plugins. #Spigot #SpigotTutorial #MinecraftPlugins
Code: https://github.com/Spigot-Plugin-Development-Tutorial/commands-part-1
Plugin.yml Reference: https://www.spigotmc.org/wiki/plugin-yml/
⭐ Kite is a free AI-powered coding assistant that will help you code faster and smarte...
You can learn java to do it
because?
Because it's not designed for Java and you'll spend more time trying to do anything
Go install a Java IDE like intelij or eclipse
neat
oh ok and what program do you recommend? except eclipse and intelIJ that don't work for my pc
If Eclipse and intellij don't work that must be some toaster
I searched for netbeans but the page showed me an annoying clock advance error and I got it right
Your computer is a toaster
don't judge me it's a windows 7 pc and its system is 32bits what else can i do on my part
Use the last intellij version that supports 32 bit
I also tried to search for it but it was a failure it does not work
so that's why I ask about that for vs code which is the little bit of luck that I found
im trying to put my main from my plugin but... i got this please help me
main cannot be resolved to a variable
?di
Guide to dependency injection: https://www.spigotmc.org/wiki/using-dependency-injection/
how do you change the loot tables?
Datapack is easiest
without datapack though?
@EventHandler
public void rcPlayer(PlayerInteractEvent event) {
Player player = event.getPlayer();
if(event.getAction() == Action.RIGHT_CLICK_AIR) {
if(player.getItemInHand().getType() == Material.DIAMOND) {
Location loc = player.getLocation();
event.getPlayer().getWorld().spawnEntity(loc.add(0,1,0), EntityType.ARMOR_STAND);
}
}
}
@EventHandler
public void spawn(CreatureSpawnEvent event) {
if (event.getEntityType() == EntityType.ARMOR_STAND) {
ArmorStand armorStand = (ArmorStand) event.getEntity();
armorStand.setVisible(armorStand.isInvisible());
}
}```
Hi, spigot newbie here- How would I go about essentially combining these two? As in once the armor stand entity spawns, it would be set as invisible
spawnEntity returns the entity that was spawned, just store that in a variable
^
someone recommend me a windows 7 32bit java IDE system to create my plugin please
ArmorStand armorStand = (ArmorStand) event.getPlayer().getWorld().spawnEntity(loc.add(0,1,0), EntityType.ARMOR_STAND);
Ah, I see. Thank you very much!
if you cant use intellij or eclipse than probably netbeans

