Stage 1.5
Dieser Commit ist enthalten in:
Ursprung
83ce6724ca
Commit
205b113b18
@ -1,23 +0,0 @@
|
||||
From 446585e0eddbe05e12d69d9dddc56caf9e623dac Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Sun, 16 Jun 2013 08:20:26 +1000
|
||||
Subject: [PATCH] Do Not Search for Offline Players
|
||||
|
||||
By default we do not want to search as this leads to massive load times for plugins wanting to do mass data lookups.
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index f23636d..f04a35e 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -1290,7 +1290,7 @@ public final class CraftServer implements Server {
|
||||
}
|
||||
|
||||
public OfflinePlayer getOfflinePlayer(String name) {
|
||||
- return getOfflinePlayer(name, true);
|
||||
+ return getOfflinePlayer(name, false); // Spigot
|
||||
}
|
||||
|
||||
public OfflinePlayer getOfflinePlayer(String name, boolean search) {
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,42 +0,0 @@
|
||||
From 07ce333f9cd3b809183828c8c05908c3cdc87b53 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Fri, 21 Jun 2013 18:01:29 +1000
|
||||
Subject: [PATCH] Allow Disabling of Command Logging
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 7d22cd5..3993f88 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -950,7 +950,12 @@ public class PlayerConnection implements PacketPlayInListener {
|
||||
}
|
||||
|
||||
try {
|
||||
- this.c.info(event.getPlayer().getName() + " issued server command: " + event.getMessage());
|
||||
+ // Spigot Start
|
||||
+ if ( org.spigotmc.SpigotConfig.logCommands )
|
||||
+ {
|
||||
+ this.c.info(event.getPlayer().getName() + " issued server command: " + event.getMessage());
|
||||
+ }
|
||||
+ // Spigot end
|
||||
if (this.server.dispatchCommand(event.getPlayer(), event.getMessage().substring(1))) {
|
||||
org.bukkit.craftbukkit.SpigotTimings.playerCommandTimer.stopTiming(); // Spigot
|
||||
return;
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index 9aaa09a..4d15f8b 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -130,4 +130,10 @@ public class SpigotConfig
|
||||
config.addDefault( path, def );
|
||||
return config.getString( path, config.getString( path ) );
|
||||
}
|
||||
+
|
||||
+ public static boolean logCommands;
|
||||
+ private static void logCommands()
|
||||
+ {
|
||||
+ logCommands = getBoolean( "commands.log", true );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,53 +0,0 @@
|
||||
From aaff66ed71f21dd1228b50834d3a6d1daa3922dd Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Fri, 21 Jun 2013 18:05:54 +1000
|
||||
Subject: [PATCH] Allow Disabling of Command TabComplete
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index f04a35e..f06cac5 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -1578,6 +1578,13 @@ public final class CraftServer implements Server {
|
||||
}
|
||||
|
||||
public List<String> tabCompleteCommand(Player player, String message) {
|
||||
+ // Spigot Start
|
||||
+ if ( (org.spigotmc.SpigotConfig.tabComplete < 0 || message.length() <= org.spigotmc.SpigotConfig.tabComplete) && !message.contains( " " ) )
|
||||
+ {
|
||||
+ return ImmutableList.of();
|
||||
+ }
|
||||
+ // Spigot End
|
||||
+
|
||||
List<String> completions = null;
|
||||
try {
|
||||
completions = getCommandMap().tabComplete(player, message.substring(1));
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index afd6b56..20634f1 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -136,4 +136,21 @@ public class SpigotConfig
|
||||
{
|
||||
logCommands = getBoolean( "commands.log", true );
|
||||
}
|
||||
+
|
||||
+ public static int tabComplete;
|
||||
+ private static void tabComplete()
|
||||
+ {
|
||||
+ if ( version < 6 )
|
||||
+ {
|
||||
+ boolean oldValue = getBoolean( "commands.tab-complete", true );
|
||||
+ if ( oldValue )
|
||||
+ {
|
||||
+ set( "commands.tab-complete", 0 );
|
||||
+ } else
|
||||
+ {
|
||||
+ set( "commands.tab-complete", -1 );
|
||||
+ }
|
||||
+ }
|
||||
+ tabComplete = getInt( "commands.tab-complete", 0 );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,107 +0,0 @@
|
||||
From af9035b6044147970e4b830a2205ae6301240374 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Fri, 21 Jun 2013 19:21:58 +1000
|
||||
Subject: [PATCH] Configurable Messages
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/HandshakeListener.java b/src/main/java/net/minecraft/server/HandshakeListener.java
|
||||
index e5992f8..b80a760 100644
|
||||
--- a/src/main/java/net/minecraft/server/HandshakeListener.java
|
||||
+++ b/src/main/java/net/minecraft/server/HandshakeListener.java
|
||||
@@ -64,11 +64,11 @@ public class HandshakeListener implements PacketHandshakingInListener {
|
||||
// CraftBukkit end
|
||||
|
||||
if (packethandshakinginsetprotocol.d() > 4) {
|
||||
- chatcomponenttext = new ChatComponentText("Outdated server! I\'m still on 1.7.5");
|
||||
+ chatcomponenttext = new ChatComponentText( org.spigotmc.SpigotConfig.outdatedServerMessage ); // Spigot
|
||||
this.b.handle(new PacketLoginOutDisconnect(chatcomponenttext), new GenericFutureListener[0]);
|
||||
this.b.close(chatcomponenttext);
|
||||
} else if (packethandshakinginsetprotocol.d() < 4) {
|
||||
- chatcomponenttext = new ChatComponentText("Outdated client! Please use 1.7.5");
|
||||
+ chatcomponenttext = new ChatComponentText( org.spigotmc.SpigotConfig.outdatedClientMessage ); // Spigot
|
||||
this.b.handle(new PacketLoginOutDisconnect(chatcomponenttext), new GenericFutureListener[0]);
|
||||
this.b.close(chatcomponenttext);
|
||||
} else {
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
|
||||
index 1fb24f7..38c37c1 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerList.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerList.java
|
||||
@@ -339,7 +339,7 @@ public abstract class PlayerList {
|
||||
event.disallow(PlayerLoginEvent.Result.KICK_BANNED, s);
|
||||
} else if (!this.isWhitelisted(gameprofile.getName())) {
|
||||
// return "You are not white-listed on this server!";
|
||||
- event.disallow(PlayerLoginEvent.Result.KICK_WHITELIST, "You are not white-listed on this server!");
|
||||
+ event.disallow(PlayerLoginEvent.Result.KICK_WHITELIST, org.spigotmc.SpigotConfig.whitelistMessage); // Spigot
|
||||
} else {
|
||||
String s1 = socketaddress.toString();
|
||||
|
||||
@@ -358,7 +358,7 @@ public abstract class PlayerList {
|
||||
} else {
|
||||
// return this.players.size() >= this.maxPlayers ? "The server is full!" : null;
|
||||
if (this.players.size() >= this.maxPlayers) {
|
||||
- event.disallow(PlayerLoginEvent.Result.KICK_FULL, "The server is full!");
|
||||
+ event.disallow(PlayerLoginEvent.Result.KICK_FULL, org.spigotmc.SpigotConfig.serverFullMessage); // Spigot
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index f06cac5..76e43ba 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -701,11 +701,7 @@ public final class CraftServer implements Server {
|
||||
return true;
|
||||
}
|
||||
|
||||
- if (sender instanceof Player) {
|
||||
- sender.sendMessage("Unknown command. Type \"/help\" for help.");
|
||||
- } else {
|
||||
- sender.sendMessage("Unknown command. Type \"help\" for help.");
|
||||
- }
|
||||
+ sender.sendMessage(org.spigotmc.SpigotConfig.unknownCommandMessage);
|
||||
|
||||
return false;
|
||||
}
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index 20634f1..efcd193 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -12,6 +12,7 @@ import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import org.bukkit.Bukkit;
|
||||
+import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
@@ -153,4 +154,28 @@ public class SpigotConfig
|
||||
}
|
||||
tabComplete = getInt( "commands.tab-complete", 0 );
|
||||
}
|
||||
+
|
||||
+ public static String whitelistMessage;
|
||||
+ public static String unknownCommandMessage;
|
||||
+ public static String serverFullMessage;
|
||||
+ public static String outdatedClientMessage = "Outdated client! Please use {}";
|
||||
+ public static String outdatedServerMessage = "Outdated server! I\'m still on {0}";
|
||||
+ private static String transform(String s)
|
||||
+ {
|
||||
+ return ChatColor.translateAlternateColorCodes( '&', s ).replaceAll( "\\n", "\n" );
|
||||
+ }
|
||||
+ private static void messages()
|
||||
+ {
|
||||
+ if (version < 4)
|
||||
+ {
|
||||
+ set( "messages.outdated-client", outdatedClientMessage );
|
||||
+ set( "messages.outdated-server", outdatedServerMessage );
|
||||
+ }
|
||||
+
|
||||
+ whitelistMessage = transform( getString( "messages.whitelist", "You are not whitelisted on this server!" ) );
|
||||
+ unknownCommandMessage = transform( getString( "messages.unknown-command", "Unknown command. Type \"/help\" for help." ) );
|
||||
+ serverFullMessage = transform( getString( "messages.server-full", "The server is full!" ) );
|
||||
+ outdatedClientMessage = transform( getString( "messages.outdated-client", outdatedClientMessage ) );
|
||||
+ outdatedServerMessage = transform( getString( "messages.outdated-server", outdatedServerMessage ) );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,51 +0,0 @@
|
||||
From 68f23b95b10f7bc14e6f630dfa8ef2035cc53f53 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Sat, 22 Jun 2013 16:12:02 +1000
|
||||
Subject: [PATCH] Allow Disabling of Random Lighting Updates
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
||||
index 0110120..96974b4 100644
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -906,7 +906,7 @@ public class Chunk {
|
||||
}
|
||||
|
||||
this.m = true;
|
||||
- if (!this.lit && this.done) {
|
||||
+ if (!this.lit && this.done && this.world.spigotConfig.randomLightUpdates) { // Spigot - also use random light updates setting to determine if we should relight
|
||||
this.p();
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index cb09320..7c66e3e 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -2035,7 +2035,7 @@ public abstract class World implements IBlockAccess {
|
||||
}
|
||||
|
||||
this.methodProfiler.a("playerCheckLight");
|
||||
- if (!this.players.isEmpty()) {
|
||||
+ if (spigotConfig.randomLightUpdates && !this.players.isEmpty()) { // Spigot
|
||||
i = this.random.nextInt(this.players.size());
|
||||
entityhuman = (EntityHuman) this.players.get(i);
|
||||
j = MathHelper.floor(entityhuman.locX) + this.random.nextInt(11) - 5;
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
index 827e6f9..adebd03 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
@@ -177,4 +177,11 @@ public class SpigotWorldConfig
|
||||
hopperCheck = getInt( "ticks-per.hopper-check", hopperTransfer );
|
||||
log( "Hopper Transfer: " + hopperTransfer + " Hopper Check: " + hopperCheck );
|
||||
}
|
||||
+
|
||||
+ public boolean randomLightUpdates;
|
||||
+ private void lightUpdates()
|
||||
+ {
|
||||
+ randomLightUpdates = getBoolean( "random-light-updates", false );
|
||||
+ log( "Random Lighting Updates: " + randomLightUpdates );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,57 +0,0 @@
|
||||
From edc5c05d89f5142dfd3f2b36aa92a5925f1d02d9 Mon Sep 17 00:00:00 2001
|
||||
From: Andre LeBlanc <andre@norcode.com>
|
||||
Date: Sat, 6 Apr 2013 12:00:31 -0400
|
||||
Subject: [PATCH] Make AnvilInventory.getItem() use both containers. Fixes
|
||||
BUKKIT-2788
|
||||
|
||||
The AnvilInventory reports its size as the sum of the ingredient and
|
||||
result inventories, but when trying to access the slots, only the ingredient
|
||||
inventory is used, leading to an ArrayIndexOutOfBounds exception.
|
||||
|
||||
This change overrides getItem(I) and setItem(I) to use both inventories,
|
||||
with the slot number adjusted based on their size.
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java
|
||||
index a91d81a..46a1d38 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java
|
||||
@@ -1,7 +1,9 @@
|
||||
package org.bukkit.craftbukkit.inventory;
|
||||
|
||||
import net.minecraft.server.IInventory;
|
||||
+
|
||||
import org.bukkit.inventory.AnvilInventory;
|
||||
+import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class CraftInventoryAnvil extends CraftInventory implements AnvilInventory {
|
||||
private final IInventory resultInventory;
|
||||
@@ -20,6 +22,26 @@ public class CraftInventoryAnvil extends CraftInventory implements AnvilInventor
|
||||
}
|
||||
|
||||
@Override
|
||||
+ public ItemStack getItem(int slot) {
|
||||
+ if (slot < getIngredientsInventory().getSize()) {
|
||||
+ net.minecraft.server.ItemStack item = getIngredientsInventory().getItem(slot);
|
||||
+ return item == null ? null : CraftItemStack.asCraftMirror(item);
|
||||
+ } else {
|
||||
+ net.minecraft.server.ItemStack item = getResultInventory().getItem(slot - getIngredientsInventory().getSize());
|
||||
+ return item == null ? null : CraftItemStack.asCraftMirror(item);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void setItem(int index, ItemStack item) {
|
||||
+ if (index < getIngredientsInventory().getSize()) {
|
||||
+ getIngredientsInventory().setItem(index, (item == null ? null : CraftItemStack.asNMSCopy(item)));
|
||||
+ } else {
|
||||
+ getResultInventory().setItem((index - getIngredientsInventory().getSize()), (item == null ? null : CraftItemStack.asNMSCopy(item)));
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
public int getSize() {
|
||||
return getResultInventory().getSize() + getIngredientsInventory().getSize();
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,63 +0,0 @@
|
||||
From 7d837f713628487fec822f3af649caefcb566217 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Thu, 27 Jun 2013 17:26:09 +1000
|
||||
Subject: [PATCH] Properly Close Inventories
|
||||
|
||||
Properly close inventories when unloading and switching worlds.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
||||
index 96974b4..3fc83e5 100644
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -760,6 +760,15 @@ public class Chunk {
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
TileEntity tileentity = (TileEntity) iterator.next();
|
||||
+ // Spigot Start
|
||||
+ if ( tileentity instanceof IInventory )
|
||||
+ {
|
||||
+ for ( org.bukkit.craftbukkit.entity.CraftHumanEntity h : new ArrayList<org.bukkit.craftbukkit.entity.CraftHumanEntity>( (List) ( (IInventory) tileentity ).getViewers() ) )
|
||||
+ {
|
||||
+ h.getHandle().closeInventory();
|
||||
+ }
|
||||
+ }
|
||||
+ // Spigot End
|
||||
|
||||
this.world.a(tileentity);
|
||||
}
|
||||
@@ -769,6 +778,15 @@ public class Chunk {
|
||||
java.util.Iterator<Object> iter = this.entitySlices[i].iterator();
|
||||
while (iter.hasNext()) {
|
||||
Entity entity = (Entity) iter.next();
|
||||
+ // Spigot Start
|
||||
+ if ( entity instanceof IInventory )
|
||||
+ {
|
||||
+ for ( org.bukkit.craftbukkit.entity.CraftHumanEntity h : new ArrayList<org.bukkit.craftbukkit.entity.CraftHumanEntity>( (List) ( (IInventory) entity ).getViewers() ) )
|
||||
+ {
|
||||
+ h.getHandle().closeInventory();
|
||||
+ }
|
||||
+ }
|
||||
+ // Spigot End
|
||||
|
||||
// Do not pass along players, as doing so can get them stuck outside of time.
|
||||
// (which for example disables inventory icon updates and prevents block breaking)
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityMinecartContainer.java b/src/main/java/net/minecraft/server/EntityMinecartContainer.java
|
||||
index 9f3f196..439cf2e 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityMinecartContainer.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityMinecartContainer.java
|
||||
@@ -149,6 +149,12 @@ public abstract class EntityMinecartContainer extends EntityMinecartAbstract imp
|
||||
}
|
||||
|
||||
public void b(int i) {
|
||||
+ // Spigot Start
|
||||
+ for ( HumanEntity human : new java.util.ArrayList<HumanEntity>( transaction ) )
|
||||
+ {
|
||||
+ human.closeInventory();
|
||||
+ }
|
||||
+ // Spigot End
|
||||
this.b = false;
|
||||
super.b(i);
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,27 +0,0 @@
|
||||
From 8d30529584f1e54814228d4d2ee15f88f227e721 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Fri, 28 Jun 2013 19:52:54 +1000
|
||||
Subject: [PATCH] Disallow Interaction With Self
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 3993f88..bc4ef27 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -1057,6 +1057,13 @@ public class PlayerConnection implements PacketPlayInListener {
|
||||
if (this.player.dead) return; // CraftBukkit
|
||||
WorldServer worldserver = this.minecraftServer.getWorldServer(this.player.dimension);
|
||||
Entity entity = packetplayinuseentity.a((World) worldserver);
|
||||
+ // Spigot Start
|
||||
+ if ( entity == player )
|
||||
+ {
|
||||
+ disconnect( "Cannot interact with self!" );
|
||||
+ return;
|
||||
+ }
|
||||
+ // Spigot End
|
||||
|
||||
this.player.v();
|
||||
if (entity != null) {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,36 +0,0 @@
|
||||
From 965da8b168ac6b7cbb078dcc1ccfdd0a08d1bbb1 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Tue, 2 Jul 2013 09:07:54 +1000
|
||||
Subject: [PATCH] Lower Chunk Compression
|
||||
|
||||
Use a chunk compression level of 4 - this provides an optimal balance between speed and compression.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
||||
index 856e825..09b34e9 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
||||
@@ -24,7 +24,7 @@ public class PacketPlayOutMapChunk extends Packet {
|
||||
this.b = chunk.locZ;
|
||||
this.inflatedBuffer = flag;
|
||||
ChunkMap chunkmap = a(chunk, flag, i);
|
||||
- Deflater deflater = new Deflater(-1);
|
||||
+ Deflater deflater = new Deflater(4); // Spigot
|
||||
|
||||
this.d = chunkmap.c;
|
||||
this.c = chunkmap.b;
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java
|
||||
index 3eac231..bf3a139 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java
|
||||
@@ -22,7 +22,7 @@ public class PacketPlayOutMapChunkBulk extends Packet {
|
||||
@Override
|
||||
protected Deflater initialValue() {
|
||||
// Don't use higher compression level, slows things down too much
|
||||
- return new Deflater(6);
|
||||
+ return new Deflater(4); // Spigot 6 -> 4
|
||||
}
|
||||
};
|
||||
// CraftBukkit end
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,51 +0,0 @@
|
||||
From 84431675444ac8dbb0fa7ef947abeab61000e6b2 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Tue, 2 Jul 2013 20:32:49 +1000
|
||||
Subject: [PATCH] Entity Mount and Dismount Events
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index 621f593..b13968d 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -1452,6 +1452,7 @@ public abstract class Entity {
|
||||
}
|
||||
}
|
||||
// CraftBukkit end
|
||||
+ pluginManager.callEvent( new org.spigotmc.event.entity.EntityDismountEvent( this.getBukkitEntity(), this.vehicle.getBukkitEntity() ) ); // Spigot
|
||||
|
||||
this.setPositionRotation(this.vehicle.locX, this.vehicle.boundingBox.b + (double) this.vehicle.length, this.vehicle.locZ, this.yaw, this.pitch);
|
||||
this.vehicle.passenger = null;
|
||||
@@ -1487,6 +1488,17 @@ public abstract class Entity {
|
||||
}
|
||||
}
|
||||
// CraftBukkit end
|
||||
+ // Spigot Start
|
||||
+ if ( entity.world.isChunkLoaded( (int) entity.locX >> 4, (int) entity.locZ >> 4 ) )
|
||||
+ {
|
||||
+ org.spigotmc.event.entity.EntityMountEvent event = new org.spigotmc.event.entity.EntityMountEvent( this.getBukkitEntity(), entity.getBukkitEntity() );
|
||||
+ pluginManager.callEvent( event );
|
||||
+ if ( event.isCancelled() )
|
||||
+ {
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+ // Spigot End
|
||||
|
||||
if (this.vehicle != null) {
|
||||
this.vehicle.passenger = null;
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
index 58b7b96..eaf823c 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
@@ -323,6 +323,7 @@ public abstract class EntityHuman extends EntityLiving implements ICommandListen
|
||||
public void setPassengerOf(Entity entity) {
|
||||
// CraftBukkit end
|
||||
if (this.vehicle != null && entity == null) {
|
||||
+ world.getServer().getPluginManager().callEvent( new org.spigotmc.event.entity.EntityDismountEvent( this.getBukkitEntity(), this.vehicle.getBukkitEntity() ) ); // Spigot
|
||||
// CraftBukkit start - use parent method instead to correctly fire VehicleExitEvent
|
||||
Entity originalVehicle = this.vehicle;
|
||||
// First statement moved down, second statement handled in parent method.
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,26 +0,0 @@
|
||||
From cc3277adf3b3b503bd2a6c82d3318f73021ee54e Mon Sep 17 00:00:00 2001
|
||||
From: Alex Ciuba <alexciuba@gmail.com>
|
||||
Date: Tue, 11 Jun 2013 15:23:03 -0400
|
||||
Subject: [PATCH] Prevent Ghost Players Caused by Plugins
|
||||
|
||||
Check if the player is still connected after firing event. Fixes BUKKIT-4327
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
|
||||
index 38c37c1..385dc0a 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerList.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerList.java
|
||||
@@ -471,6 +471,11 @@ public abstract class PlayerList {
|
||||
Player respawnPlayer = this.cserver.getPlayer(entityplayer1);
|
||||
PlayerRespawnEvent respawnEvent = new PlayerRespawnEvent(respawnPlayer, location, isBedSpawn);
|
||||
this.cserver.getPluginManager().callEvent(respawnEvent);
|
||||
+ // Spigot Start
|
||||
+ if (entityplayer.playerConnection.isDisconnected()) {
|
||||
+ return entityplayer;
|
||||
+ }
|
||||
+ // Spigot End
|
||||
|
||||
location = respawnEvent.getRespawnLocation();
|
||||
entityplayer.reset();
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,66 +0,0 @@
|
||||
From 568c6c9068d74112aaae326208501a2dbd17ab82 Mon Sep 17 00:00:00 2001
|
||||
From: Ammar Askar <ammar@ammaraskar.com>
|
||||
Date: Tue, 16 Jul 2013 03:32:32 +0500
|
||||
Subject: [PATCH] Entity ticking chunk caching
|
||||
|
||||
Cache known loaded chunks so we avoid making a potentially expensive contains call for every single entity in exchange for some simple arithmetic. Best case scenario, this cuts down contains call to once per chunk, worst case it adds on some simple arithmetic operations
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 7c66e3e..cbb4e77 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -1185,6 +1185,7 @@ public abstract class World implements IBlockAccess {
|
||||
CrashReport crashreport;
|
||||
CrashReportSystemDetails crashreportsystemdetails;
|
||||
|
||||
+ long lastChunk = Long.MIN_VALUE; // Spigot - cache chunk x, z cords for unload queue
|
||||
for (i = 0; i < this.i.size(); ++i) {
|
||||
entity = (Entity) this.i.get(i);
|
||||
// CraftBukkit start - Fixed an NPE, don't process entities in chunks queued for unload
|
||||
@@ -1193,10 +1194,15 @@ public abstract class World implements IBlockAccess {
|
||||
}
|
||||
|
||||
ChunkProviderServer chunkProviderServer = ((WorldServer) this).chunkProviderServer;
|
||||
- if (chunkProviderServer.unloadQueue.contains(MathHelper.floor(entity.locX) >> 4, MathHelper.floor(entity.locZ) >> 4)) {
|
||||
- continue;
|
||||
+ // Spigot start - check last chunk to see if this loaded (fast cache)
|
||||
+ long chunk = org.bukkit.craftbukkit.util.LongHash.toLong(MathHelper.floor(entity.locX) >> 4, MathHelper.floor(entity.locZ) >> 4);
|
||||
+ if (lastChunk != chunk) {
|
||||
+ if (chunkProviderServer.unloadQueue.contains(chunk)) { // Spigot end
|
||||
+ continue;
|
||||
+ }
|
||||
}
|
||||
// CraftBukkit end
|
||||
+ lastChunk = chunk; // Spigot
|
||||
|
||||
try {
|
||||
++entity.ticksLived;
|
||||
@@ -1217,6 +1223,7 @@ public abstract class World implements IBlockAccess {
|
||||
this.i.remove(i--);
|
||||
}
|
||||
}
|
||||
+ lastChunk = Long.MIN_VALUE; // Spigot
|
||||
|
||||
this.methodProfiler.c("remove");
|
||||
this.entityList.removeAll(this.f);
|
||||
@@ -1248,10 +1255,15 @@ public abstract class World implements IBlockAccess {
|
||||
|
||||
// Don't tick entities in chunks queued for unload
|
||||
ChunkProviderServer chunkProviderServer = ((WorldServer) this).chunkProviderServer;
|
||||
- if (chunkProviderServer.unloadQueue.contains(MathHelper.floor(entity.locX) >> 4, MathHelper.floor(entity.locZ) >> 4)) {
|
||||
- continue;
|
||||
+ // Spigot start - check last chunk to see if this loaded (fast cache)
|
||||
+ long chunk = org.bukkit.craftbukkit.util.LongHash.toLong(MathHelper.floor(entity.locX) >> 4, MathHelper.floor(entity.locZ) >> 4);
|
||||
+ if (lastChunk != chunk) {
|
||||
+ if (chunkProviderServer.unloadQueue.contains(chunk)) { // Spigot end
|
||||
+ continue;
|
||||
+ }
|
||||
}
|
||||
// CraftBukkit end
|
||||
+ lastChunk = Long.MIN_VALUE; // Spigot
|
||||
|
||||
if (entity.vehicle != null) {
|
||||
if (!entity.vehicle.dead && entity.vehicle.passenger == entity) {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,22 +0,0 @@
|
||||
From c9aaa508757d15762bce21ea1ad76380cb3e4392 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Sat, 3 Aug 2013 19:02:59 +1000
|
||||
Subject: [PATCH] Plug World Unload Memory Leak
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockRedstoneTorch.java b/src/main/java/net/minecraft/server/BlockRedstoneTorch.java
|
||||
index 8e01414..e0469bb 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockRedstoneTorch.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockRedstoneTorch.java
|
||||
@@ -11,7 +11,7 @@ import org.bukkit.event.block.BlockRedstoneEvent; // CraftBukkit
|
||||
public class BlockRedstoneTorch extends BlockTorch {
|
||||
|
||||
private boolean isOn;
|
||||
- private static Map b = new HashMap();
|
||||
+ private static Map b = new java.util.WeakHashMap(); // Spigot
|
||||
|
||||
private boolean a(World world, int i, int j, int k, boolean flag) {
|
||||
if (!b.containsKey(world)) {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,85 +0,0 @@
|
||||
From 2d1c5eb57b7b0407cbaaf89c84200d6037754f6d Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Sat, 3 Aug 2013 19:27:07 +1000
|
||||
Subject: [PATCH] Player Collision API
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
index eaf823c..a0f4dfc 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
@@ -430,7 +430,7 @@ public abstract class EntityHuman extends EntityLiving implements ICommandListen
|
||||
|
||||
List list = this.world.getEntities(this, axisalignedbb);
|
||||
|
||||
- if (list != null) {
|
||||
+ if (list != null && this.R()) { // Spigot: Add this.R() condition
|
||||
for (int i = 0; i < list.size(); ++i) {
|
||||
Entity entity = (Entity) list.get(i);
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 3758411..90c0e82 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -1490,7 +1490,7 @@ public abstract class EntityLiving extends Entity {
|
||||
protected void bn() {
|
||||
List list = this.world.getEntities(this, this.boundingBox.grow(0.20000000298023224D, 0.0D, 0.20000000298023224D));
|
||||
|
||||
- if (list != null && !list.isEmpty()) {
|
||||
+ if (this.R() && list != null && !list.isEmpty()) { // Spigot: Add this.R() condition
|
||||
for (int i = 0; i < list.size(); ++i) {
|
||||
Entity entity = (Entity) list.get(i);
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
index 8d98a70..d32a2d2 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
@@ -63,6 +63,21 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
public double maxHealthCache;
|
||||
public boolean joining = true;
|
||||
// CraftBukkit end
|
||||
+ // Spigot start
|
||||
+ public boolean collidesWithEntities = true;
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean Q()
|
||||
+ {
|
||||
+ return this.collidesWithEntities && super.Q();
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean R()
|
||||
+ {
|
||||
+ return this.collidesWithEntities && super.R();
|
||||
+ }
|
||||
+ // Spigot end
|
||||
|
||||
public EntityPlayer(MinecraftServer minecraftserver, WorldServer worldserver, GameProfile gameprofile, PlayerInteractManager playerinteractmanager) {
|
||||
super(worldserver, gameprofile);
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 3fee3e8..25de653 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -1280,6 +1280,19 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
// Spigot start
|
||||
private final Player.Spigot spigot = new Player.Spigot()
|
||||
{
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean getCollidesWithEntities()
|
||||
+ {
|
||||
+ return getHandle().collidesWithEntities;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void setCollidesWithEntities(boolean collides)
|
||||
+ {
|
||||
+ getHandle().collidesWithEntities = collides;
|
||||
+ getHandle().k = collides; // First boolean of Entity
|
||||
+ }
|
||||
};
|
||||
|
||||
public Player.Spigot spigot()
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,27 +0,0 @@
|
||||
From 1855820fb449b50c6b508e4237d647419b3fb63b Mon Sep 17 00:00:00 2001
|
||||
From: agentk20 <agentkid20@gmail.com>
|
||||
Date: Sat, 3 Aug 2013 19:28:48 +1000
|
||||
Subject: [PATCH] Fully Disable Snooper When Not Required
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 8f61474..f9cbe47 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -573,11 +573,11 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
this.f[this.ticks % 100] = System.nanoTime() - i;
|
||||
this.methodProfiler.b();
|
||||
this.methodProfiler.a("snooper");
|
||||
- if (!this.k.d() && this.ticks > 100) {
|
||||
+ if (getSnooperEnabled() && !this.k.d() && this.ticks > 100) { // Spigot
|
||||
this.k.a();
|
||||
}
|
||||
|
||||
- if (this.ticks % 6000 == 0) {
|
||||
+ if (getSnooperEnabled() && this.ticks % 6000 == 0) { // Spigot
|
||||
this.k.b();
|
||||
}
|
||||
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,25 +0,0 @@
|
||||
From fc84431ae09a739d56d194eca7545ba7e32c9372 Mon Sep 17 00:00:00 2001
|
||||
From: DerFlash <bte@freenet.de>
|
||||
Date: Sat, 3 Aug 2013 19:53:48 +1000
|
||||
Subject: [PATCH] Add Getter for Entity Invulnerability
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
||||
index e026c1f..96d763b 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
||||
@@ -403,6 +403,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||
// Spigot start
|
||||
private final Spigot spigot = new Spigot()
|
||||
{
|
||||
+ @Override
|
||||
+ public boolean isInvulnerable()
|
||||
+ {
|
||||
+ return getHandle().isInvulnerable();
|
||||
+ }
|
||||
};
|
||||
|
||||
public Spigot spigot()
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,31 +0,0 @@
|
||||
From a6bd94d3020c20f1984d260da1404e07a31f27dd Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Mon, 5 Aug 2013 20:17:20 +1000
|
||||
Subject: [PATCH] Cap Minimum Player Speed
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 25de653..633866e 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -1152,7 +1152,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
public void setFlySpeed(float value) {
|
||||
validateSpeed(value);
|
||||
EntityPlayer player = getHandle();
|
||||
- player.abilities.flySpeed = value / 2f;
|
||||
+ player.abilities.flySpeed = Math.max( value, 0.0001f ) / 2f; // Spigot
|
||||
player.updateAbilities();
|
||||
|
||||
}
|
||||
@@ -1160,7 +1160,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
public void setWalkSpeed(float value) {
|
||||
validateSpeed(value);
|
||||
EntityPlayer player = getHandle();
|
||||
- player.abilities.walkSpeed = value / 2f;
|
||||
+ player.abilities.walkSpeed = Math.max( value, 0.0001f ) / 2f; // Spigot
|
||||
player.updateAbilities();
|
||||
}
|
||||
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,24 +0,0 @@
|
||||
From 6f3da57934a1b289299a51da40674325e84cd1ea Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Sat, 14 Sep 2013 10:16:38 +1000
|
||||
Subject: [PATCH] Update Inventory and Health for PlayerConsumeItemEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
index a0f4dfc..1f0e29a 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
@@ -277,6 +277,10 @@ public abstract class EntityHuman extends EntityLiving implements ICommandListen
|
||||
// Update client
|
||||
if (this instanceof EntityPlayer) {
|
||||
((EntityPlayer) this).playerConnection.sendPacket(new PacketPlayOutSetSlot((byte) 0, activeContainer.a((IInventory) this.inventory, this.inventory.itemInHandIndex).index, this.f));
|
||||
+ // Spigot Start
|
||||
+ ((EntityPlayer) this).getBukkitEntity().updateInventory();
|
||||
+ ((EntityPlayer) this).getBukkitEntity().updateScaledHealth();
|
||||
+ // Spigot End
|
||||
}
|
||||
return;
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,35 +0,0 @@
|
||||
From ddf15651dc1bea839e545b638c3ef774317b7e6f Mon Sep 17 00:00:00 2001
|
||||
From: BlackHole <black-hole@live.com>
|
||||
Date: Tue, 16 Jul 2013 22:34:50 +0200
|
||||
Subject: [PATCH] Call EntityChangeBlockEvent for Fire Arrows hitting TNT
|
||||
|
||||
Adds BUKKIT-4355
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockTNT.java b/src/main/java/net/minecraft/server/BlockTNT.java
|
||||
index e943676..7320a88 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockTNT.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockTNT.java
|
||||
@@ -54,7 +54,7 @@ public class BlockTNT extends Block {
|
||||
|
||||
public boolean interact(World world, int i, int j, int k, EntityHuman entityhuman, int l, float f, float f1, float f2) {
|
||||
if (entityhuman.bE() != null && entityhuman.bE().getItem() == Items.FLINT_AND_STEEL) {
|
||||
- this.a(world, i, j, k, 1, entityhuman);
|
||||
+ this.a(world, i, j, k, 1, (EntityLiving) entityhuman); // Spigot - Fix decompile error!
|
||||
world.setAir(i, j, k);
|
||||
entityhuman.bE().damage(1, entityhuman);
|
||||
return true;
|
||||
@@ -68,6 +68,11 @@ public class BlockTNT extends Block {
|
||||
EntityArrow entityarrow = (EntityArrow) entity;
|
||||
|
||||
if (entityarrow.isBurning()) {
|
||||
+ // CraftBukkit start
|
||||
+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entityarrow, i, j, k, Blocks.AIR, 0).isCancelled()) {
|
||||
+ return;
|
||||
+ }
|
||||
+ // CraftBukkit end
|
||||
this.a(world, i, j, k, 1, entityarrow.shooter instanceof EntityLiving ? (EntityLiving) entityarrow.shooter : null);
|
||||
world.setAir(i, j, k);
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,50 +0,0 @@
|
||||
From 1477f4d77a4847abd58f0ea17465436573080305 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Sat, 21 Sep 2013 12:33:09 +1000
|
||||
Subject: [PATCH] Allow Disabling of 1.6.3 Structure Saving
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/StructureGenerator.java b/src/main/java/net/minecraft/server/StructureGenerator.java
|
||||
index 97308d0..4d336d8 100644
|
||||
--- a/src/main/java/net/minecraft/server/StructureGenerator.java
|
||||
+++ b/src/main/java/net/minecraft/server/StructureGenerator.java
|
||||
@@ -178,7 +178,15 @@ public abstract class StructureGenerator extends WorldGenBase {
|
||||
|
||||
private void a(World world) {
|
||||
if (this.e == null) {
|
||||
+ // Spigot Start
|
||||
+ if ( world.spigotConfig.saveStructureInfo )
|
||||
+ {
|
||||
this.e = (PersistentStructure) world.a(PersistentStructure.class, this.a());
|
||||
+ } else
|
||||
+ {
|
||||
+ this.e = new PersistentStructure( this.a() );
|
||||
+ }
|
||||
+ // Spigot End
|
||||
if (this.e == null) {
|
||||
this.e = new PersistentStructure(this.a());
|
||||
world.a(this.a(), (PersistentBase) this.e);
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
index adebd03..9586c44 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
@@ -184,4 +184,16 @@ public class SpigotWorldConfig
|
||||
randomLightUpdates = getBoolean( "random-light-updates", false );
|
||||
log( "Random Lighting Updates: " + randomLightUpdates );
|
||||
}
|
||||
+
|
||||
+ public boolean saveStructureInfo;
|
||||
+ private void structureInfo()
|
||||
+ {
|
||||
+ saveStructureInfo = getBoolean( "save-structure-info", true );
|
||||
+ log( "Structure Info Saving: " + saveStructureInfo );
|
||||
+ if ( !saveStructureInfo )
|
||||
+ {
|
||||
+ log( "*** WARNING *** You have selected to NOT save structure info. This may cause structures such as fortresses to not spawn mobs when updating to 1.7!" );
|
||||
+ log( "*** WARNING *** Please use this option with caution, SpigotMC is not responsible for any issues this option may cause in the future!" );
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,38 +0,0 @@
|
||||
From 8e173d2c9399b920630da34d9f159cbb1bfe9cd7 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Sun, 22 Sep 2013 19:10:53 +1000
|
||||
Subject: [PATCH] Item Despawn Rate
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java
|
||||
index 95beb11..0f1bcc7 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityItem.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityItem.java
|
||||
@@ -104,7 +104,7 @@ public class EntityItem extends Entity {
|
||||
}
|
||||
|
||||
// ++this.age; // CraftBukkit - Moved up
|
||||
- if (!this.world.isStatic && this.age >= 6000) {
|
||||
+ if (!this.world.isStatic && this.age >= world.spigotConfig.itemDespawnRate) { // Spigot
|
||||
// CraftBukkit start - fire ItemDespawnEvent
|
||||
if (org.bukkit.craftbukkit.event.CraftEventFactory.callItemDespawnEvent(this).isCancelled()) {
|
||||
this.age = 0;
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
index 9586c44..82d59e7 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
@@ -196,4 +196,11 @@ public class SpigotWorldConfig
|
||||
log( "*** WARNING *** Please use this option with caution, SpigotMC is not responsible for any issues this option may cause in the future!" );
|
||||
}
|
||||
}
|
||||
+
|
||||
+ public int itemDespawnRate;
|
||||
+ private void itemDespawnRate()
|
||||
+ {
|
||||
+ itemDespawnRate = getInt( "item-despawn-rate", 6000 );
|
||||
+ log( "Item Despawn Rate: " + itemDespawnRate );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,49 +0,0 @@
|
||||
From e7f010f312b6dc26465c72c3b7f9dbc876fc199f Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Sun, 6 Oct 2013 17:36:28 +1100
|
||||
Subject: [PATCH] Don't Special Case X Move Value
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index bc4ef27..1ea7e4a 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -105,6 +105,7 @@ public class PlayerConnection implements PacketPlayInListener {
|
||||
private float lastPitch = Float.MAX_VALUE;
|
||||
private float lastYaw = Float.MAX_VALUE;
|
||||
private boolean justTeleported = false;
|
||||
+ private boolean hasMoved; // Spigot
|
||||
|
||||
// For the PacketPlayOutBlockPlace hack :(
|
||||
Long lastPacket;
|
||||
@@ -201,6 +202,18 @@ public class PlayerConnection implements PacketPlayInListener {
|
||||
|
||||
// CraftBukkit start - fire PlayerMoveEvent
|
||||
Player player = this.getPlayer();
|
||||
+ // Spigot Start
|
||||
+ if ( !hasMoved )
|
||||
+ {
|
||||
+ Location curPos = player.getLocation();
|
||||
+ lastPosX = curPos.getX();
|
||||
+ lastPosY = curPos.getY();
|
||||
+ lastPosZ = curPos.getZ();
|
||||
+ lastYaw = curPos.getYaw();
|
||||
+ lastPitch = curPos.getPitch();
|
||||
+ hasMoved = true;
|
||||
+ }
|
||||
+ // Spigot End
|
||||
Location from = new Location(player.getWorld(), lastPosX, lastPosY, lastPosZ, lastYaw, lastPitch); // Get the Players previous Event location.
|
||||
Location to = player.getLocation().clone(); // Start off the To location as the Players current location.
|
||||
|
||||
@@ -229,7 +242,7 @@ public class PlayerConnection implements PacketPlayInListener {
|
||||
this.lastPitch = to.getPitch();
|
||||
|
||||
// Skip the first time we do this
|
||||
- if (from.getX() != Double.MAX_VALUE) {
|
||||
+ if (true) { // Spigot - don't skip any move events
|
||||
PlayerMoveEvent event = new PlayerMoveEvent(player, from, to);
|
||||
this.server.getPluginManager().callEvent(event);
|
||||
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,29 +0,0 @@
|
||||
From d35ec943031fbade450a9230fb0af72a0abb9eaa Mon Sep 17 00:00:00 2001
|
||||
From: ninja- <xninja@openmailbox.org>
|
||||
Date: Tue, 8 Oct 2013 14:34:49 +0200
|
||||
Subject: [PATCH] Implement respawn API.
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 633866e..03d6d36 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -1293,6 +1293,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
getHandle().collidesWithEntities = collides;
|
||||
getHandle().k = collides; // First boolean of Entity
|
||||
}
|
||||
+
|
||||
+ @Override
|
||||
+ public void respawn()
|
||||
+ {
|
||||
+ if ( getHealth() <= 0 && isOnline() )
|
||||
+ {
|
||||
+ server.getServer().getPlayerList().moveToWorld( getHandle(), 0, false );
|
||||
+ }
|
||||
+ }
|
||||
};
|
||||
|
||||
public Player.Spigot spigot()
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,28 +0,0 @@
|
||||
From e8bc43ab4c173e204053dd90ffbe11417d1c7176 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Wed, 9 Oct 2013 18:20:05 +1100
|
||||
Subject: [PATCH] Fix BrewingStands Removing NBT / Potions
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockBrewingStand.java b/src/main/java/net/minecraft/server/BlockBrewingStand.java
|
||||
index 3287d77..eabea5a 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockBrewingStand.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockBrewingStand.java
|
||||
@@ -86,7 +86,13 @@ public class BlockBrewingStand extends BlockContainer {
|
||||
entityitem.motX = (double) ((float) this.a.nextGaussian() * f3);
|
||||
entityitem.motY = (double) ((float) this.a.nextGaussian() * f3 + 0.2F);
|
||||
entityitem.motZ = (double) ((float) this.a.nextGaussian() * f3);
|
||||
- world.addEntity(entityitem);
|
||||
+ // Spigot Start
|
||||
+ if ( itemstack.hasTag() )
|
||||
+ {
|
||||
+ entityitem.getItemStack().setTag( (NBTTagCompound) itemstack.getTag().clone() );
|
||||
+ }
|
||||
+ // Spigot End
|
||||
+ world.addEntity( entityitem );
|
||||
}
|
||||
}
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,38 +0,0 @@
|
||||
From 9ca03fb0b1d7d7ea807a70a1c358862827d82a14 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Mon, 14 Oct 2013 19:20:10 +1100
|
||||
Subject: [PATCH] Arrow Despawn Rate
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityArrow.java b/src/main/java/net/minecraft/server/EntityArrow.java
|
||||
index c33d564..c0633a4 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityArrow.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityArrow.java
|
||||
@@ -144,7 +144,7 @@ public class EntityArrow extends Entity implements IProjectile {
|
||||
|
||||
if (block == this.g && i == this.h) {
|
||||
++this.at;
|
||||
- if (this.at == 1200) {
|
||||
+ if (this.at == world.spigotConfig.arrowDespawnRate) {
|
||||
this.die();
|
||||
}
|
||||
} else {
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
index 82d59e7..2ec047c 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
@@ -203,4 +203,11 @@ public class SpigotWorldConfig
|
||||
itemDespawnRate = getInt( "item-despawn-rate", 6000 );
|
||||
log( "Item Despawn Rate: " + itemDespawnRate );
|
||||
}
|
||||
+
|
||||
+ public int arrowDespawnRate;
|
||||
+ private void arrowDespawnRate()
|
||||
+ {
|
||||
+ arrowDespawnRate = getInt( "arrow-despawn-rate", 1200 );
|
||||
+ log( "Arrow Despawn Rate: " + arrowDespawnRate );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,291 +0,0 @@
|
||||
From 3759de3b6c8e830718c6737382867c11305fd7b2 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Sat, 23 Feb 2013 12:33:20 +1100
|
||||
Subject: [PATCH] Watchdog Thread.
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index f9cbe47..2407ab2 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -488,6 +488,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
this.a(crashreport);
|
||||
} finally {
|
||||
try {
|
||||
+ org.spigotmc.WatchdogThread.doStop();
|
||||
this.stop();
|
||||
this.isStopped = true;
|
||||
} catch (Throwable throwable1) {
|
||||
@@ -678,6 +679,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
SpigotTimings.tickablesTimer.stopTiming(); // Spigot
|
||||
|
||||
this.methodProfiler.b();
|
||||
+ org.spigotmc.WatchdogThread.tick(); // Spigot
|
||||
SpigotTimings.serverTickTimer.stopTiming(); // Spigot
|
||||
org.spigotmc.CustomTimingsHandler.tick(); // Spigot
|
||||
}
|
||||
diff --git a/src/main/java/org/spigotmc/RestartCommand.java b/src/main/java/org/spigotmc/RestartCommand.java
|
||||
new file mode 100644
|
||||
index 0000000..2d330fc
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/org/spigotmc/RestartCommand.java
|
||||
@@ -0,0 +1,110 @@
|
||||
+package org.spigotmc;
|
||||
+
|
||||
+import java.io.File;
|
||||
+import java.util.List;
|
||||
+import net.minecraft.server.EntityPlayer;
|
||||
+import net.minecraft.server.MinecraftServer;
|
||||
+import org.bukkit.command.Command;
|
||||
+import org.bukkit.command.CommandSender;
|
||||
+
|
||||
+public class RestartCommand extends Command
|
||||
+{
|
||||
+
|
||||
+ public RestartCommand(String name)
|
||||
+ {
|
||||
+ super( name );
|
||||
+ this.description = "Restarts the server";
|
||||
+ this.usageMessage = "/restart";
|
||||
+ this.setPermission( "bukkit.command.restart" );
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean execute(CommandSender sender, String currentAlias, String[] args)
|
||||
+ {
|
||||
+ if ( testPermission( sender ) )
|
||||
+ {
|
||||
+ restart();
|
||||
+ }
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ public static void restart()
|
||||
+ {
|
||||
+ AsyncCatcher.enabled = false; // Disable async catcher incase it interferes with us
|
||||
+ try
|
||||
+ {
|
||||
+ final File file = new File( SpigotConfig.restartScript );
|
||||
+ if ( file.isFile() )
|
||||
+ {
|
||||
+ System.out.println( "Attempting to restart with " + SpigotConfig.restartScript );
|
||||
+
|
||||
+ // Kick all players
|
||||
+ for ( EntityPlayer p : (List< EntityPlayer>) MinecraftServer.getServer().getPlayerList().players )
|
||||
+ {
|
||||
+ p.playerConnection.disconnect(SpigotConfig.restartMessage);
|
||||
+ }
|
||||
+ // Give the socket a chance to send the packets
|
||||
+ try
|
||||
+ {
|
||||
+ Thread.sleep( 100 );
|
||||
+ } catch ( InterruptedException ex )
|
||||
+ {
|
||||
+ }
|
||||
+ // Close the socket so we can rebind with the new process
|
||||
+ MinecraftServer.getServer().ah().b();
|
||||
+
|
||||
+ // Give time for it to kick in
|
||||
+ try
|
||||
+ {
|
||||
+ Thread.sleep( 100 );
|
||||
+ } catch ( InterruptedException ex )
|
||||
+ {
|
||||
+ }
|
||||
+
|
||||
+ // Actually shutdown
|
||||
+ try
|
||||
+ {
|
||||
+ MinecraftServer.getServer().stop();
|
||||
+ } catch ( Throwable t )
|
||||
+ {
|
||||
+ }
|
||||
+
|
||||
+ // This will be done AFTER the server has completely halted
|
||||
+ Thread shutdownHook = new Thread()
|
||||
+ {
|
||||
+ @Override
|
||||
+ public void run()
|
||||
+ {
|
||||
+ try
|
||||
+ {
|
||||
+ String os = System.getProperty( "os.name" ).toLowerCase();
|
||||
+ if ( os.contains( "win" ) )
|
||||
+ {
|
||||
+ Runtime.getRuntime().exec( "cmd /c start " + file.getPath() );
|
||||
+ } else
|
||||
+ {
|
||||
+ Runtime.getRuntime().exec( new String[]
|
||||
+ {
|
||||
+ "sh", file.getPath()
|
||||
+ } );
|
||||
+ }
|
||||
+ } catch ( Exception e )
|
||||
+ {
|
||||
+ e.printStackTrace();
|
||||
+ }
|
||||
+ }
|
||||
+ };
|
||||
+
|
||||
+ shutdownHook.setDaemon( true );
|
||||
+ Runtime.getRuntime().addShutdownHook( shutdownHook );
|
||||
+ } else
|
||||
+ {
|
||||
+ System.out.println( "Startup script '" + SpigotConfig.restartScript + "' does not exist! Stopping server." );
|
||||
+ }
|
||||
+ System.exit( 0 );
|
||||
+ } catch ( Exception ex )
|
||||
+ {
|
||||
+ ex.printStackTrace();
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index efcd193..2b499fe 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -178,4 +178,18 @@ public class SpigotConfig
|
||||
outdatedClientMessage = transform( getString( "messages.outdated-client", outdatedClientMessage ) );
|
||||
outdatedServerMessage = transform( getString( "messages.outdated-server", outdatedServerMessage ) );
|
||||
}
|
||||
+
|
||||
+ public static int timeoutTime = 60;
|
||||
+ public static boolean restartOnCrash = true;
|
||||
+ public static String restartScript = "./start.sh";
|
||||
+ public static String restartMessage;
|
||||
+ private static void watchdog()
|
||||
+ {
|
||||
+ timeoutTime = getInt( "settings.timeout-time", timeoutTime );
|
||||
+ restartOnCrash = getBoolean( "settings.restart-on-crash", restartOnCrash );
|
||||
+ restartScript = getString( "settings.restart-script", restartScript );
|
||||
+ restartMessage = transform( getString( "messages.restart", "Server is restarting" ) );
|
||||
+ commands.put( "restart", new RestartCommand( "restart" ) );
|
||||
+ WatchdogThread.doStart( timeoutTime, restartOnCrash );
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java
|
||||
new file mode 100644
|
||||
index 0000000..de08ad6
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/org/spigotmc/WatchdogThread.java
|
||||
@@ -0,0 +1,117 @@
|
||||
+package org.spigotmc;
|
||||
+
|
||||
+import java.lang.management.ManagementFactory;
|
||||
+import java.lang.management.MonitorInfo;
|
||||
+import java.lang.management.ThreadInfo;
|
||||
+import java.util.logging.Level;
|
||||
+import java.util.logging.Logger;
|
||||
+import net.minecraft.server.MinecraftServer;
|
||||
+import org.bukkit.Bukkit;
|
||||
+
|
||||
+public class WatchdogThread extends Thread
|
||||
+{
|
||||
+
|
||||
+ private static WatchdogThread instance;
|
||||
+ private final long timeoutTime;
|
||||
+ private final boolean restart;
|
||||
+ private volatile long lastTick;
|
||||
+ private volatile boolean stopping;
|
||||
+
|
||||
+ private WatchdogThread(long timeoutTime, boolean restart)
|
||||
+ {
|
||||
+ super( "Spigot Watchdog Thread" );
|
||||
+ this.timeoutTime = timeoutTime;
|
||||
+ this.restart = restart;
|
||||
+ }
|
||||
+
|
||||
+ public static void doStart(int timeoutTime, boolean restart)
|
||||
+ {
|
||||
+ if ( instance == null )
|
||||
+ {
|
||||
+ instance = new WatchdogThread( timeoutTime * 1000L, restart );
|
||||
+ instance.start();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ public static void tick()
|
||||
+ {
|
||||
+ instance.lastTick = System.currentTimeMillis();
|
||||
+ }
|
||||
+
|
||||
+ public static void doStop()
|
||||
+ {
|
||||
+ if ( instance != null )
|
||||
+ {
|
||||
+ instance.stopping = true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void run()
|
||||
+ {
|
||||
+ while ( !stopping )
|
||||
+ {
|
||||
+ //
|
||||
+ if ( lastTick != 0 && System.currentTimeMillis() > lastTick + timeoutTime )
|
||||
+ {
|
||||
+ Logger log = Bukkit.getServer().getLogger();
|
||||
+ log.log( Level.SEVERE, "The server has stopped responding!" );
|
||||
+ log.log( Level.SEVERE, "Please report this to http://www.spigotmc.org/" );
|
||||
+ log.log( Level.SEVERE, "Be sure to include ALL relevant console errors and Minecraft crash reports" );
|
||||
+ log.log( Level.SEVERE, "Spigot version: " + Bukkit.getServer().getVersion() );
|
||||
+ //
|
||||
+ log.log( Level.SEVERE, "------------------------------" );
|
||||
+ log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Spigot!):" );
|
||||
+ dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().primaryThread.getId(), Integer.MAX_VALUE ), log );
|
||||
+ log.log( Level.SEVERE, "------------------------------" );
|
||||
+ //
|
||||
+ log.log( Level.SEVERE, "Entire Thread Dump:" );
|
||||
+ ThreadInfo[] threads = ManagementFactory.getThreadMXBean().dumpAllThreads( true, true );
|
||||
+ for ( ThreadInfo thread : threads )
|
||||
+ {
|
||||
+ dumpThread( thread, log );
|
||||
+ }
|
||||
+ log.log( Level.SEVERE, "------------------------------" );
|
||||
+
|
||||
+ if ( restart )
|
||||
+ {
|
||||
+ RestartCommand.restart();
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ try
|
||||
+ {
|
||||
+ sleep( 10000 );
|
||||
+ } catch ( InterruptedException ex )
|
||||
+ {
|
||||
+ interrupt();
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ private static void dumpThread(ThreadInfo thread, Logger log)
|
||||
+ {
|
||||
+ log.log( Level.SEVERE, "------------------------------" );
|
||||
+ //
|
||||
+ log.log( Level.SEVERE, "Current Thread: " + thread.getThreadName() );
|
||||
+ log.log( Level.SEVERE, "\tPID: " + thread.getThreadId()
|
||||
+ + " | Suspended: " + thread.isSuspended()
|
||||
+ + " | Native: " + thread.isInNative()
|
||||
+ + " | State: " + thread.getThreadState() );
|
||||
+ if ( thread.getLockedMonitors().length != 0 )
|
||||
+ {
|
||||
+ log.log( Level.SEVERE, "\tThread is waiting on monitor(s):" );
|
||||
+ for ( MonitorInfo monitor : thread.getLockedMonitors() )
|
||||
+ {
|
||||
+ log.log( Level.SEVERE, "\t\tLocked on:" + monitor.getLockedStackFrame() );
|
||||
+ }
|
||||
+ }
|
||||
+ log.log( Level.SEVERE, "\tStack:" );
|
||||
+ //
|
||||
+ for ( StackTraceElement stack : thread.getStackTrace() )
|
||||
+ {
|
||||
+ log.log( Level.SEVERE, "\t\t" + stack );
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,38 +0,0 @@
|
||||
From d129581369e68f9fbfd0bd45a3de0d42d71d673e Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Sun, 1 Dec 2013 17:52:14 +1100
|
||||
Subject: [PATCH] Fix packed ice generation
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldGenPackedIce2.java b/src/main/java/net/minecraft/server/WorldGenPackedIce2.java
|
||||
index c0db754..a830758 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldGenPackedIce2.java
|
||||
+++ b/src/main/java/net/minecraft/server/WorldGenPackedIce2.java
|
||||
@@ -41,13 +41,13 @@ public class WorldGenPackedIce2 extends WorldGenerator {
|
||||
Block block = world.getType(i + l1, j + j1, k + i2);
|
||||
|
||||
if (block.getMaterial() == Material.AIR || block == Blocks.DIRT || block == Blocks.SNOW_BLOCK || block == Blocks.ICE) {
|
||||
- this.setType(world, i + l1, j + j1, k + i2, Blocks.PACKED_ICE);
|
||||
+ world.setTypeUpdate(i + l1, j + j1, k + i2, Blocks.PACKED_ICE); // Spigot
|
||||
}
|
||||
|
||||
if (j1 != 0 && k1 > 1) {
|
||||
block = world.getType(i + l1, j - j1, k + i2);
|
||||
if (block.getMaterial() == Material.AIR || block == Blocks.DIRT || block == Blocks.SNOW_BLOCK || block == Blocks.ICE) {
|
||||
- this.setType(world, i + l1, j - j1, k + i2, Blocks.PACKED_ICE);
|
||||
+ world.setTypeUpdate(i + l1, j - j1, k + i2, Blocks.PACKED_ICE); // Spigot
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -78,7 +78,7 @@ public class WorldGenPackedIce2 extends WorldGenerator {
|
||||
Block block1 = world.getType(i + j2, l1, k + k1);
|
||||
|
||||
if (block1.getMaterial() == Material.AIR || block1 == Blocks.DIRT || block1 == Blocks.SNOW_BLOCK || block1 == Blocks.ICE || block1 == Blocks.PACKED_ICE) {
|
||||
- this.setType(world, i + j2, l1, k + k1, Blocks.PACKED_ICE);
|
||||
+ world.setTypeUpdate(i + j2, l1, k + k1, Blocks.PACKED_ICE); // Spigot
|
||||
--l1;
|
||||
--k2;
|
||||
if (k2 <= 0) {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,21 +0,0 @@
|
||||
From 5dee6f66cd4e91d2c1c643ee16964351269f2f18 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Tue, 3 Dec 2013 11:07:48 +1100
|
||||
Subject: [PATCH] Clear Flower Pot on Drop
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockFlowerPot.java b/src/main/java/net/minecraft/server/BlockFlowerPot.java
|
||||
index ca6f4f0..0fa90b4 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockFlowerPot.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockFlowerPot.java
|
||||
@@ -90,6 +90,7 @@ public class BlockFlowerPot extends BlockContainer {
|
||||
|
||||
if (tileentityflowerpot != null && tileentityflowerpot.a() != null) {
|
||||
this.a(world, i, j, k, new ItemStack(tileentityflowerpot.a(), 1, tileentityflowerpot.b()));
|
||||
+ tileentityflowerpot.a( null, 0 ); // Spigot
|
||||
}
|
||||
|
||||
super.remove(world, i, j, k, block, l);
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,30 +0,0 @@
|
||||
From 0ed66ccec3c2472717d49a37ebd8c22b1e57fc38 Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Mon, 2 Dec 2013 23:42:09 +0000
|
||||
Subject: [PATCH] Fix some chunks not being sent to the client
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
||||
index 3fc83e5..3712009 100644
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -930,7 +930,15 @@ public class Chunk {
|
||||
}
|
||||
|
||||
public boolean k() {
|
||||
- return this.m && this.done && this.lit;
|
||||
+ // Spigot Start
|
||||
+ /*
|
||||
+ * As of 1.7, Mojang added a check to make sure that only chunks which have been lit are sent to the client.
|
||||
+ * Unfortunately this interferes with our modified chunk ticking algorithm, which will only tick chunks distant from the player on a very infrequent basis.
|
||||
+ * We cannot unfortunately do this lighting stage during chunk gen as it appears to put a lot more noticeable load on the server, than when it is done at play time.
|
||||
+ * For now at least we will simply send all chunks, in accordance with pre 1.7 behaviour.
|
||||
+ */
|
||||
+ return true;
|
||||
+ // Spigot End
|
||||
}
|
||||
|
||||
public ChunkCoordIntPair l() {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,40 +0,0 @@
|
||||
From 5743f6c6a8179d530e15ea8aa883ab42c7a3aa68 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Thu, 5 Dec 2013 13:55:53 +1100
|
||||
Subject: [PATCH] Fix Broken Async Chat
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayInChat.java b/src/main/java/net/minecraft/server/PacketPlayInChat.java
|
||||
index 604a7af..d419f0f 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketPlayInChat.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketPlayInChat.java
|
||||
@@ -43,7 +43,25 @@ public class PacketPlayInChat extends Packet {
|
||||
}
|
||||
// CraftBukkit end
|
||||
|
||||
- public void handle(PacketListener packetlistener) {
|
||||
+ // Spigot Start
|
||||
+ private static final java.util.concurrent.ExecutorService executors = java.util.concurrent.Executors.newCachedThreadPool(
|
||||
+ new com.google.common.util.concurrent.ThreadFactoryBuilder().setDaemon( true ).setNameFormat( "Async Chat Thread - #%d" ).build() );
|
||||
+ public void handle(final PacketListener packetlistener)
|
||||
+ {
|
||||
+ if ( a() )
|
||||
+ {
|
||||
+ executors.submit( new Runnable()
|
||||
+ {
|
||||
+
|
||||
+ @Override
|
||||
+ public void run()
|
||||
+ {
|
||||
+ PacketPlayInChat.this.a( (PacketPlayInListener) packetlistener );
|
||||
+ }
|
||||
+ } );
|
||||
+ return;
|
||||
+ }
|
||||
+ // Spigot End
|
||||
this.a((PacketPlayInListener) packetlistener);
|
||||
}
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,40 +0,0 @@
|
||||
From ef522cef52d46863be10da19322970154d9075ea Mon Sep 17 00:00:00 2001
|
||||
From: ItsHarry <info@itsjerryandharry.com>
|
||||
Date: Thu, 5 Dec 2013 21:58:11 +0100
|
||||
Subject: [PATCH] Allow Teleportation of Vehicles and Passengers
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 03d6d36..b14098a 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -453,9 +453,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
return false;
|
||||
}
|
||||
|
||||
- if (entity.vehicle != null || entity.passenger != null) {
|
||||
- return false;
|
||||
- }
|
||||
+ // Spigot Start
|
||||
+ // if (entity.vehicle != null || entity.passenger != null) {
|
||||
+ // return false;
|
||||
+ // }
|
||||
+ // Spigot End
|
||||
|
||||
// From = Players current Location
|
||||
Location from = this.getLocation();
|
||||
@@ -469,6 +471,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
if (event.isCancelled()) {
|
||||
return false;
|
||||
}
|
||||
+
|
||||
+ // Spigot Start
|
||||
+ eject();
|
||||
+ leaveVehicle();
|
||||
+ // Spigot End
|
||||
|
||||
// Update the From Location
|
||||
from = event.getFrom();
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,21 +0,0 @@
|
||||
From f83fcc664288a21eba0fba320a098f6dd57575dc Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Sun, 8 Dec 2013 16:52:42 +1100
|
||||
Subject: [PATCH] Remove OS X Special Chars from Signs
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 4c509b6..213183d 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -1584,6 +1584,7 @@ public class PlayerConnection implements PacketPlayInListener {
|
||||
|
||||
for (j = 0; j < 4; ++j) {
|
||||
boolean flag = true;
|
||||
+ packetplayinupdatesign.f()[j] = packetplayinupdatesign.f()[j].replaceAll( "\uF700", "" ).replaceAll( "\uF701", "" ); // Spigot - Mac OSX sends weird chars
|
||||
|
||||
if (packetplayinupdatesign.f()[j].length() > 15) {
|
||||
flag = false;
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,397 +0,0 @@
|
||||
From f9c86f4865d4330baea6630e32bbd41bd005ffa8 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Thu, 16 May 2013 18:51:05 +1000
|
||||
Subject: [PATCH] Orebfuscator
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
index bc51217..8335e89 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
@@ -86,6 +86,7 @@ public class EntityFallingBlock extends Entity {
|
||||
}
|
||||
|
||||
this.world.setAir(i, j, k);
|
||||
+ world.spigotConfig.antiXrayInstance.updateNearbyBlocks(world, i, j, k); // Spigot
|
||||
}
|
||||
|
||||
if (this.onGround) {
|
||||
@@ -101,6 +102,7 @@ public class EntityFallingBlock extends Entity {
|
||||
}
|
||||
this.world.setTypeAndData(i, j, k, this.id, this.data, 3);
|
||||
// CraftBukkit end
|
||||
+ world.spigotConfig.antiXrayInstance.updateNearbyBlocks(world, i, j, k); // Spigot
|
||||
|
||||
if (this.id instanceof BlockFalling) {
|
||||
((BlockFalling) this.id).a(this.world, i, j, k, this.data);
|
||||
diff --git a/src/main/java/net/minecraft/server/Explosion.java b/src/main/java/net/minecraft/server/Explosion.java
|
||||
index d6ac728..229b296 100644
|
||||
--- a/src/main/java/net/minecraft/server/Explosion.java
|
||||
+++ b/src/main/java/net/minecraft/server/Explosion.java
|
||||
@@ -239,6 +239,7 @@ public class Explosion {
|
||||
j = chunkposition.y;
|
||||
k = chunkposition.z;
|
||||
block = this.world.getType(i, j, k);
|
||||
+ world.spigotConfig.antiXrayInstance.updateNearbyBlocks(world, i, j, k); // Spigot
|
||||
if (flag) {
|
||||
double d0 = (double) ((float) i + this.world.random.nextFloat());
|
||||
double d1 = (double) ((float) j + this.world.random.nextFloat());
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
||||
index 09b34e9..3006712 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
||||
@@ -28,6 +28,7 @@ public class PacketPlayOutMapChunk extends Packet {
|
||||
|
||||
this.d = chunkmap.c;
|
||||
this.c = chunkmap.b;
|
||||
+ chunk.world.spigotConfig.antiXrayInstance.obfuscateSync(chunk.locX, chunk.locZ, i, chunkmap.a, chunk.world); // Spigot
|
||||
|
||||
try {
|
||||
this.buffer = chunkmap.a;
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java
|
||||
index bf3a139..30bf8a7 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java
|
||||
@@ -26,6 +26,7 @@ public class PacketPlayOutMapChunkBulk extends Packet {
|
||||
}
|
||||
};
|
||||
// CraftBukkit end
|
||||
+ private World world; // Spigot
|
||||
|
||||
public PacketPlayOutMapChunkBulk() {}
|
||||
|
||||
@@ -44,6 +45,9 @@ public class PacketPlayOutMapChunkBulk extends Packet {
|
||||
Chunk chunk = (Chunk) list.get(k);
|
||||
ChunkMap chunkmap = PacketPlayOutMapChunk.a(chunk, true, '\uffff');
|
||||
|
||||
+ // Spigot start
|
||||
+ world = chunk.world;
|
||||
+ /*
|
||||
if (buildBuffer.length < j + chunkmap.a.length) {
|
||||
byte[] abyte = new byte[j + chunkmap.a.length];
|
||||
|
||||
@@ -52,6 +56,8 @@ public class PacketPlayOutMapChunkBulk extends Packet {
|
||||
}
|
||||
|
||||
System.arraycopy(chunkmap.a, 0, buildBuffer, j, chunkmap.a.length);
|
||||
+ */
|
||||
+ // Spigot end
|
||||
j += chunkmap.a.length;
|
||||
this.a[k] = chunk.locX;
|
||||
this.b[k] = chunk.locZ;
|
||||
@@ -79,6 +85,22 @@ public class PacketPlayOutMapChunkBulk extends Packet {
|
||||
if (this.buffer != null) {
|
||||
return;
|
||||
}
|
||||
+ // Spigot start
|
||||
+ int finalBufferSize = 0;
|
||||
+ // Obfuscate all sections
|
||||
+ for (int i = 0; i < a.length; i++) {
|
||||
+ world.spigotConfig.antiXrayInstance.obfuscate(a[i], b[i], c[i], inflatedBuffers[i], world);
|
||||
+ finalBufferSize += inflatedBuffers[i].length;
|
||||
+ }
|
||||
+
|
||||
+ // Now it's time to efficiently copy the chunk to the build buffer
|
||||
+ buildBuffer = new byte[finalBufferSize];
|
||||
+ int bufferLocation = 0;
|
||||
+ for (int i = 0; i < a.length; i++) {
|
||||
+ System.arraycopy(inflatedBuffers[i], 0, buildBuffer, bufferLocation, inflatedBuffers[i].length);
|
||||
+ bufferLocation += inflatedBuffers[i].length;
|
||||
+ }
|
||||
+ // Spigot end
|
||||
|
||||
Deflater deflater = localDeflater.get();
|
||||
deflater.reset();
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerInteractManager.java b/src/main/java/net/minecraft/server/PlayerInteractManager.java
|
||||
index 2db45ad..97fe53c 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerInteractManager.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerInteractManager.java
|
||||
@@ -173,6 +173,7 @@ public class PlayerInteractManager {
|
||||
this.o = i1;
|
||||
}
|
||||
}
|
||||
+ world.spigotConfig.antiXrayInstance.updateNearbyBlocks(world, i, j, k); // Spigot
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index cbb4e77..106f27a 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -470,6 +470,7 @@ public abstract class World implements IBlockAccess {
|
||||
this.e(i, j + 1, k, block);
|
||||
this.e(i, j, k - 1, block);
|
||||
this.e(i, j, k + 1, block);
|
||||
+ spigotConfig.antiXrayInstance.updateNearbyBlocks(this, i, j, k); // Spigot
|
||||
}
|
||||
|
||||
public void b(int i, int j, int k, Block block, int l) {
|
||||
diff --git a/src/main/java/org/spigotmc/AntiXray.java b/src/main/java/org/spigotmc/AntiXray.java
|
||||
new file mode 100644
|
||||
index 0000000..8e69bff
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/org/spigotmc/AntiXray.java
|
||||
@@ -0,0 +1,212 @@
|
||||
+package org.spigotmc;
|
||||
+
|
||||
+import gnu.trove.set.TByteSet;
|
||||
+import gnu.trove.set.hash.TByteHashSet;
|
||||
+import net.minecraft.server.Block;
|
||||
+import net.minecraft.server.Blocks;
|
||||
+import net.minecraft.server.World;
|
||||
+
|
||||
+public class AntiXray
|
||||
+{
|
||||
+
|
||||
+ private static final CustomTimingsHandler update = new CustomTimingsHandler( "xray - update" );
|
||||
+ private static final CustomTimingsHandler obfuscate = new CustomTimingsHandler( "xray - obfuscate" );
|
||||
+ /*========================================================================*/
|
||||
+ // Used to keep track of which blocks to obfuscate
|
||||
+ private final boolean[] obfuscateBlocks = new boolean[ Short.MAX_VALUE ];
|
||||
+ // Used to select a random replacement ore
|
||||
+ private final byte[] replacementOres;
|
||||
+
|
||||
+ public AntiXray(SpigotWorldConfig config)
|
||||
+ {
|
||||
+ // Set all listed blocks as true to be obfuscated
|
||||
+ for ( int id : ( config.engineMode == 1 ) ? config.hiddenBlocks : config.replaceBlocks )
|
||||
+ {
|
||||
+ obfuscateBlocks[id] = true;
|
||||
+ }
|
||||
+
|
||||
+ // For every block
|
||||
+ TByteSet blocks = new TByteHashSet();
|
||||
+ for ( Integer i : config.hiddenBlocks )
|
||||
+ {
|
||||
+ Block block = Block.e( i );
|
||||
+ // Check it exists and is not a tile entity
|
||||
+ if ( block != null && !block.isTileEntity() )
|
||||
+ {
|
||||
+ // Add it to the set of replacement blocks
|
||||
+ blocks.add( (byte) (int) i );
|
||||
+ }
|
||||
+ }
|
||||
+ // Bake it to a flat array of replacements
|
||||
+ replacementOres = blocks.toArray();
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Starts the timings handler, then updates all blocks within the set radius
|
||||
+ * of the given coordinate, revealing them if they are hidden ores.
|
||||
+ */
|
||||
+ public void updateNearbyBlocks(World world, int x, int y, int z)
|
||||
+ {
|
||||
+ if ( world.spigotConfig.antiXray )
|
||||
+ {
|
||||
+ update.startTiming();
|
||||
+ updateNearbyBlocks( world, x, y, z, 2, false ); // 2 is the radius, we shouldn't change it as that would make it exponentially slower
|
||||
+ update.stopTiming();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Starts the timings handler, and then removes all non exposed ores from
|
||||
+ * the chunk buffer.
|
||||
+ */
|
||||
+ public void obfuscateSync(int chunkX, int chunkY, int bitmask, byte[] buffer, World world)
|
||||
+ {
|
||||
+ if ( world.spigotConfig.antiXray )
|
||||
+ {
|
||||
+ obfuscate.startTiming();
|
||||
+ obfuscate( chunkX, chunkY, bitmask, buffer, world );
|
||||
+ obfuscate.stopTiming();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Removes all non exposed ores from the chunk buffer.
|
||||
+ */
|
||||
+ public void obfuscate(int chunkX, int chunkY, int bitmask, byte[] buffer, World world)
|
||||
+ {
|
||||
+ // If the world is marked as obfuscated
|
||||
+ if ( world.spigotConfig.antiXray )
|
||||
+ {
|
||||
+ // Initial radius to search around for air
|
||||
+ int initialRadius = 1;
|
||||
+ // Which block in the buffer we are looking at, anywhere from 0 to 16^4
|
||||
+ int index = 0;
|
||||
+ // The iterator marking which random ore we should use next
|
||||
+ int randomOre = 0;
|
||||
+
|
||||
+ // Chunk corner X and Z blocks
|
||||
+ int startX = chunkX << 4;
|
||||
+ int startZ = chunkY << 4;
|
||||
+
|
||||
+ // Chunks can have up to 16 sections
|
||||
+ for ( int i = 0; i < 16; i++ )
|
||||
+ {
|
||||
+ // If the bitmask indicates this chunk is sent...
|
||||
+ if ( ( bitmask & 1 << i ) != 0 )
|
||||
+ {
|
||||
+ // Work through all blocks in the chunk, y,z,x
|
||||
+ for ( int y = 0; y < 16; y++ )
|
||||
+ {
|
||||
+ for ( int z = 0; z < 16; z++ )
|
||||
+ {
|
||||
+ for ( int x = 0; x < 16; x++ )
|
||||
+ {
|
||||
+ // For some reason we can get too far ahead of ourselves (concurrent modification on bulk chunks?) so if we do, just abort and move on
|
||||
+ if ( index >= buffer.length )
|
||||
+ {
|
||||
+ index++;
|
||||
+ continue;
|
||||
+ }
|
||||
+ // Grab the block ID in the buffer.
|
||||
+ // TODO: extended IDs are not yet supported
|
||||
+ int blockId = buffer[index] & 0xFF;
|
||||
+ // Check if the block should be obfuscated
|
||||
+ if ( obfuscateBlocks[blockId] )
|
||||
+ {
|
||||
+ // The world isn't loaded, bail out
|
||||
+ if ( !isLoaded( world, startX + x, ( i << 4 ) + y, startZ + z, initialRadius ) )
|
||||
+ {
|
||||
+ index++;
|
||||
+ continue;
|
||||
+ }
|
||||
+ // On the otherhand, if radius is 0, or the nearby blocks are all non air, we can obfuscate
|
||||
+ if ( !hasTransparentBlockAdjacent( world, startX + x, ( i << 4 ) + y, startZ + z, initialRadius ) )
|
||||
+ {
|
||||
+ switch ( world.spigotConfig.engineMode )
|
||||
+ {
|
||||
+ case 1:
|
||||
+ // Replace with stone
|
||||
+ buffer[index] = 1;
|
||||
+ break;
|
||||
+ case 2:
|
||||
+ // Replace with random ore.
|
||||
+ if ( randomOre >= replacementOres.length )
|
||||
+ {
|
||||
+ randomOre = 0;
|
||||
+ }
|
||||
+ buffer[index] = replacementOres[randomOre++];
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ index++;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ private void updateNearbyBlocks(World world, int x, int y, int z, int radius, boolean updateSelf)
|
||||
+ {
|
||||
+ // If the block in question is loaded
|
||||
+ if ( world.isLoaded( x, y, z ) )
|
||||
+ {
|
||||
+ // Get block id
|
||||
+ Block block = world.getType(x, y, z);
|
||||
+
|
||||
+ // See if it needs update
|
||||
+ if ( updateSelf && obfuscateBlocks[Block.b(block)] )
|
||||
+ {
|
||||
+ // Send the update
|
||||
+ world.notify( x, y, z );
|
||||
+ }
|
||||
+
|
||||
+ // Check other blocks for updates
|
||||
+ if ( radius > 0 )
|
||||
+ {
|
||||
+ updateNearbyBlocks( world, x + 1, y, z, radius - 1, true );
|
||||
+ updateNearbyBlocks( world, x - 1, y, z, radius - 1, true );
|
||||
+ updateNearbyBlocks( world, x, y + 1, z, radius - 1, true );
|
||||
+ updateNearbyBlocks( world, x, y - 1, z, radius - 1, true );
|
||||
+ updateNearbyBlocks( world, x, y, z + 1, radius - 1, true );
|
||||
+ updateNearbyBlocks( world, x, y, z - 1, radius - 1, true );
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ private static boolean isLoaded(World world, int x, int y, int z, int radius)
|
||||
+ {
|
||||
+ return world.isLoaded( x, y, z )
|
||||
+ && ( radius == 0 ||
|
||||
+ ( isLoaded( world, x + 1, y, z, radius - 1 )
|
||||
+ && isLoaded( world, x - 1, y, z, radius - 1 )
|
||||
+ && isLoaded( world, x, y + 1, z, radius - 1 )
|
||||
+ && isLoaded( world, x, y - 1, z, radius - 1 )
|
||||
+ && isLoaded( world, x, y, z + 1, radius - 1 )
|
||||
+ && isLoaded( world, x, y, z - 1, radius - 1 ) ) );
|
||||
+ }
|
||||
+
|
||||
+ private static boolean hasTransparentBlockAdjacent(World world, int x, int y, int z, int radius)
|
||||
+ {
|
||||
+ return !isSolidBlock(world.getType(x, y, z)) /* isSolidBlock */
|
||||
+ || ( radius > 0
|
||||
+ && ( hasTransparentBlockAdjacent( world, x + 1, y, z, radius - 1 )
|
||||
+ || hasTransparentBlockAdjacent( world, x - 1, y, z, radius - 1 )
|
||||
+ || hasTransparentBlockAdjacent( world, x, y + 1, z, radius - 1 )
|
||||
+ || hasTransparentBlockAdjacent( world, x, y - 1, z, radius - 1 )
|
||||
+ || hasTransparentBlockAdjacent( world, x, y, z + 1, radius - 1 )
|
||||
+ || hasTransparentBlockAdjacent( world, x, y, z - 1, radius - 1 ) ) );
|
||||
+ }
|
||||
+
|
||||
+ private static boolean isSolidBlock(Block block) {
|
||||
+ // Mob spawners are treated as solid blocks as far as the
|
||||
+ // game is concerned for lighting and other tasks but for
|
||||
+ // rendering they can be seen through therefor we special
|
||||
+ // case them so that the antixray doesn't show the fake
|
||||
+ // blocks around them.
|
||||
+ return block.r() && block != Blocks.MOB_SPAWNER;
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
index 2ec047c..2c0501d 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.spigotmc;
|
||||
|
||||
+import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
@@ -210,4 +211,36 @@ public class SpigotWorldConfig
|
||||
arrowDespawnRate = getInt( "arrow-despawn-rate", 1200 );
|
||||
log( "Arrow Despawn Rate: " + arrowDespawnRate );
|
||||
}
|
||||
+
|
||||
+ public boolean antiXray;
|
||||
+ public int engineMode;
|
||||
+ public List<Integer> hiddenBlocks;
|
||||
+ public List<Integer> replaceBlocks;
|
||||
+ public AntiXray antiXrayInstance;
|
||||
+ private void antiXray()
|
||||
+ {
|
||||
+ antiXray = getBoolean( "anti-xray.enabled", true );
|
||||
+ log( "Anti X-Ray: " + antiXray );
|
||||
+
|
||||
+ engineMode = getInt( "anti-xray.engine-mode", 1 );
|
||||
+ log( "\tEngine Mode: " + engineMode );
|
||||
+
|
||||
+ if ( SpigotConfig.version < 5 )
|
||||
+ {
|
||||
+ set( "anti-xray.blocks", null );
|
||||
+ }
|
||||
+ hiddenBlocks = getList( "anti-xray.hide-blocks", Arrays.asList( new Integer[]
|
||||
+ {
|
||||
+ 14, 15, 16, 21, 48, 49, 54, 56, 73, 74, 82, 129, 130
|
||||
+ } ) );
|
||||
+ log( "\tHidden Blocks: " + hiddenBlocks );
|
||||
+
|
||||
+ replaceBlocks = getList( "anti-xray.replace-blocks", Arrays.asList( new Integer[]
|
||||
+ {
|
||||
+ 1, 5
|
||||
+ } ) );
|
||||
+ log( "\tReplace Blocks: " + replaceBlocks );
|
||||
+
|
||||
+ antiXrayInstance = new AntiXray( this );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,134 +0,0 @@
|
||||
From 59714a94a25306d1f88a85331f32a64d1875302d Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Fri, 13 Dec 2013 11:45:47 +1100
|
||||
Subject: [PATCH] Optimize DataWatcher
|
||||
|
||||
Use primitive orientated collections, as well as more effective copies across collections.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/DataWatcher.java b/src/main/java/net/minecraft/server/DataWatcher.java
|
||||
index 90a2a80..cca6bd9 100644
|
||||
--- a/src/main/java/net/minecraft/server/DataWatcher.java
|
||||
+++ b/src/main/java/net/minecraft/server/DataWatcher.java
|
||||
@@ -14,8 +14,13 @@ public class DataWatcher {
|
||||
|
||||
private final Entity a;
|
||||
private boolean b = true;
|
||||
- private static final HashMap c = new HashMap();
|
||||
- private final Map d = new HashMap();
|
||||
+ // Spigot Start
|
||||
+ private static final gnu.trove.map.TObjectIntMap classToId = new gnu.trove.map.hash.TObjectIntHashMap( 10, 0.5f, -1 );
|
||||
+ private final gnu.trove.map.TIntObjectMap dataValues = new gnu.trove.map.hash.TIntObjectHashMap( 10, 0.5f, -1 );
|
||||
+ // These exist as an attempt at backwards compatability for (broken) NMS plugins
|
||||
+ private static final Map c = gnu.trove.TDecorators.wrap( classToId );
|
||||
+ private final Map d = gnu.trove.TDecorators.wrap( dataValues );
|
||||
+ // Spigot End
|
||||
private boolean e;
|
||||
private ReadWriteLock f = new ReentrantReadWriteLock();
|
||||
|
||||
@@ -24,19 +29,19 @@ public class DataWatcher {
|
||||
}
|
||||
|
||||
public void a(int i, Object object) {
|
||||
- Integer integer = (Integer) c.get(object.getClass());
|
||||
+ int integer = classToId.get(object.getClass()); // Spigot
|
||||
|
||||
- if (integer == null) {
|
||||
+ if (integer == -1) { // Spigot
|
||||
throw new IllegalArgumentException("Unknown data type: " + object.getClass());
|
||||
} else if (i > 31) {
|
||||
throw new IllegalArgumentException("Data value id is too big with " + i + "! (Max is " + 31 + ")");
|
||||
- } else if (this.d.containsKey(Integer.valueOf(i))) {
|
||||
+ } else if (this.dataValues.containsKey(i)) { // Spigot
|
||||
throw new IllegalArgumentException("Duplicate id value for " + i + "!");
|
||||
} else {
|
||||
- WatchableObject watchableobject = new WatchableObject(integer.intValue(), i, object);
|
||||
+ WatchableObject watchableobject = new WatchableObject(integer, i, object); // Spigot
|
||||
|
||||
this.f.writeLock().lock();
|
||||
- this.d.put(Integer.valueOf(i), watchableobject);
|
||||
+ this.dataValues.put(i, watchableobject); // Spigot
|
||||
this.f.writeLock().unlock();
|
||||
this.b = false;
|
||||
}
|
||||
@@ -46,7 +51,7 @@ public class DataWatcher {
|
||||
WatchableObject watchableobject = new WatchableObject(j, i, null);
|
||||
|
||||
this.f.writeLock().lock();
|
||||
- this.d.put(Integer.valueOf(i), watchableobject);
|
||||
+ this.dataValues.put(i, watchableobject); // Spigot
|
||||
this.f.writeLock().unlock();
|
||||
this.b = false;
|
||||
}
|
||||
@@ -81,7 +86,7 @@ public class DataWatcher {
|
||||
WatchableObject watchableobject;
|
||||
|
||||
try {
|
||||
- watchableobject = (WatchableObject) this.d.get(Integer.valueOf(i));
|
||||
+ watchableobject = (WatchableObject) this.dataValues.get(i); // Spigot
|
||||
} catch (Throwable throwable) {
|
||||
CrashReport crashreport = CrashReport.a(throwable, "Getting synched entity data");
|
||||
CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Synched entity data");
|
||||
@@ -133,7 +138,7 @@ public class DataWatcher {
|
||||
|
||||
if (this.e) {
|
||||
this.f.readLock().lock();
|
||||
- Iterator iterator = this.d.values().iterator();
|
||||
+ Iterator iterator = this.dataValues.valueCollection().iterator(); // Spigot
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
WatchableObject watchableobject = (WatchableObject) iterator.next();
|
||||
@@ -157,7 +162,7 @@ public class DataWatcher {
|
||||
|
||||
public void a(PacketDataSerializer packetdataserializer) {
|
||||
this.f.readLock().lock();
|
||||
- Iterator iterator = this.d.values().iterator();
|
||||
+ Iterator iterator = this.dataValues.valueCollection().iterator(); // Spigot
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
WatchableObject watchableobject = (WatchableObject) iterator.next();
|
||||
@@ -170,18 +175,11 @@ public class DataWatcher {
|
||||
}
|
||||
|
||||
public List c() {
|
||||
- ArrayList arraylist = null;
|
||||
+ ArrayList arraylist = new ArrayList(); // Spigot
|
||||
|
||||
this.f.readLock().lock();
|
||||
|
||||
- WatchableObject watchableobject;
|
||||
-
|
||||
- for (Iterator iterator = this.d.values().iterator(); iterator.hasNext(); arraylist.add(watchableobject)) {
|
||||
- watchableobject = (WatchableObject) iterator.next();
|
||||
- if (arraylist == null) {
|
||||
- arraylist = new ArrayList();
|
||||
- }
|
||||
- }
|
||||
+ arraylist.addAll(this.dataValues.valueCollection()); // Spigot
|
||||
|
||||
this.f.readLock().unlock();
|
||||
return arraylist;
|
||||
@@ -295,12 +293,14 @@ public class DataWatcher {
|
||||
}
|
||||
|
||||
static {
|
||||
- c.put(Byte.class, Integer.valueOf(0));
|
||||
- c.put(Short.class, Integer.valueOf(1));
|
||||
- c.put(Integer.class, Integer.valueOf(2));
|
||||
- c.put(Float.class, Integer.valueOf(3));
|
||||
- c.put(String.class, Integer.valueOf(4));
|
||||
- c.put(ItemStack.class, Integer.valueOf(5));
|
||||
- c.put(ChunkCoordinates.class, Integer.valueOf(6));
|
||||
+ // Spigot Start - remove valueOf
|
||||
+ classToId.put(Byte.class, 0);
|
||||
+ classToId.put(Short.class, 1);
|
||||
+ classToId.put(Integer.class, 2);
|
||||
+ classToId.put(Float.class, 3);
|
||||
+ classToId.put(String.class, 4);
|
||||
+ classToId.put(ItemStack.class, 5);
|
||||
+ classToId.put(ChunkCoordinates.class, 6);
|
||||
+ // Spigot End
|
||||
}
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,160 +0,0 @@
|
||||
From 731f42f442109e046706fe7c92d9e71359eadc99 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Wed, 18 Dec 2013 13:32:10 +1100
|
||||
Subject: [PATCH] Fire PreLogin Events in Offline Mode
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/LoginListener.java b/src/main/java/net/minecraft/server/LoginListener.java
|
||||
index dddd9aa..0d82e7d 100644
|
||||
--- a/src/main/java/net/minecraft/server/LoginListener.java
|
||||
+++ b/src/main/java/net/minecraft/server/LoginListener.java
|
||||
@@ -59,12 +59,25 @@ public class LoginListener implements PacketLoginInListener {
|
||||
}
|
||||
}
|
||||
|
||||
+ // Spigot start
|
||||
+ public void initUUID()
|
||||
+ {
|
||||
+ String uuid = UUID.nameUUIDFromBytes( ( "OfflinePlayer:" + this.i.getName() ).getBytes( Charsets.UTF_8 ) ).toString().replaceAll( "-", "" );
|
||||
+
|
||||
+ this.i = new GameProfile( uuid, this.i.getName() );
|
||||
+ }
|
||||
+ // Spigot end
|
||||
+
|
||||
public void c() {
|
||||
+ // Spigot start - Moved to initUUID
|
||||
+ /*
|
||||
if (!this.i.isComplete()) {
|
||||
UUID uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" + this.i.getName()).getBytes(Charsets.UTF_8));
|
||||
|
||||
this.i = new GameProfile(uuid.toString().replaceAll("-", ""), this.i.getName());
|
||||
}
|
||||
+ */
|
||||
+ // Spigot end
|
||||
|
||||
// CraftBukkit start - fire PlayerLoginEvent
|
||||
EntityPlayer s = this.server.getPlayerList().attemptLogin(this, this.i, this.hostname);
|
||||
@@ -99,7 +112,7 @@ public class LoginListener implements PacketLoginInListener {
|
||||
this.g = EnumProtocolState.KEY;
|
||||
this.networkManager.handle(new PacketLoginOutEncryptionBegin(this.j, this.server.J().getPublic(), this.e), new GenericFutureListener[0]);
|
||||
} else {
|
||||
- this.g = EnumProtocolState.READY_TO_ACCEPT;
|
||||
+ (new ThreadPlayerLookupUUID(this, "User Authenticator #" + b.incrementAndGet())).start(); // Spigot
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ThreadPlayerLookupUUID.java b/src/main/java/net/minecraft/server/ThreadPlayerLookupUUID.java
|
||||
index 496b7c9..fe4502a 100644
|
||||
--- a/src/main/java/net/minecraft/server/ThreadPlayerLookupUUID.java
|
||||
+++ b/src/main/java/net/minecraft/server/ThreadPlayerLookupUUID.java
|
||||
@@ -22,48 +22,22 @@ class ThreadPlayerLookupUUID extends Thread {
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
+ // Spigot Start
|
||||
+ if ( !LoginListener.b( this.a ).getOnlineMode() )
|
||||
+ {
|
||||
+ a.initUUID();
|
||||
+ fireLoginEvents();
|
||||
+ LoginListener.e().info( "UUID of player " + LoginListener.d( this.a ).getName() + " is " + LoginListener.d( this.a ).getId() );
|
||||
+ LoginListener.a( this.a, EnumProtocolState.READY_TO_ACCEPT );
|
||||
+ return;
|
||||
+ }
|
||||
+ // Spigot End
|
||||
String s = (new BigInteger(MinecraftEncryption.a(LoginListener.a(this.a), LoginListener.b(this.a).J().getPublic(), LoginListener.c(this.a)))).toString(16);
|
||||
-
|
||||
LoginListener.a(this.a, LoginListener.b(this.a).at().hasJoinedServer(new GameProfile((String) null, LoginListener.d(this.a).getName()), s));
|
||||
if (LoginListener.d(this.a) != null) {
|
||||
- // CraftBukkit start - fire PlayerPreLoginEvent
|
||||
- if (!this.a.networkManager.isConnected()) {
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- String playerName = LoginListener.d(this.a).getName();
|
||||
- java.net.InetAddress address = ((java.net.InetSocketAddress) a.networkManager.getSocketAddress()).getAddress();
|
||||
- java.util.UUID uniqueId = UtilUUID.b(LoginListener.d(this.a).getId());
|
||||
- final org.bukkit.craftbukkit.CraftServer server = LoginListener.b(this.a).server;
|
||||
-
|
||||
- AsyncPlayerPreLoginEvent asyncEvent = new AsyncPlayerPreLoginEvent(playerName, address, uniqueId);
|
||||
- server.getPluginManager().callEvent(asyncEvent);
|
||||
-
|
||||
- if (PlayerPreLoginEvent.getHandlerList().getRegisteredListeners().length != 0) {
|
||||
- final PlayerPreLoginEvent event = new PlayerPreLoginEvent(playerName, address, uniqueId);
|
||||
- if (asyncEvent.getResult() != PlayerPreLoginEvent.Result.ALLOWED) {
|
||||
- event.disallow(asyncEvent.getResult(), asyncEvent.getKickMessage());
|
||||
- }
|
||||
- Waitable<PlayerPreLoginEvent.Result> waitable = new Waitable<PlayerPreLoginEvent.Result>() {
|
||||
- @Override
|
||||
- protected PlayerPreLoginEvent.Result evaluate() {
|
||||
- server.getPluginManager().callEvent(event);
|
||||
- return event.getResult();
|
||||
- }};
|
||||
-
|
||||
- LoginListener.b(this.a).processQueue.add(waitable);
|
||||
- if (waitable.get() != PlayerPreLoginEvent.Result.ALLOWED) {
|
||||
- this.a.disconnect(event.getKickMessage());
|
||||
- return;
|
||||
- }
|
||||
- } else {
|
||||
- if (asyncEvent.getLoginResult() != AsyncPlayerPreLoginEvent.Result.ALLOWED) {
|
||||
- this.a.disconnect(asyncEvent.getKickMessage());
|
||||
- return;
|
||||
- }
|
||||
- }
|
||||
- // CraftBukkit end
|
||||
-
|
||||
+ // Spigot Start
|
||||
+ fireLoginEvents();
|
||||
+ // Spigot End
|
||||
LoginListener.e().info("UUID of player " + LoginListener.d(this.a).getName() + " is " + LoginListener.d(this.a).getId());
|
||||
LoginListener.a(this.a, EnumProtocolState.READY_TO_ACCEPT);
|
||||
} else {
|
||||
@@ -80,4 +54,45 @@ class ThreadPlayerLookupUUID extends Thread {
|
||||
// CraftBukkit end
|
||||
}
|
||||
}
|
||||
+
|
||||
+ private void fireLoginEvents() throws Exception
|
||||
+ {
|
||||
+ // CraftBukkit start - fire PlayerPreLoginEvent
|
||||
+ if (!this.a.networkManager.isConnected()) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ String playerName = LoginListener.d(this.a).getName();
|
||||
+ java.net.InetAddress address = ((java.net.InetSocketAddress) a.networkManager.getSocketAddress()).getAddress();
|
||||
+ java.util.UUID uniqueId = UtilUUID.b(LoginListener.d(this.a).getId());
|
||||
+ final org.bukkit.craftbukkit.CraftServer server = LoginListener.b(this.a).server;
|
||||
+
|
||||
+ AsyncPlayerPreLoginEvent asyncEvent = new AsyncPlayerPreLoginEvent(playerName, address, uniqueId);
|
||||
+ server.getPluginManager().callEvent(asyncEvent);
|
||||
+
|
||||
+ if (PlayerPreLoginEvent.getHandlerList().getRegisteredListeners().length != 0) {
|
||||
+ final PlayerPreLoginEvent event = new PlayerPreLoginEvent(playerName, address, uniqueId);
|
||||
+ if (asyncEvent.getResult() != PlayerPreLoginEvent.Result.ALLOWED) {
|
||||
+ event.disallow(asyncEvent.getResult(), asyncEvent.getKickMessage());
|
||||
+ }
|
||||
+ Waitable<PlayerPreLoginEvent.Result> waitable = new Waitable<PlayerPreLoginEvent.Result>() {
|
||||
+ @Override
|
||||
+ protected PlayerPreLoginEvent.Result evaluate() {
|
||||
+ server.getPluginManager().callEvent(event);
|
||||
+ return event.getResult();
|
||||
+ }};
|
||||
+
|
||||
+ LoginListener.b(this.a).processQueue.add(waitable);
|
||||
+ if (waitable.get() != PlayerPreLoginEvent.Result.ALLOWED) {
|
||||
+ this.a.disconnect(event.getKickMessage());
|
||||
+ return;
|
||||
+ }
|
||||
+ } else {
|
||||
+ if (asyncEvent.getLoginResult() != AsyncPlayerPreLoginEvent.Result.ALLOWED) {
|
||||
+ this.a.disconnect(asyncEvent.getKickMessage());
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+ // CraftBukkit end
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,133 +0,0 @@
|
||||
From c879accb1fd1f44194ec7161f5d212cc67455327 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Sun, 1 Dec 2013 18:18:41 +1100
|
||||
Subject: [PATCH] BungeeCord Support
|
||||
|
||||
Provides support for IP forwarding via BungeeCord.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/HandshakeListener.java b/src/main/java/net/minecraft/server/HandshakeListener.java
|
||||
index b80a760..42539b4 100644
|
||||
--- a/src/main/java/net/minecraft/server/HandshakeListener.java
|
||||
+++ b/src/main/java/net/minecraft/server/HandshakeListener.java
|
||||
@@ -73,6 +73,22 @@ public class HandshakeListener implements PacketHandshakingInListener {
|
||||
this.b.close(chatcomponenttext);
|
||||
} else {
|
||||
this.b.a((PacketListener) (new LoginListener(this.a, this.b)));
|
||||
+ // Spigot Start
|
||||
+ if (org.spigotmc.SpigotConfig.bungee) {
|
||||
+ String[] split = packethandshakinginsetprotocol.b.split("\00");
|
||||
+ if ( split.length == 3 ) {
|
||||
+ packethandshakinginsetprotocol.b = split[0];
|
||||
+ b.n = new java.net.InetSocketAddress(split[1], ((java.net.InetSocketAddress) b.getSocketAddress()).getPort());
|
||||
+ b.spoofedUUID = split[2];
|
||||
+ } else
|
||||
+ {
|
||||
+ chatcomponenttext = new ChatComponentText("If you wish to use IP forwarding, please enable it in your BungeeCord config as well!");
|
||||
+ this.b.handle(new PacketLoginOutDisconnect(chatcomponenttext), new GenericFutureListener[0]);
|
||||
+ this.b.close(chatcomponenttext);
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+ // Spigot End
|
||||
((LoginListener) this.b.getPacketListener()).hostname = packethandshakinginsetprotocol.b + ":" + packethandshakinginsetprotocol.c; // CraftBukkit - set hostname
|
||||
}
|
||||
break;
|
||||
diff --git a/src/main/java/net/minecraft/server/LoginListener.java b/src/main/java/net/minecraft/server/LoginListener.java
|
||||
index 0d82e7d..07c1d4b 100644
|
||||
--- a/src/main/java/net/minecraft/server/LoginListener.java
|
||||
+++ b/src/main/java/net/minecraft/server/LoginListener.java
|
||||
@@ -62,8 +62,14 @@ public class LoginListener implements PacketLoginInListener {
|
||||
// Spigot start
|
||||
public void initUUID()
|
||||
{
|
||||
- String uuid = UUID.nameUUIDFromBytes( ( "OfflinePlayer:" + this.i.getName() ).getBytes( Charsets.UTF_8 ) ).toString().replaceAll( "-", "" );
|
||||
-
|
||||
+ String uuid;
|
||||
+ if ( networkManager.spoofedUUID != null )
|
||||
+ {
|
||||
+ uuid = networkManager.spoofedUUID;
|
||||
+ } else
|
||||
+ {
|
||||
+ uuid = UUID.nameUUIDFromBytes( ( "OfflinePlayer:" + this.i.getName() ).getBytes( Charsets.UTF_8 ) ).toString().replaceAll("-", "");
|
||||
+ }
|
||||
this.i = new GameProfile( uuid, this.i.getName() );
|
||||
}
|
||||
// Spigot end
|
||||
diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
|
||||
index 9ff1694..f6cca80 100644
|
||||
--- a/src/main/java/net/minecraft/server/NetworkManager.java
|
||||
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
|
||||
@@ -36,7 +36,8 @@ public class NetworkManager extends SimpleChannelInboundHandler {
|
||||
private final Queue k = Queues.newConcurrentLinkedQueue();
|
||||
private final Queue l = Queues.newConcurrentLinkedQueue();
|
||||
private Channel m;
|
||||
- private SocketAddress n;
|
||||
+ public SocketAddress n; // Spigot
|
||||
+ public String spoofedUUID; // Spigot
|
||||
private PacketListener o;
|
||||
private EnumProtocol p;
|
||||
private IChatBaseComponent q;
|
||||
@@ -196,4 +197,11 @@ public class NetworkManager extends SimpleChannelInboundHandler {
|
||||
static Channel a(NetworkManager networkmanager) {
|
||||
return networkmanager.m;
|
||||
}
|
||||
+
|
||||
+ // Spigot Start
|
||||
+ public SocketAddress getRawAddress()
|
||||
+ {
|
||||
+ return this.m.remoteAddress();
|
||||
+ }
|
||||
+ // Spigot End
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
|
||||
index 385dc0a..0d6ffef 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerList.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerList.java
|
||||
@@ -325,7 +325,7 @@ public abstract class PlayerList {
|
||||
|
||||
EntityPlayer entity = new EntityPlayer(this.server, this.server.getWorldServer(0), gameprofile, new PlayerInteractManager(this.server.getWorldServer(0)));
|
||||
Player player = entity.getBukkitEntity();
|
||||
- PlayerLoginEvent event = new PlayerLoginEvent(player, hostname, ((java.net.InetSocketAddress) socketaddress).getAddress());
|
||||
+ PlayerLoginEvent event = new PlayerLoginEvent(player, hostname, ((java.net.InetSocketAddress) socketaddress).getAddress(), ((java.net.InetSocketAddress) loginlistener.networkManager.getRawAddress()).getAddress());
|
||||
|
||||
if (this.banByName.isBanned(gameprofile.getName())) {
|
||||
BanEntry banentry = (BanEntry) this.banByName.getEntries().get(gameprofile.getName());
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index b14098a..76e5643 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -1289,6 +1289,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
{
|
||||
|
||||
@Override
|
||||
+ public InetSocketAddress getRawAddress()
|
||||
+ {
|
||||
+ return (InetSocketAddress) getHandle().playerConnection.networkManager.getRawAddress();
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
public boolean getCollidesWithEntities()
|
||||
{
|
||||
return getHandle().collidesWithEntities;
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index 2b499fe..8bfffa5 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -192,4 +192,14 @@ public class SpigotConfig
|
||||
commands.put( "restart", new RestartCommand( "restart" ) );
|
||||
WatchdogThread.doStart( timeoutTime, restartOnCrash );
|
||||
}
|
||||
+
|
||||
+ public static boolean bungee;
|
||||
+ private static void bungee() {
|
||||
+ if ( version < 4 )
|
||||
+ {
|
||||
+ set( "settings.bungeecord", false );
|
||||
+ System.out.println( "Oudated config, disabling BungeeCord support!" );
|
||||
+ }
|
||||
+ bungee = getBoolean( "settings.bungeecord", false );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,48 +0,0 @@
|
||||
From e23d0235ac494adf917bb40cc56e7fda781bdf1c Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Xaldin <Puremin0rez515@gmail.com>
|
||||
Date: Thu, 12 Dec 2013 18:05:03 -0600
|
||||
Subject: [PATCH] Allow Disabling Zombie Villager Aggression
|
||||
|
||||
Ability to configure if Zombies will be aggressive towards Villagers.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java
|
||||
index b751d01..902ecdf 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityZombie.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityZombie.java
|
||||
@@ -28,7 +28,7 @@ public class EntityZombie extends EntityMonster {
|
||||
this.getNavigation().b(true);
|
||||
this.goalSelector.a(0, new PathfinderGoalFloat(this));
|
||||
this.goalSelector.a(2, new PathfinderGoalMeleeAttack(this, EntityHuman.class, 1.0D, false));
|
||||
- this.goalSelector.a(4, new PathfinderGoalMeleeAttack(this, EntityVillager.class, 1.0D, true));
|
||||
+ if ( world.spigotConfig.zombieAggressiveTowardsVillager ) { this.goalSelector.a(4, new PathfinderGoalMeleeAttack(this, EntityVillager.class, 1.0D, true)); } // Spigot
|
||||
this.goalSelector.a(5, new PathfinderGoalMoveTowardsRestriction(this, 1.0D));
|
||||
this.goalSelector.a(6, new PathfinderGoalMoveThroughVillage(this, 1.0D, false));
|
||||
this.goalSelector.a(7, new PathfinderGoalRandomStroll(this, 1.0D));
|
||||
@@ -36,7 +36,7 @@ public class EntityZombie extends EntityMonster {
|
||||
this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this));
|
||||
this.targetSelector.a(1, new PathfinderGoalHurtByTarget(this, true));
|
||||
this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget(this, EntityHuman.class, 0, true));
|
||||
- this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget(this, EntityVillager.class, 0, false));
|
||||
+ if ( world.spigotConfig.zombieAggressiveTowardsVillager ) { this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget(this, EntityVillager.class, 0, false)); } // Spigot
|
||||
this.a(0.6F, 1.8F);
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
index 2c0501d..042280d 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
@@ -243,4 +243,11 @@ public class SpigotWorldConfig
|
||||
|
||||
antiXrayInstance = new AntiXray( this );
|
||||
}
|
||||
+
|
||||
+ public boolean zombieAggressiveTowardsVillager;
|
||||
+ private void zombieAggressiveTowardsVillager()
|
||||
+ {
|
||||
+ zombieAggressiveTowardsVillager = getBoolean( "zombie-aggressive-towards-villager", true );
|
||||
+ log( "Zombie Aggressive Towards Villager: " + zombieAggressiveTowardsVillager );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,57 +0,0 @@
|
||||
From fb40c05e1cf4f7b22e803545d37b8ed56547ffdb Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Fri, 13 Dec 2013 11:58:58 +1100
|
||||
Subject: [PATCH] Configurable Amount of Netty Threads
|
||||
|
||||
This brings back the option that the Spigot version of netty saw. By default Netty will try and use cores*2 threads, however if running multiple servers on the same machine, this can be too many threads. Additionally some people have 16 core servers. If 32 Netty threads are allowed in this setup, then the lock contention, and thus blocking between threads becomes much greater, leading to decreased performance.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 2407ab2..41a690b 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -52,7 +52,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
private final List m = new ArrayList();
|
||||
private final ICommandHandler n;
|
||||
public final MethodProfiler methodProfiler = new MethodProfiler();
|
||||
- private final ServerConnection o;
|
||||
+ private ServerConnection o; // Spigot
|
||||
private final ServerPing p = new ServerPing();
|
||||
private final Random q = new Random();
|
||||
private String serverIp;
|
||||
@@ -107,7 +107,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
i = this;
|
||||
this.c = proxy;
|
||||
// this.universe = file1; // CraftBukkit
|
||||
- this.o = new ServerConnection(this);
|
||||
+ // this.o = new ServerConnection(this); // Spigot
|
||||
this.n = new CommandDispatcher();
|
||||
// this.convertable = new WorldLoaderServer(file1); // CraftBukkit - moved to DedicatedServer.init
|
||||
this.S = (new YggdrasilAuthenticationService(proxy, UUID.randomUUID().toString())).createMinecraftSessionService();
|
||||
@@ -1230,7 +1230,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
}
|
||||
|
||||
public ServerConnection ah() {
|
||||
- return this.o;
|
||||
+ return ( this.o ) == null ? this.o = new ServerConnection( this ) : this.o; // Spigot
|
||||
}
|
||||
|
||||
public boolean aj() {
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index 8bfffa5..b3278fd 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -202,4 +202,11 @@ public class SpigotConfig
|
||||
}
|
||||
bungee = getBoolean( "settings.bungeecord", false );
|
||||
}
|
||||
+
|
||||
+ private static void nettyThreads()
|
||||
+ {
|
||||
+ int count = getInt( "settings.netty-threads", 4 );
|
||||
+ System.setProperty( "io.netty.eventLoopThreads", Integer.toString( count ) );
|
||||
+ Bukkit.getLogger().log( Level.INFO, "Using {0} threads for Netty based IO", count );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,22 +0,0 @@
|
||||
From 73eb7c52c528f150fe3c3c601c2ec53b4cf1e10b Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Fri, 13 Dec 2013 15:21:02 +1100
|
||||
Subject: [PATCH] Prevent Mineshaft Saving
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/StructureGenerator.java b/src/main/java/net/minecraft/server/StructureGenerator.java
|
||||
index 4d336d8..f835b01 100644
|
||||
--- a/src/main/java/net/minecraft/server/StructureGenerator.java
|
||||
+++ b/src/main/java/net/minecraft/server/StructureGenerator.java
|
||||
@@ -179,7 +179,7 @@ public abstract class StructureGenerator extends WorldGenBase {
|
||||
private void a(World world) {
|
||||
if (this.e == null) {
|
||||
// Spigot Start
|
||||
- if ( world.spigotConfig.saveStructureInfo )
|
||||
+ if ( world.spigotConfig.saveStructureInfo && !this.a().equals( "Mineshaft" ) )
|
||||
{
|
||||
this.e = (PersistentStructure) world.a(PersistentStructure.class, this.a());
|
||||
} else
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,26 +0,0 @@
|
||||
From e637ee8322d20cde14d424d1440bfbc17bde7ef8 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Wed, 18 Dec 2013 13:39:14 +1100
|
||||
Subject: [PATCH] Log Cause of Unexpected Exceptions
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 41a690b..9970208 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -469,6 +469,12 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
}
|
||||
} catch (Throwable throwable) {
|
||||
h.error("Encountered an unexpected exception", throwable);
|
||||
+ // Spigot Start
|
||||
+ if ( throwable.getCause() != null )
|
||||
+ {
|
||||
+ h.error( "\tCause of unexpected exception was", throwable.getCause() );
|
||||
+ }
|
||||
+ // Spigot End
|
||||
CrashReport crashreport = null;
|
||||
|
||||
if (throwable instanceof ReportedException) {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,175 +0,0 @@
|
||||
From e93da90956c9591f95ba7d685090290aef18e6d2 Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Fri, 20 Dec 2013 21:36:06 +0000
|
||||
Subject: [PATCH] Particle API
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftEffect.java b/src/main/java/org/bukkit/craftbukkit/CraftEffect.java
|
||||
index 7de0de5..7eca388 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftEffect.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftEffect.java
|
||||
@@ -55,6 +55,8 @@ public class CraftEffect {
|
||||
Validate.isTrue(((Material) data).isBlock(), "Material is not a block!");
|
||||
datavalue = ((Material) data).getId();
|
||||
break;
|
||||
+ case ITEM_BREAK:
|
||||
+ datavalue = ((Material) data).getId();
|
||||
default:
|
||||
datavalue = 0;
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index bfa8c23..827ec16 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -779,28 +779,18 @@ public class CraftWorld implements World {
|
||||
Validate.isTrue(effect.getData() == null, "Wrong kind of data for this effect!");
|
||||
}
|
||||
|
||||
- int datavalue = data == null ? 0 : CraftEffect.getDataValue(effect, data);
|
||||
- playEffect(loc, effect, datavalue, radius);
|
||||
+ if (data != null && data.getClass().equals( org.bukkit.material.MaterialData.class )) {
|
||||
+ org.bukkit.material.MaterialData materialData = (org.bukkit.material.MaterialData) data;
|
||||
+ Validate.isTrue( materialData.getItemType().isBlock(), "Material must be block" );
|
||||
+ spigot().playEffect( loc, effect, materialData.getItemType().getId(), materialData.getData(), 0, 0, 0, 1, 1, radius );
|
||||
+ } else {
|
||||
+ int dataValue = data == null ? 0 : CraftEffect.getDataValue( effect, data );
|
||||
+ playEffect( loc, effect, dataValue, radius );
|
||||
+ }
|
||||
}
|
||||
|
||||
public void playEffect(Location location, Effect effect, int data, int radius) {
|
||||
- Validate.notNull(location, "Location cannot be null");
|
||||
- Validate.notNull(effect, "Effect cannot be null");
|
||||
- Validate.notNull(location.getWorld(), "World cannot be null");
|
||||
- int packetData = effect.getId();
|
||||
- PacketPlayOutWorldEvent packet = new PacketPlayOutWorldEvent(packetData, location.getBlockX(), location.getBlockY(), location.getBlockZ(), data, false);
|
||||
- int distance;
|
||||
- radius *= radius;
|
||||
-
|
||||
- for (Player player : getPlayers()) {
|
||||
- if (((CraftPlayer) player).getHandle().playerConnection == null) continue;
|
||||
- if (!location.getWorld().equals(player.getWorld())) continue;
|
||||
-
|
||||
- distance = (int) player.getLocation().distanceSquared(location);
|
||||
- if (distance <= radius) {
|
||||
- ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
|
||||
- }
|
||||
- }
|
||||
+ spigot().playEffect( location, effect, data, 0, 0, 0, 0, 1, 1, radius );
|
||||
}
|
||||
|
||||
public <T extends Entity> T spawn(Location location, Class<T> clazz) throws IllegalArgumentException {
|
||||
@@ -1286,6 +1276,56 @@ public class CraftWorld implements World {
|
||||
// Spigot start
|
||||
private final Spigot spigot = new Spigot()
|
||||
{
|
||||
+ @Override
|
||||
+ public void playEffect( Location location, Effect effect, int id, int data, float offsetX, float offsetY, float offsetZ, float speed, int particleCount, int radius )
|
||||
+ {
|
||||
+ Validate.notNull( location, "Location cannot be null" );
|
||||
+ Validate.notNull( effect, "Effect cannot be null" );
|
||||
+ Validate.notNull( location.getWorld(), "World cannot be null" );
|
||||
+ Packet packet;
|
||||
+ if ( effect.getType() != Effect.Type.PARTICLE )
|
||||
+ {
|
||||
+ int packetData = effect.getId();
|
||||
+ packet = new PacketPlayOutWorldEvent( packetData, location.getBlockX(), location.getBlockY(), location.getBlockZ(), id, false );
|
||||
+ } else
|
||||
+ {
|
||||
+ StringBuilder particleFullName = new StringBuilder();
|
||||
+ particleFullName.append( effect.getName() );
|
||||
+ if ( effect.getData() != null && ( effect.getData().equals( Material.class ) || effect.getData().equals( org.bukkit.material.MaterialData.class ) ) )
|
||||
+ {
|
||||
+ particleFullName.append( '_' ).append( id );
|
||||
+ }
|
||||
+ if ( effect.getData() != null && effect.getData().equals( org.bukkit.material.MaterialData.class ) )
|
||||
+ {
|
||||
+ particleFullName.append( '_' ).append( data );
|
||||
+ }
|
||||
+ packet = new PacketPlayOutWorldParticles( particleFullName.toString(), (float) location.getX(), (float) location.getY(), (float) location.getZ(), offsetX, offsetY, offsetZ, speed, particleCount );
|
||||
+ }
|
||||
+ int distance;
|
||||
+ radius *= radius;
|
||||
+ for ( Player player : getPlayers() )
|
||||
+ {
|
||||
+ if ( ( (CraftPlayer) player ).getHandle().playerConnection == null )
|
||||
+ {
|
||||
+ continue;
|
||||
+ }
|
||||
+ if ( !location.getWorld().equals( player.getWorld() ) )
|
||||
+ {
|
||||
+ continue;
|
||||
+ }
|
||||
+ distance = (int) player.getLocation().distanceSquared( location );
|
||||
+ if ( distance <= radius )
|
||||
+ {
|
||||
+ ( (CraftPlayer) player ).getHandle().playerConnection.sendPacket( packet );
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void playEffect( Location location, Effect effect )
|
||||
+ {
|
||||
+ CraftWorld.this.playEffect( location, effect, 0 );
|
||||
+ }
|
||||
};
|
||||
|
||||
public Spigot spigot()
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 76e5643..49fcfba 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -1315,6 +1315,49 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
server.getServer().getPlayerList().moveToWorld( getHandle(), 0, false );
|
||||
}
|
||||
}
|
||||
+
|
||||
+ @Override
|
||||
+ public void playEffect( Location location, Effect effect, int id, int data, float offsetX, float offsetY, float offsetZ, float speed, int particleCount, int radius )
|
||||
+ {
|
||||
+ Validate.notNull( location, "Location cannot be null" );
|
||||
+ Validate.notNull( effect, "Effect cannot be null" );
|
||||
+ Validate.notNull( location.getWorld(), "World cannot be null" );
|
||||
+ Packet packet;
|
||||
+ if ( effect.getType() != Effect.Type.PARTICLE )
|
||||
+ {
|
||||
+ int packetData = effect.getId();
|
||||
+ packet = new PacketPlayOutWorldEvent( packetData, location.getBlockX(), location.getBlockY(), location.getBlockZ(), id, false );
|
||||
+ } else
|
||||
+ {
|
||||
+ StringBuilder particleFullName = new StringBuilder();
|
||||
+ particleFullName.append( effect.getName() );
|
||||
+ if ( effect.getData() != null && ( effect.getData().equals( Material.class ) || effect.getData().equals( org.bukkit.material.MaterialData.class ) ) )
|
||||
+ {
|
||||
+ particleFullName.append( '_' ).append( id );
|
||||
+ }
|
||||
+ if ( effect.getData() != null && effect.getData().equals( org.bukkit.material.MaterialData.class ) )
|
||||
+ {
|
||||
+ particleFullName.append( '_' ).append( data );
|
||||
+ }
|
||||
+ packet = new PacketPlayOutWorldParticles( particleFullName.toString(), (float) location.getX(), (float) location.getY(), (float) location.getZ(), offsetX, offsetY, offsetZ, speed, particleCount );
|
||||
+ }
|
||||
+ int distance;
|
||||
+ radius *= radius;
|
||||
+ if ( getHandle().playerConnection == null )
|
||||
+ {
|
||||
+ return;
|
||||
+ }
|
||||
+ if ( !location.getWorld().equals( getWorld() ) )
|
||||
+ {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ distance = (int) getLocation().distanceSquared( location );
|
||||
+ if ( distance <= radius )
|
||||
+ {
|
||||
+ getHandle().playerConnection.sendPacket( packet );
|
||||
+ }
|
||||
+ }
|
||||
};
|
||||
|
||||
public Player.Spigot spigot()
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,111 +0,0 @@
|
||||
From 8968aef6fd4acaa86ca14d35171eb2009460f4d4 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Sun, 5 Jan 2014 09:35:01 +1100
|
||||
Subject: [PATCH] Fix Biome Decoration Crashes
|
||||
|
||||
We don't really know what affect this will have on the terrain generation, but its better than crashing and not having terrain generate at all!
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BiomeDecorator.java b/src/main/java/net/minecraft/server/BiomeDecorator.java
|
||||
index b048d6c..962d719 100644
|
||||
--- a/src/main/java/net/minecraft/server/BiomeDecorator.java
|
||||
+++ b/src/main/java/net/minecraft/server/BiomeDecorator.java
|
||||
@@ -147,7 +147,7 @@ public class BiomeDecorator {
|
||||
for (j = 0; j < this.z; ++j) {
|
||||
k = this.c + this.b.nextInt(16) + 8;
|
||||
l = this.d + this.b.nextInt(16) + 8;
|
||||
- i1 = this.b.nextInt(this.a.getHighestBlockYAt(k, l) * 2);
|
||||
+ i1 = this.b.nextInt(this.getHighestBlockYAt(k, l) * 2); // Spigot
|
||||
WorldGenerator worldgenerator = biomebase.b(this.b);
|
||||
|
||||
worldgenerator.a(this.a, this.b, k, i1, l);
|
||||
@@ -156,7 +156,7 @@ public class BiomeDecorator {
|
||||
for (j = 0; j < this.A; ++j) {
|
||||
k = this.c + this.b.nextInt(16) + 8;
|
||||
l = this.d + this.b.nextInt(16) + 8;
|
||||
- i1 = this.b.nextInt(this.a.getHighestBlockYAt(k, l) * 2);
|
||||
+ i1 = this.b.nextInt(this.getHighestBlockYAt(k, l) * 2); // Spigot
|
||||
(new WorldGenDeadBush(Blocks.DEAD_BUSH)).a(this.a, this.b, k, i1, l);
|
||||
}
|
||||
|
||||
@@ -164,7 +164,7 @@ public class BiomeDecorator {
|
||||
k = this.c + this.b.nextInt(16) + 8;
|
||||
l = this.d + this.b.nextInt(16) + 8;
|
||||
|
||||
- for (i1 = this.b.nextInt(this.a.getHighestBlockYAt(k, l) * 2); i1 > 0 && this.a.isEmpty(k, i1 - 1, l); --i1) {
|
||||
+ for (i1 = this.b.nextInt(this.getHighestBlockYAt(k, l) * 2); i1 > 0 && this.a.isEmpty(k, i1 - 1, l); --i1) { // Spigot
|
||||
;
|
||||
}
|
||||
|
||||
@@ -182,7 +182,7 @@ public class BiomeDecorator {
|
||||
if (this.b.nextInt(8) == 0) {
|
||||
k = this.c + this.b.nextInt(16) + 8;
|
||||
l = this.d + this.b.nextInt(16) + 8;
|
||||
- i1 = this.b.nextInt(this.a.getHighestBlockYAt(k, l) * 2);
|
||||
+ i1 = this.b.nextInt(this.getHighestBlockYAt(k, l) * 2); // Spigot
|
||||
this.r.a(this.a, this.b, k, i1, l);
|
||||
}
|
||||
}
|
||||
@@ -190,42 +190,42 @@ public class BiomeDecorator {
|
||||
if (this.b.nextInt(4) == 0) {
|
||||
j = this.c + this.b.nextInt(16) + 8;
|
||||
k = this.d + this.b.nextInt(16) + 8;
|
||||
- l = this.b.nextInt(this.a.getHighestBlockYAt(j, k) * 2);
|
||||
+ l = this.b.nextInt(this.getHighestBlockYAt(j, k) * 2); // Spigot
|
||||
this.q.a(this.a, this.b, j, l, k);
|
||||
}
|
||||
|
||||
if (this.b.nextInt(8) == 0) {
|
||||
j = this.c + this.b.nextInt(16) + 8;
|
||||
k = this.d + this.b.nextInt(16) + 8;
|
||||
- l = this.b.nextInt(this.a.getHighestBlockYAt(j, k) * 2);
|
||||
+ l = this.b.nextInt(this.getHighestBlockYAt(j, k) * 2); // Spigot
|
||||
this.r.a(this.a, this.b, j, l, k);
|
||||
}
|
||||
|
||||
for (j = 0; j < this.C; ++j) {
|
||||
k = this.c + this.b.nextInt(16) + 8;
|
||||
l = this.d + this.b.nextInt(16) + 8;
|
||||
- i1 = this.b.nextInt(this.a.getHighestBlockYAt(k, l) * 2);
|
||||
+ i1 = this.b.nextInt(this.getHighestBlockYAt(k, l) * 2); // Spigot
|
||||
this.t.a(this.a, this.b, k, i1, l);
|
||||
}
|
||||
|
||||
for (j = 0; j < 10; ++j) {
|
||||
k = this.c + this.b.nextInt(16) + 8;
|
||||
l = this.d + this.b.nextInt(16) + 8;
|
||||
- i1 = this.b.nextInt(this.a.getHighestBlockYAt(k, l) * 2);
|
||||
+ i1 = this.b.nextInt(this.getHighestBlockYAt(k, l) * 2); // Spigot
|
||||
this.t.a(this.a, this.b, k, i1, l);
|
||||
}
|
||||
|
||||
if (this.b.nextInt(32) == 0) {
|
||||
j = this.c + this.b.nextInt(16) + 8;
|
||||
k = this.d + this.b.nextInt(16) + 8;
|
||||
- l = this.b.nextInt(this.a.getHighestBlockYAt(j, k) * 2);
|
||||
+ l = this.b.nextInt(this.getHighestBlockYAt(j, k) * 2); // Spigot
|
||||
(new WorldGenPumpkin()).a(this.a, this.b, j, l, k);
|
||||
}
|
||||
|
||||
for (j = 0; j < this.D; ++j) {
|
||||
k = this.c + this.b.nextInt(16) + 8;
|
||||
l = this.d + this.b.nextInt(16) + 8;
|
||||
- i1 = this.b.nextInt(this.a.getHighestBlockYAt(k, l) * 2);
|
||||
+ i1 = this.b.nextInt(this.getHighestBlockYAt(k, l) * 2); // Spigot
|
||||
this.u.a(this.a, this.b, k, i1, l);
|
||||
}
|
||||
|
||||
@@ -276,4 +276,11 @@ public class BiomeDecorator {
|
||||
this.a(1, this.n, 0, 16);
|
||||
this.b(1, this.o, 16, 16);
|
||||
}
|
||||
+
|
||||
+ // Spigot Start
|
||||
+ private int getHighestBlockYAt(int x, int z)
|
||||
+ {
|
||||
+ return Math.max( 1, this.a.getHighestBlockYAt( x, z ) );
|
||||
+ }
|
||||
+ // Spigot End
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,30 +0,0 @@
|
||||
From 6a400f05f432135d7bf5c641d55f113c97b610f9 Mon Sep 17 00:00:00 2001
|
||||
From: DerFlash <bte@freenet.de>
|
||||
Date: Tue, 9 Jul 2013 00:11:12 +0200
|
||||
Subject: [PATCH] Save ticks lived to nbttag
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index b13968d..27b0a25 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -1132,6 +1132,7 @@ public abstract class Entity {
|
||||
nbttagcompound.setLong("WorldUUIDLeast", this.world.getDataManager().getUUID().getLeastSignificantBits());
|
||||
nbttagcompound.setLong("WorldUUIDMost", this.world.getDataManager().getUUID().getMostSignificantBits());
|
||||
nbttagcompound.setInt("Bukkit.updateLevel", CURRENT_LEVEL);
|
||||
+ nbttagcompound.setInt("Spigot.ticksLived", this.ticksLived);
|
||||
// CraftBukkit end
|
||||
this.b(nbttagcompound);
|
||||
if (this.vehicle != null) {
|
||||
@@ -1200,6 +1201,8 @@ public abstract class Entity {
|
||||
if (this instanceof EntityLiving) {
|
||||
EntityLiving entity = (EntityLiving) this;
|
||||
|
||||
+ this.ticksLived = nbttagcompound.getInt("Spigot.ticksLived");
|
||||
+
|
||||
// Reset the persistence for tamed animals
|
||||
if (entity instanceof EntityTameableAnimal && !isLevelAtLeast(nbttagcompound, 2) && !nbttagcompound.getBoolean("PersistenceRequired")) {
|
||||
EntityInsentient entityinsentient = (EntityInsentient) entity;
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,68 +0,0 @@
|
||||
From 2662f887e7f3478c01cc1835b493005bc7b820b6 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Tue, 11 Jun 2013 12:17:37 +1000
|
||||
Subject: [PATCH] More Efficient GetCubes
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 106f27a..a00075a 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -1050,23 +1050,42 @@ public abstract class World implements IBlockAccess {
|
||||
int i1 = MathHelper.floor(axisalignedbb.c);
|
||||
int j1 = MathHelper.floor(axisalignedbb.f + 1.0D);
|
||||
|
||||
- for (int k1 = i; k1 < j; ++k1) {
|
||||
- for (int l1 = i1; l1 < j1; ++l1) {
|
||||
- if (this.isLoaded(k1, 64, l1)) {
|
||||
- for (int i2 = k - 1; i2 < l; ++i2) {
|
||||
- Block block;
|
||||
-
|
||||
- if (k1 >= -30000000 && k1 < 30000000 && l1 >= -30000000 && l1 < 30000000) {
|
||||
- block = this.getType(k1, i2, l1);
|
||||
- } else {
|
||||
- block = Blocks.STONE;
|
||||
+ // Spigot start
|
||||
+ int ystart = ( ( k - 1 ) < 0 ) ? 0 : ( k - 1 );
|
||||
+ for ( int chunkx = ( i >> 4 ); chunkx <= ( ( j - 1 ) >> 4 ); chunkx++ )
|
||||
+ {
|
||||
+ int cx = chunkx << 4;
|
||||
+ for ( int chunkz = ( i1 >> 4 ); chunkz <= ( ( j1 - 1 ) >> 4 ); chunkz++ )
|
||||
+ {
|
||||
+ if ( !this.isChunkLoaded( chunkx, chunkz ) )
|
||||
+ {
|
||||
+ continue;
|
||||
+ }
|
||||
+ int cz = chunkz << 4;
|
||||
+ Chunk chunk = this.getChunkAt( chunkx, chunkz );
|
||||
+ // Compute ranges within chunk
|
||||
+ int xstart = ( i < cx ) ? cx : i;
|
||||
+ int xend = ( j < ( cx + 16 ) ) ? j : ( cx + 16 );
|
||||
+ int zstart = ( i1 < cz ) ? cz : i1;
|
||||
+ int zend = ( j1 < ( cz + 16 ) ) ? j1 : ( cz + 16 );
|
||||
+ // Loop through blocks within chunk
|
||||
+ for ( int x = xstart; x < xend; x++ )
|
||||
+ {
|
||||
+ for ( int z = zstart; z < zend; z++ )
|
||||
+ {
|
||||
+ for ( int y = ystart; y < l; y++ )
|
||||
+ {
|
||||
+ Block block = chunk.getType(x - cx, y, z - cz );
|
||||
+ if ( block != null )
|
||||
+ {
|
||||
+ block.a( this, x, y, z, axisalignedbb, this.L, entity );
|
||||
+ }
|
||||
}
|
||||
-
|
||||
- block.a(this, k1, i2, l1, axisalignedbb, this.L, entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+ // Spigot end
|
||||
|
||||
double d0 = 0.25D;
|
||||
List list = this.getEntities(entity, axisalignedbb.grow(d0, d0, d0));
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,84 +0,0 @@
|
||||
From c16a15827d53e1acb7f2b50a0c8df789891e137f Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Sun, 2 Feb 2014 16:55:46 +0000
|
||||
Subject: [PATCH] Add Option to Nerf Mobs from Spawner's
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index 27b0a25..0ec07c2 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -118,6 +118,7 @@ public abstract class Entity {
|
||||
public final byte activationType = org.spigotmc.ActivationRange.initializeEntityActivationType(this);
|
||||
public final boolean defaultActivationState;
|
||||
public long activatedTick = 0;
|
||||
+ public boolean fromMobSpawner;
|
||||
public void inactiveTick() { }
|
||||
// Spigot end
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
index 8c3c8f6..9350e86 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
@@ -417,6 +417,12 @@ public abstract class EntityInsentient extends EntityLiving {
|
||||
this.world.methodProfiler.a("checkDespawn");
|
||||
this.w();
|
||||
this.world.methodProfiler.b();
|
||||
+ // Spigot Start
|
||||
+ if ( this.fromMobSpawner )
|
||||
+ {
|
||||
+ return;
|
||||
+ }
|
||||
+ // Spigot End
|
||||
this.world.methodProfiler.a("sensing");
|
||||
this.bq.a();
|
||||
this.world.methodProfiler.b();
|
||||
diff --git a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
|
||||
index b97ac4b..23f09f7 100644
|
||||
--- a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
|
||||
+++ b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
|
||||
@@ -136,6 +136,12 @@ public abstract class MobSpawnerAbstract {
|
||||
SpawnerSpawnEvent event = CraftEventFactory.callSpawnerSpawnEvent(entity, this.b(), this.c(), this.d());
|
||||
if (!event.isCancelled()) {
|
||||
entity.world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); // CraftBukkit
|
||||
+ // Spigot Start
|
||||
+ if ( entity.world.spigotConfig.nerfSpawnerMobs )
|
||||
+ {
|
||||
+ entity.fromMobSpawner = true;
|
||||
+ }
|
||||
+ // Spigot End
|
||||
}
|
||||
// CraftBukkit end
|
||||
}
|
||||
@@ -181,6 +187,12 @@ public abstract class MobSpawnerAbstract {
|
||||
SpawnerSpawnEvent event = CraftEventFactory.callSpawnerSpawnEvent(entity, this.b(), this.c(), this.d());
|
||||
if (!event.isCancelled()) {
|
||||
this.a().addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); // CraftBukkit
|
||||
+ // Spigot Start
|
||||
+ if ( entity.world.spigotConfig.nerfSpawnerMobs )
|
||||
+ {
|
||||
+ entity.fromMobSpawner = true;
|
||||
+ }
|
||||
+ // Spigot End
|
||||
}
|
||||
// CraftBukkit end
|
||||
}
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
index 042280d..558e9cd 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
@@ -250,4 +250,11 @@ public class SpigotWorldConfig
|
||||
zombieAggressiveTowardsVillager = getBoolean( "zombie-aggressive-towards-villager", true );
|
||||
log( "Zombie Aggressive Towards Villager: " + zombieAggressiveTowardsVillager );
|
||||
}
|
||||
+
|
||||
+ public boolean nerfSpawnerMobs;
|
||||
+ private void nerfSpawnerMobs()
|
||||
+ {
|
||||
+ nerfSpawnerMobs = getBoolean( "nerf-spawner-mobs", false );
|
||||
+ log( "Nerfing mobs spawned from spawners: " + nerfSpawnerMobs );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,36 +0,0 @@
|
||||
From dd0245ad9f6d9a89e1e904ca8052614e2c7f1716 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Mon, 23 Dec 2013 14:07:41 +1100
|
||||
Subject: [PATCH] Warn if PermGen may be insufficient
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
index 8d127fb..008e037 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
@@ -155,6 +155,22 @@ public class Main {
|
||||
useConsole = false;
|
||||
}
|
||||
|
||||
+ // Spigot Start
|
||||
+ int maxPermGen = 0; // In kb
|
||||
+ for ( String s : java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments() )
|
||||
+ {
|
||||
+ if ( s.startsWith( "-XX:MaxPermSize" ) )
|
||||
+ {
|
||||
+ maxPermGen = Integer.parseInt( s.replaceAll( "[^\\d]", "" ) );
|
||||
+ maxPermGen <<= 10 * ("kmg".indexOf( Character.toLowerCase( s.charAt( s.length() - 1 ) ) ) );
|
||||
+ }
|
||||
+ }
|
||||
+ if ( Float.parseFloat( System.getProperty( "java.class.version" ) ) < 52 && maxPermGen < ( 128 << 10 ) ) // 128mb
|
||||
+ {
|
||||
+ System.out.println( "Warning, your max perm gen size is not set or less than 128mb. It is recommended you restart Java with the following argument: -XX:MaxPermSize=128M" );
|
||||
+ System.out.println( "Please see http://www.spigotmc.org/wiki/changing-permgen-size/ for more details and more in-depth instructions." );
|
||||
+ }
|
||||
+ // Spigot End
|
||||
System.out.println("Loading libraries, please wait...");
|
||||
MinecraftServer.main(options);
|
||||
} catch (Throwable t) {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,22 +0,0 @@
|
||||
From 7c26ea6b208917f476ce0315d4e6fc4e5836501b Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Mon, 23 Dec 2013 15:57:57 +1100
|
||||
Subject: [PATCH] Disable Connected Check on setScoreboard
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 49fcfba..25aa18e 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -1215,7 +1215,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
throw new IllegalStateException("Cannot set scoreboard yet");
|
||||
}
|
||||
if (playerConnection.isDisconnected()) {
|
||||
- throw new IllegalStateException("Cannot set scoreboard for invalid CraftPlayer");
|
||||
+ // throw new IllegalStateException("Cannot set scoreboard for invalid CraftPlayer"); // Spigot - remove this as Mojang's semi asynchronous Netty implementation can lead to races
|
||||
}
|
||||
|
||||
this.server.getScoreboardManager().setPlayerBoard(this, scoreboard);
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,70 +0,0 @@
|
||||
From c604226b758f3c8d75d3c63662015ba5dbd5b17f Mon Sep 17 00:00:00 2001
|
||||
From: slide23 <me@slide.ws>
|
||||
Date: Fri, 20 Dec 2013 20:15:33 -0600
|
||||
Subject: [PATCH] Add Late Bind Option
|
||||
|
||||
Add late-bind config option to delay binding until loading is done.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java
|
||||
index 7946703..e91d53f 100644
|
||||
--- a/src/main/java/net/minecraft/server/DedicatedServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/DedicatedServer.java
|
||||
@@ -119,13 +119,15 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
|
||||
this.a(MinecraftEncryption.b());
|
||||
h.info("Starting Minecraft server on " + (this.getServerIp().length() == 0 ? "*" : this.getServerIp()) + ":" + this.K());
|
||||
|
||||
- try {
|
||||
- this.ah().a(inetaddress, this.K());
|
||||
- } catch (Throwable ioexception) { // CraftBukkit - IOException -> Throwable
|
||||
- h.warn("**** FAILED TO BIND TO PORT!");
|
||||
- h.warn("The exception was: {}", new Object[] { ioexception.toString()});
|
||||
- h.warn("Perhaps a server is already running on that port?");
|
||||
- return false;
|
||||
+ if (!org.spigotmc.SpigotConfig.lateBind) {
|
||||
+ try {
|
||||
+ this.ah().a(inetaddress, this.K());
|
||||
+ } catch (Throwable ioexception) { // CraftBukkit - IOException -> Throwable
|
||||
+ h.warn("**** FAILED TO BIND TO PORT!");
|
||||
+ h.warn("The exception was: {}", new Object[] { ioexception.toString()});
|
||||
+ h.warn("Perhaps a server is already running on that port?");
|
||||
+ return false;
|
||||
+ }
|
||||
}
|
||||
|
||||
// Spigot Start - Move DedicatedPlayerList up and bring plugin loading from CraftServer to here
|
||||
@@ -186,6 +188,18 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
|
||||
String s3 = String.format("%.3fs", new Object[] { Double.valueOf((double) i1 / 1.0E9D)});
|
||||
|
||||
h.info("Done (" + s3 + ")! For help, type \"help\" or \"?\"");
|
||||
+
|
||||
+ if (org.spigotmc.SpigotConfig.lateBind) {
|
||||
+ try {
|
||||
+ this.ah().a(inetaddress, this.K());
|
||||
+ } catch (Throwable ioexception) { // CraftBukkit - IOException -> Throwable
|
||||
+ h.warn("**** FAILED TO BIND TO PORT!");
|
||||
+ h.warn("The exception was: {}", new Object[] { ioexception.toString()});
|
||||
+ h.warn("Perhaps a server is already running on that port?");
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (this.propertyManager.getBoolean("enable-query", false)) {
|
||||
h.info("Starting GS4 status listener");
|
||||
this.j = new RemoteStatusListener(this);
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index b3278fd..af73544 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -209,4 +209,9 @@ public class SpigotConfig
|
||||
System.setProperty( "io.netty.eventLoopThreads", Integer.toString( count ) );
|
||||
Bukkit.getLogger().log( Level.INFO, "Using {0} threads for Netty based IO", count );
|
||||
}
|
||||
+
|
||||
+ public static boolean lateBind;
|
||||
+ private static void lateBind() {
|
||||
+ lateBind = getBoolean( "settings.late-bind", false );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,117 +0,0 @@
|
||||
From 898ed50fc7a54f6c3612f0d51f4bd2d9d410e700 Mon Sep 17 00:00:00 2001
|
||||
From: bloodshot <jdroque@gmail.com>
|
||||
Date: Mon, 6 Jan 2014 16:29:51 -0500
|
||||
Subject: [PATCH] Update Chest Animation when Cancelling Event
|
||||
|
||||
Update chest animation after cancelling InventoryOpenEvent. Fixes BUKKIT-1440
|
||||
|
||||
Currently if a plugin cancels an InventoryOpenEvent for vanilla chests,
|
||||
the chest animation for clients is stuck in the open state since
|
||||
IInventory's closeChest method is never called. To fix the issue, closeChest
|
||||
is called before exiting the display GUI method.
|
||||
More info can be found here
|
||||
https://bukkit.atlassian.net/browse/BUKKIT-1440
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
index d32a2d2..fda1e26 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
@@ -634,7 +634,10 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
|
||||
// CraftBukkit start - Inventory open hook
|
||||
Container container = CraftEventFactory.callInventoryOpenEvent(this, new ContainerChest(this.inventory, iinventory));
|
||||
- if(container == null) return;
|
||||
+ if(container == null) {
|
||||
+ iinventory.l_();
|
||||
+ return;
|
||||
+ }
|
||||
// CraftBukkit end
|
||||
|
||||
this.nextContainerCounter();
|
||||
@@ -647,7 +650,10 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
public void openHopper(TileEntityHopper tileentityhopper) {
|
||||
// CraftBukkit start - Inventory open hook
|
||||
Container container = CraftEventFactory.callInventoryOpenEvent(this, new ContainerHopper(this.inventory, tileentityhopper));
|
||||
- if(container == null) return;
|
||||
+ if(container == null) {
|
||||
+ tileentityhopper.l_();
|
||||
+ return;
|
||||
+ }
|
||||
// CraftBukkit end
|
||||
|
||||
this.nextContainerCounter();
|
||||
@@ -660,7 +666,10 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
public void openMinecartHopper(EntityMinecartHopper entityminecarthopper) {
|
||||
// CraftBukkit start - Inventory open hook
|
||||
Container container = CraftEventFactory.callInventoryOpenEvent(this, new ContainerHopper(this.inventory, entityminecarthopper));
|
||||
- if(container == null) return;
|
||||
+ if(container == null) {
|
||||
+ entityminecarthopper.l_();
|
||||
+ return;
|
||||
+ }
|
||||
// CraftBukkit end
|
||||
|
||||
this.nextContainerCounter();
|
||||
@@ -673,7 +682,10 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
public void openFurnace(TileEntityFurnace tileentityfurnace) {
|
||||
// CraftBukkit start - Inventory open hook
|
||||
Container container = CraftEventFactory.callInventoryOpenEvent(this, new ContainerFurnace(this.inventory, tileentityfurnace));
|
||||
- if(container == null) return;
|
||||
+ if(container == null) {
|
||||
+ tileentityfurnace.l_();
|
||||
+ return;
|
||||
+ }
|
||||
// CraftBukkit end
|
||||
|
||||
this.nextContainerCounter();
|
||||
@@ -686,7 +698,10 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
public void openDispenser(TileEntityDispenser tileentitydispenser) {
|
||||
// CraftBukkit start - Inventory open hook
|
||||
Container container = CraftEventFactory.callInventoryOpenEvent(this, new ContainerDispenser(this.inventory, tileentitydispenser));
|
||||
- if(container == null) return;
|
||||
+ if(container == null) {
|
||||
+ tileentitydispenser.l_();
|
||||
+ return;
|
||||
+ }
|
||||
// CraftBukkit end
|
||||
|
||||
this.nextContainerCounter();
|
||||
@@ -699,7 +714,10 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
public void openBrewingStand(TileEntityBrewingStand tileentitybrewingstand) {
|
||||
// CraftBukkit start - Inventory open hook
|
||||
Container container = CraftEventFactory.callInventoryOpenEvent(this, new ContainerBrewingStand(this.inventory, tileentitybrewingstand));
|
||||
- if(container == null) return;
|
||||
+ if(container == null) {
|
||||
+ tileentitybrewingstand.l_();
|
||||
+ return;
|
||||
+ }
|
||||
// CraftBukkit end
|
||||
|
||||
this.nextContainerCounter();
|
||||
@@ -712,7 +730,10 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
public void openBeacon(TileEntityBeacon tileentitybeacon) {
|
||||
// CraftBukkit start - Inventory open hook
|
||||
Container container = CraftEventFactory.callInventoryOpenEvent(this, new ContainerBeacon(this.inventory, tileentitybeacon));
|
||||
- if(container == null) return;
|
||||
+ if(container == null) {
|
||||
+ tileentitybeacon.l_();
|
||||
+ return;
|
||||
+ }
|
||||
// CraftBukkit end
|
||||
|
||||
this.nextContainerCounter();
|
||||
@@ -755,7 +776,10 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
public void openHorseInventory(EntityHorse entityhorse, IInventory iinventory) {
|
||||
// CraftBukkit start - Inventory open hook
|
||||
Container container = CraftEventFactory.callInventoryOpenEvent(this, new ContainerHorse(this.inventory, iinventory, entityhorse));
|
||||
- if(container == null) return;
|
||||
+ if(container == null) {
|
||||
+ iinventory.l_();
|
||||
+ return;
|
||||
+ }
|
||||
// CraftBukkit end
|
||||
|
||||
if (this.activeContainer != this.defaultContainer) {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,35 +0,0 @@
|
||||
From c802b1ee3ad985d70fe4036ef7d83fc705611159 Mon Sep 17 00:00:00 2001
|
||||
From: bloodshot <jdroque@gmail.com>
|
||||
Date: Mon, 6 Jan 2014 18:02:01 -0500
|
||||
Subject: [PATCH] Update Client's Hand when BlockPlaceEvent Cancelled
|
||||
|
||||
Send a Packet103SetSlot to client when a BlockPlaceEvent is cancelled.
|
||||
|
||||
Fixes BUKKIT-5284
|
||||
|
||||
Currently, whenever a player places a block in a protected area the
|
||||
equipped itemstack size on client is never updated properly since the
|
||||
client thinks the block was placed. The reason this happens is because
|
||||
ItemStack.matches returns true since the server does not decrement stack
|
||||
size if a BlockPlaceEvent is cancelled. This causes
|
||||
PlayerConnection.a(handlePlace) not to send the appropriate packet to
|
||||
client which causes the bug.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 248d48e..28bf9d4 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -638,7 +638,9 @@ public class PlayerConnection implements PacketPlayInListener {
|
||||
return;
|
||||
}
|
||||
|
||||
- this.player.playerInteractManager.interact(this.player, worldserver, itemstack, i, j, k, l, packetplayinblockplace.h(), packetplayinblockplace.i(), packetplayinblockplace.j());
|
||||
+ if (!this.player.playerInteractManager.interact(this.player, worldserver, itemstack, i, j, k, l, packetplayinblockplace.h(), packetplayinblockplace.i(), packetplayinblockplace.j())) {
|
||||
+ always = true; // force Packet103SetSlot to be sent to client to update ItemStack count
|
||||
+ }
|
||||
// CraftBukkit end
|
||||
|
||||
flag = true;
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,94 +0,0 @@
|
||||
From efb95588df7ce3c7de9c40105bdf4aa2d290ac7a Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Tue, 7 Jan 2014 15:56:26 +0000
|
||||
Subject: [PATCH] Allow statistics to be disabled/forced
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ServerStatisticManager.java b/src/main/java/net/minecraft/server/ServerStatisticManager.java
|
||||
index 0becb94..b868d08 100644
|
||||
--- a/src/main/java/net/minecraft/server/ServerStatisticManager.java
|
||||
+++ b/src/main/java/net/minecraft/server/ServerStatisticManager.java
|
||||
@@ -32,6 +32,14 @@ public class ServerStatisticManager extends StatisticManager {
|
||||
public ServerStatisticManager(MinecraftServer minecraftserver, File file1) {
|
||||
this.c = minecraftserver;
|
||||
this.d = file1;
|
||||
+ // Spigot start
|
||||
+ for ( String name : org.spigotmc.SpigotConfig.forcedStats.keySet() )
|
||||
+ {
|
||||
+ StatisticWrapper wrapper = new StatisticWrapper();
|
||||
+ wrapper.a( org.spigotmc.SpigotConfig.forcedStats.get( name ) );
|
||||
+ a.put( StatisticList.getStatistic( name ), wrapper );
|
||||
+ }
|
||||
+ // Spigot end
|
||||
}
|
||||
|
||||
public void a() {
|
||||
@@ -48,6 +56,7 @@ public class ServerStatisticManager extends StatisticManager {
|
||||
}
|
||||
|
||||
public void b() {
|
||||
+ if ( org.spigotmc.SpigotConfig.disableStatSaving ) return; // Spigot
|
||||
try {
|
||||
FileUtils.writeStringToFile(this.d, a(this.a));
|
||||
} catch (IOException ioexception) {
|
||||
@@ -56,6 +65,7 @@ public class ServerStatisticManager extends StatisticManager {
|
||||
}
|
||||
|
||||
public void setStatistic(EntityHuman entityhuman, Statistic statistic, int i) {
|
||||
+ if ( org.spigotmc.SpigotConfig.disableStatSaving ) return; // Spigot
|
||||
int j = statistic.d() ? this.getStatisticValue(statistic) : 0;
|
||||
|
||||
super.setStatistic(entityhuman, statistic, i);
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index af73544..54d9117 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -10,10 +10,13 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
+
|
||||
+import gnu.trove.map.hash.TObjectIntHashMap;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.Command;
|
||||
+import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
public class SpigotConfig
|
||||
@@ -214,4 +217,31 @@ public class SpigotConfig
|
||||
private static void lateBind() {
|
||||
lateBind = getBoolean( "settings.late-bind", false );
|
||||
}
|
||||
+
|
||||
+ public static boolean disableStatSaving;
|
||||
+ public static TObjectIntHashMap<String> forcedStats = new TObjectIntHashMap<String>();
|
||||
+ private static void stats()
|
||||
+ {
|
||||
+ disableStatSaving = getBoolean( "stats.disable-saving", false );
|
||||
+
|
||||
+ if ( !config.contains( "stats.forced-stats" ) ) {
|
||||
+ config.createSection( "stats.forced-stats" );
|
||||
+ }
|
||||
+
|
||||
+ ConfigurationSection section = config.getConfigurationSection( "stats.forced-stats" );
|
||||
+ for ( String name : section.getKeys( true ) )
|
||||
+ {
|
||||
+ if ( section.isInt( name ) )
|
||||
+ {
|
||||
+ forcedStats.put( name, section.getInt( name ) );
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if ( disableStatSaving && section.getInt( "achievement.openInventory", 0 ) < 1 )
|
||||
+ {
|
||||
+ Bukkit.getLogger().warning( "*** WARNING *** stats.disable-saving is true but stats.forced-stats.achievement.openInventory" +
|
||||
+ " isn't set to 1. Disabling stat saving without forcing the achievement may cause it to get stuck on the player's " +
|
||||
+ "screen." );
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,29 +0,0 @@
|
||||
From 002b30f2a8762e6a218a55e07afdec9267de0bfd Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Thu, 9 Jan 2014 14:19:12 +0000
|
||||
Subject: [PATCH] Fix anvil collisions
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockAnvil.java b/src/main/java/net/minecraft/server/BlockAnvil.java
|
||||
index 9e1ce2f..1fa14c5 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockAnvil.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockAnvil.java
|
||||
@@ -11,6 +11,15 @@ public class BlockAnvil extends BlockFalling {
|
||||
this.a(CreativeModeTab.c);
|
||||
}
|
||||
|
||||
+ // Spigot start
|
||||
+ @Override
|
||||
+ public AxisAlignedBB a( World world, int i, int j, int k )
|
||||
+ {
|
||||
+ updateShape( world, i, j, k );
|
||||
+ return super.a( world, i, j, k );
|
||||
+ }
|
||||
+ // Spigot end
|
||||
+
|
||||
public boolean d() {
|
||||
return false;
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,28 +0,0 @@
|
||||
From f5c697b1176be4c09d3132b53508889c776b6f05 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Fri, 10 Jan 2014 15:15:50 +1100
|
||||
Subject: [PATCH] Fix ItemStack Unbreakable Code
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
index cc18816..a535479 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
@@ -130,7 +130,13 @@ public final class ItemStack {
|
||||
}
|
||||
|
||||
public boolean g() {
|
||||
- return this.item.getMaxDurability() <= 0 ? false : !this.hasTag() || !this.getTag().getBoolean("Unbreakable");
|
||||
+ // Spigot Start
|
||||
+ if ( this.item.getMaxDurability() <= 0 )
|
||||
+ {
|
||||
+ return false;
|
||||
+ }
|
||||
+ return ( !hasTag() ) || ( !getTag().getBoolean( "Unbreakable" ) );
|
||||
+ // Spigot End
|
||||
}
|
||||
|
||||
public boolean usesData() {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,41 +0,0 @@
|
||||
From 0d37926dd3c071cecefa8a776b87f850ea6f6f35 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Sun, 12 Jan 2014 20:56:41 +1100
|
||||
Subject: [PATCH] Try and Debug Crash Reports Crashing
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 9970208..531029f 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -643,7 +643,13 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
try {
|
||||
worldserver.doTick();
|
||||
} catch (Throwable throwable) {
|
||||
+ // Spigot Start
|
||||
+ try {
|
||||
crashreport = CrashReport.a(throwable, "Exception ticking world");
|
||||
+ } catch (Throwable t){
|
||||
+ throw new RuntimeException("Error generating crash report", t);
|
||||
+ }
|
||||
+ // Spigot End
|
||||
worldserver.a(crashreport);
|
||||
throw new ReportedException(crashreport);
|
||||
}
|
||||
@@ -651,7 +657,13 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
try {
|
||||
worldserver.tickEntities();
|
||||
} catch (Throwable throwable1) {
|
||||
+ // Spigot Start
|
||||
+ try {
|
||||
crashreport = CrashReport.a(throwable1, "Exception ticking world entities");
|
||||
+ } catch (Throwable t){
|
||||
+ throw new RuntimeException("Error generating crash report", t);
|
||||
+ }
|
||||
+ // Spigot End
|
||||
worldserver.a(crashreport);
|
||||
throw new ReportedException(crashreport);
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,32 +0,0 @@
|
||||
From 01bee39d466c003e572fe62e357c0772b98f2bfd Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Sun, 12 Jan 2014 21:07:18 +1100
|
||||
Subject: [PATCH] Replace AutoSave Mechanism
|
||||
|
||||
The problem here is that MinecraftServer.save(..), will attempt to sleep whilst all pending chunks are written to disk, however due to various and complicated bugs, it will wait for an incorrect amount of chunks, which may cause it to sleep for an overly long amount of time. Instead we will mimic the save-all command in its behaviour, which is both safe and performant.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 531029f..1b7f65e 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -572,7 +572,16 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
if ((this.autosavePeriod > 0) && ((this.ticks % this.autosavePeriod) == 0)) { // CraftBukkit
|
||||
this.methodProfiler.a("save");
|
||||
this.t.savePlayers();
|
||||
- this.saveChunks(true);
|
||||
+ // Spigot Start
|
||||
+ // We replace this with saving each individual world as this.saveChunks(...) is broken,
|
||||
+ // and causes the main thread to sleep for random amounts of time depending on chunk activity
|
||||
+ server.playerCommandState = true;
|
||||
+ for (World world : worlds) {
|
||||
+ world.getWorld().save();
|
||||
+ }
|
||||
+ server.playerCommandState = false;
|
||||
+ // this.saveChunks(true);
|
||||
+ // Spigot End
|
||||
this.methodProfiler.b();
|
||||
}
|
||||
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,61 +0,0 @@
|
||||
From 1edaeb85842f11c24fc17f3c26446aaf33c4c47b Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Wed, 15 Jan 2014 21:52:47 +0000
|
||||
Subject: [PATCH] Block data values that crash the client
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
||||
index 3712009..90f32ed 100644
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -115,7 +115,7 @@ public class Chunk {
|
||||
}
|
||||
|
||||
this.sections[l1].setTypeId(l, j1 & 15, i1, block);
|
||||
- this.sections[l1].setData(l, j1 & 15, i1, abyte[k1]);
|
||||
+ this.sections[l1].setData(l, j1 & 15, i1, checkData( block, abyte[k1] ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -398,6 +398,17 @@ public class Chunk {
|
||||
}
|
||||
}
|
||||
|
||||
+ // Spigot start - prevent invalid data values
|
||||
+ private static int checkData( Block block, int l )
|
||||
+ {
|
||||
+ if (block == Block.b( "minecraft:double_plant" ) )
|
||||
+ {
|
||||
+ return l == 7 ? 0 : l;
|
||||
+ }
|
||||
+ return l;
|
||||
+ }
|
||||
+ // Spigot end
|
||||
+
|
||||
public boolean a(int i, int j, int k, Block block, int l) {
|
||||
int i1 = k << 4 | i;
|
||||
|
||||
@@ -452,7 +463,7 @@ public class Chunk {
|
||||
if (chunksection.getTypeId(i, j & 15, k) != block) {
|
||||
return false;
|
||||
} else {
|
||||
- chunksection.setData(i, j & 15, k, l);
|
||||
+ chunksection.setData(i, j & 15, k, checkData( block, l ) );
|
||||
if (flag) {
|
||||
this.initLighting();
|
||||
} else {
|
||||
@@ -522,8 +533,9 @@ public class Chunk {
|
||||
return false;
|
||||
} else {
|
||||
this.n = true;
|
||||
- chunksection.setData(i, j & 15, k, l);
|
||||
- if (chunksection.getTypeId(i, j & 15, k) instanceof IContainer) {
|
||||
+ Block block = chunksection.getTypeId( i, j & 15, k );
|
||||
+ chunksection.setData(i, j & 15, k, checkData( block, l ) );
|
||||
+ if (block instanceof IContainer) {
|
||||
TileEntity tileentity = this.e(i, j, k);
|
||||
|
||||
if (tileentity != null) {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,36 +0,0 @@
|
||||
From b8f122c7ade82ee6937edbdf2f0cf3e72f98c7b1 Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Sat, 18 Jan 2014 14:27:03 +0000
|
||||
Subject: [PATCH] Support vanilla's direction tag on fireballs
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityFireball.java b/src/main/java/net/minecraft/server/EntityFireball.java
|
||||
index 0eecaad..b14c73e 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityFireball.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityFireball.java
|
||||
@@ -199,6 +199,8 @@ public abstract class EntityFireball extends Entity {
|
||||
nbttagcompound.setByte("inGround", (byte) (this.i ? 1 : 0));
|
||||
// CraftBukkit - Fix direction being mismapped to invalid variables
|
||||
nbttagcompound.set("power", this.a(new double[] { this.dirX, this.dirY, this.dirZ}));
|
||||
+ // Spigot - Support vanilla's direction tag
|
||||
+ nbttagcompound.set("direction", this.a(new double[] { this.motX, this.motY, this.motZ}));
|
||||
}
|
||||
|
||||
public void a(NBTTagCompound nbttagcompound) {
|
||||
@@ -215,6 +217,13 @@ public abstract class EntityFireball extends Entity {
|
||||
this.dirY = nbttaglist.d(1);
|
||||
this.dirZ = nbttaglist.d(2);
|
||||
// CraftBukkit end
|
||||
+ } else if (nbttagcompound.hasKeyOfType("direction", 9)) { // Spigot - Support vanilla's direction tag
|
||||
+ NBTTagList nbttaglist = nbttagcompound.getList("direction", 6);
|
||||
+
|
||||
+ this.motX = nbttaglist.d(0);
|
||||
+ this.motY = nbttaglist.d(1);
|
||||
+ this.motZ = nbttaglist.d(2);
|
||||
+
|
||||
} else {
|
||||
this.die();
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,41 +0,0 @@
|
||||
From c214ae29c2df46b339bfb2d74b240f7ec95dac4f Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Sat, 18 Jan 2014 19:32:42 +0000
|
||||
Subject: [PATCH] Support non-prefixed URLs
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java
|
||||
index 2b57bf8..a3de612 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java
|
||||
@@ -19,7 +19,7 @@ import com.google.common.collect.ImmutableMap.Builder;
|
||||
public final class CraftChatMessage {
|
||||
private static class StringMessage {
|
||||
private static final Map<Character, EnumChatFormat> formatMap;
|
||||
- private static final Pattern INCREMENTAL_PATTERN = Pattern.compile("(" + String.valueOf(org.bukkit.ChatColor.COLOR_CHAR) + "[0-9a-fk-or])|(\\n)|(?:(https?://[^ ][^ ]*?)(?=[\\.\\?!,;:]?(?:[ \\n]|$)))", Pattern.CASE_INSENSITIVE);
|
||||
+ private static final Pattern INCREMENTAL_PATTERN = Pattern.compile("(" + String.valueOf(org.bukkit.ChatColor.COLOR_CHAR) + "[0-9a-fk-or])|(\\n)|((?:(?:https?)://)?(?:[-\\w_\\.]{2,}\\.[a-z]{2,4}.*?(?=[\\.\\?!,;:]?(?:[ \\n]|$))))", Pattern.CASE_INSENSITIVE);
|
||||
|
||||
static {
|
||||
Builder<Character, EnumChatFormat> builder = ImmutableMap.builder();
|
||||
@@ -85,6 +85,9 @@ public final class CraftChatMessage {
|
||||
currentChatComponent = null;
|
||||
break;
|
||||
case 3:
|
||||
+ if ( !( match.startsWith( "http://" ) || match.startsWith( "https://" ) ) ) {
|
||||
+ match = "http://" + match;
|
||||
+ }
|
||||
modifier.setChatClickable(new ChatClickable(EnumClickAction.OPEN_URL, match));
|
||||
appendNewComponent(matcher.end(groupId));
|
||||
modifier.setChatClickable((ChatClickable) null);
|
||||
@@ -96,7 +99,7 @@ public final class CraftChatMessage {
|
||||
appendNewComponent(message.length());
|
||||
}
|
||||
|
||||
- output = list.toArray(new IChatBaseComponent[0]);
|
||||
+ output = list.toArray(new IChatBaseComponent[list.size()]);
|
||||
}
|
||||
|
||||
private void appendNewComponent(int index) {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,33 +0,0 @@
|
||||
From ad09c4206bf645b88a740e0f1692a003d804beda Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Mon, 20 Jan 2014 13:44:07 +1100
|
||||
Subject: [PATCH] Catch stalling on corrupted map data / NBT arrays.
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/NBTTagByteArray.java b/src/main/java/net/minecraft/server/NBTTagByteArray.java
|
||||
index 916d935..c2e81cb 100644
|
||||
--- a/src/main/java/net/minecraft/server/NBTTagByteArray.java
|
||||
+++ b/src/main/java/net/minecraft/server/NBTTagByteArray.java
|
||||
@@ -22,6 +22,7 @@ public class NBTTagByteArray extends NBTBase {
|
||||
|
||||
void load(DataInput datainput, int i) throws IOException {
|
||||
int j = datainput.readInt();
|
||||
+ com.google.common.base.Preconditions.checkArgument( j < 1 << 24);
|
||||
|
||||
this.data = new byte[j];
|
||||
datainput.readFully(this.data);
|
||||
diff --git a/src/main/java/net/minecraft/server/NBTTagIntArray.java b/src/main/java/net/minecraft/server/NBTTagIntArray.java
|
||||
index 49b3f14..4d6a9da 100644
|
||||
--- a/src/main/java/net/minecraft/server/NBTTagIntArray.java
|
||||
+++ b/src/main/java/net/minecraft/server/NBTTagIntArray.java
|
||||
@@ -25,6 +25,7 @@ public class NBTTagIntArray extends NBTBase {
|
||||
|
||||
void load(DataInput datainput, int i) throws IOException {
|
||||
int j = datainput.readInt();
|
||||
+ com.google.common.base.Preconditions.checkArgument( j < 1 << 24);
|
||||
|
||||
this.data = new int[j];
|
||||
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,22 +0,0 @@
|
||||
From 93e44992c776294ea91453698c69a0d9f1efbb4f Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Mon, 20 Jan 2014 13:50:32 +1100
|
||||
Subject: [PATCH] Reduce memory of hiddenPlayers map.
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 25aa18e..a220aed 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -64,7 +64,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
private boolean hasPlayedBefore = false;
|
||||
private final ConversationTracker conversationTracker = new ConversationTracker();
|
||||
private final Set<String> channels = new HashSet<String>();
|
||||
- private final Map<String, Player> hiddenPlayers = new MapMaker().softValues().makeMap();
|
||||
+ private final Map<String, Player> hiddenPlayers = new MapMaker().weakValues().makeMap(); // Spigot - soft -> weak
|
||||
private int hash = 0;
|
||||
private double health = 20;
|
||||
private boolean scaledHealth = false;
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,38 +0,0 @@
|
||||
From 7796ac75a3c9273d2d1f8f6baa1a0fbf1b987514 Mon Sep 17 00:00:00 2001
|
||||
From: Dmck2b <dmck2b+github@gmail.com>
|
||||
Date: Mon, 20 Jan 2014 20:18:23 +0000
|
||||
Subject: [PATCH] Allow toggling of ZombiePigmen spawning in portal blocks
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockPortal.java b/src/main/java/net/minecraft/server/BlockPortal.java
|
||||
index 1356f13..b361775 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockPortal.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockPortal.java
|
||||
@@ -15,7 +15,7 @@ public class BlockPortal extends BlockHalfTransparent {
|
||||
|
||||
public void a(World world, int i, int j, int k, Random random) {
|
||||
super.a(world, i, j, k, random);
|
||||
- if (world.worldProvider.d() && world.getGameRules().getBoolean("doMobSpawning") && random.nextInt(2000) < world.difficulty.a()) {
|
||||
+ if (world.spigotConfig.enableZombiePigmenPortalSpawns && world.worldProvider.d() && world.getGameRules().getBoolean("doMobSpawning") && random.nextInt(2000) < world.difficulty.a()) { // Spigot
|
||||
int l;
|
||||
|
||||
for (l = j; !World.a((IBlockAccess) world, i, l, k) && l > 0; --l) {
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
index 558e9cd..ffdb33e 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
@@ -257,4 +257,11 @@ public class SpigotWorldConfig
|
||||
nerfSpawnerMobs = getBoolean( "nerf-spawner-mobs", false );
|
||||
log( "Nerfing mobs spawned from spawners: " + nerfSpawnerMobs );
|
||||
}
|
||||
+
|
||||
+ public boolean enableZombiePigmenPortalSpawns;
|
||||
+ private void enableZombiePigmenPortalSpawns()
|
||||
+ {
|
||||
+ enableZombiePigmenPortalSpawns = getBoolean( "enable-zombie-pigmen-portal-spawns", true );
|
||||
+ log( "Allow Zombie Pigmen to spawn from portal blocks: " + enableZombiePigmenPortalSpawns );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,27 +0,0 @@
|
||||
From fc6f0c098daa08c47192a1a255d1f5731682feb4 Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Mon, 20 Jan 2014 20:42:28 +0000
|
||||
Subject: [PATCH] Don't let trees replace any block when growing
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldGenForestTree.java b/src/main/java/net/minecraft/server/WorldGenForestTree.java
|
||||
index 71ce973..caaac9a 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldGenForestTree.java
|
||||
+++ b/src/main/java/net/minecraft/server/WorldGenForestTree.java
|
||||
@@ -132,7 +132,12 @@ public class WorldGenForestTree extends WorldGenTreeAbstract implements BlockSap
|
||||
int k3;
|
||||
|
||||
for (k3 = 0; k3 < j3; ++k3) {
|
||||
- this.setTypeAndData(world, i + l2, k2 - k3 - 1, k + i3, Blocks.LOG2, 1);
|
||||
+ Block block = world.getType(i + l2, k2 - k3 - 1, k + i3);
|
||||
+
|
||||
+ if (block.getMaterial() == Material.AIR || block.getMaterial() == Material.LEAVES)
|
||||
+ {
|
||||
+ this.setTypeAndData(world, i + l2, k2 - k3 - 1, k + i3, Blocks.LOG2, 1);
|
||||
+ }
|
||||
}
|
||||
|
||||
int l3;
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,165 +0,0 @@
|
||||
From 0e4528f834a8111276d33b09e27854def1214491 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Sat, 25 Jan 2014 14:08:35 +1100
|
||||
Subject: [PATCH] Highly Optimized Tick Loop
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 1b7f65e..8ce9dd7 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -102,6 +102,12 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
public java.util.Queue<Runnable> processQueue = new java.util.concurrent.ConcurrentLinkedQueue<Runnable>();
|
||||
public int autosavePeriod;
|
||||
// CraftBukkit end
|
||||
+ // Spigot start
|
||||
+ private static final int TPS = 20;
|
||||
+ private static final int TICK_TIME = 1000000000 / TPS;
|
||||
+ private static final int SAMPLE_INTERVAL = 100;
|
||||
+ public final double[] recentTps = new double[ 3 ];
|
||||
+ // Spigot end
|
||||
|
||||
public MinecraftServer(OptionSet options, Proxy proxy) { // CraftBukkit - signature file -> OptionSet
|
||||
i = this;
|
||||
@@ -422,6 +428,13 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
this.isRunning = false;
|
||||
}
|
||||
|
||||
+ // Spigot Start
|
||||
+ private static double calcTps(double avg, double exp, double tps)
|
||||
+ {
|
||||
+ return ( avg * exp ) + ( tps * ( 1 - exp ) );
|
||||
+ }
|
||||
+ // Spigot End
|
||||
+
|
||||
public void run() {
|
||||
try {
|
||||
if (this.init()) {
|
||||
@@ -432,38 +445,34 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
this.p.setServerInfo(new ServerPingServerData("1.7.5", 4));
|
||||
this.a(this.p);
|
||||
|
||||
+ // Spigot start
|
||||
+ Arrays.fill( recentTps, 20 );
|
||||
+ long lastTick = System.nanoTime(), catchupTime = 0, curTime, wait, tickSection = lastTick;
|
||||
while (this.isRunning) {
|
||||
- long k = aq();
|
||||
- long l = k - i;
|
||||
-
|
||||
- if (l > 2000L && i - this.O >= 15000L) {
|
||||
- if (this.server.getWarnOnOverload()) // CraftBukkit - Added option to suppress warning messages
|
||||
- h.warn("Can\'t keep up! Did the system time change, or is the server overloaded? Running {}ms behind, skipping {} tick(s)", new Object[] { Long.valueOf(l), Long.valueOf(l / 50L)});
|
||||
- l = 2000L;
|
||||
- this.O = i;
|
||||
- }
|
||||
-
|
||||
- if (l < 0L) {
|
||||
- h.warn("Time ran backwards! Did the system time change?");
|
||||
- l = 0L;
|
||||
+ curTime = System.nanoTime();
|
||||
+ wait = TICK_TIME - (curTime - lastTick) - catchupTime;
|
||||
+ if (wait > 0) {
|
||||
+ Thread.sleep(wait / 1000000);
|
||||
+ catchupTime = 0;
|
||||
+ continue;
|
||||
+ } else {
|
||||
+ catchupTime = Math.min(1000000000, Math.abs(wait));
|
||||
}
|
||||
|
||||
- j += l;
|
||||
- i = k;
|
||||
- if (this.worlds.get(0).everyoneDeeplySleeping()) { // CraftBukkit
|
||||
- this.u();
|
||||
- j = 0L;
|
||||
- } else {
|
||||
- while (j > 50L) {
|
||||
- MinecraftServer.currentTick = (int) (System.currentTimeMillis() / 50); // CraftBukkit
|
||||
- j -= 50L;
|
||||
- this.u();
|
||||
- }
|
||||
+ if ( MinecraftServer.currentTick++ % SAMPLE_INTERVAL == 0 )
|
||||
+ {
|
||||
+ double currentTps = 1E9 / ( curTime - tickSection ) * SAMPLE_INTERVAL;
|
||||
+ recentTps[0] = calcTps( recentTps[0], 0.92, currentTps ); // 1/exp(5sec/1min)
|
||||
+ recentTps[1] = calcTps( recentTps[1], 0.9835, currentTps ); // 1/exp(5sec/5min)
|
||||
+ recentTps[2] = calcTps( recentTps[2], 0.9945, currentTps ); // 1/exp(5sec/15min)
|
||||
+ tickSection = curTime;
|
||||
}
|
||||
+ lastTick = curTime;
|
||||
|
||||
- Thread.sleep(Math.max(1L, 50L - j));
|
||||
+ this.u();
|
||||
this.N = true;
|
||||
}
|
||||
+ // Spigot end
|
||||
} else {
|
||||
this.a((CrashReport) null);
|
||||
}
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index 54d9117..2baed09 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -244,4 +244,9 @@ public class SpigotConfig
|
||||
"screen." );
|
||||
}
|
||||
}
|
||||
+
|
||||
+ private static void tpsCommand()
|
||||
+ {
|
||||
+ commands.put( "tps", new TicksPerSecondCommand( "tps" ) );
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/org/spigotmc/TicksPerSecondCommand.java b/src/main/java/org/spigotmc/TicksPerSecondCommand.java
|
||||
new file mode 100644
|
||||
index 0000000..2b8343d
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/org/spigotmc/TicksPerSecondCommand.java
|
||||
@@ -0,0 +1,45 @@
|
||||
+package org.spigotmc;
|
||||
+
|
||||
+import com.google.common.base.Joiner;
|
||||
+import net.minecraft.server.MinecraftServer;
|
||||
+import net.minecraft.util.com.google.common.collect.Iterables;
|
||||
+import org.bukkit.ChatColor;
|
||||
+import org.bukkit.command.Command;
|
||||
+import org.bukkit.command.CommandSender;
|
||||
+
|
||||
+public class TicksPerSecondCommand extends Command
|
||||
+{
|
||||
+
|
||||
+ public TicksPerSecondCommand(String name)
|
||||
+ {
|
||||
+ super( name );
|
||||
+ this.description = "Gets the current ticks per second for the server";
|
||||
+ this.usageMessage = "/tps";
|
||||
+ this.setPermission( "bukkit.command.tps" );
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean execute(CommandSender sender, String currentAlias, String[] args)
|
||||
+ {
|
||||
+ if ( !testPermission( sender ) )
|
||||
+ {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ StringBuilder sb = new StringBuilder( ChatColor.GOLD + "TPS from last 1m, 5m, 15m: " );
|
||||
+ for ( double tps : MinecraftServer.getServer().recentTps )
|
||||
+ {
|
||||
+ sb.append( format( tps ) );
|
||||
+ sb.append( ", " );
|
||||
+ }
|
||||
+ sender.sendMessage( sb.substring( 0, sb.length() - 2 ) );
|
||||
+
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ private String format(double tps)
|
||||
+ {
|
||||
+ return ( ( tps > 18.0 ) ? ChatColor.GREEN : ( tps > 16.0 ) ? ChatColor.YELLOW : ChatColor.RED ).toString()
|
||||
+ + ( ( tps > 20.0 ) ? "*" : "" ) + Math.min( Math.round( tps * 100.0 ) / 100.0, 20.0 );
|
||||
+ }
|
||||
+}
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,79 +0,0 @@
|
||||
From 06fbaef63c1db7de3b8d108a864177b396f93280 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Thu, 23 Jan 2014 13:17:35 +1100
|
||||
Subject: [PATCH] Add Spigot Links
|
||||
|
||||
|
||||
diff --git a/README.md b/README.md
|
||||
index cda766b..1f12a75 100644
|
||||
--- a/README.md
|
||||
+++ b/README.md
|
||||
@@ -1,11 +1,11 @@
|
||||
-CraftBukkit
|
||||
+Spigot
|
||||
===========
|
||||
|
||||
-A Bukkit (Minecraft Server API) implementation
|
||||
+A Spigot-API and Bukkit implementation
|
||||
|
||||
-Website: [http://bukkit.org](http://bukkit.org)
|
||||
-Bugs/Suggestions: [http://leaky.bukkit.org](http://leaky.bukkit.org)
|
||||
-Contributing Guidelines: [CONTRIBUTING.md](https://github.com/Bukkit/CraftBukkit/blob/master/CONTRIBUTING.md)
|
||||
+Website: [http://spigotmc.org](http://spigotmc.org)
|
||||
+Bugs/Suggestions: [http://www.spigotmc.org/forums/bugs-feature-requests.8/](http://www.spigotmc.org/forums/bugs-feature-requests.8/)
|
||||
+Contributing Guidelines: [CONTRIBUTING.md](https://github.com/SpigotMC/Spigot-API/blob/master/CONTRIBUTING.md)
|
||||
|
||||
Compilation
|
||||
-----------
|
||||
@@ -13,6 +13,6 @@ Compilation
|
||||
We use maven to handle our dependencies.
|
||||
|
||||
* Install [Maven 3](http://maven.apache.org/download.html)
|
||||
-* Check out and install [Bukkit](http://github.com/Bukkit/Bukkit)
|
||||
- * *Note*: this is not needed as the repository we use has Bukkit too, but you might have a newer one (with your own changes :D)
|
||||
+* Check out and install [Spigot-API](http://github.com/SpigotMC/Spigot)
|
||||
+ * *Note*: this is not needed as the repository we use has Spigot-API too, but you might have a newer one (with your own changes :D)
|
||||
* Check out this repo and: `mvn clean package`
|
||||
diff --git a/src/main/resources/configurations/bukkit.yml b/src/main/resources/configurations/bukkit.yml
|
||||
index 129ac34..751bbfc 100644
|
||||
--- a/src/main/resources/configurations/bukkit.yml
|
||||
+++ b/src/main/resources/configurations/bukkit.yml
|
||||
@@ -6,11 +6,10 @@
|
||||
# If you need help on this file, feel free to join us on irc or leave a message
|
||||
# on the forums asking for advice.
|
||||
#
|
||||
-# IRC: #bukkit @ esper.net
|
||||
-# (If this means nothing to you, just go to http://webchat.esper.net/?channels=bukkit )
|
||||
-# Forums: http://forums.bukkit.org/forums/bukkit-help.6/
|
||||
-# Twitter: http://twitter.com/CraftBukkit
|
||||
-# Bug tracker: http://leaky.bukkit.org/
|
||||
+# IRC: #spigot @ irc.spi.gt
|
||||
+# (If this means nothing to you, just go to http://irc.spi.gt/iris/?nick=&channels=spigot )
|
||||
+# Forums: http://www.spigotmc.org/forums/help.40/
|
||||
+# Bug tracker: http://www.spigotmc.org/forums/bugs-feature-requests.8/
|
||||
|
||||
|
||||
settings:
|
||||
diff --git a/src/main/resources/configurations/commands.yml b/src/main/resources/configurations/commands.yml
|
||||
index 0a5d414..d6bcf5c 100644
|
||||
--- a/src/main/resources/configurations/commands.yml
|
||||
+++ b/src/main/resources/configurations/commands.yml
|
||||
@@ -5,11 +5,10 @@
|
||||
# If you need help on this file, feel free to join us on irc or leave a message
|
||||
# on the forums asking for advice.
|
||||
#
|
||||
-# IRC: #bukkit @ esper.net
|
||||
-# (If this means nothing to you, just go to http://webchat.esper.net/?channels=bukkit )
|
||||
-# Forums: http://forums.bukkit.org/forums/bukkit-help.6/
|
||||
-# Twitter: http://twitter.com/CraftBukkit
|
||||
-# Bug tracker: http://leaky.bukkit.org/
|
||||
+# IRC: #spigot @ irc.spi.gt
|
||||
+# (If this means nothing to you, just go to http://irc.spi.gt/iris/?nick=&channels=spigot )
|
||||
+# Forums: http://www.spigotmc.org/forums/help.40/
|
||||
+# Bug tracker: http://www.spigotmc.org/forums/bugs-feature-requests.8/
|
||||
|
||||
command-block-overrides: []
|
||||
aliases:
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,43 +0,0 @@
|
||||
From 4f61b2f41522cb6201606476786d796fe8544741 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Sun, 26 Jan 2014 21:48:34 +1100
|
||||
Subject: [PATCH] Configurable Ping Sample Size
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketStatusListener.java b/src/main/java/net/minecraft/server/PacketStatusListener.java
|
||||
index 7903c43..f9da452 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketStatusListener.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketStatusListener.java
|
||||
@@ -110,6 +110,13 @@ public class PacketStatusListener implements PacketStatusInListener {
|
||||
}
|
||||
|
||||
ServerPingPlayerSample playerSample = new ServerPingPlayerSample(event.getMaxPlayers(), profiles.size());
|
||||
+ // Spigot Start
|
||||
+ if ( !profiles.isEmpty() )
|
||||
+ {
|
||||
+ java.util.Collections.shuffle( profiles ); // This sucks, its inefficient but we have no simple way of doing it differently
|
||||
+ profiles = profiles.subList( 0, Math.min( profiles.size(), org.spigotmc.SpigotConfig.playerSample ) ); // Cap the sample to n (or less) displayed players, ie: Vanilla behaviour
|
||||
+ }
|
||||
+ // Spigot End
|
||||
playerSample.a(profiles.toArray(new GameProfile[profiles.size()]));
|
||||
|
||||
ServerPing ping = new ServerPing();
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index 2baed09..8eac742 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -249,4 +249,11 @@ public class SpigotConfig
|
||||
{
|
||||
commands.put( "tps", new TicksPerSecondCommand( "tps" ) );
|
||||
}
|
||||
+
|
||||
+ public static int playerSample;
|
||||
+ private static void playerSample()
|
||||
+ {
|
||||
+ playerSample = getInt( "settings.sample-count", 12 );
|
||||
+ System.out.println( "Server Ping Player Sample Count: " + playerSample );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,43 +0,0 @@
|
||||
From faafbd328712156c796413a02011413b74735cb4 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Mon, 27 Jan 2014 08:39:26 +1100
|
||||
Subject: [PATCH] Add Optional Tick Shuffling
|
||||
|
||||
This prevents players from 'gaming' the server, and strategically relogging to increase their position in the tick order.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ServerConnection.java b/src/main/java/net/minecraft/server/ServerConnection.java
|
||||
index c2194af..1d7b814 100644
|
||||
--- a/src/main/java/net/minecraft/server/ServerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/ServerConnection.java
|
||||
@@ -53,6 +53,13 @@ public class ServerConnection {
|
||||
List list = this.f;
|
||||
|
||||
synchronized (this.f) {
|
||||
+ // Spigot Start
|
||||
+ // This prevents players from 'gaming' the server, and strategically relogging to increase their position in the tick order
|
||||
+ if ( org.spigotmc.SpigotConfig.playerShuffle > 0 && MinecraftServer.currentTick % org.spigotmc.SpigotConfig.playerShuffle == 0 )
|
||||
+ {
|
||||
+ Collections.shuffle( this.f );
|
||||
+ }
|
||||
+ // Spigot End
|
||||
Iterator iterator = this.f.iterator();
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index 8eac742..e26b964 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -256,4 +256,10 @@ public class SpigotConfig
|
||||
playerSample = getInt( "settings.sample-count", 12 );
|
||||
System.out.println( "Server Ping Player Sample Count: " + playerSample );
|
||||
}
|
||||
+
|
||||
+ public static int playerShuffle;
|
||||
+ private static void playerShuffle()
|
||||
+ {
|
||||
+ playerShuffle = getInt( "settings.player-shuffle", 0 );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,38 +0,0 @@
|
||||
From 582b9d174f641b75c8e5b64e243bf65822a8de48 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Tue, 28 Jan 2014 20:35:35 +1100
|
||||
Subject: [PATCH] Allow Configuring Chunks per Packet
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
index fda1e26..c1caca7 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
@@ -214,7 +214,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
|
||||
Chunk chunk;
|
||||
|
||||
- while (iterator1.hasNext() && arraylist.size() < PacketPlayOutMapChunkBulk.c()) {
|
||||
+ while (iterator1.hasNext() && arraylist.size() < this.world.spigotConfig.maxBulkChunk) { // Spigot
|
||||
ChunkCoordIntPair chunkcoordintpair = (ChunkCoordIntPair) iterator1.next();
|
||||
|
||||
if (chunkcoordintpair != null) {
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
index ffdb33e..1290829 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
@@ -264,4 +264,11 @@ public class SpigotWorldConfig
|
||||
enableZombiePigmenPortalSpawns = getBoolean( "enable-zombie-pigmen-portal-spawns", true );
|
||||
log( "Allow Zombie Pigmen to spawn from portal blocks: " + enableZombiePigmenPortalSpawns );
|
||||
}
|
||||
+
|
||||
+ public int maxBulkChunk;
|
||||
+ private void bulkChunkCount()
|
||||
+ {
|
||||
+ maxBulkChunk = getInt( "max-bulk-chunks", 5 );
|
||||
+ log( "Sending up to " + maxBulkChunk + " chunks per packet" );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,39 +0,0 @@
|
||||
From 83cf51e11cb329bcf376392d6af7c4921a798e02 Mon Sep 17 00:00:00 2001
|
||||
From: Smove <jan@lavasurvival.net>
|
||||
Date: Sat, 1 Feb 2014 18:12:16 +1100
|
||||
Subject: [PATCH] Implement Locale Getter for Players
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
index c1caca7..ca06f60 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
@@ -30,7 +30,7 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
||||
public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
|
||||
private static final Logger bL = LogManager.getLogger();
|
||||
- private String locale = "en_US";
|
||||
+ public String locale = "en_US"; // Spigot
|
||||
public PlayerConnection playerConnection;
|
||||
public final MinecraftServer server;
|
||||
public final PlayerInteractManager playerInteractManager;
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index a220aed..9c55316 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -1358,6 +1358,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
getHandle().playerConnection.sendPacket( packet );
|
||||
}
|
||||
}
|
||||
+
|
||||
+ @Override
|
||||
+ public String getLocale()
|
||||
+ {
|
||||
+ return getHandle().locale;
|
||||
+ }
|
||||
};
|
||||
|
||||
public Player.Spigot spigot()
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,66 +0,0 @@
|
||||
From 0b68acc5fcff9bb719e524a03404d303f28d45a2 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Fri, 31 Jan 2014 11:18:34 -0500
|
||||
Subject: [PATCH] Cap Entity Collisions
|
||||
|
||||
Limit a single entity to colliding a max of configurable times per tick.
|
||||
This will alleviate issues where living entities are hoarded in 1x1 pens.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index 0ec07c2..c049cd8 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -1021,6 +1021,7 @@ public abstract class Entity {
|
||||
|
||||
public void b_(EntityHuman entityhuman) {}
|
||||
|
||||
+ int numCollisions = 0; // Spigot
|
||||
public void collide(Entity entity) {
|
||||
if (entity.passenger != this && entity.vehicle != this) {
|
||||
double d0 = entity.locX - this.locX;
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 90c0e82..33533c7 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -1491,7 +1491,9 @@ public abstract class EntityLiving extends Entity {
|
||||
List list = this.world.getEntities(this, this.boundingBox.grow(0.20000000298023224D, 0.0D, 0.20000000298023224D));
|
||||
|
||||
if (this.R() && list != null && !list.isEmpty()) { // Spigot: Add this.R() condition
|
||||
+ numCollisions -= world.spigotConfig.maxCollisionsPerEntity; // Spigot
|
||||
for (int i = 0; i < list.size(); ++i) {
|
||||
+ if (numCollisions > world.spigotConfig.maxCollisionsPerEntity) { break; } // Spigot
|
||||
Entity entity = (Entity) list.get(i);
|
||||
|
||||
// TODO better check now?
|
||||
@@ -1502,9 +1504,12 @@ public abstract class EntityLiving extends Entity {
|
||||
// CraftBukkit end
|
||||
|
||||
if (entity.R()) {
|
||||
+ entity.numCollisions++; // Spigot
|
||||
+ numCollisions++; // Spigot
|
||||
this.o(entity);
|
||||
}
|
||||
}
|
||||
+ numCollisions = 0; // Spigot
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
index 1290829..b12a086 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
@@ -271,4 +271,11 @@ public class SpigotWorldConfig
|
||||
maxBulkChunk = getInt( "max-bulk-chunks", 5 );
|
||||
log( "Sending up to " + maxBulkChunk + " chunks per packet" );
|
||||
}
|
||||
+
|
||||
+ public int maxCollisionsPerEntity;
|
||||
+ private void maxEntityCollision()
|
||||
+ {
|
||||
+ maxCollisionsPerEntity = getInt( "max-entity-collisions", 8 );
|
||||
+ log( "Max Entity Collisions: " + maxCollisionsPerEntity );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,22 +0,0 @@
|
||||
From a67cb3e9052cec5fb4c7a84ce714f8091ed1ca9d Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Thu, 6 Feb 2014 21:59:20 +0000
|
||||
Subject: [PATCH] Fix dispensing bone meal not having the correct data value
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/DispenseBehaviorBonemeal.java b/src/main/java/net/minecraft/server/DispenseBehaviorBonemeal.java
|
||||
index b547bc9..c06e9a1 100644
|
||||
--- a/src/main/java/net/minecraft/server/DispenseBehaviorBonemeal.java
|
||||
+++ b/src/main/java/net/minecraft/server/DispenseBehaviorBonemeal.java
|
||||
@@ -21,7 +21,7 @@ final class DispenseBehaviorBonemeal extends DispenseBehaviorItem {
|
||||
|
||||
// CraftBukkit start
|
||||
org.bukkit.block.Block block = world.getWorld().getBlockAt(isourceblock.getBlockX(), isourceblock.getBlockY(), isourceblock.getBlockZ());
|
||||
- CraftItemStack craftItem = CraftItemStack.asNewCraftStack(itemstack.getItem());
|
||||
+ CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemstack);
|
||||
|
||||
BlockDispenseEvent event = new BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector(0, 0, 0));
|
||||
if (!BlockDispenser.eventFired) {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,60 +0,0 @@
|
||||
From de99e5f686fd953184ff846ffcbf7034c8665245 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <md_5@live.com.au>
|
||||
Date: Sat, 8 Feb 2014 08:13:40 +0000
|
||||
Subject: [PATCH] Spam Filter Exclusions
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 28bf9d4..92f95d7 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -848,9 +848,19 @@ public class PlayerConnection implements PacketPlayInListener {
|
||||
this.minecraftServer.getPlayerList().sendMessage(chatmessage1, false);
|
||||
}
|
||||
|
||||
+ // Spigot - spam exclusions
|
||||
+ boolean counted = true;
|
||||
+ for ( String exclude : org.spigotmc.SpigotConfig.spamExclusions )
|
||||
+ {
|
||||
+ if ( exclude != null && s.startsWith( exclude ) )
|
||||
+ {
|
||||
+ counted = false;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
// CraftBukkit start - replaced with thread safe throttle
|
||||
// this.chatThrottle += 20;
|
||||
- if (chatSpamField.addAndGet(this, 20) > 200 && !this.minecraftServer.getPlayerList().isOp(this.player.getName())) {
|
||||
+ if (counted && chatSpamField.addAndGet(this, 20) > 200 && !this.minecraftServer.getPlayerList().isOp(this.player.getName())) {
|
||||
if (packetplayinchat.a()) {
|
||||
Waitable waitable = new Waitable() {
|
||||
@Override
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index e26b964..5d65983 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -6,6 +6,7 @@ import java.io.IOException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
+import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -262,4 +263,13 @@ public class SpigotConfig
|
||||
{
|
||||
playerShuffle = getInt( "settings.player-shuffle", 0 );
|
||||
}
|
||||
+
|
||||
+ public static List<String> spamExclusions;
|
||||
+ private static void spamExclusions()
|
||||
+ {
|
||||
+ spamExclusions = getList( "commands.spam-exclusions", Arrays.asList( new String[]
|
||||
+ {
|
||||
+ "/skill"
|
||||
+ } ) );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,37 +0,0 @@
|
||||
From c4865a8d3af6d5e5a9704f7dfa4cba7811c54d43 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Sun, 9 Feb 2014 14:39:01 +1100
|
||||
Subject: [PATCH] Add Option to Silence CommandBlock Console
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/CommandDispatcher.java b/src/main/java/net/minecraft/server/CommandDispatcher.java
|
||||
index 4c21643..4e4f001 100644
|
||||
--- a/src/main/java/net/minecraft/server/CommandDispatcher.java
|
||||
+++ b/src/main/java/net/minecraft/server/CommandDispatcher.java
|
||||
@@ -83,7 +83,7 @@ public class CommandDispatcher extends CommandHandler implements ICommandDispatc
|
||||
}
|
||||
}
|
||||
|
||||
- if (icommandlistener != MinecraftServer.getServer()) {
|
||||
+ if (icommandlistener != MinecraftServer.getServer() && !org.spigotmc.SpigotConfig.silentCommandBlocks) { // Spigot
|
||||
MinecraftServer.getServer().sendMessage(chatmessage);
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index 5d65983..d749f16 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -272,4 +272,10 @@ public class SpigotConfig
|
||||
"/skill"
|
||||
} ) );
|
||||
}
|
||||
+
|
||||
+ public static boolean silentCommandBlocks;
|
||||
+ private static void silentCommandBlocks()
|
||||
+ {
|
||||
+ silentCommandBlocks = getBoolean( "commands.silent-commandblock-console", false );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,26 +0,0 @@
|
||||
From 2a49f5d8789b6509a1458ccd1550a7e3fddd4f73 Mon Sep 17 00:00:00 2001
|
||||
From: Tux <write@imaginarycode.com>
|
||||
Date: Sun, 9 Feb 2014 14:03:03 -0500
|
||||
Subject: [PATCH] Add support for fetching hidden players
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 9c55316..024cf9c 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -1364,6 +1364,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
{
|
||||
return getHandle().locale;
|
||||
}
|
||||
+
|
||||
+ @Override
|
||||
+ public Set<Player> getHiddenPlayers()
|
||||
+ {
|
||||
+ return java.util.Collections.unmodifiableSet( new HashSet<Player>( hiddenPlayers.values() ) );
|
||||
+ }
|
||||
};
|
||||
|
||||
public Player.Spigot spigot()
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,37 +0,0 @@
|
||||
From 6cac3a83109bb7903794a9772254b5968a5a2d9e Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Wed, 12 Feb 2014 18:18:01 +1100
|
||||
Subject: [PATCH] Allow Disabling Creative Item Filter
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 92f95d7..eb5b84e 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -1501,7 +1501,7 @@ public class PlayerConnection implements PacketPlayInListener {
|
||||
ItemStack itemstack = packetplayinsetcreativeslot.getItemStack();
|
||||
boolean flag1 = packetplayinsetcreativeslot.c() >= 1 && packetplayinsetcreativeslot.c() < 36 + PlayerInventory.getHotbarSize();
|
||||
// CraftBukkit - Add invalidItems check
|
||||
- boolean flag2 = itemstack == null || itemstack.getItem() != null && !invalidItems.contains(Item.b(itemstack.getItem()));
|
||||
+ boolean flag2 = itemstack == null || itemstack.getItem() != null && (!invalidItems.contains(Item.b(itemstack.getItem())) || !org.spigotmc.SpigotConfig.filterCreativeItems); // Spigot
|
||||
boolean flag3 = itemstack == null || itemstack.getData() >= 0 && itemstack.count <= 64 && itemstack.count > 0;
|
||||
|
||||
// CraftBukkit start - Call click event
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index d749f16..0d0c7b0 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -278,4 +278,10 @@ public class SpigotConfig
|
||||
{
|
||||
silentCommandBlocks = getBoolean( "commands.silent-commandblock-console", false );
|
||||
}
|
||||
+
|
||||
+ public static boolean filterCreativeItems;
|
||||
+ private static void filterCreativeItems()
|
||||
+ {
|
||||
+ filterCreativeItems = getBoolean( "settings.filter-creative-items", true );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,21 +0,0 @@
|
||||
From 89786f9d45d487551d3fce889b99928c86d5189e Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Wed, 12 Feb 2014 20:02:58 +1100
|
||||
Subject: [PATCH] Cap Channel Registrations
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 024cf9c..3010245 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -1046,6 +1046,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
}
|
||||
|
||||
public void addChannel(String channel) {
|
||||
+ com.google.common.base.Preconditions.checkState( channels.size() < 128, "Too many channels registered" ); // Spigot
|
||||
if (channels.add(channel)) {
|
||||
server.getPluginManager().callEvent(new PlayerRegisterChannelEvent(this, channel));
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,174 +0,0 @@
|
||||
From 92df26321a72fc86c2202de5c1e2a8c252593a9b Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Wed, 12 Feb 2014 20:44:14 +0000
|
||||
Subject: [PATCH] Allow vanilla commands to be the main version of a command
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index 76e43ba..5d8c557 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -116,6 +116,7 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.bukkit.command.PluginCommand;
|
||||
import org.bukkit.command.SimpleCommandMap;
|
||||
+import org.bukkit.command.defaults.VanillaCommand;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.configuration.serialization.ConfigurationSerialization;
|
||||
@@ -381,8 +382,11 @@ public final class CraftServer implements Server {
|
||||
}
|
||||
|
||||
if (type == PluginLoadOrder.POSTWORLD) {
|
||||
+ // Spigot start - Allow vanilla commands to be forced to be the main command
|
||||
+ setVanillaCommands(true);
|
||||
commandMap.setFallbackCommands();
|
||||
- setVanillaCommands();
|
||||
+ setVanillaCommands(false);
|
||||
+ // Spigot end
|
||||
commandMap.registerServerAliases();
|
||||
loadCustomPermissions();
|
||||
DefaultPermissions.registerCorePermissions();
|
||||
@@ -394,51 +398,64 @@ public final class CraftServer implements Server {
|
||||
pluginManager.disablePlugins();
|
||||
}
|
||||
|
||||
- private void setVanillaCommands() {
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandAchievement(), "/achievement give <stat_name> [player]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandBan(), "/ban <playername> [reason]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandBanIp(), "/ban-ip <ip-address|playername>"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandBanList(), "/banlist [ips]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandClear(), "/clear <playername> [item] [metadata]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandGamemodeDefault(), "/defaultgamemode <mode>"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandDeop(), "/deop <playername>"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandDifficulty(), "/difficulty <new difficulty>"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandEffect(), "/effect <player> <effect|clear> [seconds] [amplifier]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandEnchant(), "/enchant <playername> <enchantment ID> [enchantment level]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandGamemode(), "/gamemode <mode> [player]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandGamerule(), "/gamerule <rulename> [true|false]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandGive(), "/give <playername> <item> [amount] [metadata] [dataTag]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandHelp(), "/help [page|commandname]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandIdleTimeout(), "/setidletimeout <Minutes until kick>"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandKick(), "/kick <playername> [reason]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandKill(), "/kill [playername]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandList(), "/list"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandMe(), "/me <actiontext>"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandOp(), "/op <playername>"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandPardon(), "/pardon <playername>"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandPardonIP(), "/pardon-ip <ip-address>"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandPlaySound(), "/playsound <sound> <playername> [x] [y] [z] [volume] [pitch] [minimumVolume]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandSay(), "/say <message>"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandScoreboard(), "/scoreboard"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandSeed(), "/seed"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandSetBlock(), "/setblock <x> <y> <z> <tilename> [datavalue] [oldblockHandling] [dataTag]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandSetWorldSpawn(), "/setworldspawn [x] [y] [z]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandSpawnpoint(), "/spawnpoint <playername> [x] [y] [z]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandSpreadPlayers(), "/spreadplayers <x> <z> [spreadDistance] [maxRange] [respectTeams] <playernames>"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandSummon(), "/summon <EntityName> [x] [y] [z] [dataTag]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandTp(), "/tp [player] <target>\n/tp [player] <x> <y> <z>"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandTell(), "/tell <playername> <message>"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandTellRaw(), "/tellraw <playername> <raw message>"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandTestFor(), "/testfor <playername | selector> [dataTag]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandTestForBlock(), "/testforblock <x> <y> <z> <tilename> [datavalue] [dataTag]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandTime(), "/time set <value>\n/time add <value>"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandToggleDownfall(), "/toggledownfall"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandWeather(), "/weather <clear/rain/thunder> [duration in seconds]"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandWhitelist(), "/whitelist (add|remove) <player>\n/whitelist (on|off|list|reload)"));
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandXp(), "/xp <amount> [player]\n/xp <amount>L [player]"));
|
||||
+ // Spigot start
|
||||
+ private void tryRegister(VanillaCommandWrapper commandWrapper, boolean first) {
|
||||
+ if (org.spigotmc.SpigotConfig.replaceCommands.contains( commandWrapper.getName() ) ) {
|
||||
+ if (first) {
|
||||
+ commandMap.register( "minecraft", commandWrapper );
|
||||
+ }
|
||||
+ } else if (!first) {
|
||||
+ commandMap.register( "minecraft", commandWrapper );
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ private void setVanillaCommands(boolean first)
|
||||
+ {
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandAchievement(), "/achievement give <stat_name> [player]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandBan(), "/ban <playername> [reason]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandBanIp(), "/ban-ip <ip-address|playername>" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandBanList(), "/banlist [ips]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandClear(), "/clear <playername> [item] [metadata]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandGamemodeDefault(), "/defaultgamemode <mode>" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandDeop(), "/deop <playername>" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandDifficulty(), "/difficulty <new difficulty>" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandEffect(), "/effect <player> <effect|clear> [seconds] [amplifier]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandEnchant(), "/enchant <playername> <enchantment ID> [enchantment level]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandGamemode(), "/gamemode <mode> [player]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandGamerule(), "/gamerule <rulename> [true|false]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandGive(), "/give <playername> <item> [amount] [metadata] [dataTag]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandHelp(), "/help [page|commandname]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandIdleTimeout(), "/setidletimeout <Minutes until kick>" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandKick(), "/kick <playername> [reason]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandKill(), "/kill [playername]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandList(), "/list" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandMe(), "/me <actiontext>" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandOp(), "/op <playername>" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandPardon(), "/pardon <playername>" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandPardonIP(), "/pardon-ip <ip-address>" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandPlaySound(), "/playsound <sound> <playername> [x] [y] [z] [volume] [pitch] [minimumVolume]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandSay(), "/say <message>" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandScoreboard(), "/scoreboard" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandSeed(), "/seed" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandSetBlock(), "/setblock <x> <y> <z> <tilename> [datavalue] [oldblockHandling] [dataTag]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandSetWorldSpawn(), "/setworldspawn [x] [y] [z]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandSpawnpoint(), "/spawnpoint <playername> [x] [y] [z]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandSpreadPlayers(), "/spreadplayers <x> <z> [spreadDistance] [maxRange] [respectTeams] <playernames>" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandSummon(), "/summon <EntityName> [x] [y] [z] [dataTag]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandTp(), "/tp [player] <target>\n/tp [player] <x> <y> <z>" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandTell(), "/tell <playername> <message>" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandTellRaw(), "/tellraw <playername> <raw message>" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandTestFor(), "/testfor <playername | selector> [dataTag]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandTestForBlock(), "/testforblock <x> <y> <z> <tilename> [datavalue] [dataTag]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandTime(), "/time set <value>\n/time add <value>" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandToggleDownfall(), "/toggledownfall" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandWeather(), "/weather <clear/rain/thunder> [duration in seconds]" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandWhitelist(), "/whitelist (add|remove) <player>\n/whitelist (on|off|list|reload)" ), first );
|
||||
+ tryRegister( new VanillaCommandWrapper( new CommandXp(), "/xp <amount> [player]\n/xp <amount>L [player]" ), first );
|
||||
// This is what is in the lang file, I swear.
|
||||
- commandMap.register("minecraft", new VanillaCommandWrapper(new CommandNetstat(), "/list"));
|
||||
+ tryRegister( new VanillaCommandWrapper(new CommandNetstat(), "/list"), first );
|
||||
}
|
||||
+ // Spigot end
|
||||
|
||||
private void loadPlugin(Plugin plugin) {
|
||||
try {
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index 0d0c7b0..4703768 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -8,8 +8,10 @@ import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
+import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
+import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import gnu.trove.map.hash.TObjectIntHashMap;
|
||||
@@ -284,4 +286,16 @@ public class SpigotConfig
|
||||
{
|
||||
filterCreativeItems = getBoolean( "settings.filter-creative-items", true );
|
||||
}
|
||||
+
|
||||
+ public static Set<String> replaceCommands;
|
||||
+ private static void replaceCommands()
|
||||
+ {
|
||||
+ if ( config.contains( "replace-commands" ) )
|
||||
+ {
|
||||
+ set( "commands.replace-commands", config.getStringList( "replace-commands" ) );
|
||||
+ config.set( "replace-commands", null );
|
||||
+ }
|
||||
+ replaceCommands = new HashSet<String>( (List<String>) getList( "commands.replace-commands",
|
||||
+ Arrays.asList( "setblock", "summon", "testforblock", "tellraw" ) ) );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,23 +0,0 @@
|
||||
From d470ed1e358e6167ed990cec13e85ef0e07e6028 Mon Sep 17 00:00:00 2001
|
||||
From: hcherndon <hcherndon@gmail.com>
|
||||
Date: Sat, 15 Feb 2014 01:51:20 -0600
|
||||
Subject: [PATCH] Unfinalize the isDisconnected() method by bukkit.
|
||||
|
||||
This would literally mean the world to me. You have no idea how much this method being final is fucking me over right now. (Working with NPC's and what not.)
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 0257a00..2603e85 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -1887,7 +1887,7 @@ public class PlayerConnection implements PacketPlayInListener {
|
||||
}
|
||||
|
||||
// CraftBukkit start - Add "isDisconnected" method
|
||||
- public final boolean isDisconnected() {
|
||||
+ public boolean isDisconnected() {
|
||||
return !this.player.joining && !NetworkManager.a(this.networkManager).config().isAutoRead();
|
||||
}
|
||||
// CraftBukkit end
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,105 +0,0 @@
|
||||
From 43af10b048158eeffddb985239c05aee140e7fc3 Mon Sep 17 00:00:00 2001
|
||||
From: drXor <mcyoungsota@gmail.com>
|
||||
Date: Sun, 23 Feb 2014 16:16:59 -0400
|
||||
Subject: [PATCH] Implement Silenceable Lightning API
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLightning.java b/src/main/java/net/minecraft/server/EntityLightning.java
|
||||
index 2fd88c0..35806d1 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLightning.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLightning.java
|
||||
@@ -13,6 +13,8 @@ public class EntityLightning extends EntityWeather {
|
||||
// CraftBukkit start
|
||||
public boolean isEffect = false;
|
||||
|
||||
+ public boolean isSilent = false; // Spigot
|
||||
+
|
||||
public EntityLightning(World world, double d0, double d1, double d2) {
|
||||
this(world, d0, d1, d2, false);
|
||||
}
|
||||
@@ -60,9 +62,17 @@ public class EntityLightning extends EntityWeather {
|
||||
}
|
||||
}
|
||||
|
||||
+ // Spigot start
|
||||
+ public EntityLightning(World world, double d0, double d1, double d2, boolean isEffect, boolean isSilent)
|
||||
+ {
|
||||
+ this( world, d0, d1, d2, isEffect );
|
||||
+ this.isSilent = isSilent;
|
||||
+ }
|
||||
+ // Spigot end
|
||||
+
|
||||
public void h() {
|
||||
super.h();
|
||||
- if (this.lifeTicks == 2) {
|
||||
+ if (!isSilent && this.lifeTicks == 2) { // Spigot
|
||||
this.world.makeSound(this.locX, this.locY, this.locZ, "ambient.weather.thunder", 10000.0F, 0.8F + this.random.nextFloat() * 0.2F);
|
||||
this.world.makeSound(this.locX, this.locY, this.locZ, "random.explode", 2.0F, 0.5F + this.random.nextFloat() * 0.2F);
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index 827ec16..154b868 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -1326,6 +1326,22 @@ public class CraftWorld implements World {
|
||||
{
|
||||
CraftWorld.this.playEffect( location, effect, 0 );
|
||||
}
|
||||
+
|
||||
+ @Override
|
||||
+ public LightningStrike strikeLightning(Location loc, boolean isSilent)
|
||||
+ {
|
||||
+ EntityLightning lightning = new EntityLightning( world, loc.getX(), loc.getY(), loc.getZ(), false, isSilent );
|
||||
+ world.strikeLightning( lightning );
|
||||
+ return new CraftLightningStrike( server, lightning );
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public LightningStrike strikeLightningEffect(Location loc, boolean isSilent)
|
||||
+ {
|
||||
+ EntityLightning lightning = new EntityLightning( world, loc.getX(), loc.getY(), loc.getZ(), true, isSilent );
|
||||
+ world.strikeLightning( lightning );
|
||||
+ return new CraftLightningStrike( server, lightning );
|
||||
+ }
|
||||
};
|
||||
|
||||
public Spigot spigot()
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java
|
||||
index 64e346d..be4f10f 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java
|
||||
@@ -1,7 +1,9 @@
|
||||
package org.bukkit.craftbukkit.entity;
|
||||
|
||||
import net.minecraft.server.EntityLightning;
|
||||
+
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
+import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LightningStrike;
|
||||
|
||||
@@ -27,4 +29,22 @@ public class CraftLightningStrike extends CraftEntity implements LightningStrike
|
||||
public EntityType getType() {
|
||||
return EntityType.LIGHTNING;
|
||||
}
|
||||
+
|
||||
+ // Spigot start
|
||||
+ private final LightningStrike.Spigot spigot = new LightningStrike.Spigot()
|
||||
+ {
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean isSilent()
|
||||
+ {
|
||||
+ return getHandle().isSilent;
|
||||
+ }
|
||||
+
|
||||
+ };
|
||||
+
|
||||
+ public LightningStrike.Spigot spigot()
|
||||
+ {
|
||||
+ return this.spigot;
|
||||
+ }
|
||||
+ // Spigot end
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,35 +0,0 @@
|
||||
From b141539e09000546904ce74293f645189cc32b56 Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Wed, 26 Feb 2014 14:45:22 +0000
|
||||
Subject: [PATCH] Normalize spaces on when reading a chat packet
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayInChat.java b/src/main/java/net/minecraft/server/PacketPlayInChat.java
|
||||
index d419f0f..b26c290 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketPlayInChat.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketPlayInChat.java
|
||||
@@ -17,7 +17,7 @@ public class PacketPlayInChat extends Packet {
|
||||
}
|
||||
|
||||
public void a(PacketDataSerializer packetdataserializer) throws IOException { // CraftBukkit - added throws
|
||||
- this.message = packetdataserializer.c(100);
|
||||
+ this.message = org.apache.commons.lang.StringUtils.normalizeSpace( packetdataserializer.c( 100 ) ); // Spigot
|
||||
}
|
||||
|
||||
public void b(PacketDataSerializer packetdataserializer) throws IOException { // CraftBukkit - added throws
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index ed144b5..1fdec85 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -791,7 +791,7 @@ public class PlayerConnection implements PacketPlayInListener {
|
||||
this.player.v();
|
||||
String s = packetplayinchat.c();
|
||||
|
||||
- s = StringUtils.normalizeSpace(s);
|
||||
+ // s = StringUtils.normalizeSpace(s); Spigot - Moved to PacketPlayInChat
|
||||
|
||||
for (int i = 0; i < s.length(); ++i) {
|
||||
if (!SharedConstants.isAllowedChatCharacter(s.charAt(i))) {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,33 +0,0 @@
|
||||
From 8f25af043107809146a1985032f907e329261a15 Mon Sep 17 00:00:00 2001
|
||||
From: FrozenBrain <carstenbamsti@googlemail.com>
|
||||
Date: Sun, 2 Mar 2014 21:13:46 +0100
|
||||
Subject: [PATCH] Use one PermissibleBase for all Command Blocks
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/command/ServerCommandSender.java b/src/main/java/org/bukkit/craftbukkit/command/ServerCommandSender.java
|
||||
index 1314c74..b339cf3 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/command/ServerCommandSender.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/command/ServerCommandSender.java
|
||||
@@ -12,9 +12,18 @@ import org.bukkit.plugin.Plugin;
|
||||
import java.util.Set;
|
||||
|
||||
public abstract class ServerCommandSender implements CommandSender {
|
||||
- private final PermissibleBase perm = new PermissibleBase(this);
|
||||
+ private static PermissibleBase blockPermInst;
|
||||
+ private final PermissibleBase perm;
|
||||
|
||||
public ServerCommandSender() {
|
||||
+ if (this instanceof CraftBlockCommandSender) {
|
||||
+ if (blockPermInst == null) {
|
||||
+ blockPermInst = new PermissibleBase(this);
|
||||
+ }
|
||||
+ this.perm = blockPermInst;
|
||||
+ } else {
|
||||
+ this.perm = new PermissibleBase(this);
|
||||
+ }
|
||||
}
|
||||
|
||||
public boolean isPermissionSet(String name) {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,21 +0,0 @@
|
||||
From aa3ab8bdcda4e19b4cda8f5062c88f5aff0662b8 Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Wed, 5 Mar 2014 20:27:27 +0000
|
||||
Subject: [PATCH] Prevent hoppers from loading chunks
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/TileEntityHopper.java b/src/main/java/net/minecraft/server/TileEntityHopper.java
|
||||
index d7a3178..b6718bf 100644
|
||||
--- a/src/main/java/net/minecraft/server/TileEntityHopper.java
|
||||
+++ b/src/main/java/net/minecraft/server/TileEntityHopper.java
|
||||
@@ -540,6 +540,7 @@ public class TileEntityHopper extends TileEntity implements IHopper {
|
||||
int i = MathHelper.floor(d0);
|
||||
int j = MathHelper.floor(d1);
|
||||
int k = MathHelper.floor(d2);
|
||||
+ if ( !world.isLoaded( i, j, k ) ) return null; // Spigot
|
||||
TileEntity tileentity = world.getTileEntity(i, j, k);
|
||||
|
||||
if (tileentity != null && tileentity instanceof IInventory) {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,79 +0,0 @@
|
||||
From 3a7268352455d69debcfd9876010a2eacc948737 Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Mon, 10 Mar 2014 09:03:28 +1100
|
||||
Subject: [PATCH] Guard Entity List
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index a00075a..113b376 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -29,7 +29,32 @@ import org.bukkit.event.weather.ThunderChangeEvent;
|
||||
public abstract class World implements IBlockAccess {
|
||||
|
||||
public boolean d;
|
||||
- public List entityList = new ArrayList();
|
||||
+ // Spigot start - guard entity list from removals
|
||||
+ public List entityList = new ArrayList()
|
||||
+ {
|
||||
+ @Override
|
||||
+ public Object remove(int index)
|
||||
+ {
|
||||
+ guard();
|
||||
+ return super.remove( index );
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean remove(Object o)
|
||||
+ {
|
||||
+ guard();
|
||||
+ return super.remove( o );
|
||||
+ }
|
||||
+
|
||||
+ private void guard()
|
||||
+ {
|
||||
+ if ( guardEntityList )
|
||||
+ {
|
||||
+ throw new java.util.ConcurrentModificationException();
|
||||
+ }
|
||||
+ }
|
||||
+ };
|
||||
+ // Spigot end
|
||||
protected List f = new ArrayList();
|
||||
public Set tileEntityList = new HashSet(); // CraftBukkit - ArrayList -> HashSet
|
||||
private List a = new ArrayList();
|
||||
@@ -77,6 +102,7 @@ public abstract class World implements IBlockAccess {
|
||||
int[] I;
|
||||
|
||||
// Spigot start
|
||||
+ private boolean guardEntityList;
|
||||
protected final gnu.trove.map.hash.TLongShortHashMap chunkTickList;
|
||||
protected float growthOdds = 100;
|
||||
protected float modifiedOdds = 100;
|
||||
@@ -1269,6 +1295,7 @@ public abstract class World implements IBlockAccess {
|
||||
|
||||
org.spigotmc.ActivationRange.activateEntities(this); // Spigot
|
||||
timings.entityTick.startTiming(); // Spigot
|
||||
+ guardEntityList = true; // Spigot
|
||||
// CraftBukkit start - Use field for loop variable
|
||||
for (this.tickPosition = 0; this.tickPosition < this.entityList.size(); ++this.tickPosition) {
|
||||
entity = (Entity) this.entityList.get(this.tickPosition);
|
||||
@@ -1317,12 +1344,15 @@ public abstract class World implements IBlockAccess {
|
||||
this.getChunkAt(j, k).b(entity);
|
||||
}
|
||||
|
||||
+ guardEntityList = false; // Spigot
|
||||
this.entityList.remove(this.tickPosition--); // CraftBukkit - Use field for loop variable
|
||||
+ guardEntityList = true; // Spigot
|
||||
this.b(entity);
|
||||
}
|
||||
|
||||
this.methodProfiler.b();
|
||||
}
|
||||
+ guardEntityList = false; // Spigot
|
||||
|
||||
timings.entityTick.stopTiming(); // Spigot
|
||||
this.methodProfiler.c("blockEntities");
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,54 +0,0 @@
|
||||
From e0af3e9026f4324b247dd25f41f460bce8d117ad Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Tue, 14 Jan 2014 20:11:25 +0000
|
||||
Subject: [PATCH] Fix ConcurrentModificationException while being idle kicked
|
||||
in a vehicle
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 113b376..2f9f300 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -1042,23 +1042,24 @@ public abstract class World implements IBlockAccess {
|
||||
this.players.remove(entity);
|
||||
this.everyoneSleeping();
|
||||
}
|
||||
-
|
||||
- int i = entity.ah;
|
||||
- int j = entity.aj;
|
||||
-
|
||||
- if (entity.ag && this.isChunkLoaded(i, j)) {
|
||||
- this.getChunkAt(i, j).b(entity);
|
||||
- }
|
||||
-
|
||||
- // CraftBukkit start - Decrement loop variable field if we've already ticked this entity
|
||||
- int index = this.entityList.indexOf(entity);
|
||||
- if (index != -1) {
|
||||
- if (index <= this.tickPosition) {
|
||||
- this.tickPosition--;
|
||||
+ // Spigot start
|
||||
+ if (!guardEntityList) { // It will get removed after the tick if we are ticking
|
||||
+ int i = entity.ah;
|
||||
+ int j = entity.aj;
|
||||
+ if (entity.ag && this.isChunkLoaded(i, j)) {
|
||||
+ this.getChunkAt(i, j).b(entity);
|
||||
}
|
||||
- this.entityList.remove(index);
|
||||
+ // CraftBukkit start - Decrement loop variable field if we've already ticked this entity
|
||||
+ int index = this.entityList.indexOf(entity);
|
||||
+ if (index != -1) {
|
||||
+ if (index <= this.tickPosition) {
|
||||
+ this.tickPosition--;
|
||||
+ }
|
||||
+ this.entityList.remove(index);
|
||||
+ }
|
||||
+ // CraftBukkit end
|
||||
}
|
||||
- // CraftBukkit end
|
||||
+ // Spigot end
|
||||
|
||||
this.b(entity);
|
||||
}
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,36 +0,0 @@
|
||||
From 8af19cc627974e2aff803c3276dff058f7ca4f52 Mon Sep 17 00:00:00 2001
|
||||
From: drXor <mcyoungsota@gmail.com>
|
||||
Date: Tue, 25 Feb 2014 15:15:26 -0400
|
||||
Subject: [PATCH] Cancellable WitherSkull potion effect
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityWitherSkull.java b/src/main/java/net/minecraft/server/EntityWitherSkull.java
|
||||
index d749175..b8c3cef 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityWitherSkull.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityWitherSkull.java
|
||||
@@ -35,15 +35,19 @@ public class EntityWitherSkull extends EntityFireball {
|
||||
protected void a(MovingObjectPosition movingobjectposition) {
|
||||
if (!this.world.isStatic) {
|
||||
if (movingobjectposition.entity != null) {
|
||||
+ // Spigot start
|
||||
+ boolean didDamage = false;
|
||||
if (this.shooter != null) {
|
||||
- if (movingobjectposition.entity.damageEntity(DamageSource.mobAttack(this.shooter), 8.0F) && !movingobjectposition.entity.isAlive()) {
|
||||
+ didDamage = movingobjectposition.entity.damageEntity(DamageSource.mobAttack(this.shooter), 8.0F);
|
||||
+ if (didDamage && !movingobjectposition.entity.isAlive()) {
|
||||
this.shooter.heal(5.0F, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.WITHER); // CraftBukkit
|
||||
}
|
||||
} else {
|
||||
- movingobjectposition.entity.damageEntity(DamageSource.MAGIC, 5.0F);
|
||||
+ didDamage = movingobjectposition.entity.damageEntity(DamageSource.MAGIC, 5.0F);
|
||||
}
|
||||
|
||||
- if (movingobjectposition.entity instanceof EntityLiving) {
|
||||
+ if (didDamage && movingobjectposition.entity instanceof EntityLiving) {
|
||||
+ // Spigot end
|
||||
byte b0 = 0;
|
||||
|
||||
if (this.world.difficulty == EnumDifficulty.NORMAL) {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,187 +0,0 @@
|
||||
From bd80ed0c8452bc5386e1564cf0aef2de6bc8cfde Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Sat, 15 Mar 2014 14:34:03 +1100
|
||||
Subject: [PATCH] Optimize Player Lookup
|
||||
|
||||
Optimize player lookup and various player operations. We mainly do this by keeping a map instead of iterating through all players. We also speed up the duplicate login check and a few other checks by simply checking for one matching player.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
|
||||
index 0d6ffef..c4698d4 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerList.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerList.java
|
||||
@@ -56,6 +56,25 @@ public abstract class PlayerList {
|
||||
private boolean o;
|
||||
private int p;
|
||||
|
||||
+ // Spigot Start
|
||||
+ private final Map<String, EntityPlayer> playerMap = new java.util.HashMap<String, EntityPlayer>();
|
||||
+
|
||||
+ private void removePlayer(EntityPlayer player)
|
||||
+ {
|
||||
+ playerMap.remove( player.getName().toLowerCase() );
|
||||
+ }
|
||||
+
|
||||
+ private void addPlayer(EntityPlayer player)
|
||||
+ {
|
||||
+ playerMap.put( player.getName().toLowerCase(), player );
|
||||
+ }
|
||||
+
|
||||
+ private EntityPlayer getPlayerByName(String name)
|
||||
+ {
|
||||
+ return playerMap.get( name.toLowerCase() );
|
||||
+ }
|
||||
+ // Spigot End
|
||||
+
|
||||
// CraftBukkit start
|
||||
private CraftServer cserver;
|
||||
|
||||
@@ -222,6 +241,7 @@ public abstract class PlayerList {
|
||||
cserver.detectListNameConflict(entityplayer); // CraftBukkit
|
||||
// this.sendAll(new PacketPlayOutPlayerInfo(entityplayer.getName(), true, 1000)); // CraftBukkit - replaced with loop below
|
||||
this.players.add(entityplayer);
|
||||
+ addPlayer( entityplayer ); // Spigot
|
||||
WorldServer worldserver = this.server.getWorldServer(entityplayer.dimension);
|
||||
|
||||
// CraftBukkit start
|
||||
@@ -296,6 +316,7 @@ public abstract class PlayerList {
|
||||
worldserver.kill(entityplayer);
|
||||
worldserver.getPlayerChunkMap().removePlayer(entityplayer);
|
||||
this.players.remove(entityplayer);
|
||||
+ removePlayer( entityplayer ); // Spigot
|
||||
this.j.remove(entityplayer.getName());
|
||||
ChunkIOExecutor.adjustPoolSize(this.getPlayerCount()); // CraftBukkit
|
||||
|
||||
@@ -374,23 +395,14 @@ public abstract class PlayerList {
|
||||
}
|
||||
|
||||
public EntityPlayer processLogin(GameProfile gameprofile, EntityPlayer player) { // CraftBukkit - added EntityPlayer
|
||||
- ArrayList arraylist = new ArrayList();
|
||||
-
|
||||
- EntityPlayer entityplayer;
|
||||
-
|
||||
- for (int i = 0; i < this.players.size(); ++i) {
|
||||
- entityplayer = (EntityPlayer) this.players.get(i);
|
||||
- if (entityplayer.getName().equalsIgnoreCase(gameprofile.getName())) {
|
||||
- arraylist.add(entityplayer);
|
||||
- }
|
||||
- }
|
||||
+ // Spigot Start
|
||||
+ EntityPlayer entityplayer = getPlayer( gameprofile.getName() );
|
||||
|
||||
- Iterator iterator = arraylist.iterator();
|
||||
-
|
||||
- while (iterator.hasNext()) {
|
||||
- entityplayer = (EntityPlayer) iterator.next();
|
||||
- entityplayer.playerConnection.disconnect("You logged in from another location");
|
||||
+ if ( entityplayer != null )
|
||||
+ {
|
||||
+ entityplayer.playerConnection.disconnect( "You logged in from another location" );
|
||||
}
|
||||
+ // Spigot End
|
||||
|
||||
/* CraftBukkit start
|
||||
Object object;
|
||||
@@ -867,19 +879,7 @@ public abstract class PlayerList {
|
||||
}
|
||||
|
||||
public EntityPlayer getPlayer(String s) {
|
||||
- Iterator iterator = this.players.iterator();
|
||||
-
|
||||
- EntityPlayer entityplayer;
|
||||
-
|
||||
- do {
|
||||
- if (!iterator.hasNext()) {
|
||||
- return null;
|
||||
- }
|
||||
-
|
||||
- entityplayer = (EntityPlayer) iterator.next();
|
||||
- } while (!entityplayer.getName().equalsIgnoreCase(s));
|
||||
-
|
||||
- return entityplayer;
|
||||
+ return getPlayerByName( s ); // Spigot
|
||||
}
|
||||
|
||||
public List a(ChunkCoordinates chunkcoordinates, int i, int j, int k, int l, int i1, int j1, Map map, String s, String s1, World world) {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
|
||||
index 24b0066..7fbbcec 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java
|
||||
@@ -116,14 +116,10 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
- for (Object obj : server.getHandle().players) {
|
||||
- EntityPlayer player = (EntityPlayer) obj;
|
||||
- if (player.getName().equalsIgnoreCase(getName())) {
|
||||
- return (player.playerConnection != null) ? player.playerConnection.getPlayer() : null;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- return null;
|
||||
+ // Spigot Start
|
||||
+ EntityPlayer player = server.getHandle().getPlayer( name );
|
||||
+ return ( player != null && player.playerConnection != null ) ? player.getBukkitEntity() : null;
|
||||
+ // Spigot End
|
||||
}
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index 5d8c557..707410b 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -502,6 +502,13 @@ public final class CraftServer implements Server {
|
||||
public Player getPlayer(final String name) {
|
||||
Validate.notNull(name, "Name cannot be null");
|
||||
|
||||
+ // Spigot Start
|
||||
+ Player directLookup = getPlayerExact( name );
|
||||
+ if ( directLookup != null )
|
||||
+ {
|
||||
+ return directLookup;
|
||||
+ }
|
||||
+ // Spigot End
|
||||
Player[] players = getOnlinePlayers();
|
||||
|
||||
Player found = null;
|
||||
@@ -523,15 +530,10 @@ public final class CraftServer implements Server {
|
||||
public Player getPlayerExact(String name) {
|
||||
Validate.notNull(name, "Name cannot be null");
|
||||
|
||||
- String lname = name.toLowerCase();
|
||||
-
|
||||
- for (Player player : getOnlinePlayers()) {
|
||||
- if (player.getName().equalsIgnoreCase(lname)) {
|
||||
- return player;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- return null;
|
||||
+ // Spigot Start
|
||||
+ EntityPlayer entityPlayer = playerList.getPlayer( name );
|
||||
+ return ( entityPlayer != null ) ? entityPlayer.getBukkitEntity() : null;
|
||||
+ // Spigot End
|
||||
}
|
||||
|
||||
// TODO: In 1.7.6+ this should use the server's UUID->EntityPlayer map
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 3010245..2ecde57 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -95,13 +95,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
}
|
||||
|
||||
public boolean isOnline() {
|
||||
- for (Object obj : server.getHandle().players) {
|
||||
- EntityPlayer player = (EntityPlayer) obj;
|
||||
- if (player.getName().equalsIgnoreCase(getName())) {
|
||||
- return true;
|
||||
- }
|
||||
- }
|
||||
- return false;
|
||||
+ return server.getHandle().getPlayer( getName() ) != null; // Spigot
|
||||
}
|
||||
|
||||
public InetSocketAddress getAddress() {
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,53 +0,0 @@
|
||||
From 9736476e1048695b00a61efdda4abe1c7d098f31 Mon Sep 17 00:00:00 2001
|
||||
From: drXor <mcyoungsota@gmail.com>
|
||||
Date: Sat, 15 Mar 2014 01:30:05 -0400
|
||||
Subject: [PATCH] Descriptive kick reasons instead of Nope!
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index c049cd8..37a9cae 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -218,7 +218,7 @@ public abstract class Entity {
|
||||
if ((f == Float.POSITIVE_INFINITY) || (f == Float.NEGATIVE_INFINITY)) {
|
||||
if (this instanceof EntityPlayer) {
|
||||
this.world.getServer().getLogger().warning(((CraftPlayer) this.getBukkitEntity()).getName() + " was caught trying to crash the server with an invalid yaw");
|
||||
- ((CraftPlayer) this.getBukkitEntity()).kickPlayer("Nope");
|
||||
+ ((CraftPlayer) this.getBukkitEntity()).kickPlayer("Infinite yaw (Hacking?)"); //Spigot "Nope" -> Descriptive reason
|
||||
}
|
||||
f = 0;
|
||||
}
|
||||
@@ -231,7 +231,7 @@ public abstract class Entity {
|
||||
if ((f1 == Float.POSITIVE_INFINITY) || (f1 == Float.NEGATIVE_INFINITY)) {
|
||||
if (this instanceof EntityPlayer) {
|
||||
this.world.getServer().getLogger().warning(((CraftPlayer) this.getBukkitEntity()).getName() + " was caught trying to crash the server with an invalid pitch");
|
||||
- ((CraftPlayer) this.getBukkitEntity()).kickPlayer("Nope");
|
||||
+ ((CraftPlayer) this.getBukkitEntity()).kickPlayer("Infinite pitch (Hacking?)"); //Spigot "Nope" -> Descriptive reason
|
||||
}
|
||||
f1 = 0;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 1fdec85..b2cde75 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -183,7 +183,7 @@ public class PlayerConnection implements PacketPlayInListener {
|
||||
// CraftBukkit start - Check for NaN
|
||||
if (Double.isNaN(packetplayinflying.x) || Double.isNaN(packetplayinflying.y) || Double.isNaN(packetplayinflying.z) || Double.isNaN(packetplayinflying.stance)) {
|
||||
c.warn(player.getName() + " was caught trying to crash the server with an invalid position.");
|
||||
- getPlayer().kickPlayer("Nope!");
|
||||
+ getPlayer().kickPlayer("NaN in position (Hacking?)"); //Spigot "Nope" -> Descriptive reason
|
||||
return;
|
||||
}
|
||||
// CraftBukkit end
|
||||
@@ -777,7 +777,7 @@ public class PlayerConnection implements PacketPlayInListener {
|
||||
this.player.v();
|
||||
} else {
|
||||
c.warn(this.player.getName() + " tried to set an invalid carried item");
|
||||
- this.disconnect("Nope!"); // CraftBukkit
|
||||
+ this.disconnect("Invalid hotbar selection (Hacking?)"); // CraftBukkit //Spigot "Nope" -> Descriptive reason
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,34 +0,0 @@
|
||||
From 4b55b1c0354600be33f73d04a58f0bbf83df7047 Mon Sep 17 00:00:00 2001
|
||||
From: andrepl <andre@norcode.com>
|
||||
Date: Sat, 15 Mar 2014 12:50:00 -0400
|
||||
Subject: [PATCH] Allow enchanting tables to enchant any item
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ContainerEnchantTable.java b/src/main/java/net/minecraft/server/ContainerEnchantTable.java
|
||||
index 528fbc9..372ccde 100644
|
||||
--- a/src/main/java/net/minecraft/server/ContainerEnchantTable.java
|
||||
+++ b/src/main/java/net/minecraft/server/ContainerEnchantTable.java
|
||||
@@ -152,6 +152,11 @@ public class ContainerEnchantTable extends Container {
|
||||
if (this.costs[i] > 0 && itemstack != null && (entityhuman.expLevel >= this.costs[i] || entityhuman.abilities.canInstantlyBuild)) {
|
||||
if (!this.world.isStatic) {
|
||||
List list = EnchantmentManager.b(this.l, itemstack, this.costs[i]);
|
||||
+ // Spigot - Provide an empty enchantment list
|
||||
+ if (list == null) {
|
||||
+ list = new java.util.ArrayList<EnchantmentInstance>();
|
||||
+ }
|
||||
+ // Spigot End
|
||||
boolean flag = itemstack.getItem() == Items.BOOK;
|
||||
|
||||
if (list != null) {
|
||||
@@ -186,7 +191,7 @@ public class ContainerEnchantTable extends Container {
|
||||
EnchantmentInstance enchantment = new EnchantmentInstance(enchantId, entry.getValue());
|
||||
Items.ENCHANTED_BOOK.a(itemstack, enchantment);
|
||||
} else {
|
||||
- item.addEnchantment(entry.getKey(), entry.getValue());
|
||||
+ item.addUnsafeEnchantment(entry.getKey(), entry.getValue()); // Spigot addEnchantment -> addUnsafeEnchantment
|
||||
}
|
||||
} catch (IllegalArgumentException e) {
|
||||
/* Just swallow invalid enchantments */
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,60 +0,0 @@
|
||||
From b3502d90dfb5e97bde75acca10428ca5a0c225c8 Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Tue, 18 Mar 2014 09:49:30 +0000
|
||||
Subject: [PATCH] Remove the lastChunkAccessed if it is unloaded.
|
||||
|
||||
This fixes an issue where a chunk would be unloaded but remain in lastChunkAccessed meaning calls on getChunkAt could return a chunk that is no longer loaded, this caused an issue where the chunk could be reloaded whilst in use reverting any block changes. This caused findEndPortal to return null even after createEndPortal which would crash the server trying to teleport to a null location.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
index 7f19bec..a9ef533 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
@@ -315,6 +315,13 @@ public class ChunkProviderServer implements IChunkProvider {
|
||||
long chunkcoordinates = this.unloadQueue.popFirst();
|
||||
Chunk chunk = this.chunks.get(chunkcoordinates);
|
||||
if (chunk == null) continue;
|
||||
+ // Spigot start - Remove the chunk from the cache if it is unloaded
|
||||
+ Chunk result = world.lastChunkAccessed;
|
||||
+ if ( result != null && result.locX == chunk.locX && result.locZ == chunk.locZ )
|
||||
+ {
|
||||
+ world.lastChunkAccessed = null;
|
||||
+ }
|
||||
+ // Spigot end
|
||||
|
||||
ChunkUnloadEvent event = new ChunkUnloadEvent(chunk.bukkitChunk);
|
||||
server.getPluginManager().callEvent(event);
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 2f9f300..7529e0c 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -153,7 +153,7 @@ public abstract class World implements IBlockAccess {
|
||||
public boolean pvpMode;
|
||||
public boolean keepSpawnInMemory = true;
|
||||
public ChunkGenerator generator;
|
||||
- Chunk lastChunkAccessed;
|
||||
+ public Chunk lastChunkAccessed; // Spigot - Make public
|
||||
int lastXAccessed = Integer.MIN_VALUE;
|
||||
int lastZAccessed = Integer.MIN_VALUE;
|
||||
final Object chunkLock = new Object();
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index 154b868..8592205 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -187,6 +187,14 @@ public class CraftWorld implements World {
|
||||
world.chunkProviderServer.saveChunkNOP(chunk);
|
||||
}
|
||||
|
||||
+ // Spigot start - Remove the chunk from the cache if it is unloaded
|
||||
+ net.minecraft.server.Chunk result = world.lastChunkAccessed;
|
||||
+ if ( result != null && result.locX == chunk.locX && result.locZ == chunk.locZ )
|
||||
+ {
|
||||
+ world.lastChunkAccessed = null;
|
||||
+ }
|
||||
+ // Spigot end
|
||||
+
|
||||
world.chunkProviderServer.unloadQueue.remove(x, z);
|
||||
world.chunkProviderServer.chunks.remove(LongHash.toLong(x, z));
|
||||
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,29 +0,0 @@
|
||||
From 6acc3b0242132d71abcf72235ab2ddb642437571 Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Sun, 23 Mar 2014 01:12:10 +0000
|
||||
Subject: [PATCH] Check for manually prefixed commands or commands that don't
|
||||
need a prefix for calling vanilla commands with command blocks
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java b/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java
|
||||
index da235e5..0b04e94 100644
|
||||
--- a/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java
|
||||
+++ b/src/main/java/net/minecraft/server/CommandBlockListenerAbstract.java
|
||||
@@ -110,6 +110,14 @@ public abstract class CommandBlockListenerAbstract implements ICommandListener {
|
||||
}
|
||||
}
|
||||
|
||||
+ // Spigot start - check for manually prefixed command or commands that don't need a prefix
|
||||
+ org.bukkit.command.Command commandBlockCommand = commandMap.getCommand(args[0]);
|
||||
+ if (commandBlockCommand instanceof VanillaCommandWrapper) {
|
||||
+ this.b = ((VanillaCommandWrapper) commandBlockCommand).dispatchVanillaCommandBlock(this, this.e);
|
||||
+ return;
|
||||
+ }
|
||||
+ // Spigot end
|
||||
+
|
||||
// Make sure this is a valid command
|
||||
if (commandMap.getCommand(args[0]) == null) {
|
||||
this.b = 0;
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,21 +0,0 @@
|
||||
From d9f3f7223ac926e3c89521a74bec232d41ffd5d6 Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Sun, 23 Mar 2014 10:53:48 +0000
|
||||
Subject: [PATCH] Cap window names to prevent client disconnects
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java b/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java
|
||||
index f6d7b2b..860592d 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java
|
||||
@@ -14,6 +14,7 @@ public class PacketPlayOutOpenWindow extends Packet {
|
||||
public PacketPlayOutOpenWindow() {}
|
||||
|
||||
public PacketPlayOutOpenWindow(int i, int j, String s, int k, boolean flag) {
|
||||
+ if (s.length() > 32) s = s.substring( 0, 32 ); // Spigot - Cap window name to prevent client disconnects
|
||||
this.a = i;
|
||||
this.b = j;
|
||||
this.c = s;
|
||||
--
|
||||
1.8.5.2.msysgit.0
|
||||
|
@ -1,65 +0,0 @@
|
||||
From cf42ff147f5671741937ce529c714d39aeadc797 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Sun, 24 Feb 2013 20:45:20 +1100
|
||||
Subject: [PATCH] Enable Improved Ping Sending
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
index ca06f60..787c764 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
@@ -62,6 +62,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
public boolean keepLevel = false;
|
||||
public double maxHealthCache;
|
||||
public boolean joining = true;
|
||||
+ public int lastPing = -1; // Spigot
|
||||
// CraftBukkit end
|
||||
// Spigot start
|
||||
public boolean collidesWithEntities = true;
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
|
||||
index c4698d4..59ba67c 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerList.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerList.java
|
||||
@@ -784,6 +784,8 @@ public abstract class PlayerList {
|
||||
// CraftBukkit end
|
||||
}
|
||||
|
||||
+ private int currentPing = 0;
|
||||
+
|
||||
public void tick() {
|
||||
if (++this.p > 600) {
|
||||
this.p = 0;
|
||||
@@ -796,6 +798,30 @@ public abstract class PlayerList {
|
||||
this.sendAll(new PacketPlayOutPlayerInfo(entityplayer.getName(), true, entityplayer.ping));
|
||||
}
|
||||
// CraftBukkit end */
|
||||
+ // Spigot start
|
||||
+ try
|
||||
+ {
|
||||
+ if ( !players.isEmpty() )
|
||||
+ {
|
||||
+ currentPing = ( currentPing + 1 ) % this.players.size();
|
||||
+ EntityPlayer player = (EntityPlayer) this.players.get( currentPing );
|
||||
+ if ( player.lastPing == -1 || Math.abs( player.ping - player.lastPing ) > 20 )
|
||||
+ {
|
||||
+ Packet packet = new PacketPlayOutPlayerInfo( player.listName, true, player.ping );
|
||||
+ for ( EntityPlayer splayer : (List<EntityPlayer>) this.players )
|
||||
+ {
|
||||
+ if ( splayer.getBukkitEntity().canSee( player.getBukkitEntity() ) )
|
||||
+ {
|
||||
+ splayer.playerConnection.sendPacket( packet );
|
||||
+ }
|
||||
+ }
|
||||
+ player.lastPing = player.ping;
|
||||
+ }
|
||||
+ }
|
||||
+ } catch ( Exception e ) {
|
||||
+ // Better safe than sorry :)
|
||||
+ }
|
||||
+ // Spigot end
|
||||
}
|
||||
|
||||
public void sendAll(Packet packet) {
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,21 +0,0 @@
|
||||
From 3f5a0704fe6de51b06e554c07f37237240d4022e Mon Sep 17 00:00:00 2001
|
||||
From: md_5 <git@md-5.net>
|
||||
Date: Sun, 30 Mar 2014 09:15:35 +1100
|
||||
Subject: [PATCH] Prevent getOfflinePlayer(UUID) on main thread.
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index 707410b..446b046 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -1341,6 +1341,7 @@ public final class CraftServer implements Server {
|
||||
|
||||
// TODO: In 1.7.6+ this should just lookup the UUID-based player data filename
|
||||
public OfflinePlayer getOfflinePlayer(UUID id) {
|
||||
+ com.google.common.base.Preconditions.checkState(!Bukkit.isPrimaryThread(), "Cannot call getOfflinePlayer(UUID) on main thread, this operation is blocking!"); // Spigot
|
||||
String name = MojangNameLookup.lookupName(id);
|
||||
if (name == null) {
|
||||
// This is completely wrong
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,70 +0,0 @@
|
||||
From 3acd3a83d766bdd1a50b42110532e56131a5716c Mon Sep 17 00:00:00 2001
|
||||
From: drXor <mcyoungsota@gmail.com>
|
||||
Date: Sat, 29 Mar 2014 13:44:25 -0400
|
||||
Subject: [PATCH] Configurable dragon death and wither spawn sounds
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java
|
||||
index f53b183..9a8408c 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityEnderDragon.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java
|
||||
@@ -550,7 +550,14 @@ public class EntityEnderDragon extends EntityInsentient implements IComplex, IMo
|
||||
}
|
||||
|
||||
if (this.bB == 1) {
|
||||
- this.world.b(1018, (int) this.locX, (int) this.locY, (int) this.locZ, 0);
|
||||
+ // Spigot start
|
||||
+ if(this.world.spigotConfig.dragonDeathSoundRadius > 0){
|
||||
+ this.world.getServer().getHandle().sendPacketNearby((int) this.locX, (int) this.locY, (int) this.locZ, this.world.spigotConfig.dragonDeathSoundRadius, this.dimension, new PacketPlayOutWorldEvent(1018, (int) this.locX, (int) this.locY, (int) this.locZ, 0, true));
|
||||
+ }
|
||||
+ else {
|
||||
+ this.world.b(1018, (int) this.locX, (int) this.locY, (int) this.locZ, 0);
|
||||
+ }
|
||||
+ // Spigot end
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityWither.java b/src/main/java/net/minecraft/server/EntityWither.java
|
||||
index 99526b9..2ba0a81 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityWither.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityWither.java
|
||||
@@ -172,7 +172,14 @@ public class EntityWither extends EntityMonster implements IRangedEntity {
|
||||
// CraftBukkit end
|
||||
|
||||
this.world.createExplosion(this, this.locX, this.locY + (double) this.getHeadHeight(), this.locZ, 7.0F, false, this.world.getGameRules().getBoolean("mobGriefing"));
|
||||
- this.world.b(1013, (int) this.locX, (int) this.locY, (int) this.locZ, 0);
|
||||
+ // Spigot start
|
||||
+ if(this.world.spigotConfig.witherSpawnSoundRadius > 0){
|
||||
+ this.world.getServer().getHandle().sendPacketNearby((int) this.locX, (int) this.locY, (int) this.locZ, this.world.spigotConfig.witherSpawnSoundRadius, this.dimension, new PacketPlayOutWorldEvent(1013, (int) this.locX, (int) this.locY, (int) this.locZ, 0, true));
|
||||
+ }
|
||||
+ else {
|
||||
+ this.world.b(1013, (int) this.locX, (int) this.locY, (int) this.locZ, 0);
|
||||
+ }
|
||||
+ // Spigot end
|
||||
}
|
||||
|
||||
this.s(i);
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
index b12a086..312fa55 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
||||
@@ -278,4 +278,16 @@ public class SpigotWorldConfig
|
||||
maxCollisionsPerEntity = getInt( "max-entity-collisions", 8 );
|
||||
log( "Max Entity Collisions: " + maxCollisionsPerEntity );
|
||||
}
|
||||
+
|
||||
+ public int dragonDeathSoundRadius;
|
||||
+ private void keepDragonDeathPerWorld()
|
||||
+ {
|
||||
+ dragonDeathSoundRadius = getInt( "dragon-death-sound-radius", 0 );
|
||||
+ }
|
||||
+
|
||||
+ public int witherSpawnSoundRadius;
|
||||
+ private void witherSpawnSoundRadius()
|
||||
+ {
|
||||
+ witherSpawnSoundRadius = getInt( "wither-spawn-sound-radius", 0 );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,38 +0,0 @@
|
||||
From 4a11712fc763f0233db7c951d714cfb1b41e8555 Mon Sep 17 00:00:00 2001
|
||||
From: FrozenBrain <carstenbamsti@googlemail.com>
|
||||
Date: Sun, 23 Mar 2014 01:49:13 +0100
|
||||
Subject: [PATCH] Fix TileEntities getting ticked after being queued for
|
||||
removal
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 7529e0c..45bc215 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -1358,6 +1358,12 @@ public abstract class World implements IBlockAccess {
|
||||
timings.entityTick.stopTiming(); // Spigot
|
||||
this.methodProfiler.c("blockEntities");
|
||||
timings.tileEntityTick.startTiming(); // Spigot
|
||||
+ // Spigot start - brought up from below
|
||||
+ if (!this.b.isEmpty()) {
|
||||
+ this.tileEntityList.removeAll(this.b);
|
||||
+ this.b.clear();
|
||||
+ }
|
||||
+ // Spigot End
|
||||
this.M = true;
|
||||
Iterator iterator = this.tileEntityList.iterator();
|
||||
|
||||
@@ -1406,10 +1412,6 @@ public abstract class World implements IBlockAccess {
|
||||
timings.tileEntityTick.stopTiming(); // Spigot
|
||||
timings.tileEntityPending.startTiming(); // Spigot
|
||||
this.M = false;
|
||||
- if (!this.b.isEmpty()) {
|
||||
- this.tileEntityList.removeAll(this.b);
|
||||
- this.b.clear();
|
||||
- }
|
||||
|
||||
this.methodProfiler.c("pendingBlockEntities");
|
||||
if (!this.a.isEmpty()) {
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -1,23 +0,0 @@
|
||||
From 4b7d88914d7e2c7ec619697ee2d60dabea61aeb7 Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thethinkofdeath@gmail.com>
|
||||
Date: Fri, 11 Apr 2014 11:16:34 +0100
|
||||
Subject: [PATCH] Display 'Spigot' in client crashes, server lists and Mojang
|
||||
stats
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 8ce9dd7..cbf4ade 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -955,7 +955,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IMo
|
||||
}
|
||||
|
||||
public String getServerModName() {
|
||||
- return server.getName(); // CraftBukkit - cb > vanilla!
|
||||
+ return "Spigot"; // Spigot - Spigot > // CraftBukkit - cb > vanilla!
|
||||
}
|
||||
|
||||
public CrashReport b(CrashReport crashreport) {
|
||||
--
|
||||
1.8.3.2
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren