Realcraft:Main Page
Realcraft is a custom Minecraft Beta server coded by Jailout2000 around the Beta 1.8.1 protocol. It is coded in REALbasic, a crappy language but very easy to use and learn. Since it's coded in REALbasic, this means that it does not have access to kernel threads, and therefore is not a multi-threaded server. The server runs out of the console; it does not have a GUI to which you can control it.
Contents
License
Realcraft is written as closed source, therefore it is not available to the general public. If you really wish to see the source, message Jailout2000.
Project Status
Currently the project is in temporary inactive development.
Plans
- Eventually use an external library for generation of worlds. At the moment, generation of worlds is done internally, and is not very impressive (just flat worlds with some scenery).
- Provide a download for the server so others may use it.
- This will mean building the server for cross-platform support. Currently it is Windows only.
- Player authentication with Minecraft.net.
- MySQL database support.
- Advertise the server to others, so that it can be stress tested.
Live Server
This server may or may not be online; it's only online when Jailout2000 is working on the server.
- mc.clan-warp.net:25566
Source Code
The project source is closed/private, and available upon request. If you would like to see the source, message Jailout2000. He would have released it to the general public, but the problem with that is REALbasic isn't equipped to handle separation of files for things like github or Google Code; the closest thing it has is separated files in RBVCP format, which include #tag lines that you don't see in the Real Studio IDE, so it would make no sense to use it.
Development Status
Server has been rewritten with a new packet buffering system. It's now much easier for me to do things with the Minecraft protocol as opposed to before. The reason for the rewrite is because A) it was mostly hard to maintain and B) I lost the source code in a hard drive failure. Right now the rewrite is at the point of where the earlier version was; you can run around but don't swing your arm or click anything, don't even walk or jog. -- Jailout2000 19:33, 2 January 2012 (MST)
Development will begin again soon. -- Jailout2000 08:40, 30 December 2011 (MST)
Notchian clients no longer crash. Lots of internal code has been reworked with the help of Ribose. Fixed spawning bugs, it now works correctly on the first time. Fixed gltches with walking/jumping/arm-throwing; you are now free to walk around, just don't hit any blocks (left or right click) at the moment ;). Entities were worked on a bit, and understood a bit more; players should now see other players (but they cannot move right now, they can arm swing though!). Chat is now working properly, and is logged under a different log file. Other than all of this, the server is fairly stable, I can't crash it as of this moment, but that's not to say it isn't crashable, I'm sure somewhere there's a problem. -- Jailout2000 22:27, 24 October 2011 (MST)
Technical Details
These details are incorrect now that the server's codebase was rewritten. I will most likely not include this section, and it is subject for removal now. -- Jailout2000 19:36, 2 January 2012 (MST)
Class Hierarchy
- Entity
- Item
- Mob
- Player
- Projectile
- Vehicle
- ServerSocket
- GameServer
- TCPSocket
- GameSocket
- World
- WorldChunk
Class Objectives
Class | Description | Objectives |
---|---|---|
Entity | Entity refers to any item, mob, player, projectile, or vehicle in the world. Every entity has an ID (known as an EID or Entity ID) which is a unique 32-bit integer used to identify a specific entity. All entities have an XYZ double-precision floating-point (64-bit) integer coordinate pair along with single-precision floating-point (32-bit) integer pitch and yaw coordinates. Y points upwards, X points South, and Z points West. | Act as a base for each entity type. |
Item | An entity of type Item. It has the properties: ID, Damage/Uses, and Count. | Act as a representation of any item in the world. |
Mob | An entity of type Mob. It has the properties: Health, Stance, On-Ground, and Type. | Act as a representation of any aggressive or passive mob in the world (such as a creeper or spider). |
Player | An entity of type Player, a subclass of Mob. It has the properties: Experience, Food, Food Saturation, and Name. The inherited property Type is always set to zero. | Act as a representation of any player in the world (an actual person). |
Projectile | An entity of type Projectile. It has the properties: Type, Velocity X, Velocity Y, and Velocity Z. The Type IDs are shared between vehicles as well. | Act as a representation of any projectile in the world (such as an arrow). |
Vehicle | An entity of type Vehicle. It has the property: Passenger. The Type IDs are shared between projectiles as well. The Passenger is a reference to a valid Mob object. | Act as a representation of any vehicle in the world (such as a Minecart). |
GameServer | A class to wait for connections from outside the machine. All connections are handed off to a GameSocket object. | Act as the front-end of the server's connections. |
GameSocket | A class to process all network data events such as data received or data sent. | Read and parse all Minecraft game data, and possibly respond with data for the Minecraft client. Optionally, it can also disconnect the client when and where it sees fit. |
World | Holds data for each world on the server, including the name, who's in what world, the chunks related to the world, and much more. | Allow the server to host multiple worlds by having identifiable world objects. |
WorldChunk | Holds chunk data for a world on the server. The world seed plays a big role in how a chunk formulates its block data. The chunk is responsible for generating itself for the world to use. | Allow the world to have a set of chunks to send to a Minecraft client. |
Logging
The logger is called whenever there is text displayed to the command line. Whatever you see on screen is also sent to a file. The only exception to this rule is when Realcraft is displaying a percentile of an action being done (i.e. Generating world... 50%), in this case the file does not get updated until the full line is displayed (Generating world... done.) or when there's an error while doing the action.
All logs are stored in the folder called Logs under the folder Realcraft inside the application data folder of your system. On Windows Vista and newer, this is your %APPDATA% folder (C:\Users\<user>\AppData\Roaming).
The filename is always in the format YYYY-MM-DD.log where YYYY is the year, MM is the month, and DD is the day of the month.
Log data is always appended to the current log file, it never replaces a file's previous data. Log data is outputted as plain text. Each line represents a new log entry, and all log entries have a format of [HH:MM:SS]<space><payload> where HH:MM:SS is the timestamp in 24-hour format, <space> is a 0x20 (a spacebar), and <payload> is the information. All new lines are ended as per the system the data is logged to. Linux and other minor systems end all lines in 0x0D (\n), Windows ends all lines in 0x0D and 0x0A (\r\n) respectively, and Mac ends all lines in 0x0A (\r).