diff options
Diffstat (limited to 'src/main/java')
7 files changed, 33 insertions, 294 deletions
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java index 1146605f..c7fa3a18 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -29,16 +29,6 @@ public class EntityPlayer extends EntityHuman implements ICrafting { private int bO = 0; public boolean h; - // CraftBukkit start - extra variables - private boolean viewDistanceSet; - private int viewDistance; // set view distance on a per player basis - private int actualViewDistance; // when view distance in the world changes, need to know how far I could previously see - public String displayName; - public org.bukkit.Location compassTarget; - public long timeOffset = 0; - public boolean relativeTime = true; - // CraftBukkit end - public EntityPlayer(MinecraftServer minecraftserver, World world, String s, ItemInWorldManager iteminworldmanager) { super(world); iteminworldmanager.player = this; @@ -61,12 +51,13 @@ public class EntityPlayer extends EntityHuman implements ICrafting { this.height = 0.0F; // CraftBukkit start - this.viewDistanceSet = false; - this.actualViewDistance = getViewDistance(); // set the 'current' view distance. This value will be updated any time the actual view distance changes this.displayName = this.name; - // CraftBukkit end } + public String displayName; + public org.bukkit.Location compassTarget; + // CraftBukkit end + public void spawnIn(World world) { super.spawnIn(world); // CraftBukkit - world fallback code, either respawn location or global spawn @@ -492,6 +483,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting { } // CraftBukkit start + public long timeOffset = 0; + public boolean relativeTime = true; public long getPlayerTime() { if (this.relativeTime) { @@ -507,55 +500,5 @@ public class EntityPlayer extends EntityHuman implements ICrafting { public String toString() { return super.toString() + "(" + this.name + " at " + this.locX + "," + this.locY + "," + this.locZ + ")"; } - - public void setViewDistance(int viewDistance) { - if (viewDistance < 1) { // for now must set view distance to 1 or higher. 0 might be possible, but it breaks the game at the moment - viewDistance = 1; - } - this.viewDistance = viewDistance; - this.viewDistanceSet = true; - updateViewDistance(); - } - - public int getViewDistance() { - if (viewDistanceSet) { - return viewDistance; - } else { - return defaultViewDistance(); - } - } - - private int defaultViewDistance() { - org.bukkit.World world = getBukkitEntity().getWorld(); - if (world != null) { - return world.getViewDistance(); - } else { - return getBukkitEntity().getServer().getViewDistance(); - } - } - - public void resetViewDistance() { - this.viewDistanceSet = false; - updateViewDistance(); - } - - public boolean isViewDistanceSet() { - return viewDistanceSet; - } - - /** - * Should be called every time the view distance might have changed. - * Ensures we are always aware of the current and previous view distances. - * - * synchronized so that we are always sure that we have accurately tracked the view distance changes - */ - public synchronized void updateViewDistance() { - if (actualViewDistance == getViewDistance()) { - return; - } - // notify the player manager that our view distance may have changed - ((CraftWorld) getBukkitEntity().getWorld()).getHandle().manager.updatePlayerViewDistance(this, actualViewDistance, getViewDistance()); - actualViewDistance = getViewDistance(); - } // CraftBukkit end } diff --git a/src/main/java/net/minecraft/server/PlayerManager.java b/src/main/java/net/minecraft/server/PlayerManager.java index ab606fbb..3dbb30d3 100644 --- a/src/main/java/net/minecraft/server/PlayerManager.java +++ b/src/main/java/net/minecraft/server/PlayerManager.java @@ -14,10 +14,15 @@ public class PlayerManager { private final int[][] g = new int[][] { { 1, 0}, { 0, 1}, { -1, 0}, { 0, -1}}; public PlayerManager(MinecraftServer minecraftserver, int i, int j) { - // CraftBukkit start - no longer need to track view distance here, defers to the player. - this.server = minecraftserver; - this.e = i; - // CraftBukkit end + if (j > 15) { + throw new IllegalArgumentException("Too big view radius!"); + } else if (j < 3) { + throw new IllegalArgumentException("Too small view radius!"); + } else { + this.f = j; + this.server = minecraftserver; + this.e = i; + } } public WorldServer a() { @@ -61,7 +66,7 @@ public class PlayerManager { entityplayer.d = entityplayer.locX; entityplayer.e = entityplayer.locZ; int k = 0; - int l = entityplayer.getViewDistance(); // CraftBukkit - use per-player view distance rather than this.f; + int l = this.f; int i1 = 0; int j1 = 0; @@ -96,11 +101,8 @@ public class PlayerManager { int i = (int) entityplayer.d >> 4; int j = (int) entityplayer.e >> 4; - // CraftBukkit start - use per-player view distance instead of this.f - int viewDistance = entityplayer.getViewDistance(); - for (int k = i - viewDistance; k <= i + viewDistance; ++k) { - for (int l = j - viewDistance; l <= j + viewDistance; ++l) { - // CraftBukkit end + for (int k = i - this.f; k <= i + this.f; ++k) { + for (int l = j - this.f; l <= j + this.f; ++l) { PlayerInstance playerinstance = this.a(k, l, false); if (playerinstance != null) { @@ -112,14 +114,12 @@ public class PlayerManager { this.managedPlayers.remove(entityplayer); } - // CraftBukkit start - changed signature to take a reference to a player. Allows for per-player view distance checks - private boolean a(int viewDistance, int i, int j, int k, int l) { + private boolean a(int i, int j, int k, int l) { int i1 = i - k; int j1 = j - l; - return i1 >= -viewDistance && i1 <= viewDistance ? j1 >= -viewDistance && j1 <= viewDistance : false; // CraftBukkit - use per-player view distance + return i1 >= -this.f && i1 <= this.f ? j1 >= -this.f && j1 <= this.f : false; } - // CraftBukkit end public void movePlayer(EntityPlayer entityplayer) { int i = (int) entityplayer.locX >> 4; @@ -135,16 +135,13 @@ public class PlayerManager { int j1 = j - l; if (i1 != 0 || j1 != 0) { - // CraftBukkit start - use per-player view distance instead of this.f - int viewDistance = entityplayer.getViewDistance(); - for (int k1 = i - viewDistance; k1 <= i + viewDistance; ++k1) { - for (int l1 = j - viewDistance; l1 <= j + viewDistance; ++l1) { - if (!this.a(viewDistance, k1, l1, k, l)) { // CraftBukkit - use per-player view distance + for (int k1 = i - this.f; k1 <= i + this.f; ++k1) { + for (int l1 = j - this.f; l1 <= j + this.f; ++l1) { + if (!this.a(k1, l1, k, l)) { this.a(k1, l1, true).a(entityplayer); } - if (!this.a(viewDistance, k1 - i1, l1 - j1, i, j)) { // CraftBukkit - use per-player view distance - // CraftBukkit end + if (!this.a(k1 - i1, l1 - j1, i, j)) { PlayerInstance playerinstance = this.a(k1 - i1, l1 - j1, false); if (playerinstance != null) { @@ -185,87 +182,4 @@ public class PlayerManager { static List b(PlayerManager playermanager) { return playermanager.c; } - - // CraftBukkit start - /** - * This method will update references of the EntityPlayer to ensure they are being sent all and only those chunks they can see. - * Note that no attempt is made in this method to track the distance viewable. As such, care should be taken to ensure the - * EntityPlayer could indeed see as far previously as you have specified. - * - * If the chunks which the EntityPlayer can see changes, chunks will be added or removed in a spiral fashion. - * @param entityPlayer the EntityPlayer to update - * @param oldViewDistance the previous distance they could see - * @param newViewDistance the new distance they can see - */ - public void updatePlayerViewDistance(EntityPlayer entityPlayer, int oldViewDistance, int newViewDistance) { - if (oldViewDistance == newViewDistance) { - return; - } - int chunkX = (int) entityPlayer.locX >> 4; - int chunkZ = (int) entityPlayer.locZ >> 4; - - entityPlayer.d = entityPlayer.locX; // set the 'last known' position - entityPlayer.e = entityPlayer.locZ; - - // Going to add/remove players from player-chunk maps in a spiral fashion - // This will send players new chunks they don't have, as well as stop sending chunks they shouldn't have - // We move in an anticlockwise fashion, and can start at any of the four corners - // 0 is [-1,-1]; 1 is [1,-1]; 2 is [1,1]; 3 is [-1,1]; - int corner = 2; // TODO use the direction the player is facing to determine best start corner - int xStartOffset = this.g[(corner+3)%4][(corner+1)%2]; // calculate which offset to use based on corner we start in - int zStartOffset = this.g[(corner+2)%4][corner%2]; - int deltaX; - int deltaZ; - int loop; - int loopStart; - - if (newViewDistance < oldViewDistance) { - // Remove player from outer chunk loops in player-chunk map - loopStart = oldViewDistance; - - for (loop = loopStart, deltaX = xStartOffset*loopStart, deltaZ = zStartOffset*loopStart; - loop > newViewDistance; - --loop, deltaX-=xStartOffset, deltaZ-=zStartOffset) { - for (int edge = 0; edge < 4; ++edge) { - int[] direction = this.g[corner++ % 4]; - - for (int i2 = 0; i2 < loop*2; ++i2) { - deltaX += direction[0]; - deltaZ += direction[1]; - this.removePlayerFromChunk(entityPlayer, chunkX + deltaX, chunkZ + deltaZ); - } - } - } - } else if (newViewDistance > oldViewDistance) { - // Add player to outer chunk loops in player-chunk map - loopStart = oldViewDistance + 1; // start adding outside the current outer loop - - for (loop = loopStart, deltaX = xStartOffset*loopStart, deltaZ = zStartOffset*loopStart; - loop <= newViewDistance; - ++loop, deltaX+=xStartOffset, deltaZ+=zStartOffset) { - for (int edge = 0; edge < 4; ++edge) { - int[] direction = this.g[corner++ % 4]; - - for (int i2 = 0; i2 < loop*2; ++i2) { - deltaX += direction[0]; - deltaZ += direction[1]; - this.addPlayerToChunk(entityPlayer, chunkX + deltaX, chunkZ + deltaZ); - } - } - } - } - } - - private void removePlayerFromChunk(EntityPlayer entityPlayer, int chunkX, int chunkZ) { - PlayerInstance chunkPlayerMap = this.a(chunkX, chunkZ, false); // get the chunk-player map for this chunk, don't create it if it doesn't exist yet - if (chunkPlayerMap != null) { - chunkPlayerMap.b(entityPlayer); // if the chunk-player map exists, remove the player from it. - } - } - - private void addPlayerToChunk(EntityPlayer entityPlayer, int chunkX, int chunkZ) { - PlayerInstance chunkPlayerMap = this.a(chunkX, chunkZ, true); // get the chunk-player map for this chunk, create it if it doesn't exist yet - chunkPlayerMap.a(entityPlayer); // add the player to the chunk-player map - } - // CraftBukkit end } diff --git a/src/main/java/net/minecraft/server/ServerConfigurationManager.java b/src/main/java/net/minecraft/server/ServerConfigurationManager.java index de35bc20..c7bb9f07 100644 --- a/src/main/java/net/minecraft/server/ServerConfigurationManager.java +++ b/src/main/java/net/minecraft/server/ServerConfigurationManager.java @@ -46,7 +46,6 @@ public class ServerConfigurationManager { // CraftBukkit start private CraftServer cserver; - private int viewDistance; public ServerConfigurationManager(MinecraftServer minecraftserver) { minecraftserver.server = new CraftServer(minecraftserver, this); @@ -59,7 +58,7 @@ public class ServerConfigurationManager { this.k = minecraftserver.a("banned-ips.txt"); this.l = minecraftserver.a("ops.txt"); this.m = minecraftserver.a("white-list.txt"); - this.viewDistance = minecraftserver.propertyManager.getInt("view-distance", 10); // CraftBukkit - add field viewDistance + int i = minecraftserver.propertyManager.getInt("view-distance", 10); // CraftBukkit - removed playermanagers this.maxPlayers = minecraftserver.propertyManager.getInt("max-players", 20); @@ -96,7 +95,7 @@ public class ServerConfigurationManager { public int a() { // CraftBukkit start if (this.server.worlds.size() == 0) { - return this.viewDistance * 16 - 16; // Use field value + return this.server.propertyManager.getInt("view-distance", 10) * 16 - 16; } return this.server.worlds.get(0).manager.getFurthestViewableBlock(); // CraftBukkit end @@ -638,19 +637,4 @@ public class ServerConfigurationManager { entityplayer.updateInventory(entityplayer.defaultContainer); entityplayer.C(); } - - // CraftBukkit start - getters and setters for viewDistance - public void setViewDistance(int viewDistance) { - this.viewDistance = viewDistance; - } - - public int getViewDistance() { - return viewDistance; - } - - public void saveViewDistance() { - this.server.propertyManager.properties.setProperty("view-distance", Integer.toString(this.viewDistance)); - this.server.propertyManager.savePropertiesFile(); - } - // CraftBukkit end } diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java index b5f3b8ff..2005a9bc 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -21,10 +21,6 @@ public class WorldServer extends World implements BlockChangeDelegate { public boolean canSave; public final MinecraftServer server; // CraftBukkit - private -> public final private EntityList G = new EntityList(); - // CraftBukkit start - extra variables - private int viewDistance; // keep track of changes to view distance - private boolean viewDistanceSet; // ...and if any changes have been made - // CraftBukkit end // CraftBukkit start - change signature public WorldServer(MinecraftServer minecraftserver, IDataManager idatamanager, String s, int i, long j, org.bukkit.World.Environment env, ChunkGenerator gen) { @@ -33,9 +29,7 @@ public class WorldServer extends World implements BlockChangeDelegate { this.dimension = i; this.pvpMode = minecraftserver.pvpMode; - // use view distance from configuration manager, instead of property manager - // TODO allow saving view distance per world - this.manager = new PlayerManager(minecraftserver, this.dimension, minecraftserver.serverConfigurationManager.getViewDistance()); + this.manager = new PlayerManager(minecraftserver, this.dimension, minecraftserver.propertyManager.getInt("view-distance", 10)); } public final int dimension; @@ -188,50 +182,4 @@ public class WorldServer extends World implements BlockChangeDelegate { // CraftBukkit end } } - - // CraftBukkit start - add getter and setter for view distance - public int getViewDistance() { - if (viewDistanceSet) { - return viewDistance; - } else { - return getServer().getViewDistance(); - } - } - - /** - * This method enforces notchian view distances. Do not set it below 3 or above 15. - * It is possible to set view distance per-player to any positive value. - * @param viewDistance the number of chunks players herein managed can see by default. - * @throws IllegalArgumentException If view distance is less than 3 or greater than 15 - */ - public void setViewDistance(int viewDistance) throws IllegalArgumentException{ - if (viewDistance > 15) { - throw new IllegalArgumentException("Too big view radius!"); - } else if (viewDistance < 3) { - throw new IllegalArgumentException("Too small view radius!"); - } else { - this.viewDistance = viewDistance; - this.viewDistanceSet = true; - updateViewDistance(); - } - } - - public void resetViewDistance() { - viewDistanceSet = false; - updateViewDistance(); - } - - public boolean isViewDistanceSet() { - return viewDistanceSet; - } - - public void updateViewDistance() { - // notify players that they may have to update their view distance - for (Object entityPlayerObject : this.manager.managedPlayers) { - if (entityPlayerObject instanceof EntityPlayer) { - ((EntityPlayer) entityPlayerObject).updateViewDistance(); - } - } - } - // CraftBukkit end } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java index ec5dbb77..5eb2bd53 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -275,6 +275,10 @@ public final class CraftServer implements Server { return this.getConfigInt("server-port", 25565); } + public int getViewDistance() { + return this.getConfigInt("view-distance", 10); + } + public String getIp() { return this.getConfigString("server-ip", ""); } @@ -750,22 +754,6 @@ public final class CraftServer implements Server { return this.console.allowFlight; } - public int getViewDistance() { - return server.getViewDistance(); - } - - public void setViewDistance(int viewDistance) throws IllegalArgumentException{ - server.setViewDistance(viewDistance); - updateViewDistance(); - server.saveViewDistance(); - } - - public void updateViewDistance() { - for (World world : worlds.values()) { - ((CraftWorld) world).updateViewDistance(); - } - } - public ChunkGenerator getGenerator(String world) { ConfigurationNode node = configuration.getNode("worlds"); ChunkGenerator result = null; diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index b527515f..ed09f0f3 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -811,24 +811,4 @@ public class CraftWorld implements World { } } } - - public int getViewDistance() { - return world.getViewDistance(); - } - - public void setViewDistance(int viewDistance) throws IllegalArgumentException{ - world.setViewDistance(viewDistance); - } - - public void resetViewDistance(){ - world.resetViewDistance(); - } - - public boolean isViewDistanceSet() { - return world.isViewDistanceSet(); - } - - public void updateViewDistance() { - world.updateViewDistance(); - } } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index f3635357..c86d7e5c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1,5 +1,7 @@ package org.bukkit.craftbukkit.entity; +import java.net.InetSocketAddress; +import java.net.SocketAddress; import net.minecraft.server.EntityHuman; import net.minecraft.server.EntityPlayer; import net.minecraft.server.Packet131; @@ -26,11 +28,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.map.MapView; -import java.net.InetSocketAddress; -import java.net.SocketAddress; - public class CraftPlayer extends CraftHumanEntity implements Player { - public CraftPlayer(CraftServer server, EntityPlayer entity) { super(server, entity); } @@ -347,20 +345,4 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void resetPlayerTime() { setPlayerTime(0, true); } - - public void setViewDistance(int viewDistance) { - getHandle().setViewDistance(viewDistance); - } - - public int getViewDistance() { - return getHandle().getViewDistance(); - } - - public void resetViewDistance() { - getHandle().resetViewDistance(); - } - - public boolean isViewDistanceSet() { - return getHandle().isViewDistanceSet(); - } } |