#dev-general
1 messages · Page 368 of 1
lol
or gamma rays
IMPOSSIBLE
So when should I yeet that drive out the window?
My only concern is it'll damage the driveway
cool
even worse
||vmware||
lol
that's what I used to use
then one day I had an epiphany
"why am I using vmware i'm literally on linux"
I don't need passthrough on pc anyway
if I need windows I have dual boot
I need it for my laptop
hot take but i think using a VM is cleaner than using dual boot
yeah I agree tbh
it's separate drive dual boot
I'm considering getting another gpu for passthrough
not bm's clusterfuck single drive dual boot
well even still
I need windows on laptop for webex
buy a mac then
using a VM is more scaleable, less risky, and there isn't enough overhead to really be concerned about
macbook I mean
imagine only having a single drive though amirite
unfortunately I like getting good hardware for my money
apple hasn't ever offered that
well their M1 chips are pretty sick
I think you misspelt shit
I did not
I've been a big supporter of arm for years
ofc apple pull it off on the desktop first
arm is nice but it's not good for anything besides low power
m1 is super low tdp
the reason why things like MacOS run much smoother is because they can make assumptions about the hardware they’re running on
and decent performance
I do care on laptops
Windows has to deal with drivers and shit to adapt to the OS it’s on
I like battery
ah yeah well
laptops bad
on desktop I actually prefer low form factor systems
desktop good laptop bad
pro gamers like me use both
eATX?
you can attach the most to ATX motherboards
yeah atx is really the way to go
meh
ATX is the only way to go
iwanio are you one of those weirdos that also use half keyboards?
yes, I am
with the num pad and arrows missing
could put money on that
haha knew it
I don't need 'scroll lock'
man how can you program without arrow keys
emacs
I use nearly my whole keyboard
if you don’t have arrow keys you’re overusing the mouse
only keys I don't use are pause break and screen lock
wat dis
my keyboard doesn’t have sys rq on it sadge
sys rq is actually still useful on Linux
hmm?
you can directly send the kernel a SIGTERM if your UI freezes
ah yes
or just use dont use a ui
I ain’t spending my time watching YouTube videos by downloading them through cURL and displaying them using ASCII characters thanks lol
if you want to watch youtube use your phone or windows
linux
IntelliJ for ASCII lol
vim
nope
vim is a text editor
IntelliJ is an IDE
vim is a great text editor, but it will never be better than IntelliJ
what do you need to do that only intellij can do
also, I’ve used Windows for development so much now that I’ve finally started to learn how command prompt works
does vim have visualisation of dependencies? easy switching between files at the click of a button? ctrl+click? import optimisation? auto code formatting?
plugins
I mean, if you really wanna use vim, enable vim in the IntelliJ editor
it has an option to do that
i'm not saying use vim for the sake of using vim
i'm saying use vim because it does everything you need it to, in linux, without a gui
it’s like saying you should use Windows Notepad because you can write code in it
if you have issues like your UI freezing, i'd rather use vim than have to deal with that
notepad best
while technically you can, IntelliJ adds a hell of a lot more, since IntelliJ is designed for programming, Notepad isn’t
vim isn’t designed for programming, it’s a text editor
trying to turn vim into an IDE is a mistake
what is an IDE if not a fancified text editor
IDEs generally provide a lot of features that text editors just don’t
if all vim is is a text editor
then what's wrong with using it to make an IDE
aka with plugins
I guess
i mean intellij has a built in text editor after all
but not using IntelliJ is a curse
limiting yourself to only intellij is a curse
IntelliJ can do much more than vim can even dream of
it's also much heavier, and bloated compared to what you can achieve with vim
sure, use vim in the CLI, but not in the GUI
when IntelliJ is available, always pick IntelliJ
also, using vim in a UI is a curse
i do agree with that
gvim is absolutely terrible
changing the subject, did you know Krypton has watchdog?
a.k.a a separate thread that makes sure the tick time doesn’t go over a certain threshold
is that what makes sure ticks catch up to the ideal tps
and shuts down the server if it does, assuming it’s crashed
it still seems a little buggy, and seems to shut down seemingly at random, but it seems to work
ticking is sync
ah so for now it's just a single thread
it might always be a single coroutine
currently, it does time syncs (increments the time and sends out time updates every second to all players)
I mean does the game tick have to wait for shit to execute
wdym?
if you mean like how Glowstone schedules tasks in the ticking then no, tasks are scheduled completely separately
they are scheduled on request
I don't really know what I'm talking about so kek
lemme show you
we won’t be doing that
task scheduling won’t depend on how fast the server is ticking
it will be scheduled and executed separately from the primary coroutine and the ticking won’t have any idea how many tasks there may be (if any)
because it won’t touch them
so you can safely schedule tasks and have the run exactly after the time you scheduled them without having them run later if the primary coroutine slows down
also, there’s no such thing as synchronous commands or synchronous task scheduling
I wanna try my best to make as much as possible safely modifiable across coroutines
so if tasks run as soon as you schedule them
does that mean you can say place + remove + place + remove a block ,all within the same tick
theoretically yes
will those intermediate blocks actually cause any updates to anything else
like if you place+remove+place+remove a redstone block next to a piston
um what
That makes ticking useless
what else could I do though?
i would love to see a server that doesn't actually use ticking to update stuff
Let the changes be handled on each tick
at least not to the extent that minecraft currently does
but idk how feasible that is to do while working with a vanilla client
I don't intend for block placing and breaking to be ticked
I want that to be reactive
Block updates will be ticked ofc
Atm, the only thing ticked is time
Lol
Anything that has to be ticked will be ticked
Redstone
But I don't want to do a vanilla and have everything be ticked
Redstone is a block update
wait
So redstone will be ticked
If you place a block from a client, the block updates will be handled reactively
okay in that case
A.k.a in the processing of the block updates
I mean, block breaking amounts might need to be ticked tbh
But again, those are block updates
so if you place a block, it'll be ticked like normal
Not sure yet
because here's a concern of mine
If a client places a block, the updates for that will be handled on the handling of the block placement
lets say a redstone block is placed in the world with an event or whatever
Or at least, I think that's the way to go
does the redstone dust the block is placed next to also reactively update
before the next tick
or does the dust wait until the next tick to update
Good point
Maybe placing redstone dust should cause the chain reaction of block updates
Lighting will also be reactive I think
I smell lag
Yeah I also kinda smell lag
having things not be limited by the speed of a tick means you have a lot more potential to schedule a lot of work at once
again like placing + breaking + placing + breaking a block
if that happens a hundred times in a single tick, and it's reactive
you would need to update lighting reactively 100 times within that
normally you'd only register one action in a tick at most
so you'd only have to update lighting once
i dont think it's as simple as that though - if you tick lighting then all the updates happen at once
I could do lighting like the JVM does garbage collection
so you're not gaining anything
A.k.a you create and destroy stuff all the time, but the lighting engine will clean up lighting every tick
yeah
Or at least, it will try
that makes sense when sending packets to clients too right
I will use Starlight for lighting
because you'd only send an update packet per tick at most if i understand right
Packets being sent to clients are reactivr
When the client sends me packets, I sent it packets
I hear calin
Yes
Wat dis

Doesn't really have one tbh
It's a fun project for me to work on
But I want its performance to at least show vanilla up
Just really demonstrate how bad vanilla is
lol
if it were me, i think the most important thing that should be improved is the obvious: vanilla only uses a single synchronous thread to tick everything
sure reactive is nice, but if the same amount of logic is being executed on the thread at the end of the day i dont see why it would improve efficiency
You know that reactive logic is async right?
All packet handling uses a separate coroutine (may use multiple in the future)
well reactive logic doesn't have to be async right
it can be but i dont think that's a requirement
when i think reactive i think events rather than a clock determining when something happens
well for packets that's fine, it makes sense
but most of the workload isnt packets right, it's ticking the world
and the way i see it you have two ways to make that faster; either make it so less stuff is ticked overall (with events instead of a clock)
or give it more room to handle that same amount of stuff, with multiple threads
or both of course, both is ideal
I think that was the plan I had
And me and @old wyvern spoke about this and kinda settled on the fact that asynchronous ticking is a nightmare
yeah asynchronous ticking is definitely a beast
but if you did somehow get that working then you'd have a lot of gain
like, an indescribable amount
the first point i made has been drawn out by paper and other forks already
Expecting 700% performance increase
usually by removing unneeded stuff like entity stuff and all that
Bardy, imma set up a test server running krypton later
I mean, the one downside to my current setup is that asynchronous authentication is impossible
Go for it
See the speed
It's actually very fast at what it does because I cache chunks by region when I load them
Meaning I can just retrieve them again when you rejoin
Won't work forever ik, but it works for now
wdym by cache exactly
Since you always spawn in the same place
Caffeine
Like evicting cache for an hour
Just cache all the objects
right but... isn't that just you loading the chunk
Yeah
But it avoids me contacting the file system every time
As I said, won't work forever since it's under the assumption atm that the same chunks are always loaded every time, but it works for now
And it means that at a render distance of 10, you only load almost a million longs
For 441 chunks, that's really not bad
And after the initial join (which is a tiny bit slower because it has to read files), the caching makes the loading almost instant
And there's no delay in receiving chunks like Minecraft has either, since all of the chunk data and light update packets are sent in a for loop
what i meant here is
would you not get the same effect by just keeping the chunk loaded when the player leaves
(Light update before chunk data because otherwise the client thinks it doesn't have lighting data and calculates light itself)
What caching the chunks does
It means the chunks stay loaded in memory
yes
Lemme link you to the hackery that made this work lol
It has to calculate the positions for the chunks before it asks to load them, so the world manager can filter out anything we don't want
Which means 2 for loops
But that calculation uses a function that gets a position in a spiral in O(1), courtesy of Stack Overflow and @tranquil crane
i can't tell if you're just describing this in detail or actually making it out to be very complicated
Nah it's not complicated, it's just a bit hacky that seems to work like a charm
The amount of looping there is a bit radical though
i see
And it's not at all optimised
That was my first attempt at making that work btw
So don't be surprised if it's trash
lol
hey bardy how far through are u on krypton so far
You can load into a world and move around, run commands, use the console, install LuckPerms and have it work, and as of my local version, time is synced between all players (the world time is now properly updated lol)
And that's about it
Going underwater will still let you walk around like normal (because yes, updating your underwater state is server-side)
Not kidding
intriguing.
It confused Nicole as well lol
I mean, Nicole was surprised when I told her I got plugin loading working without URL class loader hacks lol
Oh also, sending the block break state is calculated server-side
So all I get is a packet when the client starts digging and when they stop digging
now as far as async ticking goes
i think there's actually a non zero chance to have async updates work safely and with decently efficient use of multiple threads
I was thinking of splitting the world into sections (apparently like Aether does), but that proved to be a lot more complex than it sounds
right so here's my take on that
you do want to split the world into sections
but
it won't be by chunk or by region or "by" anything in particular
Sections of how large btw?
see that's the wrong mindset imo
first we need to think about why async is bad here in the first place
async is bad because the result of one update can impact the result of the next
It's bad because of multiple players in the same chunk could get things out of sync?
And that
and if we don't calculate them in the correct / consistent order, then we get random results
that's why everything is syncrhonous
my solution is
to use some sort of algorithm to decide whether or not two events are related
such that the result of one affects the other
then chain these along every event that happens in a tic
tick*
so you end up with "blobs" of related events
aka if a piston pushes a block and that causes a lighting update
@old wyvern
those are all within the same blob
this means that players in different regions of the world will very likely end up inside different blobs
I want some opinions on this by people who know a lot more than I do lol
maybe there are some issues with this i can't see right now but this would mean that on average, a busy world could spread the total work into logical chunks across potentially many threads
Well, many coroutines
the bad part is it can also be really inefficient / just as inefficient as vanilla if things are not spaced out
no
But too many threads is also bad
i mean
specifically threads
coroutines run on a thread riht
right*
On the JVM, yeah
They're very different to threads
more threads = more cores utilized
(ideally)
we don't need coroutines at all here
Coroutines are asynchronous subroutines that may be suspended and resumed freely, allowing dispatchers to easily switch between them
right but what i'm saying is we dont need to switch between stuff here
all of this ^ that i just said
should be possible with regular ol' ticking
instead of the event stuff you have going on
Coroutines are still more lightweight
what you're saying is use coroutines that are running on top of threads
And more idiomatic (@prisma wave)
Coroutine dispatchers are extremely efficient at execution
Whilst they are backed by threads, coroutines are generally more efficient at a lot of things than threads
'backed by threads'
thats my point
you are using threads either way
eh?
Throwing a coroutine where you should simply use a thread is just dumb
I guess
anyways my second point
Co routines exist to simplify CPS
this
What do you think of Ivan's idea Yugi?
Not as a replacement for threads
all i mean by this is if all of the players in the world fall under the same blob
What is Ivans idea?
this offers zero benefit over regular vanilla ticking
ticking is not the issue Ivan
If that were the case, all existing games would be considered as performing badly
yugi read past this
I think the issue is more what vanilla does when it ticks
Rather than the actual ticking
Ticking in vanilla does much more than it needs to
Only things that have to be ticked should be ticked
you are correct that vanilla ticking does more than it needs to
but that's a dead horse
that paper and all the other performance forks have been beating to death
imo
yes
That doesnt make sense now does it?
that's where the magical algorithm comes in
i'm assuming here but i imagine the way it currently works is
that you have a long list of all world updates that need to be done every tick
wait
hmm
Yes, but the "long" list of updates are something common for all games
Altho it is slightly more challenging for a sandbox game
Its pretty much the same all the way
alright so i guess the problem is
that you'd need to know that exhaustive list of all updates before you can sort them
into unrelated blobs
I still intend to tick worlds separately btw
maybe you can step through those updates without completing them entirely, just to build that large tree of all events and organize it to be processed entirely
Because you can do that
at the very least, i think it's save to assume that if two players are in separate areas with unloaded chunks between them, that there won't be any issues with handling the updates for each player on a separate thread
so it's not quite as granular as deciding if any two events are unrelated, but it'd still allow for a good enough spread over several threads to be worth implementing
Again, welcome to aether engine domains
Oh yea, are they gonna implement aether into java now or no
wait
how does the aether engine do this
If there are too many entities to simulate effectively, the region of authority will be split, enabling computation to be handled by a different worker.
for minecraft
assuming the region of authority is the loaded chunks around a player / group of players
how can it split that if we decided that you need to find all of the events are happening in order to split in the first place
Pop the hood of Hadean’s spatial partitioning powerhouse: The Aether Engine. See how the Aether Engine helps developers tackle the increasingly complex simulation requirements of cloud game development.
Learn more about Hadean at: https://hadean.com/
uwu
is Aether open-source?
Not yet I believe
Isn't the C version OS?
god damn it I’ve already been found out
I mean what
that kind of kills the market for performance forks
imo the only reason people get performance forks is to raise the ceiling for # of players
so even if (and im sure people can) further optimize the future aether minecraft jar
people are going to care much much less than they do now
Not sure about the Java version
they better
if Java gets Aether, that could kill Paper
I think Paper would be happy though that they aren’t needed anymore
Probably not
Paper depends on the "vanilla" server
true
And I assume Mojang has no plans to suppourt plugins/extensions properly
yeah
so if anything , it would improve paper by a large margin
hopefully, Aether support would spark a rewrite from scratch
careful what you wish for
last time we got a rewrite from scratch we ended up with... bedrock
then Bukkit could be discontinued and superceded
true
I mean the API could be rewritten and work 100x better
and it would hopefully kill the market for MCM Spigot forks
which would be a day I would kill to see
Java version is slowly being rewritten
yeah ik
Like World related stuff in 1.13
at the end of the day, all i want is to be able to run a single 500 player cap server on a 2011 rack server
That probably wont happen Ivan
😠
Even aether uses distributed servers I think
Yes
running a single server across more than one machine is the ideal
you have literally infinite room for growth
assuming no cap elsewhere
you can rack up a 10k charge on AWS in order to get a few thousand shards for your 50k pop minecraft server SMP world
where they rewrote chunk loading and made it worse, ik, I remember aikar saying
it uses an FJP-style thread pool iirc
but it’s terrible
then fix it 🤷♂️
1.13 was probably one of the most unstable Minecraft releases in the history of Minecraft
Notch > Microsoft Devs ??? 😮
Notch > Jeb maybe
because JE is still lead by Jens Bergensten
And yet it was better when Notch lead 😌
well, no
.
Notch thought that 1 chunk per file was good enough
well back then it probably was
Thing is, this kinda just randomly blew up if you think about it
MCRegion fixed that (originally a mod, just shows that Mojang is useless)
It was not made with the plan to be the most played game
true
It was just a random side project that the dude was working on
And it just so seemed to be something everyone liked
a bit too much
but you would’ve thought that you would at least rewrite the code when it becomes insufficient
mhm that would be sensible
If it became large enough, rewriting might just not be worth it
Especially for a small team
rewrite in haxe:)
it’s fucking huge now
Technical debt should be taken care of from the start
also, they have Microsoft to get developers from
And they did 1.13 🙂
they have 0 excuses other than laziness
long time ago
oh wait yea nvm
2014
I can remember discussing it at primary school lol
20Actually yes
man that was a long time ago
it was 1.7
it was 2014
looks about right
1.8+ is after microsoft deal
See the trend?
😌
The issue is they used the wrong language
ofc
Haskell good?
ofc
you actually gonna come and work on Krypton soon btw?
if you are, please lmk beforehand so you don’t do something already being done lol
True ^
😫
Party Mitten
just put a print before the user input?
kek
yeah lol
disable buffered input
lmao
also, you heard it here guys
Doesn't COC have a comment saying DO NOT REMOVE?
a BMI over 14.9 is apparently fat
yeah but i figured they were saying it for their grading bot
Yea?
so hSetBuffering stdout NoBuffering just makes it so every print flushes as soon as it's run
is that how it works?
or i guess, removes the need to "flush" at all?
Yugi I’m in English, I don’t want to see that on my screen lol
how come this works with no complaints
but not this
i thought $ did the same thing as enclosing the left right side of the statement in parentheses
oh sorry i meant right
I would guess two infix operators like that are a problem
because they're both functions that take left and right as inputs
i was wondering if it was because of the concantenation
i swapped the rightmost $ for parentheses, still got an error
same problem
what exactly about ++ being infix forces me to use parentheses in place of the left $
as I said I'm not sure but I would guess that two infix operators next to each other aren't allowed
What is that supposed to mean?
oh
I was in English
just sounds out of any context
I was thinking it had something todo with discord's language settings
I’d say “I’m in English” where an American might say “I’m in English class” or “I’m in class”
we say with "class" here as well
yeah the UK is weird
@prisma wave @onyx loom this is a common thing across the country right?
It's the same in German, but I didn't catch that either
well, "have" is more common then "be", so "I have English", but still
Sure
s so confusing, how does mc give packets to client without port forwarding?
What does this mean though? Haven't opened IJ for a long time
pfft
huh?
what?
i prob sound so stupid rn
your router recieves the external requests, right?
so u have to make 25565
send to the right machine
on the network
uhhhhhhhhhh i guess
wdym?
really?
yes
Duh
correct
How would you be on a server then?
oh
Each device has a assigned local ip that the router takes care to link to the common public ip
^
yes
then the client doesn't have to port forward
because it can just send the info back
i think
the client can't port forward
that is impossible
the client cannot communicate with the server directly
it communicates with the router
wot
ohh
so the port
so that's why I can't port forward 25565 on multiple devices?
yes
ohhhhhhhhh
Imagine it as a mail delivery
The delivery man takes your package to your house, where you and your entire family live (share the same address) then it's up to your dad to give the package to the correct person in the house
Your dad in that case is the router
clients open a random port on their end when talking to a server
if you think about it it doesnt matter what port a client uses
because they will just tell the server what it is
oh
the same is not true for the server port, the client needs to know that ahead of time
since the client goes to the server port first
i thought it was just the firewall stuff
do you understand what an AND gate is?
gate?
oh my
im assuming it's &&
welp im not teaching u all of CS
firewalls generally dont care about outbound traffic
Logical gates 😋
NAND
i mean ive heard of gates before
yea but there is no point for most cases
in minecraft redstone
why would you block outgoing traffic for your own pc lol
Smh
o
what if you accidentally send a virus
tho
who wants a jumpscare?
how would your firewall even know
nu
ok ill just google xor
no you won't understand it
xor says if the two bits are the same they cancel out and equal 0
The XOR operation preserves randomness, meaning that a random bit XORed with a non-random bit will result in a random bit. Multiple sources of potentially ...
nevermind
otherwise they are 1

⊕ eeeee
Dkim computer chips are nothing more than many logical gates
or 40 if you're living in 2011
-|>○-
y'all have the same name
inverter
mmmmmm
mm ascii
delish
um
lmao truth tables are just basically drawing a table, then the value of a and b, and then the expression being evaluated
mmhm
Boolean algebra 😋
Yes sir and you can do everything with that
boolean algebra order of operations
its
Brackets
NOT
XOR
something something
i am a very prudent student
Math i the binary level
one boolean yes
more than one boolean? yes but it gets tricky to calculate
like a&&b || !a && !b && c
the hek are the symbols u are using
given all possible combinations of values for a,b,c you have to figure out if the expression is true or false
i'm using symbols dkim can understand
lol
normally it'd be ab + a'b'c
;-;
Ah good times, i miss school
this is where truth tables come in
I'll uh... watch some youtube
you get a big table and fill in every possible combination and its result
wot
What is !!!!!!!!!!!true
hmwhat
no
false
a boolean
hehe
Someone whose really high on truth serum????!!
lol
😭
yes sir
yes sir
maybe sir
Wat
ew
Anyone here think it's worth adding vanilla's crash reports to Krypton btw?
Does intellij automatically change html files when I edit the javadoc in my classes?
You gotta regenerate the docs lol
Those HTML files are generated by the Gradle Javadoc plugin
damn it
so cross server communication, what's the best way to approach it, bare in mind I need to trigger events, and send data around
yes
Depends
hello jeremy clarkson
There are many options
So what is the line if I want to make a menu, for example: i have 3 sorts of unbreaking, 1,2,3. but i don't want that players can instantly buy unbreaking 3, I want them to first buy unbreaking 1, and then 2 and then 3. kinda like upgrades
I presume you're asking about DeluxeMenus, if so, #general-plugins
I would recommend using Redis, Kafka or RabbitMQ over plugin messaging, since they are just better
Imo
alright ty
Just google RabbitMQ lol
It's a bit complex to understand at first, but the amount of features it has is ridiculous
You have the concept of users, virtual hosts, exchanges, routing keys, queues
It supports pub/sub and point to point
It uses an acknowledgement by default I think to ensure messages are received
Are you using SlimeWorldManager Frosty?
And supports persisting messages if one of the workers goes down, so you don't lose them
not using anything at the moment
Hello;
How do you hide an enchantment of an item with DeluxeMenu?
Hop, sorry
do people legit never read channel info ;C
There should be a day everyone from here starts talking in #general-plugins
I'd rather die
That would be funny lol
tfw I'm support and never support anyone anymore 
Lol
Maybe leaving the mini mods to it is a good idea
Also, you know what I hate the most when people ask for support?
What I'm going to call channel popularity hunting
When people post in the channels with people in them because they're impatient shits and won't wait for someone to answer them in the correct channel
Hey I need help in #general-plugins
Looks like clip
looks nice 🙂
I mean, he has the right colour scheme
they don't
NetBeans isn't even the worse part about that screenshot
What exactly do you expect when you insult them with a slur...
NetBeans in 2021 is a curse
With all respect to the team behind NetBeans, it's good, but IntelliJ is better
Try to put yourself in the shoes of the streamer
I'd be annoyed as well if some know it all just came into my chat and insulted me for not using the right program
o
What the Americans like to call a "smart alec" lol
link
I dont know this dude, ive been in his stream once though I think
Played coc
awful music
holy god i just made a big run
i just made jd
for all my classes
with class headers
it was so annoying
lol
@prisma wave is it your BIRTHDAY???
I cannot because I don't know
Redis good
Redis as a key-value store is actually insane
Redis as a messaging service is decent
Then why are you watching it?
Tell em to uninstall
or is that a bong
lol
Lol
what is a bong
Oml
it's a shisha
Bong is the word I'm familiar with
smoke weed, right
Ah right
yeah
What the fuck is that