This repository has been archived by the owner on Nov 19, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 314
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit e26e31f
Showing
99 changed files
with
5,059 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; } | ||
} | ||
} | ||
} |
Oops, something went wrong.