A minecraft-like multi version client implemented in Rust.

Related tags

Leafish
Overview

Leafish logo Leafish

Multi-version Minecraft-compatible client written in Rust, forked from Stevenarella.


Screenshot showing the main menu


Chat

Chat takes place on Matrix and Discord. The channels are bridged to each other so you won't need an account on both services.

If you want to help make and improve the game, join the developer room.

If you're a user and need help or want to ask some questions then join the general room.

Announcements are made in the announcement room and joining it is a good way to keep up-to-date with the project.

General Development Announcements
Matrix Matrix Matrix
Discord Discord Discord

Aside from the individual rooms you can also join the Matrix space to have all rooms grouped together nicely.

Contents

Introduction

Leafish is an open-source re-implementation of Minecraft. The game is a open-world sandbox where players explore a blocky, procedurally-generated 3D world with virtually infinite terrain, and may discover and extract raw materials, craft tools and items, and build structures or earthworks. The game has various game modes including survival mode, in which players must acquire resources to build the world and maintain health, and a creative mode, where players have unlimited resources and access to flight.

Minecraft is originally written by Mojang in Java for PC, but nowadays also has a so-called "Bedrock edition" which has ports to various alternative platforms. Leafish attempts to provide everything from the Java-edition and tries to be compatible with it so you can join regular servers and play alongside people using the official Java-based clients. Being written in Rust with support for modern graphic API's like Vulkan means performance improvements and enhancements that are not possible in the original game. It's also completely community driven!

Note that currently not everything from the original game is supported yet so Leafish can't currently be seen as a fully fledged alternative. A list of missing features is available on the issues page.

Version support

Symbol Meaning
All features supported
- Protocol supported (so the client can join servers using the version) but various missing features
Game version Protocol version Supported?
1.16.5 754 -
1.16.4 754 -
1.16.3 753 -
1.16.2 751 -
1.16.1 736 -
1.16 735 -
1.15.2 578 -
1.15.1 575 -
1.14.4 498 -
1.14.3 490 -
1.14.2 485 -
1.14.1 480 -
1.14 477 -
19w02a 452 -
18w50a 451 -
1.13.2 404 -
1.12.2 340 -
1.11.2 316 -
1.11 315 -
1.10.2 210 -
1.9.2 109 -
1.9 107 -
15w39c 74 -
1.8.9 47 -
1.7.10 5 -

Leafish is designed to support multiple protocol versions, so that client development is not in lock-step with the server version. The level of support varies, but the goal is to support major versions from 1.7.10 up to the current latest major version. Occasionally, snapshots are also supported.

Forge servers are supported on 1.7.10 - 1.12.2 (FML) and 1.13.2 - 1.16.5 (FML2).

Support for older protocols will not be dropped as newer protocols are added.

Getting the game

Downloading a pre-built version

Since there currently is no release yet, pre-built binaries have to be downloaded from Github Actions. The latest actions can always be seen here. Click on a workflow run from the main branch and download the artifact for your platform.

Building the game

Dependencies

Rust stable version 1.53.0 or newer is required.

Debian/Ubuntu

sudo apt-get install cargo libssl-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev

Alpine Linux

sudo apk add cargo openssl-dev xcb-util-dev

Building

Make sure you're in the root of the Git repository before running the following commands.

Compile and run:

cargo run --release

Just compile:

cargo build --release

Running

Double-clicking the game should be enough to run Leafish, which will bring up a login screen followed by a server list from which you can select a server. If nothing happens consider running the executable from the command-line, ./leafish and see if any errors come up.

Contributing

A list of bugs and missing features can be found on the issue tracker. Feel free to work on any bug and submit a pull request to the main branch with the fix. Mentioning that you intend to fix a bug on the issue will prevent other people from trying as well and makes sure no duplicated work is done.

New features

Please talk to the Leafish team first before starting to develop a new feature. We first and foremost try to make the game feature complete compared to the vanilla Java edition and except for very specific things these should be prioritized. Therefor contacting us will allow us to help you or prevent you from wasting any time. You can talk to us via Matrix and/or Discord, see links at the top of this page.

Credits

Thanks to @thinkofname for the original Steven (Rust) and @iceiix for taking up development with Stevenarella.

License

Dual-licensed MIT and ApacheV2

Issues
  • No blocks render and impossible to move around on 1.12.2 servers

    No blocks render and impossible to move around on 1.12.2 servers

    I thought I would give Leafish a shot but so far I can't really do anything :thinking:

    Screenshot_20210825_211336

    opened by PureTryOut 19
  • Bumped up macOS version

    Bumped up macOS version

    Since GitHub hasn't updated macos-latest I bumped up the macOS version from 10.15 to 10.16 (For some reason, the macOS 10.15 CI uses the Xcode 11 SDK, while the macOS 10.16 CI uses the Xcode 12.X SDK, which lead to less compatibility with the Rosetta 2 interpreter)

    opened by iMonZ 16
  • Make Flatpak package

    Make Flatpak package

    Flatpak is a universal package manager for Linux. Flathub is one of Flatpak's repo (remote) which includes a build system. Alternatively we can use GitHub CI to create Flatpak bundles: https://github.com/marketplace/actions/flatpak-builder.

    I'm quite familiar with Flatpak so I can create a manifest.


    I don't have a Minecraft account, so I'd like others to test it for me. If you want to test, please read the instructions at https://github.com/terrarier2111/Leafish/issues/104#issuecomment-913779965.

    enhancement low-priority 
    opened by TheEvilSkeleton 12
  • Improve Flatpak

    Improve Flatpak

    null

    opened by TheEvilSkeleton 11
  • Server without Crashing

    Server without Crashing

    Hey,

    is there a Testing-Server that works without crashing? I tried a few servers, but only one chunk is loading and textures are broken.

    question 
    opened by iMonZ 8
  • Initial Leafish Flatpak

    Initial Leafish Flatpak

    Closes https://github.com/terrarier2111/Leafish/issues/104.

    Since this MR requires approval, test CIs will be available at https://github.com/TheEvilSkeleton/Leafish/pull/1.

    opened by TheEvilSkeleton 8
  • Copy-paste doesn't work on Wayland

    Copy-paste doesn't work on Wayland

    On X11 however it works fine. This makes it hard to enter my password and I have to switch to an X11 session :cry:

    Tested on KDE Plasma 5.22

    opened by PureTryOut 8
  • Wip: Add Material::from(isize)

    Wip: Add Material::from(isize)

    Hello this is a work in progress, I don't know if you want a huge match statement like this or you would like to use something else.

    When I run it from minecraft server 1.16.4 it tries too set item 902. but is is not in the list. image image

    do somebody know where to look for minecraf block id's?

    I am going to remove log::info later. it is just for debugging purpose.

    opened by kepet19 5
  • Login page, takes cursor, can't write in the input fields

    Login page, takes cursor, can't write in the input fields

    Login page, takes cursor, can't write in the input fields. this happens on main branch latest commit: 6f8783b

    bug high-priority 
    opened by kepet19 4
  • gitignore: ignore _all_ target directories

    gitignore: ignore _all_ target directories

    I several times had a protocol/target folder which I kept accidentally committing. Let's ignore that directory (and others).

    I'm not entirely sure this does the right thing so needs testing, but right now I can't get the folder to appear again.

    opened by PureTryOut 4
  • Replace remaining std RwLocks and Mutexes

    Replace remaining std RwLocks and Mutexes

    The majority of RwLocks/Mutexes we are currently using are from parking_lot, let's replace the remaining std ones

    enhancement good first issue easy 
    opened by terrarier2111 0
  • Support setting video as background

    Support setting video as background

    This lib seems to be fitting our needs: https://github.com/image-rs/image

    enhancement low-priority easy 
    opened by terrarier2111 0
  • Fix pure ipaddreses (ip's without a port) could not resolve.

    Fix pure ipaddreses (ip's without a port) could not resolve.

    Fixes #134 normal hostnames could be resolve without a port. it was only Ip adresses that could not.

    The name you can see in the server list is the same as the adress.

    Before

    210912-2038-55

    Now

    image

    I have simplified the code and it can still connect to server where it is protected by TCPShield. I did throw in a empty server where the field is empty. also kkmp.dk does not exits.

    FIY this pr also removes regex

    opened by kepet19 14
  • Keep breaking blocks when holding left click

    Keep breaking blocks when holding left click

    Currently you have to click on your left mouse button each time you broke a block in order to destroy the next one, but that's not desirable, change this behavior!

    enhancement easy 
    opened by terrarier2111 0
  • WIP: Stop the game from crashing when logging in with a Mojang account without a valid MC license

    WIP: Stop the game from crashing when logging in with a Mojang account without a valid MC license

    I have no way to test this myself though...

    opened by PureTryOut 0
  • Implement block hardness/tool efficiency

    Implement block hardness/tool efficiency

    null

    enhancement high-priority easy 
    opened by terrarier2111 0
  • Refactor settings system

    Refactor settings system

    In general the usage stays the same, but now there is no need anymore to pass the "vars" variable as created in src/main.rs around through the whole program anymore. It can still be done for performance reasons (you don't want to re-read the config every game tick for example), but otherwise you can now read settings only the moment you need it:

    let vars = settings::Vars::new()
    vars.get(settings::vars::BACKGROUND_IMAGE)
    

    It also moves away the reading and saving of settings from and to disk to a dedicated setting module. Console was a really weird place to do this...

    opened by PureTryOut 8
  • Use the background image on every screen

    Use the background image on every screen

    ~~This requires too much passing around of the background_image variable, but good enough for now till the settings system has been reworked~~

    EDIT: This depends on #139 and shouldn't be merged first.

    opened by PureTryOut 3
  • Refactor the settings system

    Refactor the settings system

    Currently the settings are read on startup https://github.com/Lea-fish/Leafish/blob/main/src/main.rs#L217 and then passed along through the entire application. This works but is complicated and annoying, you don't want to pass such a global thing around everywhere. It would instead be nice to be able to do settings::get(<setting>) to get the value, from anywhere in the code.

    For example settings::get(auth::CL_USERNAME) should return you the username used.

    Also currently the settings reading and saving is done inside src/console/mod.rs which seems like the wrong place to do such a thing. Instead that should focus entirely on the console of the game, and let the settings module do it's work itself.

    enhancement medium 
    opened by PureTryOut 0
A minecraft-like multi version client implemented in Rust.

Leafish Multi-version Minecraft-compatible client written in Rust, forked from Stevenarella. Chat Chat takes place on Matrix and Discord. The channels

null 336 Sep 14, 2021
Official Rust client for Central Dogma

centraldogma-rs Official Rust Client for Central Dogma. Full documentation is available at https://docs.rs/centraldogma Getting started Installing Add

LINE 39 Aug 12, 2021
A programmable document database inspired by CouchDB written in Rust

PliantDB PliantDB aims to be a Rust-written, ACID-compliant, document-database inspired by CouchDB. While it is inspired by CouchDB, this project will

Khonsu Labs 55 Sep 20, 2021
Mysql client library implemented in rust.

mysql This crate offers: MySql database driver in pure rust; connection pool. Features: macOS, Windows and Linux support; TLS support via nativetls cr

Anatoly I 448 Sep 9, 2021
The official MongoDB Rust Driver

MongoDB Rust Driver This repository contains the officially supported MongoDB Rust driver, a client side library that can be used to interact with Mon

mongodb 814 Sep 14, 2021
Distributed transactional key-value database, originally created to complement TiDB

Website | Documentation | Community Chat TiKV is an open-source, distributed, and transactional key-value database. Unlike other traditional NoSQL sys

TiKV Project 9.9k Sep 16, 2021
Official Skytable client driver for Rust

Skytable client Introduction This library is the official client for the free and open-source NoSQL database Skytable. First, go ahead and install Sky

Skytable 7 Aug 24, 2021
RedisLess is a fast, lightweight, embedded and scalable in-memory Key/Value store library compatible with the Redis API.

RedisLess is a fast, lightweight, embedded and scalable in-memory Key/Value store library compatible with the Redis API.

Qovery 132 Aug 31, 2021
An Elasticsearch REST API client for Rust

elastic elastic is an efficient, modular API client for Elasticsearch written in Rust. The API is targeting the Elastic Stack 7.x. elastic provides st

null 247 Sep 9, 2021
etcd for rust

etcd for Rust An etcd(API v3) client for Rust, and it provides async/await APIs backed by tokio and tonic. Documentation on the library can be found a

ccc 98 Aug 7, 2021
Redis library for rust

redis-rs Redis-rs is a high level redis library for Rust. It provides convenient access to all Redis functionality through a very flexible but low-lev

Armin Ronacher 2.1k Sep 11, 2021
TDS 7.2+ (mssql / Microsoft SQL Server) async driver for rust

Tiberius A native Microsoft SQL Server (TDS) client for Rust. Supported SQL Server versions Version Support level Notes 2019 Tested on CI 2017 Tested

Prisma 115 Sep 8, 2021
Telegram bot API client for Rust

Frankenstein Telegram bot API client for Rust. It's a complete wrapper for Telegram bot API and it's up to date with version 5.2 of the API. Frankenst

Ayrat Badykov 46 Sep 15, 2021
A easy-use client to influxdb

InfluxDBClient-rs A easy-use client to influxdb Overview This is an InfluxDB driver for Rust. Status This project has been able to run properly, PR is

漂流 69 Sep 14, 2021
Immutable Ordered Key-Value Database Engine

PumpkinDB Build status (Linux) Build status (Windows) Project status Usable, between alpha and beta Production-readiness Depends on your risk toleranc

null 1.3k Sep 14, 2021
Materialize simplifies application development with streaming data. Incrementally-updated materialized views - in PostgreSQL and in real time. Materialize is powered by Timely Dataflow.

Materialize is a streaming database for real-time applications. Get started Check out our getting started guide. About Materialize lets you ask questi

Materialize, Inc. 3.1k Sep 17, 2021
FeOphant - A SQL database server written in Rust and inspired by PostreSQL.

A PostgreSQL inspired SQL database written in Rust.

Christopher Hotchkiss 19 Sep 13, 2021
Pure Rust library for Apache ZooKeeper built on MIO

rust-zookeeper Zookeeper client written 100% in Rust This library is intended to be equivalent with the official (low-level) ZooKeeper client which sh

Nándor István Krácser 143 Sep 7, 2021
influxdb provides an asynchronous Rust interface to an InfluxDB database.

influxdb influxdb provides an asynchronous Rust interface to an InfluxDB database. This crate supports insertion of strings already in the InfluxDB Li

null 9 Feb 16, 2021