Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zachbr/e319cc4a168b38caf465 to your computer and use it in GitHub Desktop.
Save zachbr/e319cc4a168b38caf465 to your computer and use it in GitHub Desktop.
Spigot BPS Patch File Sources
From 303ad6c8effffcf49b5c3e47f6e67de52288598e Mon Sep 17 00:00:00 2001
From: md_5 <git@md-5.net>
Date: Thu, 11 Sep 2014 01:06:54 -0700
Subject: [PATCH] Spigot Update - 20140909a
diff --git a/pom.xml b/pom.xml
index 0c9f243..ec56492 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,6 +17,13 @@
<relativePath>../pom.xml</relativePath>
</parent>
+ <repositories>
+ <repository>
+ <id>sonatype-snapshots</id>
+ <url>https://oss.sonatype.org/content/repositories/public</url>
+ </repository>
+ </repositories>
+
<build>
<plugins>
<plugin>
@@ -74,6 +81,13 @@
</build>
<dependencies>
<dependency>
+ <groupId>net.md-5</groupId>
+ <artifactId>bungeecord-chat</artifactId>
+ <version>1.8-SNAPSHOT</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.12</version>
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index f861214..c560493 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -12,6 +12,7 @@ import java.util.Set;
import java.util.UUID;
import java.util.logging.Logger;
+import net.md_5.bungee.api.chat.BaseComponent;
import org.bukkit.Warning.WarningState;
import org.bukkit.command.CommandException;
import org.bukkit.command.CommandSender;
@@ -915,6 +916,16 @@ public interface Server extends PluginMessageRecipient {
{
throw new UnsupportedOperationException( "Not supported yet." );
}
+
+ public void broadcast(BaseComponent component)
+ {
+ throw new UnsupportedOperationException( "Not supported yet." );
+ }
+
+ public void broadcast(BaseComponent... components)
+ {
+ throw new UnsupportedOperationException( "Not supported yet." );
+ }
}
Spigot spigot();
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index b2ad5b7..2940b21 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -2,6 +2,7 @@ package org.bukkit.entity;
import java.net.InetSocketAddress;
+import net.md_5.bungee.api.chat.BaseComponent;
import org.bukkit.Achievement;
import org.bukkit.ChatColor;
import org.bukkit.Effect;
@@ -1102,6 +1103,16 @@ public interface Player extends HumanEntity, Conversable, CommandSender, Offline
{
throw new UnsupportedOperationException( "Not supported yet." );
}
+
+ public void sendMessage(BaseComponent component)
+ {
+ throw new UnsupportedOperationException( "Not supported yet." );
+ }
+
+ public void sendMessage(BaseComponent... components)
+ {
+ throw new UnsupportedOperationException( "Not supported yet." );
+ }
}
Spigot spigot();
--
1.9.4.msysgit.0
From ef1b2e6c084a19cbb01701d87b4ef6468ea48c01 Mon Sep 17 00:00:00 2001
From: md_5 <git@md-5.net>
Date: Fri, 12 Sep 2014 17:16:11 -0700
Subject: [PATCH] Spigot Update - 20140909b
diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
index 0b53084..b3002e8 100644
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
@@ -138,11 +138,6 @@ public final class SimplePluginManager implements PluginManager {
server.getLogger().log( Level.WARNING, "Skipping loading of Orebfuscator as it does not work with Spigot 1.8 builds!" );
continue;
}
- if ( name.equalsIgnoreCase( "EchoPet" ) )
- {
- server.getLogger().log( Level.WARNING, "Skipping loading of EchoPet as it does not work with Spigot 1.8 builds!" );
- continue;
- }
// Spigot End
if (name.equalsIgnoreCase("bukkit") || name.equalsIgnoreCase("minecraft") || name.equalsIgnoreCase("mojang")) {
server.getLogger().log(Level.SEVERE, "Could not load '" + file.getPath() + "' in folder '" + directory.getPath() + "': Restricted Name");
--
1.9.4.msysgit.0
From 2697b81bd9a9a950ee06d717150e9dbe3d3339fb Mon Sep 17 00:00:00 2001
From: md_5 <git@md-5.net>
Date: Fri, 12 Sep 2014 18:20:53 -0700
Subject: [PATCH] Spigot Update - 20140911a
diff --git a/pom.xml b/pom.xml
index ec56492..4bfca82 100644
--- a/pom.xml
+++ b/pom.xml
@@ -86,6 +86,16 @@
<version>1.8-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>net.sf.trove4j</groupId>
+ <artifactId>trove4j</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
--
1.9.4.msysgit.0
From a473134c498e6ffbfe6a89288f9510b99718fed2 Mon Sep 17 00:00:00 2001
From: md_5 <git@md-5.net>
Date: Thu, 11 Sep 2014 01:07:52 -0700
Subject: [PATCH] Spigot Update - 20140909a
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index 0c4976d..a993b1d 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -48,26 +48,6 @@ public class Main {
+ "Please report any such issues to http://www.spigotmc.org/, stating your client, server, and if applicable BungeeCord versions.\n"
+ "*** Any bug reports not running the very latest versions of these softwares will be ignored ***\n\n" );
- Enumeration<URL> resources = Main.class.getClassLoader().getResources( "META-INF/MANIFEST.MF" );
- while ( resources.hasMoreElements() )
- {
- Manifest manifest = new Manifest( resources.nextElement().openStream() );
- String ts = manifest.getMainAttributes().getValue( "Timestamp" );
- if ( ts != null )
- {
- Date buildDate = new SimpleDateFormat( "yyyyMMdd-hhmm" ).parse( ts );
-
- Calendar cal = Calendar.getInstance();
- cal.add( Calendar.DAY_OF_YEAR, -2 );
- if ( buildDate.before(cal.getTime() ) )
- {
- System.err.println( "WARNING: This build is more than 2 days old and there are likely updates available!" );
- System.err.println( "You will get no support with this build unless you update from http://ci.md-5.net/job/Spigot/" );
- System.err.println( "The server will start in 10 seconds!" );
- Thread.sleep( TimeUnit.SECONDS.toMillis( 10 ) );
- }
- }
- }
// Spigot End
// Todo: Installation script
OptionParser parser = new OptionParser() {
--
1.9.4.msysgit.0
From 8d77dcd164e3f844c3bda9310b37aa857f50a72a Mon Sep 17 00:00:00 2001
From: md_5 <git@md-5.net>
Date: Fri, 12 Sep 2014 17:16:43 -0700
Subject: [PATCH] Spigot Update - 20140909b
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutChat.java b/src/main/java/net/minecraft/server/PacketPlayOutChat.java
index fdbdcc6..416a349 100644
--- a/src/main/java/net/minecraft/server/PacketPlayOutChat.java
+++ b/src/main/java/net/minecraft/server/PacketPlayOutChat.java
@@ -1,10 +1,14 @@
package net.minecraft.server;
+import net.md_5.bungee.api.chat.BaseComponent;
+import net.md_5.bungee.chat.ComponentSerializer;
+
import java.io.IOException;
public class PacketPlayOutChat extends Packet {
private IChatBaseComponent a;
+ public BaseComponent[] components; // Spigot - Update 20140909b
private boolean b;
public PacketPlayOutChat() {
@@ -26,7 +30,16 @@ public class PacketPlayOutChat extends Packet {
}
public void b(PacketDataSerializer packetdataserializer) throws IOException {
- packetdataserializer.a(ChatSerializer.a(this.a));
+ // Spigot start - Update 20140909b
+ if (components != null)
+ {
+ packetdataserializer.a( ComponentSerializer.toString(components) );
+ }
+ else {
+ packetdataserializer.a( ChatSerializer.a(a) );
+ }
+ // Spigot end
+
// Spigot start - protocol patch
if ( packetdataserializer.version >= 16 )
{
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 5b6aa3f..3964ba0 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -23,6 +23,7 @@ import java.util.regex.Pattern;
import javax.imageio.ImageIO;
+import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.ChunkCoordinates;
import net.minecraft.server.CommandAchievement;
import net.minecraft.server.CommandBan;
@@ -1837,6 +1838,24 @@ public final class CraftServer implements Server {
{
return org.spigotmc.SpigotConfig.config;
}
+
+ @Override
+ public void broadcast( BaseComponent component )
+ {
+ for ( Player player : getOnlinePlayers() )
+ {
+ player.spigot().sendMessage( component );
+ }
+ }
+
+ @Override
+ public void broadcast( BaseComponent... components )
+ {
+ for ( Player player : getOnlinePlayers() )
+ {
+ player.spigot().sendMessage( components );
+ }
+ }
};
public Spigot spigot()
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index a993b1d..ba744b1 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -22,33 +22,6 @@ public class Main {
public static boolean useConsole = true;
public static void main(String[] args) throws Exception {
- // Spigot Start
- File lock = new File( ".update-lock" );
- if ( !new File( "update-lock" ).exists() && !lock.exists() && System.getProperty( "IReallyKnowWhatIAmDoingThisUpdate" ) == null )
- {
- System.err.println( "WARNING: This Minecraft update alters the way in which saved data is stored." );
- System.err.println( "Please ensure your server is in the correct online/offline mode state, as the changes made are PERMANENT" );
- System.err.println( "If you are running in offline mode, but your BungeeCord is in online mode, it is imperative that BungeeCord support is enabled in spigot.yml and BungeeCord's config.yml" );
- System.err.println( "By typing `yes` you acknowledge that you have taken the necessary backups and are aware of this conversion" );
- System.err.println( "Please type yes to continue starting the server. You have been warned :)" );
- System.err.println( "See http://www.spigotmc.org/wiki/uuid-conversion/ if you have any questions and remember BACKUP BACKUP BACKUP" );
- System.err.println( "=================================================================================" );
- System.err.println( "Starting server in 10 seconds" );
- lock.createNewFile();
- try
- {
- Thread.sleep( TimeUnit.SECONDS.toMillis( 10 ) );
- } catch ( InterruptedException ex )
- {
- }
- }
-
- System.err.println( "This Spigot build supports Minecraft clients both of versions 1.7.x and of 1.8.x.\n"
- + "*** It is imperative that backups be taken before running this build on your server! ***\n"
- + "Please report any such issues to http://www.spigotmc.org/, stating your client, server, and if applicable BungeeCord versions.\n"
- + "*** Any bug reports not running the very latest versions of these softwares will be ignored ***\n\n" );
-
- // Spigot End
// Todo: Installation script
OptionParser parser = new OptionParser() {
{
@@ -166,6 +139,34 @@ public class Main {
} else if (options.has("v")) {
System.out.println(CraftServer.class.getPackage().getImplementationVersion());
} else {
+ // Spigot start - Update 20140909b
+ File lock = new File( ".update-lock" );
+ if ( !new File( "update-lock" ).exists() && !lock.exists() && System.getProperty( "IReallyKnowWhatIAmDoingThisUpdate" ) == null )
+ {
+ System.err.println( "WARNING: This Minecraft update alters the way in which saved data is stored." );
+ System.err.println( "Please ensure your server is in the correct online/offline mode state, as the changes made are PERMANENT" );
+ System.err.println( "If you are running in offline mode, but your BungeeCord is in online mode, it is imperative that BungeeCord support is enabled in spigot.yml and BungeeCord's config.yml" );
+ System.err.println( "By typing `yes` you acknowledge that you have taken the necessary backups and are aware of this conversion" );
+ System.err.println( "Please type yes to continue starting the server. You have been warned :)" );
+ System.err.println( "See http://www.spigotmc.org/wiki/uuid-conversion/ if you have any questions and remember BACKUP BACKUP BACKUP" );
+ System.err.println( "=================================================================================" );
+ System.err.println( "Starting server in 10 seconds" );
+ lock.createNewFile();
+ try
+ {
+ Thread.sleep( TimeUnit.SECONDS.toMillis( 10 ) );
+ } catch ( InterruptedException ex )
+ {
+ }
+ }
+
+ System.err.println( "This Spigot build supports Minecraft clients both of versions 1.7.x and of 1.8.x.\n"
+ + "*** It is imperative that backups be taken before running this build on your server! ***\n"
+ + "Please report any such issues to http://www.spigotmc.org/, stating your client, server, and if applicable BungeeCord versions.\n"
+ + "*** Any bug reports not running the very latest versions of these softwares will be ignored ***\n\n" );
+
+ // Spigot end
+
try {
// This trick bypasses Maven Shade's clever rewriting of our getProperty call when using String literals
String jline_UnsupportedTerminal = new String(new char[] {'j','l','i','n','e','.','U','n','s','u','p','p','o','r','t','e','d','T','e','r','m','i','n','a','l'});
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 35f2bfa..ca1d027 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -17,6 +17,7 @@ import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
+import net.md_5.bungee.api.chat.BaseComponent;
import net.minecraft.server.*;
import net.minecraft.util.com.mojang.authlib.GameProfile;
@@ -1402,6 +1403,22 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return java.util.Collections.unmodifiableSet( ret );
}
+
+ @Override
+ public void sendMessage( BaseComponent component )
+ {
+ sendMessage( new BaseComponent[] { component } );
+ }
+
+ @Override
+ public void sendMessage( BaseComponent... components )
+ {
+ if ( getHandle().playerConnection == null ) return;
+
+ PacketPlayOutChat packet = new PacketPlayOutChat();
+ packet.components = components;
+ getHandle().playerConnection.sendPacket( packet );
+ }
};
public Player.Spigot spigot()
--
1.9.4.msysgit.0
From 0c60a2d1e7ae744f963071a20be7f6039df1444d Mon Sep 17 00:00:00 2001
From: md_5 <git@md-5.net>
Date: Sun, 21 Sep 2014 12:57:40 -0700
Subject: [PATCH] Spigot Update - 20140916a
diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
index 46c4fb8..8dad7ca 100644
--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java
+++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
@@ -147,7 +147,7 @@ public class EntityTrackerEntry {
this.scanPlayers(new java.util.ArrayList(this.trackedPlayers));
}
// CraftBukkit end
- object = new PacketPlayOutEntityTeleport(this.tracker.getId(), i, j, k, (byte) l, (byte) i1, tracker.onGround); // Spigot - protocol patch
+ object = new PacketPlayOutEntityTeleport(this.tracker.getId(), i, j, k, (byte) l, (byte) i1, tracker.onGround, tracker instanceof EntityFallingBlock || tracker instanceof EntityTNTPrimed); // Spigot - protocol patch // Spigot Update - 20140916a
}
}
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java b/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java
index 87260d5..b637d25 100644
--- a/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java
+++ b/src/main/java/net/minecraft/server/PacketPlayOutEntityTeleport.java
@@ -9,6 +9,7 @@ public class PacketPlayOutEntityTeleport extends Packet {
private byte e;
private byte f;
private boolean onGround; // Spigot - protocol patch
+ private boolean heightCorrection; // Spigot Update - 20140916a
public PacketPlayOutEntityTeleport() {}
@@ -21,7 +22,7 @@ public class PacketPlayOutEntityTeleport extends Packet {
this.f = (byte) ((int) (entity.pitch * 256.0F / 360.0F));
}
- public PacketPlayOutEntityTeleport(int i, int j, int k, int l, byte b0, byte b1, boolean onGround) { // Spigot - protocol patch
+ public PacketPlayOutEntityTeleport(int i, int j, int k, int l, byte b0, byte b1, boolean onGround, boolean heightCorrection) { // Spigot - protocol patch // Spigot Update - 20140916a
this.a = i;
this.b = j;
this.c = k;
@@ -29,6 +30,7 @@ public class PacketPlayOutEntityTeleport extends Packet {
this.e = b0;
this.f = b1;
this.onGround = onGround; // Spigot - protocol patch
+ this.heightCorrection = heightCorrection; // Spigot Update - 20140916a
}
public void a(PacketDataSerializer packetdataserializer) {
@@ -51,7 +53,7 @@ public class PacketPlayOutEntityTeleport extends Packet {
}
// Spigot end
packetdataserializer.writeInt(this.b);
- packetdataserializer.writeInt(this.c);
+ packetdataserializer.writeInt((packetdataserializer.version >= 16 && heightCorrection) ? (this.c - 16) : this.c); // Spigot Update - 20140916a
packetdataserializer.writeInt(this.d);
packetdataserializer.writeByte(this.e);
packetdataserializer.writeByte(this.f);
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java
index dcf1204..eef9de2 100644
--- a/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java
+++ b/src/main/java/net/minecraft/server/PacketPlayOutSpawnEntity.java
@@ -116,6 +116,12 @@ public class PacketPlayOutSpawnEntity extends Packet {
int data = k >> 16;
k = id | ( data << 12 );
}
+
+ if ( ( j == 50 || j == 70 || j == 74 ) && packetdataserializer.version >= 16 ) // Spigot Update - 20140916a
+ {
+ c -= 16;
+ }
+
// Spigot end
packetdataserializer.writeInt(this.b);
packetdataserializer.writeInt(this.c);
--
1.9.4.msysgit.0
From dd9186f3ff7054b05e2b5379badb7204718bc50d Mon Sep 17 00:00:00 2001
From: md_5 <git@md-5.net>
Date: Sun, 21 Sep 2014 18:11:43 -0700
Subject: [PATCH] Spigot Update - 20140921a
diff --git a/src/main/java/net/minecraft/server/EnchantmentManager.java b/src/main/java/net/minecraft/server/EnchantmentManager.java
new file mode 100644
index 0000000..deda472
--- /dev/null
+++ b/src/main/java/net/minecraft/server/EnchantmentManager.java
@@ -0,0 +1,364 @@
+package net.minecraft.server;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+public class EnchantmentManager {
+
+ private static final Random random = new Random();
+ private static final EnchantmentModifierProtection b = new EnchantmentModifierProtection((EmptyClass) null);
+ private static final EnchantmentModifierDamage c = new EnchantmentModifierDamage((EmptyClass) null);
+ private static final EnchantmentModifierThorns d = new EnchantmentModifierThorns((EmptyClass) null);
+ private static final EnchantmentModifierArthropods e = new EnchantmentModifierArthropods((EmptyClass) null);
+
+ public static int getEnchantmentLevel(int i, ItemStack itemstack) {
+ if (itemstack == null) {
+ return 0;
+ } else {
+ NBTTagList nbttaglist = itemstack.getEnchantments();
+
+ if (nbttaglist == null) {
+ return 0;
+ } else {
+ for (int j = 0; j < nbttaglist.size(); ++j) {
+ short short1 = nbttaglist.get(j).getShort("id");
+ short short2 = nbttaglist.get(j).getShort("lvl");
+
+ if (short1 == i) {
+ return short2;
+ }
+ }
+
+ return 0;
+ }
+ }
+ }
+
+ public static Map a(ItemStack itemstack) {
+ LinkedHashMap linkedhashmap = new LinkedHashMap();
+ NBTTagList nbttaglist = itemstack.getItem() == Items.ENCHANTED_BOOK ? Items.ENCHANTED_BOOK.g(itemstack) : itemstack.getEnchantments();
+
+ if (nbttaglist != null) {
+ for (int i = 0; i < nbttaglist.size(); ++i) {
+ short short1 = nbttaglist.get(i).getShort("id");
+ short short2 = nbttaglist.get(i).getShort("lvl");
+
+ linkedhashmap.put(Integer.valueOf(short1), Integer.valueOf(short2));
+ }
+ }
+
+ return linkedhashmap;
+ }
+
+ public static void a(Map map, ItemStack itemstack) {
+ NBTTagList nbttaglist = new NBTTagList();
+ Iterator iterator = map.keySet().iterator();
+
+ while (iterator.hasNext()) {
+ int i = ((Integer) iterator.next()).intValue();
+ NBTTagCompound nbttagcompound = new NBTTagCompound();
+
+ nbttagcompound.setShort("id", (short) i);
+ nbttagcompound.setShort("lvl", (short) ((Integer) map.get(Integer.valueOf(i))).intValue());
+ nbttaglist.add(nbttagcompound);
+ if (itemstack.getItem() == Items.ENCHANTED_BOOK) {
+ Items.ENCHANTED_BOOK.a(itemstack, new EnchantmentInstance(i, ((Integer) map.get(Integer.valueOf(i))).intValue()));
+ }
+ }
+
+ if (nbttaglist.size() > 0) {
+ if (itemstack.getItem() != Items.ENCHANTED_BOOK) {
+ itemstack.a("ench", (NBTBase) nbttaglist);
+ }
+ } else if (itemstack.hasTag()) {
+ itemstack.getTag().remove("ench");
+ }
+ }
+
+ public static int getEnchantmentLevel(int i, ItemStack[] aitemstack) {
+ if (aitemstack == null) {
+ return 0;
+ } else {
+ int j = 0;
+ ItemStack[] aitemstack1 = aitemstack;
+ int k = aitemstack.length;
+
+ for (int l = 0; l < k; ++l) {
+ ItemStack itemstack = aitemstack1[l];
+ int i1 = getEnchantmentLevel(i, itemstack);
+
+ if (i1 > j) {
+ j = i1;
+ }
+ }
+
+ return j;
+ }
+ }
+
+ private static void a(EnchantmentModifier enchantmentmodifier, ItemStack itemstack) {
+ if (itemstack != null) {
+ NBTTagList nbttaglist = itemstack.getEnchantments();
+
+ if (nbttaglist != null) {
+ for (int i = 0; i < nbttaglist.size(); ++i) {
+ short short1 = nbttaglist.get(i).getShort("id");
+ short short2 = nbttaglist.get(i).getShort("lvl");
+
+ if (Enchantment.byId[short1] != null) {
+ enchantmentmodifier.a(Enchantment.byId[short1], short2);
+ }
+ }
+ }
+ }
+ }
+
+ private static void a(EnchantmentModifier enchantmentmodifier, ItemStack[] aitemstack) {
+ ItemStack[] aitemstack1 = aitemstack;
+ int i = aitemstack.length;
+
+ for (int j = 0; j < i; ++j) {
+ ItemStack itemstack = aitemstack1[j];
+
+ a(enchantmentmodifier, itemstack);
+ }
+ }
+
+ public static int a(ItemStack[] aitemstack, DamageSource damagesource) {
+ b.a = 0;
+ b.b = damagesource;
+ a((EnchantmentModifier) b, aitemstack);
+ if (b.a > 25) {
+ b.a = 25;
+ }
+
+ return (b.a + 1 >> 1) + random.nextInt((b.a >> 1) + 1);
+ }
+
+ public static float a(EntityLiving entityliving, EntityLiving entityliving1) {
+ return a(entityliving.be(), entityliving1.getMonsterType());
+ }
+
+ public static float a(ItemStack itemstack, EnumMonsterType enummonstertype) {
+ c.a = 0.0F;
+ c.b = enummonstertype;
+ a((EnchantmentModifier) c, itemstack);
+ return c.a;
+ }
+
+ public static void a(EntityLiving entityliving, Entity entity) {
+ d.b = entity;
+ d.a = entityliving;
+ a((EnchantmentModifier) d, entityliving.getEquipment());
+ if (entity instanceof EntityHuman) {
+ a((EnchantmentModifier) d, entityliving.be());
+ }
+ d.b = null;
+ d.a = null;
+ }
+
+ public static void b(EntityLiving entityliving, Entity entity) {
+ e.a = entityliving;
+ e.b = entity;
+ a((EnchantmentModifier) e, entityliving.getEquipment());
+ if (entityliving instanceof EntityHuman) {
+ a((EnchantmentModifier) e, entityliving.be());
+ }
+ e.a = null;
+ e.b = null;
+ }
+
+ public static int getKnockbackEnchantmentLevel(EntityLiving entityliving, EntityLiving entityliving1) {
+ return getEnchantmentLevel(Enchantment.KNOCKBACK.id, entityliving.be());
+ }
+
+ public static int getFireAspectEnchantmentLevel(EntityLiving entityliving) {
+ return getEnchantmentLevel(Enchantment.FIRE_ASPECT.id, entityliving.be());
+ }
+
+ public static int getOxygenEnchantmentLevel(EntityLiving entityliving) {
+ return getEnchantmentLevel(Enchantment.OXYGEN.id, entityliving.getEquipment());
+ }
+
+ public static int getDigSpeedEnchantmentLevel(EntityLiving entityliving) {
+ return getEnchantmentLevel(Enchantment.DIG_SPEED.id, entityliving.be());
+ }
+
+ public static boolean hasSilkTouchEnchantment(EntityLiving entityliving) {
+ return getEnchantmentLevel(Enchantment.SILK_TOUCH.id, entityliving.be()) > 0;
+ }
+
+ public static int getBonusBlockLootEnchantmentLevel(EntityLiving entityliving) {
+ return getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS.id, entityliving.be());
+ }
+
+ public static int getLuckEnchantmentLevel(EntityLiving entityliving) {
+ return getEnchantmentLevel(Enchantment.LUCK.id, entityliving.be());
+ }
+
+ public static int getLureEnchantmentLevel(EntityLiving entityliving) {
+ return getEnchantmentLevel(Enchantment.LURE.id, entityliving.be());
+ }
+
+ public static int getBonusMonsterLootEnchantmentLevel(EntityLiving entityliving) {
+ return getEnchantmentLevel(Enchantment.LOOT_BONUS_MOBS.id, entityliving.be());
+ }
+
+ public static boolean hasWaterWorkerEnchantment(EntityLiving entityliving) {
+ return getEnchantmentLevel(Enchantment.WATER_WORKER.id, entityliving.getEquipment()) > 0;
+ }
+
+ public static ItemStack a(Enchantment enchantment, EntityLiving entityliving) {
+ ItemStack[] aitemstack = entityliving.getEquipment();
+ int i = aitemstack.length;
+
+ for (int j = 0; j < i; ++j) {
+ ItemStack itemstack = aitemstack[j];
+
+ if (itemstack != null && getEnchantmentLevel(enchantment.id, itemstack) > 0) {
+ return itemstack;
+ }
+ }
+
+ return null;
+ }
+
+ public static int a(Random random, int i, int j, ItemStack itemstack) {
+ Item item = itemstack.getItem();
+ int k = item.c();
+
+ if (k <= 0) {
+ return 0;
+ } else {
+ if (j > 15) {
+ j = 15;
+ }
+
+ int l = random.nextInt(8) + 1 + (j >> 1) + random.nextInt(j + 1);
+
+ return i == 0 ? Math.max(l / 3, 1) : (i == 1 ? l * 2 / 3 + 1 : Math.max(l, j * 2));
+ }
+ }
+
+ public static ItemStack a(Random random, ItemStack itemstack, int i) {
+ List list = b(random, itemstack, i);
+ boolean flag = itemstack.getItem() == Items.BOOK;
+
+ if (flag) {
+ itemstack.setItem(Items.ENCHANTED_BOOK);
+ }
+
+ if (list != null) {
+ Iterator iterator = list.iterator();
+
+ while (iterator.hasNext()) {
+ EnchantmentInstance enchantmentinstance = (EnchantmentInstance) iterator.next();
+
+ if (flag) {
+ Items.ENCHANTED_BOOK.a(itemstack, enchantmentinstance);
+ } else {
+ itemstack.addEnchantment(enchantmentinstance.enchantment, enchantmentinstance.level);
+ }
+ }
+ }
+
+ return itemstack;
+ }
+
+ public static List b(Random random, ItemStack itemstack, int i) {
+ Item item = itemstack.getItem();
+ int j = item.c();
+
+ if (j <= 0) {
+ return null;
+ } else {
+ j /= 2;
+ j = 1 + random.nextInt((j >> 1) + 1) + random.nextInt((j >> 1) + 1);
+ int k = j + i;
+ float f = (random.nextFloat() + random.nextFloat() - 1.0F) * 0.15F;
+ int l = (int) ((float) k * (1.0F + f) + 0.5F);
+
+ if (l < 1) {
+ l = 1;
+ }
+
+ ArrayList arraylist = null;
+ Map map = b(l, itemstack);
+
+ if (map != null && !map.isEmpty()) {
+ EnchantmentInstance enchantmentinstance = (EnchantmentInstance) WeightedRandom.a(random, map.values());
+
+ if (enchantmentinstance != null) {
+ arraylist = new ArrayList();
+ arraylist.add(enchantmentinstance);
+
+ for (int i1 = l; random.nextInt(50) <= i1; i1 >>= 1) {
+ Iterator iterator = map.keySet().iterator();
+
+ while (iterator.hasNext()) {
+ Integer integer = (Integer) iterator.next();
+ boolean flag = true;
+ Iterator iterator1 = arraylist.iterator();
+
+ while (true) {
+ if (iterator1.hasNext()) {
+ EnchantmentInstance enchantmentinstance1 = (EnchantmentInstance) iterator1.next();
+
+ if (enchantmentinstance1.enchantment.a(Enchantment.byId[integer.intValue()])) {
+ continue;
+ }
+
+ flag = false;
+ }
+
+ if (!flag) {
+ iterator.remove();
+ }
+ break;
+ }
+ }
+
+ if (!map.isEmpty()) {
+ EnchantmentInstance enchantmentinstance2 = (EnchantmentInstance) WeightedRandom.a(random, map.values());
+
+ arraylist.add(enchantmentinstance2);
+ }
+ }
+ }
+ }
+
+ return arraylist;
+ }
+ }
+
+ public static Map b(int i, ItemStack itemstack) {
+ Item item = itemstack.getItem();
+ HashMap hashmap = null;
+ boolean flag = itemstack.getItem() == Items.BOOK;
+ Enchantment[] aenchantment = Enchantment.byId;
+ int j = aenchantment.length;
+
+ for (int k = 0; k < j; ++k) {
+ Enchantment enchantment = aenchantment[k];
+
+ if (enchantment != null && (enchantment.slot.canEnchant(item) || flag)) {
+ for (int l = enchantment.getStartLevel(); l <= enchantment.getMaxLevel(); ++l) {
+ if (i >= enchantment.a(l) && i <= enchantment.b(l)) {
+ if (hashmap == null) {
+ hashmap = new HashMap();
+ }
+
+ hashmap.put(Integer.valueOf(enchantment.id), new EnchantmentInstance(enchantment, l));
+ }
+ }
+ }
+ }
+
+ return hashmap;
+ }
+}
diff --git a/src/main/java/net/minecraft/server/EnchantmentModifierArthropods.java b/src/main/java/net/minecraft/server/EnchantmentModifierArthropods.java
new file mode 100644
index 0000000..c8e11db
--- /dev/null
+++ b/src/main/java/net/minecraft/server/EnchantmentModifierArthropods.java
@@ -0,0 +1,17 @@
+package net.minecraft.server;
+
+final class EnchantmentModifierArthropods implements EnchantmentModifier {
+
+ public EntityLiving a;
+ public Entity b;
+
+ private EnchantmentModifierArthropods() {}
+
+ public void a(Enchantment enchantment, int i) {
+ enchantment.a(this.a, this.b, i);
+ }
+
+ EnchantmentModifierArthropods(EmptyClass emptyclass) {
+ this();
+ }
+}
diff --git a/src/main/java/net/minecraft/server/EnchantmentModifierDamage.java b/src/main/java/net/minecraft/server/EnchantmentModifierDamage.java
new file mode 100644
index 0000000..8610c7a
--- /dev/null
+++ b/src/main/java/net/minecraft/server/EnchantmentModifierDamage.java
@@ -0,0 +1,17 @@
+package net.minecraft.server;
+
+final class EnchantmentModifierDamage implements EnchantmentModifier {
+
+ public float a;
+ public EnumMonsterType b;
+
+ private EnchantmentModifierDamage() {}
+
+ public void a(Enchantment enchantment, int i) {
+ this.a += enchantment.a(i, this.b);
+ }
+
+ EnchantmentModifierDamage(EmptyClass emptyclass) {
+ this();
+ }
+}
diff --git a/src/main/java/net/minecraft/server/EnchantmentModifierProtection.java b/src/main/java/net/minecraft/server/EnchantmentModifierProtection.java
new file mode 100644
index 0000000..8c03320
--- /dev/null
+++ b/src/main/java/net/minecraft/server/EnchantmentModifierProtection.java
@@ -0,0 +1,17 @@
+package net.minecraft.server;
+
+final class EnchantmentModifierProtection implements EnchantmentModifier {
+
+ public int a;
+ public DamageSource b;
+
+ private EnchantmentModifierProtection() {}
+
+ public void a(Enchantment enchantment, int i) {
+ this.a += enchantment.a(i, this.b);
+ }
+
+ EnchantmentModifierProtection(EmptyClass emptyclass) {
+ this();
+ }
+}
diff --git a/src/main/java/net/minecraft/server/EnchantmentModifierThorns.java b/src/main/java/net/minecraft/server/EnchantmentModifierThorns.java
new file mode 100644
index 0000000..41993e0
--- /dev/null
+++ b/src/main/java/net/minecraft/server/EnchantmentModifierThorns.java
@@ -0,0 +1,17 @@
+package net.minecraft.server;
+
+final class EnchantmentModifierThorns implements EnchantmentModifier {
+
+ public EntityLiving a;
+ public Entity b;
+
+ private EnchantmentModifierThorns() {}
+
+ public void a(Enchantment enchantment, int i) {
+ enchantment.b(this.a, this.b, i);
+ }
+
+ EnchantmentModifierThorns(EmptyClass emptyclass) {
+ this();
+ }
+}
diff --git a/src/main/java/net/minecraft/server/EnchantmentThorns.java b/src/main/java/net/minecraft/server/EnchantmentThorns.java
new file mode 100644
index 0000000..6841259
--- /dev/null
+++ b/src/main/java/net/minecraft/server/EnchantmentThorns.java
@@ -0,0 +1,54 @@
+package net.minecraft.server;
+
+import java.util.Random;
+
+public class EnchantmentThorns extends Enchantment {
+
+ public EnchantmentThorns(int i, int j) {
+ super(i, j, EnchantmentSlotType.ARMOR_TORSO);
+ this.b("thorns");
+ }
+
+ public int a(int n) {
+ return 10 + 20 * (n - 1);
+ }
+
+ public int b(int i) {
+ return super.a(i) + 50;
+ }
+
+ public int getMaxLevel() {
+ return 3;
+ }
+
+ public boolean canEnchant(ItemStack itemstack) {
+ return itemstack.getItem() instanceof ItemArmor ? true : super.canEnchant(itemstack);
+ }
+
+ public void b(EntityLiving entityliving, Entity entity, int n) {
+ Random ai = entityliving.aI();
+ ItemStack a = EnchantmentManager.a(Enchantment.THORNS, entityliving);
+
+ if (a(n, ai)) {
+ entity.damageEntity(DamageSource.a(entityliving), b(n, ai));
+ entity.makeSound("damage.thorns", 0.5F, 1.0F);
+ if (a != null) {
+ a.damage(3, entityliving);
+ }
+ } else if (a != null) {
+ a.damage(1, entityliving);
+ }
+ }
+
+ public static boolean a(int n, Random random) {
+ return n > 0 && random.nextFloat() < 0.15f * n;
+ }
+
+ public static int b(int n, Random random) {
+ if (n > 10) {
+ return n - 10;
+ }
+
+ return 1 + random.nextInt(4);
+ }
+}
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
index 617f7d4..cf0c38f 100644
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
@@ -1,5 +1,6 @@
package net.minecraft.server;
+import java.lang.ref.WeakReference;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
@@ -21,7 +22,7 @@ public abstract class EntityInsentient extends EntityLiving {
private Navigation navigation;
protected final PathfinderGoalSelector goalSelector;
protected final PathfinderGoalSelector targetSelector;
- private EntityLiving goalTarget;
+ private WeakReference<EntityLiving> goalTarget = new WeakReference<EntityLiving>(null); // Spigot Update - 20140921a
private EntitySenses bq;
private ItemStack[] equipment = new ItemStack[5];
public float[] dropChances = new float[5]; // CraftBukkit - protected -> public
@@ -76,11 +77,11 @@ public abstract class EntityInsentient extends EntityLiving {
}
public EntityLiving getGoalTarget() {
- return this.goalTarget;
+ return this.goalTarget.get();
}
public void setGoalTarget(EntityLiving entityliving) {
- this.goalTarget = entityliving;
+ this.goalTarget = new WeakReference<EntityLiving>(entityliving);
}
public boolean a(Class oclass) {
diff --git a/src/main/java/net/minecraft/server/ItemEnchantedBook.java b/src/main/java/net/minecraft/server/ItemEnchantedBook.java
new file mode 100644
index 0000000..0829e4c
--- /dev/null
+++ b/src/main/java/net/minecraft/server/ItemEnchantedBook.java
@@ -0,0 +1,72 @@
+package net.minecraft.server;
+
+import java.util.Random;
+
+public class ItemEnchantedBook extends Item {
+
+ public ItemEnchantedBook() {}
+
+ public boolean e_(ItemStack itemStack) {
+ return false;
+ }
+
+ public EnumItemRarity f(ItemStack itemstack) {
+ if (this.g(itemstack).size() > 0) {
+ return EnumItemRarity.UNCOMMON;
+ }
+ return super.f(itemstack);
+ }
+
+ public NBTTagList g(ItemStack itemStack) {
+ if (itemStack.tag == null || !itemStack.tag.hasKeyOfType("StoredEnchantments", 9)) {
+ return new NBTTagList();
+ }
+ return (NBTTagList)itemStack.tag.get("StoredEnchantments");
+ }
+
+ public void a(ItemStack itemStack, EnchantmentInstance enchantmentInstance) {
+ NBTTagList g = this.g(itemStack);
+ boolean b = true;
+ for (int i = 0; i < g.size(); ++i) {
+ NBTTagCompound value = g.get(i);
+ if (value.getShort("id") == enchantmentInstance.enchantment.id) {
+ if (value.getShort("lvl") < enchantmentInstance.level) {
+ value.setShort("lvl", (short)enchantmentInstance.level);
+ }
+
+ b = false;
+ break;
+ }
+ }
+
+ if (b) {
+ NBTTagCompound nbtTagCompound = new NBTTagCompound();
+ nbtTagCompound.setShort("id", (short)enchantmentInstance.enchantment.id);
+ nbtTagCompound.setShort("lvl", (short)enchantmentInstance.level);
+ g.add(nbtTagCompound);
+ }
+
+ if (!itemStack.hasTag()) {
+ itemStack.setTag(new NBTTagCompound());
+ }
+
+ itemStack.getTag().set("StoredEnchantments", g);
+ }
+
+ public ItemStack a(EnchantmentInstance enchantmentInstance) {
+ ItemStack itemStack = new ItemStack(this);
+ this.a(itemStack, enchantmentInstance);
+ return itemStack;
+ }
+
+ public StructurePieceTreasure b(Random random) {
+ return this.a(random, 1, 1, 1);
+ }
+
+ public StructurePieceTreasure a(final Random random, final int n, final int n2, final int n3) {
+ ItemStack itemstack = new ItemStack(Items.BOOK, 1, 0);
+
+ EnchantmentManager.a(random, itemstack, 30);
+ return new StructurePieceTreasure(itemstack, n, n2, n3);
+ }
+}
diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
index 0cae021..76a5403 100644
--- a/src/main/java/net/minecraft/server/NetworkManager.java
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
@@ -199,6 +199,8 @@ public class NetworkManager extends SimpleChannelInboundHandler {
public void close(IChatBaseComponent ichatbasecomponent) {
// Spigot Start
this.preparing = false;
+ this.k.clear(); // Spigot Update - 20140921a
+ this.l.clear(); // Spigot Update - 20140921a
// Spigot End
if (this.m.isOpen()) {
this.m.close();
diff --git a/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTarget.java b/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTarget.java
new file mode 100644
index 0000000..30a05c6
--- /dev/null
+++ b/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTarget.java
@@ -0,0 +1,54 @@
+package net.minecraft.server;
+
+import java.lang.ref.WeakReference;
+import java.util.Collections;
+import java.util.List;
+
+public class PathfinderGoalNearestAttackableTarget extends PathfinderGoalTarget {
+
+ private final Class a;
+ private final int b;
+ private final DistanceComparator e;
+ private final IEntitySelector f;
+ private WeakReference<EntityLiving> g; // Spigot Update - 20140921a
+
+ public PathfinderGoalNearestAttackableTarget(EntityCreature entitycreature, Class oclass, int i, boolean flag) {
+ this(entitycreature, oclass, i, flag, false);
+ }
+
+ public PathfinderGoalNearestAttackableTarget(EntityCreature entitycreature, Class oclass, int i, boolean flag, boolean flag1) {
+ this(entitycreature, oclass, i, flag, flag1, (IEntitySelector) null);
+ }
+
+ public PathfinderGoalNearestAttackableTarget(EntityCreature entitycreature, Class oclass, int i, boolean flag, boolean flag1, IEntitySelector ientityselector) {
+ super(entitycreature, flag, flag1);
+ this.g = new WeakReference<EntityLiving>(null);
+ this.a = oclass;
+ this.b = i;
+ this.e = new DistanceComparator(entitycreature);
+ this.a(1);
+ this.f = new EntitySelectorNearestAttackableTarget(this, ientityselector);
+ }
+
+ public boolean a() {
+ if (this.b > 0 && this.c.aI().nextInt(this.b) != 0) {
+ return false;
+ } else {
+ double d0 = this.f();
+ List list = this.c.world.a(this.a, this.c.boundingBox.grow(d0, 4.0D, d0), this.f);
+
+ Collections.sort(list, this.e);
+ if (list.isEmpty()) {
+ return false;
+ } else {
+ this.g = new WeakReference<EntityLiving>((EntityLiving) list.get(0));
+ return true;
+ }
+ }
+ }
+
+ public void c() {
+ this.c.setGoalTarget(this.g.get());
+ super.c();
+ }
+}
diff --git a/src/main/java/net/minecraft/server/PathfinderGoalSwell.java b/src/main/java/net/minecraft/server/PathfinderGoalSwell.java
new file mode 100644
index 0000000..9a31d82
--- /dev/null
+++ b/src/main/java/net/minecraft/server/PathfinderGoalSwell.java
@@ -0,0 +1,36 @@
+package net.minecraft.server;
+
+public class PathfinderGoalSwell extends PathfinderGoal {
+
+ EntityCreeper a;
+
+ public PathfinderGoalSwell(EntityCreeper entitycreeper) {
+ this.a = entitycreeper;
+ this.a(1);
+ }
+
+ public boolean a() {
+ EntityLiving entityliving = this.a.getGoalTarget();
+
+ return this.a.cb() > 0 || entityliving != null && this.a.f(entityliving) < 9.0D;
+ }
+
+ public void c() {
+ this.a.getNavigation().h();
+ }
+
+ public void d() {}
+
+ public void e() {
+ EntityLiving b = this.a.getGoalTarget(); // Spigot Update - 20140921a
+ if (b == null) {
+ this.a.a(-1);
+ } else if (this.a.f(b) > 49.0D) {
+ this.a.a(-1);
+ } else if (!this.a.getEntitySenses().canSee(b)) {
+ this.a.a(-1);
+ } else {
+ this.a.a(1);
+ }
+ }
+}
diff --git a/src/main/java/org/bukkit/craftbukkit/util/LongHash.java b/src/main/java/org/bukkit/craftbukkit/util/LongHash.java
index 9d54472..1765c79 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/LongHash.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/LongHash.java
@@ -10,6 +10,6 @@ public class LongHash {
}
public static int lsw(long l) {
- return (int) (l) + Integer.MIN_VALUE; // Spigot - remove redundant &
+ return (int) (l & -1L) + Integer.MIN_VALUE; // Spigot - remove redundant & // Spigot Update - 20140921a
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/util/LongHashSet.java b/src/main/java/org/bukkit/craftbukkit/util/LongHashSet.java
index 7f659b7..22c96c5 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/LongHashSet.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/LongHashSet.java
@@ -31,7 +31,6 @@ public class LongHashSet {
private int elements;
private long[] values;
private int modCount;
- private org.spigotmc.FlatMap<Boolean> flat = new org.spigotmc.FlatMap<Boolean>(); // Spigot
public LongHashSet() {
this(INITIAL_SIZE);
@@ -57,30 +56,10 @@ public class LongHashSet {
}
public boolean contains(int msw, int lsw) {
- // Spigot start
- if ( elements == 0 )
- {
- return false;
- }
- if ( flat.contains( msw, lsw ) )
- {
- return true;
- }
- // Spigot end
return contains(LongHash.toLong(msw, lsw));
}
public boolean contains(long value) {
- // Spigot start
- if ( elements == 0 )
- {
- return false;
- }
- if ( flat.contains( value ) )
- {
- return true;
- }
- // Spigot end
int hash = hash(value);
int index = (hash & 0x7FFFFFFF) % values.length;
int offset = 1;
@@ -103,7 +82,6 @@ public class LongHashSet {
}
public boolean add(long value) {
- flat.put( value, Boolean.TRUE ); // Spigot
int hash = hash(value);
int index = (hash & 0x7FFFFFFF) % values.length;
int offset = 1;
@@ -147,18 +125,10 @@ public class LongHashSet {
}
public void remove(int msw, int lsw) {
- // Spigot start
- flat.remove(msw, lsw);
- remove0(LongHash.toLong(msw, lsw));
+ remove(LongHash.toLong(msw, lsw));
}
public boolean remove(long value) {
- flat.remove(value);
- return remove0(value);
- }
-
- private boolean remove0(long value) {
- // Spigot end
int hash = hash(value);
int index = (hash & 0x7FFFFFFF) % values.length;
int offset = 1;
@@ -191,7 +161,6 @@ public class LongHashSet {
freeEntries = values.length;
modCount++;
- flat = new org.spigotmc.FlatMap<Boolean>();
}
public long[] toArray() {
diff --git a/src/main/java/org/bukkit/craftbukkit/util/LongObjectHashMap.java b/src/main/java/org/bukkit/craftbukkit/util/LongObjectHashMap.java
index 2e5b436..01861cc 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/LongObjectHashMap.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/LongObjectHashMap.java
@@ -28,7 +28,6 @@ public class LongObjectHashMap<V> implements Cloneable, Serializable {
private transient V[][] values;
private transient int modCount;
private transient int size;
- private transient org.spigotmc.FlatMap<V> flat = new org.spigotmc.FlatMap<V>(); // Spigot
public LongObjectHashMap() {
initialize();
@@ -62,17 +61,6 @@ public class LongObjectHashMap<V> implements Cloneable, Serializable {
}
public V get(long key) {
- // Spigot start
- if ( size == 0 )
- {
- return null;
- }
- V val = flat.get( key );
- if ( val != null )
- {
- return val;
- }
- // Spigot end
int index = (int) (keyIndex(key) & (BUCKET_SIZE - 1));
long[] inner = keys[index];
if (inner == null) return null;
@@ -90,7 +78,6 @@ public class LongObjectHashMap<V> implements Cloneable, Serializable {
}
public V put(long key, V value) {
- flat.put(key, value); // Spigot
int index = (int) (keyIndex(key) & (BUCKET_SIZE - 1));
long[] innerKeys = keys[index];
V[] innerValues = values[index];
@@ -137,7 +124,6 @@ public class LongObjectHashMap<V> implements Cloneable, Serializable {
}
public V remove(long key) {
- flat.remove(key); // Spigot
int index = (int) (keyIndex(key) & (BUCKET_SIZE - 1));
long[] inner = keys[index];
if (inner == null) {
@@ -188,7 +174,6 @@ public class LongObjectHashMap<V> implements Cloneable, Serializable {
size = 0;
Arrays.fill(keys, null);
Arrays.fill(values, null);
- flat = new org.spigotmc.FlatMap<V>();
}
public Set<Long> keySet() {
diff --git a/src/main/java/org/spigotmc/FlatMap.java b/src/main/java/org/spigotmc/FlatMap.java
deleted file mode 100644
index 9416f6e..0000000
--- a/src/main/java/org/spigotmc/FlatMap.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.spigotmc;
-
-import org.bukkit.craftbukkit.util.LongHash;
-
-public class FlatMap<V>
-{
-
- private static final int FLAT_LOOKUP_SIZE = 512;
- private final Object[][] flatLookup = new Object[ FLAT_LOOKUP_SIZE * 2 ][ FLAT_LOOKUP_SIZE * 2 ];
-
- public void put(long msw, long lsw, V value)
- {
- long acx = Math.abs( msw );
- long acz = Math.abs( lsw );
- if ( acx < FLAT_LOOKUP_SIZE && acz < FLAT_LOOKUP_SIZE )
- {
- flatLookup[(int) ( msw + FLAT_LOOKUP_SIZE )][(int) ( lsw + FLAT_LOOKUP_SIZE )] = value;
- }
- }
-
- public void put(long key, V value)
- {
- put( LongHash.msw( key ), LongHash.lsw( key ), value );
-
- }
-
- public void remove(long key)
- {
- put( key, null );
- }
-
- public void remove(long msw, long lsw)
- {
- put( msw, lsw, null );
- }
-
- public boolean contains(long msw, long lsw)
- {
- return get( msw, lsw ) != null;
- }
-
- public boolean contains(long key)
- {
- return get( key ) != null;
- }
-
- public V get(long msw, long lsw)
- {
- long acx = Math.abs( msw );
- long acz = Math.abs( lsw );
- if ( acx < FLAT_LOOKUP_SIZE && acz < FLAT_LOOKUP_SIZE )
- {
- return (V) flatLookup[(int) ( msw + FLAT_LOOKUP_SIZE )][(int) ( lsw + FLAT_LOOKUP_SIZE )];
- } else
- {
- return null;
- }
- }
-
- public V get(long key)
- {
- return get( LongHash.msw( key ), LongHash.lsw( key ) );
- }
-}
--
1.9.4.msysgit.0
From feaaf50a42e83b918d3a2c9f36e24ef7a4c6d8a7 Mon Sep 17 00:00:00 2001
From: md_5 <git@md-5.net>
Date: Wed, 1 Oct 2014 00:27:39 -0700
Subject: [PATCH] Spigot Update - 20140927a
diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
index 8dad7ca..78e0965 100644
--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java
+++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
@@ -324,6 +324,10 @@ public class EntityTrackerEntry {
if ( tracker instanceof EntityPlayer )
{
entityplayer.playerConnection.sendPacket( PacketPlayOutPlayerInfo.addPlayer( (EntityPlayer) tracker ) );
+
+ if ( entityplayer.playerConnection.networkManager.getVersion() > 28 ) { // Spigot Update - 20140927a
+ entityplayer.playerConnection.sendPacket( PacketPlayOutPlayerInfo.updateDisplayName( (EntityPlayer) this.tracker ) );
+ }
}
// Spigot end
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
index 0359cb3..86b0343 100644
--- a/src/main/java/net/minecraft/server/PlayerList.java
+++ b/src/main/java/net/minecraft/server/PlayerList.java
@@ -285,11 +285,17 @@ public abstract class PlayerList {
// CraftBukkit start - sendAll above replaced with this loop
PacketPlayOutPlayerInfo packet = PacketPlayOutPlayerInfo.addPlayer( entityplayer ); // Spigot - protocol patch
+ PacketPlayOutPlayerInfo displayPacket = PacketPlayOutPlayerInfo.updateDisplayName( entityplayer ); // Spigot Update - 20140927a
for (int i = 0; i < this.players.size(); ++i) {
EntityPlayer entityplayer1 = (EntityPlayer) this.players.get(i);
if (entityplayer1.getBukkitEntity().canSee(entityplayer.getBukkitEntity())) {
entityplayer1.playerConnection.sendPacket(packet);
+ // Spigot start - Update 20140927a
+ if ( entityplayer1.playerConnection.networkManager.getVersion() > 28 ) {
+ entityplayer1.playerConnection.sendPacket( displayPacket );
+ }
+ // Spigot end
}
}
// CraftBukkit end
@@ -303,6 +309,11 @@ public abstract class PlayerList {
}
// .name -> .listName
entityplayer.playerConnection.sendPacket(PacketPlayOutPlayerInfo.addPlayer( entityplayer1 )); // Spigot - protocol patch
+ // Spigot start - Update 20140927a
+ if ( entityplayer.playerConnection.networkManager.getVersion() > 28 ) {
+ entityplayer.playerConnection.sendPacket( PacketPlayOutPlayerInfo.updateDisplayName( entityplayer1 ) );
+ }
+ // Spigot end
// CraftBukkit end
}
}
--
1.9.4.msysgit.0
From cd9384eed6798cc8638659fa40d161f0ad56b8b6 Mon Sep 17 00:00:00 2001
From: md_5 <git@md-5.net>
Date: Wed, 1 Oct 2014 03:00:09 -0700
Subject: [PATCH] Spigot Update - 20141001a
diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
index 78e0965..886feed 100644
--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java
+++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
@@ -325,7 +325,7 @@ public class EntityTrackerEntry {
{
entityplayer.playerConnection.sendPacket( PacketPlayOutPlayerInfo.addPlayer( (EntityPlayer) tracker ) );
- if ( entityplayer.playerConnection.networkManager.getVersion() > 28 ) { // Spigot Update - 20140927a
+ if ( !entityplayer.getName().equals( entityplayer.listName ) && entityplayer.playerConnection.networkManager.getVersion() > 28 ) { // Spigot Update - 20140927a // Spigot Update - 20141001a
entityplayer.playerConnection.sendPacket( PacketPlayOutPlayerInfo.updateDisplayName( (EntityPlayer) this.tracker ) );
}
}
diff --git a/src/main/java/net/minecraft/server/ItemDoor.java b/src/main/java/net/minecraft/server/ItemDoor.java
new file mode 100644
index 0000000..3fa6e11
--- /dev/null
+++ b/src/main/java/net/minecraft/server/ItemDoor.java
@@ -0,0 +1,79 @@
+package net.minecraft.server;
+
+public class ItemDoor extends Item {
+
+ private Material a;
+
+ public ItemDoor(Material material) {
+ this.a = material;
+ this.maxStackSize = 1;
+ this.a(CreativeModeTab.d);
+ }
+
+ public boolean interactWith(ItemStack itemstack, EntityHuman entityhuman, World world, int i, int j, int k, int l, float f, float f1, float f2) {
+ if (l != 1) {
+ return false;
+ } else {
+ ++j;
+ Block block;
+
+ if (this.a == Material.WOOD) {
+ block = Blocks.WOODEN_DOOR;
+ } else {
+ block = Blocks.IRON_DOOR_BLOCK;
+ }
+
+ if (entityhuman.a(i, j, k, l, itemstack) && entityhuman.a(i, j + 1, k, l, itemstack)) {
+ if (!block.canPlace(world, i, j, k)) {
+ return false;
+ } else {
+ int i1 = MathHelper.floor((double) ((entityhuman.yaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3;
+
+ place(world, i, j, k, i1, block);
+ --itemstack.count;
+ return true;
+ }
+ } else {
+ return false;
+ }
+ }
+ }
+
+ public static void place(World world, int i, int j, int k, int l, Block block) {
+ byte b0 = 0;
+ byte b1 = 0;
+
+ if (l == 0) {
+ b1 = 1;
+ }
+
+ if (l == 1) {
+ b0 = -1;
+ }
+
+ if (l == 2) {
+ b1 = -1;
+ }
+
+ if (l == 3) {
+ b0 = 1;
+ }
+
+ int i1 = (world.getType(i - b0, j, k - b1).r() ? 1 : 0) + (world.getType(i - b0, j + 1, k - b1).r() ? 1 : 0);
+ int j1 = (world.getType(i + b0, j, k + b1).r() ? 1 : 0) + (world.getType(i + b0, j + 1, k + b1).r() ? 1 : 0);
+ boolean flag = world.getType(i - b0, j, k - b1) == block || world.getType(i - b0, j + 1, k - b1) == block;
+ boolean flag1 = world.getType(i + b0, j, k + b1) == block || world.getType(i + b0, j + 1, k + b1) == block;
+ boolean flag2 = false;
+
+ if (flag && !flag1) {
+ flag2 = true;
+ } else if (j1 > i1) {
+ flag2 = true;
+ }
+
+ world.setTypeAndData(i, j, k, block, l, 3); // Spigot Update - 20141001a
+ world.setTypeAndData(i, j + 1, k, block, 8 | (flag2 ? 1 : 0), 3); // Spigot Update - 20141001a
+ //world.applyPhysics(i, j, k, block); // Spigot Update - 20141001a
+ //world.applyPhysics(i, j + 1, k, block); // Spigot Update - 20141001a
+ }
+}
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutChat.java b/src/main/java/net/minecraft/server/PacketPlayOutChat.java
index 27c34f6..05edc52 100644
--- a/src/main/java/net/minecraft/server/PacketPlayOutChat.java
+++ b/src/main/java/net/minecraft/server/PacketPlayOutChat.java
@@ -10,6 +10,7 @@ public class PacketPlayOutChat extends Packet {
private IChatBaseComponent a;
public BaseComponent[] components; // Spigot - Update 20140909b
private boolean b;
+ private int pos; // Spigot - Update 20141001a
public PacketPlayOutChat() {
this.b = true;
@@ -19,10 +20,19 @@ public class PacketPlayOutChat extends Packet {
this(ichatbasecomponent, true);
}
+ public PacketPlayOutChat(IChatBaseComponent ichatbasecomponent, int pos) {
+ this(ichatbasecomponent, pos, true);
+ }
+
public PacketPlayOutChat(IChatBaseComponent ichatbasecomponent, boolean flag) {
+ this(ichatbasecomponent, 0, flag);
+ }
+
+ public PacketPlayOutChat(IChatBaseComponent ichatbasecomponent, int pos, boolean flag) {
this.b = true;
this.a = ichatbasecomponent;
this.b = flag;
+ this.pos = pos;
}
public void a(PacketDataSerializer packetdataserializer) throws IOException {
@@ -43,7 +53,7 @@ public class PacketPlayOutChat extends Packet {
// Spigot start - protocol patch
if ( packetdataserializer.version >= 16 )
{
- packetdataserializer.writeByte(0);
+ packetdataserializer.writeByte( this.pos );
}
// Spigot end
}
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutPosition.java b/src/main/java/net/minecraft/server/PacketPlayOutPosition.java
index b3c0ccf..7520af8 100644
--- a/src/main/java/net/minecraft/server/PacketPlayOutPosition.java
+++ b/src/main/java/net/minecraft/server/PacketPlayOutPosition.java
@@ -8,16 +8,22 @@ public class PacketPlayOutPosition extends Packet {
private float d;
private float e;
private boolean f;
+ private byte relativeBitMask; // Spigot Update - 20141001a
public PacketPlayOutPosition() {}
public PacketPlayOutPosition(double d0, double d1, double d2, float f, float f1, boolean flag) {
+ this(d0, d1, d2, f, f1, flag, (byte)0);
+ }
+
+ public PacketPlayOutPosition(double d0, double d1, double d2, float f, float f1, boolean flag, byte relativeBitMask) {
this.a = d0;
this.b = d1;
this.c = d2;
this.d = f;
this.e = f1;
this.f = flag;
+ this.relativeBitMask = relativeBitMask;
}
public void a(PacketDataSerializer packetdataserializer) {
@@ -41,7 +47,7 @@ public class PacketPlayOutPosition extends Packet {
packetdataserializer.writeBoolean( this.f );
} else
{
- packetdataserializer.writeByte( 0 );
+ packetdataserializer.writeByte( this.relativeBitMask );
}
// Spigot end
}
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
index 86b0343..bc10c4e 100644
--- a/src/main/java/net/minecraft/server/PlayerList.java
+++ b/src/main/java/net/minecraft/server/PlayerList.java
@@ -291,8 +291,8 @@ public abstract class PlayerList {
if (entityplayer1.getBukkitEntity().canSee(entityplayer.getBukkitEntity())) {
entityplayer1.playerConnection.sendPacket(packet);
- // Spigot start - Update 20140927a
- if ( entityplayer1.playerConnection.networkManager.getVersion() > 28 ) {
+ // Spigot start - Update 20140927a // Update - 20141001a
+ if ( !entityplayer.getName().equals( entityplayer.listName ) && entityplayer1.playerConnection.networkManager.getVersion() > 28 ) {
entityplayer1.playerConnection.sendPacket( displayPacket );
}
// Spigot end
@@ -309,8 +309,8 @@ public abstract class PlayerList {
}
// .name -> .listName
entityplayer.playerConnection.sendPacket(PacketPlayOutPlayerInfo.addPlayer( entityplayer1 )); // Spigot - protocol patch
- // Spigot start - Update 20140927a
- if ( entityplayer.playerConnection.networkManager.getVersion() > 28 ) {
+ // Spigot start - Update 20140927a // Update - 20141001a
+ if ( !entityplayer.getName().equals( entityplayer.listName ) && entityplayer.playerConnection.networkManager.getVersion() > 28 ) {
entityplayer.playerConnection.sendPacket( PacketPlayOutPlayerInfo.updateDisplayName( entityplayer1 ) );
}
// Spigot end
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index d452df7..0d025bc 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -844,6 +844,9 @@ public class CraftEventFactory {
}
public static void handleInventoryCloseEvent(EntityHuman human) {
+ if (human.activeContainer == human.defaultContainer) { // Spigot Update - 20141001a
+ return;
+ }
InventoryCloseEvent event = new InventoryCloseEvent(human.activeContainer.getBukkitView());
human.world.getServer().getPluginManager().callEvent(event);
human.activeContainer.transferTo(human.defaultContainer, human.getBukkitEntity());
--
1.9.4.msysgit.0
From 1a72afa69bf31016e7b053e0c70393eb5062a76f Mon Sep 17 00:00:00 2001
From: md_5 <git@md-5.net>
Date: Thu, 13 Nov 2014 20:41:31 -0600
Subject: [PATCH] Spigot Update - 20141113a
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index 26ce4ed..8d60366 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -1753,6 +1753,12 @@ public class PlayerConnection implements PacketPlayInListener {
}
public void a(PacketPlayInTabComplete packetplayintabcomplete) {
+ // Spigot start - Update 20141113a
+ if (PlayerConnection.chatSpamField.addAndGet(this, 20) > 200 && !this.minecraftServer.getPlayerList().isOp(this.player.getProfile())) {
+ this.disconnect("disconnect.spam");
+ return;
+ }
+ // Spigot end
ArrayList arraylist = Lists.newArrayList();
Iterator iterator = this.minecraftServer.a(this.player, packetplayintabcomplete.c()).iterator();
--
1.9.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment