#help-development
1 messages · Page 901 of 1
well you could make the nogui, just set the system property lol
but, at least I found the JVM flag though
yee
so I am happy that while I remembered incorrectly I wasn't completely wrong XD
I guess it doesn't matter if there is specific parameters for instantiating the object actually
That it decides to be a gui long before parsing it's flags
Makes sense as the gui doesn't care about flags it doesn't use any of them
No it does not make sense
aw interfaces can't implement each other? weak
If BT had more customized flags to control more functionality it'd make sense to let them be. Parsed first
You do a lot of checks to even figure out if it's supposed to be a gui
oh wait they just extend nvm
Which is what they want
But like, can be fixed nicely with an options type or whatever
So w/e
How can something implementationless implement something else
They can
It uses the extends keyword
Interface1 extends Interface2
Because it's not an implementation 
They can extend
Hmm, what if something that has no implementation implemented another thing that has no implementation lmao
It's 2 PM for me over here 😭
it's 1:40pm my dude, time is a social construct
I woke up at 9 pm
or earlier, I don't remember
it's not important
For me it's 2:40 tbf
So you were awake from 9pm until 2pm, great schedule mate
To be fair I'm like that too so what am I yapping
I don't have a sleep schedule
Sleep schedule? What is that?
on average for the last 10 years I've gone to bed 2 hours later than the previous day
that's my schedule
Same 😭
so it doesn't matter if I wake up at 9 am or midday or 3 pm or 1 am
and likewise it doesn't matter if I go to bed at 11 am
I see
https://hub.spigotmc.org/stash/projects/SPIGOT/repos/buildtools/pull-requests/65/overview opened a pr so whatever we'll see how it goes
I want to use classes instead of enums, do i just pass a new instance of said class everytime, or is there another approach?
more context needed
^^
I want to use classes instead of enums to not break the open close principle, now i dont know how to pass the classes as parameters as they have static values and new instances would be stupid
I'd still prefer more context e.g. exactly what you are trying to accomplish
nothing
?
does TCP create Connection(or smth similar) objects?
not doing anything with taht at the moment
Yeah it's quite hard to answer your question then
Static values can just be used through the class.
For example:
double value = Math.PI + 3;
Where PI is a public static final value in the Math.class
yes, but when i inherit from the superclass i cannot have these methods static
abstract static methods dont work
yeah why should they
tahts my problem
you are breaking even more principles this way
A static method is, basically, not class-dependent
Well it is
But like
It's not tied to an instance
Then why are you trying to make it abstract
You are talking about abstract methods, then enums
BRO
Where is the middle ground
when i want to replace enums i need to have a superclass
I give up I don't understand a fucking word
ok
Ok lets paddle back one step. Enums are classes. They are only used in cases where the open-closed principle is of no concern in the first place, meaning
there is no reason to substitute them with a regular class.
So why are you trying to substitute enums with regular classes?
because i have enums like values, that im for sure gonna add more to
Sure what's the problem
You mean you dont want to update all switch-cases which work based on enum value?
no for these cases i use state pattern
Then what's the problem with just adding more enum values
simply because it breaks the open closed principle
How?
His concern is that enums should be final after being written because they should contain all possible values when created.
closed for modification open for extension
enums are modified if i need more of them
classes can extend from a superclass
no its just that i dont want to break the principles, as im trying to improve my code quality, maintainability and readability
can you send a code maybe
Well if you don't want to use enums that badly just go
public class MyClass {
public static final MyClass THIS_IS_A_CONSTANT = new MyClass();
}
// use
MyClass.THIS_IS_A_CONSTANT
that would still break the principle
add final and follow naming conventions
This technically violates the principle in the same way
open for modification closed for extension
Fair enough ig
I was just mkaing an exacmple but yeah
ig if you are on this stage rn, then you already made your system wrong so it leads to that kind of problem
maybe problem is somewhere else
wdym? there is no problem
i just want to improve on what i currently have
then i don't get like anything
Same
why
SOLID
enums have own use-cases
It's not like enums are inherently bad...
you can use them when needed
They weren't made for you to not use them
without breaking patterns
Quite the contrary I'd assume
yes for north east south west, those are static parametes that will never change
but other things might change
therefore enum breaks principles
yeah then don't use enums for stuff which is changing at runtime
Use like a registry or something idk
enums are not made for that
im not modifying at runtime
If you want to design your plugins strictly following all SOLID principles, then you will have to create quite complicated structures.
SOLID should be used as a guide and not a strict rule set. Anyways your solution would require An additional abstract layer like an interface
with multiple Enums implementing this interface. If you give use more information regarding your design, then we can probably work something out.
bro, what is so hard to understand about open closed principle?
With this attitude you are not getting help
i think you are the one misunderstanding tbh
"just because" is not really a strong enough reason to refactor your codebase
you change it because there is a need that needs to be addressed
not creating a solution for a problem that might never arrive
Premature optimization video deja vu
and yeah, optimisation is not just about performance :p
I mean this sentence reminded me of that video
I understand his concern. Its a valid one if you want to design solid.
that it doesn't work on enums since enums are made to be final and immutable
so you'd say instead of modifying existings enums i should create a new enum that implements an interface to show its real purpose?
yes that why i dont want to use enums
Please give one example of where you are going to implement this refactoring so that it's easier to understand what solution could be used for your problem
If there is a problem even
i dont have any problems, there are none, i just want to improve on my code
you keep saying you want to get rid of some enum in your codebase to follow the open/closed principle, my question to you is, how does the OCP help you in this are of your project?
Im saying that we need more information about your design problem to figure out a proper solution
Give one singular existing enum that you want to kill
There's no one-size-fits-all solution
there is no design problem, im certain tho that some enums may be modified in the future which violates the principle
Well, that sounds like a design problem to me
Then try to solve this problem in the future when you will be designing
I would def not tackle design problems like performance problems
hi so i have a repo in my repo... folder and i want to update it i did mvn install but that does not seem to do anything , how i can fix it?
i mean i want to use it in my other plugin
What I mean is if there's no problem then there's no solution
how do you create custom events? eg. this is not what I want to create, it'll serve as an example: create an event that fires only when player eats an apple - PlayerEatAppleEvent.
so what do I do? use the existing consume event and filter things out and then manually call the PlayerEatAppleEvent (onPlayerEatApple) function? how is this done?
omg
enum Planets {
EARTH,
MERCURY
}```
i'm so scared that scinetists will add one more to the list oh noooo
open closed principle
doesn't break here
I'd do
class Planet {}
class Registry<T> {}
class Registries {
public static Registry<Planet> PLANET
}
Something along the lines of that
why
Yeah but not too bad for extension
mfw Set exists
how do you fill this registry now?
fuck collections and enums, all my homies use
planet* planets = (8 * sizeof(planet));```
but then it would violate the principle again, right, you'd need to add it for every new planet you extend from its superclass
What
Ok just to be sure we are all on the same page what the open-closed Principle is for.
What it means:
You should be able to extend your class, without having to modify your class.
What it doesn't mean:
Your class should not be modified later on after writing it once
This means: If your class is never meant to be extended (like enums), then there is no way of it violating this principle.
You can add new values to enums (or any other class) later in time.
Yes?
imagine refactoring this in year 3000
when you create a new planet, you'd modify the code again, which will result in it breaking the principle
What code do you modify by creating a new class
that is not what OCP is about
can anybody explain me some tcp basics here
.add call to the registry?
a little bit at list
man socket.7
ack
Do you think that when you create a class
You cannot add anything to it
I think you're overthinking this lol
Literally ever
what does it mean
bro?
Especially when you just created it
You need to ack my ack before i can answer
I literally do not understand what the fuck you mean. You create a registry class and you add a method .add to it. You didn't violate anything just because you added a method to a class with 0 methods
This is what happens when people read efficient java and worship oop 😭
Are you saying that when a version of an app is published, every class in there is finalized forever
i know how to make my code better
Yeah, ain't no way you need a 20 minute discussion on code architecture
i stop coding so i don't make any mistakes
Just like... do your best lol
perfect solution
YES but when you create a NEW PLANET you extend from PLANET, then YOU need TO MODIFY the registry to add the planet
Just do it like
And refactor if needed
the OCP is about (not) modifying the Planet class once you extend from it
Do you want every list to be immutable????? What the fuck
not the registry
^^^^
^^^^^
^^^^^^
it was his example of a enum replacement
Performance goes down the drain
By calling .add on a list (in this case a registry is a glorified list/set) you do NOT!!!!!!!!!!!!!!!!!!!!!!!!!!! violate OCP
yeah but ocp is about modifying planet, not registry
okay thats never what i said
YOU need TO MODIFY the registry to add the planet
yes, because it was his enums replacement
and that is not what ocp is about
in an enum you expect every kind of planet to be there
OCP just means open for extension closed for modification
he knows that bruh
TCP is a protocol build on IP. Its used to transport data from A to B and assures that packets
are sent by letting the receiver acknowledge every packet they receive.
Thats the basics.
ocp is about "i am able to extend from Planet without having to modify the Planet class"
does it create some kind of connection object
the registry has NOTHING to do with it
bro emily
array[0] = 2; // this does not violate ocp
list.add(2); // this does not violate ocp
class MyPlanet extends Planet{}
registry.add(new MyPlanet()); // THIS STILLL DOES NOT VIOLATE OCP
which i can store in a list
@lost matrix
or it doesn't
he showed me an enum replacement, when he creates a new planet he needs to add the planet to his fake enum therefore modifying the code that modifies the registry
if not, use static constants xd
opening a socket gives you a file descriptor (or in java you have a Socket/SocketChannel object)
how many priciples did i break here
I tend to find enums annoying if I ever want to allow registries but they're fairly easy to convert down the line if you need
then you use it to connect to a remote peer
so i need a "socket" object here
ok let's go over this one more time insanely slowly
enum Planets {
EARTH, MERCURY
} // ooo bad!! ocp violation!! fuck!!!! i cant add new planets!
// so...
class Planet {} // i will extend this and make new planets but where do i put it
class Registry<T> {} // this is a registry but like a registry of nothing
class Registries { // let this be a storage for all registries. basically a Constants object
public static Registry<Planet> PLANETS; // i will call Registries.PLANETS.add(new CoolPlanet()) and NOT violate ocp!! i'm officially cool!
}
or if you don't like registries let it be a set or a list idfc
There is a negotiation protocol.
So A listens for anything on a certain port.
If it receives a SYN packet, then it starts a negotiation protocol. Cant remember exactly how it goes.
After that they can send payload packets to each other.
But in java this is all abstracted away from you. Way to low level.
Wtf is OCP
i'm not adding a single word to this convo this is useless
open closed pr
obama clicker pro
it violates ocp
Wtf does that even mean bro
second thing in solid
Is this some stupid OOP principle
no it doesn't
it does
how
sadly i code on c# rn but i guess it's all same here
because code is changed when new planet exists
Please run from effective java or whatever you've been reading bro just write code lol
ok it is
mate
I mean those oop principles are a good guideline and way to architect your code. But arguing for 30 minutes over whether something is violating OCP or not is ridiculous.
Didnt we just resolve the misunderstanding about this?
It does not mean that your class wont have new fields in the future.
Its perfectly fine to add new values to your classes later on (as long as they are not extended).
get that idea off your brain
if yall didn't understand yet yoursalvation is smarter than everybody in this chat
lol what is this
i understand, but his registry is violating ocp
no it is not
it does
OCP is not about not modifying ANY code
How so? He never extends it
Stop the crap you're spamming this channel or make a thread please
okay emily, when he extends from the planet class, is the planet added automatically to the registry?
YourSalvation whats ur definition of OCP?
Tbh I don't intentionally follow or break any OOP principles I just write code lol I an so disconnected from this weird BS
Writing code is breaking OCP principle
that is not what ocp is about
ok
Because you are changing code
OCP is not about "things should happen automatically"
for me it is
oh
oh your OCP
well that's what you should;ve started with
not the OCP
^
sure yeah
Those principles are just guidelines on the way to structure your code. It just gives what you're already doing names, so you can reuse the patterns. Similar to design patterns. Just writing code is probably better than whatever this is
then you can do whatever
OCP is that a class should be open for extension closed for modification, by that we should be able to modify the class by extending it, this inherently means that we don’t need to recompile the superclass we’re extending in order for us to modify it
But don't break the actual ocp please
then you might wanna look into annotation processors and service loading and factories stuff
i have my own solid 😼
to automate your code flow
i guess it wouldnt break ocp but the registry would still be a really bad replacement for a enum
I have my own OOP
The ignition here was: Are enums inherently breaking this principle?
that'[s just kotlin
i think it depends on how we use the enum
No its not
Semantically and infrastructurally
I mean I know some stuff but like I don't put very much weight into it I feel like labeling everything you do and make it all perfect is kinda going backwards not forwards
These concepts provide too much yapping and too little usefulness
fr
Write on assembly
yup agreed
Ignore oop
ill go abuse my statics now
you are violating ocp by modifying memory
Oh noooooo
How do i compile my memory and send it to end user
for a second i thought i was tweaking and looked up ocp during this convo
Life is stateful and impure, ocp violated
turns out i wasn't thankfully
Example:
public enum Direction {
UP, DOWN
}
Is it a violation if you would have to later on add
public enum Direction {
UP, DOWN, LEFT, RIGHT
}
to me this has nothing to do with the principle, but i think this is where the confusion comes from
Ayo don't let the functional bros know that
They'll flip out
well enums is a hard one, they’re not very object oriented in the first place
God em knows what they say when they get to know their cpu is not fully functional
Enums are basically just static fields, so by adding or removing a field you modify your class. By @ivory sleet's definition that would mean we'd have to recompile the enum class. So I guess it's breaking it? But at the same time you can't extend the enum, so is it really breaking anything?
dw it's pure, CPU is just a function that takes electricity as input and outputs.... stuff
as well as statics?
lol fair
me coping
electricity is not really object oriented
static is the opposite of object orientation pretty much
it's just electrons moving
static electricity?
private static final
object oriented electricity ⚡️
Is universe single-threaded?
if there is a god then no
It's Schrödingers Single Thread theory
he is on parallel thread
The universe is single and multi threaded simultaneously
Fuck You're right
Anyhow aparx, I don’t think it’s useful and meaningful to apply the OCP to enums presumed you use enums like a normal dev and not a yandere one
does anyone know how this is caused?
you know this channel is up to something productive when people are 1 comment removed from debating whether there is only one electron in the universe
how do i extend my thoughts?
go back to monke
I agree totally. I was just trying to mock the chat
read books
:,)
no that would violate some principle
I would guess some signing issues. Lets see the log.
then don't extend them
go back to monkey
that would ALSO violate some principle
Soldier
On
Liquid
Inhaled
Dopamine
I have no idea, don't ask
Liquid inhalation 😨
😭
Certainly! Let's reframe the OOP SOLID principles using the new interpretation:
Soldier - Single Responsibility Principle (SRP)
A soldier (class) should have a single responsibility, just like a real soldier who has a specific role or duty to perform.
On - Open/Closed Principle (OCP)
This principle is about being "on" for extension but "closed" for modification, much like a system that is open for new features (extension) but closed for altering existing code (modification).
Liquid - Liskov Substitution Principle (LSP)
The "liquid" here represents the flexibility of substitution. Just as a liquid takes the shape of its container, classes should be substitutable for their base classes without altering the desired behavior.
Inhaled - Interface Segregation Principle (ISP)
"Inhaled" signifies the need for interfaces to be inhaled or accepted only by those who use them. Interfaces should be specific to the requirements of the classes that use them.
Dopamine - Dependency Inversion Principle (DIP)
The "Dopamine" principle is about the high of dependency inversion. High-level modules should not depend on low-level modules; instead, both should depend on abstractions, bringing a sense of dependency euphoria.
This fun reinterpretation captures the essence of the SOLID principles in a more relatable and memorable way!
Writesonic does the job for me
ok I really should start working I intended to do that 2 hours ago
How about you work on getting a job
im 15
chatgpt
can't
hassle
ah
trust
generativeai
ponderings
thereupon
few people know what chatgpt stands for
i mean i do plugin commissions
but literally no one wants plugins
lol
my last commission was like in december
Can anyone help me out
im trying to check my item for itemmeta but it keeps outputting unspecified meta what can i do to fix it?
chat Goes Political, Terminate!!!
Skull emojiiiiii
?nocode
It’s hard to answer a programming question without code
Oh no! You ran into a problem. But no worries, people are willing to help, but first they need to see your code. This is because otherwise, they would be providing help based on guesses instead of concrete knowledge. Whether it be a compile error, runtime error, or an unexpected output, I'm sure that if you were to provide code, you'd receive a quick solution.
ok y2k you take over from here
Whay is unspecified meta even also ^^^&^^&^&&&^^^^^
i am closing discord for good
No :(
Class
in your walls
on earth
this is top notch help-development
in your toilet taking a hard shit
When did they rename grass to short grass?
Make sure to not write any values there, or else you are violating ocp
It's more my style to be in his closet with a wire clothes hanger it's much more menacing
at least a year ago i guess
lmaoo you still on it
It's funny
i agree
he is in class, solving problems
Tbf this message violates SOLID btw
void smile(){}
Did we solve it?
does main() violate ocp?
Hi I have a question, if I have a custom item like this that extends item stack is it possible to later in the future check if item instanceof MyItemClass, or is this not possible?
by existing
I think this was quite a while ago
when you create a program...
you make do with what your ide gives you
you cannot write any code
add a PDC to item, don't extend itemstack
it wil violate ocp
Only just 1.20.4, actually
You should not extend ItemStack
Yes ik I did, im just asking if its possible to verify if the item is that item with it
You're thinking of grass -> grass_block
Whoopsies too late
Ah right
revert
ctrl + z

just add a static boolean method somewhere far away
if (myItemIsThat(key, itemStack))
May say our definitions of code cleanliness are in two entirely different worlds
ItemStack item2 = new ItemStack(Material.NETHER_STAR);
ItemMeta meta2 = item2.getItemMeta();
meta2.setDisplayName(ChatColor.GOLD + "Revive Token");
ArrayList<String> lore = new ArrayList<String>();
lore.add(ChatColor.DARK_PURPLE + "Gives you +1 hearts");
meta2.setLore(lore);
item2.setItemMeta(meta2);
Revive_Token = item2;```
This is one part and the other part is
```if (player.getItemInHand().getData().equals(itemManager.Revive_Token.getData() != null))```
And it ouputs when i print it out
```Item Meta: UNSPECIFIC_META:{meta-type=UNSPECIFIC, display-name={"text":"","extra":[{"text":"Revive Token","obfuscated":false,"italic":false,"underlined":false,"strikethrough":false,"color":"gold","bold":false}]}, lore=[{"text":"","extra":[{"text":"Gives you +1 hearts","obfuscated":false,"italic":false,"underlined":false,"strikethrough":false,"color":"dark_purple","bold":false}]}]}
[14:49:36 INFO]: Player Item Meta: UNSPECIFIC_META:{meta-type=UNSPECIFIC, display-name={"text":"","extra":[{"text":"Revive Token","obfuscated":false,"italic":false,"underlined":false,"strikethrough":false,"color":"gold","bold":false}]}}```
You can still create one class per item. But dont extend ItemStack. It will lead to suffering.
pain leads to anger
that is the second person tonight who wants to suffer because that is how they see code
Hahaha
^^
and evertything leads to breaking ocp
true
Well technically this dude is actually conforming to ocp
anger leads to breaking all solid principles
that dude will never live it down in this community 😂
lmao
Conclube
Xin
7smile7
I read all of this but i missed the question.
ZBLL
This is actually really good
I'm a genius
Will your DeluxeAsyncJoinLeaveMessage cause lag when alot of people join the server?
Since it is Deluxe and Async i would assume that it doesnt
the question was that i was trying to verify that the item the player is holding is the custom item but i cant bacuse meta data i null but i dont know how i can check for that specfic item
its async, therefore it shouldn’t lag (/s)
It may cause the end of the world though
carefall
Also is there a spigot method to promt a player the resource pack install screen?
coll you missed all the fun
but the CPU usage would go boom boom boom when 300 people try to join
Custom items should be identified by giving them a custom tag stored in their PersistentDataContainer
?pdc
you probably should see a timings report
just add resourcepack to properties
ig you can't force player to open that while ingame
Yeah but I want it to be promted when they run a command, not when they join
ig not
and how would i get that and check for it?
yeah
item.getPersistentDataContainer().get("item_key").equals("something")
declaration: package: org.bukkit.entity, interface: Player
you need to get the items meta adn then the pdc
thx
or https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/entity/Player.html#addResourcePack(java.util.UUID,java.lang.String,byte[],java.lang.String,boolean) if already exists a ResourcePack and wanna include a new with not reset of the old
declaration: package: org.bukkit.entity, interface: Player
Hi i really need help , so i got the ver 3.5.0 the new one i updated into my local repo , but everytime i try to use it i get this error
Whats up
Im currently working on a chat system, i have chat filters and i want to make them swapable on runtime, when passing a new instance of a chatfilter all the patterns would get compiled again, which is bad, therefore, is there a solution to this, i cannot use static as these classes need to extend from a superclass and singleton feels bad to me as i would need to make the class singleton everytime i create a new filter and this is prone to error as i might forget some time.
I mean you're probably fine to compile them again
the lib i use , is not updated to latest version and i tried to update it to 1.20.4 , and i did but now i am not able to use it into my main plugin ..
Or if you really, really care, keep the String around and check if the strings differ from the last instance and only recompile then
but I honestly don't think you'll notice a performance issue tbh
i will get rid of using the lib , and make my own in the future after i graudate , cuz i don't have time for it ..
i heard compiling patterns takes a lot of processing power
Pattern compilation is not the most performant
I mean yeah but you're also only doing it once manually when something is reloaded
It's not like you're compiling the pattern every tick
Sure but you probably aren’t swapping filters every tick
(I hope)
what if i do tho 😈
Then uh...
anyone got a clue on why the swingMainHand function sometimes work and sometimes doesn't work?
redesign 😅
You could just precompile no?
If you have a static set of filters
If it's dynamic, you're screwed
as to not violate ocp
my sense of humor revolves around doing too many sequels to a joke to the point where it becomes so unfunny that it's funny again
basically int overflow
Same tho
How?
Think of other ways to filter
don't leave me hanging on the high five
I think there are certain animations which wont be interrupted by the hand swing animation.
How did you determine if it works or not?
?xy
You could use certain data structures and compile each message into nodes
Why are you swapping filters each tick
its still using the old 1.20... and i already changed it like from yestrday ..
i determined if it works or not by looking at my hand
its not swinging my hand sometimes, but sometimes it does
ist not using the one on my local repo but insted its using the one from internet :L
is an itemstack in an armor stand not a part of nondefault value of entity data in nms?
in this case leather horse armor on a head slot of an armorstand
if(message.contains("badword")) -> filter?
And you cross checked with a debug message to make sure your method is called but the packet is disregarded by your client?
Isn’t entity equipment separate from the entity meta
is it?
yes it is being called
There’s a different packet for it
I have the same issue on some other plugins that I run on my server aswell that use the swingMainhand function, and sometimes it works and sometimes it doesn't
anyone 😢
You should iterate over each character and find words based on a tree search with certain nodes having alternatives, eg: i 1 l
One moment i made an animation a while ago. Gonna search it real quick
Did you mvn install it
yes multiple times
i have a question how can i get all of the banned users on my server and display them as a head with their name on it
Code i have right now
int i = 0;
for(OfflinePlayer offlineUser : Bukkit.getBannedPlayers())
{
ItemStack playerHead = new ItemStack(Material.PLAYER_HEAD, 1);
SkullMeta meta = (SkullMeta) playerHead.getItemMeta();
meta.setOwnerProfile(player.getPlayerProfile());
meta.setDisplayName(offlineUser.hasPlayedBefore().getName()); <-- doesnt work
meta.setLore(Collections.singletonList("Revive this player"));
playerHead.setItemMeta(meta);
inv.setItem(i, playerHead);
i++;
}
player.openInventory(inv);```
try clean install
did that been there .
did you bump your lib version
?_?
like change it
A boolean doesn't have the method getName
but how can i then get the display name of the offline user/banned user?
Ok didnt find the animation. But here is a meme i found instead
okay xd
Hey, is there's any tutorial on automating Github releases using Github actions?
I'm having a serious headache trying to make invisible armor stands via packet. It's pretty easy to spawn one and set the equipment, but for some reason I cannot get the SetEntityData packet to work properly.
I wrote a thread on the forum with more info on what I've tried and what I got https://www.spigotmc.org/threads/help-trying-to-make-a-fake-invisible-armor-stand-via-protocol-lib.636959/
Relatable profile picture
wait is this really just a meme or does this have a deeper meaning :(
This looks like you are using an old approach with DataWatcher objects. Newer versions require a List of WrappedDataValues instead.
Here is an example on how to set the name and flags for an invisible ArmorStand (A line in a hologram)
private PacketContainer createDataPacket() {
PacketType type = PacketType.Play.Server.ENTITY_METADATA;
PacketContainer packet = ProtocolLibrary.getProtocolManager().createPacket(type);
packet.getIntegers().write(0, this.entityId);
WrappedDataWatcher.Serializer byteSerializer = WrappedDataWatcher.Registry.get(Byte.class);
WrappedDataWatcher.Serializer chatSerializer = WrappedDataWatcher.Registry.getChatComponentSerializer(true);
WrappedDataWatcher.Serializer boolSerializer = WrappedDataWatcher.Registry.get(Boolean.class);
List<WrappedDataValue> dataValues = new ArrayList<>();
Byte flags = 0x20;
dataValues.add(new WrappedDataValue(0, byteSerializer, flags));
Optional<?> optChat = Optional.of(WrappedChatComponent.fromChatMessage(this.text.replace("&", "§"))[0].getHandle());
dataValues.add(new WrappedDataValue(2, chatSerializer, optChat));
Boolean nameVisible = true;
dataValues.add(new WrappedDataValue(3, boolSerializer, nameVisible));
Byte armorStandTypeFlags = 0x10;
dataValues.add(new WrappedDataValue(15, byteSerializer, armorStandTypeFlags));
packet.getDataValueCollectionModifier().write(0, dataValues);
return packet;
}
PS: Equipment is updated with a different packet
Make sure to use ProtocolLib 5+ instead of 4
ah yes
gee why does this equipment packet suddenly not work
oh yeah I never sent it
I think I'm just going to bed at this point
can anyone help?
Makes sense, that's why I got the data watcher cast exceptions. Trying this now
meta.setDisplayName(offlineUser.hasPlayedBefore().getName());
offlineUser.hasPlayedBefore() returns a boolean (true or false)
You then proceed to try and call getName() on that boolean, which makes no sense because booleans have no method called getName() (Or any other method actually)
first check offlineUser.hasPlayedBefore() in an if statement, and then use offlineUser.getName() separately
the equipment packet worked fine, wasn't nearly as troublesome as the data packet
Hello 7smile7 , can you help me with my problem? iam trying to use a local repo , that i updated , and its updated , but when i try to use it into my main plugin as a library , it does not use the new version
how i can fix it?
i have been trying for hours
i tried mvn install , mvn install -U mvn dependency:resolve -U
and everything i can think of
When you built did you use mvn install ?
Did you try mvn clean
yeah
Which part isnt working?
i did that but its still not using the latest version 😦
Did you change the version in your pom.xml?
yes in both the library to 3.5.0 , and in my main plugin dependancy to 3.5.0
.
Compile the dependency with 3.5.1 and change it in your pom as well. Then try again.
Is he trying to use a local dependency
I am aware
as you can see , it does create the new one .
but when i try to use it in my main plugin i put 3.5.1 but it does not work ..
Did you reload mvn
Meaning it doesnt compile?
show the pom
mvn clean install :
For the main
What does the main pom look like
You cant spawn NMS entities through the bukkit world object
Oh it's looking in the spigot rep
Technically you probably can with the virtual entity api
yes why? is something wrong with the spigot repo?
Prob not
Is it already merged?
yes
then how i can fix it :-: ?
It was merged a while ago
Noice
You should be able to do
Entity entity = MakeYourNMSEntityHere.getBukkitEntity()
world.addEntity(entity);
Might help I gtg
Doesnt getBukkitEntity() still require the entity to be added to the world?
don't believe so
Its using the remote repo because it couldnt find the dependency in the local one.
It always searches locally first.
Make sure to install maven in your machine and properly add it to your PATH
but its installed into locally as i showed you
yes
its installed sir
ServerLevel#addFreshEntity iirc
if you have the project source, why not provide the project as a module instead?
tried that when i run the plugin on the server , it say that the library is not found ..
in the plugins folder and throw errors
well either you shade it in, or provide it in the plugins directory
but for the purpose of your project to compile you can just provide it as a module
not sure if its possible ,-,
as there are allot of moudle for the library iam using :p
i do , cuz the plugin need to be working on every version :L
ok, then use all of them. Just fyi you can compile more then one jar
nothing says when you compile a single jar must be the end result, so in other words you can compile your plugin and that plugin with all the modules
and if you really wanted to, shade everything all together as well
or leave them separate
this should pretty much solve all your problems
my main problem really is i could not build 1.20.4 using buildtools
well, that is entirely different from your project
how do i make this work?
{
ItemStack playerHead = new ItemStack(Material.PLAYER_HEAD, 1);
SkullMeta meta = (SkullMeta) playerHead.getItemMeta();
meta.setOwnerProfile(player.getPlayerProfile());
if (offlineUser.hasPlayedBefore());
meta.getDisplayName(); <-- offline players display name
meta.setLore(Collections.singletonList("Revive this player"));
playerHead.setItemMeta(meta);
inv.setItem(i, playerHead);
i++;
}
player.openInventory(inv);```
Thank you so much, this works flawlessly
Show code
Run softprops/action-gh-release@v1
👩🏭 Creating new GitHub release for tag v1.0.0...
⚠️ GitHub release failed with status: 403
undefined
retrying... (2 retries remaining)
👩🏭 Creating new GitHub release for tag v1.0.0...
⚠️ GitHub release failed with status: 403
undefined
retrying... (1 retries remaining)
👩🏭 Creating new GitHub release for tag v1.0.0...
⚠️ GitHub release failed with status: 403
undefined
retrying... (0 retries remaining)
❌ Too many retries. Aborting...
Error: Too many retries.
Im now getting this error, any idea how can I resolve it?
403 is you are not logged in
forbidden
I am logged in, not sure why it says forbidden
That all looks okay, any errors?
isn't there a registerGoals method you should override?
can anyone help with how i can get the name of the offline player?
offlineUser.getName() ???
you have to set it into a variable so you can use it. but why are you calling getDisplayName() on SkullMeta? there is no such method: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/inventory/meta/SkullMeta.html
declaration: package: org.bukkit.inventory.meta, interface: SkullMeta
String playerName = offlinePlayer.getName();
like this
{
ItemStack playerHead = new ItemStack(Material.PLAYER_HEAD, 1);
ItemMeta meta = playerHead.getItemMeta();
if (offlineUser.hasPlayedBefore()) {
String playerName = offlineUser.getName();
meta.setDisplayName(playerName);
meta.setLore(Collections.singletonList("Revive this player"));
playerHead.setItemMeta(meta);
inv.setItem(i, playerHead);
i++;
}```
is it possible to teleport player without that animation thing?
Please use the paste site and paste the entire thing
it looks fine to me
well, does it work?
set them to invisible I suppose
you can do this with a quick hidePlayer showPlayer before and after the fact
yup
Then no. If it's a short distance the client interpolates the movement.
I mean to the client teleportation is just walking really fast I don't think there is any major distinguishable difference which is why teleports also can show as moving to fast on the server
it also interpolates long distances
If it's not cross world it's considered movement
now everytime i right click it just opens the menu
Code
if (player.getItemInHand().getItemMeta().getPersistentDataContainer().equals(itemManager.Revive_Token.getItemMeta().getPersistentDataContainer())) {
Inventory inv = Bukkit.createInventory(player, 45, ChatColor.AQUA + "Revive A Player");
int i = 0;
for(OfflinePlayer offlineUser : Bukkit.getBannedPlayers())
{
ItemStack playerHead = new ItemStack(Material.PLAYER_HEAD, 1);
ItemMeta meta = playerHead.getItemMeta();
if (offlineUser.hasPlayedBefore()) {
String playerName = offlineUser.getName();
meta.setDisplayName(playerName);
meta.setLore(Collections.singletonList("Revive this player"));
playerHead.setItemMeta(meta);
inv.setItem(i, playerHead);
i++;
}
}
player.openInventory(inv);
}```
How can I register a new team at bungee api?
what event is that listening for
and what do you mean it just opens menu
it opens the inv gui
and it listens for if the player is using the specific item
but i dont think it works 😦
so playerinteract?
is it empty or what
yeah its a empty gui but i only want it to open when i right click with the specfic item
it doesnt do that
what event listener are you using
@river oracle need more help building craftbukkit
it builds fine, but errors out when started
Error: Unable to initialize main class org.bukkit.craftbukkit.Main
Caused by: java.lang.NoClassDefFoundError: joptsimple/OptionException
public void onRightClick(PlayerInteractEvent event) {
i've checked and joptsimple is a valid dep, although when i open the jar as an archive there is not a single external dep packed in there??
it wouldn't compile otherwise anyways. pom is cloned from upstream directly, as usual
are you sure that hasPlayedBefore returns true
just add some println statements
ok ill try
Is this the same issue from yesterday or is this a different one?
it returns true
its diffrent , and also yk how i can make it so it get the files from local maven repo?
like a library for example i do mvn install , it do install it into local maven , but when i try to use it into my main plugin it not work
Did you refresh your other project after you installed the changes?
What specifically doesn't work? Not being able to access changes that you made? Or?
it tells me this :
but iam using 3.5.1 and it must be 3.5.1 the new version i updated , bcz it support 1.20.4
Is that framework another project that you made?
not mine ,its for another dev its a library
i think so , cuz its not getting it from local
Then maven should automatically handle any issues. You'd just have to reload your pom to make sure it's actually refreshed.
can anyone pls help i think the problem is in the detecting if the item the player has is equal to the custom item but i cant seem to make none of this work
Is there a repo that's tied to that maven dependency?
you can not compare two PDC's
yes , but the repo is not updated to 3.5.1 , cuz the author will not update it ..only 3.4.9
then how would the code look?
i have no idea what is wrong
Well, that's where you issue is. :p
you compare whatever entry you put in the PDC
ok can you show me an example please
that's why i want it to work locally insted so it take the updated files from my local maven
?pdc
Then remove the repository from your pom and it should look for local deps first.
You can also try running maven in offline mode.
since they have the sources, I already suggested to them to make it a module of their plugin
it essentially solves all their problems to do it that way as they can shade it or just compile a jar of it which ever suits their needs
all the while compiling their project
or change the order you list your repos
either changing the repo ordering or change the dependency ordering
all three of these things should really do something to solve the issue 😛
I swear learning java basics would speedup it 1000x, Have you debugged if ur equals works or not? mayby u could try to check how equals is done in persistentdatacontainters ?
you could do your own checks, compare if itemstack is similar and has same persistent data for example
bro i read the spigot api but i can understand what im suppost to do
Do you know basic Java?
Can you give me an example of not knowing what you’re supposed to do? Like what are you trying to accomplish?
im trying to make sure that the item the player is holding is the custom item and i also have a problem where if i place a any block it opens my gui
the code is here
did you set any data in the PDC?
no
this is my custom item code
ItemStack item2 = new ItemStack(Material.NETHER_STAR);
ItemMeta meta2 = item2.getItemMeta();
meta2.setDisplayName(ChatColor.GOLD + "Revive Token");
ArrayList<String> lore = new ArrayList<String>();
lore.add(ChatColor.DARK_PURPLE + "Revive A Player");
meta2.setLore(lore);
item2.setItemMeta(meta2);
Revive_Token = item2;
If you set no PDC data it is empty
you are comparing an empty PDC with an empty PDC
how do i set a PDC
?pdc
I already linked it before
Hi! How can I check whether an inventory object is the same as another inventory object?
Objects.equals(inv1, inv2) doesn't seem to work for this.
I understand that I'm able to get the title of the inventory, but this would create issues when two inventories share the same name. Any ideas? Thanks.
==
Objects.equals should work tho
im trying to compile this one project but I get no pom file error, however it is there, im wondering where should I put it so maven can find it? This is my workflow file
try to add --file pom.xml
to your workflow command
This doesn't make any difference when testing
oh u did
yah
i was thinking maybe if i fixed the pom warning i could also fix this
is there 3.3.0-SNAPSHOT for maven shade plugin on maven central ?
i can't seem to find it
try to remove -SNAPSHOT
from what
- name: Build with Maven
run: mvn -B package --file pom.xml-
name: Resolve .jar name
id: prep
run: |
JAR_PATH=echo target/Mammoth*.jar
JAR_NAME=basename ${JAR_PATH}echo ::set-output name=jar_path::${JAR_PATH}
echo ::set-output name=jar_name::${JAR_NAME}
-
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.3.0-SNAPSHOT</version>
but u have snapshot repository tho, idk might worth a try
y
Should work if you compile using mvn install make sure you have maven on your computer!!!
Craftbukkit doesn't ship with local or broken deps so I highly reccomend making sure you have maven setup and installed on your system
but people like to be lazy and use the one provided by their IDE
it makes too much sense to install maven outside the IDE
god, yes
i have it (!!!) and also the local repo in ~/.m2
once again everything compiles just fine inside the buildtools clones
but i want my fork
i'm honestly just considering running buildtools once and then setting the git remote to my fork for craftbukkit and never running it again
why can't this process be more streamlined
i'll be in my room crying if you need me
nothing works there are errors everywhere!!! rahhh!!
what's the difference on using enums and using an interface, example:
found this in alex's datacontainers api
i dont see an advantage
well how are you gonna make an enum of PersistentDataTypes
each constant has a different generic signature and a different backing implementation
yeah i think the most obvious answer is enums dont support generic type parameters
@river oracle
check these logs out and tell me what i am doing wrong
bruno@arc:~/Documents/Dev/Spigot$ ls -lha
total 12K
drwxr-xr-x 3 bruno bruno 4,0K velj 19 19:08 .
drwxrwxr-x 5 bruno bruno 4,0K velj 18 23:31 ..
drwxrwxr-x 8 bruno bruno 4,0K velj 19 19:14 buildtools
bruno@arc:~/Documents/Dev/Spigot$ git clone --recursive https://hub.spigotmc.org/stash/scm/~brunoooooooo/craftbukkit.git
Cloning into 'craftbukkit'...
Username for 'https://hub.spigotmc.org': brunoooooooo
Password for 'https://brunoooooooo@hub.spigotmc.org':
remote: Enumerating objects: 76513, done.
remote: Total 76513 (delta 0), reused 0 (delta 0), pack-reused 76513
Receiving objects: 100% (76513/76513), 11.48 MiB | 1.02 MiB/s, done.
Resolving deltas: 100% (43187/43187), done.
bruno@arc:~/Documents/Dev/Spigot$ cd craftbukkit/
bruno@arc:~/Documents/Dev/Spigot/craftbukkit$ ./applyPatches.sh ../buildtools/work/decompile-latest
Patching net/minecraft/CrashReport.java < net/minecraft/CrashReport.patch
patching file net/minecraft/CrashReport.java
Patching net/minecraft/world/effect/RegenerationMobEffect.java < net/minecraft/world/effect/RegenerationMobEffect.patch
patching file net/minecraft/world/effect/RegenerationMobEffect.java
(... blah blah ...)
bruno@arc:~/Documents/Dev/Spigot/craftbukkit$ mvn install
(... blah blah ...)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.592 s
[INFO] Finished at: 2024-02-19T19:16:37+01:00
[INFO] ------------------------------------------------------------------------
bruno@arc:~/Documents/Dev/Spigot/craftbukkit$ cd target/
bruno@arc:~/Documents/Dev/Spigot/craftbukkit/target$ java -jar craftbukkit-1.20.4-R0.1-SNAPSHOT.jar
Error: Unable to initialize main class org.bukkit.craftbukkit.Main
Caused by: java.lang.NoClassDefFoundError: joptsimple/OptionException
buildtools are in Dev/Spigot/buildtools and they have been run prior to this
?1.8
Too old! (Click the link to get the exact time)
is it possible to move player out of world to another without triggering PlayerTeleportEvent?
Unrelated to current convo
Bruh why did bukkit api give enchantments such weird names now everytime I want to enchant an item I have to go on the javadocs to find its name
It matched internals at one point
LOL sorry
yeah i was confused as hell
it's totally untested but it should work
Guys how do i set a varible to an argument of an command so i can use it in the same file but in a listener
in a listener to what event?
You need to use the bootstrap jar
?bootstrap
Bootstrap Jar
The main spigot-1.18.jar is now a bootstrap jar which contains all libraries. You cannot directly depend on this jar. You should depend on Spigot/Spigot-API/target/spigot-api-1.18-R0.1-SNAPSHOT-shaded.jar, or the entire contents of the bundler directory from your server, or use a dependency manager such as Maven or Gradle to handle this automatically.
Please read the release notes for further information: https://www.spigotmc.org/threads/9-years-of-spigotmc-spigot-bungeecord-1-18-1-18-1-release.534760/#post-4305163
You'll be looking to run craftbukkit-balhbalh-bootstrap
PlayerMovementEvent but im trying to use the command to change the color of the particles
yup it works
you shouldn't and can't access the command inside a listener
no i ment
LOL if you wanna store something you gotta use them
fml
You can always store data without pdc
and then the player leaves and everything crashes and burns and resets
I mean you could use a Database but that's overkill
you could use a flatfile but thats stupid
why not use PDC
@zinc moat what you wanna do is, inside your onCommand, access the String[] that's passed to it, and then cast the CommandSender to a Player and set a PDC value on the player containing the desired argument from the command
but I do recommend it
then, in the event listener, access the PDC and based on its value set the particle you want
i have no ideas on how to do that
hi im having this issue when adding VaultAPI to my plugin:
[19:38:13 ERROR]: Error occurred while enabling PlutoTools v1.0 (Is it up to date?)
java.lang.NullPointerException: Cannot invoke "org.bukkit.plugin.RegisteredServiceProvider.getProvider()" because "rsp" is null
at net.plutocraft.plutotools.PlutoTools.setupPermissions(PlutoTools.java:218) ~[PlutoTools-1.0.jar:?]
at net.plutocraft.plutotools.PlutoTools.onEnable(PlutoTools.java:131) ~[PlutoTools-1.0.jar:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:281) ~[paper-api-1.20.1-R0.1-SNAPSHOT.jar:?]
at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.enablePlugin(PaperPluginInstanceManager.java:189) ~[paper-1.20.1.jar:git-Paper-196]
at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.enablePlugin(PaperPluginManagerImpl.java:104) ~[paper-1.20.1.jar:git-Paper-196]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:507) ~[paper-api-1.20.1-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_20_R1.CraftServer.enablePlugin(CraftServer.java:642) ~[paper-1.20.1.jar:git-Paper-196]
at org.bukkit.craftbukkit.v1_20_R1.CraftServer.enablePlugins(CraftServer.java:553) ~[paper-1.20.1.jar:git-Paper-196]
at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:635) ~[paper-1.20.1.jar:git-Paper-196]
at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:434) ~[paper-1.20.1.jar:git-Paper-196]
at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:308) ~[paper-1.20.1.jar:git-Paper-196]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1100) ~[paper-1.20.1.jar:git-Paper-196]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:317) ~[paper-1.20.1.jar:git-Paper-196]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
can someone help?
sure, you want me to provide my code?
Alrigth thanks
💀 its so stupid that its funny
i'll comment it out so you understand it, so read the comments
Will do.
its the same tho
SpigotMC maintains the Spigot server. If you are using a fork of Spigot (such as Paper, Airplane, Purpur, or other derivative works), you should seek support in the appropriate Discord servers.
but in my situation weather its paper or spigot it doesnt change
how do you know?
and why not in the paper server?
i asked in both
so wait for an answer and don't expect one from here
They got an answer in the Paper discord
I need some help with the PlayerInteractEvent, it will be fired 3 times instead of 2 times.
It will be fired 2 times for the main hand and one time for the offhand (which i will check and end the function there).
But i don't understand why it will be fired 2 times for the main hand. Any ideas ?
what are you interacting with and how
It’s hard to answer a programming question without code
Oh no! You ran into a problem. But no worries, people are willing to help, but first they need to see your code. This is because otherwise, they would be providing help based on guesses instead of concrete knowledge. Whether it be a compile error, runtime error, or an unexpected output, I'm sure that if you were to provide code, you'd receive a quick solution.
Its not fired 2 times for the main hand. You probably registered your listener twice.
@EventHandler
public void playerInteract(PlayerInteractEvent event) {
if (event.getAction() != Action.RIGHT_CLICK_BLOCK || event.getHand() != EquipmentSlot.HAND) {
return;
}
Bukkit.broadcastMessage("test");
}
Right click on a block with main hand.
No, it's a registered once. That is the strange part.
If i had i registered twice the event should be fired 4 times instead of 3 times, right ? 😄
Well if you see 2 messages then you will receive the event 4 times as you filter out the 2 offhand occasions
I already checked that and removed the if.
Then i get 3 messages, two for main hand and one for the off hand.
Maybe found the issue, let me debug that quickly.
Is there a way to reduce this "lag" or jerkiness of teleporting an armor stand in the player move event?
Dont teleport it. Mount the AS on the player.
i thought of that but the nametag glithces into the player
Add an intermediate invisible mount.
i'm here to break the ocp
and ask about tcp
Simply use sockets in java. They use TCP unless specified otherwise.
*If thats what you want to know about TCP
Found the issue, the example above was minimized, because to many classes are involved.
The event will be fired twice for the main hand if change the item in the main hand
inventory.setItemInMainHand(itemStack);
no that's not
problem is i'm on c# rn
ItemStack finalItemStack = itemStack;
Bukkit.getScheduler().runTaskLater(plugin, () -> {
inventory.setItemInMainHand(finalItemStack);
}, 1L);
Would fix the issue, but is that the right way ? (looks more like a workaround.
as i can see, tcp clients do establish a connection first
C# has a similar socket system iirc
then its super tall lmao
Use a different entity then
There you go 👍
anyways
it's kinda harder than just sockets
one sec
By default currentPlayers = 1 (it's the host himself)
Player 2 opens a Lobby List window and requests all lan servers to send their parameters. When he gets the data, i spawn several objects which represent found lan servers
Player 2 tries to connect to the server -- game opens NonHostLobbyWindow for him
Server adds player to playerlist, spawns a gameobject in host's lobby window and sends notification packet to all currently connected players, so they also update their lobby windows```
Are you using some sort of game engine or is this just C#
as i learned, i need a UDP client in the beginning
i'm setting it up on unity
but doing it using default c#
System.UdpClient
System.TcpClient
System.IPAddress
and so on
send and receive are also plain c#
but i run unity code when receiving a packet
Alright. jfyi Unity has a Netcode for Gameobjects api which lets you use one whole abstraction layer above TCP
yeah but it kinda sucks at LAN
and that's a giant problem for me
Netcode For GameObjects doesn't provide NetworkDiscovery
unity provided it before Netcode For GameObjects
and gonna add it in future
but right now it doesn't exist
So i do it myself using default UDP and TCP clients
at least for lobby section
i'm gonna inject Netcode to the process later on when All players would actually spawn in server realm
rn i'm doing it this way:
server has endless while(true) where it receives all UDP packets
that's how it reacts to somebody refreshing the lobby list
the player sends a UDP ask packet each refresh
server responds with ping and name and other stuff
so many messages
ok ok i'll collect next ones
So, player gets responses over UDP and builds up a list of all available servers.
Then when he decides to join any server, i WANT TO establish a TCP connection between server and player and temporarely disable his UDP client unless he leaves the server to search and join another one.
Then when i have some kind of Connection object, client can speak with host directly, and also it's easy to check if player's game crashed so connection is lost.
what do you mean disable udp client?
UdpClient.Dispose()
default c# function
then i can just do client = new UdpClient(stuff) again, so player starts listening to UDP responses again(if he pressed a refresh server list button of course, so player would ask for responses at least)
So, I saw some debate a while ago about which method is better to set a block, setType or setMaterial, and I'm just wondering, how do you go about determining which methods are better than others?
(I'm talking in general not just the example I gave)
timings
on large operations
there is a giant post on spigotmc about how developer made async X million block replacement very fast without any lags
He avoided both setType and setMaterial afair
yeah by using nms
yeah
and doing a lot of potentially unsafe operations
he messed up with lighting and some other stuff to speed the replace up
yeah minecraft lighting is very slow
if it works, it works™️
so is this even a right approach to LAN multiplayer server listing?
where you just ask the lan if there are some servers currently online
?paste
I keep getting a buildtools error when building 1.8.8
https://pastebin.com/rSYwyCWf
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
That sucks just have to update then
you don't have to get rid of it, its a stateless connection so it isn't like nothing else could listen on that port or use it
?1.8
Too old! (Click the link to get the exact time)
doesnt work with lastest either 💀