
TrueCraft, An Open Source Implementation of Minecraft 1.7.3 - ekianjo
http://truecraft.io/
======
Sir_Cmpwn
Hi guys, I'm the author of this. Going to sleep soon but happy to answer
questions when I awake if you leave them here for me.

~~~
SunShiranui
If I'm not mistaken you're using the original Minecraft's textures. I would
suggest switching to something that isn't copyrighted by Mojang to avoid
issues.

~~~
Sir_Cmpwn
As xlib said, the screenshots were taken with the official client. I have a
contributor who is working on a free (as in freedom) texture pack that we can
use when we start working on the client.

~~~
deathcap
> As xlib said, the screenshots were taken with the official client. I have a
> contributor who is working on a free (as in freedom) texture pack that we
> can use when we start working on the client.

A freely-licensed texture pack would be great, I faced this same problem when
developing a different voxel-based game. There are plenty of texture packs
available on Minecraft Forums or Curse but very few released under permissive
licensing terms, or those that I could find were outdated.

So I made my own, feel free to use it or parts of it if you would like to:
[https://github.com/deathcap/ProgrammerArt](https://github.com/deathcap/ProgrammerArt)
\- it is updated for and includes all items and blocks for Minecraft 1.8,
available in "resource pack" (1.8-1.6), "texture pack" (1.5), and "stitch
pack" (1.4 and earlier, prebuilt texture atlas) formats. It is not the
greatest quality artwork I admit, but can serve as a decent placeholder, and
best of all is released under CC-BY 4.0 so it can be freely used and
distributed. Though if your contributor makes a better free texture pack I'll
probably switch =) cheers

~~~
Sir_Cmpwn
Thanks! This looks pretty cool. I especially like the "stick pack" option, of
course.

------
MrZongle2
As someone who has spent some time playing Minecraft (and has kids who have
spent even _more_ time doing so), I'm really happy to see this effort.

FTA: _" Most of what Mojang has added since beta 1.7.3 is fluff, life support
for a game that was “done” years ago."_

I don't know if Minecraft really has ever been _done_ , but I couldn't agree
more with the statement that Mojang has just added fluff. I'm amazed at what
they accomplished in 2012 and most of 2013, but things seemed to come to a
near-halt in 2014...with a major release taking ~8 months that resulted in
_flags_ , a handful of new blocks, and _still_ no sign of the oft-requested,
oft-promised Mod API.

If there was _one_ feature that would greatly expand the lifespan of the game,
it would be a consistent modding interface. Anybody who has been begged by
their kids to install a mod knows what a nightmare it can be, just from an
end-user standpoint. Why the development team didn't make this top priority
remains a mystery.

I can't help but think that once Mojang finished counting their money, they
decided to sit on their laurels...Alexander weeping and all that. The
Microsoft purchase, while appearing disastrous at first, may be the best thing
for the game at this point as the remaining Mojang staff don't appear to be
very interested in doing much other than bringing the Xbox version up to PC
capabilities. At least Microsoft will want to get their money's worth out of
the franchise.

------
z3t4
I hope you make it so that only the surface blocks are sent to the client. The
time it takes to "mine" a block is enough for the latency to send the block
behind it.

This would be a major improvement to the multi-player experience.

Also, send the input to the server, and not the position/speed vectors. That
way you will also get rid of the speed hacks.

Those "fixes" will completely rid the game from "hackers". Witch is the
biggest problem with Minecraft (and most other multi-player games).

~~~
asiekierka
>I hope you make it so that only the surface blocks are sent to the client.
The time it takes to "mine" a block is enough for the latency to send the
block behind it.

Orebfuscator or Spigot.

>Also, send the input to the server, and not the position/speed vectors. That
way you will also get rid of the speed hacks.

What? No. You can't make sure everyone moves the same way, and this would
undoubtedly lead to desyncs. If you want to make sure players don't move too
fast, use NoCheatPlus or what it was called.

A far bigger issue for servers is mods like Gammabright which make all blocks
have a brightness of 15, thus not requiring you to use torches or light
sources, as that's very hard to work around.

~~~
seanp2k2
[http://fabiensanglard.net/quake3/network.php](http://fabiensanglard.net/quake3/network.php)

Quake III was doing server-side calculated game state 16 years ago stupid fast
for 32 players moving quickly on dial-up modems; I doubt it'd be much of a
problem to do these days with even a lousy architecture for a game with much
much slower movement, e.g. Minecraft.

This problem has been solved pretty well many many times before.

~~~
catmanjan
The big difference is that the map in Minecraft is constantly changing which
can in turn change players position and potential actions - Quake 3 was
comparitively much simpler, more or less just a coordinate and velocity
vector.

But I agree, there is no reason for Minecraft performance to be so bad when
there are only 2 people on a server just mining one brick at a time!

~~~
mcphage
> The big difference is that the map in Minecraft is constantly changing

Not quite. The map in Minecraft changes. But if you optimize the game for the
"constantly changing" case, when it usually changes less than 1 block per user
per 10 seconds (and even that is high), then you're going to end up with code
that doesn't handle normal behavior very well.

------
tgdn
Could you at least add explanations on how to compile your thing on different
platforms? All this code is really nice, but if it doesn't actually compile
and do something it's quite pointless. Besides, bear in mind that not everyone
is running on Windows on this planet.

~~~
Alupis
There's an entire compiling section in the readme[1]... and mono is for 'nix
platforms.

[1]
[https://github.com/SirCmpwn/TrueCraft/blob/master/README.md](https://github.com/SirCmpwn/TrueCraft/blob/master/README.md)

------
nemo1618
Glad to see someone is doing this. Early Minecraft was so beautiful in its
simplicity.

Although, a big part of that (for me) was the soundtrack. Just three short
piano tracks by C418. I hope there's some way to include those in TrueCraft.

~~~
DanBC
You can still play old versions. You can use the launcher to create a profile
that uses the old alpha or beta versions.

[http://www.howtogeek.com/203196/how-to-change-your-
minecraft...](http://www.howtogeek.com/203196/how-to-change-your-minecraft-
game-version-and-set-up-profiles/)

~~~
topbru
Though multiplayer on these versions is dead for the most part, for obvious
reasons.

The authentication-related stuff also is broken in most (old) versions, same
goes with skins. These can be fixed through mods, though I'm not really sure
if it's worth the effort.

TrueCraft seems pretty interesting. I'm always a fan of open source games, and
voxel games interest me a bit more than other types of games.

MineTest had/has some potential, though it really needs some polishing.
Movement doesn't feel as smooth as in most other games, the textures aren't
the best, same goes with the menus. It has a decent modding API, though it's
mostly server-based which means there aren't any client-side mods (that I know
of).

Terasology is also an interesting open source voxel game, though the overall
aesthetic of the game doesn't feel consistent. It has simple Minecraft-like
textures, yet fancy effects/shaders. I'm also not a fan of the menus, though
that's just me being picky.

I think what makes Minecraft a bit different from these open-source games is
how everything is laid out. Movement feels smooth, menus are consistent and
simple, the font is legible, the controls are fine, the textures are easy to
get used to and the sounds/music are great.

I'm interested in seeing how TrueCraft ends up, if it will be following the
style of Minecraft in terms of visuals and gameplay.

~~~
asiekierka
Freeminer is trying to improve on Minetest in the graphical aspect, if you're
curious.

------
skrowl
Cool project! Can't wait to see a pure .NET client with OpenGL down the road.
I don't install Java on anything anymore (mostly due to all the security
issues) so I haven't played Minecraft in years.

~~~
maaaats
Running other people's code is unsafe whether it's java or not. Your comment
is misguided.

~~~
derefr
Java was originally _marketed as_ a secure VM sandbox allowing for untrusted
mobile code execution: centrally web "applets", but also zero-install desktop
apps. Basically, it was attempting to do what Javascript (especially with
ASM.js coupled to a browser's desktop-app integrations) eventually succeeded
at doing.

 _When held to those standards_ , Java has been kind of
disappointing—repeatedly oscillating between "just about good enough" and
"major hole preventing this setup from working." Likewise, many things
Javascript got right immediately (like the FS API providing per-origin virtual
filesystem containers rather than a view of the actual OS) were never even
considered. Despite the marketing, safe execution of untrusted code was never
much of a real goal for the platform, and disappeared entirely as a "tentpole"
after 1997 or so (despite everyone still _remembering_ the marketing and
thinking Java "should" be capable of that.)

When taken as just another bytecode-VM-based runtime platform like the .NET or
Erlang runtimes, used for executing code already granted the same level of
trust as the other native code on the system, Java is great.

------
VikingCoder
Has anyone made a similarly licensed Minecraft 1.7.3 (or close to it) client
that's worth looking at?

Or let me put it differently - what's the most popular open source client?

~~~
banthar
I've made this some years ago:
[https://github.com/banthar/mine3d](https://github.com/banthar/mine3d)

It's just the basics - only renders terrain and some static blocks. But it's
also based on 1.7.3 protocol.

I've just checked and it kinda works with TrueCraft server:
[http://i.imgur.com/Brf2NXg.png](http://i.imgur.com/Brf2NXg.png)

~~~
VikingCoder
What license is that under?

------
rottyguy
Not a minecrafter but interested in what the community's thought of this
interpretation: [http://www.businessinsider.com/minecraft-is-microsoft-
holole...](http://www.businessinsider.com/minecraft-is-microsoft-hololens-
killer-app-2015-4)

May dictate how you guys choose to build your product moving forward (you
gotta love building something for fun that potentially leads to something more
lucrative!)

------
asiekierka
Heh. Nice work.

As a mod developer, my plan on revitalizing Minecraft and making it more of a
sandbox again was always centered about designing a modpack going in that
direction - I've been working on it since December.

I don't really feel splitting the community into twenty reimplementations is a
good idea myself, though.

------
spapin
It should have been called Yourscraft

------
axx
Awesome project! Reminds me of something like OpenTTD
([http://de.wikipedia.org/wiki/OpenTTD](http://de.wikipedia.org/wiki/OpenTTD))
et al. Good job!

~~~
avianbc
[http://en.wikipedia.org/wiki/OpenTTD](http://en.wikipedia.org/wiki/OpenTTD)
English link

------
biafra
Does this build and run on anything besides Windows? If so, on what, and how
do I build it there? If not, a note mentioning this would be nice.

~~~
kenbellows
What you're looking for is the Mono framework, a crossplatform .NET
implementation. That is mentioned directly in the README

~~~
integraton
The mono information was only just added to the Readme, apparently after the
parent's comment was posted. Previously it only mentioned Windows.

------
debacle
This is fantastic. A true undertaking. I have seen this attempted almost a
dozen times before, but everyone gives up summarily far too soon.

Eager to investigate modding this.

------
topbru
So I assume this is currently just the server?

------
lurkinggrue
...So hipster Minecraft?

Still, nice job.

------
smlacy
... In C#

~~~
scrollaway
Yes? It seems like a good choice. Maybe 6 months ago I would have said it's
foolish, but with C# being an actual open language now, I'd say it's a rock
solid choice.

What would you have done it in? C, and never get any contributor? Or Java, and
do as bad as the original?

~~~
babuskov
Take a loot at some open source projects. The Battle For Wesnoth (c++) has
many more contributors than FreeCol (Java). I'm sure that number of C#
developers in the world who develop open source stuff is even smaller.

If your main goal is to get as many contributors as possible, perhaps
JavaScript would be the best choice.

And I'm still not convinced that Java is the main cause the original Minecraft
was bad.

Although I write all my games in C++ (native) and JavaScript (web) I did some
Java games for Android and the language is rarely the bottleneck if you are
careful about object life-cycles. The main bottleneck is usually the graphics
hardware.

I'm not saying that C# is bad choice. Actually I think it is a good choice,
just not for the reasons you state.

~~~
scrollaway
Fair enough, though I didn't mean to imply those _were_ the only good reasons.

I didn't mean to say C++ would have been a bad choice, I was mocking the
recurring mentality that a project is only good if it's in C (or even lower-
level languages). It's quite tiresome to deal with it, I'm sorry it didn't
quite get through.

Java was definitely one of the reasons the original Minecraft was bad though.
It (along with bad architecture) was the reason behind the massive server
footprint and why hosting minecraft servers is extremely expensive and
completely unscalable.

Hey, remember when Notch said he'd open source Minecraft once he was done with
it? I remember...

~~~
asiekierka
>Java was definitely one of the reasons the original Minecraft was bad though.
It (along with bad architecture) was the reason behind the massive server
footprint and why hosting minecraft servers is extremely expensive and
completely unscalable.

No. It wasn't Java.

The reasons are many, but here's some: All world logic happens in a single
thread (fixed in Minecraft 1.8, now there's a thread per world). Entity
lookups are very badly coded (mitigated, but not fixed by CoFHCore which
explicitly excludes dropped items from the lookups). There are many bad coding
decisions made throughout Minecraft (a nice amount of them is fixed by
FastCraft, which optimizes Minecraft and reduces its RAM usage by ~300MB;
OptiFine used to be good for the GPU but 1.7/1.8 integrated most of its
fixes). Every neighboring block/tile entity access loads that neighboring
chunk, then marks it as unused, then unloads it every 30 seconds (not a huge
issue in MC itself unless you use a lot of pistons, but a massive issue for
modded servers)

Etc, etc, etc. It is possible to scale Minecraft, however nowadays it is not
possible to scale Minecraft without mods and at least a basic knowledge of how
the engine works.

There was an experimental mod made by nallar in 2013 which dynamically ASM-
patched Minecraft and every mod to make all world logic fully threaded in
multiple worker threads, as well as a separate thread for chat; however, that
was really hard to maintain in practice, especially as mods grew more and more
complex.

A commonly used method is to run multiple instances of Minecraft servers and
use a proxy glue server like BungeeCord to treat them as separate world on one
server.

~~~
scrollaway
And guns don't kill people, they just make it very easy to do so.

I'm well aware of all those efforts. I'm also well aware of the insanity
behind them and _just how much effort_ was required for it all. Java really
didn't help the entire matter.

~~~
kbutler
So, you think that if Minecraft had been coded in C++, threading and memory
use and modding would have been so much easier?

Interesting.

~~~
scrollaway
You're mistaking "easier" and "more likely".

------
yarrel
Sadly it's in C#.

------
milkywayz
Should have been implemented in Java :/

> A completely clean-room implementation of Minecraft beta 1.7.3 (circa
> September 2011).

> To get started, sign the Contributor License Agreement to establish that you
> have not, in fact, ever read decompiled Minecraft code.

> 'Clean room design is the method of copying a design by reverse engineering
> and then recreating it'

Not sure why it makes sense to say in the repo you reverse engineered it but
then make contributors sign an agreement saying they havent read decompiled mc
source.

Reverse engineering is a very broad term, but generally involves analysis of
decompiled source, no?

~~~
ekianjo
Reverse engineering is usually illegal, but trying to reproduce the behavior
of said software by trial and error is not. That's why they mark the
difference.

~~~
vidarh
Reverse engineering is legal in a large number of countries - I'm not so sure
it's accurate to say it is "usually illegal".

There are exceptions, though, and it's worth people being aware of whether or
not it is legal in their country, but the biggest risk with reverse
engineering generally is not the legality of reverse engineering itself, but
that it makes it harder to justify yourself if the newly written code happens
to look surprisingly like the original code.

It is not unusual for people to come up with _very_ similar structured code if
the code is largely dictated by the same functionality and requirements, and
then it's easier if everyone involved can truthfully say they have never seen
how the original did it.

