summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/PlayerManager.java
diff options
context:
space:
mode:
authorErik Broes <erikbroes@ripe.net>2011-02-01 20:26:07 +0100
committerErik Broes <erikbroes@ripe.net>2011-02-01 20:26:47 +0100
commita3fbada1e8150a350ff7f9bf38841cd7b0acc01d (patch)
tree8f47640e3a9f22a641d6101494d06b47be66a854 /src/main/java/net/minecraft/server/PlayerManager.java
parent21b8c16886ad4b4fd5cfeaa5a03bc15c8af95077 (diff)
downloadcraftbukkit-a3fbada1e8150a350ff7f9bf38841cd7b0acc01d.tar
craftbukkit-a3fbada1e8150a350ff7f9bf38841cd7b0acc01d.tar.gz
craftbukkit-a3fbada1e8150a350ff7f9bf38841cd7b0acc01d.tar.lz
craftbukkit-a3fbada1e8150a350ff7f9bf38841cd7b0acc01d.tar.xz
craftbukkit-a3fbada1e8150a350ff7f9bf38841cd7b0acc01d.zip
Chunkloading around player now happens in a spiral! No more floating over the void waiting for the floor to load!
Diffstat (limited to 'src/main/java/net/minecraft/server/PlayerManager.java')
-rw-r--r--src/main/java/net/minecraft/server/PlayerManager.java138
1 files changed, 138 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/PlayerManager.java b/src/main/java/net/minecraft/server/PlayerManager.java
new file mode 100644
index 00000000..7fac33b3
--- /dev/null
+++ b/src/main/java/net/minecraft/server/PlayerManager.java
@@ -0,0 +1,138 @@
+package net.minecraft.server;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PlayerManager {
+
+ private List a = new ArrayList();
+ private PlayerList b = new PlayerList();
+ private List c = new ArrayList();
+ private MinecraftServer d;
+
+ public PlayerManager(MinecraftServer minecraftserver) {
+ this.d = minecraftserver;
+ }
+
+ public void a() {
+ for (int i = 0; i < this.c.size(); ++i) {
+ ((PlayerInstance) this.c.get(i)).a();
+ }
+
+ this.c.clear();
+ }
+
+ private PlayerInstance a(int i, int j, boolean flag) {
+ long k = (long) i + 2147483647L | (long) j + 2147483647L << 32;
+ PlayerInstance playerinstance = (PlayerInstance) this.b.a(k);
+
+ if (playerinstance == null && flag) {
+ playerinstance = new PlayerInstance(this, i, j);
+ this.b.a(k, playerinstance);
+ }
+
+ return playerinstance;
+ }
+
+ public void a(int i, int j, int k) {
+ int l = i >> 4;
+ int i1 = k >> 4;
+ PlayerInstance playerinstance = this.a(l, i1, false);
+
+ if (playerinstance != null) {
+ playerinstance.a(i & 15, j, k & 15);
+ }
+ }
+
+ public void a(EntityPlayer entityplayer) {
+ int i = (int) entityplayer.locX >> 4;
+ int j = (int) entityplayer.locZ >> 4;
+
+ entityplayer.d = entityplayer.locX;
+ entityplayer.e = entityplayer.locZ;
+
+ for (int k = i - 10; k <= i + 10; ++k) {
+ for (int l = j - 10; l <= j + 10; ++l) {
+ this.a(k, l, true).a(entityplayer);
+ }
+ }
+
+ this.a.add(entityplayer);
+ }
+
+ public void b(EntityPlayer entityplayer) {
+ int i = (int) entityplayer.d >> 4;
+ int j = (int) entityplayer.e >> 4;
+
+ for (int k = i - 10; k <= i + 10; ++k) {
+ for (int l = j - 10; l <= j + 10; ++l) {
+ PlayerInstance playerinstance = this.a(k, l, false);
+
+ if (playerinstance != null) {
+ playerinstance.b(entityplayer);
+ }
+ }
+ }
+
+ this.a.remove(entityplayer);
+ }
+
+ private boolean a(int i, int j, int k, int l) {
+ int i1 = i - k;
+ int j1 = j - l;
+
+ return i1 >= -10 && i1 <= 10 ? j1 >= -10 && j1 <= 10 : false;
+ }
+
+ public void c(EntityPlayer entityplayer) {
+ int i = (int) entityplayer.locX >> 4;
+ int j = (int) entityplayer.locZ >> 4;
+ double d0 = entityplayer.d - entityplayer.locX;
+ double d1 = entityplayer.e - entityplayer.locZ;
+ double d2 = d0 * d0 + d1 * d1;
+
+ if (d2 >= 64.0D) {
+ int k = (int) entityplayer.d >> 4;
+ int l = (int) entityplayer.e >> 4;
+ int i1 = i - k;
+ int j1 = j - l;
+
+ if (i1 != 0 || j1 != 0) {
+ for (int k1 = i - 10; k1 <= i + 10; ++k1) {
+ for (int l1 = j - 10; l1 <= j + 10; ++l1) {
+ if (!this.a(k1, l1, k, l)) {
+ this.a(k1, l1, true).a(entityplayer);
+ }
+
+ if (!this.a(k1 - i1, l1 - j1, i, j)) {
+ PlayerInstance playerinstance = this.a(k1 - i1, l1 - j1, false);
+
+ if (playerinstance != null) {
+ playerinstance.b(entityplayer);
+ }
+ }
+ }
+ }
+
+ entityplayer.d = entityplayer.locX;
+ entityplayer.e = entityplayer.locZ;
+ }
+ }
+ }
+
+ public int b() {
+ return 144;
+ }
+
+ static MinecraftServer a(PlayerManager playermanager) {
+ return playermanager.d;
+ }
+
+ static PlayerList b(PlayerManager playermanager) {
+ return playermanager.b;
+ }
+
+ static List c(PlayerManager playermanager) {
+ return playermanager.c;
+ }
+}