diff --git a/Bukkit b/Bukkit index b9846e5de4..16b340dd38 160000 --- a/Bukkit +++ b/Bukkit @@ -1 +1 @@ -Subproject commit b9846e5de470c50930477f2f51c07592e1fb7548 +Subproject commit 16b340dd387880586b0d659f9b62482af1f28306 diff --git a/Bukkit-Patches/0001-POM-Changes.patch b/Bukkit-Patches/0001-POM-Changes.patch index a8dda1e113..451862fc5a 100644 --- a/Bukkit-Patches/0001-POM-Changes.patch +++ b/Bukkit-Patches/0001-POM-Changes.patch @@ -1,11 +1,11 @@ -From cae4b96d116f9c53871d20ac352c65cd8c73054f Mon Sep 17 00:00:00 2001 +From 2bb359a6e5b56a5e53f765efa8aea93c2db727fb Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 2 Jun 2013 10:36:24 +1000 Subject: [PATCH] POM Changes diff --git a/pom.xml b/pom.xml -index 1092756..805fbbb 100644 +index a83e578..e1f4e61 100644 --- a/pom.xml +++ b/pom.xml @@ -1,43 +1,23 @@ @@ -23,7 +23,7 @@ index 1092756..805fbbb 100644 + + org.spigotmc + spigot-api - 1.6.4-R2.1-SNAPSHOT + 1.7.2-R0.1-SNAPSHOT - Bukkit - http://www.bukkit.org + Spigot-API diff --git a/CraftBukkit b/CraftBukkit index 988f599494..7e1ac0a771 160000 --- a/CraftBukkit +++ b/CraftBukkit @@ -1 +1 @@ -Subproject commit 988f599494f4659053e0467e356e37c688f558ce +Subproject commit 7e1ac0a77129b169704c1e222ff2deb3ab6cd2d2 diff --git a/CraftBukkit-Patches/0002-mc-dev-imports.patch b/CraftBukkit-Patches/0002-mc-dev-imports.patch index f74e3fe680..b4e6a6e245 100644 --- a/CraftBukkit-Patches/0002-mc-dev-imports.patch +++ b/CraftBukkit-Patches/0002-mc-dev-imports.patch @@ -1,12 +1,12 @@ -From 5b899e58bba86e41281992f8eed8b9a93f5405a6 Mon Sep 17 00:00:00 2001 +From 5df0962615a66779058f3ca87ea05ac17be54059 Mon Sep 17 00:00:00 2001 From: md_5 -Date: Tue, 2 Jul 2013 13:13:29 +1000 +Date: Sun, 1 Dec 2013 15:10:48 +1100 Subject: [PATCH] mc-dev imports diff --git a/src/main/java/net/minecraft/server/BlockBrewingStand.java b/src/main/java/net/minecraft/server/BlockBrewingStand.java new file mode 100644 -index 0000000..270b2cb +index 0000000..3287d77 --- /dev/null +++ b/src/main/java/net/minecraft/server/BlockBrewingStand.java @@ -0,0 +1,109 @@ @@ -19,23 +19,23 @@ index 0000000..270b2cb + + private Random a = new Random(); + -+ public BlockBrewingStand(int i) { -+ super(i, Material.ORE); ++ public BlockBrewingStand() { ++ super(Material.ORE); + } + + public boolean c() { + return false; + } + -+ public int d() { ++ public int b() { + return 25; + } + -+ public TileEntity b(World world) { ++ public TileEntity a(World world, int i) { + return new TileEntityBrewingStand(); + } + -+ public boolean b() { ++ public boolean d() { + return false; + } + @@ -70,14 +70,14 @@ index 0000000..270b2cb + } + } + -+ public void remove(World world, int i, int j, int k, int l, int i1) { ++ public void remove(World world, int i, int j, int k, Block block, int l) { + TileEntity tileentity = world.getTileEntity(i, j, k); + + if (tileentity instanceof TileEntityBrewingStand) { + TileEntityBrewingStand tileentitybrewingstand = (TileEntityBrewingStand) tileentity; + -+ for (int j1 = 0; j1 < tileentitybrewingstand.getSize(); ++j1) { -+ ItemStack itemstack = tileentitybrewingstand.getItem(j1); ++ for (int i1 = 0; i1 < tileentitybrewingstand.getSize(); ++i1) { ++ ItemStack itemstack = tileentitybrewingstand.getItem(i1); + + if (itemstack != null) { + float f = this.a.nextFloat() * 0.8F + 0.1F; @@ -85,14 +85,14 @@ index 0000000..270b2cb + float f2 = this.a.nextFloat() * 0.8F + 0.1F; + + while (itemstack.count > 0) { -+ int k1 = this.a.nextInt(21) + 10; ++ int j1 = this.a.nextInt(21) + 10; + -+ if (k1 > itemstack.count) { -+ k1 = itemstack.count; ++ if (j1 > itemstack.count) { ++ j1 = itemstack.count; + } + -+ itemstack.count -= k1; -+ EntityItem entityitem = new EntityItem(world, (double) ((float) i + f), (double) ((float) j + f1), (double) ((float) k + f2), new ItemStack(itemstack.id, k1, itemstack.getData())); ++ itemstack.count -= j1; ++ EntityItem entityitem = new EntityItem(world, (double) ((float) i + f), (double) ((float) j + f1), (double) ((float) k + f2), new ItemStack(itemstack.getItem(), j1, itemstack.getData())); + float f3 = 0.05F; + + entityitem.motX = (double) ((float) this.a.nextGaussian() * f3); @@ -104,24 +104,24 @@ index 0000000..270b2cb + } + } + -+ super.remove(world, i, j, k, l, i1); ++ super.remove(world, i, j, k, block, l); + } + -+ public int getDropType(int i, Random random, int j) { -+ return Item.BREWING_STAND.id; ++ public Item getDropType(int i, Random random, int j) { ++ return Items.BREWING_STAND; + } + -+ public boolean q_() { ++ public boolean M() { + return true; + } + -+ public int b_(World world, int i, int j, int k, int l) { ++ public int g(World world, int i, int j, int k, int l) { + return Container.b((IInventory) world.getTileEntity(i, j, k)); + } +} diff --git a/src/main/java/net/minecraft/server/BlockTNT.java b/src/main/java/net/minecraft/server/BlockTNT.java new file mode 100644 -index 0000000..9acd4f2 +index 0000000..6d5090b --- /dev/null +++ b/src/main/java/net/minecraft/server/BlockTNT.java @@ -0,0 +1,80 @@ @@ -131,8 +131,8 @@ index 0000000..9acd4f2 + +public class BlockTNT extends Block { + -+ public BlockTNT(int i) { -+ super(i, Material.TNT); ++ public BlockTNT() { ++ super(Material.TNT); + this.a(CreativeModeTab.d); + } + @@ -144,7 +144,7 @@ index 0000000..9acd4f2 + } + } + -+ public void doPhysics(World world, int i, int j, int k, int l) { ++ public void doPhysics(World world, int i, int j, int k, Block block) { + if (world.isBlockIndirectlyPowered(i, j, k)) { + this.postBreak(world, i, j, k, 1); + world.setAir(i, j, k); @@ -174,16 +174,16 @@ index 0000000..9acd4f2 + EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) i + 0.5F), (double) ((float) j + 0.5F), (double) ((float) k + 0.5F), entityliving); + + world.addEntity(entitytntprimed); -+ world.makeSound(entitytntprimed, "random.fuse", 1.0F, 1.0F); ++ world.makeSound(entitytntprimed, "game.tnt.primed", 1.0F, 1.0F); + } + } + } + + public boolean interact(World world, int i, int j, int k, EntityHuman entityhuman, int l, float f, float f1, float f2) { -+ if (entityhuman.by() != null && entityhuman.by().id == Item.FLINT_AND_STEEL.id) { ++ if (entityhuman.bD() != null && entityhuman.bD().getItem() == Items.FLINT_AND_STEEL) { + this.a(world, i, j, k, 1, entityhuman); + world.setAir(i, j, k); -+ entityhuman.by().damage(1, entityhuman); ++ entityhuman.bD().damage(1, entityhuman); + return true; + } else { + return super.interact(world, i, j, k, entityhuman, l, f, f1, f2); @@ -205,110 +205,31 @@ index 0000000..9acd4f2 + return false; + } +} -diff --git a/src/main/java/net/minecraft/server/LocaleLanguage.java b/src/main/java/net/minecraft/server/LocaleLanguage.java -new file mode 100644 -index 0000000..aa937fb ---- /dev/null -+++ b/src/main/java/net/minecraft/server/LocaleLanguage.java -@@ -0,0 +1,73 @@ -+package net.minecraft.server; -+ -+import com.google.common.base.Splitter; -+import com.google.common.collect.Iterables; -+import com.google.common.collect.Maps; -+import java.io.IOException; -+import java.io.InputStream; -+import java.util.IllegalFormatException; -+import java.util.Iterator; -+import java.util.Map; -+import java.util.regex.Pattern; -+import org.apache.commons.io.Charsets; -+import org.apache.commons.io.IOUtils; -+ -+public class LocaleLanguage { -+ -+ private static final Pattern a = Pattern.compile("%(\\d+\\$)?[\\d\\.]*[df]"); -+ private static final Splitter b = Splitter.on('=').limit(2); -+ private static LocaleLanguage c = new LocaleLanguage(); -+ private Map d = Maps.newHashMap(); -+ -+ public LocaleLanguage() { -+ try { -+ InputStream inputstream = LocaleLanguage.class.getResourceAsStream("/assets/minecraft/lang/en_US.lang"); -+ Iterator iterator = IOUtils.readLines(inputstream, Charsets.UTF_8).iterator(); -+ -+ while (iterator.hasNext()) { -+ String s = (String) iterator.next(); -+ -+ if (!s.isEmpty() && s.charAt(0) != 35) { -+ String[] astring = (String[]) Iterables.toArray(b.split(s), String.class); -+ -+ if (astring != null && astring.length == 2) { -+ String s1 = astring[0]; -+ String s2 = a.matcher(astring[1]).replaceAll("%$1s"); -+ -+ this.d.put(s1, s2); -+ } -+ } -+ } -+ } catch (IOException ioexception) { -+ ; -+ } -+ } -+ -+ static LocaleLanguage a() { -+ return c; -+ } -+ -+ public synchronized String a(String s) { -+ return this.c(s); -+ } -+ -+ public synchronized String a(String s, Object... aobject) { -+ String s1 = this.c(s); -+ -+ try { -+ return String.format(s1, aobject); -+ } catch (IllegalFormatException illegalformatexception) { -+ return "Format error: " + s1; -+ } -+ } -+ -+ private String c(String s) { -+ String s1 = (String) this.d.get(s); -+ -+ return s1 == null ? s : s1; -+ } -+ -+ public synchronized boolean b(String s) { -+ return this.d.containsKey(s); -+ } -+} diff --git a/src/main/java/net/minecraft/server/NextTickListEntry.java b/src/main/java/net/minecraft/server/NextTickListEntry.java new file mode 100644 -index 0000000..acf8838 +index 0000000..06934a1 --- /dev/null +++ b/src/main/java/net/minecraft/server/NextTickListEntry.java -@@ -0,0 +1,56 @@ +@@ -0,0 +1,60 @@ +package net.minecraft.server; + +public class NextTickListEntry implements Comparable { + -+ private static long g; ++ private static long f; ++ private final Block g; + public int a; + public int b; + public int c; -+ public int d; -+ public long e; -+ public int f; ++ public long d; ++ public int e; + private long h; + -+ public NextTickListEntry(int i, int j, int k, int l) { -+ this.h = (long) (g++); ++ public NextTickListEntry(int i, int j, int k, Block block) { ++ this.h = (long) (f++); + this.a = i; + this.b = j; + this.c = k; -+ this.d = l; ++ this.g = block; + } + + public boolean equals(Object object) { @@ -317,7 +238,7 @@ index 0000000..acf8838 + } else { + NextTickListEntry nextticklistentry = (NextTickListEntry) object; + -+ return this.a == nextticklistentry.a && this.b == nextticklistentry.b && this.c == nextticklistentry.c && Block.b(this.d, nextticklistentry.d); ++ return this.a == nextticklistentry.a && this.b == nextticklistentry.b && this.c == nextticklistentry.c && Block.a(this.g, nextticklistentry.g); + } + } + @@ -326,20 +247,24 @@ index 0000000..acf8838 + } + + public NextTickListEntry a(long i) { -+ this.e = i; ++ this.d = i; + return this; + } + + public void a(int i) { -+ this.f = i; ++ this.e = i; + } + + public int compareTo(NextTickListEntry nextticklistentry) { -+ return this.e < nextticklistentry.e ? -1 : (this.e > nextticklistentry.e ? 1 : (this.f != nextticklistentry.f ? this.f - nextticklistentry.f : (this.h < nextticklistentry.h ? -1 : (this.h > nextticklistentry.h ? 1 : 0)))); ++ return this.d < nextticklistentry.d ? -1 : (this.d > nextticklistentry.d ? 1 : (this.e != nextticklistentry.e ? this.e - nextticklistentry.e : (this.h < nextticklistentry.h ? -1 : (this.h > nextticklistentry.h ? 1 : 0)))); + } + + public String toString() { -+ return this.d + ": (" + this.a + ", " + this.b + ", " + this.c + "), " + this.e + ", " + this.f + ", " + this.h; ++ return Block.b(this.g) + ": (" + this.a + ", " + this.b + ", " + this.c + "), " + this.d + ", " + this.e + ", " + this.h; ++ } ++ ++ public Block a() { ++ return this.g; + } + + public int compareTo(Object object) { @@ -394,7 +319,7 @@ index 0000000..5d75a54 +} diff --git a/src/main/java/net/minecraft/server/OldChunkLoader.java b/src/main/java/net/minecraft/server/OldChunkLoader.java new file mode 100644 -index 0000000..53c1cb5 +index 0000000..fcb9912 --- /dev/null +++ b/src/main/java/net/minecraft/server/OldChunkLoader.java @@ -0,0 +1,120 @@ @@ -413,9 +338,9 @@ index 0000000..53c1cb5 + oldchunk.d = new OldNibbleArray(nbttagcompound.getByteArray("BlockLight"), 7); + oldchunk.c = nbttagcompound.getByteArray("HeightMap"); + oldchunk.b = nbttagcompound.getBoolean("TerrainPopulated"); -+ oldchunk.h = nbttagcompound.getList("Entities"); -+ oldchunk.i = nbttagcompound.getList("TileEntities"); -+ oldchunk.j = nbttagcompound.getList("TileTicks"); ++ oldchunk.h = nbttagcompound.getList("Entities", 10); ++ oldchunk.i = nbttagcompound.getList("TileEntities", 10); ++ oldchunk.j = nbttagcompound.getList("TileTicks", 10); + + try { + oldchunk.a = nbttagcompound.getLong("LastUpdate"); @@ -438,7 +363,7 @@ index 0000000..53c1cb5 + + nbttagcompound.setIntArray("HeightMap", aint); + nbttagcompound.setBoolean("TerrainPopulated", oldchunk.b); -+ NBTTagList nbttaglist = new NBTTagList("Sections"); ++ NBTTagList nbttaglist = new NBTTagList(); + + int j; + @@ -518,314 +443,6 @@ index 0000000..53c1cb5 + } + } +} -diff --git a/src/main/java/net/minecraft/server/Packet254GetInfo.java b/src/main/java/net/minecraft/server/Packet254GetInfo.java -new file mode 100644 -index 0000000..9afa795 ---- /dev/null -+++ b/src/main/java/net/minecraft/server/Packet254GetInfo.java -@@ -0,0 +1,53 @@ -+package net.minecraft.server; -+ -+import java.io.DataInput; -+import java.io.DataOutput; -+ -+public class Packet254GetInfo extends Packet { -+ -+ private static final int d = (new Packet250CustomPayload()).n(); -+ public int a; -+ public String b; -+ public int c; -+ -+ public Packet254GetInfo() {} -+ -+ public void a(DataInput datainput) throws java.io.IOException { // Spigot - throws -+ try { -+ datainput.readByte(); -+ datainput.readByte(); -+ a(datainput, 255); -+ datainput.readShort(); -+ this.a = datainput.readByte(); -+ if (this.a >= 73) { -+ this.b = a(datainput, 255); -+ this.c = datainput.readInt(); -+ } -+ } catch (Throwable throwable) { -+ this.a = 0; -+ this.b = ""; -+ } -+ } -+ -+ public void a(DataOutput dataoutput) throws java.io.IOException { // Spigot - throws -+ dataoutput.writeByte(1); -+ dataoutput.writeByte(d); -+ Packet.a("MC|PingHost", dataoutput); -+ dataoutput.writeShort(3 + 2 * this.b.length() + 4); -+ dataoutput.writeByte(this.a); -+ Packet.a(this.b, dataoutput); -+ dataoutput.writeInt(this.c); -+ } -+ -+ public void handle(Connection connection) { -+ connection.a(this); -+ } -+ -+ public int a() { -+ return 3 + this.b.length() * 2 + 4; -+ } -+ -+ public boolean d() { -+ return this.a == 0; -+ } -+} -diff --git a/src/main/java/net/minecraft/server/Packet51MapChunk.java b/src/main/java/net/minecraft/server/Packet51MapChunk.java -new file mode 100644 -index 0000000..4e67e27 ---- /dev/null -+++ b/src/main/java/net/minecraft/server/Packet51MapChunk.java -@@ -0,0 +1,186 @@ -+package net.minecraft.server; -+ -+import java.io.DataInput; -+import java.io.DataOutput; -+import java.io.IOException; -+import java.util.zip.DataFormatException; -+import java.util.zip.Deflater; -+import java.util.zip.Inflater; -+ -+public class Packet51MapChunk extends Packet { -+ -+ public int a; -+ public int b; -+ public int c; -+ public int d; -+ private byte[] buffer; -+ private byte[] inflatedBuffer; -+ public boolean e; -+ private int size; -+ private static byte[] buildBuffer = new byte[196864]; -+ -+ public Packet51MapChunk() { -+ this.lowPriority = true; -+ } -+ -+ public Packet51MapChunk(Chunk chunk, boolean flag, int i) { -+ this.lowPriority = true; -+ this.a = chunk.x; -+ this.b = chunk.z; -+ this.e = flag; -+ ChunkMap chunkmap = a(chunk, flag, i); -+ Deflater deflater = new Deflater(-1); -+ -+ this.d = chunkmap.c; -+ this.c = chunkmap.b; -+ -+ try { -+ this.inflatedBuffer = chunkmap.a; -+ deflater.setInput(chunkmap.a, 0, chunkmap.a.length); -+ deflater.finish(); -+ this.buffer = new byte[chunkmap.a.length]; -+ this.size = deflater.deflate(this.buffer); -+ } finally { -+ deflater.end(); -+ } -+ } -+ -+ public void a(DataInput datainput) throws java.io.IOException { // Spigot - throws -+ this.a = datainput.readInt(); -+ this.b = datainput.readInt(); -+ this.e = datainput.readBoolean(); -+ this.c = datainput.readShort(); -+ this.d = datainput.readShort(); -+ this.size = datainput.readInt(); -+ if (buildBuffer.length < this.size) { -+ buildBuffer = new byte[this.size]; -+ } -+ -+ datainput.readFully(buildBuffer, 0, this.size); -+ int i = 0; -+ -+ int j; -+ -+ for (j = 0; j < 16; ++j) { -+ i += this.c >> j & 1; -+ } -+ -+ j = 12288 * i; -+ if (this.e) { -+ j += 256; -+ } -+ -+ this.inflatedBuffer = new byte[j]; -+ Inflater inflater = new Inflater(); -+ -+ inflater.setInput(buildBuffer, 0, this.size); -+ -+ try { -+ inflater.inflate(this.inflatedBuffer); -+ } catch (DataFormatException dataformatexception) { -+ throw new IOException("Bad compressed data format"); -+ } finally { -+ inflater.end(); -+ } -+ } -+ -+ public void a(DataOutput dataoutput) throws java.io.IOException { // Spigot - throws -+ dataoutput.writeInt(this.a); -+ dataoutput.writeInt(this.b); -+ dataoutput.writeBoolean(this.e); -+ dataoutput.writeShort((short) (this.c & '\uffff')); -+ dataoutput.writeShort((short) (this.d & '\uffff')); -+ dataoutput.writeInt(this.size); -+ dataoutput.write(this.buffer, 0, this.size); -+ } -+ -+ public void handle(Connection connection) { -+ connection.a(this); -+ } -+ -+ public int a() { -+ return 17 + this.size; -+ } -+ -+ public static ChunkMap a(Chunk chunk, boolean flag, int i) { -+ int j = 0; -+ ChunkSection[] achunksection = chunk.i(); -+ int k = 0; -+ ChunkMap chunkmap = new ChunkMap(); -+ byte[] abyte = buildBuffer; -+ -+ if (flag) { -+ chunk.seenByPlayer = true; -+ } -+ -+ int l; -+ -+ for (l = 0; l < achunksection.length; ++l) { -+ if (achunksection[l] != null && (!flag || !achunksection[l].isEmpty()) && (i & 1 << l) != 0) { -+ chunkmap.b |= 1 << l; -+ if (achunksection[l].getExtendedIdArray() != null) { -+ chunkmap.c |= 1 << l; -+ ++k; -+ } -+ } -+ } -+ -+ for (l = 0; l < achunksection.length; ++l) { -+ if (achunksection[l] != null && (!flag || !achunksection[l].isEmpty()) && (i & 1 << l) != 0) { -+ byte[] abyte1 = achunksection[l].getIdArray(); -+ -+ System.arraycopy(abyte1, 0, abyte, j, abyte1.length); -+ j += abyte1.length; -+ } -+ } -+ -+ NibbleArray nibblearray; -+ -+ for (l = 0; l < achunksection.length; ++l) { -+ if (achunksection[l] != null && (!flag || !achunksection[l].isEmpty()) && (i & 1 << l) != 0) { -+ nibblearray = achunksection[l].getDataArray(); -+ System.arraycopy(nibblearray.a, 0, abyte, j, nibblearray.a.length); -+ j += nibblearray.a.length; -+ } -+ } -+ -+ for (l = 0; l < achunksection.length; ++l) { -+ if (achunksection[l] != null && (!flag || !achunksection[l].isEmpty()) && (i & 1 << l) != 0) { -+ nibblearray = achunksection[l].getEmittedLightArray(); -+ System.arraycopy(nibblearray.a, 0, abyte, j, nibblearray.a.length); -+ j += nibblearray.a.length; -+ } -+ } -+ -+ if (!chunk.world.worldProvider.g) { -+ for (l = 0; l < achunksection.length; ++l) { -+ if (achunksection[l] != null && (!flag || !achunksection[l].isEmpty()) && (i & 1 << l) != 0) { -+ nibblearray = achunksection[l].getSkyLightArray(); -+ System.arraycopy(nibblearray.a, 0, abyte, j, nibblearray.a.length); -+ j += nibblearray.a.length; -+ } -+ } -+ } -+ -+ if (k > 0) { -+ for (l = 0; l < achunksection.length; ++l) { -+ if (achunksection[l] != null && (!flag || !achunksection[l].isEmpty()) && achunksection[l].getExtendedIdArray() != null && (i & 1 << l) != 0) { -+ nibblearray = achunksection[l].getExtendedIdArray(); -+ System.arraycopy(nibblearray.a, 0, abyte, j, nibblearray.a.length); -+ j += nibblearray.a.length; -+ } -+ } -+ } -+ -+ if (flag) { -+ byte[] abyte2 = chunk.m(); -+ -+ System.arraycopy(abyte2, 0, abyte, j, abyte2.length); -+ j += abyte2.length; -+ } -+ -+ chunkmap.a = new byte[j]; -+ System.arraycopy(abyte, 0, chunkmap.a, 0, j); -+ return chunkmap; -+ } -+} -diff --git a/src/main/java/net/minecraft/server/Packet63WorldParticles.java b/src/main/java/net/minecraft/server/Packet63WorldParticles.java -new file mode 100644 -index 0000000..f036c53 ---- /dev/null -+++ b/src/main/java/net/minecraft/server/Packet63WorldParticles.java -@@ -0,0 +1,51 @@ -+package net.minecraft.server; -+ -+import java.io.DataInput; -+import java.io.DataOutput; -+ -+public class Packet63WorldParticles extends Packet { -+ -+ private String a; -+ private float b; -+ private float c; -+ private float d; -+ private float e; -+ private float f; -+ private float g; -+ private float h; -+ private int i; -+ -+ public Packet63WorldParticles() {} -+ -+ public void a(DataInput datainput) throws java.io.IOException { // Spigot - throws -+ this.a = a(datainput, 64); -+ this.b = datainput.readFloat(); -+ this.c = datainput.readFloat(); -+ this.d = datainput.readFloat(); -+ this.e = datainput.readFloat(); -+ this.f = datainput.readFloat(); -+ this.g = datainput.readFloat(); -+ this.h = datainput.readFloat(); -+ this.i = datainput.readInt(); -+ } -+ -+ public void a(DataOutput dataoutput) throws java.io.IOException { // Spigot - throws -+ a(this.a, dataoutput); -+ dataoutput.writeFloat(this.b); -+ dataoutput.writeFloat(this.c); -+ dataoutput.writeFloat(this.d); -+ dataoutput.writeFloat(this.e); -+ dataoutput.writeFloat(this.f); -+ dataoutput.writeFloat(this.g); -+ dataoutput.writeFloat(this.h); -+ dataoutput.writeInt(this.i); -+ } -+ -+ public void handle(Connection connection) { -+ connection.a(this); -+ } -+ -+ public int a() { -+ return 64; -+ } -+} diff --git a/src/main/java/net/minecraft/server/RegionFileCache.java b/src/main/java/net/minecraft/server/RegionFileCache.java new file mode 100644 index 0000000..900ed68 @@ -901,10 +518,10 @@ index 0000000..900ed68 +} diff --git a/src/main/java/net/minecraft/server/StructureGenerator.java b/src/main/java/net/minecraft/server/StructureGenerator.java new file mode 100644 -index 0000000..ab4dc19 +index 0000000..1eb87ae --- /dev/null +++ b/src/main/java/net/minecraft/server/StructureGenerator.java -@@ -0,0 +1,216 @@ +@@ -0,0 +1,217 @@ +package net.minecraft.server; + +import java.util.HashMap; @@ -916,14 +533,14 @@ index 0000000..ab4dc19 + +public abstract class StructureGenerator extends WorldGenBase { + -+ private WorldGenFeature e; ++ private PersistentStructure e; + protected Map d = new HashMap(); + + public StructureGenerator() {} + + public abstract String a(); + -+ protected final void a(World world, int i, int j, int k, int l, byte[] abyte) { ++ protected final void a(World world, int i, int j, int k, int l, Block[] ablock) { + this.a(world); + if (!this.d.containsKey(Long.valueOf(ChunkCoordIntPair.a(i, j)))) { + this.b.nextInt(); @@ -1022,7 +639,7 @@ index 0000000..ab4dc19 + long k1 = (long) (k >> 4) * i1; + + this.b.setSeed(j1 ^ k1 ^ world.getSeed()); -+ this.a(world, i >> 4, k >> 4, 0, 0, (byte[]) null); ++ this.a(world, i >> 4, k >> 4, 0, 0, (Block[]) null); + double d0 = Double.MAX_VALUE; + ChunkPosition chunkposition = null; + Iterator iterator = this.d.values().iterator(); @@ -1054,7 +671,7 @@ index 0000000..ab4dc19 + if (chunkposition != null) { + return chunkposition; + } else { -+ List list = this.p_(); ++ List list = this.o_(); + + if (list != null) { + ChunkPosition chunkposition2 = null; @@ -1079,22 +696,23 @@ index 0000000..ab4dc19 + } + } + -+ protected List p_() { ++ protected List o_() { + return null; + } + + private void a(World world) { + if (this.e == null) { -+ this.e = (WorldGenFeature) world.a(WorldGenFeature.class, this.a()); ++ this.e = (PersistentStructure) world.a(PersistentStructure.class, this.a()); + if (this.e == null) { -+ this.e = new WorldGenFeature(this.a()); -+ world.a(this.a(), (WorldMapBase) this.e); ++ this.e = new PersistentStructure(this.a()); ++ world.a(this.a(), (PersistentBase) this.e); + } else { + NBTTagCompound nbttagcompound = this.e.a(); + Iterator iterator = nbttagcompound.c().iterator(); + + while (iterator.hasNext()) { -+ NBTBase nbtbase = (NBTBase) iterator.next(); ++ String s = (String) iterator.next(); ++ NBTBase nbtbase = nbttagcompound.get(s); + + if (nbtbase.getTypeId() == 10) { + NBTTagCompound nbttagcompound1 = (NBTTagCompound) nbtbase; @@ -1122,5 +740,5 @@ index 0000000..ab4dc19 + protected abstract StructureStart b(int i, int j); +} -- -1.8.1.2 +1.8.3.2 diff --git a/CraftBukkit-Patches/0005-Better-Chunk-Tick-Selection.patch b/CraftBukkit-Patches/0005-Better-Chunk-Tick-Selection.patch index 16e5830e3d..9b93dd39f5 100644 --- a/CraftBukkit-Patches/0005-Better-Chunk-Tick-Selection.patch +++ b/CraftBukkit-Patches/0005-Better-Chunk-Tick-Selection.patch @@ -1,13 +1,22 @@ -From 4feddcc91c933967b5ea82389c2593641f28e20f Mon Sep 17 00:00:00 2001 +From 099b9e465573806de2997da7fb11ba1d6c44bb82 Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 11 Jun 2013 12:56:02 +1000 Subject: [PATCH] Better Chunk Tick Selection diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 9357eb9..f0a8024 100644 +index 9357eb9..9a2da15 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java +@@ -61,7 +61,7 @@ public abstract class World implements IBlockAccess { + public Scoreboard scoreboard = new Scoreboard(); // CraftBukkit - protected -> public + public boolean isStatic; + // CraftBukkit start - public, longhashset +- protected LongHashSet chunkTickList = new LongHashSet(); ++ // protected LongHashSet chunkTickList = new LongHashSet(); // Spigot + private int L; + public boolean allowMonsters; + public boolean allowAnimals; @@ -74,6 +74,30 @@ public abstract class World implements IBlockAccess { private boolean N; int[] I; diff --git a/CraftBukkit-Patches/0013-Compressed-Nibble-Arrays.patch b/CraftBukkit-Patches/0013-Compressed-Nibble-Arrays.patch index 65dab50f8c..bab8a1e3be 100644 --- a/CraftBukkit-Patches/0013-Compressed-Nibble-Arrays.patch +++ b/CraftBukkit-Patches/0013-Compressed-Nibble-Arrays.patch @@ -1,4 +1,4 @@ -From 1daa2b921a3a38f046c2281993f1b676ecac515a Mon Sep 17 00:00:00 2001 +From 21428931e905c898c8272765539255bcb802c19e Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Sun, 13 Jan 2013 03:49:07 -0800 Subject: [PATCH] Compressed Nibble Arrays @@ -252,7 +252,7 @@ index 5d75a54..c9bc20c 100644 int j1 = i1 >> 1; int k1 = i1 & 1; diff --git a/src/main/java/net/minecraft/server/OldChunkLoader.java b/src/main/java/net/minecraft/server/OldChunkLoader.java -index 53c1cb5..9a9e20f 100644 +index fcb9912..6ee28cc 100644 --- a/src/main/java/net/minecraft/server/OldChunkLoader.java +++ b/src/main/java/net/minecraft/server/OldChunkLoader.java @@ -94,9 +94,11 @@ public class OldChunkLoader { @@ -270,65 +270,6 @@ index 53c1cb5..9a9e20f 100644 nbttaglist.add(nbttagcompound1); } } -diff --git a/src/main/java/net/minecraft/server/Packet51MapChunk.java b/src/main/java/net/minecraft/server/Packet51MapChunk.java -index 4e67e27..fa10397 100644 ---- a/src/main/java/net/minecraft/server/Packet51MapChunk.java -+++ b/src/main/java/net/minecraft/server/Packet51MapChunk.java -@@ -139,16 +139,22 @@ public class Packet51MapChunk extends Packet { - for (l = 0; l < achunksection.length; ++l) { - if (achunksection[l] != null && (!flag || !achunksection[l].isEmpty()) && (i & 1 << l) != 0) { - nibblearray = achunksection[l].getDataArray(); -- System.arraycopy(nibblearray.a, 0, abyte, j, nibblearray.a.length); -- j += nibblearray.a.length; -+ // Spigot start -+ // System.arraycopy(nibblearray.a, 0, abyte, j, nibblearray.a.length); -+ // j += nibblearray.a.length; -+ j = nibblearray.copyToByteArray(abyte, j); -+ // Spigot end - } - } - - for (l = 0; l < achunksection.length; ++l) { - if (achunksection[l] != null && (!flag || !achunksection[l].isEmpty()) && (i & 1 << l) != 0) { - nibblearray = achunksection[l].getEmittedLightArray(); -- System.arraycopy(nibblearray.a, 0, abyte, j, nibblearray.a.length); -- j += nibblearray.a.length; -+ // Spigot start -+ // System.arraycopy(nibblearray.a, 0, abyte, j, nibblearray.a.length); -+ // j += nibblearray.a.length; -+ j = nibblearray.copyToByteArray(abyte, j); -+ // Spigot end - } - } - -@@ -156,8 +162,11 @@ public class Packet51MapChunk extends Packet { - for (l = 0; l < achunksection.length; ++l) { - if (achunksection[l] != null && (!flag || !achunksection[l].isEmpty()) && (i & 1 << l) != 0) { - nibblearray = achunksection[l].getSkyLightArray(); -- System.arraycopy(nibblearray.a, 0, abyte, j, nibblearray.a.length); -- j += nibblearray.a.length; -+ // Spigot start -+ // System.arraycopy(nibblearray.a, 0, abyte, j, nibblearray.a.length); -+ // j += nibblearray.a.length; -+ j = nibblearray.copyToByteArray(abyte, j); -+ // Spigot end - } - } - } -@@ -166,8 +175,11 @@ public class Packet51MapChunk extends Packet { - for (l = 0; l < achunksection.length; ++l) { - if (achunksection[l] != null && (!flag || !achunksection[l].isEmpty()) && achunksection[l].getExtendedIdArray() != null && (i & 1 << l) != 0) { - nibblearray = achunksection[l].getExtendedIdArray(); -- System.arraycopy(nibblearray.a, 0, abyte, j, nibblearray.a.length); -- j += nibblearray.a.length; -+ // Spigot start -+ //System.arraycopy(nibblearray.a, 0, abyte, j, nibblearray.a.length); -+ //j += nibblearray.a.length; -+ j = nibblearray.copyToByteArray(abyte, j); -+ // Spigot end - } - } - } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java index b2c6ef4..55f5225 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java diff --git a/CraftBukkit-Patches/0017-Orebfuscator.patch b/CraftBukkit-Patches/0017-Orebfuscator.patch index 9fbcc1206d..7feb23c5a9 100644 --- a/CraftBukkit-Patches/0017-Orebfuscator.patch +++ b/CraftBukkit-Patches/0017-Orebfuscator.patch @@ -1,4 +1,4 @@ -From 29223bf84a6cc1301032e98df9c76f170b78f99e Mon Sep 17 00:00:00 2001 +From 9ab09589f7ca0433a1c6aac5b6f6cc847e82995d Mon Sep 17 00:00:00 2001 From: md_5 Date: Thu, 16 May 2013 18:51:05 +1000 Subject: [PATCH] Orebfuscator @@ -36,18 +36,6 @@ index 39e5b5b..d2587c1 100644 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/Packet51MapChunk.java b/src/main/java/net/minecraft/server/Packet51MapChunk.java -index fa10397..91d7feb 100644 ---- a/src/main/java/net/minecraft/server/Packet51MapChunk.java -+++ b/src/main/java/net/minecraft/server/Packet51MapChunk.java -@@ -33,6 +33,7 @@ public class Packet51MapChunk extends Packet { - - this.d = chunkmap.c; - this.c = chunkmap.b; -+ chunk.world.spigotConfig.antiXrayInstance.obfuscateSync(chunk.x, chunk.z, i, chunkmap.a, chunk.world); // Spigot - - try { - this.inflatedBuffer = chunkmap.a; diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java index 3eac231..c3cfdc7 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java @@ -115,7 +103,7 @@ index 3028404..e24d4b5 100644 } diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index b1f294d..2e03b42 100644 +index b276a3d..57511c8 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -464,6 +464,7 @@ public abstract class World implements IBlockAccess { diff --git a/CraftBukkit-Patches/0047-Lower-Chunk-Compression.patch b/CraftBukkit-Patches/0047-Lower-Chunk-Compression.patch index 85fc5a0e2e..7e7fa09082 100644 --- a/CraftBukkit-Patches/0047-Lower-Chunk-Compression.patch +++ b/CraftBukkit-Patches/0047-Lower-Chunk-Compression.patch @@ -1,23 +1,10 @@ -From d6e3678b8c413d9ffb2cedc75aecb609d81d3dc8 Mon Sep 17 00:00:00 2001 +From aafc4ddbcafdae73c8e3eb9caf5740f324d48b62 Mon Sep 17 00:00:00 2001 From: md_5 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/Packet51MapChunk.java b/src/main/java/net/minecraft/server/Packet51MapChunk.java -index 91d7feb..29baf6d 100644 ---- a/src/main/java/net/minecraft/server/Packet51MapChunk.java -+++ b/src/main/java/net/minecraft/server/Packet51MapChunk.java -@@ -29,7 +29,7 @@ public class Packet51MapChunk extends Packet { - this.b = chunk.z; - this.e = flag; - ChunkMap chunkmap = a(chunk, flag, i); -- Deflater deflater = new Deflater(-1); -+ Deflater deflater = new Deflater(4); // Spigot 4 -> -1 - - 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 c3cfdc7..8e1c4cb 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java diff --git a/CraftBukkit-Patches/0059-Call-EntityChangeBlockEvent-for-Fire-Arrows-hitting-.patch b/CraftBukkit-Patches/0059-Call-EntityChangeBlockEvent-for-Fire-Arrows-hitting-.patch index 4c39528345..08cae8a515 100644 --- a/CraftBukkit-Patches/0059-Call-EntityChangeBlockEvent-for-Fire-Arrows-hitting-.patch +++ b/CraftBukkit-Patches/0059-Call-EntityChangeBlockEvent-for-Fire-Arrows-hitting-.patch @@ -1,4 +1,4 @@ -From 2df0995cba9ed8b162392ebe8bb8719b8cab7864 Mon Sep 17 00:00:00 2001 +From 019b3e2bd9fce74bce6fec040c7f85073d5842a2 Mon Sep 17 00:00:00 2001 From: BlackHole Date: Tue, 16 Jul 2013 22:34:50 +0200 Subject: [PATCH] Call EntityChangeBlockEvent for Fire Arrows hitting TNT @@ -6,17 +6,17 @@ 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 9acd4f2..312b4c8 100644 +index 6d5090b..819bef9 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.by() != null && entityhuman.by().id == Item.FLINT_AND_STEEL.id) { + if (entityhuman.bD() != null && entityhuman.bD().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.by().damage(1, entityhuman); + entityhuman.bD().damage(1, entityhuman); return true; @@ -68,6 +68,11 @@ public class BlockTNT extends Block { EntityArrow entityarrow = (EntityArrow) entity; diff --git a/CraftBukkit-Patches/0060-Allow-Disabling-of-1.6.3-Structure-Saving.patch b/CraftBukkit-Patches/0060-Allow-Disabling-of-1.6.3-Structure-Saving.patch index 9dba148531..d2b80f4dc6 100644 --- a/CraftBukkit-Patches/0060-Allow-Disabling-of-1.6.3-Structure-Saving.patch +++ b/CraftBukkit-Patches/0060-Allow-Disabling-of-1.6.3-Structure-Saving.patch @@ -1,30 +1,29 @@ -From b8c36f916c18da6c3446eb6298bfa9cdc15e8b4d Mon Sep 17 00:00:00 2001 +From 35c24fa363d24102afd5b9ebb087ebba6e1e845a Mon Sep 17 00:00:00 2001 From: md_5 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 ab4dc19..cb8ff49 100644 +index 1eb87ae..b3c8101 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) { -- this.e = (WorldGenFeature) world.a(WorldGenFeature.class, this.a()); + // Spigot Start + if ( world.spigotConfig.saveStructureInfo ) + { -+ this.e = (WorldGenFeature) world.a( WorldGenFeature.class, this.a() ); + this.e = (PersistentStructure) world.a(PersistentStructure.class, this.a()); + } else + { -+ this.e = new WorldGenFeature( this.a() ); ++ this.e = new PersistentStructure( this.a() ); + } + // Spigot End if (this.e == null) { - this.e = new WorldGenFeature(this.a()); - world.a(this.a(), (WorldMapBase) this.e); + 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 2caafa2..a34670e 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java