Skip to content
This repository has been archived by the owner on Nov 19, 2018. It is now read-only.

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
ddevault committed Dec 27, 2014
0 parents commit e26e31f
Show file tree
Hide file tree
Showing 99 changed files with 5,059 additions and 0 deletions.
12 changes: 12 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
bin/
obj/
*.user
*.userprefs
*.suo
*.pidb
_ReSharper*/
TestResults/
*.mdf
*.psess
*.vsp
packages/
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "externals/fNbt"]
path = externals/fNbt
url = https://github.com/SirCmpwn/fNbt.git
7 changes: 7 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Copyright (c) 2015 Drew DeVault

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
50 changes: 50 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# TrueCraft

An open-source implementation of Minecraft Beta 1.7.3 (July 2011).

## What is TrueCraft

This is a completely
[clean-room](https://en.wikipedia.org/wiki/Clean_room_design) implementation of
Minecraft as it appeared in July of 2011. Contributors must verify that they
have never read any decompiled Minecraft code before submitting their changes
upstream.

## Why make it?

(begin opinionated section)

Minecraft Beta 1.7.3 was the perfect version of Minecraft. Most of what Mojang
added afterwards was fluff and, collectively, ruined the game. The goal of this
project is to take that perfect version and bring it back to life by effectively
forking Minecraft. We want the old spirit of Minecraft back, but actively
maintained and with a community that once again may thrive.

(end opinionated section)

I got tired of maintaining Craft.Net. I never had time to add features, I was
just keeping up the latest updates from Mojang to a game I liked less and less.
This project sets the goal in stone - implement Minecraft Beta 1.7.3. It's not a
moving target and I don't dislike that version of the game.

## Status

This project is very early in development, so don't expect to gain much from it.
The server will come first, and then the client. After then, some of the good
features from future versions of Minecraft will be implemented (like creative
mode, sprinting, etc).

Note that large-scale refactorings are probably going to be common for a while.
Minecraft is not very well designed and it's TrueCraft's responsibility to hide
this behind nicer abstractions.

## Community

There isn't much of one yet, but this is a sort of spiritual successor to
Craft.Net. The folks in #craft.net on Freenode will probably talk to you about
this project if you ask nicely.

## Blah blah blah

TrueCraft is not associated with Mojang or Minecraft in any sort of official
capacity.
196 changes: 196 additions & 0 deletions TrueCraft.API/BoundingBox.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TrueCraft.API
{
public enum ContainmentType
{
Disjoint,
Contains,
Intersects
}

// Mostly taken from the MonoXna project, which is licensed under the MIT license
public struct BoundingBox : IEquatable<BoundingBox>
{
#region Public Fields

public Vector3 Min;
public Vector3 Max;
public const int CornerCount = 8;

#endregion Public Fields


#region Public Constructors

public BoundingBox(Vector3 min, Vector3 max)
{
this.Min = min;
this.Max = max;
}

public BoundingBox(BoundingBox b)
{
this.Min = new Vector3(b.Min);
this.Max = new Vector3(b.Max);
}

#endregion Public Constructors


#region Public Methods

public ContainmentType Contains(BoundingBox box)
{
//test if all corner is in the same side of a face by just checking min and max
if (box.Max.X < Min.X
|| box.Min.X > Max.X
|| box.Max.Y < Min.Y
|| box.Min.Y > Max.Y
|| box.Max.Z < Min.Z
|| box.Min.Z > Max.Z)
return ContainmentType.Disjoint;


if (box.Min.X >= Min.X
&& box.Max.X <= Max.X
&& box.Min.Y >= Min.Y
&& box.Max.Y <= Max.Y
&& box.Min.Z >= Min.Z
&& box.Max.Z <= Max.Z)
return ContainmentType.Contains;

return ContainmentType.Intersects;
}

public bool Contains(Vector3 vec)
{
return Min.X <= vec.X && vec.X <= Max.X &&
Min.Y <= vec.Y && vec.Y <= Max.Y &&
Min.Z <= vec.Z && vec.Z <= Max.Z;
}

public static BoundingBox CreateFromPoints(IEnumerable<Vector3> points)
{
if (points == null)
throw new ArgumentNullException();

bool empty = true;
Vector3 vector2 = new Vector3(float.MaxValue);
Vector3 vector1 = new Vector3(float.MinValue);
foreach (Vector3 vector3 in points)
{
vector2 = Vector3.Min(vector2, vector3);
vector1 = Vector3.Max(vector1, vector3);
empty = false;
}
if (empty)
throw new ArgumentException();

return new BoundingBox(vector2, vector1);
}

/// <summary>
/// Offsets this BoundingBox. Does not modify this object, but returns a new one
/// </summary>
/// <returns>
/// The offset bounding box.
/// </returns>
/// <param name='Offset'>
/// The offset.
/// </param>
public BoundingBox OffsetBy(Vector3 Offset)
{
return new BoundingBox(Min + Offset, Max + Offset);
}

public Vector3[] GetCorners()
{
return new Vector3[]
{
new Vector3(this.Min.X, this.Max.Y, this.Max.Z),
new Vector3(this.Max.X, this.Max.Y, this.Max.Z),
new Vector3(this.Max.X, this.Min.Y, this.Max.Z),
new Vector3(this.Min.X, this.Min.Y, this.Max.Z),
new Vector3(this.Min.X, this.Max.Y, this.Min.Z),
new Vector3(this.Max.X, this.Max.Y, this.Min.Z),
new Vector3(this.Max.X, this.Min.Y, this.Min.Z),
new Vector3(this.Min.X, this.Min.Y, this.Min.Z)
};
}

public bool Equals(BoundingBox other)
{
return (this.Min == other.Min) && (this.Max == other.Max);
}

public override bool Equals(object obj)
{
return (obj is BoundingBox) && this.Equals((BoundingBox)obj);
}

public override int GetHashCode()
{
return this.Min.GetHashCode() + this.Max.GetHashCode();
}

public bool Intersects(BoundingBox box)
{
bool result;
Intersects(ref box, out result);
return result;
}

public void Intersects(ref BoundingBox box, out bool result)
{
if ((this.Max.X >= box.Min.X) && (this.Min.X <= box.Max.X))
{
if ((this.Max.Y < box.Min.Y) || (this.Min.Y > box.Max.Y))
{
result = false;
return;
}

result = (this.Max.Z >= box.Min.Z) && (this.Min.Z <= box.Max.Z);
return;
}

result = false;
}

public static bool operator ==(BoundingBox a, BoundingBox b)
{
return a.Equals(b);
}

public static bool operator !=(BoundingBox a, BoundingBox b)
{
return !a.Equals(b);
}

public override string ToString()
{
return string.Format("{{Min:{0} Max:{1}}}", this.Min.ToString(), this.Max.ToString());
}

#endregion

public double Height
{
get { return Max.Y - Min.Y; }
}

public double Width
{
get { return Max.X - Min.X; }
}

public double Depth
{
get { return Max.Z - Min.Z; }
}
}
}
Loading

0 comments on commit e26e31f

Please sign in to comment.