2016-05-12 10:07:46 +08:00
|
|
|
From 515d4a8639a67827a06af6b0d6d8dacb9f19d653 Mon Sep 17 00:00:00 2001
|
2016-03-01 07:09:49 +08:00
|
|
|
From: Byteflux <byte@byteflux.net>
|
|
|
|
Date: Wed, 2 Mar 2016 14:35:27 -0600
|
|
|
|
Subject: [PATCH] Add player view distance API
|
|
|
|
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
2016-05-12 10:07:46 +08:00
|
|
|
index 48376e8..032c514 100644
|
2016-03-01 07:09:49 +08:00
|
|
|
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
2016-05-12 10:07:46 +08:00
|
|
|
@@ -54,6 +54,15 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
2016-03-01 07:09:49 +08:00
|
|
|
public boolean f;
|
|
|
|
public int ping;
|
|
|
|
public boolean viewingCredits;
|
2016-04-24 09:39:22 +08:00
|
|
|
+ // Paper start - Player view distance API
|
|
|
|
+ private int viewDistance = -1;
|
|
|
|
+ public int getViewDistance() {
|
|
|
|
+ return viewDistance == -1 ? ((WorldServer) world).getPlayerChunkMap().getViewDistance() : viewDistance;
|
|
|
|
+ }
|
|
|
|
+ public void setViewDistance(int viewDistance) {
|
|
|
|
+ this.viewDistance = viewDistance;
|
|
|
|
+ }
|
|
|
|
+ // Paper end
|
2016-03-01 07:09:49 +08:00
|
|
|
|
|
|
|
// CraftBukkit start
|
|
|
|
public String displayName;
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
2016-05-12 10:07:46 +08:00
|
|
|
index b0249ff..77e9187 100644
|
2016-03-01 07:09:49 +08:00
|
|
|
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
|
|
|
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
2016-05-12 10:07:46 +08:00
|
|
|
@@ -46,7 +46,7 @@ public class PlayerChunkMap {
|
2016-04-24 09:39:22 +08:00
|
|
|
private final List<PlayerChunk> g = Lists.newLinkedList();
|
|
|
|
private final List<PlayerChunk> h = Lists.newLinkedList();
|
|
|
|
private final List<PlayerChunk> i = Lists.newArrayList();
|
|
|
|
- private int j;
|
|
|
|
+ private int j;public int getViewDistance() { return j; } // Paper OBFHELPER
|
|
|
|
private long k;
|
|
|
|
private boolean l = true;
|
|
|
|
private boolean m = true;
|
2016-05-12 10:07:46 +08:00
|
|
|
@@ -288,8 +288,11 @@ public class PlayerChunkMap {
|
2016-03-01 07:09:49 +08:00
|
|
|
int i = (int) entityplayer.d >> 4;
|
|
|
|
int j = (int) entityplayer.e >> 4;
|
|
|
|
|
|
|
|
- for (int k = i - this.j; k <= i + this.j; ++k) {
|
|
|
|
- for (int l = j - this.j; l <= j + this.j; ++l) {
|
|
|
|
+ // Paper start - Player view distance API
|
2016-04-24 09:39:22 +08:00
|
|
|
+ int viewDistance = entityplayer.getViewDistance();
|
|
|
|
+ for (int k = i - viewDistance; k <= i + viewDistance; ++k) {
|
|
|
|
+ for (int l = j - viewDistance; l <= j + viewDistance; ++l) {
|
2016-03-01 07:09:49 +08:00
|
|
|
+ // Paper end
|
2016-05-12 10:07:46 +08:00
|
|
|
PlayerChunk playerchunk = this.getChunk(k, l);
|
2016-03-01 07:09:49 +08:00
|
|
|
|
|
|
|
if (playerchunk != null) {
|
2016-05-12 10:07:46 +08:00
|
|
|
@@ -319,7 +322,9 @@ public class PlayerChunkMap {
|
2016-03-01 07:09:49 +08:00
|
|
|
if (d2 >= 64.0D) {
|
|
|
|
int k = (int) entityplayer.d >> 4;
|
|
|
|
int l = (int) entityplayer.e >> 4;
|
|
|
|
- int i1 = this.j;
|
2016-04-24 09:39:22 +08:00
|
|
|
+ final int viewDistance = entityplayer.getViewDistance(); // Paper - Player view distance API
|
|
|
|
+ int i1 = Math.max(getViewDistance(), viewDistance); // Paper - Player view distance API
|
|
|
|
+
|
2016-03-01 07:09:49 +08:00
|
|
|
int j1 = i - k;
|
|
|
|
int k1 = j - l;
|
|
|
|
|
2016-05-12 10:07:46 +08:00
|
|
|
@@ -328,7 +333,7 @@ public class PlayerChunkMap {
|
2016-04-24 09:39:22 +08:00
|
|
|
if (j1 != 0 || k1 != 0) {
|
|
|
|
for (int l1 = i - i1; l1 <= i + i1; ++l1) {
|
|
|
|
for (int i2 = j - i1; i2 <= j + i1; ++i2) {
|
|
|
|
- if (!this.a(l1, i2, k, l, i1)) {
|
|
|
|
+ if (!this.a(l1, i2, k, l, viewDistance)) { // Paper - Player view distance API
|
|
|
|
// this.c(l1, i2).a(entityplayer);
|
|
|
|
chunksToLoad.add(new ChunkCoordIntPair(l1, i2)); // CraftBukkit
|
|
|
|
}
|
2016-05-12 10:07:46 +08:00
|
|
|
@@ -480,4 +485,20 @@ public class PlayerChunkMap {
|
2016-03-01 07:09:49 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
// CraftBukkit end
|
|
|
|
+
|
|
|
|
+ // Paper start - Player view distance API
|
2016-04-24 09:39:22 +08:00
|
|
|
+ public void updateViewDistance(EntityPlayer player, int toSet) {
|
|
|
|
+ final int oldViewDistance = player.getViewDistance();
|
|
|
|
+
|
|
|
|
+ int viewDistance = MathHelper.clamp(toSet, 3, 32);
|
2016-05-12 10:07:46 +08:00
|
|
|
+ if (toSet < 0) {
|
|
|
|
+ viewDistance = -1;
|
|
|
|
+ }
|
2016-04-24 09:39:22 +08:00
|
|
|
+ if (viewDistance != oldViewDistance) {
|
2016-05-12 10:07:46 +08:00
|
|
|
+ removePlayer(player);
|
2016-04-24 09:39:22 +08:00
|
|
|
+ player.setViewDistance(viewDistance);
|
2016-05-12 10:07:46 +08:00
|
|
|
+ addPlayer(player);
|
2016-03-01 07:09:49 +08:00
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
2016-05-12 10:07:46 +08:00
|
|
|
index 5515958..9770c99 100644
|
2016-03-01 07:09:49 +08:00
|
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
2016-05-12 10:07:46 +08:00
|
|
|
@@ -1419,6 +1419,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
2016-04-14 04:57:34 +08:00
|
|
|
return this.getHandle().affectsSpawning;
|
2016-03-01 07:09:49 +08:00
|
|
|
}
|
2016-04-14 04:57:34 +08:00
|
|
|
|
2016-03-01 07:09:49 +08:00
|
|
|
+ @Override
|
|
|
|
+ public int getViewDistance() {
|
2016-04-24 09:39:22 +08:00
|
|
|
+ return getHandle().getViewDistance();
|
2016-03-01 07:09:49 +08:00
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void setViewDistance(int viewDistance) {
|
|
|
|
+ ((WorldServer) getHandle().world).getPlayerChunkMap().updateViewDistance(getHandle(), viewDistance);
|
|
|
|
+ }
|
2016-04-14 04:57:34 +08:00
|
|
|
+
|
2016-03-01 07:09:49 +08:00
|
|
|
// Spigot start
|
2016-04-14 04:57:34 +08:00
|
|
|
private final Player.Spigot spigot = new Player.Spigot()
|
|
|
|
{
|
2016-03-01 07:09:49 +08:00
|
|
|
--
|
2016-05-12 10:07:46 +08:00
|
|
|
2.8.2
|
2016-03-01 07:09:49 +08:00
|
|
|
|