#help-development
1 messages ยท Page 359 of 1
redstone may break if you run it on spigot.
most of the stuff spigot does async is chat messages and pre login
Never seen it happen
what are the differences in the spigot plugin api, paper plugin api and purpur?
the spigot plugin api will run on all server softwares.
purpur is just papers api, spigot uses strings and naming conventions, paper use bullshit and adventure components
but why would i use paper api and potentially give up some compatibility?
and everything thats forked from spigot will also run spigot plugins
if you need paper features but want spigot compat use paperlib
if you dont care
because paper api has more functions
what exactly does the paper api provide that spigot does not?
not really the place to ask
sorry if i am asking too many questions but i am sort of curious and might even say eager to learn.
idk , but basically everything thats in the paper api is built on top of spigot
from peopel that have bstats enabled there are currently 126,742 paper servers and 176,652 spigot/bukkit servers
if paper is a fork of spigot does that mean that out of 180k servers 120k are paper?
different thing, different name
spigot is the server software, bukkit is the api, craftbukkit is the impl
or are those stats separate
seperate
i see
each fork reports as it's own
spigot is the name of the software that packages the bukkit api?
and craftbukkit is the implementation?
what does it mean when you call it an implementation?
can you elaborate more?
in bukkit a load of the classes are interfaces
implementation is the code which runs
i see, so an abstract layer of sorts between minecraft native source code and bukkit?
yes
as minecraft source code changes, the craftbukkit implementation is adjusted.
providing an api for bukkit developers to use and maintain.
yes and the api stays mostly the same to achieve cross compat
intriguing.
๐ sadly
you dont get to talk paper boy

i have recently been trying to learn modding with fabric and i recently got to learn that the minecraft source code tends to change a lot.
yeah
i see the importance of craftbukkit.
yeah a lot of changing code has up and downsides but for modders and plugin devs its mostly downsides haha
but if i were to ask, what server software would be best, i suppose there might not be an universal answer in this case.
that might have been one of the reasons i decided to ask these questions.
no not really
but which would you prefer?
like I said if there was one best version everyone would use it
Well if you want pure vanilla experience, fabric
I personally have a paper server but I make plugins using pigot api
i personally use paper servers as well with spigot plugins.
but what about purpur?
has very specific stuff if you need it
havent really used it much, cant say
the new server software that aims to be highly customizable?
what are your thoughts on that?
i never used it
theres so many forks of paper its hard to keep track of
not big enough to matter imo
purpur is getting somewhat big
big how
its a nice fork with a somewhat specific userbase target
those are the things we steal and put in our lib
yeah i have seen people use purpur a lot recently.
as in terms of popularity?
yea
by the way, might be kind of off-topic for the theme of this discord server?
this is on essx
purpur is one of the (if not THE) largest paper forks
but since minecraft modding is pretty popular, is there an api that i could use to create minecraft mods, as sort of a well-maintained abstract layer perhaps?
sponge I guess ?
i tried to do modding with fabric and it is so much more difficult compared to making plugins for spigot.
sponge?
did tunity get merged into paper
Yep
i dont find fabric too hard tbh
Sponge is the bukkit of forge
well modding tends to be more complicated because of what you can do with it
its just reverse engineering the source code that is difficult.
?
the way I see plugins can only really extend vanilla features while modding can actually create new ones
and minecraft is pretty complicated in terms of its implementation of its gameplay.
I personally find Mixins and the lack of a proper event handling API to be the main painpoint of modding
plugins mostly modify behavior, not state in a large sense, is how i perceive it.
yeah I like plugins because of their events
but I like modding in terms of possibilities
yeah, the event based api is kind of easy to work with.
However as someone that is modding some other game written in java, I can fully understand not taking the time of adding hundreds of events. It simply takes far too much time
i really prefer event based programming lately.
even in node js, i prefer libraries that have abstract event based programming.
Hey, where is information regarding secure/not secure chat messages. Is it even worth making chat messages be secure?
not worth it
what game is it?
yes but keep in mind that with everyhting being event based you can lose sight of the actual structure of what you are making
if it is appropriate to ask?
Galimulator, I can safely assert that you haven't heard of it because it's community is TINY
All I needed to know. Doesn't really affect much anyways
i think a good understanding of game mechanics should be important.
well yeah but thats not really relevant to what I said
Well I personally am only working like 10% of the time of actually implementing api stuff
yeah, um, might be the first time i am hearing about it.
I was talking about the structure of your own code
70% goes to the buildchain and the remaining 20% goes to fixing bugs and updating stuff
yeah, event based programming might have its upsides and downsides, depending on what you are implementing, but it makes it so much easier, overall, is what i have found.
yeah
I agree
I use a combination of event based and just normal OOP and a sprinkle of functional programming in some classes
just depending on what part of the code needs to accomplish
OOP is sometimes pretty complicated though, abstract classes and objects, templates or generics, that is probably why I find modding so difficult.
I usually write from the perspective of using the code which can make certain methods seem cluttered
yes so I try to minimize that stuff when writing my own code and only use those things you mentioned at the edges of where my code touches the api
Meh that isn't something I have found to be particularly complicated in practice
but like generics and abstract classes are just something you need to know in general
maybe you know more acquainted with reverse engineering other people's code i suppose.
i personally do sometimes find difficult to work with apis that are might be very subjective and abstract and don't provide much context for how things work.
i struggled with python django for that reason, back when i started out with web development, since i did not really know how the web really worked.
but it might be easier to work with since it may have a lot of abstractions and methods in place to make the code less repetitive perhaps and prevent NIH syndrome.
i get that
my whole plugin is NIH since I dont use any libs other than the default one under the guise of trying to learn how everything works for myself
and for fun ofc
but like ultimately it just takes me more time to debug implementations on systems that other people have already made that work perfectly fine but that I want to implement myself just for the sake of it
I myself am sometimes kindof forced to reimplement other libraries
Sponge's Mixin and the Eclipse's Aether (the maven resolver) are the two largest libraries that I am currently rewriting/reimplementing
And let me tell you: It's not a weekend project, it's a project of a lifetime
Hi, I do not set values for the armor stand. How can I solve this problem? Works only .setLocation(); (Version 1.16.5)
EntityArmorStand stand = new EntityArmorStand(EntityTypes.ARMOR_STAND, world);
stand.setLocation(location.getX(), location.getY(), location.getZ(), 0, 0);
stand.setSmall(true);
PacketPlayOutSpawnEntityLiving packet = new PacketPlayOutSpawnEntityLiving(stand);
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);```
Hello
Does anyone know what I need to give in the constructor with the PacketPlayOutRespawn in 1.19.3?
Where can I find the ResourceKey<DimensionManager> and the ResourceKey<World>?
https://imgur.com/a/URbiqMN
Its not spawning, right?
For non living entities you need to use PacketPlayOutSpawnEntity packet.
Whats your server version?
this implies there is an appropriate alternative ๐
there is an alternative to events, but that isn't really something you should incorporate into your application unless its strictly back end services stuff or provides a service
My server version 1.16.5
No, it is spawning, but it is not small
ok, you dont need to worry about the entity ID then.
you need to send a Metadata Packet.
PacketPlayOutEntityMetadata
Note: after the spawning packet
aren't minecraft plugins technically back-end network services stuff?
Hi guys
bukkit api is just an abstraction layer.
oh no - services...
they can be, but no. a Service back end wise would be something that is designed to provide for other servers. In which case such a thing when you wanted to be notified of changes you couldn't use event based
Don't touch services
what is the term services supposed to mean?
when people say back-end services for servers?
servers for servers?
Which is better for your business, Event-Driven Architecture or Service-Oriented Architecture? Which will deliver the best value for your team? Here's our whistle-stop discussion on this subject.
i have sort of just known and used that term but did not really exactly what that meant.
i am learning so many things just by talking in this server.
You shouldn't follow that paradigm - whereever it is used there is hell
outside of the context minecraft plugins even.
Although sometimes you don't have much of a choice I guess
listen to geol, he knows ๐
but yeah sometimes you don't have a choice though
usually you want to stick to Event Driven when possible, but once you start crossing the barrier of having multiple servers working together to provide a singular thing
it doesn't quite work anymore using event driven architecture
so you have to use a different design. SOA is just one of them
thanks!
would a database be an example of a component that is service oriented?
Depends which database, SQLite for example is designed to be ran in an individual application and not shared across multiple applications or processes
Hey, I have a question.
Can I make a spigot plugin which can listen to any stuff I send it from a proxy (bungeecord plugin) therefore I can technically code stuff once and it will apply to all servers which have the received plugin
but something like MySQL you probably could
aside from sqlite but you can technically have multiple applications interfacing with the same sqlite database though
yes and no
You may want to explain further there
but then again, just use mysql for that.
but it is technically possible, is what i was trying to express.
I actually just thought about what I wrote and I can't seem to really understand why i would need what I said in the first place. Let me think about it a bit more
If it is what I think you want to do: It's possible, but you don't want to do it
without using a custom driver, yes you would need an application to be the medium between the other applications and the SQLite DB
you might be able to just use something else to make a separate api for that?
Why am i not receiving the RIGHT_CLICK_AIR action in my PlayerInteractEvent? Is that a know bug?
but elaborate more.
it is more likely in how you are listening for it, show your code so we can detect and inform of such ๐
?paste
Im logging the action type and it does not log anything when im right clicking in the air
or maybe not.
show your code inside the event please
what does that mean?
@EventHandler
public void onClick(PlayerInteractEvent event) {
System.out.println(event.getAction());
}``` its literally this (i commented out my real code)
what do you consider advanced
the most complicated thing you know about.
sqlite is def not a service. It's a part of the application itself. one of the purpose of services is to make them independent
my plugin ๐
it is logging all types except RIGHT_CLICK_AIR
Ok I got it now.
I know this is possible but I'm wondering if it is how I think it is
Proxy plugin:
- Has a bunch of commands made to be used on the entire proxy
- If I want to add new commands just add the logic in the proxy plugin
Server plugin:
- Just has the ability to receive the information from the proxy
- Will automatically work without updating if I add/remove commands and stuff from proxy
right click air probably only work if you use an item that has an interaction like a map or a bow perhaps
Is this how it works? Or do both parts of the plugin need more advanced logic and need to be updated parallel
but im not an expert on that event
@EventHandler
public void onClick(PlayerInteractEvent event) {
System.out.println(event.getAction());
}```
Why is this code not receiving the RIGHT_CLICK_AIR event?
Also note, that RIGHT_CLICK_BLOCK is always logged twice for some reason
this is probably going to be hard to really answer because this is really dependent on ones skills. For example, I have created back in the early 2000's my own mini super computer where I could run 30 WoW instances all at the same time with no problems. Required a custom bios and I soldered I think 10-12 Motherboards together using 128pin ribbons.
speaking of proxies, i dont know a lot about those either.
So basically you have a virtual machine on the server and the proxy plugin sends commands to the server which the virtual machine then executes?
but, that is hardware more then programming aside from the custom bios
Spigot plugin. so like a bungeecord-spigot network
interesting because i did not understand some of the words and acronyms you used there.
but interesting.
In that case, very much possible thanks to plugin channels. The dumb approach would be to use SSVM and to give SSVM the raw event event fire hose
sounds like you just want to make an api for your own plugin
Alternatively you can just load anonymous classes through the sun Unsafe that then execute the code you want, but eh
very active chat right here
Having proper APIs is the best approach, but won't be nearly as univerally applicable
maybe there should be 2 help channels
I see geol
Nah, won't help that much
when I say api it could literally just be a few interfaces
threads exist for a reason
I've never done any bungee dev so I was just streching all I really know is messagingChannel
that won't do anything on it's own
thats by far the easiest way to keep your implementation separate from how you use it
well yeah
Not receiving RIGHT_CLICK_AIR event
but I dont know enough about they want
WoW = world of warcraft.
bios = is the thing before UEFI became popular basically its the architecture in how your OS knows where everything is at. (Basic Input Output System)
128pin ribbon = the cord attachment used. Like there is sata connections etc, well 128pin ribbon, means there is 128pins which you need a 128pin connecter for. Typically used for serial connections etc.
They want a virtual machine on the server
So wait, you're telling me the way people make bungeecord commands that can be ran from any server is by putting the command logic inside the server plugin not even the proxy
nono
Of course they don't say it by name, but they want a virtual machine
Or a proper REST-style API at the very least
oh.
ok.
WAIT, you made your own computer?
I think you are forgetting that you can connect plugins or make socket connections directly to each as well
that could run 30 World of Warcraft instances?
Yes
True but does that mean the logic can literally go in the proxy and then pass that information to the server plugin?
i am not sure how complex of a game world of warcraft is in terms of how much of performance it demands, but that sounds really interesting.
it had an overal 25-30Ghz of processing power and like 40Gb of ram I think
Like what I'm wondering is if one can just make a receiver plugin that receives all information from the proxy but can also run locally or network wide
Yes, if the server plugin knows how to interpret the information
WTF?
Oh so then the logic also needs to go in the spigot plugin
And that interpreting thing is the complicated part
So wtf is the point of the communication then
You CAN use a virtual machine to do that, but it is extremely overkill
40 GB of ram is a lot these days, back in the early 2000's you say?
I understand how bungee works and the proxy style just can't understand bungee dev
mans just copy pasting pcs into a big blob of processing power
oh yeah, there are different speeds of ram, like ddr3, and ddr4, nvm.
You can forget the entire idea without communication
remember I soldered 10 Mobos approximately together ๐
ah, okay.
so each mobo has a slot and ability to assign IRQ's for the ram
but more impressive than this sounds
you said around 40GHZ of processing power?
dang
each mobo had on average a single CPU, with a couple I think that had 2 slots for cpus
Yeah how do u solder 2 motherboards together wtf
divide and conquer
The power of zip-ties!
And a bunch of cables
Velcro is I would use for that job tbh
No, my setup is what you consider a Multi-CPU setup which is different then a multi-core setup. Multi-CPU mobos do exist and are still a thing because Multiple CPU's are better then multiple cores. But when you have a system that has multiple CPU's, you add up all the speeds of the CPU's and that is your overall processing power
I soldered 128pin connectors to use 128pin ribbons
so that each mobo could see each other
Is that like a thing people are supposed to be able to do and people know they can do
add up or run them in parallel?
Or was that some evil genius job
Multiple CPU's are better then multiple cores -> bus speed says no if you want to distribute a task. Also no L1,2,3 cache between multiple cpus
It is just something that takes time
most people don't know how to do this, nor would I expect most people to even know how
I think I messed up like 5 mobos in the process
by not soldering in the right spots lmao
i know about motherboards that allow more than one cpu.
but i did not know people did that.
so, comparing it to a modern cpu, lets say the i9 9900k, how would they fare against each other?
Well, its no different if you went to school to learn computer engineering or learn how to program PCB's
etc
i know computer science but not much about computer engineering.
i am learning new stuff here.
the i9 would probably be better mainly due to modern architecture and extensions that could be taken advantage of that the older CPU's wouldn't have plus, unlike with multiple cores, you can't really have more the one cpu working on the same thing
where as multiple cores could
you can learn more than just minecraft in this discord server, i recently discovered.
What gave you the idea to do the combining of the motherboards and how did you learn to do it?
the only thing that my setup from the past would probably excel at would be long running tasks that could be split between all the CPU's
in which case you could use all of the processing power more effectively
why wont you be able to use a multicore cpu for that?
why would it be better?
is it because of thermal efficiency?
or power efficiency?
How i can make commands with autocomplete like most vanilla commands? I already done this on clientside as fabric mod but and i want to do something like this in spigot plugin
trial and error and I had friends where we would make stuff like this. The hard part is just finding appropriate schematics to know the exact layout of a motherboard so you know where you could attach pins to do something. Attach pins in the wrong place and bad things happen usually, either from killing the mobo, killing other hardware like the cpu, or burning out quite a lot of the caps and resistors. Worst case scenario it lights on fire ๐
they may not exist at that point
Or at least not in a capacity as they exist today
multi-core cpu can only be so fast, and as you mentioned you have the issue of thermals.
but either system has its pros and cons
The onTabComplete method or use Brigardier like you do it in fabric
If this really interests you, then you should look into HPC
Only issue is that Brigardier integration in minecraft world is more finicky
Can anybody explain me how the hell minecraft sends huge block updates with for example structure blocks from server->client without lagging? My client is starting to lag with multiblock updates at around 100 blocks already
i know but they stated that the splitting the task between multiple cpus might be better than multiple cores of a cpu.
i see.
HPC?
high performance computing I think is what they are referring to
multithreading probably for that?
High performance computing
Its all about clustering nodes/compute units
client
oh client
how i can define brigadier command? In fabric i register command in event with dispatcher arument
that is because of your limited cpu power or gpu power.
limited hardware processing power.
The data is sent only once and then stored client side in the structure
no clue. Gotta hope the other guys on here know
client has to do a lot more than a server.
like render stuff, for example.
on a screen.
At worst I could just ping mfnalex, he's sure to know - but I think you are sure to find a solution by googling it
play sounds on your speakers and headphones.
Well it needs to get rendered still. When im updating once with 100 blocks, the client is literally crying. Just gotta render the fake blocks
clients do a lot more than servers.
well also have to keep in mind that with a single CPU and multiple cores, that resources are being shared, in a multi-cpu setup some resources are not being shared. For example in my mini super computer setup, I could if I wanted allowed each mobo to act independently while still being together because they each have their own hardware and resources etc
oh
might be your gpu?
This problem occurs because the client also processes light updates and similar nonsense.
What is your spigot version and your overall goal?
clients dont process lighting updates?
they are processed server-side, pretty sure
Where the motherboards running 1 os combined or they were all on their own? Or you are saying you could swap between these states?
because of mob spawning and all that
ofc they do
I am surpressing light updates with player#sendBlockChanges. Im running 1.19.3 and need to send a lot of blocks to the client to render them fakely
how else do they display light
My setup, they all ran under a single OS, therefore the only things that were independent were the CPU's with everything else being shared.
Are you constantly adding and removing them or do you just need a big chunk of blocks to change?
ok i think we might be talking about different things here nvm.
but you could still have them all independent on a single OS, just not windows ๐
yeah clients process lighting updates, as in render lighting.
not sure if they also process light maps though.
for mob spawning and stuff.
in the game.
not sure bout that either
I am constantly changing. Sending one at the same time would spike already tho
no the server spawns mobs
lighting updates are very expensive to compute
perhaps the most expensive computation that occurs when you break and place blocks.
the client just uses the light sources to calculate the light levels etc iirc
yea i believe so
Describe your idea pls. I think there was a similar convo a few days ago and there might
be other limitations like bandwidth depending on what you are trying to do
or maybe the server sends over the light maps, who knows? I am too lazy to look up.
I believe it is the same convo
They just were unable to resolve their issue
no, the server has enough stuff to do to not worry about some light maps that the client can also compute on its own
server sends the light stuff, but your client still has to receive the packets and render such things
I am previewing big structures, and letting the player move it actively
the server likely has an easy way to determine if a mob can spawn at a block and such things
Have you tried using structure blocks instead?
and the client has similar logoc to work out what lighting should go where depending on what the world looks like
the client executes those blocks?
Well no, but structure blocks won't do some things I need
that would cause a lot of lighting updates probably.
I am surpressing them
lighting updates are very expensive, i do a lot of redstone, i know a bit about that first hand.
Player#sendBlockChanges has a flag to surpress them
u can get around lighting updates pretty easily tho
you may have seen redstone contraptions using powered rails instead of redstone dust, we do that to prevent lighting updates from occuring as one of the reasons.
or observers right?
yep.
Alternatively you could use Minecraft's debug renderer, but I am not sure whether the notchian client support it out-of-the-box
rails might be better because they dont add much delay.
Then dont send continuous updates but discrete ones.
Let the user pick a corner, slowly render the structure and if
the user wants a new display then he has to select a new corner.
That destroys the whole purpose of my system. I have already tried to split the sendings on multiple ticks, but its still spiking
if you are ever finding yourself working on something that requires a lot of blocks to be changed all the time, find a way to prevent lighting updates from occuring.
I dont even know what the systems specifications are so this is all we can give you
why??? i swear those libraries are in central
Caused by: org.eclipse.aether.resolution.DependencyResolutionException: The following artifacts could not be resolved: {name=com.mysql:mysql-connector-j:jar:8.0.32}, {name=org.mongodb:mongodb-driver-sync:jar:4.8.2}: Could not find artifact {name=com.mysql:mysql-connector-j:jar:8.0.32} in central (https://repo.maven.apache.org/maven2)
libraries:
- name: com.mysql:mysql-connector-j:8.0.32
- name: org.mongodb:mongodb-driver-sync:4.8.2
As I have said, im already doing that
this happens on stratup
name: ???
I am using a GTX 1650 on an i5-9600k overclocked and 16 GB RAM
name of what
You have name: in the libraries list
oh
I meant what you are trying to achieve ingame XD
Lmao I was actually confused why my system specs would be relevant lmao
^^
Its previewing schematic-placements in realtime
What type of schematics?
Wdym? I have my own system for schematics
ok. What prevents you from using structure blocks?
well maybe that is the issue xD
yeah it works fine without "name", thanks Olivo
Rotations, animations, realtime replacing. Basicly everything about actually changing blocks inside of the schematic, not just the Position of it
[WARNING] The POM for dev.simplix.cirrus:cirrus-api:jar:3.0.0-SNAPSHOT is missing, no dependency information available
I can't seem to get this to work. I have the repo added correctly and I browsed it to make sure.
[ERROR] Failed to execute goal on project ichest: Could not resolve dependencies for project me.tomisanhues2:ichest:jar:1.0-SNAPSHOT: dev.simplix.cirrus:cirrus-api:jar:3.0.0-SNAPSHOT was not found in https://hub.spigotmc.org/nexus/content/repositories/snapshots/ during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of spigotmc-repo has elapsed or updates are forced -> [Help 1]
[ERROR]
maybe just use a custom shader or something that does not render lights?
I am not rendering any lights, still
uses static lighting of some sort?
They support rotations. What do you mean by "animations"?
no lighting updates occur, regardless of you adding your own light sources.
pulse, the lighting is not the issue
if hardware modifications are something that really interests you highly recommend taking some courses to learn such things. It is actually really difficult to learn such things on your own especially if you lack a lot of hardware for trial and error because you will fail in doing this stuff lol. Back then, you used to be able to acquire a crap ton of computers easily because people would just throw them out, I mean probably could still do that but now there is rules and regulations that stops people from doing this freely in the US in some states lol. So I would advertise back then that I would take their old hardware off their hands for them so I had a lot of computer equipment back then and random stuff too lmao
As an example, lets say a windmill turning. Thats gonna get previewed and calculated correctly, so that you cannot clip into blocks with it then for example
Most important part tho is realtime changing blocks inside of the schematics
Like, for example, setting all stoneblocks to sponge
hey maybe it'd be better if you made a thread for this discussion? otherwise all the other messages will drown here
Ok and what do you need constant updates for then? How often do you update the structure being shown?
a discord thread*
what other messages
this channel is for a lot of people
Did you add the repo as well as the dependency?
Everytime the player causes an action(with a cooldown of course), like moving the cursor to a new block
and this discussion will surely be very long
yes
Yeah I did but that thing seems terribly done so I'm straight up not gonna use it. I believe someone said IF is the best if not self-made one
well if you have any question you are free to ask
bruh
I personally prefer phoenix616's InventoryGUI heh
i might look into it at some point perhaps, i have been interested in pc building, but that is just about it, probably not too uncommon.
Really?
Well then there is nothing left to optimize
I tested a bunch of other GUI frameworks but they weren't great
How big are the structures?
triumph gui?
No clue, I tested out like 4 GUIs I think
xd
just use mine that I will release in a few years
idk which one to use man lol
try them until you find the one for you
Well, minecraft does it too. They are max 10k blocks(thats a hardcoded limit, already knowing that I'll not gonna be able to preview above that in any way)
pc building isn't quite the same in what I was doing lol, you could learn to do that from some youtube videos and just learning that hardware is not always compatible with everything
Since then I use the same one over and over again
IF, ObliviateInvs, Inventory GUI
I made my own gui stuff, basically a single abstract class that I use to create all my other menus
Its pretty decent. But having your own gui framework is superior imo.
May I use that steaf lol
i know, the two are completely different things, its like python and assembly lol.
well if you want to xD
I only really know of IF and InventoryGUI. Those are the two big guys out there
Those are my options otherwise
but like right now its still part of my main plugin that im working on
oblivate-invs is obscure and I've heard about that cirrus thing, but it is still rather rare
Minecraft does what too?
Sending so many blocks
Man it looks so complex tho
They do it by sending entire chunks at the same time
For other things (like explosions), you'll be able to see the shortcomings
exactly
you can look at my code if you want to get some inspiration, but its probably not perfectly done ,but hey atleast it works https://github.com/Steaf23/BingoReloaded
you are working with actual wires and transistors lol.
My util is quite similar to IF
circuits even.
is yours public
maybe not that low level, but requires some understanding of it probably.
it does
you can probably find it somewhere if you look hard enough
however, what makes it easy to understand is if you know how analog stuff works or are familiar with mechanical stuff
while both work differently, the principles are relatively the same
Well then imma calculate the diff serverside and send full chunks?
What prevents you from doing this?
eyes? how do they work
i know some discrete mathematics and that is where i learned about gates and stuff.
I guess you could, but that'd be like super cursed
menu has layers, each layer has elements that are defined by making a selection and applying an element to it
A selection is just an interface with a List<Integer> getSlots
Ohhh thats smart actually. So I'd translate it into them whenever im sending the update, and send it
But does it actually work to generate and send those temp?
yeah just send updates in the form of structure blocks
A layer is just a Map<Integer, MenuElement> and each element has stuff like getDisplayItem and whatever
That's literally it
yeah in mechanical, gates were physical and with digital gates can both be physical or virtual
where'd you create such a diagram btw
but there is probably so much more to it than that, lol.
ty
or maybe that is the gist, then i might have a baseline understanding of things, aside from electrical engineering.
which i dont really know much of besides the very basics of electrical circuits.
it is essentially the gist, except with the virtual you either are listening for another input, or the gate itself is equal to the input itself
which can be hard to wrap your head around
And with a bit of magic you can also support custom functionality ๐
is that vanilla or modded?
or some kind of texture pack?
Vanilla... I should probably continue this project. Was pretty fun
Wait so this adds items that look like the exact elements?
packets presumably?
that looks cool.
Pretty much
Are structureblocks generatable temp on the fly just with input blockdatas or states?? And sendable easily
hmm I only know how to change textures, not how to change where inventory slots are and stuff
looks not much is going on right now, i might ask my question now.
so, i was curious about proxies.
why would you use bungeecord?
not something NGINX or something else?
for routing?
and load balancing perhaps?
Never used them tbh
i am not really super familiar with proxies and stuff or used them a whole bunch but was just curious.
how else you gonna show this in mc
show what?
oh yeah, nvm.
or even tell the client that that ip is a server

Because you have builtin functionality like authentication and cross-server communication.
Also bungeecord is aware of player identities and some game functionality
oh ok.
i use bungeecords chatcolor xD and chatcomponents
so, on the topic of proxies for minecraft, what do you guys use?
Nginx doesn't know random TCP stuff. It only knows the web protocols, not custom protocols built on TCP, in this case minecraft, and how to handle them appropriately. Also webservers are not designed for long running active connections either. So you need something like Bungee, you could use HAProxy if you wanted, but bungee also does something else. It is what allows you to teleport between servers because it hacks the world object for the client, and essentially to the client, all the servers are actually just worlds
menu go brr
nah its fine
oh!
the cross server switching!
yeah might difficult to implement that myself.
But you can do this if you reach your bungeecord connection limit
Is that what redis does?
DNS round robin + a dedicated proxy that routes into bungee
redis is a database? what do you mean?
pretty sure that's what tcpshield does
Yeah this is cool. Ive worked on a server which had pretty similar designs. It released and just died XD
made those menus in like an hour
best part is that it all synchronizes cross-server and all
interesting and do you have a tool for putting those diagrams together like that?
just draw.io
Damn, that looks slick
careful in saying that, to some people dns round robin is bad and should never be used ๐
oh yeah that guy
i have seen a few other proxies though, like waterfall, velocity and there is thing called floodgate too probably. What are they all about and how would they all differ if they do?
samsung
surprised you remembered, lmao
I like internet arguments
it was also on that day where you sent me food money
how do you make those big buttons?
whats the code like
fancy
is there an open source project?
so I remembered from that argument in what I was trying to remember in why dns load balancing is acceptable since they were talking about dead IP's. That is, that is what ip failovers are for, where you can literally re-assign where the IP routes.
man was like "nuuuu my fancy 10k$ switch does that"
lmao
You click on a location and do stuff... its not too complicated.
oh, basically just listening to mouse pointer locations?
but also with like the hover and stuff
but wait, how did you render that?
mc doesnt send exact mouse locations
how did you render it like that in the first place?
assign a custom character to a png and put it on the gui title
then the slots and all are just lore
on invisible items
old school: Retexture items and place them
new school: Replace font characters with textures and rename the inventory
damn thats pretty clever
but how do you remove those slot outlines you get when hovering over an inventory
wait
i did not get that
the outlines apply directly to the item texture and not the whole slot
if you make the items invisible, or like a 1x1 transparent pixel, you don't need to worry much
you are basically assigning custom textures for each character in the inventory title and rendering that?
oh
anything dynamic like 7smile7's need multiple
and how do you detect the location of mouse clicks?
math probably
buttons are matched to slots underneath
how would you handle people clicking that tiny gap between items
OH, the image renders over the inventory slots?
What resolution can these get max?
yeah
this is pretty elaborate.
there is specific sizes to make them fit for the slots, but like I don't think there is really a limit for the actual textures because you can make them go off the screen XD
i have probably never seen this before and it may even be the first time and might even be learning something about how about i could use it!
But you might need to define characters with negative size to properly shift the images to the left or up.
It has been quite the hustle to build a proper abstraction over all this gui stuff.
I just make a very good GUI system
and a very good shifting system
and then try mixing them together
and manually align stuff a bit
sounds like a lot of work.
yeah I can imagine haha
would be nice if you could do up some documentation for the public if there isn't any already lol
like the concept, not necessarily code wise stuff lmao
yes I would love to read more into this too
I think that is going to be my next website, just a collection of documentation on concepts
Does anyone have a example of a GUI setup they made using IF XML format
ew XML
why would you want to make GUIs in XML
what is wrong with XML?
Yeah i got it working now as well. I can now pixel shift an image with leading chars
Because IF offers it and it's shorter than in code?
I still wonder how people can render a player's skin in game
what is wrong with that? You already make websites with XML?
Like YAML, XML is just a specification
so if someone wants to use XML I don't see anything wrong with it
iirc the IF github has examples of uis and their xml code
Im stoked for this
Yes it does
ye
There isn't anything necessarily wrong with xml, it's just theres many better alternatives
But it doesn't have examples with XML and then interacting with code
That's what I'm looking for
sounds like they're remaking a feature that has already been a thing
Like I see the field parameter and all
I'll let the community enjoy it for a bit before I go out there and master it
armor stands and all
Ah
most of it is based on preferences and what you are comfortable with
But can you change the scale of blocks with armorstands? ๐
i might prefer XML over json.
xml is supported natively in quite a lot of stuff as a specification too
json might be more compact though, in terms of file size.
retextured slime ๐ค
Does anyone have a example of a GUI setup they made using IF XML format.
Specifically how to interact with the gui elements added from the xml file in the code
people already use shulkers to offset blocks
<super-useless-info>I despise xml.</super-useless-info>
working on this now
so lastly if I understand this correctly, with buttons like you shown, the slots are actually laid out somewhat like this right?
but isnt there like a small gap between each slot?
that gap is smaller than you think
that would look ike
{
"super-useless-info": "despise xml."
}```
in json.
okay so its like not noticable
looks good to me ๐
i dont really like yml.
thats why yml is good for human input
and xml, json is better for pc to pc communication
reminds me of python and i dont really like python a lot right now.
imagine liking scopes being separated by spaces/tabs
i am not particularly a huge fan of python syntax.
json is in fact designed for that, don't know about xml
I mean thats already how we write books
well it's human friendly
well xml is designed for god knows what
but I dont like to write xml by hand
it's more beginner friendly but has less potential
maybe, but it isn't designed for storage, it is designed to be compact for sending information
but just note that yaml is a superset of json
xml is the html
yeah, but aside from that, not really a fan of yml for storing information.
does anyone here prefer python programming?
no
shouldn't be doing that either
Does anyone have an example usage in practice of IF please
syntax-wise.
it's time for us to make config files in NBT format
Not what I'm looking for smile
I have another question about the resourcepack GUI, if I have like a anvil menu I assume the name input field must always be in the same location right?
But now I'm looking for non-xml too
i prefer node js as my scripting language.
main thing i hate about in js is that it doesn't have strict type system, hence autocomplete in ide doesn't work
Make a button which randomly teleports you in a 200x200 radius.
If you are under layer 90 -> First teleport to layer 100 and then only in a radius of 50x50
I'm confused with what you mean
Okay this might be like the stupidest question however I get an unsupported API version which is a little weird considering that the API versions match. Let me know if im missing something thank you :)
[17:11:25 ERROR]: Could not load 'plugins\conquerorskills.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: Unsupported API version 1.19.3
at org.bukkit.craftbukkit.v1_19_R2.util.CraftMagicNumbers.checkSupported(CraftMagicNumbers.java:318) ~[spigot-1.19.3-R0.1-SNAPSHOT.jar:3652-Spigot-19641c7-6aeb5e4]
You giving me a task? lol
me, making a website in java 
front-end of the website or the back-end of the website?
everything
how?
there's this framework called vaadin
Well... vaadin
Not on my screen
but you can overcome them
can browsers run java on the frontend??
it compile to html
it does fancy conversion
or does it compile to javascript?
or js
like typescript or something that.
for example vaadin doesn't have the audio tag built-in
but we can just make it ourselves
I just read something, something practice... So here is a task you can practice IF with ๐
vaadin runs on top of spring
and compiles to typescript, yes
I'm using it for my school's final project
making like MCJukebox but allows people to talk to each other with directional audio
i dont really know much about java web frameworks, not much about spring either.
Appreciate it but I'm looking for something different. I want to see how someone with experience manages multiple menus across multiple classes with IF
neither do I
data structures
has nothing to do with IF
i use node js and express.js for that stuff.
you just need to know how to pass data
I hate literally everything there is about HTML and all
so I do my best to abstract it away
Ah, cant help you with that. Maybe someone that actually uses IF
the only thing I can't do that easily in java is css styling
but vaadin makes it easy by giving me a blank css file I can just edit
you cant get around dealing with html though, and xml at that, if you are doing DOM manipulation, probably.
and I just use tools online that generate css for me
so far I have a livestream audio source with a mute button and a volume slider
0 html code
also a dark theme button
nice but you probably need to deal with actually html and xml for doing DOM manipulation.
or not really
depends on what you are doing.
you can just make nodes.
instead of adding innerHTML.
pretty sure that's what setAttribute is for
java.lang.NullPointerException: Cannot invoke "org.bukkit.command.PluginCommand.setExecutor(org.bukkit.command.CommandExecutor)" because the return value of "org.bukkit.plugin.java.JavaPlugin.getCommand(String)" is null```
what is wrong? I ahve this error for the first time and i don't know how to fix it.
you didn't register the command on plugin.yml
no typos in when you set the executor?
Are you using Paper's new paper plugin api?
probably not
Yeah then you aren't
but this is like lib and it works with other plugins perfect
Might want to double-check for typos, etc.
if I create an AnvilInventory using Bukkit.createInventory(InventoryType.AVIL, name) is there a way I can get the actual AnvilInventory to use getRenameText and the other methods it has?
or how else can I create such a menu an get that functionality
just cast it to AnvilInventory?
okay then I think something more is going wrong
Anvils are cursed
java.lang.ClassCastException: class org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryCustom cannot be cast to class org.bukkit.inventory.AnvilInventory (org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryCustom and org.bukkit.inventory.AnvilInventory are in unnamed module of loader java.net.URLClassLoader @504bae78)
at io.github.steaf23.bingoreloaded.gui.KeyboardUI.<init>(KeyboardUI.java:86) ~[BingoReloaded-1.0-SNAPSHOT.jar:?] at io.github.steaf23.bingoreloaded.gui.PaginatedPickerUI.delegateClick(PaginatedPickerUI.java:92) ~[BingoReloaded-1.0-SNAPSHOT.jar:?]```
ah I see
this.anvilMenu = (AnvilInventory)this.inventory;
what am I looking for in here?
Nah, i just wanted to look how the method is being implemented
I see
https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/browse/src/main/java/org/bukkit/craftbukkit/inventory/util/CraftInventoryCreator.java#27 Yeah, anvils aren't implemented correctly
It's just useless for self-created anvils
I see
However if you use a library that deals with that you probably can use it
https://github.com/WesJD/AnvilGUI among others
hmm
thats a tad annoying cuz I was hoping I could use my own inventory structure with this but I guess not
oh well, thanks for your help anyways
I guess I could just take the renamed item's name but im not sure how that gets created, I assume its just in the item meta at that point
I am checking for if a player has a specific permission using Player#hasPermission but it keeps returning true even though the player doesn't have the permission. I checked with Luck perms and it does not have the permission. I tried multiple permissions, and they all came back as true. Am I using it wrong? Is there something I am missing?
Might want to use Vault as a fallback
Which is actually meant to support permission handling
I thought LuckPerms could handle it just fine, is there something Vault can do that LuckPerms cant?
or is like a backup to verify that LuckPerms is working.
oh wait
if I am op, do I have every permission?
Yes
Vault is a library for dealing with permission management
Alongside economy and more
happens to the best of us
Check how you configured that permission in plugin.yml. Whether a permission is active by default for a certain group of people depends on its configuration
Hey guys, is there a place I can get a list of possible NMS version strings? I am getting the strings using this logic, but it seems the NMS versions don't exactly match up with the minecraft versions.
String versionString = Bukkit.getServer().getClass().getPackage().getName();
String nmsVersionString = versionString.substring(versionString.lastIndexOf('.') + 1);
yeah, nms doesnt always change per mc version
thats just buildtools im pretty sure
this has modules for all mc versions above 1.16
So if I understand correctly, 1.13.X does NOT mean that the same packets will be used across all 1.13 versions. I need to pay attention to the NMS RX version as well
I guess the minor in the version number only applies to api compatibility, not packets?
yeah
Excellent =] thanks a bunch
it just depends how mojang are feeling if they change between patch versions
It sure is a lot of effort to support multiple versions haha, but I think I'm getting the hang of it
Been super interesting to learn about though
But yeah setting up these modules was PAIN INCARNATE lol
I actually haven't used gradle before. If I wasn't a maven guy at work I may have given it a shot
never had to use modules like this before though
ohhh nice, always good to have a resource to look at
yeah haha I'm a maven guy simply because ive used it at work for near 5 years now (and shockingly never had to use modules this way)
a creature of habit haha
depends
The folk over at sponge certainly do not know how to use gradle
gradle files are more like code instead of millions of gradle
Fabric and Forge have similar issues. It is extremely hard to find very good gradle users
Compiling module-infos with Java 16 and the rest with Java 8.
Depending on dependencies they shouldn't depend on.
And then they also have the issue of there being a general lack of people willing to work with gradle
understandable. I both hate and love gradle. Same with maven.
But the community of maven is just about 10 times bigger so you get more support usually
Oh yeah. I actually completely abandoned C++ because of cmake.
Rust has a much superior build system
we are all choosing to ignore sbt is a build system
I just had op and that caused it
Anyone know how I can round a double up to .5 or down to .5? For example 3.2 = 3.5, 4.9 = 4.5
All I figured out was how to round it to 1 decimal number
ohh
its so simple
damn, thanks
true
lol
Is there any way to detect when a permission is added to a player? I want to adjust something based on a permission and a runnable seems too inefficient. Is there an event or a better way to do it?
I wrote a plugin for that., Look on spigot and the source is on Git
Guys, is there a way to do a mass build of multiple spigot versions with build tools? Because of the NMS differences I'm going to need to test not only on each major-minor version, but literally every single patch version as well.
and I REALLY dont wanna run build tools 37 times lmao
could you provide link?
^
thanks
AFAIK, no. Youโll have to run it for each and every version. That said you could just open multiple terminals and run separate BuildTools simultaneously.
that is a fair point, I think I have a solution though
although its still tedious
I don't need to build every version, I only need to build versions where the NMS version changes https://www.spigotmc.org/wiki/spigot-nms-and-minecraft-versions-1-16/
after that, unless I misunderstand
Youโd have to build for every version because NMS changes with every version.
just because the NMS version changes, doesn't mean the packet that I am targeting will necessarily change. So I may be able to use the same packet handler across multiple nms versions
run that file
correcting the java path(s)
lemme take a look here
you can change versions you want to build as well
oh wow, thats one hell of a bash script
theres probably a better thing for that that i dont know of
Maybe so, but youโd have to use reflection at that point since the package names change.
I am unsure how this works exactly, I have shaded a dependency but now maven builds 2 files, the normal SNAPSHOT one and SNAPSHOT_shaded
what's the difference
one is before shading, the other after
so I should always release the _shaded version then?
yeah, just running java -jar BuildTools.jar --rev latest --remapped 
guys i have a problem , i have tried to create a custom command for tutorial with some location , but when i use /tutorial , it teleport me only on first tplocation
as that is the one I was aiming to make by shading the lib
typically it is the other one
oh okay
unless you did something with the naming lol
well I used this readme as a guide https://github.com/WesJD/AnvilGUI
which shades it to relocate it to your own package
then it should be the other one, you can open it to verify everything looks correct if you want too
oh good point
well they seem pretty identical to me lol
the relocation is there on both versions
Ok guys, before I go down the route of crazy town and have the version of spigot for EACH version imported. Let me ask you this
say I am working on 1.16.X right. 1.16.1 uses nms 1_16_R1. 1.16.2 uses nms 1_16_R2. Do I need to import the exact version of spigot (not the api) to send objects via packets? Or is it safe to assume that the package structure is the same across all of 1.16.X, and its merely the PACKET structure that has changed?
are they both the exact same size?
yeah
interesting, could be from another plugin
I guess the safe bet is just to be as explicit as possible, even if nothing really changed between versions
yeah I think its safest if you assume each minor version is like a completely different version
How can i code a config file?
The Configuration API is a set of tools to help developers quickly parse and emit configuration files that are human readable and editable. Despite the name, the API can easily be used to store plugin data in addition to plugin configuration. Presently only YAML configurations can be used. The API however was designed to be extensible and allow ...
no I meant the second jar could be the result of another maven plugin
so like if you have maven jar plugin, it will use the shaded jar after it is done to produce another jar
for example
I see
generally I always go with whatever was the final build name
well for now I will just use the one without _shaded
someone know the cause?
How im getting like 6 errors right now
It can be good to read sometimes becuse i just found out that the hole page was about config files
Any video ore something?
https://pastebin.com/6awRB9u2
Errors is:
Cannot resolve method 'saveDefaultConfig' in 'ZytexPluginWaterfall'
ah is that bungee or smth?
Yes
hmm, im creating custom enchants, and i have done 3 of them but i cant enchant them through anvil with books, please reply if you can help me.
bro these package names are driving me insane lmao, why would mojang include version number in your package name so I have to do an explicit import for every single minor version lmao
I notice that changes in 1.18 to a more generic package pattern
Is there any way I can change entity's direction it's looking at?
For example I have a ((CraftEntity) entity) but when I apply .setPitch it just doesn't work well actually it does but the entity doesn't change the direction of its head (even with bukkit runnable)
are you near it?
being in survival?
yea I'm a passenger of this entity
and I'm in survival mode
I apply my pitch to this entity
set your gamemode to creative
and check if now the pitch is setting correctly
maybe you set the pitch but then it targets to you
https://pastebin.com/2HNRUQ5P
Anyone now why?
My code: https://pastebin.com/ZJq3WX18
Alright I tried with creative and for some reason it still doesn't work properly
Well it flies in the right direction
but its head
looks in a completely different direciton
you try to save a config to a folder/file before you checked it exists
it feels like I do setPitch(-myPitch)
You are also trying to save a null config
Its also Waterfall so inappropriate to ask here.
This is what I'm doing ((CraftEntity) dragon).getHandle().pitch = player.getLocation().getPitch();
and update it every tick
and it basically works but dragon's head direction is like -player.getLocation().getPitch();
for some reason
player Location pitch is not the same as NMS pitch
how should I apply it then?
you should use the method setPosRot, if it exists for your entity
to pass to nms pitch pitch = Location.normalizePitch(location.getPitch())
you should be settign yaw too
float yaw = Location.normalizeYaw(location.getYaw());
float pitch = Location.normalizePitch(location.getPitch());
this.setYRot(yaw);
this.setXRot(pitch);
this.yRotO = yaw;
this.xRotO = pitch;
this.setYHeadRot(yaw); // Sync head rotation```
my IDE says there is no method Location.normalizeYaw
I'm coding for 1.8
probably this is the problem
Too old! (Click the link to get the exact time)
is there any way I can solve my problem?
Yeah... this is the problem
Anyone got experience with multicraft saving and it causing ram issues?
seems we get this giant uptick in ram usage whenever the game saves via a mutlicraft save
Wait multicraft is a server host iirc
wasn't it a panel?
multicraft is a panel
Which triggers saves?
yaw = z
pitch = y
my code is correct
Not really the concern of a panel in my opinion but ok...
Well then its clear. It uses the ram to buffer parts of the data that is being saved.
Guys do u have any clue, how to make such a text with background ? (Example below)
https://cdn.discordapp.com/attachments/926186506643734538/1073949506342764544/image.png
unicode characters
