Giter Club home page Giter Club logo

cuberite's Introduction

Cuberite

Jenkins Build Status AppVeyor Build Status

Cuberite is a Minecraft-compatible multiplayer game server that is written in C++ and designed to be efficient with memory and CPU, as well as having a flexible Lua Plugin API. Cuberite is compatible with the Java Edition Minecraft client.

Cuberite runs on Windows, *nix and Android operating systems. This includes Android phones and tablets as well as Raspberry Pis; support for small embedded devices is experimental.

Currently we support Release 1.8 - 1.12.2 Minecraft protocol versions.

Subscribe to the newsletter for important updates and project news.

Installation

There are several ways to obtain Cuberite.

Binaries

  • The easiest method is downloading for Windows or Linux from the website.
  • You can use the EasyInstall script for Linux and macOS, which automatically downloads the correct binary. The script is described below.

The EasyInstall script

This script will download the correct binary from the project site.

curl -sSfL https://download.cuberite.org | sh

Compiling

  • You can compile automatically for Linux, macOS and FreeBSD with the compile.sh script. The script is described below.
  • You can also compile manually. See COMPILING.md.

Compiling may provide better performance (1.5-3x as fast) and it supports more operating systems.

The compile.sh script

This script downloads the source code and compiles it. The script is smart enough to notify you of missing dependencies and instructing you on how to install them. The script doesn't work for Windows.

Using curl:

sh -c "$(curl -sSfL -o - https://compile.cuberite.org)"

Or using wget:

sh -c "$(wget -O - https://compile.cuberite.org)"

Hosted services

  • Hosted Cuberite is available via Gamocosm.

Contributing

Cuberite is licensed under the Apache License V2, and we welcome anybody to fork and submit a Pull Request back with their changes, and if you want to join as a permanent member we can add you to the team.

Cuberite is developed in C++ and Lua. To contribute code, please check out GETTING-STARTED.md and CONTRIBUTING.md for more details.

Plugins are written in Lua. You can contribute by developing plugins and submitting them to the plugin repository or the forum. Please check out our plugin introduction guide for more info.

If you are not a programmer, you can help by testing Cuberite and reporting bugs. See TESTING.md for details.

You can also help with documentation by contributing to the User's Manual.

Other Stuff

For other stuff, check out the homepage, the Users' Manual, the forums, and the Plugin API.

Support the Cuberite development team on Liberapay

cuberite's People

Contributors

12xx12 avatar andreasgoulas avatar archshift avatar bearbin avatar bibo38 avatar bond-009 avatar daniel0916 avatar gargaj avatar howaner avatar jammet avatar jfhumann avatar kingcol13 avatar lkolbly avatar madmaxoft avatar marmot21 avatar mathiascode avatar mbornand avatar narroo avatar nesco avatar nilspace avatar peterbell10 avatar safwathalaby avatar samjbarney avatar seadragon91 avatar thejumper avatar tigerw avatar vincentleung1 avatar vtlog-legacy avatar woazboat avatar worktycho avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cuberite's Issues

Implement a simple RCON commandline utility

Implement a simple RCON commandline utility (in the Tools folder) that could be used to send and receive arbitrary data to / from the server using the RCON protocol.

This will allow us to set up some automated tests.

Default ini-file read-redirect to .example.ini?

We changed most of the .ini files in the repo into .example.ini. Now it would make sense if the server read the .example.ini files instead of .ini files whenever the .ini file is missing. This behavior would be even beneficial for all .ini files, not only those used by the server.

How about we change the cIniFile to automatically read from .example.ini if the .ini file cannot be found? Of course, it would be nice to have the ability to switch off this redirection, if required. So:

bool cIniFile::ReadFile(bool a_AllowExampleRedirect = true);

Any comments?

Console Message on Entity Damaged

The console seems to be spammed with messages each time an entity takes damage, for example:

Player on Fire: cPlayer was dealt dtOnFire damage: Raw 1, Final 1 (0 covered by armor)
Squid Attack: cSquid was dealt dtAttack damage: Raw 1, Final 1 (0 covered by armor)

I don't believe that this is expected behaviour? Or have I accidentally changed a config option somewhere?

Line endings and tab conventions.

At the moment, the files in the repository are varied in their line endings and also what type of indentation they use.

It would be good to agree on one standard and stick to it. I think it would be a good idea to use Unix line endings as that's the git best practice, but I have no idea about the tabs. Tabs or spaces, and how many spaces is a tab?

Client crash on KickPlayer(Playername, Reason)

The client crashes when a plugin uses KickPlayer to kick a player, such as the Core /ban command. The console does not output any errors.

This also occurs with Player:GetClientHandle():Kick(Reason).

Gamemode: Invalid setting

Unfortunately #14 breaks Player:SetGameMode(Split[2]). Console shows: Player setting invalid gamemode.

Additionaly, when a squid is on fire and taking damage, the conslole is spammed with cSquid on fire messages.

LOG* not colouring text

LOGINFO, LOGWARN, LOGWARNING, and LOGERROR all do not colour text as expected.

My terminal definitely supports 256 colour mode, this, I tested.

Implement drowning for all cPawns

The code from cPlayer that implements drowning should be moved to cPawn, so that all mobs will take drowning damage (unless they are water-inhabitants)

Player speed not reset upon mid-fall teleport

If one moves oneself to a high place and jumps off, then upon gaining sufficient speed, attempts a teleport command which places oneself above a solid block, such as the /spawn command often does, one will find oneself dead due to the fall speed accumulated from fall previously killing oneself once one hits the ground.

As a summary (sorry about the complicated description): Fall speed isn't reset if you teleport mid-air. You can die by doing /spawn whilst falling.

I feel this is strictly speaking an enhancement - it's not part of vanilla functionality, but is somewhat widely accepted as to what a teleport command should do, at least in the Bukkit world.

Additional information: this only happens when you are falling and teleport to something below you, such as falling from the sky above spawn, then teleporting to spawn below.

Redstone doesn't update properly causing invalid game states

Redstone devices such as pistons and repeaters are able to receive a signal (i.e extend/light up) but do not retract/go off when the power source is removed, UNLESS there is a redstone update nearby.

For example, a piston will not retract unless one places a second torch next to or diagonal to it; a line of repeaters will not correctly power off unless you place a torch next to them; redstone dust follows this.

Video (sorry for low quality, my upload speed is low):
https://copy.com/WHaaDWpEHXg0 (Removed)

Server crash when a player goes higher then Y255

If a player comes higher then Y255 the server wil crash without giving a crashdump with the error:
cChunk::UnboundedRelGetBlockType: requesting a block with a_RelY out of range: 256 Verification failed: a_Chunk.UnboundedRelGetBlockType(RelX, RelY, RelZ, BlockIn), file ..\source\Player.cpp, line 1333

Core won't start

As of commit cc708f7, the Core wouldn't load because the function HandleDownfallCommand is missing.

Incomplete foodstuffs

The new eating handlers are great, but browsing the code, I believe you've left some out:

Potato
Poisonous potato
Baked potato
Pumpkin pie
Enchanted golden apple
Carrot
Golden carrot
Cake (whole and sliced) - not sure, haven't tested.

Lua API should be generated by a separate plugin

Currently the Lua API file, API.txt, is generated by the Debuggers plugin. It'd be better to have a separate plugin for this, both because the other functions in the Debuggers plugin are polluting the global namespace and people may want to keep the API writing, but not use any other Debuggers' functionality.

Write an article explaining threading issues between webadmin and world in plugins

The webadmin and world each run in a different thread, and plugins may cause a deadlock if they try to manipulate a world as a direct response to a webadmin request. We need an article explaining this and perhaps an API extension to simplify workarounds.

Original title: Deadlock between webserver and world-tick over PluginCS / ChunkmapCS

Original content:
When requesting a world-save-all from the webadmin, it is possible for the server to become deadlocked. The webserver has acquired the PluginCS and wants ChunkMapCS (in cChunkMap::SaveAllChunks() ), while the tick thread has the ChunkMapCS and wants the PluginCS (in cPlayer::Tick() )

This was reproduced in a server with a single online player running on localhost; OS WinXP 32-bit

What's the point of the Install directory?

It only seems to exist in order to hold software licenses and example files. Should the contents be cleaned out and moved into the MCServer folder? (Side note - should that folder be called MCServer or renamed to something different?).

Implement Rare Drops.

For example, armoured zombies sometimes drop their armour and plain zombies sometimes drop iron.

Fix clang compilation.

This would make it able to compile on macs, and also if people don't want to use gcc.

The main issue seems to be that Crypto++ does not support clang :(

No Clear License

The Apache license needs to be dropped into the code, so it's clear that the code is in fact apache licensed.

Refactor lua_state usage into a wrapper class

We have quite a few places that each use lua_state *, and each implements its own helper functions, such as PushFunction or ReportErrors(), and its own memory management for the Lua state.

We should refactor this, make a cLuaState class that would wrap the lua_state * and have accessor functions for all the low-level work.

Chunk Sparsing or Compression

To save RAM, the server should implement some form of sparsing or compression.

I think this is a very long-term goal, but it will be very worthwhile to implement.

Pistons not animating correctly

The block action packet (0x36) is either not sent or not always sent to the client. 95% of the time, a piston extends or retracts without animation.

It seems QueueSetBlock doesn't tick the correct number of ticks.

Implement the enchantment table

We have most of the parts working (UI, enchantments, etc.), so it'd be a good time to actually implement the enchanting on the enchantment table.

help and reload console commands should be handled by MCServer internals

If there's an error while loading the Core plugin, or the Core is not loaded at all, the server emits a misleading message, "unknown command, type 'help' for all commands" on an unknown command, but 'help' doesn't work.

As for the reload, there's no way to reload the Core plugin if there's an error in it, the server must be stopped and restarted.

Therefore, it would make sense to implement both of these console commands directly in the server, rather than in the Core.

Webadmin can't add new tabs

The tabs as they are now are hard coded in the template. They are not added with the Plugin:AddWebTab() function.

Autodownloading configurations

Does anyone want MCS to automatically generate download it's configurations files like the vanilla server?

Currently, only a few options are automatically generated (a bit of Server, Gamemode, Authentication, and Rcon) and the code is scattered everywhere this will be a problem if the admin inadvertently deletes the included inis. Additionally, this will allow four file distributions (plugins, webadmin, server, readme), as well as increased resistance against errors produced by code not using example.inis (especially plugins).

Would it be good to put it all at the start, and does it go into root.cpp or something?

Pistons can be duplicated

A piston can be duplicated. Please see video: ~~https://copy.com/nH0h90by0RB2~~(Removed)
Details:
A sticky retracts, pulling a piston with it. The pulled piston contacts the redtorch at it's destination and expands, presumably before the server can delete the original block (of the pulled piston), and therefore is able to push it out of the area marked for deletion and therefore duplicating it.

Additional bugs occur due to a piston being able to push an extended piston.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.