#help-development
1 messages · Page 559 of 1
i dont have anything in there.
Is your library on maven central?
use jitpack or smth
or at a minimum have it published in your local repo
Yikes
I'm not sure, I just imported the file through the project structure.
?
then no.
never import anything in the project when using maven
Why is that?
You need to upload your library somewhere, or do it locally.
builds it and installs to local maven
did you not read my sentence?
didn;t see you said "or"
does the 1.20.1 update affect servers? i heard it only fixes a singleplayer bug
It adds all the new feature if that’s what you mean..?
so I do this after I've imported the file? because its already there.
yes
so you built it using maven?
Yes
then build it again using the install lifecycle
now delete the manual import you did in your other project
Already did that.
so the dependency is correct? I just need to add the repository?
ah okay
there is a refresh/update button in your maven tab in InteliJ
if you use that
if Eclipse, right click pom and select maven -> update project
<dependency>
<groupId>toast.pine</groupId>
<artifactId>Overhaul-Systems</artifactId>
<version>1.0.1-a</version>
<scope>compile</scope>
</dependency>
So this is all I need?
if all those are correct values
they are
artifactId shoudl be all lower case
even if it is camal cased in the actual plugin?
i copied this directly from the Systems pom file
names can be any case you want, specification says groupId and artifactId should be all lower case
alrighty
[WARNING] Overhaul-Systems-1.0.1-a.jar, OverhaulArmory-1.2.3.jar define 3 overlapping resources:
[WARNING] - META-INF/MANIFEST.MF
[WARNING] - config.yml
[WARNING] - plugin.yml
[WARNING] maven-shade-plugin has detected that some class files are
[WARNING] present in two or more JARs. When this happens, only one
[WARNING] single version of the class is copied to the uber jar.
[WARNING] Usually this is not harmful and you can skip these warnings,
[WARNING] otherwise try to manually exclude artifacts based on
[WARNING] mvn dependency:tree -Ddetail=true and the above output.
[WARNING] See http://maven.apache.org/plugins/maven-shade-plugin/
this warning, thats because i have multiple config files?
each plugin has a config called config
this wont cause any real problems
your lib is not a lib, its a plugin
do not shade it
add a provided scope to the pom entry
<scope>provided</scope>
want that to replace the compile?
yes
No i followed a resource on spigot forums, they used compile, and i just followed it.
this wont cause any real problems
Cooleg please read up in the conversation before trying to discredit another helper
find the library yourself
and check
i did lol
yes it will cause issues as it will be in teh wrong classloader
his lib is a plugin not a library
the warning is now gone.
im just saying listen to the original dev of whatever you are using
Cooleg you clearly didn;t read, it HIS plugin AND lib
the plugin is mine
didnt see that one then maybe km just blind though
I'd like to check if an item has a specific nbt after this line if (e.getBlock().getType() == Material.OAK_SAPLING) { is it possible without addition plugins?
Blocks can;t have any nbt tags unless they have a tilestate
we have a fruit trees plugin which gives like 'lemon saplings'
Only the item form can have NBT
it will just be data on teh ItemStack
The block is probably using a database/chunk pdc
once planted teh plugin will track it
what coll said
I made this Person class
public class Person {
private int age;
private String name;
public Person(int age,String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
GSON isn't complaining about having issues to unserialize Person, like it used on my spigot plugin (asking to make a Person adapter like it used to ask me to make a Location adapter.). Why is that?
Here is the program class:
ok, thanks for answers !
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.*;
public class Program {
GsonBuilder gsonBuilder = new GsonBuilder();
File file;
public Program() {
Person personFromFile;
try {
file = new File("person.json");
if(file.createNewFile()) System.out.println("Created the file person.json!");
else System.out.println("The file person.json already exists.");
}catch(IOException exception) {
exception.printStackTrace();
}
System.out.println("Writing to file...");
write(file);
System.out.println("Reading file...");
personFromFile = read(file);
System.out.println("And here is the output: " +personFromFile.toString());
}
void write(File file) {
Person person = new Person(10,"John");
Gson gson = gsonBuilder.create();
String personSerialized = gson.toJson(person);
try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file))) {
bufferedWriter.write(personSerialized);
}catch( IOException exception ) {
exception.printStackTrace();
}
}
Person read(File file) {
Person person = null;
Gson gson = gsonBuilder.create();
try(BufferedReader bufferedReader = new BufferedReader(new FileReader(file))) {
person = gson.fromJson(bufferedReader,Person.class);
}catch (IOException exception) {
exception.printStackTrace();
}
return person;
}
}
yes, because on Spigot it asked me to make a adapter.
becuase it did not know how to deserialize a Location, and i had to "teach" it how to do it , by making a adapter.
we would beed to compare the two classes that are being serialized
Person is not teh same as Location
oh so theres the answer
yes
I also added another object into person, it still works without complaining
public class Person {
private int age;
private String name;
private PhoneNumber phoneNumber;
public Person(int age, String name, PhoneNumber phoneNumber) {
this.age = age;
this.name = name;
this.phoneNumber = phoneNumber;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public PhoneNumber getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(PhoneNumber phoneNumber) {
this.phoneNumber = phoneNumber;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
", phoneNumber=" + this.getPhoneNumber().getNumber() +
'}';
}
}
Why is that?
public class PhoneNumber {
private int number;
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public PhoneNumber(int number) {
this.number = number;
}
}
Yeah, thats the thing. In spigot it complained to me that it did not know how to deserialize it and asks me to make a adapter.
but here it just works
world is a interface
hmm
you can't instantiate World from a constructor
youll find that most api classes are interfaces
so it can't reflectively create it
so if I remove phoneNumber from the constructor it'll complain then? (Yes, my issue is that it is not giving me a error):
I'll try it
pov: when you cant get nitro
Removing phoneNumber from constructor doesn't make it complain either.
I just want to know why, in spigot, it asks me to create a adapter.
spigot objects are more complex
alright I'll just take that as the reason
it doesnt know how to serialize a WeakReference<Location> or smth
or atomicref whatever
the error messages say alot, just try to create an adapter for the lowest amount of fields
alright
I'll make a faulty adapter in purpose setting all of persons phone numbers to 6666
dont call it a bug call it a feature
How can I check when a player stops breaking a block?
BlockDamageAbortEvent
alr thx
also, how can I give players mining fatigue but have their hand move the same way it does if you dont have mining fatigue? (I looked it up and ppl said to use mining fatigue 255 but that still removes their arm or block they're holding from screen and when u try to break a block u can only barely see ur arm move)
as far as I know, you can't
im pretty sure hypixel does it
Thats not spigot
what is it
custom everything
like custom api stuff
The effect is handled client side
so server side changes doesn't really matter here
im also pretty sure ive done it before
ive made a custom mining system like im doing rn before but I forgot how
I doubt they woudl use fatigue
and im pretty sure ive done this
I believe if you just set the mining fatigue high enough you get the effect
mining duration depends on block hardness, which is baked into Material
Yeah it's also hardcoded in to the client
yes, you can however modify the baked in Server side to get extended mining durations.
Hello, how can I listen to criticals packets ? I made this with ProtocolLib but it isn't working :```java
manager.addPacketListener(new PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Client.USE_ENTITY) {
@Override
public void onPacketReceiving(PacketEvent event) {
Player player = event.getPlayer();
PacketContainer packet = event.getPacket();
if (packet.getModifier().read(0) instanceof EnumWrappers.EntityUseAction) {
EnumWrappers.EntityUseAction action = packet.getEntityUseActions().read(0);
if (action == EnumWrappers.EntityUseAction.ATTACK) {
player.sendMessage("Critical !");
if(!isCritical(player)){
player.sendMessage("Critical cheat !");
}
}
}
}
});```
the name ?
mfnalex or 7smile7 created it
Hello. My code is stolen from spigot illegally, can I use ProGuard and how much can I use its functionality?
no clue what its called, or if it's even released (as it's a little buggy in implementation)
they have posted it in here in teh past though
It won't look correct on the client. It will break the block too fast
@tender shard Wakey wakey, did you do the Material hardless modifcation lib?
yes, but the server resets it
That doesn't look good
same as it does for interactions on fake blocks
make sense
always fun when your whole os freezes because of some stupid code bug
Can someone explain what build tools is and why I would use it?
I read this page but I still don’t understand what the point of it is
? obtaining spigot
he just said it
build tools is an application that helps you obtain the sources for spigot and its api and compiles them both on your system to get a jar
it is the official method of obtaining the server jar as well
in regards to spigot
Oh I see but why would you want to do such a thing
because its the official method to know you get the official versions
Because of the dmca
Ohh
?dmca
An unofficial explanation of the DMCA can be found here: https://www.spigotmc.org/wiki/unofficial-explanation-about-the-dmca/
Now I get it
these other sites that provide jars you are taking a risk they haven't tampered with it
also yeah the DMCA plays a part in it too
but, since the jar can't be freely distributed we have buildtools for the people who are not familiar with how to compile java sources
so that means buildtools isn't strictly necessary but its the easiest method
both, but only legal way
Guys, is using Bukkit.runTaskTimerAsynchronously a good idea to update data in the database? I just don't know how best to implement cache saving, because if I change the value of some field in a cached object, the data in the database will not update... Or should I just use PlayerQuitEvent and update the data when the player exits?
what data are you needing to store about the player?
I need help i want to make a custom enchanting gui with an Inventory but when i put the item in the slot where the item gets checked the enchantments will only apear when the item is put outside of the slot.
This is My Main.java code:
https://pastebin.com/zn860seR
And this the EnchantingTableGui code:
https://pastebin.com/6bEstggk
can someone say whats wrong/help me pls?
java.lang.Throwable: null
at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:15) ~[purpur-1.20.jar:git-Purpur-1987]
at org.bukkit.craftbukkit.v1_20_R1.scoreboard.CraftScoreboardManager.getNewScoreboard(CraftScoreboardManager.java:45) ~[purpur-1.20.jar:git-Purpur-1987]
at org.bukkit.craftbukkit.v1_20_R1.scoreboard.CraftScoreboardManager.getNewScoreboard(CraftScoreboardManager.java:25) ~[purpur-1.20.jar:git-Purpur-1987]
at dev.relismdev.rcore.utils.scoreboardBuilder.bundler(scoreboardBuilder.java:56) ~[RCore-1.0-shaded.jar:?]
at dev.relismdev.rcore.utils.scoreboardBuilder$1.run(scoreboardBuilder.java:90) ~[RCore-1.0-shaded.jar:?]
at java.util.TimerThread.mainLoop(Timer.java:566) ~[?:?]
at java.util.TimerThread.run(Timer.java:516) ~[?:?]
[20:19:51 WARN]: Exception in thread "Timer-6" java.lang.IllegalStateException: Asynchronous scoreboard creation!
[20:19:51 WARN]: at org.spigotmc.AsyncCatcher.catchOp(AsyncCatcher.java:16)
[20:19:51 WARN]: at org.bukkit.craftbukkit.v1_20_R1.scoreboard.CraftScoreboardManager.getNewScoreboard(CraftScoreboardManager.java:45)
[20:19:51 WARN]: at org.bukkit.craftbukkit.v1_20_R1.scoreboard.CraftScoreboardManager.getNewScoreboard(CraftScoreboardManager.java:25)
[20:19:51 WARN]: at RCore-1.0-shaded.jar//dev.relismdev.rcore.utils.scoreboardBuilder.bundler(scoreboardBuilder.java:56)
[20:19:51 WARN]: at RCore-1.0-shaded.jar//dev.relismdev.rcore.utils.scoreboardBuilder$1.run(scoreboardBuilder.java:90)
[20:19:51 WARN]: at java.base/java.util.TimerThread.mainLoop(Timer.java:566)
[20:19:51 WARN]: at java.base/java.util.TimerThread.run(Timer.java:516)
>```
hi, ive been coding a plugin that dynamically creates a scoreboard to display each n seconds, i dont think ive set it up to run any asynchronous scoreboard creation ?
ig if you just enchant the item it won't be displayed in the inventory unless you pick it back with cursor
but it is async
for instance, here is my code for it :
public JSONObject frameExtractor(JSONObject rawconfig, int frame) {
int frames = 0;
for (String key : rawconfig.keySet()) {
JSONArray array = rawconfig.getJSONArray(key);
frames = Math.max(frames, array.length());
}
JSONObject config = sanitizeFrames(rawconfig, frames);
JSONObject rebuiltConfig = new JSONObject();
for (String key : config.keySet()) {
JSONArray array = config.getJSONArray(key);
rebuiltConfig.put(key, array.get(frame)); // Add only the common position element
}
return rebuiltConfig;
}
public int frameCalculator(JSONObject rawconfig){
int frames = 0;
for (String key : rawconfig.keySet()) {
JSONArray array = rawconfig.getJSONArray(key);
frames = Math.max(frames, array.length());
}
return frames;
}
public JSONObject parser(String scoreboardName){
JSONObject configJson = new JSONObject(dh.configData.toString());
JSONObject scoreboardsJson = configJson.getJSONObject("scoreboards");
JSONObject scoreboard = (JSONObject) scoreboardsJson.get(scoreboardName);
return scoreboard;
}
public Scoreboard bundler(JSONObject frame, Player player){
ScoreboardManager manager = Bukkit.getScoreboardManager();
Scoreboard scoreboard = manager.getNewScoreboard();
Integer rows = 0;
for (String key : frame.keySet()) {
if(!key.equals("title")){
rows++;
}
}
String titleValue = msg.translateColorCodes(PlaceholderAPI.setPlaceholders(player, frame.getString("title")));
Objective title = scoreboard.registerNewObjective("title", "dummy", titleValue);
title.setDisplaySlot(DisplaySlot.SIDEBAR);
for (String key : frame.keySet()) {
if (!key.equals("title")) {
String rowValue = msg.translateColorCodes(PlaceholderAPI.setPlaceholders(player, frame.getString(key)));
Score row = title.getScore(rowValue);
row.setScore(rows - Integer.parseInt(key));
}
}
return scoreboard;
}
public void display(Player player, String scoreboardName) {
JSONObject scoreboard = parser(scoreboardName);
JSONObject animation = scoreboard.getJSONObject("animation");
int frames = frameCalculator(animation);
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
int sb = 0;
@Override
public void run() {
JSONObject frameObject = frameExtractor(animation, sb);
Scoreboard frame = bundler(frameObject, player);
player.setScoreboard(frame);
sb = (sb + 1) % frames;
}
}, 0, 1000);
}```
by default ?
no, as i can see in your error
you know we have a paste site for a reason -.-
?paste
why
mhhh
?fork also
SpigotMC maintains the Spigot server. If you are using a fork of Spigot (such as Paper, Airplane, Purpur, or other derivative works), you should seek support in the appropriate Discord servers.
there is literally Bukkit.getScheduler().runTaskTimer(plugin, () -> {}, delay * 20L, interval * 20L);
so that each second it bundles a new scoreboard and displays it to the player
idk why my crazyvouchers doesnt working still 😦
i mean why are you using timer
you will flicker switching scoreboards
is only red
when bukkit provides own scheduling implementation
which is supported for creating scoreboards that way ?
public void display(Player player, String scoreboardName) {
JSONObject scoreboard = parser(scoreboardName);
JSONObject animation = scoreboard.getJSONObject("animation");
int frames = frameCalculator(animation);
int taskId = Bukkit.getScheduler().runTaskTimer(plugin, new Runnable() {
int sb = 0;
@Override
public void run() {
JSONObject frameObject = frameExtractor(animation, sb);
Scoreboard frame = bundler(frameObject, player);
player.setScoreboard(frame);
sb = (sb + 1) % frames;
}
}, 0L, 20L).getTaskId();
}```
so something like this ?
idk why my crazyvouchers doesnt working still 😦
i forgor how to import the plugin from the main class lol
Guide to dependency injection: https://www.spigotmc.org/wiki/using-dependency-injection/
so basically in my main class instance a new scoreboardbuilder like this
public scoreboardBuilder sb = new scoreboardBuilder(this);
and then in my scoreboardBuilder class do this ?
public class scoreboardBuilder {
private final RCore plugin;
public scoreboardBuilder(RCore plugin) {
this.plugin = plugin;
}
}```
yes
but this way i have to pass in the plugin even if i instance a new scoreboardbuilder lets say in my "devStats" class
isnt it a bit annoying ? because i would need to instance devstats with the plugin aswell
what
in devStats i need a scoreboardBuilder
to instance it i am forced to pass in a new scoreboardBuilder(plugin); <--- a plugin
yeah, you must provide every class with an instance of your main class through a constructor
thats annoying af
or use JavaPlugin.getPlugin
yep
but anyways you would need to declare a variable and make a
static {
myVar = JavaPlugin.getProvidingPlugin(DevStats.class);
}```
what about
@NotNull Class<RCore> RCore = null;
Plugin plugin = JavaPlugin.getPlugin(RCore);
i hate it
no
wont work ?
just use RCore.class
you don;t
bruh
JavaPlugin.getPlugin(RCore.class)
Plugin plugin = JavaPlugin.getPlugin(RCore.class);
Yes
so this works in every class ?
gosh thank yall
is Rcore their plugin?
yes
love you guys
yep
can also JavaPlugin.getProvidingPlugin(DevStats.class);
where the argument is your current class
then why are they not just adding it to the constructor of the class if the instance is needed?
just told the same thing
although getProvidingPlugin can cause issues if some other noob tries to acces your class before you
hehe
also, they can add a static method in their main class for obtaining the main class without resorting to going through the pluginmanager
singleton user
wouldnt i need to instance my main class again to access the static method ?
you only need the plugin manager for other plugins
main class is a singleton already
but that isn't what I mean either
your main class never goes away
yeah spigot loader got skrrra
i remember trying to do it and it would say that the main class is already instanced
public class MainJavaPlugin extends JavaPlugin {
private static MainJavaPlugin instance;
public void onEnable() {
instance = this;
}
public static MainJavaPlugin getInstance() {
return instance;
}
org.bukkit.plugin.InvalidPluginException: java.lang.IllegalStateException: Cannot get plugin for class dev.relismdev.rcore.RCore from a static initializer
when trying to access the plugin instance like this : java Plugin plugin = JavaPlugin.getPlugin(RCore.class);
public class SomeOtherClass {
private MainJavaPlugin plugin = MainJavaPlugin.getInstance();
ok i will try this now
You can also use di
yeah and is generally the preferred way, but since its the main class though its fine using the static method or the di way, up to you really
?di
Guide to dependency injection: https://www.spigotmc.org/wiki/using-dependency-injection/
ok so in the main class :
public static RCore getInstance() {
return plugin;
}```
and externally i can access it like this :
```java
Plugin plugin = RCore.getInstance();```
did you not look at my example?
where plugin is defined as plugin = this; in the onEnable
yes infact its the exact same
I suppose you can change out the variable name
but its better if you just use instance in the main class to avoid confusion
but again up to you
works like a charm now, thanks everybody :)
How can I update the spigot api library in my project like the Minecraft Development plugin does it?
edit your pom.xml
edit the pom
Like that?
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.20-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>```
yes
yes
I see, so it updates it but it doesn't change the name as I understand?
that's not spigot lol
forgor 😭
wdym with "doesnt change the name"?
you have to refresh maven for it to actually do something
Ahh I see, thank you. I should've figured this out ages ago but I guess there's no time like the present
im so tired i dont even know if you're being sarcastic or if i actually helped you
in both cases you're welcome
he using intellij thats why i told him
I am stating that in the event they wanted to use some other IDE
the other IDE's don't have that problem
ah oke
So ready yo start that code jam challenge tommorow night a bunch of us planned.
How the helk u go about even decently announcing thst?
I am being genuine. I never got around to figuring that part out so thank you for letting me know.
I personally use Netbeans, so things like refreshing maven or invalidating caches is not a thing for me XD
you're welcome :)
Does it automatically I assume?
yes but also no
IntelliJ isn't coded the same way or designed the same as Netbeans
I don't know anything about coding or something, but I really need help with a rust Minecraft build system
I know about configurate plugins
so both have their ways of doing things. Netbeans detects external changes and changes to settings. Only times where I experienced issues is when beta testing netbeans in which case it could get stuck and the solution is to close the project and re-open it
Could you elaborate a little more?
all entities can be set as passengers
not sure why it wouldn't let you set a creeper as a passenger
because it should
Ohh so the actual game "Rust" and the building system they have, but in Minecraft with larger than single-block structures
Then you should either find something free or pay someone to do it for you
?services
If you wish to request or offer development/art/building/administration services, please do so at https://www.spigotmc.org/forums/services-recruitment-v2.54/
That's actually a really cool idea but you would need to either find an existing version, pay someone, or learn how to make it yourself like Goksi suggested
Is hard to make it?
If you have 0 experience in coding as you said yourself, absolutely yes
Another question
is spogot related to coding in java?
https://paste.md-5.net/vadiwodojo.cs
I have this code to modify the result of a itemstck in the smithing table
everything works fine but when I try to collect to the result it just get placed back
like I can pick it up but it get instanly placed back
Yes, spigot plugins are usually made in java
?learnjava
?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 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.
Because I want to make plugins like in that video
It would be quite a process, don't expect to do it in one week
1 month then 😅
Probably longer
I am learning fast, If I see some coding videos
I am script now
Maybe coding is not so hard if I start learn and understand it
How much takes for You learn java
Same as everything, not hard if you know it lol
I was never at the point like "that is it, I learnt java"
You learn as long as you code
But I'm doing java for about 2 years
also, sit in this channel and just read. You will pick up a lot
I know some russians that make servers full rust
They make open map in game with custom keys
They add custom keys
They put 30 slots inventory
I don't know how, that's means they good coders
@EventHandler
public void onPlace(BlockPlaceEvent event) {
System.out.println(event.isCancelled());
event.setCancelled(!isInCreative(event.getPlayer()));
System.out.println(event.isCancelled());
}
Nothing is printed in the console and the rest of my events in the class work fine.
Make sure you didn't forget to replace your old jar
I pressed the maven reload button not the package 🤦♂️
Wait no it still didn't do anything
it just means they are very familiar with the game, but also you can do a lot if you are not trying to keep vanilla client compatibility
if you make a server that requires a custom client, the possibilities are endless at that point
however, 30 slot inventories on vanilla client are not impossible though
I mean, rust invetory they make
are we talking about mc or another game? Because I am not sure how modifying another game has to do with mc?
I don't know if this is a plugin but I see a video name like this: Vanilla ItemStack.
And in that video I see 1000 blocks stack
They copy rust invetory and put in Minecraft
If you don't know, searc on youtube: rustex remake
Is a server
yeah isn't super difficult to do that
they combine client side textures and some tricks with the server. Otherwise as I stated earlier if you instead you make a custom client for the server it becomes even easier
https://youtu.be/W8JOTbO28Qo
Just look on this video
The owner say me that, all of this is make with plugins
☠️
So you have to install a launcher?
Yea
Then that launcher contains the mod
so its mod lol
And that's all
@EventHandler
public void onPlace(BlockPlaceEvent event) {
event.getPlayer().sendMessage("hello");
Bukkit.getLogger().info(String.valueOf(event.isCancelled()));
event.setCancelled(!isInCreative(event.getPlayer()));
Bukkit.getLogger().info(String.valueOf(event.isCancelled()));
}
why is this not working
nothing is sent to anybody or anything
xd I had to use negative mining fatigue
This is what the owner of that server say me:
all items crafts load & init from yml
skript - 2-5 minutes
java - 1 sec
Oh wait
Nevermind y'all I have another event overriding this one
@EventHandler
public void onRightClick(PlayerInteractEvent event) {
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) event.setCancelled(true);
}
💀
its either a mod or a custom client as I said
custom client makes things extremely easier
and would make the most sense
And also he say me this:
make client so hard
work in graphic OpenGL code.
only mojang vanilla api (im not using forge)
He don't use forge
Yeah that's a mod
you don't need forge for mods
Vanilla?
It's not vanilla either since you're modifying the game
I would call it a mod even if it's released in the form of a launcher
bruh seemed like an endless loop in my app froze windows for 20 secs
that took a while to find out
then stop endlessly looping
He said me this:
im rewrote all mechanics to java with server core inject
oh no
You need to modify the client. The server isn't enough
What that means?
btw does that command palette in windows terminal actually work for anyone?
I don't think we need more explanations we already stated its a mod
not a plugin
or not a plugin alone doing it
Or they want you to make as close a possible with a plugin
if that is what they are saying
eitherway it will take a long time for you to make that
since you don't even know basic Java yet
Yes because he start make that server when the virus started
But what?
?
much to learn -_-
OH WAIT
He said to me that he create own packet system
I understand
I need start easy
If I want to learn ,and make server like him
until you learn sometimes loops need checks so they don't keep going lol
ye i have no clue what this math is doing
its supposed to adapt the drawing of the world based on the camera zoom
some rendering stuff
is that nim ? xD
odin
pushing to git after coding for like 8 hours
- im seeing my homies in 15 minutes
best feeling ever
really need some better textures :C
5 fps
Best fps
You really don't need more than that
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import from realm ClassRealm[maven.api, parent: null]]
[ERROR]
[ERROR] -----------------------------------------------------
[ERROR] : org.codehaus.plexus.compiler.manager.NoSuchCompilerException
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginContainerException
Error compiling Spigot. Please check the wiki for FAQs.
If this does not resolve your issue then please pastebin the entire BuildTools.log.txt file when seeking support.
java.lang.RuntimeException: Error running command, return status !=0: [C:\Users\jiggl\Downloads\build\apache-maven-3.6.0/bin/mvn.cmd, -Dbt.name=3763, clean, install]
at org.spigotmc.builder.Builder.runProcess0(Builder.java:1062)
at org.spigotmc.builder.Builder.runProcess(Builder.java:993)
at org.spigotmc.builder.Builder.runMaven0(Builder.java:962)
at org.spigotmc.builder.Builder.runMavenServer(Builder.java:931)
at org.spigotmc.builder.Builder.main(Builder.java:742)
at org.spigotmc.builder.Bootstrap.main(Bootstrap.java:27)
does anyone know why this is happening
buildtools
are you using OneDrive?
no its in my downloads folder
cause for some reason everything on my desktop is in a one drive and im too lazy to try to fix it
one drive is literally like a virus it infects everything i own even if i delete
I don;t use it, but I know it messes with buildtools
thats called a backup
i dont want my shit on my computer to be backed up anywhere
create a folder in the root of your dirve, put bt in there and run it.
but thats besides the point, might there be a reason?
ok ill try that
?paste then upload teh buildtools.log if it fails
If I'm going to create a player wrapper to contain more information about a player should I make it a static wrap method with a private constructor or have the constructor with a player arg
public WrappedPlayer(Player player) {}
private WrappedPlayer(Player player) {}
public static WrappedPlayer wrapPlayer(Player player) {
return new WrappedPlayer(player);
}
Don;t use a Player object as a reference, use their UUID
why
depending on the amount of data you can use their PDC
Player objects go stale when they relog
can I rely on the onChunkPopulate event to introduce some "custom ore"? I'm a beginner and don't know if it can have side effects, and I read that overriding the ChunkGenerator itself is a huge pain since you'd have to code that whole thing yourself.
Which one would you do though the constructor or the static method?
You should use a BlockPopulator
If you are using PDC then use teh static, it's cleaner
just a utils class
okay, I'm gonna look into it, thanks
Hi ! I wanted to use TextComponents in my plugin (1.19 Spigot plugin) but my IDE seems to tell me that those are deprecated. I didn't found any recent posts mentionning this. Can I still use them or is there an alternative to it ?
You are depending on paper api
Yeah just replace it
alright classical 1.0 / 0 problem
Don't forget it to replace it in the other places as well
Hi all, I'm currently working on a custom application that allows me to download resources from spigot. Currently I have this working for the usual plugins but premium ones require authentication in order to download. I did have a look to see if I could get some sort of api key I can use but I'm not having much luck. Has anyone got any suggestions?
Okay after a year I finally have a question that shouldn't just be answered with "go learn java" umm so I'm tryna create a countdown for the player to respawn but they can just skip it by leaving the server and coming back
I don't know how to fix this
never used flags, but sounds like a great solution!
?pdc
https://paste.md-5.net/vadiwodojo.cs
I have this code to modify the result of a itemstck in the smithing table
everything works fine but when I try to collect to the result it just get placed back
like I can pick it up but it get instanly placed back
well I did
I thought they didnt support pdc items?
They do for the output
But that’s beside the point, it’s just a base recipe so the game doesn’t freak out
took me 3 hours to figure out f32(max(1, camera.zoom)) needed to be 1 / max(1, camera.zoom) 💀
You can still do all your checks in the event
ah so you let the recipe handle the result setting part i see
and just cancel the event if its not to your standards
You can still modify the result too afaik
eh result supports item stack so unless you want like a player placeholder :p
Yes but smithing recipes are weird
i do this with timers all the time because i always forget that currentDate > expiresAt
And the result meta will be wiped by default
thank you
what dah hell
alright then mojang
It’s because the smithing table is meant to copy the meta of the input
So you don’t lose any enchantments or whatnot when making netherite
Are anvil recipes a thing yet then since smithing ones are? 
PrepareAnvilEvent is the bane of my existence
final code lookin clean
Is it bad if I use deprecated methods ? I don't see any alternatives to them (TextComponent)
oops, my bad
Paper api deprecates all the things
thanks
comments saying what
paper just prefers forces you to use them
Theyre still fine to use
Thanks ! I'll give it a try
odin
ind(ia)
?
nothing
its very like C
I am trying to stop a player from mining a block before they even start to break it so I have a BlockDamageEvent and I cancel that even but it still lets them finish breaking it but it canceles the block break event once it breaks... is there a way to make it where they just cant mine it at all?
gamemode adventure
b r u h
its like conditional like if they dont have the right tool then they cant break it so i dont wanna be switching their gamemode over and over and over
that would be so messy
and weird
Hi i am making my first java plugin and i can't seem to get my plugin loaded for my 1.20 sever. I am using the 1.20 api version, but when i start or reload the server i get an error that the plugin can not me loaded in because of an outdated api version.
My plugin.yml:
version: 0.1
main: me.emiel131517.wandcreater.WandCreator
api-version: 1.20
commands:
wand:
description: Get a pre-created wand
aliases: gw
usage: /<command> name
permission: wc.wand
load: STARTUP```
The error i am getting:
Could not load 'plugins\WandCreator.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Unsupported API version 1.2
from the yml?
do enable non legacy support simoon
@sick grove wrap it in apostrophes
shoutout to the minecraft version 1.7.10
if you dont have an api version, legacy support is enabaled and breaks stuff
#boycott 1.8+
api-version: '1.20'
oh yeah cuz it just reads 1.2
well error is gone, now i am getting a new error
?paste it
a while probably
org.bukkit.plugin.InvalidPluginException: Cannot find main class `me.emiel131517.WandCreator'```
me.emiel131517.wandcreater.WandCreator This doesn't work either. (this was the standard.)
show a screenshot of your file tree in ur ide
did you use the minecraft development intellij plugin
me.emiel131517.wandcreator.WandCreator should work
please help!
when creating project
yea hthat i what is usaly is, but i get the same error.
try clean building after changing it
ok
PlayerInteractEvent 🤷♂️ ?
already tried that too
I feel like PlayerInteractEvent should work :
yea i tried i checked that the action was left click block and did same code as I have in the blockdamageevent event now and it still doesnt work
i mean it stops them from mining it yes but I wanna make sure they dont even start to damage it
?eventapi
yep, exact
oh
I thought PlayerInteractevent did that
i find it not rlly cool because its soo long to make a little text
i did 2
did you cancel it?
yes
this is it currently
@EventHandler
public static void blockBreakStart(BlockDamageEvent event) {
Player player = event.getPlayer();
UUID uuid = player.getUniqueId();
Block block = event.getBlock();
Skyquest.currentlyMining.put(uuid, block);
if ((block.getType().equals(Material.DARK_OAK_LOG)) && (Skyquest.getPower(player.getInventory().getItemInMainHand()) < 2)) {
event.setCancelled(true);
player.sendMessage("§cYou do not have a powerful enough tool to break this!");
} else if ((block.getType().equals(Material.DARK_OAK_LOG)) && (Skyquest.getSkill(player, "woodcutting") < 5)) {
event.setCancelled(true);
player.sendMessage("§cYou need at least woodcutting 5 to break this!");
} else if ((block.getType().equals(Material.SPRUCE_LOG)) && (Skyquest.getPower(player.getInventory().getItemInMainHand()) < 3)) {
event.setCancelled(true);
player.sendMessage("§cYou do not have a powerful enough tool to break this!");
} else if ((block.getType().equals(Material.SPRUCE_LOG)) && (Skyquest.getSkill(player, "woodcutting") < 10)) {
event.setCancelled(true);
player.sendMessage("§cYou need at least woodcutting 10 to break this!");
}
}
paste is bad
Did not work i builded clean and rebuilded. getting this error still: Could not load 'plugins\WandCreator.jar' in folder 'plugins' org.bukkit.plugin.InvalidPluginException: Cannot find main class `me.emiel131517.wandcreator.WandCreator'
if PlayerInteractEvent doesn't work not really anything you can do
you could send a packet
to make it look nonbroken
but PlayerInteractEvent should work
yea I tried to use player.sendBlockDamage(block.getLocation(), 0); but that did nothing
is there a way to like make them stop mining
like force them to stop swinging their arm even if they keep holding down click and they would have to click again to swing again?
why can I not get the persistent data container of an offlineplayer? it should be accessible from the player data file and return null if they haven't played before
cus didnt u store the persistent data container to the online player so if u try to get it from the offline player it shouldnt work cus its a different thing?
persistentdatacontainer is just the player data file and contains the nbt of the player which is how the OfflinePlayer#hasPlayedBefore() method works I believe (checks if the file exists)
so why would it not use that
Hey there, question for learning's sake, does anyone know how the event handler system works? Like I understand interfaces but surely there should be different interfaces for each event? How does the @EventHandler tag work and how does it know which methods the plugin class has?
So you are basically asking how Annotation processors work?
i think so, but I think a big part comes down to the function signature, i.e. what it returns and what parameters it has
so if its like an event as a parameter, using the annotation the compiler can see that the event belongs to that method
thats just how I envision it anyways
Suppose so, yeah. See, didn't know they were called that until now, despite trying to find out on Google
i see
There can be 2 different types of ways annotations can be proessed
does spigot use an annotation processor or just regular reflection? 👀
There is something like Lombok, which is a compile-time annotation, meaning the annotations are processed by the compiler and never actually used during runtime
Or you make your own annotation processor at runtime via reflection ^
what am i with :agree:
yes to regular reflection lmao
getClass().getAnnotatedMethods()
like 97% sure thats a method i used when i made mine
thought so
i forgot how ass this was to make fuck
reflection 
and that way is only just for the constructor/class annotations
thats why annotation processors are nice
well sometimes you rlllly want then during runtime, like with EventHandler
Okay, so the idea is that it that it can search for classes or methods with a specified annotation?
And then call or change them somehow?
I suppose it makes sense, but the code examples I found online make it look SUPER complicated to set up
yes it is very complex to setup
you need to have a good grasp on reflection
i somehow cant even figure out basic math
its supposed to draw more tiles when i zoom out lol
only seems to work when zooming in
ss teh code snipet. I can;t read it
drawTiles :: proc(texture: ^rl.Texture, camera: rl.Camera2D) {
zoom := max(1, camera.zoom)
rows := math.ceil(f32(rl.GetScreenHeight()) / f32(CUBE_SIZE) * 1 / zoom)
cols := math.ceil(f32(rl.GetScreenWidth()) / f32(CUBE_SIZE) * 1 / zoom)
for row in 0..<i32(rows) {
for col in 0..<i32(cols) {
rl.DrawTexture(texture^, col * CUBE_SIZE, row * CUBE_SIZE, rl.WHITE)
tilesCount += 1
}
}
}
not java anyways but i think youll get it
i got it working today but then i fixed smth and now its broken again lol
Right, will look into it. Thanks for the help!
should it not be +1 /zoom?
needs parenthesis too
you ned 1 more tile than will fit on screen
if its a fraction
thats why i did the ceil
I don't know the language, whats f32?
32 bit float
thought so
so the *1 is doing nothing
a float divided by a float
oh I see
you are making zoom a fraction
I thought * was before / in order
shouldnt i multiply the amount of rows or cols that i get by zoom /1?
zooming in means zoom getting bigger
yes, so less tiles
this lang not having implicit cast sucks lol
use C++?
what is your camera.zoom generally?
its standard 1, and reaching about 4 when zoomed in and zooming out is kinda limitless
lemme just do this whole math again lol
cant work in this heat
so zooming out, increases zoom value, and as such shoudl increase the total row/col
no no zooming out decreases the zoom value
I'd delete the * 1 and see
uh?
zooming out decreases zoom
but you are limiting it to 1
so 4 is max zoomed in
1 is max zoomed out
mouseWheelMove := rl.GetMouseWheelMove()
if mouseWheelMove > 0 do camera.zoom = min(4, camera.zoom + ZOOM_INCR) // zooming in
else if mouseWheelMove < 0 do camera.zoom = max(-4, camera.zoom -ZOOM_INCR) // zooming out
goes down to -4?
uh ye just some magic value
just doesnt seem to work somehow, zooming in has a max
ah seem to have integer division on that zoom variable too
the max(1, camera.zoom) is messing up ahh
ayy i fixed it, ty for helping
drawTiles :: proc(texture: ^rl.Texture, camera: rl.Camera2D) {
zoom := camera.zoom
if zoom == 0 do zoom = 1
zoom = 1 / zoom
rows := math.ceil(f32(rl.GetScreenHeight()) / f32(CUBE_SIZE) * zoom)
cols := math.ceil(f32(rl.GetScreenWidth()) / f32(CUBE_SIZE) * zoom)
title := rl.TextFormat("Zoom: %.2f Tiles count: %i Zoom fraction: %.2f", camera.zoom, tilesCount, zoom)
rl.SetWindowTitle(title)
for row in 0..<rows {
for col in 0..<cols {
rl.DrawTexture(texture^, i32(col * CUBE_SIZE), i32(row * CUBE_SIZE), rl.WHITE)
tilesCount += 1
}
}
}
yep
was stuck at 1
teh DrawTexture looks much better too
night
Hi, I have a question. Can you copy a folder with the spigot 1.17.1 api?
You can do that with normal java.
okay? but I meant to copy the folder with a yml file to use
Yea
You mean your resources folder? There's not an easy way to write all files contained within it with the API, but you can use JavaPlugin#saveResource() and then pass in the file name.
I just loop over the jar to save everything in it
I ended up writing something that would let me choose which subfolder I wanted to copy everything in. I only did this so I could control what time the files get copied onto the server during startup.
Sounds a bit dangerous if the jar becomes infected, but nice :9
https://www.spigotmc.org/wiki/bossshoppro-api/ im trying to use this api, when I add the jar to my library it allows me to use the methods. but when i go to complile the plugin it says the imports don't exist and i cant find a repository and dependency
lolololol
first off they really should make a repo, complain to the owner. Secondly, you need to run the command mvn install:install-file
-Dfile=<path-to-file>
-DgroupId=<group-id>
-DartifactId=<artifact-id>
-Dversion=<version>
-Dpackaging=<packaging>
-DgeneratePom=true
then add to your maven.
thank you!
any way to reproduce the /clone command in spigot
The simple method is just to loop over the source area and copy each block to the destination area
Copying the base block data is easy
But I don’t think spigot really has a good api to copy NBT data
as nbt can only be on tileEntities does it not get copied when you getMeta?
There’s no getMeta method on tile entities
If you mean getState, yes that does copy NBT data but there is no way to clone that state to a new location
sorry yes.
what is the /clone command
Question about kotlin development; I'm following the tutorials the best I can.
You still inherit JavaPlugin and all that jazz, right?
Also, on the example I set Enable/disable to use the bukkit logger and send messages with a color using org.bukkit.ChatColor. Do I just toString() the colors before sending the message?
it's a BlockState, however that data is surely in the BlockData?
Clones an area of blocks to a new location
my best advice: learn java, fuck kotlin
No, BlockData only contains the type and the various states
I know java, why f kotlin? it's so much cleaner
its not it sucks
_ why?_
shame
There’s an open PR that has a method to clone block states
Tbh its a double edged sword
But it’s unfinished
More semantic features but more bloated at the cost of it
And interoperability it gives sucks
Its atrocious in fact
Which is JB’s main so called selling point
Once compiled into a jar it shouldn't matter much, does it?
I meant at compile time obv
Don’t you still need to shade the Kotlin standard lib
Despite the fact that it’s meant to compile to the same bytecode
Well u could just use the library thinngy thing
Idk
What library thingy thing are you talking about?
i mean is it worth it to open this bottle again
I think Java is better if the entire server runs with Java
Spigot has a library feature in plugin.yml
he could just search for kotlin and java in this channel
Hm, I really think I'm missing some context. My naivity tells me it shouldn't make much of a difference
:nokotlin:
The only thing kotlin actually provided that was neat was coroutines, which rn is being added to java std
Pretend I have nitro and that works
Yeah
Well
Kotlin and java share programming paradigms
I much prefer Kotlin syntax
Which makes them by nature not so different
and yet kotlin is just a java clone off while also abusing java
And they both compile to bytecode for the jvm
Mind specifying more exactly what you like about its syntax?
What’s the dang uhh
the methods are fun
variable?.whatever stuff called
val, var, the way you specify types only when you need it, null safety, function variables (higher order functions), adding operator functions, the way you call higher order functions, less boilerplate
the way you make getters and setters 🤤
the way you iterate! ❤️
doing things like list.map {it => it.name} is just OUUUWWGHH
Hello! I have a general MySQL question...
Which is more efficient and less intensive, using INSERT INTO ON DUPLICATE KEY UPDATE
or
query if there's an existing record already and then inserting if there isn't and updating if there is?
Do first one
Alright, thanks!
wild guess: first one is clean, it just operates; second one asks a question and then operates
Just be aware that it will still increment auto increment columns when you use ON DUPLICATE KEY
Which isn’t really an issue but it’s kinda annoying
Sure it does provide less boilerplate, val and var is no different from final and non-final, higher ordered functions are cool but just functional interfaces (altho yes u dont gain the benefits of structural typing), do u mean operator overloading? That shit is mostly confusing, sure u have first class functions also but they bloat kotlin up (for example firstNonNullOrElseGetIfNot are things that pop up when I don’t want to) also first ordered functions are sometimes a pain because you have map, let, run etc and keeping track of their differences requires memory. Kotlin properties (getters and setters) are nice but the way its interoperable with Java makes it despicable to even touch. Null safety is nice.
Also yeah, verbosity is not always bad.
I like how the one thing conclure likes is the null safety
Cutting of too much boilerplate and reducing too much verbosity and u get languages like
d f rd :
( d 4 )@
(I agree with this)
I mean obv operator overloading can be nice with vectors or what not
And inline functions can be really nice
Extension functions, just another way of writing static methods ( I mean sure u have the receiver object being a bit more explicated)
Player + Player
Infix is just boilerplate removal
Abusing operator overloading on objects where it makes no sense is wack
about val and var not being any different from final and non final, they are much, much shorter to write out.
About the rest, I don't mind it being that way, and actually like things like how it can interoperate with Java.
I don’t like it
Doesn’t java have var now
And the industry hates it for reasons unignorable
we agree on different likes!
Yea
Yes they’re shorter to write out, and sure u can use optional type inference with them
Type inference 🤤
Actually another good thing about kotlin is immutability by nature
But in a good engineered system, the java dev should be using other means of practices to address that design concern
I rather specify my own types
I mean, if you want, you can always do it in Kotlin
its just that the type x can be inferred
meaning
val x: Int = 3
and
val x = 3
Have the same type, in this case Int
I dunno… having machine decide object type sounds… unsafe
Not the machine
The compiler understand it
java even has it with var keyword
typescript has it also
javascript changing object types like its parkour:
So does C# ^ (has var)
And it's not like it's js or python in that you can change the type of the variable (unless you like being weird and declaring variables with the Object (Java) or Any (Kotlin) types)
I find var can mess with readability
But it’s nice when you want to replace something long and annoying
Yes
If you're used to Java, I can see why. It's not instantly recognizeable
Like Entry<UUID,MyCoolClass>
Py is a good example of strongly, dynamically typed
For me using strong typed language makes it more understandable to me, and I rather have my errors during compilation than run time
Agreed
If I could use Kotlin for web client dev that would be interesting.
Like, with a strong typed language, you can tell what a object’s type is, by, well, looking at the type
But with something weakly typed
You gotta look multiple lines of code
To figure out what it is
Well JavaScript was almost replaced by TypeScript
Now tho, JS just steals stuff from TS (not rly but kinda)
I think a good example of when u don’t need strongly typed languages are if you only write some program to do math stuff
Yeah that’s a great question
Learning and quick prototyping
All right that’s valid
TypeScript can be learnt just as easily
But for production…?
Prototyping doesn’t make sense
Cuz any modern shit will provide u with a dev env where u have file watchers that monitor changes
And apply it directly with a hot reload
but you have to set all that up. That is not a quick prototype from scratch
And yes debugging is generally not painful because these tools are good
Na bro
React has a sample project
which you have to download a couple MBs for
That's slightly bigger than a "quick prototype"
I mean something like "oh I want to see how js can add two numbers" or "let's make a quick calculator for this algebraic problem"
Go to a js playground then lol
point stands: it's pure JS
But if a language mere existence is cause its useful for prototyping, that’s a pretty shit language
Isn’t that just python
Na
but for the web
It's not the only reason for its existance: it's the language for web browsers.
Actually, node is an abomination by some standards
Yes but people don’t use JS unless they go with strict mode or additional tools like frameworks, other languages that transpile into JS or static analyzers for obvious reasons
Just ask any modern enterprise
Just because it is the language for the web doesn’t mean it’s what people wanna use for the web
I know and I'm guilty
Same tbh
yet I've been on the field, and I've seen how people use js
Fair enough
hi
so back to this. I haven't made a minecraft server hosted on my computer in a WHILE now, so, I got the server running, I got a lot of files and all.
Do I just drop my plugin jar on the plugins folder?
Henlo
Yes
And restart server
Yep
Can I not reload with the server up?
Python is not nearly as worse as JS
Technically you're not supposed to
You can reload with the cli command /reload
Fair
But if it doesn't break your plugin, it's unlikely to break after restart
So if your plugin doesn't break with reload, you can use it
Yeah reload kinda sucks because it allocates new classloaders and shit which can mess up stuff
Can also use PlugmanX but some ppl will disagree
Plugwoman >>>
So, another question. How do I make plugin testing as seamless as possible?
Anyone got a gradle task for this? 😭 (so I don't have to write it myself)
I still copy mine to the plugins folder manually
I’d point you to paperweight userdev
Like a peasant
But it’d add paper api which u may not wanna do
Userdev is just for remapping
Intellij debugger can hotswap classes no?
I just have a bash script…
Do you mean runpaper?
Ding Dong~
I'd rather learn one thing at a time (bukkit's api)
Is it?
Iirc yes
Runpaper is a separate gradle plugin
Ah ye
but maybe I'll still need some sort of permissions API or something.. or is that bukkit?
I got a lot to read
I just have a script that copy my plug-in to the server plug-in folder then start the server…
If I were you I'd set up a gradle task to handle quickly deploying and testing!
Like, jar -> move jar -> stop server -> start server
I did have a gradle script to do that
I would if I have a larger project…
For this one, no.
But I lost it among my 100 gh projects
i wish something existed like this for my minecraft server
I don’t like hardcoding my server path into my project tho
edit config on pc -> push to sftp
And then pushing it to git
Add it to a .properties file
I guess I could use an environment variable
Kiroto I assume you have gradle.build.kts?
Affirmative
just define the tasks for urself
Yeah I sort of implied it here if you didn't have it~ guess I'll do it
yea, im sorry, I lost mine
🤔 wait why doesn't spigot have, I don't know, a project boilerplate?
theres a plugin for it "Minecraft Development" for intellij
with common gradle tasks and all
Spigot uses Maven
Spigot hosts in maven and that's it, am I wrong?
Do you prefer Maven or Gradle, and why?
Everything spigot is maven based
Gradle
pov: starting a war
Because you can add small code to ur build pipeline execution seamlessly perfanxiety
Gradle. Haven't use Maven, looks eww.
I also heavily dislike groovy and much prefer writing my build.gradle in kotlin
Which maven cant do w/o plugins
Next question, Gradle Kotlin DSL or Groovy DSL
Lmfao
I've no use for Gradle so I only use Maven
I feel attacked
Im sorry coll
See? That’s how you start a war
But its so bad
Kotlin.
Groovy just makes me anxious
The support idea gives is just lacking
i use maven when i need remapped or modules
Gradle when i dont
So mainly maven 
I tried changing 2 years ago but it was so hard to find documentation for Kotlin stuff
Probably better now
Yea
Syntax wise I prefer maven, but I mainly use Gradle for the performance
Is there a gradle plugin for special source yet 
But... java documentation works for kotlin stuff~
No but there’s paperweight
Think they meant the gradle documentation
Yeah
And like support by browsing forums
doesnt that make my api also paper tho
Yes
Cuz ppl used to use groovy cuz that was default
yeah i wanna avoid that for now
Oh! they made that a LOT better while I was learning Kotlin!
I have all my NMS stuff in side modules tho so I don’t have many issues
Main module uses spigot api
To make the conversation more heated, would you choose paper or spigot
Lmfao
?whereami
Every gradle page has a groovy and a kotlin example
I always build for Spigot
Yeaaa
Oh my
one of my newer projects im working on is doing that right now and ngl i love the work flow of it, wish ive done modules earlier
I think I just started a war
Back in the day the shadow plugin had like nothing for Kotlin
Paper has some cool events ngl
I think it does now
But spigot cool 😎
What is a good way to learn spigot/bukkit's api?
Curious what events you are referring to
Like any other api kiroto
Think most recent one was the recipe book click one