diff options
Diffstat (limited to 'src/main/java/net/minecraft')
5 files changed, 59 insertions, 29 deletions
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java index 101c2a0d..91b44a03 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -436,11 +436,13 @@ public abstract class EntityHuman extends EntityLiving implements ICommandListen public void c(Entity entity, int i) { this.addScore(i); - Collection collection = this.getScoreboard().getObjectivesForCriteria(IScoreboardCriteria.e); + // CraftBukkit - Get our scores instead + Collection<ScoreboardScore> collection = this.world.getServer().getScoreboardManager().getScoreboardScores(IScoreboardCriteria.e, this.getLocalizedName(), new java.util.ArrayList<ScoreboardScore>()); if (entity instanceof EntityHuman) { this.a(StatisticList.A, 1); - collection.addAll(this.getScoreboard().getObjectivesForCriteria(IScoreboardCriteria.d)); + // CraftBukkit - Get our scores instead + this.world.getServer().getScoreboardManager().getScoreboardScores(IScoreboardCriteria.d, this.getLocalizedName(), collection); } else { this.a(StatisticList.z, 1); } @@ -448,8 +450,7 @@ public abstract class EntityHuman extends EntityLiving implements ICommandListen Iterator iterator = collection.iterator(); while (iterator.hasNext()) { - ScoreboardObjective scoreboardobjective = (ScoreboardObjective) iterator.next(); - ScoreboardScore scoreboardscore = this.getScoreboard().getPlayerScoreForObjective(this.getLocalizedName(), scoreboardobjective); + ScoreboardScore scoreboardscore = (ScoreboardScore) iterator.next(); // CraftBukkit - Use our scores instead scoreboardscore.incrementScore(); } @@ -687,10 +688,28 @@ public abstract class EntityHuman extends EntityLiving implements ICommandListen } public boolean a(EntityHuman entityhuman) { - ScoreboardTeam scoreboardteam = this.getScoreboardTeam(); - ScoreboardTeam scoreboardteam1 = entityhuman.getScoreboardTeam(); + // CraftBukkit start - Change to check player's scoreboard team according to API reference to this (or main) scoreboard + org.bukkit.scoreboard.Team team; + if (this instanceof EntityPlayer) { + EntityPlayer thisPlayer = (EntityPlayer) this; + team = thisPlayer.getBukkitEntity().getScoreboard().getPlayerTeam(thisPlayer.getBukkitEntity()); + if (team == null || team.allowFriendlyFire()) { + return true; + } + } else { + // This should never be called, but is implemented anyway + org.bukkit.OfflinePlayer thisPlayer = this.world.getServer().getOfflinePlayer(this.name); + team = this.world.getServer().getScoreboardManager().getMainScoreboard().getPlayerTeam(thisPlayer); + if (team == null || team.allowFriendlyFire()) { + return true; + } + } - return scoreboardteam != scoreboardteam1 ? true : (scoreboardteam != null ? scoreboardteam.allowFriendlyFire() : true); + if (entityhuman instanceof EntityPlayer) { + return team.hasPlayer(((EntityPlayer) entityhuman).getBukkitEntity()); + } + return team.hasPlayer(this.world.getServer().getOfflinePlayer(entityhuman.name)); + // CraftBukkit end } protected void a(EntityLiving entityliving, boolean flag) { @@ -1494,6 +1513,7 @@ public abstract class EntityHuman extends EntityLiving implements ICommandListen } public String getScoreboardDisplayName() { + // TODO: fun return ScoreboardTeam.getPlayerDisplayName(this.getScoreboardTeam(), this.name); } } diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java index 14f2521e..eb07d8e0 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -201,14 +201,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting { public void setHealth(int i) { super.setHealth(i); - Collection collection = this.getScoreboard().getObjectivesForCriteria(IScoreboardCriteria.f); - Iterator iterator = collection.iterator(); - - while (iterator.hasNext()) { - ScoreboardObjective scoreboardobjective = (ScoreboardObjective) iterator.next(); - - this.getScoreboard().getPlayerScoreForObjective(this.getLocalizedName(), scoreboardobjective).updateForList(Arrays.asList(new EntityHuman[] { this})); - } + // CraftBukkit - Update ALL the scores! + this.world.getServer().getScoreboardManager().updateAllScoresForList(IScoreboardCriteria.f, this.getLocalizedName(), com.google.common.collect.ImmutableList.of(this)); } public void g() { @@ -304,12 +298,12 @@ public class EntityPlayer extends EntityHuman implements ICrafting { this.closeInventory(); // CraftBukkit end - Collection collection = this.world.getScoreboard().getObjectivesForCriteria(IScoreboardCriteria.c); + // CraftBukkit - Get our scores instead + Collection<ScoreboardScore> collection = this.world.getServer().getScoreboardManager().getScoreboardScores(IScoreboardCriteria.c, this.getLocalizedName(), new java.util.ArrayList<ScoreboardScore>()); Iterator iterator = collection.iterator(); while (iterator.hasNext()) { - ScoreboardObjective scoreboardobjective = (ScoreboardObjective) iterator.next(); - ScoreboardScore scoreboardscore = this.getScoreboard().getPlayerScoreForObjective(this.getLocalizedName(), scoreboardobjective); + ScoreboardScore scoreboardscore = (ScoreboardScore) iterator.next(); // CraftBukkit - Use our scores instead scoreboardscore.incrementScore(); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index 5bf5fdc2..64d58825 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -225,6 +225,8 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo world.getWorld().getPopulators().addAll(gen.getDefaultPopulators(world.getWorld())); } + this.server.scoreboardManager = new org.bukkit.craftbukkit.scoreboard.CraftScoreboardManager(this, world.getScoreboard()); + this.server.getPluginManager().callEvent(new org.bukkit.event.world.WorldInitEvent(world.getWorld())); world.addIWorldAccess(new WorldManager(this, world)); diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java index 464b2509..ed670d92 100644 --- a/src/main/java/net/minecraft/server/PlayerList.java +++ b/src/main/java/net/minecraft/server/PlayerList.java @@ -126,7 +126,7 @@ public abstract class PlayerList { } } - protected void a(ScoreboardServer scoreboardserver, EntityPlayer entityplayer) { + public void a(ScoreboardServer scoreboardserver, EntityPlayer entityplayer) { // CraftBukkit - protected -> public HashSet hashset = new HashSet(); Iterator iterator = scoreboardserver.getTeams().iterator(); @@ -277,6 +277,8 @@ public abstract class PlayerList { entityplayer1.playerConnection.sendPacket(packet); } } + // This removes the scoreboard (and player reference) for the specific player in the manager + this.cserver.getScoreboardManager().removePlayer(entityplayer.getBukkitEntity()); return playerQuitEvent.getQuitMessage(); // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/ScoreboardServer.java b/src/main/java/net/minecraft/server/ScoreboardServer.java index 0f28b328..863b4db1 100644 --- a/src/main/java/net/minecraft/server/ScoreboardServer.java +++ b/src/main/java/net/minecraft/server/ScoreboardServer.java @@ -20,7 +20,7 @@ public class ScoreboardServer extends Scoreboard { public void handleScoreChanged(ScoreboardScore scoreboardscore) { super.handleScoreChanged(scoreboardscore); if (this.b.contains(scoreboardscore.getObjective())) { - this.a.getPlayerList().sendAll(new Packet207SetScoreboardScore(scoreboardscore, 0)); + this.sendAll(new Packet207SetScoreboardScore(scoreboardscore, 0)); // CraftBukkit - Internal packet method } this.b(); @@ -28,7 +28,7 @@ public class ScoreboardServer extends Scoreboard { public void handlePlayerRemoved(String s) { super.handlePlayerRemoved(s); - this.a.getPlayerList().sendAll(new Packet207SetScoreboardScore(s)); + this.sendAll(new Packet207SetScoreboardScore(s)); // CraftBukkit - Internal packet method this.b(); } @@ -38,7 +38,7 @@ public class ScoreboardServer extends Scoreboard { super.setDisplaySlot(i, scoreboardobjective); if (scoreboardobjective1 != scoreboardobjective && scoreboardobjective1 != null) { if (this.h(scoreboardobjective1) > 0) { - this.a.getPlayerList().sendAll(new Packet208SetScoreboardDisplayObjective(i, scoreboardobjective)); + this.sendAll(new Packet208SetScoreboardDisplayObjective(i, scoreboardobjective)); // CraftBukkit - Internal packet method } else { this.g(scoreboardobjective1); } @@ -46,7 +46,7 @@ public class ScoreboardServer extends Scoreboard { if (scoreboardobjective != null) { if (this.b.contains(scoreboardobjective)) { - this.a.getPlayerList().sendAll(new Packet208SetScoreboardDisplayObjective(i, scoreboardobjective)); + this.sendAll(new Packet208SetScoreboardDisplayObjective(i, scoreboardobjective)); // CraftBukkit - Internal packet method } else { this.e(scoreboardobjective); } @@ -57,13 +57,13 @@ public class ScoreboardServer extends Scoreboard { public void addPlayerToTeam(String s, ScoreboardTeam scoreboardteam) { super.addPlayerToTeam(s, scoreboardteam); - this.a.getPlayerList().sendAll(new Packet209SetScoreboardTeam(scoreboardteam, Arrays.asList(new String[] { s}), 3)); + this.sendAll(new Packet209SetScoreboardTeam(scoreboardteam, Arrays.asList(new String[] { s}), 3)); // CraftBukkit - Internal packet method this.b(); } public void removePlayerFromTeam(String s, ScoreboardTeam scoreboardteam) { super.removePlayerFromTeam(s, scoreboardteam); - this.a.getPlayerList().sendAll(new Packet209SetScoreboardTeam(scoreboardteam, Arrays.asList(new String[] { s}), 4)); + this.sendAll(new Packet209SetScoreboardTeam(scoreboardteam, Arrays.asList(new String[] { s}), 4)); // CraftBukkit - Internal packet method this.b(); } @@ -75,7 +75,7 @@ public class ScoreboardServer extends Scoreboard { public void handleObjectiveChanged(ScoreboardObjective scoreboardobjective) { super.handleObjectiveChanged(scoreboardobjective); if (this.b.contains(scoreboardobjective)) { - this.a.getPlayerList().sendAll(new Packet206SetScoreboardObjective(scoreboardobjective, 2)); + this.sendAll(new Packet206SetScoreboardObjective(scoreboardobjective, 2)); // CraftBukkit - Internal packet method } this.b(); @@ -92,19 +92,19 @@ public class ScoreboardServer extends Scoreboard { public void handleTeamAdded(ScoreboardTeam scoreboardteam) { super.handleTeamAdded(scoreboardteam); - this.a.getPlayerList().sendAll(new Packet209SetScoreboardTeam(scoreboardteam, 0)); + this.sendAll(new Packet209SetScoreboardTeam(scoreboardteam, 0)); // CraftBukkit - Internal packet method this.b(); } public void handleTeamChanged(ScoreboardTeam scoreboardteam) { super.handleTeamChanged(scoreboardteam); - this.a.getPlayerList().sendAll(new Packet209SetScoreboardTeam(scoreboardteam, 2)); + this.sendAll(new Packet209SetScoreboardTeam(scoreboardteam, 2)); // CraftBukkit - Internal packet method this.b(); } public void handleTeamRemoved(ScoreboardTeam scoreboardteam) { super.handleTeamRemoved(scoreboardteam); - this.a.getPlayerList().sendAll(new Packet209SetScoreboardTeam(scoreboardteam, 1)); + this.sendAll(new Packet209SetScoreboardTeam(scoreboardteam, 1)); // CraftBukkit - Internal packet method this.b(); } @@ -146,6 +146,7 @@ public class ScoreboardServer extends Scoreboard { while (iterator.hasNext()) { EntityPlayer entityplayer = (EntityPlayer) iterator.next(); + if (entityplayer.getBukkitEntity().getScoreboard().getHandle() != this) continue; // CraftBukkit - Only players on this board Iterator iterator1 = list.iterator(); while (iterator1.hasNext()) { @@ -178,6 +179,7 @@ public class ScoreboardServer extends Scoreboard { while (iterator.hasNext()) { EntityPlayer entityplayer = (EntityPlayer) iterator.next(); + if (entityplayer.getBukkitEntity().getScoreboard().getHandle() != this) continue; // CraftBukkit - Only players on this board Iterator iterator1 = list.iterator(); while (iterator1.hasNext()) { @@ -201,4 +203,14 @@ public class ScoreboardServer extends Scoreboard { return i; } + + // CraftBukkit start - Send to players + private void sendAll(Packet packet) { + for (EntityPlayer entityplayer : (List<EntityPlayer>) this.a.getPlayerList().players) { + if (entityplayer.getBukkitEntity().getScoreboard().getHandle() == this) { + entityplayer.playerConnection.sendPacket(packet); + } + } + } + // CraftBukkit end } |