29 ms·
Show HN: Pumpkin – A Modern Minecraft server written in Rust
- alex_medvedev 2y agoHello. I recently developed Pumpkin, Its a efficent and fast Minecraft server completely written in Rust from the ground up, Check it out :D
- lesuorac 2y ago> What Pumpkin will not > Be a drop-in replacement for vanilla or other servers It seems to me that unless it's a drop-in replacement its not a Minecraft server? Akin to how say an Uno deck isn't a drop-in replacement for a Hearts deck but still both card games but not both Uno decks. Or is it just meaning that Pumpkin (besides the network) do things differently than vanilla and so you might not be able to open a vanilla created world using Pumpkin?
- looperhacks 2y agoThe common problem with Minecraft server implementations is that they are not bug-for-bug compatible, which will lead to certain techniques (especially redstone contraptions) breaking. The technical Minecraft community depends on many implementation details which not all servers support
- Scaevolus 2y agoIn addition to the hundreds of blocks and mobs that would need to be implemented properly and rarely are, the lack of mod support is a killer. The only "complete" reimplementation of Java Minecraft that I'm aware of is Bedrock.
- dmonitor 2y agoFar from it. The versions lack a lot of parity and Bedrock is called "bugrock" by the community for a reason
- Scaevolus 2y agoI edited in scare quotes for "complete" to make that clearer, but I mean in terms of at least having matching blocks/mobs despite many differing details.
- lupusreal 2y agoA lot of the parity issues are due to Bedrock not reimplementing bugs from Java (quasi-connectivity aka "droppers are doors".)
- archargelod 2y agoThere are issues other than not ported bugs. Redstone in bedrock is know to be unreliable. For example, in Java version if you take a circuit and activate it with a button/lever - it would always behave in the same way. In bedrock same setup could have random result. And "random" is something you don't want in a large sophisticated contraption. I'd guess it's caused by some race-conditions in bedrock implementation, but alas it wasn't fixed in 7 years.
- sandworm101 2y agoThere are no bugs in Minecraft, only features that have yet to be fully documented.
- Dobbs 2y agoMinecraft has a lot of bugs or otherwise surprising behaviours that parts of the community have come to rely upon. This means that most non-vanilla minecraft servers aren't 100% drop in replacements. You have to make a decision what behaviours you want vs the performance and simplicity gains you will gain. For example there there are tricks that allow you to delete bedrock blocks. Which then lets you either get onto the roof of the nether, or drop below the bottom of the world. Not all of these tricks will then work depending upon the specific minecraft server. Another example is that in vanilla you can "bomb" people with experience orbs, the sheer number of orbs on the screen will grind their game to a halt since there are too many objects to track and render. Some minecraft servers work around this by grouping up experience orbs into a single bigger orb. That way you have fewer orbs on screen at once.
- rft 2y agoOne bug abuse that blew my mind recently is the ability to have wireless redstone in vanilla [1]. I fell deep into that rabbit hole after a previous post on here about Bad Apple in Minecraft [2]. [1] https://www.youtube.com/watch?v=FLynwXDnETI https://www.youtube.com/watch?v=FLynwXDnETI [2] https://news.ycombinator.com/item?id=41798369 https://news.ycombinator.com/item?id=41798369
- deleted 2y ago[deleted]
- gynther 2y agoCool! Would be interesting to understand how to multithreading works? Is it just the "easy" parts or actual operations related to the world as well?
- alex_medvedev 2y agoCurrently Pumpkin has not much multi-threading but we want to go all in. There is already a good structure for multi-threading, We want to make everything multi-threaded what benefits from it
- zanderwohl 2y agoIMO chuck generation is a great candidate for mutlithreading. Keeping it off the main thread would already be a huge improvement.
- pzmarzly 2y agoSimilar projects: - Feather (Rust, abandoned) https://github.com/feather-rs/feather https://github.com/feather-rs/feather - Valence (Rust) https://github.com/valence-rs/valence https://github.com/valence-rs/valence - Cuberite (C++) https://github.com/cuberite/cuberite https://github.com/cuberite/cuberite
- deleted 2y ago[deleted]
- jedisct1 2y agoMinecraft Server (Zig) https://github.com/regenerativep/zig-mc-server https://github.com/regenerativep/zig-mc-server
- dathinab 2y agoValence: > A Rust framework for building Minecraft: Java Edition servers. Through there are currently 3 new rust impl. differentiating themself from Valence. So it's interesting to see how this will develop long term. Like will they be for different use case(1)? Will they merge? Will some die and developers migrate? (1): There are actually quite a lot of different use cases, i.e. Java Edition is by now mostly about mods so providing different modding capabilities and various "common mods build-in" and similar can be a big target. But so can be wanting to run a mostly vanilla community MC server for quite a bunch of people etc.
- FrustratedMonky 2y agoLove the idea. Especially as a learning example. Always fun to learn a language by implementing a popular game. Am confused by these two lines. Maybe it is just difference between the 'goal' and the 'current state'. Goal: "Compatibility: Supports the latest Minecraft server version and adheres to vanilla game mechanics. " But NOT: "Be a drop-in replacement for vanilla or other servers " Will it be a replacement for Vanilla or not?
- hexmiles 2y agoCompatibility: refers to the ability for client of the latest mincraft server version to be able to connect to the server (pumpkin) unmodified with all mechanics working. Drop-in replacement: refer to the ability of a server operator to simply exchange the current installation/executable of the server (be vanilla, paper, cuberite, etc...) for pumpkin while maintaining data, configuration, scripts and mods installed. edit: grammar
- FrustratedMonky 2y agoTell you the truth, that doesn't help clarify to me much. If it is compatible, then can't I 'drop it in'. They sound like they are saying the same thing. It is compatible so clients can connect to the server and be fully operational, and thus, I should be able to drop in this server, and use it as a server? How can it be compatible if it doesn't maintain data, configuration, etc.. Edit: or is this about Pumpkin files. Pumpkin will maintain it's own files, data, configuration. So it can't just use existing Minecraft data files. So if it was a new world, Pumpkin would generate new pumpkin formatted files. But couldn't just 'drop it in' on an existing world and use the existing Minecraft data files. Not sure of long term viability as far as effort, but if it is files, couldn't a converter from MineCraft to Pumpkin file structure, make the server 'drop in'?
- hakanderyal 2y agoDrop-in means replacing an existing thing with a new one without changing anything. This is not compatible with other servers plugins/data/configurations, so just replacing the binary and expecting to continue where you left off is not possible.
- icepat 2y agoReminded me of this existing https://dayssincelastrustmcserver.com/ https://dayssincelastrustmcserver.com/
- mrkramer 2y ago[flagged]
- deleted 2y ago[deleted]
- deleted 2y ago[deleted]
- paulinejq47 2y ago[dead]
- dangoodmanUT 2y agothis person is going gods work
- mobeigi 2y agoAre there any benchmarks for it? How much faster is it than a vanilla server? I know Minecraft servers tend to get extremely resource intensive as the player count creep and people run extremely beefy servers to handle the load and still offer poor TPS.
- alex_medvedev 2y agoHey, Your lucky, i just made benchmarks all this time :D. Check them out https://snowiiii.github.io/Pumpkin/about/benchmarks.html https://snowiiii.github.io/Pumpkin/about/benchmarks.html
- lionkor 2y ago[flagged]
- alex_medvedev 2y agoHey, Sorry Im not native english speaker, I will try to fix all grammer issues now thanks :D
- kridsdale3 2y agoI literally said Holy Shit out loud. This is an incredible improvement, and I'll refer to this in the future when I'm asked if we should make something new in Java.
- mouse_ 2y agoYes but also consider the extensibility accessibility Java gave us. EVERYONE was building Minecraft mods back in the beta days. I might go as far as to say that extensibility is what made Minecraft so great.
- pphysch 2y agoNo doubt about it. I don't think Minecraft would have gotten as far as fast in the public consciousness without content creators like Yogscast being able to produce so much novel content from modded Minecraft.
- ramenlover 2y agoAre you sharding the main thread into regions (ie. Like paper folia) or is this just breaking of non block-entities to their own threads.
- saintradon 2y agoThis looks great! Can't wait to check out the code in detail.
- alex_medvedev 2y agoI would love to hear some feedback, tried my best so code is clean :D
- bbno4 2y agoIt has now been 0 days since a new minecraft server was written in Rust https://dayssincelastrustmcserver.com/ https://dayssincelastrustmcserver.com/
- xx_ns 2y agoPumpkin is already on that list.
- JadoJodo 2y agoIt's pretty funny how many of these are "Is it a Minecraft server? No. It's a framework with which you can build your own rewrite of Minecraft server."
- whazor 2y agoI was thinking it would be cool to have a Minecraft server built with Bevy, but that has also already been done: https://github.com/valence-rs/valence https://github.com/valence-rs/valence
- whalesalad 2y agoThis got me thinking - is Rust really the right tool for the job? And I thought, Elixir/Erlang feels like the perfect tool. Sure enough, someone did it! Great reference material for someone learning how to do things on the beam https://github.com/thecodeboss/minecraft https://github.com/thecodeboss/minecraft
- Imustaskforhelp 2y agoLmao it is funny how we have daysinceX websites. is there a list of all such websites of daysinceXofY like dayssincelatestframeworkofnode I guess?
- AbraKdabra 2y agoomfg haha.
- culi 2y agoHilarious site but a little unjustified. Out of those, only Valence is a real "this already exists" argument. There's 7 total and the first 3 are dead and the latest 3 (incl pumpkin) are all 2024. And all of the 2024 ones explicitly differentiate themselves from Valence which is more of a framework that focuses on modularity. These latest 3 all look like healthy competitors that are all amicable towards each other | | released | stars | last_update | |----------|----------|-------|-------------| | feather | 19aug | 2,614 | 2 years ago | | mchprs | 20jun | 1,632 | last month | | graphite | 22jun | 160 | 2 years ago | | valence | 22sep | 2,731 | 3 days ago | | hyperion | 24mar | 361 | today | | pumpkin | 24jul | 965 | today | | ferrumc | 24sep | 673 | today |
- bradhe 2y agoThis weeks Minecraft server! Nice!
- superlucky84 2y agolooks good
- alex_medvedev 2y agothank you :3
- WhereIsTheTruth 2y agoi wish minecraft was open source, i'd be able to fix their inefficient protocol
- WhereIsTheTruth 2y agoDownvoter, go check this: https://wiki.vg/Protocol https://wiki.vg/Protocol, let me know if that's a good way to sync a lot of fast moving entities across a TCP network This is why people struggle with their servers, not because the game was written in java
- giancarlostoro 2y agoCurious what protocol you would use, or how you would do it differently? Are there small enhancements to the existing protocol you would do? Genuine open question for the sake of learning.
- alex_medvedev 2y agoI would prefer the UDP Protocol over TCP like in Bedrock edition. Im pretty sure many PVP players would love this. Here is much non sense in the Minecraft protocol and things made to work not to be optimized (deadlines). At our discord we even already have a sticker :mojang_nonsense: which will be used quiet often. I also don't understand Mojang's tactic with packet changes, It sometimes looks like they care about Packets not being broken and being backwards compatible but them sometimes they change the whole Networking system (1.20)
- lucb1e 2y agoBasically any significant Java software uses disproportionate amounts of RAM. My server can easily run a web server, database server, ftp server, memory cache, etc., times a few copies because various containers have their own web server or whatnot, all at the same time. But a single copy of Minecraft is too much, even when everything else is shut down. That's why I struggle with the server: it's written in Java. Other game servers don't seem to have this problem. If the network protocol were all, that'd be great (I didn't downvote any of your posts in case you now wonder if that was me)
- kgeist 2y agoWhat does "modern" mean in this context?
- alex_medvedev 2y agoIts written from the ground up and has a clean foundation (which is not the case in vanilla minecraft server code). We also want to use cool modern features like multi-threading or the rust language which is a modern language designed to fix mistakes from older languages
- philipwhiuk 2y ago> cool modern features like multi-threading Java 6 had multi-threading
- Imustaskforhelp 2y agoI read this in the most satirical way possible like as if a godly narrator said it calmly. It was really funny. It felt like a Satire LMAO
- nijave 2y agoThe limitation isn't the Java version, it's the way the MC code was architected. Iirc part of original Minecraft's performance limitations were high object create/destroy rate leading to lots of garbage collection. With that in mind, picking a non-GCd language isn't completely crazy.
- kgeist 2y agoIt was the other way around: say, the original code as written by Notch had functions like setPosition(x,y,z) and it was okay. When Jeb got in charge, he said "it's not object-oriented enough" and rewrote everything to setPosition(position). And boom, 1GB/sec allocations...
- intelVISA 2y ago
- tomasff 2y agoSee also https://github.com/valence-rs/valence https://github.com/valence-rs/valence A "clean room" implementation of the Minecraft server written in Rust
- Imustaskforhelp 2y agoyes , I was also thinking about this . +1
- alex_medvedev 2y agoHi, Valence is a framework (similar to Minestom in Java). You have to build everything you self. Pumpkin is not a framework :D. Also Valence is bit unactive (look commits)
- tomasff 2y agoThat's why I said "clean room implementation". Any reason why Pumpkin does not build on top of Valence? Would be great to see a more cohesive ecosystem for Minecraft servers in the rust community rather than reinventing the wheel
- Imustaskforhelp 2y agoAs someone who knew about this project from earlier (I had even joined their discord) (currently have just deleted my discord account for better state of mind) Its really made me happy that hackernews really liked this project (140 upvotes is pretty good in my opinion) From what I remember , there was one other server as well which also was written in rust but I am not exactly sure Also , the last time I was at it , it was really really alpha software but it was getting developed at good rate , so I am not sure about its current state (I was there when the author had gone to take his exams IIRC)
- alex_medvedev 2y agoHi. Im so happy there are so many people liking the project, The Project is still pretty WIP but im really working hard on this, i finished my exmans last week and currently in holidays so commits are again back to normal :D
- compootr 2y agoMaybe it's cuberite? written in C I believe
- InMice 2y agoI will give it a try, Thanks for this project. The performance of pure vanilla server jar is so bad. Thats one thing I wish mojang would improve. I know new chunk generation is multithread at least. I also wish they'd officially support some basic control for SMP servers. Something as basic as areas defined by two corner coordinates and basic permissions like place, break, interact. Just a basic config file is fine I can manage the requests/updates ot it using other tools - or a simple commandline utilities in game to ops. Something that lets me not have to always only use an excluse whitelist. I know Paper/waterfall and the others have plugsins for this but theres just something nice about staying pure vanilla. Ive been keep servers alive for a long time now.
- deleted 2y ago[deleted]
- alex_medvedev 2y agoHey, Im happy you want to try it out just keep in mind its not done yet many features are missing, We want to have all the things you listed be configurable in a config file, so i think you will like it. If you have any problems may worth to take a look at https://snowiiii.github.io/Pumpkin/troubleshooting/common_issues.html https://snowiiii.github.io/Pumpkin/troubleshooting/common_is... or just ask for help on our discord, Have fun :D
- dleink 2y agothank you for your service
- SquareWheel 2y agoThe performance differences look pretty impressive from the benchmarks. I do notice that world generation and saving features are missing though, and these tend to be pretty expensive operations. Chunk gen especially can bring a weaker VPS to its knees. I'm sure the benchmarks were taken at an idle state, but I'd be curious to see how it compares once those features are included and being used. I don't see it listed, but is there support for block breaking/placing yet? Presumably this would require light recalculation and a chunk update on the server. Finally, do you plan to add advanced features like scoreboard, teams, or command block parsing in general? Mojang has at least open-sourced Brigadier for that. Cool project. Hope to see it mature to the point of making servers easier to run on low-end hardware.
- alex_medvedev 2y agoHey. Im impressed with the benchmarks myself tbh. Yep block placing and breaking is already supported, but light currently don't so everything is dark :/, We are working on it. Yep, We want to add all cool features like scoreboards, teams and we already have a API which is similar to use to Brigadier for our Commands. Thanks, I would love to give players on low-end hardware the possibility to host servers. I think i may test Pumpkin on a raspberry PI or something one day
- SquareWheel 2y agoI remember Notch talking about the lighting calculations being one of the hardest parts to program, so I can understand that being a challenge. Mojang made large improvements to the lighting engine in 1.20, bringing it in line with the performance mods Phosphor[1] and Starlight[2]. Despite being deprecated now, they might still offer some useful insight into how to approach such a system in a performant way. You'll need to be mindful of the licenses, but it's likely easier than reverse-engineering Minecraft (even with mappings). [1] https://github.com/CaffeineMC/phosphor-fabric https://github.com/CaffeineMC/phosphor-fabric [2] https://github.com/PaperMC/Starlight https://github.com/PaperMC/Starlight
- alex_medvedev 2y ago
- zellyn 2y agoHow does this compare to Dragonfly (IIUC, basically the same thing, but in Go)? https://github.com/df-mc/dragonfly https://github.com/df-mc/dragonfly
- mjtlittle 2y agoThis looks like its for java while dragonfly seems to be for bedrock
- alex_medvedev 2y agoYour right
- kamlaserbeam 2y agoJust to be clear this sever only works with the current vanilla version of Minecraft? I've been interested in playing again, but on the older Beta builds (1.7.3) prior to the full release versions. These versions aren't supported are they?
- dartos 2y agoJust waiting for Minecraft to be so reverse engineered as to be its own protocol with multiple server and client implementations that just work.
- str3wer 2y agoit already is, the entire protocol is reverse engineered, there are tools to automatically deobfuscate the code and there is already a full reimplementation of minecraft that also supports servers
- INTPenis 2y agoDoes that mean there are open source clients that can connect to servers without a microsoft account?
- beeboobaa3 2y agothe client has to authenticate with a central server and present a ticket to the server it wants to connect to. otherwise clients could impersonate each other easily.
- justusthane 2y agoThere are server mods that remove this requirement though.
- beeboobaa3 2y agosure, iirc it used to even just be a setting? online-mode=false most servers leave it enabled because preventing player impersonation is pretty important so people can't just easily grief each other. some piracy servers implemented their own auth on top.
- xboxnolifes 2y agoIf the server is configured to not require server auth.
- changexd 2y agoIt always fascinates me how people can do this!! Would there be any write ups about how this was made, I'd really appreciate this.
- jdright 2y agohttps://dayssincelastrustmcserver.com/ https://dayssincelastrustmcserver.com/
- n2d4 2y agoHaving done lots of Minecraft modding a decade ago, it's wonderful to see that the community is still active enough for there to be inside jokes like these. Given the size of the game, it's not an easy feat to build a Minecraft server in any language. Yet there are seven, in just Rust alone??
- faceplanted 2y agoIt makes sense that a very popular language would be being used to make one of the most popular projects.
- rcxdude 2y agoThe protocol minecraft uses to communicate between server and client is relatively straightforward and 'dumb' (read: tolerant of missing or contradictory data), so it's quite easy to make a server that a client will connect to and work OK with. Making something that supports all the game mechanics, especially world generation (an area Mojang/Microsoft are a lot more protective of, besides) and bug-compatibility, is a lot harder.
- lupusreal 2y agoIf somebody could get a high performance mc server working that supported everything except world generation, that would be immensely useful to a lot of people. Worlds are often pregenerated and this can be done offline by an official java instance, then give to the alternative software which players actually connect to. I suspect the hard part would be getting total parity with all the undocumented intricacies of mob spawning and AI, and block interactions. But if there are slight differences from Vanilla this isn't necessarily the end of the world for players. Popular server mods like Paper already tamper with some Minecraft "features" in an opinionated way and for the most part players don't notice.
- rumblefrog 2y agoImpressive stuff, but I'll be more keen to see an high performance implementation that also supports the vast numbers of Minecraft mods. Forge servers are notoriously slow on bigger modpacks.
- wavemode 2y agoHow would a server not written in Java support Java mods?
- rumblefrog 2y agoIt'd have to be a hybrid, with more of the expensive parts rewritten in a more well suited language.
- owlstuffing 2y agoRight, that’s my take as well. But on the whole I don’t see Java itself as being fundamentally less performant, particularly with JDK 21+. Architecture choices in either language make or break performance.
- owlstuffing 2y agoYep. Aren’t mods more or less the primary justification for building a server like this? Although Rust may in some ways improve performance, is that a better trade for the huge reduction in potential mods?
- mococa 2y agoWhen I was a game developer, the last language to be considered for use in game servers was Java. I think the Minecraft server is in Java exclusively because Notch was only proficient in that language at the time.
- lencastre 2y agoWOWOWOWOOWOWOWOW