#help-development
1 messages · Page 1103 of 1
lmao
Then you need basic information, be a prompt demon and know how to release them
Whats The Best version to Make Plugins for
latest
depends what you main goal is
but there's no truly "best"
1.8
do NOT
ima just download all of them
Trust
or i should download them by invoice
1.20
how are you gonna download them?
build tools
(gradle >>>>)
why maven
maven >>>>>
gradle caches seriously suck
just dont break stuff and the caches are fine
I have to clear them every once in a while for things to not simply break
You guys are confusing me
something not 100% avoidable
the only time ive had to clear them is when a plugin set something as caching when it shouldnt cache
because it's better
agreed
it is technically the most documented
when you Google any bukkit question you'll get like a reply for 1.8 from 2014
is 1.20.6 good for plugin making for the fist time
it literally doesn't matter
yes
alr
ig most functionality and QoL
1.8 only account for around 5% of the player base
tbf when it comes to plugin making, you won't be getting super rich
Debatable
I've never once had specifically 1.14 show up as a question reply
tbh does it make that much of a difference? there's this discord and the docs
You can make a lot of money making plugins, but mostly they will be private commissions. And thats not going to happen unless you are Really good
exactly
I mean if I'm learning something I'd rather use the most documented/question answered version
what's the average age of someone commissioning a spigot plugin?
or any minecraft plugin?
11.5
there are pretty successful plugin devs
even by just posting premium plugins
but it's pretty rare
you're not wrong, but a LOT has changed from 1.8 to now
lol
yeah true
that's so random lmao
just give up on plugin development and create your own courses
why 50 out of 50,000 instead of 1/1000
cough cough
🤔
just be choco_dev fr
10^-3 looks a lot prettier
they should add latex to discord
latex? damn those r some fantasies
i remember doing this for the first time, was so sick ngl
💀
download more
can you get me a Free ram download file
DownloadMoreRAM.com - CloudRAM 2.0
how big of a difference is it between coding in 1.20 to 1.8 for example, im new and just wanna know
id say its a quite a large difference
will you sturggle with 1.8 if u learn 1.20?
depends what the plugin does
ok
a 1.8 plugin "could" run on 1.20
HOW DO I CLOSE THE SERVER
/stop
type stop in console
Sometimes because in 1.20 most things from 1.8 are gone
or need adjustments to run correctly
but like its the sort of thing where if ur decently expeirenced it wont be a problem coding in different versions right?
if you are targeting 1.8 learn the api for 1.8
just learn how to use google
and ask for help efficiently
and then you wouldn't care which version or api you're using 🤷🏻
my plugin generate a lot of lag but idk where its from exactly, its possible to locate it with a tool like spark?
yes
well Ihv start a /spark profiler start and /spark profiler stop in the pannel where can I go to see it?
if should give you a link
I obviously can't reproduce the bug when I need to,I'll send it as soon as I can 👍
ok
Hows This For Plugin Code
import org.bukkit.plugin.java.JavaPlugin;
public final class MyFirstPlugin extends JavaPlugin {
@Override
public void onEnable() {
// Plugin startup logic
System.out.println("Hello World");
}
@Override
public void onDisable() {
// Plugin shutdown logic
System.out.println("Goodbye World");
}
}
not sure what looks good, the intellij plugin code? I think you should encourage them to attempt to learn efficiently rather than what they're doing
best way to figure stuff out
?
what is "?" supposed to mean?
The kind way of "why are you an asshole to someone that literally started getting into java and making their first plugin like an hour ago"
not sure if im being an asshole
not sure what looks good, the intellij plugin code?
is rather uh
because the question is absurd
when you were first learning java or spigot
did you do this?
did your first ever running plugin look better?
Nope, not at all
however I didn't send default code and ask people to rate it
and in fact, I did just that, I rated it based on what it was, empty compliments won't make him better or feel better about themselves
okay 👍
you'll want to compile it to a .jar file
then put the jar file in the plugins folder
alr
given you are using maven, find the maven tab and the package task
output will be in the target folder
Got the target folder now what
right click the "target" tab
then open with file explorer
because you're not inside the target folder?
you didn't compile your plugin
looks like you did not run package
do as lynx said to do
ok i ran package in the terminal
in the terminal?
wait where do i run package
you can run it in a terminal, but it would be mvn package
ok
yeea probably not lol
how do i install maven
cool
yes, kodys tutorial is pretty good
im watching as many as i can today and tonight
bruh if i waited 10 secs he would have told me what to do
💀
why does every damn programming tutorial use a 1440p screen so everything is tiny
but then zoom in the text so you can only see half a method
and bring their build tab all the way up
not using logger, -200 social credit score
this ALWAYS happen, just watch the full tutorial until you feel like they won't circle back
it saves time tbh
what's your font size?
the default is 13p which is super small ngl
yeah I just use default
you're insane
1440p is fine
it looks so ugly
I have a 24 inch 1440p monitor and it looks tiny
Why cant i Build This ```package me.echo145642.newFirst;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.w3c.dom.ls.LSOutput;
import java.net.http.WebSocket;
public final class NewFirst extends JavaPlugin implements Listener {
@Override
public void onEnable() {
// Plugin startup logic
System.out.println("The plugin is On");
getServer().getPluginManager().registerEvents(this,this );
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
System.out.println("Welcome <Player>");
}
}```
you can
its Grayed out
those Appered When i added the implements Listener
no they didn't
?learnjava
For Beginners:
Codecademy - Learn Java: Interactive Java programming course from basics to more advanced concepts. Perfect for absolute beginners.
https://www.codecademy.com/learn/learn-java
JetBrains Academy - Java Developer Track: Learn by doing with projects and challenges. It covers Java fundamentals to advanced topics.
https://www.jetbrains.com/academy/
Udemy - Java Programming Masterclass for Software Developers: Updated courses that cover Java 8 to Java 17 features. Suitable for those who prefer structured learning.
https://www.udemy.com/course/java-the-complete-java-developer-course/
For Intermediate to Advanced Learners:
Oracle Java Tutorials: The official guides by Oracle for Java programming—great for understanding the depth of Java.
https://docs.oracle.com/javase/tutorial/
Baeldung - Learn Java and Spring: Focus on Spring Framework and modern Java technologies. Best for intermediate learners aiming to expand their knowledge.
https://www.baeldung.com/
Practice and Hands-on Learning:
Exercism - Java Track: Solve exercises and get feedback from mentors. Great for practicing coding skills.
https://exercism.io/tracks/java
LeetCode: Practice your coding skills and prepare for technical interviews with Java.
https://leetcode.com/
Free Resources and Documentation:
Java Programming and Documentation: A comprehensive collection of Java programming guides, tutorials, and API documentation.
https://docs.oracle.com/en/java/
Community and Support:
Stack Overflow: A vast community of developers. Great for getting help with specific problems or understanding concepts.
https://stackoverflow.com/questions/tagged/java
r/learnjava on Reddit: Join the community of Java learners and get advice, share resources, and discuss projects.
https://www.reddit.com/r/learnjava/
Remember: Learning to program takes practice and patience. Don't hesitate to experiment with code and participate in community discussions. Happy coding! 🎉
I feel like you really need to get some basics
The Video has it too
ok i will try to fix it
or just learn java
im trying
Not that bad
how can you even see
😭
default theme default font size is psychopathic
lgtm
idk i dont see the point of 1440
you don't see.
1080 is good enough for basically everything i do
I hate 1080 for dev work
until you get a 1440p monitor and all of a sudden it fits 10x more
1440p is perfect. 4k is too much
I'm using AlessioDP's fork of libby to download dependencies at runtime (I know that Spigot now has a feature which solves this problem but that wouldn't work in Bukkit and other servers unrelated to Spigot). Someone has any idea on how to use this library? I can't find much detailed information on how to use it and some examples confuse me
coding in 4k is insanity
i dont think this is working
the listener should be a new instance of your listener class
not the plugin instance itself
that code is fine, your main class is your listener
^^
oh yea, that could be
sorry (my brain aint braining)
did you run package again and copy the jar
how did you get the jar the last time
last time i was able to
pressing package on the right side of your screen is the same as running package
open maven window on teh right of yoru screen. The drill down to find package
should i switch to gradle?
Expand NewFirst
and then find pacakge
If you want to
yours might be. his is not
or likely not
how would i go about serializing a World through GSON? When i try to serialize it as it is i just get a bunch of reflection exceptions
i got worried when i saw that gray button too, but after a few hours of fiddling with it, i found out you gotta select the folder
Yeah tysm
@magic drift im a beginner too, lets learn together :)
are you following kody's tutorial?
Yeag
You'll need to make a bunch of type adapters
Im on the number 6 episode
thats unfortunate
so GSON knows what to serialize and what not to
does anyone know how to fix a "No matching tests found in any candidate test task."? I am trying to test some stuff with JUnit in intellij, but it does not want me running the test
thats unfortunate
why don't you just store it with a world name string
jk
and just get it back
this mf was trying to serialize a logger lol
do you think gson would be smart enough to use the construcor with only primitive types?
actually nvm that wouldnt work either
because it couldnt serialize
could you visualize it for me (pseudo code or something)
idk if i fully get your idea
bukkit.getSchedule.runTaskLater i think
wait sout?
What about wait(1000);
Please don’t tell me that’s a thread
use a thread.sleep()
Do not
i used that in a java program but not in spigot
dont know if it will work
Implement JsonSerializer/JsonDeserializer
public final class WorldAdapter
implements JsonSerializer<World>, JsonDeserializer<World> {
In the respective overriden deserialize/serialize methods, create a World or get the world name. For example, deserialize, you would use JsonElement#get and then use getAsString
but cant you use Bukkit.getScheduler.runTaskLater then Bukkit.getLogger("yooo")
Just do a bukkit task like mentioned before
all you are doing is freezing the whole server
Why
cuz
you can
yes exactly
🤦♂️ i overthinked it
its not async so you can access api
tysm
np
i forgot it handles objects in objects well
so fahi you said you wanted to learn together
Even if it was async, .runTaskAsync exists
yesh
can you vc
👍
another thing, im not that advanced in async programming but whats the reason thrown exceptions dont show up when thrown from async thread?
you have to handle them with whatever async api you are using for example completablefuture handles the exceptions and stuff
it suppresses them if not handled
well usually for async stuff you have some sort of Result which can store an exception
you would just handle it that way
i cant register the adapter once gson is initialized right?
Sadly not. I wrapped mine and rebuilt it every time it changes.
that sucks
because i need the gson instance itself in one adapter
i guess ill have to live with more gsons
cba to learn jackson
How about you just use the spigot api to set a texture on a head
he needs it on 1.8
idk if im doing this correctly but it still isnt working, ill send code in a moment
What do you need to serialize?
Are you trying to serialize a Location?
World
And what are the doubles for?
min max x,y,z
So... A BoundingBox?
the idea is to support different implementations like WorldGuard
eventually make it abstract
Whats the plugin for that you need a WorldGuard interface?
defining special areas where players enter a minigame state
their inv replaces & stuff
I see, ok
but yea the only thing that isnt primitive is bukkit World
why not write a wrapper
or well nvm
i guess that would be the type adapter thingy
The AreaAdapter looks a off. This should probably be a TypeAdapterFactory.
How do i make it so it auto downloads the jar to my plugins folder
i just followed some baeldung guide
Which jar?
My plugin jar
And which application should download the jar?
Intellij
Ah, thats what he means by "download"
and how do i go about implementing it
iirc just extracting out the registration portion mostly
it just straight up ignores my world adapter
wdym ignores
like it does the reflection method instead
Nvm, this requires a ton of setup. My system automatically serializes the fully qualified class path for interfaces and abstract classes.
But it evolves around a extensive setup.
Register it as a typeHierarchyAdapter
The runtime type is CraftWorld, but you have the adapter registered for org.bukkit.World.
If you register a typeHierarchyAdapter, then it checks the full type hierarchy for CraftWorld, and uses the first adapter
that was found for a type, which will be your WorldAdapter for World.
😄 works
you are a genius thank you
i still dont understand what you said but whatever
lul, glad it works
storing areas as json shouldnt be a bad idea right
theyre always in memory anyway
i dont see a database in this scenario
plus its not that dynamic
i load once and save once
or rarely at runtime
like using json at all
it would only be an issue if areas were modified at runtime frequently
because a lot of IO
Fahi Helped me with this code ```package me.echo145642.newFirst;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
public final class NewFirst extends JavaPlugin implements Listener {
@Override
public void onEnable() {
// Plugin startup logic
System.out.println("The plugin is On");
getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
Player player = event.getPlayer();
Bukkit.getScheduler().runTaskLater(this, () -> {
player.sendMessage("Welcome "+player.getName());
}, 20L);
}
}```
yeah what about it
what do you think about it
you dont need the sout, im fairly sure plugins send a similar message already
- you wanna use JavaPlugin #getLogger
if you run this on paper server they will kill you
why
system.out in plugins today is for debug
yea never in prod
Bukkit.getServer().getLogger().info("your message"); <--- is this correct?
no
then which one
in your plugin class its just getLogger()
you have to inject your plugin object as dependency in other classes
and then they can use this getter
private final YourPlugin plugin;
public YourOtherClass(YourPlugin plugin) {
this.plugin = plugin;
}
// Can use plugin.getLogger() in your methods
yes
i just make the plugin instance in my plugin class
and call it in my other classes if needed
i dont use the injection method
the call method is waaaay easier and faster imo
you mean a static getter
nvm for loggers its okay
you are right
or make different loggers for certain classes
its easier to find a root cause of an issue if you use these
you immedietaly know where an error came from for example
yeah
I have a bug(String message, Class<?> source) function too
which logs the message alongside where it came from (usually always this)
and adds a (please report!) at the end
i have a bug(String) function as well but i never call it because i don't want bugs in my code
based
unfortunately I am not that good
im still trying to find the bug()s and remove them
but each time I remove one, 2 more show up
might be a virus ngl
is javadocs a Good reacorce
yes
probably one of the first resources you should use if you get stuck
like actually
bump, does anyone have an idea? every site I visited repeats the same bs steps to install junit, but im still getting stuck at the error I decribed here
i feel like im missing a step but idk which
can u show full error and your test class
No matching tests found in any candidate test task.
Requested tests:
Test pattern SimpleTest in task :BingoReloaded:test
?paste
whats exactly simulation render distance? it mean that client accept chunk loading in this distance but dont show them?
well it says test pattern SimpleTest.firstTest obv
You should also be able to run the entire class as a test
try to delete .gradle and build folders, if that doesn't work i have no idea, it looks correct
🤔
okay ill try
if it doesn't help could you share your build.gradle
didnt help, this is my gradle https://paste.md-5.net/eviqibowex.rb
oh, i assumed that was default configuration
awesome that works
tbh it might have been in the default build file
but I prolly removed that
because "why would I ever need tests"
and now im making a system that would benefit from just testing it the proper way xD
anyways, thanks
depends what you are trying to do
When Ignited I need to Kill it
"need to kill it" as "its a game and kill it as quickly as possible" or remove it
event.getEntity().remove()
its a function ;-;
Because thats not even valid java syntax
same as you did for the listener before
you know instead of telling me what i did wrong you could you know help me
do the same as you did before for the onPlayerJoin event
dawg
Hi, I'm using PlayerTeleportEvent to check if player leaves THE END dimension. Problem is after numerous changes and searching, function #getCause() returns UNKNOWN. This only happens when leaving end dimension, and if I join end dimension it returns END_PORTAL.
Anyone got idea why?
Minecraft despawns the player when entering the end portal
to play the end credits
It's then respawned in the Overworld
check the from/to locations., the World type
This would also register every /tpa command
now i got ```package me.echo145642.tntMinecartNoMore;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
public final class TntMinecartNoMore extends JavaPlugin implements Listener {
@Override
public void onEnable() {
// Plugin startup logic
}
@EventHandler
public void onexplosionprimeevent(){
}
}
yes
Well, in my case that is problem
add the event as parameter
how
You only stated you were using teh teleport event to detect leaving the End
type it in there as a param
Not helping
We're not here to write it for you
Who’s gonna hit him with the learn Java?
just go look at teh code you already wrote for onPlayerJoin
True, but I asked about this UNKNOWN issue and how to handle it
They've already ignored it once I believe
package me.echo145642.tntMinecartNoMore;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
public final class TntMinecartNoMore extends JavaPlugin implements Listener {
@Override
public void onEnable() {
// Plugin startup logic
}
@EventHandler
public void onexplosionprimeevent(ExplosionPrimeEvent e){
}
}
You have already written a Listener
?spoon
Spoonfeed a newbie for a day and they'll come back with more questions. Teach them to find their own answers and you'll both be better off: you won't get stuck answering the easy questions and they'll be much more productive than before.
alr got that down now i just need to figure out how to destroy it
cancel the event
this?
yes
why is this not working
am I doing something wrong
textrue value is eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHBzOi8vdGV4dHVyZXMubW5jLnNraW4vY3VzdG9tU2tpbkxpbmsifX19
what
That's not how you do it
well what are you trying to do
also that's not a valid texture value
Spigot 1.18.1 added the new PlayerProfiles class, which finally allows us to use custom heads without needing any reflection! You can obtain them as normal items, or actually place them down into the world. I’ll show you how both works: Creating a new PlayerProfile First, we gotta create a new PlayerProfile object. To do so,...
so what do i do to make event.getEntity().remove(); To work
Here is what your Base64 String looks like decoded:
Input
eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHBzOi8vdGV4dHVyZXMubW5jLnNraW4vY3VzdG9tU2tpbkxpbmsifX19
Output
{"textures":{"SKIN":{"url":"https://textures.mnc.skin/customSkinLink"}}}
Appending all of that to your URL makes no sense
it does work but you just have to cancel the event too so the explosion gets cancelled
?learnjava
For Beginners:
Codecademy - Learn Java: Interactive Java programming course from basics to more advanced concepts. Perfect for absolute beginners.
https://www.codecademy.com/learn/learn-java
JetBrains Academy - Java Developer Track: Learn by doing with projects and challenges. It covers Java fundamentals to advanced topics.
https://www.jetbrains.com/academy/
Udemy - Java Programming Masterclass for Software Developers: Updated courses that cover Java 8 to Java 17 features. Suitable for those who prefer structured learning.
https://www.udemy.com/course/java-the-complete-java-developer-course/
For Intermediate to Advanced Learners:
Oracle Java Tutorials: The official guides by Oracle for Java programming—great for understanding the depth of Java.
https://docs.oracle.com/javase/tutorial/
Baeldung - Learn Java and Spring: Focus on Spring Framework and modern Java technologies. Best for intermediate learners aiming to expand their knowledge.
https://www.baeldung.com/
Practice and Hands-on Learning:
Exercism - Java Track: Solve exercises and get feedback from mentors. Great for practicing coding skills.
https://exercism.io/tracks/java
LeetCode: Practice your coding skills and prepare for technical interviews with Java.
https://leetcode.com/
Free Resources and Documentation:
Java Programming and Documentation: A comprehensive collection of Java programming guides, tutorials, and API documentation.
https://docs.oracle.com/en/java/
Community and Support:
Stack Overflow: A vast community of developers. Great for getting help with specific problems or understanding concepts.
https://stackoverflow.com/questions/tagged/java
r/learnjava on Reddit: Join the community of Java learners and get advice, share resources, and discuss projects.
https://www.reddit.com/r/learnjava/
Remember: Learning to program takes practice and patience. Don't hesitate to experiment with code and participate in community discussions. Happy coding! 🎉
A lot of people jump into spigot programming without knowing much java
the parameter in your code is "e" not "event"
use descriptive variables. So event rather than e
ok now it works
actually I have another Q about tests, can I include stuff like Material?
i cant connect to my Minecraft test server now
when I try I get error: package does not exist; import org.bukkit.Material;
okay that workded thanks
but why
i dont really understand the actual difference
i it bad for the plugin to keep implementation?
or do I switch back to compileOnly for the release
It doesent Kill The tnt Minecart fast enough so now the explosion still apperes
Just make sure the shade plugin doesn't accidentally bundle it
did you cancel the event
No i kinda forgot how to do that
compileOnly is only used during compile
not during runtime
Meaning it will be missing if you run your tests
If you want you can add the dependency twice
once as compileOnly and a second entry as testImplementation
use the setCancelled method on event
also if you're working with Paper I highly recommend the Paper userdev plugin
so this ``` @EventHandler
public void onexplosionprimeevent(ExplosionPrimeEvent event){
event.getEntity().remove();
event.setCancelled(true);
}
}```
You can use https://github.com/PaperMC/paperweight-test-plugin/blob/master/build.gradle.kts as reference
yes but personally i would put the event cancelling line above the remove one
imagine using paper
what does that do
all my homies use CameratitMC
what does userdev do
CaspariMC truely is the best fork
is it just nms stuff?
The Explosion still happens
Never heared about CasparovChessMC... is it any good?
It does help with nms and such and when you combine it with the run paper and resource factory you can run the server and generate your plugin.yml directly from gradle
if its just useful for that idc
uh idk @river oracle as the main author of CabrioletMC, what is your opinion?

Try the EntityExplodeEvent instead
You forgot to register your Listener
Damn Your right
how bout now ```package me.echo145642.tntMinecartNoMore;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.ExplosionPrimeEvent;
import org.bukkit.plugin.java.JavaPlugin;
public final class TntMinecartNoMore extends JavaPlugin implements Listener {
@Override
public void onEnable() {
// Plugin startup logic
getServer().getPluginManager().registerEvents(this, this);
}
}
@EventHandler
public void onexplosionprimeevent(ExplosionPrimeEvent event){
event.setCancelled(true);
event.getEntity().remove();
}
}
Formatting of doom. But it looks right.
In the video, the explosion wasnt primed.
So the EntityExplodeEvent might be more suitable.
its the best
I've made 100 million in ad revenue
The methods names capitalization makes me wanna die
what capitalization?
Breakpoints (in nms too !), Hotswapping and running the server with your plugin directly from Gradle/Intellij without having to move around any files
Is this about paperweight
yes
How about faucet
I no longer do mc server stuff but i wanted to say something: minestom is THE new meta

like damn so much customizability?
Am I missing something or when setting new spawn location of PlayerRespawnEvent or PlayerPortalEvent, functions #setTo and #setRespawnLocation, if player doesnt have bed, server sends message: You have no home be or charged respawn anchor, or it was obstructed.
I also saw this in #news on spigot page:
Mojang recently released Minecraft 1.21 and the first builds of Spigot for this version are now available. As expected given the short time since 1.20.6, this release mainly just moves the experimental 1.20.6 features into the main server. There are however some underlying changes which you should keep an eye out for, particularly to teleportation between worlds which may have some as of yet undiscovered bugs.
help
does anyone know how I can control when exactly (when it contains certain symbols) it should say that the command is invalid and when it's valid?
just check for in in tabcompleter
I'm not using a tab completer
pretty sure the brig string reader has it hardcoded what chars are valid
I'm using the brigadier api
damn
then can I at least have it not show it in red?
(in an unquoted string that is)
how fix "clazz.getConstructor().newInstance();" not can see lombok @NoArgsConstructor
could write your own StringArgument
not that it would work
That should work fine
quoting here doesn't look nice here
xD
really?
pretty sure the client would need to have a mod for that
I'm using SINGLE_WORD here
but pretty sure GREEDY_PHRASE would fix it
it just doesn't look as cool
also, can I reverse the colors?
like have the first argument be in yellow and the second in aqua?
no, basically all of that is client side
he didn't generate it...
(hmm, this PR author look familiar)
hmm interesting why
Show your pom.xml/build.gradle
he's some paper guy, isn't he?
Ye xD
I'd know if I weren't banned from paper's discord

how is the guy a paper and a brigadier dev?
oh wait, he isn't a brid dev
he just made a pr
aight
why? xD
@finite compass
We make him merge all the PRs to paper that will break something and then blame him
why is there an :owenangry: emoji
xd
nice
if you have to work with owen as long as I had to, you just need such an emoji to display your feelings
(jkjk, best owen
)
"It was @owen's newest chunk loading optimization that broke it"
We also have https://cdn.discordapp.com/attachments/547534089960292382/1198075239922421790/owen.gif?ex=66be0144&is=66bcafc4&hm=5f9a29a7cca63c9e5fa30d7932b8cdcdf8d33e4dce1885a6f036621022f2248d& but enough with these silly but true memes
Update the maven plugins and add the annotation processor
adding the delombok plugin is also recommended
See the lombok guide
it's like your ganging up on bullying the guy
indeed, but he likes it
wouldn't expect less from paper devs
"you either quit paper deving young or dev long enough to become a degenerate"
tbf, that applies to probably every large project xD
does java freak out when i have a static method that uses class that is not on the classpath?
even tho the method isnt used anywhere
no, classloads won't occur till needed
Depends if you use the fully qualified classpath in your method or import it
*If the package is also not on the classpath
i use imports
but the class is unused
(the class with imports)
I just have a soft-dep and a util method for it, but the method is only used when the dependency is loaded (the class that uses the util method isnt imported anywhere)
here I could've shown <password> <repeat password>, but when I try to make both of these a GREEDY_PHRASE the client crashes
probably because no child argument should follow
can I somehow keep that "<password> <repeat password>"?
oh I guess I can just merge the name
Import declarations are not stored in the classfile
silly me
The JVM has no way of tracing that info
not ideal
since I'd like it to be a separate arg
Some of them are optional
passwords in plain text, yum
not sure about dataSourceClassName
SCREAMING
port too
wondering why people use HikariConfig if all its methods are present on HikariDataSource
while(Owen.getState() == OwenState.SCREAMING) Thread.yield();
Owen.askTheGuy("Um, you good?");
yea, sorry was late
it does not matter what or how you import
if your method has an invokestatic using a class not in the classpath, that will only be an issue when that invokestatic is actually executed
@blazing ocean this is my hot kotlin take, bitshifting is worse
I think
((x.toLong()) shl 32) or ((z.toLong()) and 0xFFFFFFFFL)
is worse than
((long) x << 32 | (((long)z) & 0xFFFFFFFFL))
both are shit lmao
I find the latter much easier to read as far as logical operators go its more clear imho
both unreadable
get gud
no u
yo I agree
and
you writing an essay?
no
The latter is easier to read if you come from other languages like C as well
I mean, the author of both is obviously useless
facts
Lets just agree on that
thanks guys 😭
based
go me 32 bytes of memory saved 💃
once you understand shl and shr as << >> its not that hard
are you gonna replace List<Object> with List diamondLeft Object diamondRight
bro hating for no reason kekw
Next kotlin feature for sure
Fun fact, you could write an infix function and have fun like
((x.toLong()) do_a_left_shift 32) bitwise_or ((z.toLong()) bitwise_and 0xFFFFFFFFL)
🤡 

What would programming look like without having to learn any syntax?
And this is how I made English+ in 12 days: https://youtu.be/zwlKy4yHJfo
I am so confused right now
I want a variable called mashed potato and makes its value like three
Did you reload or restart?
nope
I mean
restart
config changes apply on reloads as well
Sure, but you are throwing it in a static variable, meaning you have no control over when it changes
Well depends on what type of reload
it finally happened, I'm finally starting to get tired
program 21 hours a day, not a problem, edit a video 15 hours a day for 3 days and I'm left feeling exhausted
so you do bleed
yeah I was wondering too
I don't know
I think it's the second guessing myself that has me tired
I'm not one to usually hesitate but I've just not done enough video work
you can make infixes called `<<`
so you could ```kt
((x.toLong()) << 32) | ((z.toLong()) & 0xFFFFFFFFL)
I think that if I knew what I was doing with this video I could easily be big chillin'
What are you creating videos for?
obviously to lap Mr Beast in subscriber count
mr beast more like mr loser
Hm?
in a more serious answer it's a part of my business strategy going into 2025
wait for the stock market to collapse then buy cheap
Buy DogeUpMoonCoin. All on one card. (trust)
I just need a good platform for showing the work I do, plus I'm very interested by the dev sphere of youtube and I want to try it myself though it is absolutely grueling work even by my standards
at least to do the things that matter to me
nah I'm diamond hands, I'm going to make so much money off of nvidia stock I'll be able to buy one of their enterprise-grade cards
I'm not acquainted with that drama
what did the guy do?
he made a video where he was crying saying that it's not fair someone as cool as myself is allowed to start making youtube videos and that he's afraid he'll lose his following once I start uploading
best to not discuss it unless you like getting sued
I fear no beast
ah in dream land 🙂
wdym?
like I have no idea
and I ain't watch 20x 1 hour exposing videos
how come this system was working up until the moment I wanted to record it for b-roll
yeah not discussing RL drama in here
bro
come on
mr beast broke my code
it's industrial sabotage
I swear I thought this was working
yo I have the same
just with fuckin config.yml
LIKE HOW
I doubt that
just don't support spigot 
spigot? never heard of it
we use craftbukkit over here
you mean you're not decompiling and modifying the server jar you got from the backdoor you installed into a random mojang computer?
wait how are you guys doing it then?
you mean you're not using singleplayer?
you're not opening to lan and getting everybody to your house?
opening lan? wait, you're using network equipment? I just forged my own
wait, you're using the internet?
what's that?
what's a computer
I'm just yelling 0s and 1s into a solo cup that has a wire drawn off to somwhere, not sure where
hey, I would like to ask if one of the advanced programmers could help me or tell me how to block the mod called "Player health indicators"
I want to create the effect like on a pvplegacy server, i.e. to constantly show that every player has half of his heart in the mod
while Forge and Fabric will give the server a mods list, Mod name can also be arbitrarily changed
but don't block, just falsify information
If its client side you can't
you could send the client wrong health information about an entity, but I'd imagine that could cause desync
maybe above is the right way to go about it
how is it possible that the pvplegacy server blocked it and the mod shows me that everyone has half a heart
its possible it doesn't cause desync
I'd just try throwing out a packet and seeing
What do you mean
throw out a packet and change the players health client side
i found this, i dont know if its what youre looking for but it uses packets to falsify player's healthg information
https://www.spigotmc.org/threads/how-to-change-visible-players-health-in-protocollib.165178/
Cannot invoke "org.bukkit.command.PluginCommand.setExecutor(org.bukkit.command.CommandExecutor)" because the return value of "me.czr.hh.Hh.getCommand(String)" is null
anyone know why this isnt working?
do you have the command set in your plugin.yml
fixed it, she's a beaut
shut your face
damn
what do you know about arrows
where is your arrow phd
huh?
HUH?!
I thought so
mbmb 😔
never talk to me or my arrows ever again
:(
other devs WISH they had tutorials with arrows like this
yet another example of magma guys insane levels of intelligence
least superlative magmaguy enjoyer on spigot
you know you can just do this in vanilla right
models have animations
how the fuck does intellij know
STOP SLANDERING MAGMAGUY
but can the server control the animation
you should apply a sign curve to the animation
it's a sine wave you plebian
NO YOU
no fuck you
but it's fully client side and you don't need any complex plugins
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
Player p = ((Player) sender).getPlayer();
Configuration config = plugin.getConfig();
List<String> mobs = new ArrayList();
mobs.add("Pig");
mobs.add("Sheep");
mobs.add("Endermite");
mobs.add("Rabbit");
mobs.add("Cow");
mobs.add("Slime");
mobs.add("MagmaCube");
mobs.add("Zombie");
for (String entry : config.getStringList("mobs")) {
p.getInventory().addItem(setHead(new ItemStack(Material.SKULL_ITEM, 64, (byte) 3), config.getString(entry + ".playername"), entry));
}
return true;
}
return true;
}``` anyone know why this is only giving me 4/8 heads
yeah that's the problem my dude
I want the server to decide what is happening not the client
no overcomplications 
you said sign curve
🤔 how the fuck is this targeting the place I'm looking at instead of me
how would that target you instead of player.getTargetBlock
is it supposed to start from a block you're looking at then target the player that was looking at the block?
The constructor is where you are looking and then you call target with where you are
Idk what the constructor does but yeah
spawns a laser at that position lmao
Yes
well stop eating your piza and lock in
well
what is that even
is that some display jank?
yes
trying to make a laser that goes from A to B
looks fine on this guy's plugin but when I reverse engineer the code it's no longer good
what a weird implementation
guess it works
not how I would've done it
there's a mildly better looking trick
I mean given block displays have half the problems that item displays have I guess I could give it another try
but at the same time I want to use item displays as leather horse armor is tintable
I just suck at quaternion math :/
have you tried joml
I mean I have and it didn't work but I still think I probably did something wrong while trying it out
this is bothering me post the full code
fixing it rn don't worry ab it
but then how will I procrastinate on fixing these models I fucked up making a year ago?
man I have a tiny tiny urge to crack paperweight's head open
run server, stop server, run server again
"file already exists error"
you know what I'll fix the code and not the model, this is bs
works on your machine? ticket closed
ngl that's the kind of shit they'd pull
I once had a weird paperweight issue so they pinged some random guy to help and he was just like "nah I ain't doing it" and I got ignored for like 4 hours
they just told me to nuke my 45gb .gradle folder
we can all learn from this gigachad
i did that today
hey, does someone have the repo and the dependency of the bungeecord 1.21 version?
anyone know?
// Directly accessing food level and saturation level
FoodMetaData foodData = nmsPlayer.getFoodData();
int foodLevel = foodData.getFoodLevel(); // Proper method to get food level
float saturationLevel = foodData.getSaturationLevel(); // Proper method to get saturation level
how can I do it correctly?
spigot 1.18.2
- pig
- sheep
- endermite
- rabbit
- cow
- slime
- magmacube
- zombie
PlayerLevels:
Levels:
0:
xp: 500
1:
xp: 1000
2:
xp: 2000
test: 100
pig:
sellprice: 1999999
tier: "basic"
displayname: "§d§nPig Head"
lore1: "§d§l* §7Required Level: §d1"
lore2: "§d§l* §7Head Price: §d$2"
playername: "MHF_Pig"
sheep:
sellprice: 1999999
tier: "basic"
displayname: "§d§nSheep Head"
lore1: "§d§l* §7Required Level: §d2"
lore2: "§d§l* §7Head Price: §d$4"
playername: "MHF_Sheep"
endermite:
sellprice: 1999999
tier: "basic"
displayname: "§d§nEndermite Head"
lore1: "§d§l* §7Required Level: §d3"
lore2: "§d§l* §7Head Price: §d$5"
playername: "MHF_Cow"
rabbit:
sellprice: 1999999
tier: "basic"
displayname: "§d§nRabbit Head"
lore1: "§d§l* §7Required Level: §d4"
lore2: "§d§l* §7Head Price: §d$7"
playername: "MHF_Rabbit"
cow:
sellprice: 1999999
tier: "basic"
displayname: "§d§nCow Head"
lore1: "§d§l* §7Required Level: §d5"
lore2: "§d§l* §7Head Price: §d$8"
playername: "MHF_Cow"
slime:
sellprice: 199
tier: "advanced"
displayname: "§d§nSlime Head"
lore1: "§d§l* §7Required Level: §d6"
lore2: "§d§l* §7Head Price: §d$9"
playername: "MHF_Slime"
magmacube:
sellprice: 199
tier: "advanced"
displayname: "§d§nMagma Cube Head"
lore1: "§d§l* §7Required Level: §d7"
lore2: "§d§l* §7Head Price: §d$10"
playername: "MHF_LavaSlime"
zombie:
sellprice: 199
tier: "advanced"
displayname: "§d§nZombie Head"
lore1: "§d§l* §7Required Level: §d8"
lore2: "§d§l* §7Head Price: §d$13"
playername: "MHF_Zombie"```
and what do you want to achieve with this code?
for (String entry : config.getStringList("mobs")) {
ItemStack head = setHead(new ItemStack(Material.SKULL_ITEM, 64, (byte) 3), config.getString(entry + ".playername"), entry);
HashMap<Integer, ItemStack> leftovers = p.getInventory().addItem(head);
if (leftovers.isEmpty()) {
p.sendMessage("Successfully added head for: " + entry);
} else {
p.sendMessage("Could not fully add head for: " + entry + ". Leftover items: " + leftovers.size());
}
}
check this
this
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
Player p = (Player) sender;
Configuration config = plugin.getConfig();
List<String> mobs = config.getStringList("mobs");
for (String entry : mobs) {
String playerName = config.getString(entry + ".playername");
if (playerName == null) {
p.sendMessage("Error: No player name found for " + entry);
continue;
}
ItemStack head = setHead(new ItemStack(Material.SKULL_ITEM, 64, (byte) 3), playerName, entry);
HashMap<Integer, ItemStack> leftovers = p.getInventory().addItem(head);
if (leftovers.isEmpty()) {
p.sendMessage("Added head for: " + entry);
} else {
p.sendMessage("Could not fully add head for: " + entry + ". Leftover items: " + leftovers.size());
}
}
return true;
}
return true;
}
look this
alr 1s
tell me if it works and if that's what you wanted
didnt work
it says added head for : pig,sheep,endermite,rabbit
not the other 54
4
it didnt say the else part
i dont think its looping properly
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
Player p = (Player) sender;
Configuration config = plugin.getConfig();
List<String> mobs = config.getStringList("mobs");
for (String entry : mobs) {
p.sendMessage("Processing entry: " + entry);
// Check if the configuration contains the necessary data
if (!config.contains(entry + ".playername")) {
p.sendMessage("Error: Missing playername for " + entry);
continue;
}
String playerName = config.getString(entry + ".playername");
p.sendMessage("Player name for " + entry + " is " + playerName);
// Ensure we have valid data before proceeding
if (playerName == null || playerName.isEmpty()) {
p.sendMessage("Error: Invalid playername for " + entry);
continue;
}
ItemStack head = setHead(new ItemStack(Material.SKULL_ITEM, 64, (byte) 3), playerName, entry);
// Check if the head was successfully created
if (head == null) {
p.sendMessage("Error: Failed to create head for " + entry);
continue;
}
HashMap<Integer, ItemStack> leftovers = p.getInventory().addItem(head);
// Log whether the item was successfully added
if (leftovers.isEmpty()) {
p.sendMessage("Successfully added head for: " + entry);
} else {
p.sendMessage("Could not fully add head for: " + entry + ". Leftover items: " + leftovers.size());
}
}
return true;
}
return true;
}
check this
and check the console
ok
can anyone help me with this
java.io.IOException: Server returned HTTP response code: 503 for URL: https://api.github.com/repos/EssentialsX/Essentials/compare/2.x...f1a5caf
hmmm
i think somewhere inthe code it bugs out
because
in config i changed endermite name to cow
but it hasnt done it
plugin.reloadConfig();
Alternatively you can restart the server to ensure the latest configuration is loaded
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
Player p = (Player) sender;
Configuration config = plugin.getConfig();
List<String> mobs = config.getStringList("mobs");
p.sendMessage("Mobs in config: " + String.join(", ", mobs));
for (String entry : mobs) {
String playerName = config.getString(entry + ".playername");
p.sendMessage("Config entry: " + entry + ", playername: " + playerName);
ill try this
is there anyone on the server who could help me with spigot NMS