#help-development
1 messages · Page 1325 of 1
I mean I think modern hologram api would just be some wrappers over Display to create and manage them easier
Im currently maintaining both, packet-based armorstands, and TextDisplays, and im thinking about dropping armorstands finally, since TextDisplays turned out to be very nice.
so the 1.8 update where Mojang patched the horse bug killed it XD
Yeah I am quite pleased with the display stuff
Ah, i forgot that traditionally horses where used XD
and ironically that was what was supposed to come out in 1.8
better late than never
but I don't think they expected the back lash like they did when they randomly announced the patching of the horse bug XD
so they tossed it on the armor stand
Yeah, the horse bug was setting the horses age to a negative value, which caused it to turn invisible and if I am not mistaken also upside down
I am very pleased with the way mojang is currently approaching a more data-driven implementation for everything. 😄
Now they just need to tell Microsoft to fk off with their horrible, garbage, bedrock protocoll, and finally unify the versions.
yeah well, as long as they still keep adding different drop rates for new mobs in their updates, that aint happening
Bedrock support effectively tripples my dev time. You want to write a GUI? Better make sure you also implement it in Forms for bedrock. And the same for NPCs, Models, the entire Resourcepack needs to be maintained twice.
they removed sun.misc.Unsafe in java 25
How the hell do I now allocate objects without invoking their constructor?
Oh no... my entire Codec implementation is based on Gson and relies on this working.
yeah wtf will gson do
Better start adding no-args constructors to your classes. Can already see the casual
@ApiStatus.Internal
public void SomeClass() {
this(null, null, null, 0, false);
}
I don't see where they removed it? I see where they added that anything that accesses generates a runtime warning
nooooo
You could, in theory generate thos constructors via bytecode injection if there are no no-args constructors found by your serializer
so, 26 or 27 will be where they may remove it
I used netty's PlatformDependent.hasUnsafe() to check
lemme just fully confirm that it's gone
sun-misc-unsafe-memory-access=allow
that's for the warnings
you have to use that in the command line to allow access
think so
omg now im inspired to make something similar to this lmao
inspired by like computer craft, e.g you have a machine that you can add a hoe to and it will show it with like an item frame and it will rotate the frame to make it look like its working
oh instead of helping you are just going to compete, seems reasonable I suppose
I mean are they gonna do something more with it?
i need to prove myself that i could've coded it too to feed my ego
seems like smile said he was done with it himself
or are you planning on trying this out kento
oh god no im good
im currently in a humbled state
ill stick to my little gamephases
that means you are already above average probably
Was kind of my point in respects to your comment of making this yourself or similar when you could just I guess update this?
I guess, I havent looked at the code to see if it needs extensive rewrites
or idk if its still working
sounds like it isn't
well I suppose it is, so as long as you stay at a certain mc version
hmm it does have quite a lot of features it would make sense to just update it I suppose
maybe not much needs to be done
my wonderful gamephase listeners
btw ive been thinking about this for a while: why do we force log(1) even when its slower than the log(n) solution. like why would i use a hashmap for a registry of 10 kits when the whole hashing part takes longer than looping through every element and checking for a field?
like instead of map.get("some identifier") just list.find(element -> element.getIdentifier().equals("some identifier"))
because few people actually think about the speed instead of the complexity
and because its the more standard approach
it just "makes more sense" to use a hashmap
otherwise its just a microoptimization
i mean replacing new HashMap() with new SecretlyAListButDontTellAnyoneMap() isnt too much effort
this is something that like a compiler should be able to do lol
ig thatd explain it
I would not want to know how the map works internally to know if I should use it based on if I have 10 vs 10000 elements
well unless its very obvious that the map is good at some things
this is like an implementation detail
the hashing is super quick, you probably couldn't even really measure it on a small list like that. Equally looping would be quick too.
pretty sure that hashing would still be a lot slower
the only time you worry about speed of something is because you have an issue
it would be slower, but it doesnt matter
so its just that everyone is smart enough to not do premature optimization then?
its still like immeasurable
no
I think its more that you dont have to care about this sort of stuff
there are plenty that do this or fall for such things
I will use a hashmap even if I just have 5 elements if that makes the code more readable
in the past like decades ago you used to have to worry about this stuff but that is because we didn't have like quad cores with speeds of 3+ghz and were still barely at 1ghz speeds XD
i mean you can implement a Map that secretly uses a list
too late if you use java anyways 😛
sure but when would you switch
probably never but when the dataset is not growing by itself then it should never be large enough to be slower
While hashing may be slower and am not even really sure how many orders of magnitude it is in comparison to looping and not even sure at how many elements you would need for the hashing to beat the looping either. But I prefer to use hashmaps mainly because it wouldn't be hard to change the code to be compatible with threads easily
For this case, the effective speed depends on the hashCode and euqals implementations of the objects. Those vary a lot and are details you should never concern yourself with. Java internally does a lot of optimizing for collections of smaller sizes like you described. Its generally not worth it to go for a few extra hundred nano seconds for this.
fair enough
now, there is one thing that I might consider in this scenario but its still really niche
there is a minimum size that a hashmap can be where as a list would be smaller
memory-wise you mean?
would probably again not be noticeable
this would only really matter if you program for a gameboy or whatever
it only is in really niche scenarios
recursion for example would be a place where it would matter
If i can trade memory for time, i almost always jump on it. Even if i waste like 100mb of ram.
In minecraft environments, not exceeding the 50ms tick time is much more important than whatever ram you occupy.
For which you would use c where youre probably too lazy to use a hashmap anyways lol
And instead use a linked list simply because its the easiest to implememt (especially when libraries only increase binarx size)
yeah ofc, java is the wrong language for that kind of optimization
But that’s like $100 worth of RAM!!!!
Customer pays dw
but yes I also prefer more ram over more time
unless the OS is java 😉
that reminds me, I really need to get my hands on Java OS
I would rather store it all in hashmaps than recompute it each time sorta thing
Thats a thing?????
it used to be yes
Weird
people write OS in any language
Oraclelinux is enoguh for me
in the past it really was the only way to have peak java applications
I mean you could use netbsds rump kernel to run a jvm :)
then once we got processors that were fast enough and ram limits significantly increased. Needing something like Java OS went out the window
Rumprum works like that
lol 🥲
anyways, the reason I want to get my hands on Java OS is so that I can update it. I would really like an OS specifically for java
your performance doesnt matter, engineers will just make better cards and cpu's
even if I don't really have a use for it like at all lmao
I guess I could run an MC server on it
That will cost 5k each, because they reduced their production by 40%
Definitely worth the effort yeah lol
Minecraft OS
Theres an os made fully in lisp too
the people that run the world have enough money to buy that
Sounds fun too but im honestlx intressted in any obscure operating system
I got lucky and bought ram before the price went up by a lot
Its cool but hmm
640x480 as god intended
Im atheist i cant do that
shame the author died though 🙁
Ill pray to the plan9 bunny
Cia got him
more like a train did
Yeah, but was over a decade ago by now.
He got run over by a train?
He was mentally unwell and couldnt get enough help. Lets keep it at that.
Paranoid schizophrenia iirc
he was hit, not run over. Was walking alongside the rail tracks
Oh damn
Oh really, i thought it went differently. Never looked too deep into it.
But the stuff he produced... and said. Where wild
I mean he cant really be blamed for it
Oh definitely and he even acknowledged the same too
I find it ironic though while trying to invent 3d printing he almost set fire to his apartment with a dremel
of all things, a dremel to stop you
the same
Fuck
this, but like much smaller
The thing u use to make holes in wood?
yeah it can be used for that too
Its just a small Trennschleifer honestly. You maybe know it as "Flex" or Geradschleifer?
Yea flex 😎
Haha, yeah flex is what we call it too
but yeah, temple OS has to have been one of the wildest things he made going all the way from the early 2000's
and it uses HolyC
which of course he made
Especially crazy considering he didnt have google or anything
Like he bought a book and wrote a 3d game engine after that????
TempleOS also did not have internet and according to what he said its because he didn't want to reinvent the wheel
Coming back to performance. I had a time where i obsessed about all the different collections in Java, doing hundreds of jmh benchmarks, and i found the worst collection, that is only good at exactly one thing. And thats LinkedList. Try to guess how you can reasonably use it.
compare?
Hm? You mean compare two collections? LinkedList has a very slow intrinsic iteration speed, compared to lets say ArrayList.
hmm, linked lists are good if you want to stress test your setup
I mean surely removing and adding right? If that counts as a use case
ArrayDeque is faster as a pure queue (If you dont take growing operations into consideration)
Addding in the center is just 2 variable assignments isnt it
adding in the center of a list?
but you have to find the center in a linked list
to add into the center or middle of a list is not just 2 variable assignments
Yeah, that it. Inserting/removing an element in the middle of the List.
Or more specific: Operations that do this in bulk, like removeIf(Predicate<T>) are very efficient.
Oh wow
really weird thing for linkedlist to be good at
I can't really say I have really had the need to do such things 🤔
Does removeIf work like a filter or does it operate on a single node?
for a linked list this would be done in place probably since you just reassign the pointers
I started using it a lot in tasks and schedulers.
Whenever i have to tick a collection, and remove elements when they are done.
never thought of using a linkedlist ever
but yeah this makes sense
for this kinda thing I would usually default to a set or something
I remember seeing a youtube video once "why you should always use a linkedlist over an arraylist in java" and then some comment pointed out an issue and the creator was like "oh nvm, true dont use linked lists then"
or simple list
Hm, would honestly not be too bad i guess. I remember there being a reason why i didnt like the iterators of Sets.
I didnt really understand anything and its been years though so maybe im just delusional
maybe its because of the unreliable order?
I mean... random access on LinkedList is just O(n)
So thats one reason its atrocious
its fortunate most will probably never really see the differences unless they were managing significantly large arrays XD
yes, which is also true for a removeIf, which is always o(n) worst case by definition (unless tree bla bla) but the reason its good for linked list is because of the allocation I guess
that you dont need to move the whole list
maybe you didnt like it for a set because of having to copy it when iterating to remove stuff?
Does arraylist move every elements after i to fill the hole or what?
iirc you can get concurrent exceptions with that
if you insert something into an array list, it has to move over all other elements with a higher index
this is why picking or adding from the front of an array list is the slowest
atleast thats for a classical array
idk how they implement array list
That makes sense
And in the case of removal of an element anywhere in the middle, it needs to fill the hole my moving everything following it
yes
I wonder if thats something that happens periodically or at every remove call
should be every call
Ill know in a few minutes ;D
But on the contrary side of things, array list can take advantage of spatial locality
but if you know you are gonna remove multiple things there are better ways to do it
which linked list cant
Even for removeAt(int index)?
What is it?
for linked list its worst case n
actually idk if its faster
but basically it would be to create a new list and only add the things you wanna keep to that list
but then you have to reallocate if you add things to an array, so idk how it would work
idk how allocation works for an arraylist
usually it grows the underlying array if it hits the size limit
so like a c++ vector?
Would be faster in few cases ig
when it reaches limit it reallocates to like double its size ig
I mean you can obviously be generalistic and just examine time complexity, but that only tells u part of the story
it tells u how it scales, usually per unit (unless u also examine bit cost)
Doesnt it allocate a bunch of memory as a buffer, and only copy the entire array when it grows out of the buffer? Pretty sure thats standard behavior for all java collections.
one of the main problems with ArrayList is that the memory for it must be contiguous hence why when the capacity limit for an array list is hit, it suffers greatly when it increases because it may also need to move the memory allocation to continue to be contiguous
yea what I said
So in most cases its not horrible
if the underlying array hits the size limit
Its not
but even then, system.copyarray is pretty fast
yeah big chance it just has to move the whole thing
linked list relies on a bunch of java references
which slows it down, ofc at a huge scale this becomes negligible as time complexity (per unit) becomes more substantial
@chrome beaconOh no, I tried using the new version, but it seems to be being treated as a Text component instead of a player component. It seems the previous version did the same. My code is {"object": {}, "player": "in_Shiro"} . I'm not sure if that's correct; I haven't seen any examples.
Can they not implement data structures in assembly or smth?
LinkedList has the most memory allocation if we are just going by defaults, however it is the most dynamic in terms of how that memory is allocated. Followed by HashMap and HashSet as those only use up memory with the more objects it holds and its load factor
that'd require u to implement it for every different assembly instruction set
more so, u would have to go to significant lengths to allow someone to subclass a LinkedList if that LinkedList is written in assembly
That does not look correct
riskV go brrr
Oh true
Instead of guessing the component format checkout the Minecraft Wiki
For small things, using array-backed structures in java is generally the way to go, but ofc its always smart to analyze at hand what u're dealing with and whats ur upper and lower bounds etc
Yeah, imagine you imlement an interface and suddenly see the native keyword for the first time in your life.
Yes, that's what I'm looking up, but I don't really understand his JSON format, and he doesn't have any examples, so I'm really confused.
😭
I bet a majority of java devs never see that in their life, or know that it exists
a good way to get around this, if you know your array is going to increase beyond the capacity it has. You would just create a new array and dump everything into that new one instead. This avoids the JVM finding a new spot, allocation and then moving the array elements into it, and then removing the old allocation
if you must use arraylist of course and nothing else lmao
Implement List and allocate a 5k array beforehand, just to be safe ^^
I suppose you could do that too lol
yeah thats basically what I was saying with the filter thing, the bard part is knowing how much you need
if you are filtering you would need a list atleast the size of the current one I guess that can be a starting point
did you read this regarding Player Object Type? https://minecraft.wiki/w/Text_component_format#Player_Object_Type
I've read it, but I don't know much about JSON, nor do I understand Minecraft's syntax, so I'm still quite confused.
that tree is basically describing the format the json needs to use
an example that would follow the format is something like { object: player, player: { name: "myName"}}
yeah with the object and or player tag it will assume the type is object
Benchmark (elementCount) Mode Cnt Score Error Units
CollectionIterationBenchmark.hashSetRemoveIf 100 avgt 6 1,127 ± 0,117 us/op
CollectionIterationBenchmark.hashSetRemoveIf 1000 avgt 6 11,884 ± 0,413 us/op
CollectionIterationBenchmark.hashSetRemoveIf 10000 avgt 6 221,779 ± 15,683 us/op
CollectionIterationBenchmark.hashSetRemoveIf 100000 avgt 6 4560,698 ± 635,483 us/op
CollectionIterationBenchmark.linkedListRemoveIf 100 avgt 6 0,287 ± 0,042 us/op
CollectionIterationBenchmark.linkedListRemoveIf 1000 avgt 6 5,921 ± 0,119 us/op
CollectionIterationBenchmark.linkedListRemoveIf 10000 avgt 6 79,055 ± 5,218 us/op
CollectionIterationBenchmark.linkedListRemoveIf 100000 avgt 6 1866,403 ± 174,731 us/op
LinkedList.removeIf() and HashSet.removeIf() both scale with O(n) as expected.
But LinkedList has an intrinsic average 2.3x-2.4x iteration speed compared to HashSet.
Graph is in log scale ofc.
hah, nice
Here is the code, if you see anything wrong lmk
@State(Scope.Thread)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@Fork(value = 2, warmups = 0)
@Measurement(iterations = 3, time = 1000, timeUnit = TimeUnit.MILLISECONDS)
@Warmup(iterations = 2)
public class CollectionIterationBenchmark {
public static void main(String[] args) throws Exception {
org.openjdk.jmh.Main.main(args);
}
private HashSet<String> hashSet;
private LinkedList<String> linkedList;
@Param({"100", "1000", "10000", "100000"})
private int elementCount;
private String centerElement;
@Setup
public void setup() {
hashSet = new HashSet<>();
linkedList = new LinkedList<>();
for (int i = 0; i < elementCount; i++) {
String element = UUID.randomUUID().toString();
if (i == elementCount / 2) {
this.centerElement = element;
}
hashSet.add(element);
linkedList.add(element);
}
}
@Benchmark
public void hashSetRemoveIf(Blackhole blackhole) {
this.hashSet.removeIf(x -> x.equals(this.centerElement));
}
@Benchmark
public void linkedListRemoveIf(Blackhole blackhole) {
this.linkedList.removeIf(x -> x.equals(this.centerElement));
}
}
linkedlist ftw
I tried {"player": "id"}, and it worked fine using the tellraw command, but it didn't work properly with bungeecord-serializer.
code looks normal
did you use the standard initial capacity and loadfactor?
The JSON you provided works fine when I put it in the command line, but it just won't pass serialization.
Yeah, shouldnt change anything right? Since im only benchmarking the removeIf, the collections shouldnt grow.
yea just curious
I could try with using the element count as initial cpacity as well ^^
oh well, new HashSet<>() i might be blind
well I assume you converted it to proper json? my suggestion is not syntactically correct json at all
It should be possible, because it can be parsed by the original instructions.
https://discord.com/channels/690411863766466590/1457714966453817450 anyone wanna hate on this pretty design?
what original instructions are you referring to?
the minecraft command parser is very lenient on the json esque syntax
tellraw
yeah tellraw is more lenient compared to probably the way that the bungee is expecting
My code uses Player#spigot().sendMessage to send messages, and I am outputting the serialized content, but it doesn't seem to be redirected to the player component; instead, it's being parsed into the text component.
No, it actually outputs an empty text, which is equivalent to directly using Player#sendMessage("").
like I said, try formatting the json correctly, maybe it will make a difference
I need some time to understand that, because this is my first time dealing with Minecraft's JSON. I've always used code before and haven't worked with components.
Works just fine
@EventHandler
public void onJoin(PlayerJoinEvent event) {
event.getPlayer().spigot().sendMessage(ComponentSerializer.parse("{\"player\":{\"name\": \"" + event.getPlayer().getName() + "\"}}"));
event.getPlayer().spigot().sendMessage(ComponentSerializer.parse("{\"player\":\"" + event.getPlayer().getName() + "\"}"));
}
That would be very strange.
You mentioned converting it to a string array before
Which I've told you will remove all component data
and make it blank. I want you to tripple check that you are not doing that
No, no, no, it wasn't a conversion. That was just an example because I'm using Kotlin, not Java. There was an operation the other person didn't understand, so I gave an example to explain.
I see
Actually, it's a parameter requirement of BaseComponent..., but Kotlin doesn't allow directly passing a collection object, i.e., BaseComponent[].
In Java, this might work normally, but Kotlin doesn't allow it; you have to add character handling.
That just sounds odd
Yes, it does sound strange, but that's his writing style, so we followed it.
isnt there a .sendMessage that takes a single BaseComponent
Your actions have confirmed that it might not be a formatting issue, but rather a problem with how the library is transferred. I'll try to handle it myself within the project.
That does exist as well but the serializer returns an array
It exists, but compatibility doesn't allow for this usage, so serialization is necessary because customization is required and it can't just handle this one thing.
Huh? I've noticed something, maybe it's related to him. The sub-version I'm using seems too old. The official website has version 130, but I'm still using version 115.
version of what?
uhh that better not be Paper
i got it locked and loaded
Send the output from /version
oh you wrote Paper while I was typing :p
?whereami
So, did the paper also modify the serialization process?
You've been asking for help with something that isn't Spigot 😭
They might be on an old bungeechat version who knows 🤷♂️
You should test with Spigot when asking for help with Spigot
I'll try Spigot to see if it works.
if you use paper they expect you to just use adventure components, which is a different api
No, I won't use Adventure. This library is too unfriendly to older versions. It doesn't consider the issue of plugins using older versions; it only considers newer versions. But many plugins only have older versions left, and no one will maintain them anymore. My personal opinion is that it's a terrible library.
You're right, it's a problem with the paper. It's because he didn't cite the new version of bungeecord-serializer. I'll report it to them right away.
well sadly, thats paper for you in a nutshell, if you want to write for backwards compatibility, dont write for paper
The problem is clear: the paper is no longer following bungeecoord-chat, but instead using his adventure, which makes things difficult.
I know what you're saying. My plugin is also based on Spigot, and even the net.minecraft.server operations are based on Spigot. I didn't specifically support Paper.
yes I think this is just one of the first things to fall apart because of the hard fork that paper made
if you want your plugin to still work the same on paper you'll need to add some kinda check somewhere for it, but idk how to approach that
You'd multimodule wrapper it like you'd do for nms
I don't actually object to him writing a new library to handle various text content, but his code modifications are far too frequent, and they cause references to older versions to become invalid. This kind of behavior is simply unacceptable.
if by "him" you mean paper, the answer is simple. Dont support paper
Knowing why something is wrong is the key to finding a solution; otherwise, you're just wandering aimlessly. I now feel that Mojang's modifications are even less destructive than paper modifications. Paper modifications simply erase everything without considering the impact on older versions. Mojang just has more version numbers.
Instead of specifically supporting it, we support Spigot for extensions.
paper is looking towards the future, not into the past
papers motto is simply to say, if your plugin does not work anymore on newer versions, make an update for the plugin
but this issue specifically has nothing to do with backwards compatibility on its own but more about the relationship between spigot and paper
lol
in which paper has expressly chosen to move away from spigot
please correct me if im wrong
paper stinks
plugins that don't use internals should work just fine on newer versions for the most part, it's not like paper doesn't provide any api compatibility guarantees
(paper team)
the issue is intermingling new spigot api and new paper api
yeah, which is the cause of this issue they are having
old plugins will still run on modern versions of paper so idk what the tantrum they're having is all about
"i want new api but on old versions" is never going to work even on spigot
enum constants would like to have a word (spigot-brought issue)
there were a couple of times where mojang renamed some stuff or required some extra info for some things, and the api has no choice regarding that
you got minecraft 26
thats like 24 version better than minecraft 2
i want 1.23 :(
you won't get minecraft 1.23 or 22
yes
depends on the use case; i do one for some things and the other for others
if i had to draw a line, i'd say that if you foresee there probably won't be another use case for the listener sometime soon, you might as well unregister it
going with the delegation approach can devolve into writing your own event bus on top of bukkit's, which is not necessarily desirable
Im making a plugin that needs to detect if the player has made an advancement, and if anyone else in the world has made that same advancement, and i have failed to realize that new recipes count as advancements in the game, im on 1.21.11, does anyone have any ideas for how i can seperate the advancements that arent announced in chat vs the ones that are hidden? because I only want the advancements that are announced in the chat when achieved (my current method was using PlayerAdvancementDoneEvent)
oh so i can just filter with an if statement before doing everything else in the event?
yes
wait how would i use that to filter hidden advancements? its just a modifier for advancements
the shouldShowToast too
if you only want those shown in chat check shouldAnnounceChat()
Lots in there is check everything you need
no the issue is the event is triggering whenever new recipes are unlocked/when advancements that arent announced in chat are achieved, and i dont want it to trigger for those ones, only for advancements that are announced in chat
but i think what im gonna do is just check if the display name contains "recipe" or "root" and that should fix it i think
so im using this to print what advancement is triggering the event as a string
then using that if statement to check if it has those words in it, im watching my chat print "minecraft:recipes/....", im confused why its not filtering it out
I'm looking for Java developers for a well-paid project, please DM me
?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/
solved, i had to use and instead of or, cause it was never both recipes and root so it was always true
hi question is there any plugin for velocity where you can display how many players are in that server online?
as placeholders
This is the development channel for Spigot and Bungeecord
You're in the wrong channel and discord
You could ask in #help-server but ideally you should head over to the Papermc discord
FR
they're probably banned on paper
LOL
i want to show some text above player's name - for this i tried using text display ridden by player, but then teleportation plugins stop working as player can't be teleported
anyone know who to do this correctly
either switch to paper, as they recently made the RETAIN_PASSENGERS TeleportFlag present on teleport calls by default; or use protocol fucknuggetry to desync the client and server state to the client sees the entity as mounted but the server does not, allowing it to be teleported normally
the latter is easy to get wrong and fragile even when it does work
specifically, what you probably want to do is create the text entity normally, set its properties, and then delete it, but suppress the entity remove packet so it remains visible and mounted on the client end
le me try this
i just constantly teleport the entity above the player every tick lol
(im using text display entities as chat bubbles)
but it looks ugly
You could listen on lowest priority for teleports and dismount the entity or player and then remount after teleport
you still need to reobf for runtime
you can use Mojang mappings for development
all that is going to disappear when 26.1 releases anyway
it's all going to be Mojang mapped
Hiiii, I need help with a texture problem! i cant fix it
ok!
is possible remove the black background of each line of an armorstand¡?
can i make solid plugins with javascript?
im too lazy to learn java as i am already learning javascript for a backend path
in the past you used to be able to do this, but the issue you will have is that javascript doesn't run in java no more without graalvm or some other java version that has javascript engine built in
but can i use it to make really stable plugins or is it just like training wheels?
also, even if that is not an issue, you are going to run into context switching issues as well as you will need to provide the spigot API and anything else that will be needed into javascript yourself as well
essentially before you can even make your javascript plugin, you will need to create a javascript bridge between Java and Javascript
what about paper, does it have js support?
ik js is mainly used for webpages and stuff but im asking because i would want to make a portfolio project in minecraft
No, Oracle removed Javascript in the JDK when it removed Nashorn in JDK 14. Hence you will need to use GraalVM JDK or something similar which means stuff like spigot or paper or most any other fork will not have API methods for javascript
And yes you can make a javascript plugin, not saying you can't
as for stability, Javascript is not known for that
dang.. looks like im going back to that pizza ordering site as a portfolio project
Scripting languages are not exactly designed with the intent of having long running processes and at some point needs to terminate otherwise they never release resources ever lol
But if you want to do it, go for it. Its doable 🙂
Someone ported MC to PHP so if they can do that, you can run a plugin with javascript just will require work is all
lol i get it, im already studying python and its h#ll when coming to BST's
if i ever finish this backend path i might learn java but im gonna need to find a place where it explains in a way i understand lol
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! 🎉
if you can learn python, then Java is going to be easier
is there any way to see the default chunkgenerator for superflat worlds anywhere?
?stash
I guess you could just look in the buildtools directory too
and look at the decompiled code
its going to be in the NMS stuff
hmm yeah, 1.21.11 makes it a whole lot easier tho :D
still needs to be decompiled, just don't need to deobfuscate
yup, thanks!
every language is easy, depending on what youre learning, do i need to learn OOP, functional programming, which one?
Java can do both, but ideally you would want OOP with Java lol
k boss
what I mean though is that the time it takes to really learn java and understand it, is just as little as 3 months and you can be making complex stuff. Where as other languages this is not really the case
ofc it can its freaking java
most people think java is outdated, but its still being used everywhere. learning java and really understanding the concepts of oop can land you a good paying job at a lot of companies
Well, it only becomes outdated when people stop using it
i dont think thats gonna happen any time soon tho lmao
why does http make me barf?
most consider something outdated simply because its old
but ignore the fact that it still works
and in my opinion if it works and does what you are wanting it to, then what does it matter if its old lmao
?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! 🎉
have no idea. Never used any of the links except the Java docs one from oracle
been using Java ever since it was released 🙂
unc status
can't you just bundle a js engine
? explain
this guy wanted to run JS on a minecraft plugin
yeah thats possible, im doing that for one of my plugins. GraalVM is a way to do it but thats a bit confusing in the beginning.
Back in the day we used Mozilla's Rhino
I think for custom scripts in a dungeon or something
plop a couple signs around and it loads them as scripts and runs it to spawn mobs / generate loot
im using Nashorn, which is a bit older but still runs fine on java 21 even tho it was removed in java 15
Also graal js
GRAAAL
Hi people, if anyone needs, I can write any plugin to order. Привет люди кому нужно на заказ напишу любой плагин.
?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/
i want a cooking plugin
one which focuses on exotic animals
with maybe a bit of wardrobe on the side
i want them baby seal leather boots
I mean a cooking plugin does sound neat
But Minecraft has a very simple food system so there’s not really any use for fancy foods
plus it's been done already
this one looks quite cool
you like physically dice the things on a cutting board and shit
supposedly it also adds some kind of a "diet" system so that the food isn't useless, but in my experience that ends up just annoying players
Hey 🙂
That’s a fun concept — combining a cooking/crafting system with exotic animals and wearable items like special boots.
A few details will matter (how you want the mechanics to work and what exactly the wardrobe does), but it’s definitely something we can build.
Okay ChatGPT
Can someone help me extract the banEntry for a banner player in PlayerLoginEvent, this API makes no sense and theres no tutorials or posts online I can find. The function for BanList.Type.NAME is apparently depracated and when using BanList.Type.PROFILE it says the type of the parameter passed should be "capture of ? target"????
you need to pass the type of ban entry you wish to retrieve
for Type.IP, that'd be InetAddress; for NAME, that'd be String, for PROFILE, that'd be PlayerProfile
the capture of ? is because the api doesn't use generics properly
to clarify it, you can cast the BanList to BanList<PlayerProfile> before calling anything on it
BanEntry<PlayerProfile> profileBan = Bukkit.getBanList(BanList.Type.PROFILE).getBanEntry(playerLoginEvent.getPlayer().getPlayerProfile());```
Cannot resolve method 'getBanEntry(PlayerProfile)'
Oh
you have to cast the entire list?
public interface BanList<T> {
it's a generic class with concrete subclasses for each type of list
e.g.
public interface ProfileBanList extends BanList<PlayerProfile> {
uh
paper does the generics better in this case, since the type keys like PROFILE are also generic and typed, so you won't get random ? captures
BanList<PlayerProfile> profileBanList = Bukkit.getBanList(BanList.Type.PROFILE);
String reason = profileBanList.getBanEntry(playerLoginEvent.getPlayer().getPlayerProfile());```
im sorry if i seem stupid i just dont understand this 😭
you're missing the cast
what am I doing wrong here
But I did BanList<PlayerProfile>?
that's not a cast
that's a variable that you're assigning to
a cast involves a ()
e.g. (BanList<PlayerProfile>)
oh
((BanList<PlayerProfile>)Bukkit.getBanList(BanList.Type.PROFILE)).getBanEntry(player.getPlayerProfile());
okay
like this?
BanList<PlayerProfile> profileBanList = (BanList<PlayerProfile>)Bukkit.getBanList(BanList.Type.PROFILE);
yes, that seems about right
and i assume its normal to get this warning now? Unchecked cast: 'org.bukkit.BanList<capture<?>>' to 'org.bukkit.BanList<org.bukkit.profile.PlayerProfile>'
the reason you need the cast there is that getBanList returns a BanList<?>
yes, this is an unchecked cast because of type erasure
you can try casting to this interface instead
since that will be casting to a non-generic type, it will be checked and "safe" at runtime despite erasure
okay
Going full on Eskimo
back in my day we used the built in Nashorn engine 🤞🏻😞
Back in my day we used punch cards
?paste
Looking to paste something? Try a code block or one of the following websites:
- https://pastes.dev/
- https://sourceb.in/
- https://mclo.gs/ (best for server logs)
Can you create custom enchantements with a plugin?
Like, being able to enchant an item with a custom enchantment via the book
strictly speaking no, but people have approximated custom enchants for years by adding gray lore to items and tying behavior to that; it looks like a custom enchant, and with enough logic for e.g. listening enchanting/grindstone/anvil events, you can make it behave like one
this very quickly runs into compatibility issues with other plugins, as they won't see your enchants as enchants
nowadays, i'd recommend either using the paper registry api to register real custom enchantments (even if you handle the behavior/effects in plugin code), or bundling a datapack with your spigot plugin that has the enchantment definitions
there have also historically been hacky reflective methods of programmatically inserting new entries into the enchantment registry on spigot, but imo it isn't really worth it
i have no idea how up to date this is, they have been changing the way how this works every version recently; your mileage may vary
sick of seeing "paper can do this" 😢
never see anyone in PaperMC dickriding Spigot in return. Despite being the superior server software.
They tend to ban for that
Same policy should be here then…
not saying vcs2 was doing this, as i completely understand he was making a recommendation — but hearing from some people “this is so much easier in paper” is so fruitless because… this isn’t paper.
i think we need to deprecate half the api and replace it with a buggy mess
i think its time for Spigot 2
nah it's time for Mygoat
fabric can also do that
u can do a lot when u can fully rewrite sections of the games code :v
this might be just me, but is spigot handling of potions suck atm?
like a potion itemstack for example
you can't apply it to the player using code anymore
you can't determine the effects durations even
after removal of org.bukkit.potion.Potion it's become quite annoying imo
You can
Sounds like you're just too used to the ancient 1.8 api
oh new 1.21 apparently yes @_@
1.20 not apparently
yeah 😂
Best server jar rn?
Don't ask in every channel
spigot 👍
i need help i have already created all the code for the plugin and stuff but i dont know how to download the plugin file
i dont know how to download it so its in a file like this
You don't download anything, you compile it
And for Intellij to do that it needs the dependencies like Spigot
The easiest way is to setup a maven project with the Spigot API dependency info in it
?maven
The home of Spigot a high performance, no lag customized Bukkit Minecraft server API, and BungeeCord, the cloud server proxy.
thank you
Though really you should start with understanding the basics of Java first if you haven't programmed anything before
?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! 🎉
You should've seen more of choco's pr's through, then
For every "paper can do this" there is usually a matching "I had a pr for this but it got dropped"
also if i fix something in the code do i need to compile it again?
Yes
oh ok thanks
Hello. I am trying to update a plugin to 1.21.11.
In gradle/libs.versions.toml I have "paper-api = "io.papermc.paper:paper-api:1.21.11-R0.1-SNAPSHOT""
In build.gradle.kts I have "minecraftVersion("1.21.11")"
And in paper.yml I have "api-version: 1.21.11" but when I try to use the plugin I get an error message that says that 1.21.11 is not supported. Any ideas?
?whereami
Paper is built on Spigot
Actually I don't know why anyone would use spigot instead of paper
You're not using Spigots system at all there
Looking to paste something? Try a code block or one of the following websites:
- https://pastes.dev/
- https://sourceb.in/
- https://mclo.gs/ (best for server logs)
something somewhere in the plugin is checking the server version and printing that message
find it and update it to accept this new version, or disable it altogether
is command api shaded in or how is it bundled into the project?
send your build script
that runs the gradle build script
build script = build.gradle(.kts) file
it's a file at the root of the project named build.gradle.kts or without the kts if it's groovy or some shit
oh thanks
for maven projects, this would be pom.xml
i hate gradle
Real
fr
Make sure you use CommandAPI 11.1.0
I have been told that kotlin is better than Maven
Kotlin is a programming language, Maven is a build system
I mean gradle kotlin
implementation(libs.commandapi.shade) find wherever the hell this is defined and make sure the version is 11.1.0
Found it
basically what is happening is that you are bundling in a dependency (command api) into your plugin jar, but the version you're bundling in doesn't support 1.21.11
because of course a command api would need nms
That makes sense
Moment of truth
I set "commandapi-shade = "dev.jorel:commandapi-paper-shade:11.1.0"" but this causes other errors now when trying to build the project
Cannot resolve symbol 'PlayerArgument'
Cannot resolve method 'failWithAdventureComponent' in 'CommandAPIBukkit'
You're depending on the Paper version and trying to use a Bukkit/Spigot version method
since you're depending on Paper you should migrate your code
Okay
so true
heyy, im building a custom world generator. I have come across a issue i cant seem to figure out. All the chunks are populated nicely, but the spawn chunks are all grass blocks for some reason, and i cant seem to figure out how to override it
nvm, it seems to have something to do with ops.json
You don’t think it’s important to the functionality of the plugin?
commandapi's dope
PlayerArgument doesn't exist no more
seems like a migration from v10 to v11
Dang
use EntitySelector.OnePlayer instead
It'll give you @e and @p etc
@echo basalt Any idea what I can replace "failWithAdventureComponent" with?
No idea, never used that
To the docuemntation I go
i've been trying to complile https://github.com/Auxilor/EcoBits but everytime i fail, if i get the jar file the server wont read it, or the jar file completely fails, any help please?
How are you compiling?
Commands and their outputs would be helpful.
In vscode doing gradle build
Will give the errors once im on my pc
dms?
Not home atm :/
alr nws
What you tryna do boy
Looking for a manager/dev
?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/
alr im home rn
Starting a Gradle Daemon, 3 incompatible and 1 stopped Daemons could not be reused, use --status for details
> Task :eco-core:core-plugin:compileKotlin FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':eco-core:core-plugin:compileKotlin'.
> Could not resolve all files for configuration ':eco-core:core-plugin:compileClasspath'.
> Could not find me.clip:placeholderapi:2.11.2.
Searched in the following locations:
- https://repo.maven.apache.org/maven2/me/clip/placeholderapi/2.11.2/placeholderapi-2.11.2.pom
- file:/C:/Users/Azryx/.m2/repository/me/clip/placeholderapi/2.11.2/placeholderapi-2.11.2.pom
- https://jitpack.io/me/clip/placeholderapi/2.11.2/placeholderapi-2.11.2.pom
- https://hub.spigotmc.org/nexus/content/repositories/snapshots/me/clip/placeholderapi/2.11.2/placeholderapi-2.11.2.pom
- https://repo.codemc.org/repository/nms/me/clip/placeholderapi/2.11.2/placeholderapi-2.11.2.pom
- https://repo.codemc.io/repository/maven-public/me/clip/placeholderapi/2.11.2/placeholderapi-2.11.2.pom
- https://repo.dmulloy2.net/repository/public/me/clip/placeholderapi/2.11.2/placeholderapi-2.11.2.pom
- https://repo.extendedclip.com/content/repositories/placeholderapi/me/clip/placeholderapi/2.11.2/placeholderapi-2.11.2.pom
Required by:
project :eco-core:core-plugin
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.
Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
For more on this, please refer to https://docs.gradle.org/8.3/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.
BUILD FAILED in 45s
9 actionable tasks: 6 executed, 3 up-to-date```
compiling source from https://github.com/Auxilor/EcoBits
in ECOBITS-1.8.4 when changing compileOnly("me.clip:placeholderapi:2.11.2") to be the latest version aka compileOnly("me.clip:placeholderapi:2.11.7") the builds works perfectly, but for some reason when putting the eco-core-1.8.4.jar inside my plugins folder i get this error
java.lang.RuntimeException: java.lang.IllegalArgumentException: Directory 'plugins/.paper-remapped/eco-core-1.8.4.jar' does not contain a paper-plugin.yml or plugin.yml! Could not determine plugin type, cannot load a plugin from it!
at io.papermc.paper.plugin.provider.source.FileProviderSource.registerProviders(FileProviderSource.java:85) ~[paper-1.21.11.jar:1.21.11-72-cd445fd]
at io.papermc.paper.plugin.provider.source.DirectoryProviderSource.registerProviders(DirectoryProviderSource.java:52) ~[paper-1.21.11.jar:1.21.11-72-cd445fd]
at io.papermc.paper.plugin.provider.source.DirectoryProviderSource.registerProviders(DirectoryProviderSource.java:17) ~[paper-1.21.11.jar:1.21.11-72-cd445fd]
at io.papermc.paper.plugin.util.EntrypointUtil.registerProvidersFromSource(EntrypointUtil.java:15) ~[paper-1.21.11.jar:1.21.11-72-cd445fd]
at io.papermc.paper.plugin.PluginInitializerManager.load(PluginInitializerManager.java:113) ~[paper-1.21.11.jar:1.21.11-72-cd445fd]
at net.minecraft.server.Main.main(Main.java:108) ~[paper-1.21.11.jar:1.21.11-72-cd445fd]
at io.papermc.paper.PaperBootstrap.boot(PaperBootstrap.java:21) ~[paper-1.21.11.jar:1.21.11-72-cd445fd]
at org.bukkit.craftbukkit.Main.main(Main.java:242) ~[paper-1.21.11.jar:1.21.11-72-cd445fd]
at io.papermc.paperclip.Paperclip.lambda$main$0(Paperclip.java:42) ~[?:?]
at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]
Caused by: java.lang.IllegalArgumentException: Directory 'plugins/.paper-remapped/eco-core-1.8.4.jar' does not contain a paper-plugin.yml or plugin.yml! Could not determine plugin type, cannot load a plugin from it!
... 10 more```
and plugin doesnt work
You seem to be using the wrong jar
The completed plugin is in the bin folder
Hey! i have a question regarding publishing a premium plugin on spigot, in which channel do i ask?
You can ask here if you want
is int % using floats?
% works for both int and floats
yeah ik
yeah, can't really be fixed
Just like how you can’t accurately represent some numbers in base 10, you can’t accurately represent some numbers in base 2
A good example is 1/3
I mean like architectural fp err
since java 17 introduced strictfp by default
and there are no longer differences between different architectures doing the same arithmetic
Hi, is there any way to set the fish arrival time in Spigot 1.8? Or do I just need to update the engine?
Player p = e.getPlayer();
UUID uuid = p.getUniqueId();
ItemStack rod = p.getItemInHand();
// Sprawdzenie czy to nasza specjalna wędka
if (rod == null || !rod.hasItemMeta() || !rod.getItemMeta().hasDisplayName()
|| !rod.getItemMeta().getDisplayName().contains("§7§oWedka")) {
return;
}
// Rzucenie wędki
if (e.getState() == State.FISHING) {
FishHook fishHook = e.getHook();
if (fishHook != null) {
setHookName(fishHook, WAIT_SECONDS);
if (e.getState() == State.FISHING) {
FishHook fishHook = e.getHook();
if (fishHook != null) {
setHookName(fishHook, WAIT_SECONDS);
hook.setMaxWaitTime(WAIT_SECONDS);
}
return;
}
}
return;
}
}```
Minecraft 1.8 is 11 years, 4 months old.
How to I active hyperportalbreaking
I can add it on my fork
wtf is hyperportalbreaking
Installation Guide:
Make sure you join the Discord for update notifications and support.
Download HyperPortalBreaking.
Put the HyperPortalBreaking jar file into your server's plugins folder.
Restart your server.
If you want to configure messages, go in the HyperPortalBreaking folder, which is inside the plugins folder, open the config.yml, and set the messages to whatever you'd like.
Restart your server.
Enjoy! ❤️
Looks like it’s just some endportal stuff maybe?
active hyperportalbreaking!
It does sound cool though 😎
hyper ruined bolic
Is there any way to check for "player entering nether portal" without checking Player/EntityMoveEvent or checking their location every tick when "allow-nether" is disabled?
Because PlayerPortalEvent or however its called is not fired when the nether is disabled
EntityPortalEnterEvent doesnt work?
oh I must have overseen that. Thanks, I'll try
Called when an entity comes into contact with a portal
This looks like a collision check.
whats that hook class?
Yes
Or just update
1.8 times are gone
You would be surprised how many 1.8 servers actually run more modern versions and just appear as 1.8
Even hypixel these days is prepping for an update because 1.8 is lacking
However not sure if it's just big back port
Its just better for low memory and low cpu instead of paying for a $120 dedi you can just run 80 players on a $20 one
When you cant afford hardware you can compensate with software
Everyone who still runs 1.8 today should be executed imho
it's like using Windows XP
windows xp is still used in almost half of industrial companies
A lot of people just use linux because they cannot run Windows 11 or 10. You have to be respectful and more understanding, not everyone in the world has that amount of money, and sometimes you just have some small cash to spare. Tho if you really think we have to execute poor people, well, there are extremist political movements for that.
Forks of 1.8 are the same as Linux to Windows XP, is not the latest upgrade, but it's a modern and fast alternative 👍
wtf no, bullshit
what the hack are you havering
lol
xp doesn't even work on any sort of modern hardware no?
If you cannot run latest, run something similar to the old one but updated, (icewm linux with windows xp theme is same course of action as running a modern 1.8 fork instead of 1.21)
Yes it does with service pack i had it
why would anybody cannot run latest?
Because it has much higher hardware requirements not everyone can afford that much on hosting
:,)
It needs like 2GB of ram
hardware requirements or budget is not the reason people run 1.8 in the first place
like, far from it
Granted RAM is like $100/GB these days
But still
Even crappy free hosts offer latest
So the mod will let me break end portals?
well you do you
however latest = supported and 12 years old version = unsupported
are you also running your server on ubuntu 12.04?
Question, so i made a poll plugin, under which category do i upload it? (the poll is done through a gui)
yawn
Is it just e, or is the death protection consume effect sound not working?
itemStack.setData(DataComponentTypes.DEATH_PROTECTION, DeathProtection.deathProtection()
.addEffect(ConsumeEffect.playSoundConsumeEffect(Registry.SOUNDS.getKey(Sound.ITEM_BOOK_PAGE_TURN)))
.build());
it just plays the default one
?whereami
Can someone please help me. im trying to make a plugin that if you do /ffa in a server (lobby) that you get tpd to a other server (duels1) in a spefic world and location. Im trying so hard to make it for the last week.
What part are you having troubles with?
Sending someone in a specific location in a other server
You'd send the player to a different server with a plugin messaging channel request to the proxy. Now moving them to a specific location in that server isn't a built in action and would require you to have your plugin on that server and then informing that plugin instance of the request
The home of Spigot a high performance, no lag customized Bukkit Minecraft server API, and BungeeCord, the cloud server proxy.
You'll need the plugin on both servers and some way to communicate between the two
^ There are multiple ways of going about that. You can for example make your own proxy plugin to relay that or you can use a messaging service or just do direct communication via a socket
Even a database would be ok
That would also work
Or in very recent versions, a cookie
oh yeah I forgot about those
messaging system only works when there's at least one player online, which might be a bummer to some
I think he meant a real message queue like RabbitMQ or whatever
you can have cookies in minecraft?
Yes
It's a pretty new feature but it can be used when sending people with the transfer packet
i use sockets myself to achieve a similar system
yeah /give winnpixie minecraft:cookie 64
To confirm, the latest release of Minecraft is deobfuscated yeah?
there is a deobfuscated version available, but 1.21.11 is not deobfuscated
26.1 snapshot is
How to make a plugin that in tab you can change who you see when you crouch as a example normally I see everyone but if I crouch that sets me in a other mode where I see my friends
listen for the player crouching, then send the player info packets
somewhat complicated to get into tab packets, so if you're not familiar just use a library
Thanks
yo im curious if anyone thinks this would be possible / already exists; any way to design a plugin that would allow players to have all chunks currently loaded on the server loaded on their client?
Wdym
what would be the point for it
its not like the client can really make use of a chunk 1k blocks away from them
and on a lower end machine this would probably not be an efficient idea
when using a distance mod like voxy it would theoretically allow you to see entities in other players' chunks (mainly the other players being the point)
yeah for like a 3 person server it'd triple the load, not meant to be used for like a 200 player server
at least I assume that's how it'd work with entities
was just trying to figure out a way to make other players visible from a long distance with voxy and that idea popped into my head
But a player 1000 blocks away would be like 0.1 pixels
you obviously dont understand how much immersion that adds
simpleton
ofc that' be possible, just add chunk tickets
and then check them every 20 ticks or so
TPS gonna die though if you got more than 100 players
If mem won't first
hello uhh I don't even know how to say what the problem is since I only started but any idea how I can fix that issue:
<dependencies>
<dependency>
<groupId>io.papermc.waterfall</groupId>
<artifactId>waterfall-api</artifactId>
<version>1.20-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
I am trying to make a waterfall plugin but these lines are always red and I can't get build success
any idea why?
?whereami
?
This is the Spigot/Bungeecord discord
I know, I already tried spigot dependency and it didnt work
and you are not using Spigot or Bungeecord
isn't waterfall dead anyway
I believe so
I prefer waterfall than velocity
you prefer an outdated exploitable unmaintained project than an updated and maintained one?
that's a strange decision
no I use waterfall forks
e.g. xcord, flamecord. They both are better than velocity for me
good then you can use your fork's API and seek support to your fork, or depend on bungeecord API and use bungeecord at runtime and ask about errors with it here
I'm sorry cuz I am new to minecraft plugin development?
that's okay, the gist of it is you should ask support to the people you actually use the software from
in any case, you should at least share the error or log
I thought they all use the same api
if you're new you should either watch some tutorials or start with spigot api
I would if I knew how 💔
using eclipse
Don't go complaining to Google that you cannot download Microsoft Edge
Just because one is based on the other does not mean they're the same
I am not new to coding but I am to minecraft coding
idrk about eclipse, but if you run maven on a terminal that will spit out all the logs
[INFO] Scanning for projects...
[INFO]
[INFO] [1m----------------------< [0;36msi.terona:TeronaFallBack[0;1m >----------------------[m
[INFO] [1mBuilding TeronaFallBack 1.0[m
[INFO] from pom.xml
[INFO] [1m--------------------------------[ jar ]---------------------------------[m
[WARNING] The POM for io.papermc.waterfall:waterfall-api:jar:1.20-R0.1-SNAPSHOT is missing, no dependency information available
[INFO] [1m------------------------------------------------------------------------[m
[INFO] [1;31mBUILD FAILURE[m
[INFO] [1m------------------------------------------------------------------------[m
[INFO] Total time: 0.126 s
[INFO] Finished at: 2026-01-11T16:31:56+01:00
[INFO] [1m------------------------------------------------------------------------[m
[ERROR] Failed to execute goal on project [36mTeronaFallBack[m: [1;31mCould not resolve dependencies for project si.terona:TeronaFallBack:jar:1.0[m
[ERROR] [1;31mdependency: io.papermc.waterfall:waterfall-api:jar:1.20-R0.1-SNAPSHOT (provided)[m
[ERROR] [1;31m io.papermc.waterfall:waterfall-api:jar:1.20-R0.1-SNAPSHOT was not found in https://repo.papermc.io/repository/maven-public/ during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of papermc has elapsed or updates are forced[m
[ERROR] [1;31m[m
[ERROR] -> [1m[Help 1][m
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the [1m-e[m switch.
[ERROR] Re-run Maven using the [1m-X[m switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [1m[Help 1][m http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
Now get us the log when you're depending on Bungeecord
?paste
Looking to paste something? Try a code block or one of the following websites:
- https://pastes.dev/
- https://sourceb.in/
- https://mclo.gs/ (best for server logs)
also this ^
how?
Depend on Bungeecord
Reload maven
profit
You did say you already tried that so you should know how 🤔
what are you trying to do?
while the java API is likely to be the same or very similar, the maven dependency artifact could have different set of requirements for your maven setup to satisfy like a java version or needing to add some or such property, repositories etc
I am trying to make a plugin that always checks all hubs if they are offline or online so if e.g. hub1 goes down you get connected to hub2 the other way around. So if both hubs are down you get connected to limbo-wait server where you wait for any hub to come up and when e.g. hub2 comes online you automaticly get connected there
and also it adds loadbalance for players with a queue system so it doesnt spam servers with players
depending on base bungeecord
net.md_5 bungeecord-api or something idk the artifact id
I will try to do it on intellij idea
waterfall is no longer maintained, so I'd suggest choosing another proxy server
yeah I am currently using xcord but will switch to flamecord when my system admin reinstalls mounts to our nodes
welp
I figured it out
[16:32:07 INFO] [TeronaFallBack]: TeronaFallBack ENABLED
love that message ❤️
are you stupid or "special" or sth?
because spigot itself will print out when it enables a plugin
?whereami
the spelling in that small section alone is quite questionable
log4shell? think it did get backpatched actually
but only like server 1.8.8 and client 1.8.9
it did
Wait
1.8 through 1.18, wasn’t log4jshell found out at like
1.16.2
i remember it making its rounds near 1.18
Huh it was 1.18
1.18 i think released with it patched, or 1.18.1 whatever
Damn
and then mojang backported fixes to each final release for older versions
At least one thing in that paper is correct
Is that paper like google translated or something
i think i link to mojang stuff on https://github.com/winnpixie/log4noshell/ actually
m yes 1.18.1 was natively patched
hello
how to compile gradle plugin
idk how to code
if anyone could help
it's a 1.8.8 plugin and java 8
gradle build usually
yea but like i'm in intellj rn and I don't understand anything
can call the gradle wrapper (gradlew)
if you're in Intellij you can do so in the gradle tab on the right
but do I need to download the dependencies or smth?
depends on the project
i want to compile this https://github.com/Neeonn/FootCube
ok
the point of gradle is for it to download the dependencies for you automatically
but sometimes, especially for nms projects, people define "local" dependencies which have to be available locally, i.e. either built on your machine or downloaded to your machine
try it and see
looking at your particular build script, all of those dependencies should be reliably available online and probably from the defined repositories also
except for spigot 1.8.8, i'm not sure if that is still on the spigot repo
- What went wrong:
Execution failed for task ':compileJava'.
Error while evaluating property 'javaCompiler' of task ':compileJava'.
Failed to calculate the value of task ':compileJava' property 'javaCompiler'.
Cannot find a Java installation on your machine matching this tasks requirements: {languageVersion=11, vendor=any vendor, implementation=vendor-specific} for WINDOWS on x86_64.
No locally installed toolchains match and toolchain download repositories have not been configured.
Cannot find a Java installation on your machine matching this tasks requirements: {languageVersion=11,
install
Java 11?
Ok
you can also install it through the ide but i don't remember if gradle will see it
i'll just download myself
no worries
Yo
It worked guys
Thanks for the help
I appriciate it
hey,
I use https://github.com/jpenilla/run-task to install and start paper server using gradle runServer.
Is there a way to start it with console? Looks like console work if try to write help or something, but gradle feels bad + autocomplete didn't work.
Or maybe there is a way to connect to paper server console from another terminal?
?whereami
i think the console is there by default and needs to be disabled by --nogui or something
maybe see if the task passes that to the server by default
it is there, but probably gradle assume that command will not be interactive.
So, it mess console with its output
console as in a gui window with a command log, command input, a player list, and iirc a memory usage graph?
or as in in the terminal gradle is running in
They're talking about the terminal inside Intellij
It does not have autocompletion and stuff like it when running from a gradle task
in addition to that there is a gui window with the noted widgets
but it's suppressed by --nogui
though i don't remember if that has autocomplete either; iirc it does
console in the terminal
I think gradle runServer pass --nogui to server
I am telling about terminal emulator, kitty in my case
there might be an option to disable that being passed, better ask in the paper discord about it
i know you can add flags to be passed for runserver
not so sure about omitting flags passed by default, you'd think so though
don't know about that
I mean the gui kinda sucks
It’s just the terminal with a crappy ram graph that doesn’t tell you much, especially with xmx and xms set the same
but hey if it has autocomplete, it still sucks less than gradle, which sucks also and sucks more
you're better off with ant
the gui has autocomplete?
What's the standard or common practice for making a plugin that supports a wide range of versions?
like 1.16.5-1.21
Have reflections of the code for each version and call the reflection from a version independent class
I suppose that would get really messy
is there no cleaner way?
Not afaik
use the oldest API version u wish to support, and then probably try to multi-module :v
multi-module as in where you have a adapter class and then seperate code for each version right?
yes
i cannot find any tutorial
written article
forum
or any kind of thing
to help me do that bro 😭
ive been searching
if version == another then
adapter = adapterForThatVersion();
idk
alternatively: only support latest 😈🔥
server owners fault for not updating
yeah no but dude some versions use different version of java so how do you compile it into 1 jar
and the spigot API for different versions too, how would you import the correct API
i cant find any tutorial wrtitten or video to explain me how to setup a system like that 😭
Compile on oldest Java version required
Can you please ask in more channels
LOL
it won't stress test chunk loading for example but it can run commands and such
i use it to test my minigames
Dont tell me what to do
Thanks mate
i'd listen to md if i were you
and dont I need to use different Spigot API version if Im writing code for 1.16.5 as when compared to writing for 1.21?
You can see how bedwars1058 does it
oh, okay, thank you
tides is a sigma
i really dont understand much by just reading their code
