Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Feather: A Minecraft server implementation in Rust (github.com/feather-rs)
67 points by homarp on Sept 11, 2022 | hide | past | favorite | 30 comments


I think rust will have made it offically as a language when projects get created for it where the fact that its in rust isn't the #1 selling point.

It'll happen eventually I hope. Rust itself is indeed a fantastic language.


> It'll happen eventually I hope.

It's already happened, but obviously it's easy to miss since by definition you're looking for submission titles that don't mention Rust. It feels like nearly every day this week has had a Rust project on the front page of HN without a mention of Rust in the title.

Here's one with 252 points from 2 days ago: https://news.ycombinator.com/item?id=32777909

One with 687 points from 4 days ago: https://news.ycombinator.com/item?id=32746258

One with 188 points from 5 days ago: https://news.ycombinator.com/item?id=32733069


Here to verify, there's a fair bit of software where the state of the art is in Rust. How it happened so quick is a little surprising, but here we are.


Hasn't this already already happened though? There's literally nothing else that can compete with ripgrep.

A project using Rust isn't a good enough selling point to me if the tool doesn't do what I want, but more often than not I find Rust projects have a level of quality far exceeding C & C++ projects.


Vaultwarden is a great example. Though admittedly, it was originally named Bitwarden_RS, it's now a fully-featured Bitwarden clone that's hailed as vastly easier to run and administrate than the full heavy official Bitwarden server.


When I first wanted to self host Bitwarden, I saw the gigantic setup from the official site and thought "oh shit", then gave up for some time.

A friend mentioned bitwarden_rs and after 10 min I was done.

I think that at this point Bitwarden should advertise it as the official way to self host (after reviewing the code) taken the adoption and stability. I use it for a year or so and it never failed, backup is ready etc.


I checked out Wikipedia to see that exa (an alternative to ls which I use regularly) is written in Rust! :D


Same with my favorite ls replacement, lsd

https://github.com/Peltoche/lsd


Here's Valence, a similar but more recent project: https://www.reddit.com/r/rust/comments/x5941i/media_announci...


There’s also Graphite: https://github.com/Moulberry/Graphite


A generic framework that others can use to build their own Minecraft server sounds more fruitful and less prone to fragmentation than three projects doing the exact same thing with different goals.


Project is dead, like many others getting a simple PoC with minecraft is easy, getting most features to work is not.


Whenever I see "... in Rust" because it is such a popular for hobby projects that are prone to being abandoned. Of course, that might happen to any project in any language, but something tells me that if you manage to get a C codebase to a functional and maintainable point, there is already some energy behind the initiative. There are counter-examples (first and foremost Ripgrep), but I have become so prejudiced in this matter that I'm always skeptical until proven otherwise.


People often do projects like this to learn a new language. Nothing wrong with that. Rust is being used in production quite a bit these days.


How do you determine that a project is dead? (In general)

Here, I see activity 3 months ago in June. The README doesn't say anything.


The insight contributors chart is usually a good clue. It’s not perfect because it only shows the main branch configured in GitHub and some project haven’t merged to main in years.

Still, it’s good to see how many big contributors a project has, and how active they are over time.

https://github.com/feather-rs/feather/graphs/contributors


The last commit before that was in Februrary 2022.


I'm not big on Minecraft, but because my kids enjoy it, I run a few instances of the official server.jar. Even on a fairly beefy shared-use server (on which I do some development with a friend), MC can get pretty choppy, which really surprises me. I should try out Feather to see if it can handle the load better.


If you want a recent and feature complete server that performs better than the official one check out PaperMC. That's basically the de-facto standard for servers these days anyway.


It's better but still fairly resource-intensive. I'm wondering why it's so as the main work is being in the client, whereas the server concentrates on updating the structures close to the player - the rest of the universe is either generated or loaded on the fly. I'm fairly sure this could be optimized much more.


A video games server must compute a lot of things for each client otherwise it would be too easy to cheat.


It is easy to cheat on minecraft. It has a completely broken security model.


For a private server where access is whitelisted I'd sacrifice cheat protections for speed.


Granted, but should it matter on a private server run among friends who don't cheat anyway as they feel it would spoil the game?


If you'd like, try other Minecraft server software. I used Bukkit back then, and I saw people report on its better than vanilla performance.


>Our mid-term goal is to make Feather usable on hub and minigame servers. The limited set of gameplay features available in Feather is not a problem for such servers that require a small subset of vanilla functionality.

"Minigame server" is self-explanitory, given the existence of Roblox, but what's a "hub server"? I'd guess something like the difficulty/world selectors in Quake 1, but for other Minecraft servers that the client then connects to?


Hub servers basically serve a world whose sole purpose is selecting which server to connect to. Sometimes they'll include an item shop or the like.


How complicated is the Minecraft server protocol? Are there docs some where that detail it, so that anyone can have a go writing a server?


I read quite a bit of the Minecraft source but I am by no means an expert. Based on this I would guess the hard part is implementing the actual game logic as Minecraft runs some game logic on the client and some on the server. And much of it has all kinds of weird behaviors depending on whether the outer loop for some logic is along the X and the inner loop along the Z direction or vice versa and things like that. Without decompiling and deobfuscating the game you will never get this to work correctly.


It's pretty shitty, at least 8 or so years ago. Not sure about the current state. Back then it had, for example, no length information in the header (so you always have to parse it completely and cannot skip any packet), shifted packet ids around for new releases and had a pretty odd mix of data types.

There is a great wiki site going into its details: https://wiki.vg/Protocol




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: