forked from xjboss/KCauldronX
		
	Some portion of optimizations:
* Clear outgoing packet queue after player disconnect * Disable sleep between chunk saving * Put 2x4096 bytes instead 2048x4 bytes for region file aligment * Using map to search player by name instead iterating over all players * Some tweaks for decorations (item frames, maps)
This commit is contained in:
		@@ -173,6 +173,7 @@ def generateManifest(boolean legacy = false) {
 | 
			
		||||
            'KCauldron-Channel'     : project.name,
 | 
			
		||||
            'KCauldron-Version'     : project.version,
 | 
			
		||||
            'KCauldron-Legacy'      : legacy,
 | 
			
		||||
            'KCauldron-Official'    : project.hasProperty('officialBuild'),
 | 
			
		||||
            'Implementation-Vendor' : 'Prototik',
 | 
			
		||||
            'Implementation-Title'  : project.name,
 | 
			
		||||
            'Implementation-Version': project.version,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										4
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
#Tue Jun 16 17:21:00 KRAT 2015
 | 
			
		||||
#Fri Oct 16 21:29:47 KRAT 2015
 | 
			
		||||
distributionBase=GRADLE_USER_HOME
 | 
			
		||||
distributionPath=wrapper/dists
 | 
			
		||||
zipStoreBase=GRADLE_USER_HOME
 | 
			
		||||
zipStorePath=wrapper/dists
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.7-bin.zip
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							@@ -42,11 +42,6 @@ case "`uname`" in
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
# For Cygwin, ensure paths are in UNIX format before anything is touched.
 | 
			
		||||
if $cygwin ; then
 | 
			
		||||
    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Attempt to set APP_HOME
 | 
			
		||||
# Resolve links: $0 may be a link
 | 
			
		||||
PRG="$0"
 | 
			
		||||
@@ -114,6 +109,7 @@ fi
 | 
			
		||||
if $cygwin ; then
 | 
			
		||||
    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
 | 
			
		||||
    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
 | 
			
		||||
    JAVACMD=`cygpath --unix "$JAVACMD"`
 | 
			
		||||
 | 
			
		||||
    # We build the pattern for arguments to be converted via cygpath
 | 
			
		||||
    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,15 @@
 | 
			
		||||
                 this.func_146065_b(p_70097_1_.getEntity(), false);
 | 
			
		||||
                 this.setDisplayedItem((ItemStack)null);
 | 
			
		||||
             }
 | 
			
		||||
@@ -115,7 +122,7 @@
 | 
			
		||||
             if (p_110131_1_.getItem() == Items.filled_map)
 | 
			
		||||
             {
 | 
			
		||||
                 MapData mapdata = ((ItemMap)p_110131_1_.getItem()).getMapData(p_110131_1_, this.worldObj);
 | 
			
		||||
-                mapdata.playersVisibleOnMap.remove("frame-" + this.getEntityId());
 | 
			
		||||
+                mapdata.playersVisibleOnMap.remove(java.util.UUID.nameUUIDFromBytes(("frame-" + this.getEntityId()).getBytes(org.apache.commons.codec.Charsets.US_ASCII)));
 | 
			
		||||
             }
 | 
			
		||||
 
 | 
			
		||||
             p_110131_1_.setItemFrame((EntityItemFrame)null);
 | 
			
		||||
@@ -203,4 +210,11 @@
 | 
			
		||||
 
 | 
			
		||||
         return true;
 | 
			
		||||
 
 | 
			
		||||
@@ -608,7 +608,7 @@
 | 
			
		||||
         }
 | 
			
		||||
 
 | 
			
		||||
+        // CraftBukkit start
 | 
			
		||||
+        if (p_147359_1_ == null)
 | 
			
		||||
+        if (p_147359_1_ == null || this.processedDisconnect) // KCauldron
 | 
			
		||||
+        {
 | 
			
		||||
+            return;
 | 
			
		||||
+        }
 | 
			
		||||
@@ -1822,7 +1822,7 @@
 | 
			
		||||
         {
 | 
			
		||||
             packetbuffer = new PacketBuffer(Unpooled.wrappedBuffer(p_147349_1_.func_149558_e()));
 | 
			
		||||
@@ -1093,16 +2409,18 @@
 | 
			
		||||
 
 | 
			
		||||
                 {
 | 
			
		||||
                     if (itemstack.getItem() == Items.writable_book && itemstack.getItem() == itemstack1.getItem())
 | 
			
		||||
                     {
 | 
			
		||||
-                        itemstack1.setTagInfo("pages", itemstack.getTagCompound().getTagList("pages", 8));
 | 
			
		||||
@@ -1845,7 +1845,7 @@
 | 
			
		||||
             finally
 | 
			
		||||
             {
 | 
			
		||||
@@ -1135,19 +2453,18 @@
 | 
			
		||||
                 {
 | 
			
		||||
 
 | 
			
		||||
                     if (itemstack.getItem() == Items.written_book && itemstack1.getItem() == Items.writable_book)
 | 
			
		||||
                     {
 | 
			
		||||
-                        itemstack1.setTagInfo("author", new NBTTagString(this.playerEntity.getCommandSenderName()));
 | 
			
		||||
 
 | 
			
		||||
@@ -77,7 +77,7 @@
 | 
			
		||||
                 packet.processPacket(this.netHandler);
 | 
			
		||||
             }
 | 
			
		||||
 
 | 
			
		||||
@@ -225,6 +257,8 @@
 | 
			
		||||
@@ -225,8 +257,11 @@
 | 
			
		||||
 
 | 
			
		||||
     public void closeChannel(IChatComponent p_150718_1_)
 | 
			
		||||
     {
 | 
			
		||||
@@ -85,8 +85,11 @@
 | 
			
		||||
+
 | 
			
		||||
         if (this.channel.isOpen())
 | 
			
		||||
         {
 | 
			
		||||
+            this.outboundPacketsQueue.clear(); // KCauldron
 | 
			
		||||
             this.channel.close();
 | 
			
		||||
@@ -254,7 +288,7 @@
 | 
			
		||||
             this.terminationReason = p_150718_1_;
 | 
			
		||||
         }
 | 
			
		||||
@@ -254,7 +289,7 @@
 | 
			
		||||
                 {
 | 
			
		||||
                     ;
 | 
			
		||||
                 }
 | 
			
		||||
@@ -95,7 +98,7 @@
 | 
			
		||||
                 try
 | 
			
		||||
                 {
 | 
			
		||||
                     p_initChannel_1_.config().setOption(ChannelOption.TCP_NODELAY, Boolean.valueOf(false));
 | 
			
		||||
@@ -322,6 +356,13 @@
 | 
			
		||||
@@ -322,6 +357,13 @@
 | 
			
		||||
         return channel;
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
@@ -58,12 +58,13 @@
 | 
			
		||||
     protected int maxPlayers;
 | 
			
		||||
     private int viewDistance;
 | 
			
		||||
     private WorldSettings.GameType gameType;
 | 
			
		||||
@@ -91,8 +115,17 @@
 | 
			
		||||
@@ -91,8 +115,18 @@
 | 
			
		||||
     private int playerPingIndex;
 | 
			
		||||
     private static final String __OBFID = "CL_00001423";
 | 
			
		||||
 
 | 
			
		||||
+    // CraftBukkit start
 | 
			
		||||
+    private CraftServer cserver;
 | 
			
		||||
+    private final Map<String,EntityPlayerMP> playersByName = new org.spigotmc.CaseInsensitiveMap<EntityPlayerMP>(); // KCauldron
 | 
			
		||||
+
 | 
			
		||||
     public ServerConfigurationManager(MinecraftServer p_i1500_1_)
 | 
			
		||||
     {
 | 
			
		||||
@@ -76,7 +77,7 @@
 | 
			
		||||
         this.bannedPlayers = new UserListBans(field_152613_a);
 | 
			
		||||
         this.bannedIPs = new BanList(field_152614_b);
 | 
			
		||||
         this.ops = new UserListOps(field_152615_c);
 | 
			
		||||
@@ -131,12 +164,32 @@
 | 
			
		||||
@@ -131,12 +165,32 @@
 | 
			
		||||
             s1 = p_72355_1_.getSocketAddress().toString();
 | 
			
		||||
         }
 | 
			
		||||
 
 | 
			
		||||
@@ -111,7 +112,7 @@
 | 
			
		||||
         nethandlerplayserver.sendPacket(new S3FPacketCustomPayload("MC|Brand", this.getServerInstance().getServerModName().getBytes(Charsets.UTF_8)));
 | 
			
		||||
         nethandlerplayserver.sendPacket(new S05PacketSpawnPosition(chunkcoordinates.posX, chunkcoordinates.posY, chunkcoordinates.posZ));
 | 
			
		||||
         nethandlerplayserver.sendPacket(new S39PacketPlayerAbilities(p_72355_2_.capabilities));
 | 
			
		||||
@@ -145,6 +198,7 @@
 | 
			
		||||
@@ -145,6 +199,7 @@
 | 
			
		||||
         p_72355_2_.func_147099_x().func_150884_b(p_72355_2_);
 | 
			
		||||
         this.func_96456_a((ServerScoreboard)worldserver.getScoreboard(), p_72355_2_);
 | 
			
		||||
         this.mcServer.func_147132_au();
 | 
			
		||||
@@ -119,7 +120,7 @@
 | 
			
		||||
         ChatComponentTranslation chatcomponenttranslation;
 | 
			
		||||
 
 | 
			
		||||
         if (!p_72355_2_.getCommandSenderName().equalsIgnoreCase(s))
 | 
			
		||||
@@ -158,6 +212,7 @@
 | 
			
		||||
@@ -158,6 +213,7 @@
 | 
			
		||||
 
 | 
			
		||||
         chatcomponenttranslation.getChatStyle().setColor(EnumChatFormatting.YELLOW);
 | 
			
		||||
         this.sendChatMsg(chatcomponenttranslation);
 | 
			
		||||
@@ -127,7 +128,7 @@
 | 
			
		||||
         this.playerLoggedIn(p_72355_2_);
 | 
			
		||||
         nethandlerplayserver.setPlayerLocation(p_72355_2_.posX, p_72355_2_.posY, p_72355_2_.posZ, p_72355_2_.rotationYaw, p_72355_2_.rotationPitch);
 | 
			
		||||
         this.updateTimeAndWeatherForPlayer(p_72355_2_, worldserver);
 | 
			
		||||
@@ -192,7 +247,7 @@
 | 
			
		||||
@@ -192,7 +248,7 @@
 | 
			
		||||
         }
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
@@ -136,7 +137,7 @@
 | 
			
		||||
     {
 | 
			
		||||
         HashSet hashset = new HashSet();
 | 
			
		||||
         Iterator iterator = p_96456_1_.getTeams().iterator();
 | 
			
		||||
@@ -225,6 +280,7 @@
 | 
			
		||||
@@ -225,6 +281,7 @@
 | 
			
		||||
 
 | 
			
		||||
     public void setPlayerManager(WorldServer[] p_72364_1_)
 | 
			
		||||
     {
 | 
			
		||||
@@ -144,7 +145,7 @@
 | 
			
		||||
         this.playerNBTManagerObj = p_72364_1_[0].getSaveHandler().getSaveHandler();
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
@@ -248,7 +304,7 @@
 | 
			
		||||
@@ -248,7 +305,7 @@
 | 
			
		||||
 
 | 
			
		||||
     public NBTTagCompound readPlayerDataFromFile(EntityPlayerMP p_72380_1_)
 | 
			
		||||
     {
 | 
			
		||||
@@ -153,7 +154,7 @@
 | 
			
		||||
         NBTTagCompound nbttagcompound1;
 | 
			
		||||
 
 | 
			
		||||
         if (p_72380_1_.getCommandSenderName().equals(this.mcServer.getServerOwner()) && nbttagcompound != null)
 | 
			
		||||
@@ -294,18 +350,61 @@
 | 
			
		||||
@@ -294,18 +351,62 @@
 | 
			
		||||
 
 | 
			
		||||
     public void playerLoggedIn(EntityPlayerMP p_72377_1_)
 | 
			
		||||
     {
 | 
			
		||||
@@ -161,6 +162,7 @@
 | 
			
		||||
+        cserver.detectListNameConflict(p_72377_1_); // CraftBukkit
 | 
			
		||||
+        // this.sendPacketToAllPlayers(new S38PacketPlayerListItem(p_72377_1_.getCommandSenderName(), true, 1000)); // CraftBukkit - replaced with loop below
 | 
			
		||||
         this.playerEntityList.add(p_72377_1_);
 | 
			
		||||
+        this.playersByName.put(p_72377_1_.getCommandSenderName(), p_72377_1_);
 | 
			
		||||
         WorldServer worldserver = this.mcServer.worldServerForDimension(p_72377_1_.dimension);
 | 
			
		||||
+        // CraftBukkit start
 | 
			
		||||
+        PlayerJoinEvent playerJoinEvent = new PlayerJoinEvent(this.cserver.getPlayer(p_72377_1_), "\u00A7e" + p_72377_1_.getCommandSenderName()
 | 
			
		||||
@@ -219,7 +221,7 @@
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
     public void updatePlayerPertinentChunks(EntityPlayerMP p_72358_1_)
 | 
			
		||||
@@ -313,14 +412,33 @@
 | 
			
		||||
@@ -313,14 +414,33 @@
 | 
			
		||||
         p_72358_1_.getServerForPlayer().getPlayerManager().updatePlayerPertinentChunks(p_72358_1_);
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
@@ -255,13 +257,14 @@
 | 
			
		||||
         {
 | 
			
		||||
             worldserver.removePlayerEntityDangerously(p_72367_1_.ridingEntity);
 | 
			
		||||
             logger.debug("removing player mount");
 | 
			
		||||
@@ -329,9 +447,35 @@
 | 
			
		||||
@@ -329,9 +449,36 @@
 | 
			
		||||
         worldserver.removeEntity(p_72367_1_);
 | 
			
		||||
         worldserver.getPlayerManager().removePlayer(p_72367_1_);
 | 
			
		||||
         this.playerEntityList.remove(p_72367_1_);
 | 
			
		||||
-        this.field_148547_k.remove(p_72367_1_.getUniqueID());
 | 
			
		||||
-        net.minecraftforge.common.chunkio.ChunkIOExecutor.adjustPoolSize(this.getCurrentPlayerCount());
 | 
			
		||||
-        this.sendPacketToAllPlayers(new S38PacketPlayerListItem(p_72367_1_.getCommandSenderName(), false, 9999));
 | 
			
		||||
+        this.playersByName.remove(p_72367_1_.getCommandSenderName());
 | 
			
		||||
+        this.field_148547_k.remove(p_72367_1_.getCommandSenderName());
 | 
			
		||||
+        ChunkIOExecutor.adjustPoolSize(this.getCurrentPlayerCount()); // CraftBukkit
 | 
			
		||||
+        // CraftBukkit start - .name -> .listName, replace sendAll with loop
 | 
			
		||||
@@ -294,7 +297,7 @@
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
     public String allowUserToConnect(SocketAddress p_148542_1_, GameProfile p_148542_2_)
 | 
			
		||||
@@ -372,6 +516,71 @@
 | 
			
		||||
@@ -372,6 +519,71 @@
 | 
			
		||||
         }
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
@@ -366,7 +369,7 @@
 | 
			
		||||
     public EntityPlayerMP createPlayerForUser(GameProfile p_148545_1_)
 | 
			
		||||
     {
 | 
			
		||||
         UUID uuid = EntityPlayer.func_146094_a(p_148545_1_);
 | 
			
		||||
@@ -410,80 +619,199 @@
 | 
			
		||||
@@ -410,80 +622,201 @@
 | 
			
		||||
         return new EntityPlayerMP(this.mcServer, this.mcServer.worldServerForDimension(0), p_148545_1_, (ItemInWorldManager)object);
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
@@ -482,6 +485,7 @@
 | 
			
		||||
+        // par1EntityPlayerMP.getServerForPlayer().getEntityTracker().removeEntityFromAllTrackingPlayers(par1EntityPlayerMP); // CraftBukkit
 | 
			
		||||
+        par1EntityPlayerMP.getServerForPlayer().getPlayerManager().removePlayer(par1EntityPlayerMP);
 | 
			
		||||
+        this.playerEntityList.remove(par1EntityPlayerMP);
 | 
			
		||||
+        this.playersByName.remove(par1EntityPlayerMP.getCommandSenderName());
 | 
			
		||||
+        this.mcServer.worldServerForDimension(par1EntityPlayerMP.dimension).removePlayerEntityDangerously(par1EntityPlayerMP);
 | 
			
		||||
+
 | 
			
		||||
+        // Phase 4 - handle bed spawn
 | 
			
		||||
@@ -594,6 +598,7 @@
 | 
			
		||||
+        targetWorld.getPlayerManager().addPlayer(entityplayermp1);
 | 
			
		||||
+        targetWorld.spawnEntityInWorld(entityplayermp1);
 | 
			
		||||
         this.playerEntityList.add(entityplayermp1);
 | 
			
		||||
+        this.playersByName.put(entityplayermp1.getCommandSenderName(), entityplayermp1);
 | 
			
		||||
         entityplayermp1.addSelfToInternalCraftingInventory();
 | 
			
		||||
         entityplayermp1.setHealth(entityplayermp1.getHealth());
 | 
			
		||||
-        FMLCommonHandler.instance().firePlayerRespawnEvent(entityplayermp1);
 | 
			
		||||
@@ -606,7 +611,7 @@
 | 
			
		||||
         return entityplayermp1;
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
@@ -492,34 +820,112 @@
 | 
			
		||||
@@ -492,34 +825,112 @@
 | 
			
		||||
         transferPlayerToDimension(p_72356_1_, p_72356_2_, mcServer.worldServerForDimension(p_72356_2_).getDefaultTeleporter());
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
@@ -738,7 +743,7 @@
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
     public void transferEntityToWorld(Entity p_82448_1_, int p_82448_2_, WorldServer p_82448_3_, WorldServer p_82448_4_, Teleporter teleporter)
 | 
			
		||||
@@ -605,6 +1011,109 @@
 | 
			
		||||
@@ -605,6 +1016,109 @@
 | 
			
		||||
         p_82448_1_.setWorld(p_82448_4_);
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
@@ -848,7 +853,7 @@
 | 
			
		||||
     public void sendPlayerInfoToAllPlayers()
 | 
			
		||||
     {
 | 
			
		||||
         if (++this.playerPingIndex > 600)
 | 
			
		||||
@@ -612,11 +1121,13 @@
 | 
			
		||||
@@ -612,11 +1126,13 @@
 | 
			
		||||
             this.playerPingIndex = 0;
 | 
			
		||||
         }
 | 
			
		||||
 
 | 
			
		||||
@@ -862,7 +867,26 @@
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
     public void sendPacketToAllPlayers(Packet p_148540_1_)
 | 
			
		||||
@@ -877,13 +1388,24 @@
 | 
			
		||||
@@ -719,7 +1235,7 @@
 | 
			
		||||
 
 | 
			
		||||
     public EntityPlayerMP func_152612_a(String p_152612_1_)
 | 
			
		||||
     {
 | 
			
		||||
-        Iterator iterator = this.playerEntityList.iterator();
 | 
			
		||||
+        /*Iterator iterator = this.playerEntityList.iterator(); // KCauldron
 | 
			
		||||
         EntityPlayerMP entityplayermp;
 | 
			
		||||
 
 | 
			
		||||
         do
 | 
			
		||||
@@ -733,7 +1249,8 @@
 | 
			
		||||
         }
 | 
			
		||||
         while (!entityplayermp.getCommandSenderName().equalsIgnoreCase(p_152612_1_));
 | 
			
		||||
 
 | 
			
		||||
-        return entityplayermp;
 | 
			
		||||
+        return entityplayermp;*/ // KCauldron
 | 
			
		||||
+    	return playersByName.get(p_152612_1_);
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
     public List findPlayers(ChunkCoordinates p_82449_1_, int p_82449_2_, int p_82449_3_, int p_82449_4_, int p_82449_5_, int p_82449_6_, int p_82449_7_, Map p_82449_8_, String p_82449_9_, String p_82449_10_, World p_82449_11_)
 | 
			
		||||
@@ -877,13 +1394,24 @@
 | 
			
		||||
         for (int j = 0; j < this.playerEntityList.size(); ++j)
 | 
			
		||||
         {
 | 
			
		||||
             EntityPlayerMP entityplayermp = (EntityPlayerMP)this.playerEntityList.get(j);
 | 
			
		||||
@@ -889,7 +913,7 @@
 | 
			
		||||
                 if (d4 * d4 + d5 * d5 + d6 * d6 < p_148543_8_ * p_148543_8_)
 | 
			
		||||
                 {
 | 
			
		||||
                     entityplayermp.playerNetServerHandler.sendPacket(p_148543_11_);
 | 
			
		||||
@@ -941,13 +1463,16 @@
 | 
			
		||||
@@ -941,13 +1469,16 @@
 | 
			
		||||
             p_72354_1_.playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(1, 0.0F));
 | 
			
		||||
             p_72354_1_.playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(7, p_72354_2_.getRainStrength(1.0F)));
 | 
			
		||||
             p_72354_1_.playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(8, p_72354_2_.getWeightedThunderStrength(1.0F)));
 | 
			
		||||
@@ -907,7 +931,7 @@
 | 
			
		||||
         p_72385_1_.playerNetServerHandler.sendPacket(new S09PacketHeldItemChange(p_72385_1_.inventory.currentItem));
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
@@ -961,9 +1486,17 @@
 | 
			
		||||
@@ -961,9 +1492,17 @@
 | 
			
		||||
         return this.maxPlayers;
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
@@ -926,7 +950,7 @@
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
     public void setWhiteListEnabled(boolean p_72371_1_)
 | 
			
		||||
@@ -1032,12 +1565,30 @@
 | 
			
		||||
@@ -1032,12 +1571,30 @@
 | 
			
		||||
 
 | 
			
		||||
     public void removeAllPlayers()
 | 
			
		||||
     {
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,33 @@
 | 
			
		||||
--- ../src-base/minecraft/net/minecraft/world/chunk/storage/RegionFile.java
 | 
			
		||||
+++ ../src-work/minecraft/net/minecraft/world/chunk/storage/RegionFile.java
 | 
			
		||||
@@ -43,7 +43,8 @@
 | 
			
		||||
 
 | 
			
		||||
             if (this.dataFile.length() < 4096L)
 | 
			
		||||
             {
 | 
			
		||||
-                for (i = 0; i < 1024; ++i)
 | 
			
		||||
+            	// KCauldron start
 | 
			
		||||
+                /*for (i = 0; i < 1024; ++i)
 | 
			
		||||
                 {
 | 
			
		||||
                     this.dataFile.writeInt(0);
 | 
			
		||||
                 }
 | 
			
		||||
@@ -51,7 +52,10 @@
 | 
			
		||||
                 for (i = 0; i < 1024; ++i)
 | 
			
		||||
                 {
 | 
			
		||||
                     this.dataFile.writeInt(0);
 | 
			
		||||
-                }
 | 
			
		||||
+                }*/
 | 
			
		||||
+            	dataFile.write(emptySector);
 | 
			
		||||
+            	dataFile.write(emptySector);
 | 
			
		||||
+            	// KCauldron end
 | 
			
		||||
 
 | 
			
		||||
                 this.sizeDelta += 8192;
 | 
			
		||||
             }
 | 
			
		||||
@@ -209,7 +213,7 @@
 | 
			
		||||
 
 | 
			
		||||
     public DataOutputStream getChunkDataOutputStream(int p_76710_1_, int p_76710_2_)
 | 
			
		||||
     {
 | 
			
		||||
-        return this.outOfBounds(p_76710_1_, p_76710_2_) ? null : new DataOutputStream(new DeflaterOutputStream(new RegionFile.ChunkBuffer(p_76710_1_, p_76710_2_)));
 | 
			
		||||
+        return this.outOfBounds(p_76710_1_, p_76710_2_) ? null : new DataOutputStream(new java.io.BufferedOutputStream(new DeflaterOutputStream(new RegionFile.ChunkBuffer(p_76710_1_, p_76710_2_)))); // KCauldron
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
     protected synchronized void write(int p_76706_1_, int p_76706_2_, byte[] p_76706_3_, int p_76706_4_)
 | 
			
		||||
@@ -15,10 +15,12 @@
 | 
			
		||||
 public class MapData extends WorldSavedData
 | 
			
		||||
 {
 | 
			
		||||
     public int xCenter;
 | 
			
		||||
@@ -24,11 +32,21 @@
 | 
			
		||||
@@ -23,12 +31,22 @@
 | 
			
		||||
     public byte[] colors = new byte[16384];
 | 
			
		||||
     public List playersArrayList = new ArrayList();
 | 
			
		||||
     private Map playersHashMap = new HashMap();
 | 
			
		||||
     public Map playersVisibleOnMap = new LinkedHashMap();
 | 
			
		||||
-    public Map playersVisibleOnMap = new LinkedHashMap();
 | 
			
		||||
+    public Map<UUID, MapData.MapCoord> playersVisibleOnMap = new LinkedHashMap();
 | 
			
		||||
+
 | 
			
		||||
+    // CraftBukkit start
 | 
			
		||||
+    public final CraftMapView mapView;
 | 
			
		||||
@@ -37,7 +39,7 @@
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
     public void readFromNBT(NBTTagCompound p_76184_1_)
 | 
			
		||||
@@ -107,7 +125,7 @@
 | 
			
		||||
@@ -107,14 +125,14 @@
 | 
			
		||||
     {
 | 
			
		||||
         if (!this.playersHashMap.containsKey(p_76191_1_))
 | 
			
		||||
         {
 | 
			
		||||
@@ -46,6 +48,41 @@
 | 
			
		||||
             this.playersHashMap.put(p_76191_1_, mapinfo);
 | 
			
		||||
             this.playersArrayList.add(mapinfo);
 | 
			
		||||
         }
 | 
			
		||||
 
 | 
			
		||||
         if (!p_76191_1_.inventory.hasItemStack(p_76191_2_))
 | 
			
		||||
         {
 | 
			
		||||
-            this.playersVisibleOnMap.remove(p_76191_1_.getCommandSenderName());
 | 
			
		||||
+            this.playersVisibleOnMap.remove(p_76191_1_.getUniqueID());
 | 
			
		||||
         }
 | 
			
		||||
 
 | 
			
		||||
         for (int i = 0; i < this.playersArrayList.size(); ++i)
 | 
			
		||||
@@ -166,7 +184,7 @@
 | 
			
		||||
         {
 | 
			
		||||
             if (Math.abs(f) >= 320.0F || Math.abs(f1) >= 320.0F)
 | 
			
		||||
             {
 | 
			
		||||
-                this.playersVisibleOnMap.remove(p_82567_3_);
 | 
			
		||||
+                this.playersVisibleOnMap.remove(java.util.UUID.nameUUIDFromBytes(p_82567_3_.getBytes(org.apache.commons.codec.Charsets.US_ASCII)));
 | 
			
		||||
                 return;
 | 
			
		||||
             }
 | 
			
		||||
 
 | 
			
		||||
@@ -194,7 +212,7 @@
 | 
			
		||||
             }
 | 
			
		||||
         }
 | 
			
		||||
 
 | 
			
		||||
-        this.playersVisibleOnMap.put(p_82567_3_, new MapData.MapCoord((byte)p_82567_1_, b0, b1, b2));
 | 
			
		||||
+        this.playersVisibleOnMap.put(java.util.UUID.nameUUIDFromBytes(p_82567_3_.getBytes(org.apache.commons.codec.Charsets.US_ASCII)), new MapData.MapCoord((byte)p_82567_1_, b0, b1, b2));
 | 
			
		||||
     }
 | 
			
		||||
 
 | 
			
		||||
     public byte[] getUpdatePacketData(ItemStack p_76193_1_, World p_76193_2_, EntityPlayer p_76193_3_)
 | 
			
		||||
@@ -250,7 +268,7 @@
 | 
			
		||||
                 byte b3 = p_76192_1_[i * 3 + 2];
 | 
			
		||||
                 byte b0 = p_76192_1_[i * 3 + 3];
 | 
			
		||||
                 byte b1 = (byte)(p_76192_1_[i * 3 + 1] & 15);
 | 
			
		||||
-                this.playersVisibleOnMap.put("icon-" + i, new MapData.MapCoord(b2, b3, b0, b1));
 | 
			
		||||
+                this.playersVisibleOnMap.put(java.util.UUID.nameUUIDFromBytes(("icon-" + i).getBytes(org.apache.commons.codec.Charsets.US_ASCII)), new MapData.MapCoord(b2, b3, b0, b1));
 | 
			
		||||
             }
 | 
			
		||||
         }
 | 
			
		||||
         else if (p_76192_1_[0] == 2)
 | 
			
		||||
@@ -265,7 +283,7 @@
 | 
			
		||||
 
 | 
			
		||||
         if (mapinfo == null)
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,19 @@
 | 
			
		||||
--- ../src-base/minecraft/net/minecraft/world/storage/ThreadedFileIOBase.java
 | 
			
		||||
+++ ../src-work/minecraft/net/minecraft/world/storage/ThreadedFileIOBase.java
 | 
			
		||||
@@ -39,14 +39,14 @@
 | 
			
		||||
                 ++this.savedIOCounter;
 | 
			
		||||
             }
 | 
			
		||||
 
 | 
			
		||||
-            try
 | 
			
		||||
+            /*try // KCauldron start
 | 
			
		||||
             {
 | 
			
		||||
                 Thread.sleep(this.isThreadWaiting ? 0L : 10L);
 | 
			
		||||
             }
 | 
			
		||||
             catch (InterruptedException interruptedexception1)
 | 
			
		||||
             {
 | 
			
		||||
                 interruptedexception1.printStackTrace();
 | 
			
		||||
-            }
 | 
			
		||||
+            }*/ // KCauldron end
 | 
			
		||||
         }
 | 
			
		||||
 
 | 
			
		||||
         if (this.threadedIOQueue.isEmpty())
 | 
			
		||||
@@ -41,6 +41,8 @@ public class KCauldron {
 | 
			
		||||
                    sGroup = manifest.getProperty("KCauldron-Group");
 | 
			
		||||
                    sBranch = manifest.getProperty("KCauldron-Branch");
 | 
			
		||||
                    sChannel = manifest.getProperty("KCauldron-Channel");
 | 
			
		||||
                    sLegacy = Boolean.parseBoolean(manifest.getProperty("KCauldron-Legacy"));
 | 
			
		||||
                    sOfficial = Boolean.parseBoolean(manifest.getProperty("KCauldron-Official"));
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
                manifest.clear();
 | 
			
		||||
@@ -99,6 +101,18 @@ public class KCauldron {
 | 
			
		||||
        parseManifest();
 | 
			
		||||
        return sChannel;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    private static boolean sLegacy, sOfficial;
 | 
			
		||||
    
 | 
			
		||||
    public static boolean isLegacy() {
 | 
			
		||||
    	parseManifest();
 | 
			
		||||
    	return sLegacy;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public static boolean isOfficial() {
 | 
			
		||||
    	parseManifest();
 | 
			
		||||
    	return sOfficial;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static File sNewServerLocation;
 | 
			
		||||
    public static String sNewServerVersion;
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ import kcauldron.updater.KVersionRetriever.IVersionCheckCallback;
 | 
			
		||||
import net.minecraft.server.MinecraftServer;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.ChatColor;
 | 
			
		||||
import org.bukkit.command.CommandSender;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.player.PlayerJoinEvent;
 | 
			
		||||
@@ -19,13 +20,21 @@ public class DefaultUpdateCallback implements IVersionCheckCallback {
 | 
			
		||||
 | 
			
		||||
    public void onPlayerJoin(PlayerJoinEvent event) {
 | 
			
		||||
        Player player = event.getPlayer();
 | 
			
		||||
        if (mHasUpdate && hasPermission(player)) {
 | 
			
		||||
            sendUpdate(player);
 | 
			
		||||
        if (hasPermission(player)) {
 | 
			
		||||
        	if (KCauldron.isLegacy()) {
 | 
			
		||||
        		player.sendMessage(ChatColor.YELLOW + "We're running on legacy version on KCauldron, please update your version");
 | 
			
		||||
        	}        	
 | 
			
		||||
        	if (!KCauldron.isOfficial()) {
 | 
			
		||||
        		player.sendMessage(ChatColor.YELLOW + "We're running on non-official version on KCauldron, please update your version");
 | 
			
		||||
        	}        	
 | 
			
		||||
            if (mHasUpdate) {
 | 
			
		||||
                sendUpdate(player);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean hasPermission(CommandSender player) {
 | 
			
		||||
        return player.hasPermission(KCauldronCommand.UPDATE);
 | 
			
		||||
        return player.hasPermission(KCauldronCommand.UPDATE) || player.isOp();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void sendUpdate(CommandSender player) {
 | 
			
		||||
 
 | 
			
		||||
@@ -83,6 +83,7 @@ public class KVersionRetriever implements Runnable, UncaughtExceptionHandler {
 | 
			
		||||
                    .get()
 | 
			
		||||
                    .setUri("https://api.prok.pw/repo/version/" + mGroup + "/"
 | 
			
		||||
                            + mName)
 | 
			
		||||
                    .addParameter("version", KCauldron.getCurrentVersion())
 | 
			
		||||
                    .addParameter("hostname", sServer.getHostname())
 | 
			
		||||
                    .addParameter("port", "" + sServer.getPort()).build();
 | 
			
		||||
            HttpResponse response = HttpClientBuilder.create()
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,9 @@
 | 
			
		||||
package org.bukkit.craftbukkit.map;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.map.MapCanvas;
 | 
			
		||||
@@ -8,6 +11,8 @@ import org.bukkit.map.MapCursorCollection;
 | 
			
		||||
import org.bukkit.map.MapRenderer;
 | 
			
		||||
import org.bukkit.map.MapView;
 | 
			
		||||
 | 
			
		||||
import net.minecraft.world.storage.MapData;
 | 
			
		||||
 | 
			
		||||
public class CraftMapRenderer extends MapRenderer {
 | 
			
		||||
 | 
			
		||||
    private final net.minecraft.world.storage.MapData worldMap;
 | 
			
		||||
@@ -32,14 +37,14 @@ public class CraftMapRenderer extends MapRenderer {
 | 
			
		||||
            cursors.removeCursor(cursors.getCursor(0));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (Object key : worldMap.playersVisibleOnMap.keySet()) {
 | 
			
		||||
        for (Map.Entry<UUID, MapData.MapCoord> key : worldMap.playersVisibleOnMap.entrySet()) {
 | 
			
		||||
            // If this cursor is for a player check visibility with vanish system
 | 
			
		||||
            Player other = Bukkit.getPlayerExact((String) key);
 | 
			
		||||
            Player other = Bukkit.getPlayer(key.getKey());
 | 
			
		||||
            if (other != null && !player.canSee(other)) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            net.minecraft.world.storage.MapData.MapCoord decoration = (net.minecraft.world.storage.MapData.MapCoord) worldMap.playersVisibleOnMap.get(key);
 | 
			
		||||
            MapData.MapCoord decoration = key.getValue();
 | 
			
		||||
            cursors.addCursor(decoration.centerX, decoration.centerZ, (byte) (decoration.iconRotation & 15), decoration.iconSize);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,18 @@
 | 
			
		||||
package org.spigotmc;
 | 
			
		||||
 | 
			
		||||
import gnu.trove.strategy.HashingStrategy;
 | 
			
		||||
 | 
			
		||||
class CaseInsensitiveHashingStrategy implements HashingStrategy<String> {
 | 
			
		||||
	private static final long serialVersionUID = -9212222772914758878L;
 | 
			
		||||
	static final CaseInsensitiveHashingStrategy INSTANCE = new CaseInsensitiveHashingStrategy();
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public int computeHashCode(String object) {
 | 
			
		||||
        return object.toLowerCase().hashCode();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean equals(String o1, String o2) {
 | 
			
		||||
        return o1.equalsIgnoreCase(o2);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								src/main/java/org/spigotmc/CaseInsensitiveMap.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/main/java/org/spigotmc/CaseInsensitiveMap.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
package org.spigotmc;
 | 
			
		||||
 | 
			
		||||
import gnu.trove.map.hash.TCustomHashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
public class CaseInsensitiveMap<V> extends TCustomHashMap<String, V> {
 | 
			
		||||
 | 
			
		||||
    public CaseInsensitiveMap() {
 | 
			
		||||
        super(CaseInsensitiveHashingStrategy.INSTANCE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public CaseInsensitiveMap(Map<? extends String, ? extends V> map) {
 | 
			
		||||
        super(CaseInsensitiveHashingStrategy.INSTANCE, map);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user