diff --git a/Bukkit-Patches/0001-POM-Changes.patch b/Bukkit-Patches/0001-POM-Changes.patch index 8bc239e..36bda49 100644 --- a/Bukkit-Patches/0001-POM-Changes.patch +++ b/Bukkit-Patches/0001-POM-Changes.patch @@ -1,11 +1,11 @@ -From 3944fc93fc9dda3a79b13b15b159b75875ea7ee0 Mon Sep 17 00:00:00 2001 +From eaef9b5a74b7256497d5f048a61118d7403c7114 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 853fab1..7be35f3 100644 +index 085883e..f29b8f7 100644 --- a/pom.xml +++ b/pom.xml @@ -9,14 +9,14 @@ @@ -16,7 +16,7 @@ index 853fab1..7be35f3 100644 - bukkit + org.spigotmc + spigot-api - 1.8-R0.1-SNAPSHOT + 1.8.3-R0.1-SNAPSHOT jar - Bukkit diff --git a/CraftBukkit-Patches/0001-POM-Changes.patch b/CraftBukkit-Patches/0001-POM-Changes.patch index 51134a8..51baaa4 100644 --- a/CraftBukkit-Patches/0001-POM-Changes.patch +++ b/CraftBukkit-Patches/0001-POM-Changes.patch @@ -1,4 +1,4 @@ -From 9993323860c8eb9bb972aaaf06e5fbea29727378 Mon Sep 17 00:00:00 2001 +From d2ba450a4a2ae61f6d3ba8b45bf56a696d0c7eb4 Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 2 Jul 2013 13:07:39 +1000 Subject: [PATCH] POM Changes @@ -6,7 +6,7 @@ Subject: [PATCH] POM Changes Basic changes to the build system which mark the artifact as Spigot, and the necessary code changes to ensure proper functionality. Also disables the auto updater provided by CraftBukkit as it is useless to us. diff --git a/pom.xml b/pom.xml -index fec390d..bcd3a30 100644 +index 7f49330..eb0128a 100644 --- a/pom.xml +++ b/pom.xml @@ -1,12 +1,12 @@ @@ -18,7 +18,7 @@ index fec390d..bcd3a30 100644 + org.spigotmc + spigot jar - 1.8-R0.1-SNAPSHOT + 1.8.3-R0.1-SNAPSHOT - CraftBukkit - http://www.bukkit.org + Spigot @@ -26,7 +26,7 @@ index fec390d..bcd3a30 100644 UTF-8 -@@ -20,10 +20,17 @@ +@@ -20,10 +20,22 @@ 1.6 @@ -41,12 +41,17 @@ index fec390d..bcd3a30 100644 - org.bukkit - bukkit ++ net.sf.trove4j ++ trove4j ++ 3.0.3 ++ ++ + org.spigotmc + spigot-api ${project.version} jar compile -@@ -93,21 +100,39 @@ +@@ -93,21 +105,39 @@ @@ -89,7 +94,7 @@ index fec390d..bcd3a30 100644 compile gitdescribe -@@ -124,7 +149,7 @@ +@@ -124,7 +154,7 @@ org.bukkit.craftbukkit.Main CraftBukkit @@ -98,7 +103,7 @@ index fec390d..bcd3a30 100644 Bukkit Team Bukkit ${api.version} -@@ -169,7 +194,7 @@ +@@ -169,7 +199,7 @@ org.codehaus.mojo.signature diff --git a/CraftBukkit-Patches/0002-mc-dev-imports.patch b/CraftBukkit-Patches/0002-mc-dev-imports.patch index 38821cc..afeab37 100644 --- a/CraftBukkit-Patches/0002-mc-dev-imports.patch +++ b/CraftBukkit-Patches/0002-mc-dev-imports.patch @@ -1,4 +1,4 @@ -From 4dac84a0314596a5815d6f30c4f4f283c83ee1f4 Mon Sep 17 00:00:00 2001 +From 8a02778847d1de2be3ea1e3a136968a13f989d96 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 1 Dec 2013 15:10:48 +1100 Subject: [PATCH] mc-dev imports @@ -46,113 +46,19 @@ index 0000000..13602f0 + return d0; + } +} -diff --git a/src/main/java/net/minecraft/server/BanEntrySerializer.java b/src/main/java/net/minecraft/server/BanEntrySerializer.java -new file mode 100644 -index 0000000..b1c6ad3 ---- /dev/null -+++ b/src/main/java/net/minecraft/server/BanEntrySerializer.java -@@ -0,0 +1,88 @@ -+package net.minecraft.server; -+ -+import com.google.gson.JsonDeserializationContext; -+import com.google.gson.JsonDeserializer; -+import com.google.gson.JsonElement; -+import com.google.gson.JsonObject; -+import com.google.gson.JsonSerializationContext; -+import com.google.gson.JsonSerializer; -+import com.mojang.authlib.GameProfile; -+import java.lang.reflect.Type; -+import java.text.ParseException; -+import java.util.Date; -+import java.util.UUID; -+ -+class BanEntrySerializer implements JsonDeserializer, JsonSerializer { -+ -+ final UserCache a; -+ -+ private BanEntrySerializer(UserCache usercache) { -+ this.a = usercache; -+ } -+ -+ public JsonElement a(UserCacheEntry usercacheentry, Type type, JsonSerializationContext jsonserializationcontext) { -+ JsonObject jsonobject = new JsonObject(); -+ -+ jsonobject.addProperty("name", usercacheentry.a().getName()); -+ UUID uuid = usercacheentry.a().getId(); -+ -+ jsonobject.addProperty("uuid", uuid == null ? "" : uuid.toString()); -+ jsonobject.addProperty("expiresOn", UserCache.a.format(usercacheentry.b())); -+ return jsonobject; -+ } -+ -+ public UserCacheEntry a(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) { -+ if (jsonelement.isJsonObject()) { -+ JsonObject jsonobject = jsonelement.getAsJsonObject(); -+ JsonElement jsonelement1 = jsonobject.get("name"); -+ JsonElement jsonelement2 = jsonobject.get("uuid"); -+ JsonElement jsonelement3 = jsonobject.get("expiresOn"); -+ -+ if (jsonelement1 != null && jsonelement2 != null) { -+ String s = jsonelement2.getAsString(); -+ String s1 = jsonelement1.getAsString(); -+ Date date = null; -+ -+ if (jsonelement3 != null) { -+ try { -+ date = UserCache.a.parse(jsonelement3.getAsString()); -+ } catch (ParseException parseexception) { -+ date = null; -+ } -+ } -+ -+ if (s1 != null && s != null) { -+ UUID uuid; -+ -+ try { -+ uuid = UUID.fromString(s); -+ } catch (Throwable throwable) { -+ return null; -+ } -+ -+ UserCacheEntry usercacheentry = new UserCacheEntry(this.a, new GameProfile(uuid, s1), date, (GameProfileLookup) null); -+ -+ return usercacheentry; -+ } else { -+ return null; -+ } -+ } else { -+ return null; -+ } -+ } else { -+ return null; -+ } -+ } -+ -+ public JsonElement serialize(Object object, Type type, JsonSerializationContext jsonserializationcontext) { -+ return this.a((UserCacheEntry) object, type, jsonserializationcontext); -+ } -+ -+ public Object deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) { -+ return this.a(jsonelement, type, jsondeserializationcontext); -+ } -+ -+ BanEntrySerializer(UserCache usercache, GameProfileLookup gameprofilelookup) { -+ this(usercache); -+ } -+} diff --git a/src/main/java/net/minecraft/server/BlockAnvil.java b/src/main/java/net/minecraft/server/BlockAnvil.java new file mode 100644 -index 0000000..8c9ed4c +index 0000000..43b1d00 --- /dev/null +++ b/src/main/java/net/minecraft/server/BlockAnvil.java -@@ -0,0 +1,78 @@ +@@ -0,0 +1,108 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; + +public class BlockAnvil extends BlockFalling { + -+ public static final BlockStateDirection FACING = BlockStateDirection.of("facing", (Predicate) EnumDirectionLimit.HORIZONTAL); ++ public static final BlockStateDirection FACING = BlockStateDirection.of("facing", (Predicate) EnumDirection.EnumDirectionLimit.HORIZONTAL); + public static final BlockStateInteger DAMAGE = BlockStateInteger.of("damage", 0, 2); + + protected BlockAnvil() { @@ -177,8 +83,8 @@ index 0000000..8c9ed4c + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { -+ if (!world.isStatic) { -+ entityhuman.openTileEntity(new TileEntityContainerAnvil(world, blockposition)); ++ if (!world.isClientSide) { ++ entityhuman.openTileEntity(new BlockAnvil.TileEntityContainerAnvil(world, blockposition)); + } + + return true; @@ -191,7 +97,7 @@ index 0000000..8c9ed4c + public void updateShape(IBlockAccess iblockaccess, BlockPosition blockposition) { + EnumDirection enumdirection = (EnumDirection) iblockaccess.getType(blockposition).get(BlockAnvil.FACING); + -+ if (enumdirection.k() == EnumAxis.X) { ++ if (enumdirection.k() == EnumDirection.EnumAxis.X) { + this.a(0.0F, 0.0F, 0.125F, 1.0F, 1.0F, 0.875F); + } else { + this.a(0.125F, 0.0F, 0.0F, 0.875F, 1.0F, 1.0F); @@ -223,13 +129,43 @@ index 0000000..8c9ed4c + return new BlockStateList(this, new IBlockState[] { BlockAnvil.FACING, BlockAnvil.DAMAGE}); + } + ++ public static class TileEntityContainerAnvil implements ITileEntityContainer { ++ ++ private final World a; ++ private final BlockPosition b; ++ ++ public TileEntityContainerAnvil(World world, BlockPosition blockposition) { ++ this.a = world; ++ this.b = blockposition; ++ } ++ ++ public String getName() { ++ return "anvil"; ++ } ++ ++ public boolean hasCustomName() { ++ return false; ++ } ++ ++ public IChatBaseComponent getScoreboardDisplayName() { ++ return new ChatMessage(Blocks.ANVIL.a() + ".name", new Object[0]); ++ } ++ ++ public Container createContainer(PlayerInventory playerinventory, EntityHuman entityhuman) { ++ return new ContainerAnvil(playerinventory, this.a, this.b, entityhuman); ++ } ++ ++ public String getContainerName() { ++ return "minecraft:anvil"; ++ } ++ } +} 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..b30276a +index 0000000..0bb2b50 --- /dev/null +++ b/src/main/java/net/minecraft/server/BlockBrewingStand.java -@@ -0,0 +1,116 @@ +@@ -0,0 +1,119 @@ +package net.minecraft.server; + +import java.util.List; @@ -238,13 +174,16 @@ index 0000000..b30276a +public class BlockBrewingStand extends BlockContainer { + + public static final BlockStateBoolean[] HAS_BOTTLE = new BlockStateBoolean[] { BlockStateBoolean.of("has_bottle_0"), BlockStateBoolean.of("has_bottle_1"), BlockStateBoolean.of("has_bottle_2")}; -+ private final Random b = new Random(); + + public BlockBrewingStand() { + super(Material.ORE); + this.j(this.blockStateList.getBlockData().set(BlockBrewingStand.HAS_BOTTLE[0], Boolean.valueOf(false)).set(BlockBrewingStand.HAS_BOTTLE[1], Boolean.valueOf(false)).set(BlockBrewingStand.HAS_BOTTLE[2], Boolean.valueOf(false))); + } + ++ public String getName() { ++ return LocaleI18n.get("item.brewingStand.name"); ++ } ++ + public boolean c() { + return false; + } @@ -261,25 +200,26 @@ index 0000000..b30276a + return false; + } + -+ public void a(World world, BlockPosition blockposition, IBlockData iblockdata, AxisAlignedBB axisalignedbb, List list, Entity entity) { ++ public void a(World world, BlockPosition blockposition, IBlockData iblockdata, AxisAlignedBB axisalignedbb, List list, Entity entity) { + this.a(0.4375F, 0.0F, 0.4375F, 0.5625F, 0.875F, 0.5625F); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); -+ this.h(); ++ this.j(); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + } + -+ public void h() { ++ public void j() { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F); + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { -+ if (world.isStatic) { ++ if (world.isClientSide) { + return true; + } else { + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityBrewingStand) { + entityhuman.openContainer((TileEntityBrewingStand) tileentity); ++ entityhuman.b(StatisticList.M); + } + + return true; @@ -344,14 +284,13 @@ index 0000000..b30276a + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockBrewingStand.HAS_BOTTLE[0], BlockBrewingStand.HAS_BOTTLE[1], BlockBrewingStand.HAS_BOTTLE[2]}); + } -+ +} diff --git a/src/main/java/net/minecraft/server/BlockFlowerPot.java b/src/main/java/net/minecraft/server/BlockFlowerPot.java new file mode 100644 -index 0000000..d1275a3 +index 0000000..fd77047 --- /dev/null +++ b/src/main/java/net/minecraft/server/BlockFlowerPot.java -@@ -0,0 +1,308 @@ +@@ -0,0 +1,432 @@ +package net.minecraft.server; + +import java.util.Random; @@ -359,15 +298,19 @@ index 0000000..d1275a3 +public class BlockFlowerPot extends BlockContainer { + + public static final BlockStateInteger LEGACY_DATA = BlockStateInteger.of("legacy_data", 0, 15); -+ public static final BlockStateEnum CONTENTS = BlockStateEnum.of("contents", EnumFlowerPotContents.class); ++ public static final BlockStateEnum CONTENTS = BlockStateEnum.of("contents", BlockFlowerPot.EnumFlowerPotContents.class); + + public BlockFlowerPot() { + super(Material.ORIENTABLE); -+ this.j(this.blockStateList.getBlockData().set(BlockFlowerPot.CONTENTS, EnumFlowerPotContents.EMPTY).set(BlockFlowerPot.LEGACY_DATA, Integer.valueOf(0))); -+ this.h(); ++ this.j(this.blockStateList.getBlockData().set(BlockFlowerPot.CONTENTS, BlockFlowerPot.EnumFlowerPotContents.EMPTY).set(BlockFlowerPot.LEGACY_DATA, Integer.valueOf(0))); ++ this.j(); + } + -+ public void h() { ++ public String getName() { ++ return LocaleI18n.get("item.flowerPot.name"); ++ } ++ ++ public void j() { + float f = 0.375F; + float f1 = f / 2.0F; + @@ -390,7 +333,7 @@ index 0000000..d1275a3 + ItemStack itemstack = entityhuman.inventory.getItemInHand(); + + if (itemstack != null && itemstack.getItem() instanceof ItemBlock) { -+ TileEntityFlowerPot tileentityflowerpot = this.d(world, blockposition); ++ TileEntityFlowerPot tileentityflowerpot = this.f(world, blockposition); + + if (tileentityflowerpot == null) { + return false; @@ -405,6 +348,7 @@ index 0000000..d1275a3 + tileentityflowerpot.a(itemstack.getItem(), itemstack.getData()); + tileentityflowerpot.update(); + world.notify(blockposition); ++ entityhuman.b(StatisticList.T); + if (!entityhuman.abilities.canInstantlyBuild && --itemstack.count <= 0) { + entityhuman.inventory.setItem(entityhuman.inventory.itemInHandIndex, (ItemStack) null); + } @@ -418,11 +362,11 @@ index 0000000..d1275a3 + } + + private boolean a(Block block, int i) { -+ return block != Blocks.YELLOW_FLOWER && block != Blocks.RED_FLOWER && block != Blocks.CACTUS && block != Blocks.BROWN_MUSHROOM && block != Blocks.RED_MUSHROOM && block != Blocks.SAPLING && block != Blocks.DEADBUSH ? block == Blocks.TALLGRASS && i == EnumTallGrassType.FERN.a() : true; ++ return block != Blocks.YELLOW_FLOWER && block != Blocks.RED_FLOWER && block != Blocks.CACTUS && block != Blocks.BROWN_MUSHROOM && block != Blocks.RED_MUSHROOM && block != Blocks.SAPLING && block != Blocks.DEADBUSH ? block == Blocks.TALLGRASS && i == BlockLongGrass.EnumTallGrassType.FERN.a() : true; + } + + public int getDropData(World world, BlockPosition blockposition) { -+ TileEntityFlowerPot tileentityflowerpot = this.d(world, blockposition); ++ TileEntityFlowerPot tileentityflowerpot = this.f(world, blockposition); + + return tileentityflowerpot != null && tileentityflowerpot.b() != null ? tileentityflowerpot.c() : 0; + } @@ -440,7 +384,7 @@ index 0000000..d1275a3 + } + + public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) { -+ TileEntityFlowerPot tileentityflowerpot = this.d(world, blockposition); ++ TileEntityFlowerPot tileentityflowerpot = this.f(world, blockposition); + + if (tileentityflowerpot != null && tileentityflowerpot.b() != null) { + a(world, blockposition, new ItemStack(tileentityflowerpot.b(), 1, tileentityflowerpot.c())); @@ -452,7 +396,7 @@ index 0000000..d1275a3 + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman) { + super.a(world, blockposition, iblockdata, entityhuman); + if (entityhuman.abilities.canInstantlyBuild) { -+ TileEntityFlowerPot tileentityflowerpot = this.d(world, blockposition); ++ TileEntityFlowerPot tileentityflowerpot = this.f(world, blockposition); + + if (tileentityflowerpot != null) { + tileentityflowerpot.a((Item) null, 0); @@ -465,7 +409,7 @@ index 0000000..d1275a3 + return Items.FLOWER_POT; + } + -+ private TileEntityFlowerPot d(World world, BlockPosition blockposition) { ++ private TileEntityFlowerPot f(World world, BlockPosition blockposition) { + TileEntity tileentity = world.getTileEntity(blockposition); + + return tileentity instanceof TileEntityFlowerPot ? (TileEntityFlowerPot) tileentity : null; @@ -478,7 +422,7 @@ index 0000000..d1275a3 + switch (i) { + case 1: + object = Blocks.RED_FLOWER; -+ j = EnumFlowerVarient.POPPY.b(); ++ j = BlockFlowers.EnumFlowerVarient.POPPY.b(); + break; + + case 2: @@ -487,22 +431,22 @@ index 0000000..d1275a3 + + case 3: + object = Blocks.SAPLING; -+ j = EnumLogVariant.OAK.a(); ++ j = BlockWood.EnumLogVariant.OAK.a(); + break; + + case 4: + object = Blocks.SAPLING; -+ j = EnumLogVariant.SPRUCE.a(); ++ j = BlockWood.EnumLogVariant.SPRUCE.a(); + break; + + case 5: + object = Blocks.SAPLING; -+ j = EnumLogVariant.BIRCH.a(); ++ j = BlockWood.EnumLogVariant.BIRCH.a(); + break; + + case 6: + object = Blocks.SAPLING; -+ j = EnumLogVariant.JUNGLE.a(); ++ j = BlockWood.EnumLogVariant.JUNGLE.a(); + break; + + case 7: @@ -523,17 +467,17 @@ index 0000000..d1275a3 + + case 11: + object = Blocks.TALLGRASS; -+ j = EnumTallGrassType.FERN.a(); ++ j = BlockLongGrass.EnumTallGrassType.FERN.a(); + break; + + case 12: + object = Blocks.SAPLING; -+ j = EnumLogVariant.ACACIA.a(); ++ j = BlockWood.EnumLogVariant.ACACIA.a(); + break; + + case 13: + object = Blocks.SAPLING; -+ j = EnumLogVariant.DARK_OAK.a(); ++ j = BlockWood.EnumLogVariant.DARK_OAK.a(); + } + + return new TileEntityFlowerPot(Item.getItemOf((Block) object), j); @@ -548,7 +492,7 @@ index 0000000..d1275a3 + } + + public IBlockData updateState(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition) { -+ EnumFlowerPotContents enumflowerpotcontents = EnumFlowerPotContents.EMPTY; ++ BlockFlowerPot.EnumFlowerPotContents blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.EMPTY; + TileEntity tileentity = iblockaccess.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityFlowerPot) { @@ -560,112 +504,231 @@ index 0000000..d1275a3 + Block block = Block.asBlock(item); + + if (block == Blocks.SAPLING) { -+ switch (SwitchHelperBlockFlowerPot.a[EnumLogVariant.a(i).ordinal()]) { ++ switch (BlockFlowerPot.SyntheticClass_1.a[BlockWood.EnumLogVariant.a(i).ordinal()]) { + case 1: -+ enumflowerpotcontents = EnumFlowerPotContents.OAK_SAPLING; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.OAK_SAPLING; + break; + + case 2: -+ enumflowerpotcontents = EnumFlowerPotContents.SPRUCE_SAPLING; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.SPRUCE_SAPLING; + break; + + case 3: -+ enumflowerpotcontents = EnumFlowerPotContents.BIRCH_SAPLING; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.BIRCH_SAPLING; + break; + + case 4: -+ enumflowerpotcontents = EnumFlowerPotContents.JUNGLE_SAPLING; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.JUNGLE_SAPLING; + break; + + case 5: -+ enumflowerpotcontents = EnumFlowerPotContents.ACACIA_SAPLING; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.ACACIA_SAPLING; + break; + + case 6: -+ enumflowerpotcontents = EnumFlowerPotContents.DARK_OAK_SAPLING; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.DARK_OAK_SAPLING; + break; + + default: -+ enumflowerpotcontents = EnumFlowerPotContents.EMPTY; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.EMPTY; + } + } else if (block == Blocks.TALLGRASS) { + switch (i) { + case 0: -+ enumflowerpotcontents = EnumFlowerPotContents.DEAD_BUSH; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.DEAD_BUSH; + break; + + case 2: -+ enumflowerpotcontents = EnumFlowerPotContents.FERN; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.FERN; + break; + + default: -+ enumflowerpotcontents = EnumFlowerPotContents.EMPTY; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.EMPTY; + } + } else if (block == Blocks.YELLOW_FLOWER) { -+ enumflowerpotcontents = EnumFlowerPotContents.DANDELION; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.DANDELION; + } else if (block == Blocks.RED_FLOWER) { -+ switch (SwitchHelperBlockFlowerPot.b[EnumFlowerVarient.a(EnumFlowerType.RED, i).ordinal()]) { ++ switch (BlockFlowerPot.SyntheticClass_1.b[BlockFlowers.EnumFlowerVarient.a(BlockFlowers.EnumFlowerType.RED, i).ordinal()]) { + case 1: -+ enumflowerpotcontents = EnumFlowerPotContents.POPPY; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.POPPY; + break; + + case 2: -+ enumflowerpotcontents = EnumFlowerPotContents.BLUE_ORCHID; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.BLUE_ORCHID; + break; + + case 3: -+ enumflowerpotcontents = EnumFlowerPotContents.ALLIUM; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.ALLIUM; + break; + + case 4: -+ enumflowerpotcontents = EnumFlowerPotContents.HOUSTONIA; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.HOUSTONIA; + break; + + case 5: -+ enumflowerpotcontents = EnumFlowerPotContents.RED_TULIP; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.RED_TULIP; + break; + + case 6: -+ enumflowerpotcontents = EnumFlowerPotContents.ORANGE_TULIP; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.ORANGE_TULIP; + break; + + case 7: -+ enumflowerpotcontents = EnumFlowerPotContents.WHITE_TULIP; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.WHITE_TULIP; + break; + + case 8: -+ enumflowerpotcontents = EnumFlowerPotContents.PINK_TULIP; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.PINK_TULIP; + break; + + case 9: -+ enumflowerpotcontents = EnumFlowerPotContents.OXEYE_DAISY; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.OXEYE_DAISY; + break; + + default: -+ enumflowerpotcontents = EnumFlowerPotContents.EMPTY; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.EMPTY; + } + } else if (block == Blocks.RED_MUSHROOM) { -+ enumflowerpotcontents = EnumFlowerPotContents.MUSHROOM_RED; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.MUSHROOM_RED; + } else if (block == Blocks.BROWN_MUSHROOM) { -+ enumflowerpotcontents = EnumFlowerPotContents.MUSHROOM_BROWN; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.MUSHROOM_BROWN; + } else if (block == Blocks.DEADBUSH) { -+ enumflowerpotcontents = EnumFlowerPotContents.DEAD_BUSH; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.DEAD_BUSH; + } else if (block == Blocks.CACTUS) { -+ enumflowerpotcontents = EnumFlowerPotContents.CACTUS; ++ blockflowerpot_enumflowerpotcontents = BlockFlowerPot.EnumFlowerPotContents.CACTUS; + } + } + } + -+ return iblockdata.set(BlockFlowerPot.CONTENTS, enumflowerpotcontents); ++ return iblockdata.set(BlockFlowerPot.CONTENTS, blockflowerpot_enumflowerpotcontents); + } + ++ static class SyntheticClass_1 { ++ ++ static final int[] a; ++ static final int[] b = new int[BlockFlowers.EnumFlowerVarient.values().length]; ++ ++ static { ++ try { ++ BlockFlowerPot.SyntheticClass_1.b[BlockFlowers.EnumFlowerVarient.POPPY.ordinal()] = 1; ++ } catch (NoSuchFieldError nosuchfielderror) { ++ ; ++ } ++ ++ try { ++ BlockFlowerPot.SyntheticClass_1.b[BlockFlowers.EnumFlowerVarient.BLUE_ORCHID.ordinal()] = 2; ++ } catch (NoSuchFieldError nosuchfielderror1) { ++ ; ++ } ++ ++ try { ++ BlockFlowerPot.SyntheticClass_1.b[BlockFlowers.EnumFlowerVarient.ALLIUM.ordinal()] = 3; ++ } catch (NoSuchFieldError nosuchfielderror2) { ++ ; ++ } ++ ++ try { ++ BlockFlowerPot.SyntheticClass_1.b[BlockFlowers.EnumFlowerVarient.HOUSTONIA.ordinal()] = 4; ++ } catch (NoSuchFieldError nosuchfielderror3) { ++ ; ++ } ++ ++ try { ++ BlockFlowerPot.SyntheticClass_1.b[BlockFlowers.EnumFlowerVarient.RED_TULIP.ordinal()] = 5; ++ } catch (NoSuchFieldError nosuchfielderror4) { ++ ; ++ } ++ ++ try { ++ BlockFlowerPot.SyntheticClass_1.b[BlockFlowers.EnumFlowerVarient.ORANGE_TULIP.ordinal()] = 6; ++ } catch (NoSuchFieldError nosuchfielderror5) { ++ ; ++ } ++ ++ try { ++ BlockFlowerPot.SyntheticClass_1.b[BlockFlowers.EnumFlowerVarient.WHITE_TULIP.ordinal()] = 7; ++ } catch (NoSuchFieldError nosuchfielderror6) { ++ ; ++ } ++ ++ try { ++ BlockFlowerPot.SyntheticClass_1.b[BlockFlowers.EnumFlowerVarient.PINK_TULIP.ordinal()] = 8; ++ } catch (NoSuchFieldError nosuchfielderror7) { ++ ; ++ } ++ ++ try { ++ BlockFlowerPot.SyntheticClass_1.b[BlockFlowers.EnumFlowerVarient.OXEYE_DAISY.ordinal()] = 9; ++ } catch (NoSuchFieldError nosuchfielderror8) { ++ ; ++ } ++ ++ a = new int[BlockWood.EnumLogVariant.values().length]; ++ ++ try { ++ BlockFlowerPot.SyntheticClass_1.a[BlockWood.EnumLogVariant.OAK.ordinal()] = 1; ++ } catch (NoSuchFieldError nosuchfielderror9) { ++ ; ++ } ++ ++ try { ++ BlockFlowerPot.SyntheticClass_1.a[BlockWood.EnumLogVariant.SPRUCE.ordinal()] = 2; ++ } catch (NoSuchFieldError nosuchfielderror10) { ++ ; ++ } ++ ++ try { ++ BlockFlowerPot.SyntheticClass_1.a[BlockWood.EnumLogVariant.BIRCH.ordinal()] = 3; ++ } catch (NoSuchFieldError nosuchfielderror11) { ++ ; ++ } ++ ++ try { ++ BlockFlowerPot.SyntheticClass_1.a[BlockWood.EnumLogVariant.JUNGLE.ordinal()] = 4; ++ } catch (NoSuchFieldError nosuchfielderror12) { ++ ; ++ } ++ ++ try { ++ BlockFlowerPot.SyntheticClass_1.a[BlockWood.EnumLogVariant.ACACIA.ordinal()] = 5; ++ } catch (NoSuchFieldError nosuchfielderror13) { ++ ; ++ } ++ ++ try { ++ BlockFlowerPot.SyntheticClass_1.a[BlockWood.EnumLogVariant.DARK_OAK.ordinal()] = 6; ++ } catch (NoSuchFieldError nosuchfielderror14) { ++ ; ++ } ++ ++ } ++ } ++ ++ public static enum EnumFlowerPotContents implements INamable { ++ ++ EMPTY("empty"), POPPY("rose"), BLUE_ORCHID("blue_orchid"), ALLIUM("allium"), HOUSTONIA("houstonia"), RED_TULIP("red_tulip"), ORANGE_TULIP("orange_tulip"), WHITE_TULIP("white_tulip"), PINK_TULIP("pink_tulip"), OXEYE_DAISY("oxeye_daisy"), DANDELION("dandelion"), OAK_SAPLING("oak_sapling"), SPRUCE_SAPLING("spruce_sapling"), BIRCH_SAPLING("birch_sapling"), JUNGLE_SAPLING("jungle_sapling"), ACACIA_SAPLING("acacia_sapling"), DARK_OAK_SAPLING("dark_oak_sapling"), MUSHROOM_RED("mushroom_red"), MUSHROOM_BROWN("mushroom_brown"), DEAD_BUSH("dead_bush"), FERN("fern"), CACTUS("cactus"); ++ ++ private final String w; ++ ++ private EnumFlowerPotContents(String s) { ++ this.w = s; ++ } ++ ++ public String toString() { ++ return this.w; ++ } ++ ++ public String getName() { ++ return this.w; ++ } ++ } +} diff --git a/src/main/java/net/minecraft/server/BlockHopper.java b/src/main/java/net/minecraft/server/BlockHopper.java new file mode 100644 -index 0000000..cc3e340 +index 0000000..9f9b45d --- /dev/null +++ b/src/main/java/net/minecraft/server/BlockHopper.java -@@ -0,0 +1,152 @@ +@@ -0,0 +1,161 @@ +package net.minecraft.server; + +import com.google.common.base.Predicate; @@ -673,11 +736,19 @@ index 0000000..cc3e340 + +public class BlockHopper extends BlockContainer { + -+ public static final BlockStateDirection FACING = BlockStateDirection.of("facing", (Predicate) (new BlockHopperInnerClass1())); ++ public static final BlockStateDirection FACING = BlockStateDirection.of("facing", new Predicate() { ++ public boolean a(EnumDirection enumdirection) { ++ return enumdirection != EnumDirection.UP; ++ } ++ ++ public boolean apply(Object object) { ++ return this.a((EnumDirection) object); ++ } ++ }); + public static final BlockStateBoolean ENABLED = BlockStateBoolean.of("enabled"); + + public BlockHopper() { -+ super(Material.ORE); ++ super(Material.ORE, MaterialMapColor.m); + this.j(this.blockStateList.getBlockData().set(BlockHopper.FACING, EnumDirection.DOWN).set(BlockHopper.ENABLED, Boolean.valueOf(true))); + this.a(CreativeModeTab.d); + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); @@ -687,7 +758,7 @@ index 0000000..cc3e340 + this.a(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + -+ public void a(World world, BlockPosition blockposition, IBlockData iblockdata, AxisAlignedBB axisalignedbb, List list, Entity entity) { ++ public void a(World world, BlockPosition blockposition, IBlockData iblockdata, AxisAlignedBB axisalignedbb, List list, Entity entity) { + this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.625F, 1.0F); + super.a(world, blockposition, iblockdata, axisalignedbb, list, entity); + float f = 0.125F; @@ -734,13 +805,14 @@ index 0000000..cc3e340 + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { -+ if (world.isStatic) { ++ if (world.isClientSide) { + return true; + } else { + TileEntity tileentity = world.getTileEntity(blockposition); + + if (tileentity instanceof TileEntityHopper) { + entityhuman.openContainer((TileEntityHopper) tileentity); ++ entityhuman.b(StatisticList.P); + } + + return true; @@ -820,10 +892,10 @@ index 0000000..cc3e340 +} 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..cc61759 +index 0000000..f15b199 --- /dev/null +++ b/src/main/java/net/minecraft/server/BlockTNT.java -@@ -0,0 +1,103 @@ +@@ -0,0 +1,102 @@ +package net.minecraft.server; + +public class BlockTNT extends Block { @@ -854,8 +926,8 @@ index 0000000..cc61759 + } + + public void wasExploded(World world, BlockPosition blockposition, Explosion explosion) { -+ if (!world.isStatic) { -+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), (double) ((float) blockposition.getY() + 0.5F), (double) ((float) blockposition.getZ() + 0.5F), explosion.c()); ++ if (!world.isClientSide) { ++ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), explosion.c()); + + entitytntprimed.fuseTicks = world.random.nextInt(entitytntprimed.fuseTicks / 4) + entitytntprimed.fuseTicks / 8; + world.addEntity(entitytntprimed); @@ -867,9 +939,9 @@ index 0000000..cc61759 + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving) { -+ if (!world.isStatic) { ++ if (!world.isClientSide) { + if (((Boolean) iblockdata.get(BlockTNT.EXPLODE)).booleanValue()) { -+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), (double) ((float) blockposition.getY() + 0.5F), (double) ((float) blockposition.getZ() + 0.5F), entityliving); ++ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), entityliving); + + world.addEntity(entitytntprimed); + world.makeSound(entitytntprimed, "game.tnt.primed", 1.0F, 1.0F); @@ -879,16 +951,16 @@ index 0000000..cc61759 + } + + public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumDirection enumdirection, float f, float f1, float f2) { -+ if (entityhuman.bY() != null) { -+ Item item = entityhuman.bY().getItem(); ++ if (entityhuman.bZ() != null) { ++ Item item = entityhuman.bZ().getItem(); + + if (item == Items.FLINT_AND_STEEL || item == Items.FIRE_CHARGE) { + this.a(world, blockposition, iblockdata.set(BlockTNT.EXPLODE, Boolean.valueOf(true)), (EntityLiving) entityhuman); + world.setAir(blockposition); + if (item == Items.FLINT_AND_STEEL) { -+ entityhuman.bY().damage(1, entityhuman); ++ entityhuman.bZ().damage(1, entityhuman); + } else if (!entityhuman.abilities.canInstantlyBuild) { -+ --entityhuman.bY().count; ++ --entityhuman.bZ().count; + } + + return true; @@ -899,7 +971,7 @@ index 0000000..cc61759 + } + + public void a(World world, BlockPosition blockposition, IBlockData iblockdata, Entity entity) { -+ if (!world.isStatic && entity instanceof EntityArrow) { ++ if (!world.isClientSide && entity instanceof EntityArrow) { + EntityArrow entityarrow = (EntityArrow) entity; + + if (entityarrow.isBurning()) { @@ -925,11 +997,10 @@ index 0000000..cc61759 + protected BlockStateList getStateList() { + return new BlockStateList(this, new IBlockState[] { BlockTNT.EXPLODE}); + } -+ +} diff --git a/src/main/java/net/minecraft/server/CommandDispatcher.java b/src/main/java/net/minecraft/server/CommandDispatcher.java new file mode 100644 -index 0000000..c6032b2 +index 0000000..54133a7 --- /dev/null +++ b/src/main/java/net/minecraft/server/CommandDispatcher.java @@ -0,0 +1,113 @@ @@ -1019,12 +1090,12 @@ index 0000000..c6032b2 + chatmessage.getChatModifier().setColor(EnumChatFormat.GRAY); + chatmessage.getChatModifier().setItalic(Boolean.valueOf(true)); + if (flag) { -+ Iterator iterator = minecraftserver.getPlayerList().players.iterator(); ++ Iterator iterator = minecraftserver.getPlayerList().v().iterator(); + + while (iterator.hasNext()) { + EntityHuman entityhuman = (EntityHuman) iterator.next(); + -+ if (entityhuman != icommandlistener && minecraftserver.getPlayerList().isOp(entityhuman.getProfile()) && icommand.canUse(icommandlistener)) { ++ if (entityhuman != icommandlistener && minecraftserver.getPlayerList().isOp(entityhuman.getProfile()) && icommand.canUse(icommandlistener) && (!(icommandlistener instanceof RemoteControlCommandListener) || MinecraftServer.getServer().q())) { + entityhuman.sendMessage(chatmessage); + } + } @@ -1048,14 +1119,15 @@ index 0000000..c6032b2 +} diff --git a/src/main/java/net/minecraft/server/DataWatcher.java b/src/main/java/net/minecraft/server/DataWatcher.java new file mode 100644 -index 0000000..e21e68d +index 0000000..2bf9196 --- /dev/null +++ b/src/main/java/net/minecraft/server/DataWatcher.java -@@ -0,0 +1,321 @@ +@@ -0,0 +1,361 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; ++import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; @@ -1068,8 +1140,8 @@ index 0000000..e21e68d + + private final Entity a; + private boolean b = true; -+ private static final Map c = Maps.newHashMap(); -+ private final Map d = Maps.newHashMap(); ++ private static final Map, Integer> c = Maps.newHashMap(); ++ private final Map d = Maps.newHashMap(); + private boolean e; + private ReadWriteLock f = new ReentrantReadWriteLock(); + @@ -1077,30 +1149,30 @@ index 0000000..e21e68d + this.a = entity; + } + -+ public void a(int i, Object object) { -+ Integer integer = (Integer) DataWatcher.c.get(object.getClass()); ++ public void a(int i, T t0) { ++ Integer integer = (Integer) DataWatcher.c.get(t0.getClass()); + + if (integer == null) { -+ throw new IllegalArgumentException("Unknown data type: " + object.getClass()); ++ throw new IllegalArgumentException("Unknown data type: " + t0.getClass()); + } else if (i > 31) { + throw new IllegalArgumentException("Data value id is too big with " + i + "! (Max is " + 31 + ")"); + } else if (this.d.containsKey(Integer.valueOf(i))) { + throw new IllegalArgumentException("Duplicate id value for " + i + "!"); + } else { -+ WatchableObject watchableobject = new WatchableObject(integer.intValue(), i, object); ++ DataWatcher.WatchableObject datawatcher_watchableobject = new DataWatcher.WatchableObject(integer.intValue(), i, t0); + + this.f.writeLock().lock(); -+ this.d.put(Integer.valueOf(i), watchableobject); ++ this.d.put(Integer.valueOf(i), datawatcher_watchableobject); + this.f.writeLock().unlock(); + this.b = false; + } + } + + public void add(int i, int j) { -+ WatchableObject watchableobject = new WatchableObject(j, i, (Object) null); ++ DataWatcher.WatchableObject datawatcher_watchableobject = new DataWatcher.WatchableObject(j, i, (Object) null); + + this.f.writeLock().lock(); -+ this.d.put(Integer.valueOf(i), watchableobject); ++ this.d.put(Integer.valueOf(i), datawatcher_watchableobject); + this.f.writeLock().unlock(); + this.b = false; + } @@ -1129,13 +1201,13 @@ index 0000000..e21e68d + return (ItemStack) this.j(i).b(); + } + -+ private WatchableObject j(int i) { ++ private DataWatcher.WatchableObject j(int i) { + this.f.readLock().lock(); + -+ WatchableObject watchableobject; ++ DataWatcher.WatchableObject datawatcher_watchableobject; + + try { -+ watchableobject = (WatchableObject) this.d.get(Integer.valueOf(i)); ++ datawatcher_watchableobject = (DataWatcher.WatchableObject) this.d.get(Integer.valueOf(i)); + } catch (Throwable throwable) { + CrashReport crashreport = CrashReport.a(throwable, "Getting synched entity data"); + CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Synched entity data"); @@ -1145,27 +1217,27 @@ index 0000000..e21e68d + } + + this.f.readLock().unlock(); -+ return watchableobject; ++ return datawatcher_watchableobject; + } + + public Vector3f h(int i) { + return (Vector3f) this.j(i).b(); + } + -+ public void watch(int i, Object object) { -+ WatchableObject watchableobject = this.j(i); ++ public void watch(int i, T t0) { ++ DataWatcher.WatchableObject datawatcher_watchableobject = this.j(i); + -+ if (ObjectUtils.notEqual(object, watchableobject.b())) { -+ watchableobject.a(object); ++ if (ObjectUtils.notEqual(t0, datawatcher_watchableobject.b())) { ++ datawatcher_watchableobject.a(t0); + this.a.i(i); -+ watchableobject.a(true); ++ datawatcher_watchableobject.a(true); + this.e = true; + } + + } + + public void update(int i) { -+ WatchableObject.a(this.j(i), true); ++ this.j(i).d = true; + this.e = true; + } + @@ -1173,21 +1245,21 @@ index 0000000..e21e68d + return this.e; + } + -+ public static void a(List list, PacketDataSerializer packetdataserializer) { ++ public static void a(List list, PacketDataSerializer packetdataserializer) throws IOException { + if (list != null) { + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { -+ WatchableObject watchableobject = (WatchableObject) iterator.next(); ++ DataWatcher.WatchableObject datawatcher_watchableobject = (DataWatcher.WatchableObject) iterator.next(); + -+ a(packetdataserializer, watchableobject); ++ a(packetdataserializer, datawatcher_watchableobject); + } + } + + packetdataserializer.writeByte(127); + } + -+ public List b() { ++ public List b() { + ArrayList arraylist = null; + + if (this.e) { @@ -1195,15 +1267,15 @@ index 0000000..e21e68d + Iterator iterator = this.d.values().iterator(); + + while (iterator.hasNext()) { -+ WatchableObject watchableobject = (WatchableObject) iterator.next(); ++ DataWatcher.WatchableObject datawatcher_watchableobject = (DataWatcher.WatchableObject) iterator.next(); + -+ if (watchableobject.d()) { -+ watchableobject.a(false); ++ if (datawatcher_watchableobject.d()) { ++ datawatcher_watchableobject.a(false); + if (arraylist == null) { + arraylist = Lists.newArrayList(); + } + -+ arraylist.add(watchableobject); ++ arraylist.add(datawatcher_watchableobject); + } + } + @@ -1214,29 +1286,29 @@ index 0000000..e21e68d + return arraylist; + } + -+ public void a(PacketDataSerializer packetdataserializer) { ++ public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.f.readLock().lock(); + Iterator iterator = this.d.values().iterator(); + + while (iterator.hasNext()) { -+ WatchableObject watchableobject = (WatchableObject) iterator.next(); ++ DataWatcher.WatchableObject datawatcher_watchableobject = (DataWatcher.WatchableObject) iterator.next(); + -+ a(packetdataserializer, watchableobject); ++ a(packetdataserializer, datawatcher_watchableobject); + } + + this.f.readLock().unlock(); + packetdataserializer.writeByte(127); + } + -+ public List c() { ++ public List c() { + ArrayList arraylist = null; + + this.f.readLock().lock(); + -+ WatchableObject watchableobject; ++ DataWatcher.WatchableObject datawatcher_watchableobject; + -+ for (Iterator iterator = this.d.values().iterator(); iterator.hasNext(); arraylist.add(watchableobject)) { -+ watchableobject = (WatchableObject) iterator.next(); ++ for (Iterator iterator = this.d.values().iterator(); iterator.hasNext(); arraylist.add(datawatcher_watchableobject)) { ++ datawatcher_watchableobject = (DataWatcher.WatchableObject) iterator.next(); + if (arraylist == null) { + arraylist = Lists.newArrayList(); + } @@ -1246,39 +1318,39 @@ index 0000000..e21e68d + return arraylist; + } + -+ private static void a(PacketDataSerializer packetdataserializer, WatchableObject watchableobject) { -+ int i = (watchableobject.c() << 5 | watchableobject.a() & 31) & 255; ++ private static void a(PacketDataSerializer packetdataserializer, DataWatcher.WatchableObject datawatcher_watchableobject) throws IOException { ++ int i = (datawatcher_watchableobject.c() << 5 | datawatcher_watchableobject.a() & 31) & 255; + + packetdataserializer.writeByte(i); -+ switch (watchableobject.c()) { ++ switch (datawatcher_watchableobject.c()) { + case 0: -+ packetdataserializer.writeByte(((Byte) watchableobject.b()).byteValue()); ++ packetdataserializer.writeByte(((Byte) datawatcher_watchableobject.b()).byteValue()); + break; + + case 1: -+ packetdataserializer.writeShort(((Short) watchableobject.b()).shortValue()); ++ packetdataserializer.writeShort(((Short) datawatcher_watchableobject.b()).shortValue()); + break; + + case 2: -+ packetdataserializer.writeInt(((Integer) watchableobject.b()).intValue()); ++ packetdataserializer.writeInt(((Integer) datawatcher_watchableobject.b()).intValue()); + break; + + case 3: -+ packetdataserializer.writeFloat(((Float) watchableobject.b()).floatValue()); ++ packetdataserializer.writeFloat(((Float) datawatcher_watchableobject.b()).floatValue()); + break; + + case 4: -+ packetdataserializer.a((String) watchableobject.b()); ++ packetdataserializer.a((String) datawatcher_watchableobject.b()); + break; + + case 5: -+ ItemStack itemstack = (ItemStack) watchableobject.b(); ++ ItemStack itemstack = (ItemStack) datawatcher_watchableobject.b(); + + packetdataserializer.a(itemstack); + break; + + case 6: -+ BlockPosition blockposition = (BlockPosition) watchableobject.b(); ++ BlockPosition blockposition = (BlockPosition) datawatcher_watchableobject.b(); + + packetdataserializer.writeInt(blockposition.getX()); + packetdataserializer.writeInt(blockposition.getY()); @@ -1286,7 +1358,7 @@ index 0000000..e21e68d + break; + + case 7: -+ Vector3f vector3f = (Vector3f) watchableobject.b(); ++ Vector3f vector3f = (Vector3f) datawatcher_watchableobject.b(); + + packetdataserializer.writeFloat(vector3f.getX()); + packetdataserializer.writeFloat(vector3f.getY()); @@ -1295,7 +1367,7 @@ index 0000000..e21e68d + + } + -+ public static List b(PacketDataSerializer packetdataserializer) { ++ public static List b(PacketDataSerializer packetdataserializer) throws IOException { + ArrayList arraylist = null; + + for (byte b0 = packetdataserializer.readByte(); b0 != 127; b0 = packetdataserializer.readByte()) { @@ -1305,31 +1377,31 @@ index 0000000..e21e68d + + int i = (b0 & 224) >> 5; + int j = b0 & 31; -+ WatchableObject watchableobject = null; ++ DataWatcher.WatchableObject datawatcher_watchableobject = null; + + switch (i) { + case 0: -+ watchableobject = new WatchableObject(i, j, Byte.valueOf(packetdataserializer.readByte())); ++ datawatcher_watchableobject = new DataWatcher.WatchableObject(i, j, Byte.valueOf(packetdataserializer.readByte())); + break; + + case 1: -+ watchableobject = new WatchableObject(i, j, Short.valueOf(packetdataserializer.readShort())); ++ datawatcher_watchableobject = new DataWatcher.WatchableObject(i, j, Short.valueOf(packetdataserializer.readShort())); + break; + + case 2: -+ watchableobject = new WatchableObject(i, j, Integer.valueOf(packetdataserializer.readInt())); ++ datawatcher_watchableobject = new DataWatcher.WatchableObject(i, j, Integer.valueOf(packetdataserializer.readInt())); + break; + + case 3: -+ watchableobject = new WatchableObject(i, j, Float.valueOf(packetdataserializer.readFloat())); ++ datawatcher_watchableobject = new DataWatcher.WatchableObject(i, j, Float.valueOf(packetdataserializer.readFloat())); + break; + + case 4: -+ watchableobject = new WatchableObject(i, j, packetdataserializer.c(32767)); ++ datawatcher_watchableobject = new DataWatcher.WatchableObject(i, j, packetdataserializer.c(32767)); + break; + + case 5: -+ watchableobject = new WatchableObject(i, j, packetdataserializer.i()); ++ datawatcher_watchableobject = new DataWatcher.WatchableObject(i, j, packetdataserializer.i()); + break; + + case 6: @@ -1337,7 +1409,7 @@ index 0000000..e21e68d + int l = packetdataserializer.readInt(); + int i1 = packetdataserializer.readInt(); + -+ watchableobject = new WatchableObject(i, j, new BlockPosition(k, l, i1)); ++ datawatcher_watchableobject = new DataWatcher.WatchableObject(i, j, new BlockPosition(k, l, i1)); + break; + + case 7: @@ -1345,10 +1417,10 @@ index 0000000..e21e68d + float f1 = packetdataserializer.readFloat(); + float f2 = packetdataserializer.readFloat(); + -+ watchableobject = new WatchableObject(i, j, new Vector3f(f, f1, f2)); ++ datawatcher_watchableobject = new DataWatcher.WatchableObject(i, j, new Vector3f(f, f1, f2)); + } + -+ arraylist.add(watchableobject); ++ arraylist.add(datawatcher_watchableobject); + } + + return arraylist; @@ -1372,13 +1444,52 @@ index 0000000..e21e68d + DataWatcher.c.put(BlockPosition.class, Integer.valueOf(6)); + DataWatcher.c.put(Vector3f.class, Integer.valueOf(7)); + } ++ ++ public static class WatchableObject { ++ ++ private final int a; ++ private final int b; ++ private Object c; ++ private boolean d; ++ ++ public WatchableObject(int i, int j, Object object) { ++ this.b = j; ++ this.c = object; ++ this.a = i; ++ this.d = true; ++ } ++ ++ public int a() { ++ return this.b; ++ } ++ ++ public void a(Object object) { ++ this.c = object; ++ } ++ ++ public Object b() { ++ return this.c; ++ } ++ ++ public int c() { ++ return this.a; ++ } ++ ++ public boolean d() { ++ return this.d; ++ } ++ ++ public void a(boolean flag) { ++ this.d = flag; ++ } ++ } +} 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..c624190 +index 0000000..9865681 --- /dev/null +++ b/src/main/java/net/minecraft/server/EnchantmentManager.java -@@ -0,0 +1,378 @@ +@@ -0,0 +1,450 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; @@ -1394,10 +1505,10 @@ index 0000000..c624190 +public class EnchantmentManager { + + private static final Random a = 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); ++ private static final EnchantmentManager.EnchantmentModifierProtection b = new EnchantmentManager.EnchantmentModifierProtection((EnchantmentManager.SyntheticClass_1) null); ++ private static final EnchantmentManager.EnchantmentModifierDamage c = new EnchantmentManager.EnchantmentModifierDamage((EnchantmentManager.SyntheticClass_1) null); ++ private static final EnchantmentManager.EnchantmentModifierThorns d = new EnchantmentManager.EnchantmentModifierThorns((EnchantmentManager.SyntheticClass_1) null); ++ private static final EnchantmentManager.EnchantmentModifierArthropods e = new EnchantmentManager.EnchantmentModifierArthropods((EnchantmentManager.SyntheticClass_1) null); + + public static int getEnchantmentLevel(int i, ItemStack itemstack) { + if (itemstack == null) { @@ -1422,7 +1533,7 @@ index 0000000..c624190 + } + } + -+ public static Map a(ItemStack itemstack) { ++ public static Map a(ItemStack itemstack) { + LinkedHashMap linkedhashmap = Maps.newLinkedHashMap(); + NBTTagList nbttaglist = itemstack.getItem() == Items.ENCHANTED_BOOK ? Items.ENCHANTED_BOOK.h(itemstack) : itemstack.getEnchantments(); + @@ -1438,7 +1549,7 @@ index 0000000..c624190 + return linkedhashmap; + } + -+ public static void a(Map map, ItemStack itemstack) { ++ public static void a(Map map, ItemStack itemstack) { + NBTTagList nbttaglist = new NBTTagList(); + Iterator iterator = map.keySet().iterator(); + @@ -1489,7 +1600,7 @@ index 0000000..c624190 + } + } + -+ private static void a(EnchantmentModifier enchantmentmodifier, ItemStack itemstack) { ++ private static void a(EnchantmentManager.EnchantmentModifier enchantmentmanager_enchantmentmodifier, ItemStack itemstack) { + if (itemstack != null) { + NBTTagList nbttaglist = itemstack.getEnchantments(); + @@ -1499,7 +1610,7 @@ index 0000000..c624190 + short short1 = nbttaglist.get(i).getShort("lvl"); + + if (Enchantment.getById(short0) != null) { -+ enchantmentmodifier.a(Enchantment.getById(short0), short1); ++ enchantmentmanager_enchantmentmodifier.a(Enchantment.getById(short0), short1); + } + } + @@ -1507,14 +1618,14 @@ index 0000000..c624190 + } + } + -+ private static void a(EnchantmentModifier enchantmentmodifier, ItemStack[] aitemstack) { ++ private static void a(EnchantmentManager.EnchantmentModifier enchantmentmanager_enchantmentmodifier, ItemStack[] aitemstack) { + ItemStack[] aitemstack1 = aitemstack; + int i = aitemstack.length; + + for (int j = 0; j < i; ++j) { + ItemStack itemstack = aitemstack1[j]; + -+ a(enchantmentmodifier, itemstack); ++ a(enchantmentmanager_enchantmentmodifier, itemstack); + } + + } @@ -1522,9 +1633,11 @@ index 0000000..c624190 + public static int a(ItemStack[] aitemstack, DamageSource damagesource) { + EnchantmentManager.b.a = 0; + EnchantmentManager.b.b = damagesource; -+ a((EnchantmentModifier) EnchantmentManager.b, aitemstack); ++ a((EnchantmentManager.EnchantmentModifier) EnchantmentManager.b, aitemstack); + if (EnchantmentManager.b.a > 25) { + EnchantmentManager.b.a = 25; ++ } else if (EnchantmentManager.b.a < 0) { ++ EnchantmentManager.b.a = 0; + } + + return (EnchantmentManager.b.a + 1 >> 1) + EnchantmentManager.a.nextInt((EnchantmentManager.b.a >> 1) + 1); @@ -1533,7 +1646,7 @@ index 0000000..c624190 + public static float a(ItemStack itemstack, EnumMonsterType enummonstertype) { + EnchantmentManager.c.a = 0.0F; + EnchantmentManager.c.b = enummonstertype; -+ a((EnchantmentModifier) EnchantmentManager.c, itemstack); ++ a((EnchantmentManager.EnchantmentModifier) EnchantmentManager.c, itemstack); + return EnchantmentManager.c.a; + } + @@ -1541,11 +1654,11 @@ index 0000000..c624190 + EnchantmentManager.d.b = entity; + EnchantmentManager.d.a = entityliving; + if (entityliving != null) { -+ a((EnchantmentModifier) EnchantmentManager.d, entityliving.getEquipment()); ++ a((EnchantmentManager.EnchantmentModifier) EnchantmentManager.d, entityliving.getEquipment()); + } + + if (entity instanceof EntityHuman) { -+ a((EnchantmentModifier) EnchantmentManager.d, entityliving.bz()); ++ a((EnchantmentManager.EnchantmentModifier) EnchantmentManager.d, entityliving.bA()); + } + + } @@ -1554,21 +1667,21 @@ index 0000000..c624190 + EnchantmentManager.e.a = entityliving; + EnchantmentManager.e.b = entity; + if (entityliving != null) { -+ a((EnchantmentModifier) EnchantmentManager.e, entityliving.getEquipment()); ++ a((EnchantmentManager.EnchantmentModifier) EnchantmentManager.e, entityliving.getEquipment()); + } + + if (entityliving instanceof EntityHuman) { -+ a((EnchantmentModifier) EnchantmentManager.e, entityliving.bz()); ++ a((EnchantmentManager.EnchantmentModifier) EnchantmentManager.e, entityliving.bA()); + } + + } + + public static int a(EntityLiving entityliving) { -+ return getEnchantmentLevel(Enchantment.KNOCKBACK.id, entityliving.bz()); ++ return getEnchantmentLevel(Enchantment.KNOCKBACK.id, entityliving.bA()); + } + + public static int getFireAspectEnchantmentLevel(EntityLiving entityliving) { -+ return getEnchantmentLevel(Enchantment.FIRE_ASPECT.id, entityliving.bz()); ++ return getEnchantmentLevel(Enchantment.FIRE_ASPECT.id, entityliving.bA()); + } + + public static int getOxygenEnchantmentLevel(Entity entity) { @@ -1580,27 +1693,27 @@ index 0000000..c624190 + } + + public static int getDigSpeedEnchantmentLevel(EntityLiving entityliving) { -+ return getEnchantmentLevel(Enchantment.DIG_SPEED.id, entityliving.bz()); ++ return getEnchantmentLevel(Enchantment.DIG_SPEED.id, entityliving.bA()); + } + + public static boolean hasSilkTouchEnchantment(EntityLiving entityliving) { -+ return getEnchantmentLevel(Enchantment.SILK_TOUCH.id, entityliving.bz()) > 0; ++ return getEnchantmentLevel(Enchantment.SILK_TOUCH.id, entityliving.bA()) > 0; + } + + public static int getBonusBlockLootEnchantmentLevel(EntityLiving entityliving) { -+ return getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS.id, entityliving.bz()); ++ return getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS.id, entityliving.bA()); + } + + public static int g(EntityLiving entityliving) { -+ return getEnchantmentLevel(Enchantment.LUCK.id, entityliving.bz()); ++ return getEnchantmentLevel(Enchantment.LUCK.id, entityliving.bA()); + } + + public static int h(EntityLiving entityliving) { -+ return getEnchantmentLevel(Enchantment.LURE.id, entityliving.bz()); ++ return getEnchantmentLevel(Enchantment.LURE.id, entityliving.bA()); + } + + public static int getBonusMonsterLootEnchantmentLevel(EntityLiving entityliving) { -+ return getEnchantmentLevel(Enchantment.LOOT_BONUS_MOBS.id, entityliving.bz()); ++ return getEnchantmentLevel(Enchantment.LOOT_BONUS_MOBS.id, entityliving.bA()); + } + + public static boolean j(EntityLiving entityliving) { @@ -1664,7 +1777,7 @@ index 0000000..c624190 + return itemstack; + } + -+ public static List b(Random random, ItemStack itemstack, int i) { ++ public static List b(Random random, ItemStack itemstack, int i) { + Item item = itemstack.getItem(); + int j = item.b(); + @@ -1730,7 +1843,7 @@ index 0000000..c624190 + } + } + -+ public static Map b(int i, ItemStack itemstack) { ++ public static Map b(int i, ItemStack itemstack) { + Item item = itemstack.getItem(); + HashMap hashmap = null; + boolean flag = itemstack.getItem() == Items.BOOK; @@ -1756,474 +1869,80 @@ index 0000000..c624190 + 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; ++ static class SyntheticClass_1 { } + -+final class EnchantmentModifierArthropods implements EnchantmentModifier { ++ static final class EnchantmentModifierArthropods implements EnchantmentManager.EnchantmentModifier { + -+ public EntityLiving a; -+ public Entity b; ++ public EntityLiving a; ++ public Entity b; + -+ private EnchantmentModifierArthropods() {} ++ 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/EntityFireworks.java b/src/main/java/net/minecraft/server/EntityFireworks.java -new file mode 100644 -index 0000000..8357157 ---- /dev/null -+++ b/src/main/java/net/minecraft/server/EntityFireworks.java -@@ -0,0 +1,123 @@ -+package net.minecraft.server; -+ -+public class EntityFireworks extends Entity { -+ -+ private int ticksFlown; -+ public int expectedLifespan; -+ -+ public EntityFireworks(World world) { -+ super(world); -+ this.a(0.25F, 0.25F); -+ } -+ -+ protected void h() { -+ this.datawatcher.add(8, 5); -+ } -+ -+ public EntityFireworks(World world, double d0, double d1, double d2, ItemStack itemstack) { -+ super(world); -+ this.ticksFlown = 0; -+ this.a(0.25F, 0.25F); -+ this.setPosition(d0, d1, d2); -+ int i = 1; -+ -+ if (itemstack != null && itemstack.hasTag()) { -+ this.datawatcher.watch(8, itemstack); -+ NBTTagCompound nbttagcompound = itemstack.getTag(); -+ NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("Fireworks"); -+ -+ if (nbttagcompound1 != null) { -+ i += nbttagcompound1.getByte("Flight"); -+ } ++ public void a(Enchantment enchantment, int i) { ++ enchantment.a(this.a, this.b, i); + } + -+ this.motX = this.random.nextGaussian() * 0.001D; -+ this.motZ = this.random.nextGaussian() * 0.001D; -+ this.motY = 0.05D; -+ this.expectedLifespan = 10 * i + this.random.nextInt(6) + this.random.nextInt(7); ++ EnchantmentModifierArthropods(EnchantmentManager.SyntheticClass_1 enchantmentmanager_syntheticclass_1) { ++ this(); ++ } + } + -+ public void s_() { -+ this.P = this.locX; -+ this.Q = this.locY; -+ this.R = this.locZ; -+ super.s_(); -+ this.motX *= 1.15D; -+ this.motZ *= 1.15D; -+ this.motY += 0.04D; -+ this.move(this.motX, this.motY, this.motZ); -+ float f = MathHelper.sqrt(this.motX * this.motX + this.motZ * this.motZ); ++ static final class EnchantmentModifierThorns implements EnchantmentManager.EnchantmentModifier { + -+ this.yaw = (float) (Math.atan2(this.motX, this.motZ) * 180.0D / 3.1415927410125732D); ++ public EntityLiving a; ++ public Entity b; + -+ for (this.pitch = (float) (Math.atan2(this.motY, (double) f) * 180.0D / 3.1415927410125732D); this.pitch - this.lastPitch < -180.0F; this.lastPitch -= 360.0F) { -+ ; ++ private EnchantmentModifierThorns() {} ++ ++ public void a(Enchantment enchantment, int i) { ++ enchantment.b(this.a, this.b, i); + } + -+ while (this.pitch - this.lastPitch >= 180.0F) { -+ this.lastPitch += 360.0F; ++ EnchantmentModifierThorns(EnchantmentManager.SyntheticClass_1 enchantmentmanager_syntheticclass_1) { ++ this(); + } -+ -+ while (this.yaw - this.lastYaw < -180.0F) { -+ this.lastYaw -= 360.0F; -+ } -+ -+ while (this.yaw - this.lastYaw >= 180.0F) { -+ this.lastYaw += 360.0F; -+ } -+ -+ this.pitch = this.lastPitch + (this.pitch - this.lastPitch) * 0.2F; -+ this.yaw = this.lastYaw + (this.yaw - this.lastYaw) * 0.2F; -+ if (this.ticksFlown == 0 && !this.R()) { -+ this.world.makeSound(this, "fireworks.launch", 3.0F, 1.0F); -+ } -+ -+ ++this.ticksFlown; -+ if (this.world.isStatic && this.ticksFlown % 2 < 2) { -+ this.world.addParticle(EnumParticle.FIREWORKS_SPARK, this.locX, this.locY - 0.3D, this.locZ, this.random.nextGaussian() * 0.05D, -this.motY * 0.5D, this.random.nextGaussian() * 0.05D, new int[0]); -+ } -+ -+ if (!this.world.isStatic && this.ticksFlown > this.expectedLifespan) { -+ this.world.broadcastEntityEffect(this, (byte) 17); -+ this.die(); -+ } -+ + } + -+ public void b(NBTTagCompound nbttagcompound) { -+ nbttagcompound.setInt("Life", this.ticksFlown); -+ nbttagcompound.setInt("LifeTime", this.expectedLifespan); -+ ItemStack itemstack = this.datawatcher.getItemStack(8); ++ static final class EnchantmentModifierDamage implements EnchantmentManager.EnchantmentModifier { + -+ if (itemstack != null) { -+ NBTTagCompound nbttagcompound1 = new NBTTagCompound(); ++ public float a; ++ public EnumMonsterType b; + -+ itemstack.save(nbttagcompound1); -+ nbttagcompound.set("FireworksItem", nbttagcompound1); ++ private EnchantmentModifierDamage() {} ++ ++ public void a(Enchantment enchantment, int i) { ++ this.a += enchantment.a(i, this.b); + } + ++ EnchantmentModifierDamage(EnchantmentManager.SyntheticClass_1 enchantmentmanager_syntheticclass_1) { ++ this(); ++ } + } + -+ public void a(NBTTagCompound nbttagcompound) { -+ this.ticksFlown = nbttagcompound.getInt("Life"); -+ this.expectedLifespan = nbttagcompound.getInt("LifeTime"); -+ NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("FireworksItem"); ++ static final class EnchantmentModifierProtection implements EnchantmentManager.EnchantmentModifier { + -+ if (nbttagcompound1 != null) { -+ ItemStack itemstack = ItemStack.createStack(nbttagcompound1); ++ public int a; ++ public DamageSource b; + -+ if (itemstack != null) { -+ this.datawatcher.watch(8, itemstack); -+ } ++ private EnchantmentModifierProtection() {} ++ ++ public void a(Enchantment enchantment, int i) { ++ this.a += enchantment.a(i, this.b); + } + -+ } -+ -+ public float c(float f) { -+ return super.c(f); -+ } -+ -+ public boolean aE() { -+ return false; -+ } -+} -diff --git a/src/main/java/net/minecraft/server/EntityTracker.java b/src/main/java/net/minecraft/server/EntityTracker.java -new file mode 100644 -index 0000000..c9058db ---- /dev/null -+++ b/src/main/java/net/minecraft/server/EntityTracker.java -@@ -0,0 +1,237 @@ -+package net.minecraft.server; -+ -+import com.google.common.collect.Lists; -+import com.google.common.collect.Sets; -+import java.util.ArrayList; -+import java.util.Iterator; -+import java.util.Set; -+import java.util.concurrent.Callable; -+import org.apache.logging.log4j.LogManager; -+import org.apache.logging.log4j.Logger; -+ -+public class EntityTracker { -+ -+ private static final Logger a = LogManager.getLogger(); -+ private final WorldServer world; -+ private Set c = Sets.newHashSet(); -+ public IntHashMap trackedEntities = new IntHashMap(); -+ private int e; -+ -+ public EntityTracker(WorldServer worldserver) { -+ this.world = worldserver; -+ this.e = worldserver.getMinecraftServer().getPlayerList().d(); -+ } -+ -+ public void track(Entity entity) { -+ if (entity instanceof EntityPlayer) { -+ this.addEntity(entity, 512, 2); -+ EntityPlayer entityplayer = (EntityPlayer) entity; -+ Iterator iterator = this.c.iterator(); -+ -+ while (iterator.hasNext()) { -+ EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next(); -+ -+ if (entitytrackerentry.tracker != entityplayer) { -+ entitytrackerentry.updatePlayer(entityplayer); -+ } -+ } -+ } else if (entity instanceof EntityFishingHook) { -+ this.addEntity(entity, 64, 5, true); -+ } else if (entity instanceof EntityArrow) { -+ this.addEntity(entity, 64, 20, false); -+ } else if (entity instanceof EntitySmallFireball) { -+ this.addEntity(entity, 64, 10, false); -+ } else if (entity instanceof EntityFireball) { -+ this.addEntity(entity, 64, 10, false); -+ } else if (entity instanceof EntitySnowball) { -+ this.addEntity(entity, 64, 10, true); -+ } else if (entity instanceof EntityEnderPearl) { -+ this.addEntity(entity, 64, 10, true); -+ } else if (entity instanceof EntityEnderSignal) { -+ this.addEntity(entity, 64, 4, true); -+ } else if (entity instanceof EntityEgg) { -+ this.addEntity(entity, 64, 10, true); -+ } else if (entity instanceof EntityPotion) { -+ this.addEntity(entity, 64, 10, true); -+ } else if (entity instanceof EntityThrownExpBottle) { -+ this.addEntity(entity, 64, 10, true); -+ } else if (entity instanceof EntityFireworks) { -+ this.addEntity(entity, 64, 10, true); -+ } else if (entity instanceof EntityItem) { -+ this.addEntity(entity, 64, 20, true); -+ } else if (entity instanceof EntityMinecartAbstract) { -+ this.addEntity(entity, 80, 3, true); -+ } else if (entity instanceof EntityBoat) { -+ this.addEntity(entity, 80, 3, true); -+ } else if (entity instanceof EntitySquid) { -+ this.addEntity(entity, 64, 3, true); -+ } else if (entity instanceof EntityWither) { -+ this.addEntity(entity, 80, 3, false); -+ } else if (entity instanceof EntityBat) { -+ this.addEntity(entity, 80, 3, false); -+ } else if (entity instanceof EntityEnderDragon) { -+ this.addEntity(entity, 160, 3, true); -+ } else if (entity instanceof IAnimal) { -+ this.addEntity(entity, 80, 3, true); -+ } else if (entity instanceof EntityTNTPrimed) { -+ this.addEntity(entity, 160, 10, true); -+ } else if (entity instanceof EntityFallingBlock) { -+ this.addEntity(entity, 160, 20, true); -+ } else if (entity instanceof EntityHanging) { -+ this.addEntity(entity, 160, Integer.MAX_VALUE, false); -+ } else if (entity instanceof EntityArmorStand) { -+ this.addEntity(entity, 160, 3, true); -+ } else if (entity instanceof EntityExperienceOrb) { -+ this.addEntity(entity, 160, 20, true); -+ } else if (entity instanceof EntityEnderCrystal) { -+ this.addEntity(entity, 256, Integer.MAX_VALUE, false); ++ EnchantmentModifierProtection(EnchantmentManager.SyntheticClass_1 enchantmentmanager_syntheticclass_1) { ++ this(); + } -+ + } + -+ public void addEntity(Entity entity, int i, int j) { -+ this.addEntity(entity, i, j, false); ++ interface EnchantmentModifier { ++ ++ void a(Enchantment enchantment, int i); + } -+ -+ public void addEntity(Entity entity, int i, int j, boolean flag) { -+ if (i > this.e) { -+ i = this.e; -+ } -+ -+ try { -+ if (this.trackedEntities.b(entity.getId())) { -+ throw new IllegalStateException("Entity is already tracked!"); -+ } -+ -+ EntityTrackerEntry entitytrackerentry = new EntityTrackerEntry(entity, i, j, flag); -+ -+ this.c.add(entitytrackerentry); -+ this.trackedEntities.a(entity.getId(), entitytrackerentry); -+ entitytrackerentry.scanPlayers(this.world.players); -+ } catch (Throwable throwable) { -+ CrashReport crashreport = CrashReport.a(throwable, "Adding entity to track"); -+ CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Entity To Track"); -+ -+ crashreportsystemdetails.a("Tracking range", (Object) (i + " blocks")); -+ crashreportsystemdetails.a("Update interval", (Callable) (new CrashReportEntityTrackerUpdateInterval(this, j))); -+ entity.appendEntityCrashDetails(crashreportsystemdetails); -+ CrashReportSystemDetails crashreportsystemdetails1 = crashreport.a("Entity That Is Already Tracked"); -+ -+ ((EntityTrackerEntry) this.trackedEntities.get(entity.getId())).tracker.appendEntityCrashDetails(crashreportsystemdetails1); -+ -+ try { -+ throw new ReportedException(crashreport); -+ } catch (ReportedException reportedexception) { -+ EntityTracker.a.error("\"Silently\" catching entity tracking error.", reportedexception); -+ } -+ } -+ -+ } -+ -+ public void untrackEntity(Entity entity) { -+ if (entity instanceof EntityPlayer) { -+ EntityPlayer entityplayer = (EntityPlayer) entity; -+ Iterator iterator = this.c.iterator(); -+ -+ while (iterator.hasNext()) { -+ EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next(); -+ -+ entitytrackerentry.a(entityplayer); -+ } -+ } -+ -+ EntityTrackerEntry entitytrackerentry1 = (EntityTrackerEntry) this.trackedEntities.d(entity.getId()); -+ -+ if (entitytrackerentry1 != null) { -+ this.c.remove(entitytrackerentry1); -+ entitytrackerentry1.a(); -+ } -+ -+ } -+ -+ public void updatePlayers() { -+ ArrayList arraylist = Lists.newArrayList(); -+ Iterator iterator = this.c.iterator(); -+ -+ while (iterator.hasNext()) { -+ EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next(); -+ -+ entitytrackerentry.track(this.world.players); -+ if (entitytrackerentry.n && entitytrackerentry.tracker instanceof EntityPlayer) { -+ arraylist.add((EntityPlayer) entitytrackerentry.tracker); -+ } -+ } -+ -+ for (int i = 0; i < arraylist.size(); ++i) { -+ EntityPlayer entityplayer = (EntityPlayer) arraylist.get(i); -+ Iterator iterator1 = this.c.iterator(); -+ -+ while (iterator1.hasNext()) { -+ EntityTrackerEntry entitytrackerentry1 = (EntityTrackerEntry) iterator1.next(); -+ -+ if (entitytrackerentry1.tracker != entityplayer) { -+ entitytrackerentry1.updatePlayer(entityplayer); -+ } -+ } -+ } -+ -+ } -+ -+ public void a(EntityPlayer entityplayer) { -+ Iterator iterator = this.c.iterator(); -+ -+ while (iterator.hasNext()) { -+ EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next(); -+ -+ if (entitytrackerentry.tracker == entityplayer) { -+ entitytrackerentry.scanPlayers(this.world.players); -+ } else { -+ entitytrackerentry.updatePlayer(entityplayer); -+ } -+ } -+ -+ } -+ -+ public void a(Entity entity, Packet packet) { -+ EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) this.trackedEntities.get(entity.getId()); -+ -+ if (entitytrackerentry != null) { -+ entitytrackerentry.broadcast(packet); -+ } -+ -+ } -+ -+ public void sendPacketToEntity(Entity entity, Packet packet) { -+ EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) this.trackedEntities.get(entity.getId()); -+ -+ if (entitytrackerentry != null) { -+ entitytrackerentry.broadcastIncludingSelf(packet); -+ } -+ -+ } -+ -+ public void untrackPlayer(EntityPlayer entityplayer) { -+ Iterator iterator = this.c.iterator(); -+ -+ while (iterator.hasNext()) { -+ EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next(); -+ -+ entitytrackerentry.clear(entityplayer); -+ } -+ -+ } -+ -+ public void a(EntityPlayer entityplayer, Chunk chunk) { -+ Iterator iterator = this.c.iterator(); -+ -+ while (iterator.hasNext()) { -+ EntityTrackerEntry entitytrackerentry = (EntityTrackerEntry) iterator.next(); -+ -+ if (entitytrackerentry.tracker != entityplayer && entitytrackerentry.tracker.ae == chunk.locX && entitytrackerentry.tracker.ag == chunk.locZ) { -+ entitytrackerentry.updatePlayer(entityplayer); -+ } -+ } -+ -+ } -+ +} diff --git a/src/main/java/net/minecraft/server/GameProfileBanEntry.java b/src/main/java/net/minecraft/server/GameProfileBanEntry.java new file mode 100644 -index 0000000..1cd7f9c +index 0000000..27ce9d9 --- /dev/null +++ b/src/main/java/net/minecraft/server/GameProfileBanEntry.java @@ -0,0 +1,47 @@ @@ -2234,7 +1953,7 @@ index 0000000..1cd7f9c +import java.util.Date; +import java.util.UUID; + -+public class GameProfileBanEntry extends ExpirableListEntry { ++public class GameProfileBanEntry extends ExpirableListEntry { + + public GameProfileBanEntry(GameProfile gameprofile) { + this(gameprofile, (Date) null, (String) null, (Date) null, (String) null); @@ -2276,10 +1995,10 @@ index 0000000..1cd7f9c +} diff --git a/src/main/java/net/minecraft/server/GenericAttributes.java b/src/main/java/net/minecraft/server/GenericAttributes.java new file mode 100644 -index 0000000..64acbde +index 0000000..871859f --- /dev/null +++ b/src/main/java/net/minecraft/server/GenericAttributes.java -@@ -0,0 +1,115 @@ +@@ -0,0 +1,114 @@ +package net.minecraft.server; + +import java.util.Collection; @@ -2393,14 +2112,13 @@ index 0000000..64acbde + return null; + } + } -+ +} diff --git a/src/main/java/net/minecraft/server/IntCache.java b/src/main/java/net/minecraft/server/IntCache.java new file mode 100644 -index 0000000..4b4f005 +index 0000000..8167fdd --- /dev/null +++ b/src/main/java/net/minecraft/server/IntCache.java -@@ -0,0 +1,64 @@ +@@ -0,0 +1,63 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; @@ -2409,10 +2127,10 @@ index 0000000..4b4f005 +public class IntCache { + + private static int a = 256; -+ private static List b = Lists.newArrayList(); -+ private static List c = Lists.newArrayList(); -+ private static List d = Lists.newArrayList(); -+ private static List e = Lists.newArrayList(); ++ private static List b = Lists.newArrayList(); ++ private static List c = Lists.newArrayList(); ++ private static List d = Lists.newArrayList(); ++ private static List e = Lists.newArrayList(); + + public static synchronized int[] a(int i) { + int[] aint; @@ -2463,11 +2181,10 @@ index 0000000..4b4f005 + public static synchronized String b() { + return "cache: " + IntCache.d.size() + ", tcache: " + IntCache.b.size() + ", allocated: " + IntCache.e.size() + ", tallocated: " + IntCache.c.size(); + } -+ +} 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..6f0a065 +index 0000000..eef43df --- /dev/null +++ b/src/main/java/net/minecraft/server/ItemDoor.java @@ -0,0 +1,56 @@ @@ -2489,7 +2206,7 @@ index 0000000..6f0a065 + IBlockData iblockdata = world.getType(blockposition); + Block block = iblockdata.getBlock(); + -+ if (!block.f(world, blockposition)) { ++ if (!block.a(world, blockposition)) { + blockposition = blockposition.shift(enumdirection); + } + @@ -2519,20 +2236,20 @@ index 0000000..6f0a065 + } + + BlockPosition blockposition3 = blockposition.up(); -+ IBlockData iblockdata = block.getBlockData().set(BlockDoor.FACING, enumdirection).set(BlockDoor.HINGE, flag2 ? EnumDoorHinge.RIGHT : EnumDoorHinge.LEFT); ++ IBlockData iblockdata = block.getBlockData().set(BlockDoor.FACING, enumdirection).set(BlockDoor.HINGE, flag2 ? BlockDoor.EnumDoorHinge.RIGHT : BlockDoor.EnumDoorHinge.LEFT); + -+ world.setTypeAndData(blockposition, iblockdata.set(BlockDoor.HALF, EnumDoorHalf.LOWER), 2); -+ world.setTypeAndData(blockposition3, iblockdata.set(BlockDoor.HALF, EnumDoorHalf.UPPER), 2); ++ world.setTypeAndData(blockposition, iblockdata.set(BlockDoor.HALF, BlockDoor.EnumDoorHalf.LOWER), 2); ++ world.setTypeAndData(blockposition3, iblockdata.set(BlockDoor.HALF, BlockDoor.EnumDoorHalf.UPPER), 2); + world.applyPhysics(blockposition, block); + world.applyPhysics(blockposition3, block); + } +} diff --git a/src/main/java/net/minecraft/server/ItemSkull.java b/src/main/java/net/minecraft/server/ItemSkull.java new file mode 100644 -index 0000000..17e88b8 +index 0000000..a46cfef --- /dev/null +++ b/src/main/java/net/minecraft/server/ItemSkull.java -@@ -0,0 +1,125 @@ +@@ -0,0 +1,124 @@ +package net.minecraft.server; + +import com.mojang.authlib.GameProfile; @@ -2554,7 +2271,7 @@ index 0000000..17e88b8 + } else { + IBlockData iblockdata = world.getType(blockposition); + Block block = iblockdata.getBlock(); -+ boolean flag = block.f(world, blockposition); ++ boolean flag = block.a(world, blockposition); + + if (!flag) { + if (!world.getType(blockposition).getBlock().getMaterial().isBuildable()) { @@ -2569,7 +2286,7 @@ index 0000000..17e88b8 + } else if (!Blocks.SKULL.canPlace(world, blockposition)) { + return false; + } else { -+ if (!world.isStatic) { ++ if (!world.isClientSide) { + world.setTypeAndData(blockposition, Blocks.SKULL.getBlockData().set(BlockSkull.FACING, enumdirection), 3); + int i = 0; + @@ -2656,26 +2373,26 @@ index 0000000..17e88b8 + return false; + } + } -+ +} diff --git a/src/main/java/net/minecraft/server/NBTBase.java b/src/main/java/net/minecraft/server/NBTBase.java new file mode 100644 -index 0000000..ec7cd61 +index 0000000..8756b63 --- /dev/null +++ b/src/main/java/net/minecraft/server/NBTBase.java -@@ -0,0 +1,87 @@ +@@ -0,0 +1,104 @@ +package net.minecraft.server; + +import java.io.DataInput; +import java.io.DataOutput; ++import java.io.IOException; + +public abstract class NBTBase { + + public static final String[] a = new String[] { "END", "BYTE", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE", "BYTE[]", "STRING", "LIST", "COMPOUND", "INT[]"}; + -+ abstract void write(DataOutput dataoutput) throws java.io.IOException; ++ abstract void write(DataOutput dataoutput) throws IOException; + -+ abstract void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws java.io.IOException; ++ abstract void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws IOException; + + public abstract String toString(); + @@ -2750,13 +2467,29 @@ index 0000000..ec7cd61 + return this.toString(); + } + ++ public abstract static class NBTNumber extends NBTBase { ++ ++ protected NBTNumber() {} ++ ++ public abstract long c(); ++ ++ public abstract int d(); ++ ++ public abstract short e(); ++ ++ public abstract byte f(); ++ ++ public abstract double g(); ++ ++ public abstract float h(); ++ } +} diff --git a/src/main/java/net/minecraft/server/NBTCompressedStreamTools.java b/src/main/java/net/minecraft/server/NBTCompressedStreamTools.java new file mode 100644 -index 0000000..e9d8828 +index 0000000..2a04b86 --- /dev/null +++ b/src/main/java/net/minecraft/server/NBTCompressedStreamTools.java -@@ -0,0 +1,99 @@ +@@ -0,0 +1,90 @@ +package net.minecraft.server; + +import java.io.BufferedInputStream; @@ -2773,8 +2506,7 @@ index 0000000..e9d8828 + +public class NBTCompressedStreamTools { + -+ public static NBTTagCompound a(InputStream inputstream) { -+ try { ++ public static NBTTagCompound a(InputStream inputstream) throws IOException { + DataInputStream datainputstream = new DataInputStream(new BufferedInputStream(new GZIPInputStream(inputstream))); + + NBTTagCompound nbttagcompound; @@ -2786,11 +2518,9 @@ index 0000000..e9d8828 + } + + return nbttagcompound; -+ } catch (IOException ex) { org.spigotmc.SneakyThrow.sneaky( ex ); } return null; + } + -+ public static void a(NBTTagCompound nbttagcompound, OutputStream outputstream) { -+ try { ++ public static void a(NBTTagCompound nbttagcompound, OutputStream outputstream) throws IOException { + DataOutputStream dataoutputstream = new DataOutputStream(new BufferedOutputStream(new GZIPOutputStream(outputstream))); + + try { @@ -2798,15 +2528,14 @@ index 0000000..e9d8828 + } finally { + dataoutputstream.close(); + } -+ } catch (IOException ex) { org.spigotmc.SneakyThrow.sneaky( ex ); } ++ + } + -+ public static NBTTagCompound a(DataInputStream datainputstream) { ++ public static NBTTagCompound a(DataInputStream datainputstream) throws IOException { + return a((DataInput) datainputstream, NBTReadLimiter.a); + } + -+ public static NBTTagCompound a(DataInput datainput, NBTReadLimiter nbtreadlimiter) { -+ try { ++ public static NBTTagCompound a(DataInput datainput, NBTReadLimiter nbtreadlimiter) throws IOException { + NBTBase nbtbase = a(datainput, 0, nbtreadlimiter); + + if (nbtbase instanceof NBTTagCompound) { @@ -2814,25 +2543,21 @@ index 0000000..e9d8828 + } else { + throw new IOException("Root tag must be a named compound tag"); + } -+ } catch (IOException ex) { org.spigotmc.SneakyThrow.sneaky( ex ); } return null; + } + -+ public static void a(NBTTagCompound nbttagcompound, DataOutput dataoutput) { ++ public static void a(NBTTagCompound nbttagcompound, DataOutput dataoutput) throws IOException { + a((NBTBase) nbttagcompound, dataoutput); + } + -+ private static void a(NBTBase nbtbase, DataOutput dataoutput) { -+ try { ++ private static void a(NBTBase nbtbase, DataOutput dataoutput) throws IOException { + dataoutput.writeByte(nbtbase.getTypeId()); + if (nbtbase.getTypeId() != 0) { + dataoutput.writeUTF(""); + nbtbase.write(dataoutput); + } -+ } catch (IOException ex) { org.spigotmc.SneakyThrow.sneaky( ex ); } + } + -+ private static NBTBase a(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) { -+ try { ++ private static NBTBase a(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws IOException { + byte b0 = datainput.readByte(); + + if (b0 == 0) { @@ -2853,19 +2578,19 @@ index 0000000..e9d8828 + throw new ReportedException(crashreport); + } + } -+ } catch (IOException ex) { org.spigotmc.SneakyThrow.sneaky( ex ); } return null; + } +} diff --git a/src/main/java/net/minecraft/server/NBTTagByteArray.java b/src/main/java/net/minecraft/server/NBTTagByteArray.java new file mode 100644 -index 0000000..7525469 +index 0000000..3eeed3e --- /dev/null +++ b/src/main/java/net/minecraft/server/NBTTagByteArray.java -@@ -0,0 +1,56 @@ +@@ -0,0 +1,57 @@ +package net.minecraft.server; + +import java.io.DataInput; +import java.io.DataOutput; ++import java.io.IOException; +import java.util.Arrays; + +public class NBTTagByteArray extends NBTBase { @@ -2878,12 +2603,12 @@ index 0000000..7525469 + this.data = abyte; + } + -+ void write(DataOutput dataoutput) throws java.io.IOException { ++ void write(DataOutput dataoutput) throws IOException { + dataoutput.writeInt(this.data.length); + dataoutput.write(this.data); + } + -+ void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws java.io.IOException { ++ void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws IOException { + int j = datainput.readInt(); + + nbtreadlimiter.a((long) (8 * j)); @@ -2920,14 +2645,15 @@ index 0000000..7525469 +} diff --git a/src/main/java/net/minecraft/server/NBTTagIntArray.java b/src/main/java/net/minecraft/server/NBTTagIntArray.java new file mode 100644 -index 0000000..f331ef3 +index 0000000..63c3bf9 --- /dev/null +++ b/src/main/java/net/minecraft/server/NBTTagIntArray.java -@@ -0,0 +1,74 @@ +@@ -0,0 +1,75 @@ +package net.minecraft.server; + +import java.io.DataInput; +import java.io.DataOutput; ++import java.io.IOException; +import java.util.Arrays; + +public class NBTTagIntArray extends NBTBase { @@ -2940,7 +2666,7 @@ index 0000000..f331ef3 + this.data = aint; + } + -+ void write(DataOutput dataoutput) throws java.io.IOException { ++ void write(DataOutput dataoutput) throws IOException { + dataoutput.writeInt(this.data.length); + + for (int i = 0; i < this.data.length; ++i) { @@ -2949,7 +2675,7 @@ index 0000000..f331ef3 + + } + -+ void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws java.io.IOException { ++ void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws IOException { + int j = datainput.readInt(); + + nbtreadlimiter.a((long) (32 * j)); @@ -3000,13 +2726,13 @@ index 0000000..f331ef3 +} 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..7227bfa +index 0000000..648d255 --- /dev/null +++ b/src/main/java/net/minecraft/server/NextTickListEntry.java @@ -0,0 +1,56 @@ +package net.minecraft.server; + -+public class NextTickListEntry implements Comparable { ++public class NextTickListEntry implements Comparable { + + private static long d; + private final Block e; @@ -3056,7 +2782,7 @@ index 0000000..7227bfa + return this.e; + } + -+ public int compareTo(Object object) { ++ public int compareTo(NextTickListEntry object) { + return this.a((NextTickListEntry) object); + } +} @@ -3126,67 +2852,68 @@ index 0000000..9306f97 +} 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..894bb7a +index 0000000..670d626 --- /dev/null +++ b/src/main/java/net/minecraft/server/OldChunkLoader.java -@@ -0,0 +1,121 @@ +@@ -0,0 +1,145 @@ +package net.minecraft.server; + +public class OldChunkLoader { + -+ public static OldChunk a(NBTTagCompound nbttagcompound) { ++ public static OldChunkLoader.OldChunk a(NBTTagCompound nbttagcompound) { + int i = nbttagcompound.getInt("xPos"); + int j = nbttagcompound.getInt("zPos"); -+ OldChunk oldchunk = new OldChunk(i, j); ++ OldChunkLoader.OldChunk oldchunkloader_oldchunk = new OldChunkLoader.OldChunk(i, j); + -+ oldchunk.g = nbttagcompound.getByteArray("Blocks"); -+ oldchunk.f = new OldNibbleArray(nbttagcompound.getByteArray("Data"), 7); -+ oldchunk.e = new OldNibbleArray(nbttagcompound.getByteArray("SkyLight"), 7); -+ oldchunk.d = new OldNibbleArray(nbttagcompound.getByteArray("BlockLight"), 7); -+ oldchunk.c = nbttagcompound.getByteArray("HeightMap"); -+ oldchunk.b = nbttagcompound.getBoolean("TerrainPopulated"); -+ oldchunk.h = nbttagcompound.getList("Entities", 10); -+ oldchunk.i = nbttagcompound.getList("TileEntities", 10); -+ oldchunk.j = nbttagcompound.getList("TileTicks", 10); ++ oldchunkloader_oldchunk.g = nbttagcompound.getByteArray("Blocks"); ++ oldchunkloader_oldchunk.f = new OldNibbleArray(nbttagcompound.getByteArray("Data"), 7); ++ oldchunkloader_oldchunk.e = new OldNibbleArray(nbttagcompound.getByteArray("SkyLight"), 7); ++ oldchunkloader_oldchunk.d = new OldNibbleArray(nbttagcompound.getByteArray("BlockLight"), 7); ++ oldchunkloader_oldchunk.c = nbttagcompound.getByteArray("HeightMap"); ++ oldchunkloader_oldchunk.b = nbttagcompound.getBoolean("TerrainPopulated"); ++ oldchunkloader_oldchunk.h = nbttagcompound.getList("Entities", 10); ++ oldchunkloader_oldchunk.i = nbttagcompound.getList("TileEntities", 10); ++ oldchunkloader_oldchunk.j = nbttagcompound.getList("TileTicks", 10); + + try { -+ oldchunk.a = nbttagcompound.getLong("LastUpdate"); ++ oldchunkloader_oldchunk.a = nbttagcompound.getLong("LastUpdate"); + } catch (ClassCastException classcastexception) { -+ oldchunk.a = (long) nbttagcompound.getInt("LastUpdate"); ++ oldchunkloader_oldchunk.a = (long) nbttagcompound.getInt("LastUpdate"); + } + -+ return oldchunk; ++ return oldchunkloader_oldchunk; + } + -+ public static void a(OldChunk oldchunk, NBTTagCompound nbttagcompound, WorldChunkManager worldchunkmanager) { -+ nbttagcompound.setInt("xPos", oldchunk.k); -+ nbttagcompound.setInt("zPos", oldchunk.l); -+ nbttagcompound.setLong("LastUpdate", oldchunk.a); -+ int[] aint = new int[oldchunk.c.length]; ++ public static void a(OldChunkLoader.OldChunk oldchunkloader_oldchunk, NBTTagCompound nbttagcompound, WorldChunkManager worldchunkmanager) { ++ nbttagcompound.setInt("xPos", oldchunkloader_oldchunk.k); ++ nbttagcompound.setInt("zPos", oldchunkloader_oldchunk.l); ++ nbttagcompound.setLong("LastUpdate", oldchunkloader_oldchunk.a); ++ int[] aint = new int[oldchunkloader_oldchunk.c.length]; + -+ for (int i = 0; i < oldchunk.c.length; ++i) { -+ aint[i] = oldchunk.c[i]; ++ for (int i = 0; i < oldchunkloader_oldchunk.c.length; ++i) { ++ aint[i] = oldchunkloader_oldchunk.c[i]; + } + + nbttagcompound.setIntArray("HeightMap", aint); -+ nbttagcompound.setBoolean("TerrainPopulated", oldchunk.b); ++ nbttagcompound.setBoolean("TerrainPopulated", oldchunkloader_oldchunk.b); + NBTTagList nbttaglist = new NBTTagList(); + + int j; ++ int k; + -+ for (int k = 0; k < 8; ++k) { ++ for (int l = 0; l < 8; ++l) { + boolean flag = true; + + for (j = 0; j < 16 && flag; ++j) { -+ int l = 0; ++ k = 0; + -+ while (l < 16 && flag) { ++ while (k < 16 && flag) { + int i1 = 0; + + while (true) { + if (i1 < 16) { -+ int j1 = j << 11 | i1 << 7 | l + (k << 4); -+ byte b0 = oldchunk.g[j1]; ++ int j1 = j << 11 | i1 << 7 | k + (l << 4); ++ byte b0 = oldchunkloader_oldchunk.g[j1]; + + if (b0 == 0) { + ++i1; @@ -3196,7 +2923,7 @@ index 0000000..894bb7a + flag = false; + } + -+ ++l; ++ ++k; + break; + } + } @@ -3211,20 +2938,20 @@ index 0000000..894bb7a + for (int k1 = 0; k1 < 16; ++k1) { + for (int l1 = 0; l1 < 16; ++l1) { + for (int i2 = 0; i2 < 16; ++i2) { -+ int j2 = k1 << 11 | i2 << 7 | l1 + (k << 4); -+ byte b1 = oldchunk.g[j2]; ++ int j2 = k1 << 11 | i2 << 7 | l1 + (l << 4); ++ byte b1 = oldchunkloader_oldchunk.g[j2]; + + abyte[l1 << 8 | i2 << 4 | k1] = (byte) (b1 & 255); -+ nibblearray.a(k1, l1, i2, oldchunk.f.a(k1, l1 + (k << 4), i2)); -+ nibblearray1.a(k1, l1, i2, oldchunk.e.a(k1, l1 + (k << 4), i2)); -+ nibblearray2.a(k1, l1, i2, oldchunk.d.a(k1, l1 + (k << 4), i2)); ++ nibblearray.a(k1, l1, i2, oldchunkloader_oldchunk.f.a(k1, l1 + (l << 4), i2)); ++ nibblearray1.a(k1, l1, i2, oldchunkloader_oldchunk.e.a(k1, l1 + (l << 4), i2)); ++ nibblearray2.a(k1, l1, i2, oldchunkloader_oldchunk.d.a(k1, l1 + (l << 4), i2)); + } + } + } + + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + -+ nbttagcompound1.setByte("Y", (byte) (k & 255)); ++ nbttagcompound1.setByte("Y", (byte) (l & 255)); + nbttagcompound1.setByteArray("Blocks", abyte); + nbttagcompound1.setByteArray("Data", nibblearray.a()); + nbttagcompound1.setByteArray("SkyLight", nibblearray1.a()); @@ -3235,78 +2962,56 @@ index 0000000..894bb7a + + nbttagcompound.set("Sections", nbttaglist); + byte[] abyte1 = new byte[256]; ++ BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); + -+ for (int k2 = 0; k2 < 16; ++k2) { -+ for (j = 0; j < 16; ++j) { -+ abyte1[j << 4 | k2] = (byte) (worldchunkmanager.getBiome(new BlockPosition(oldchunk.k << 4 | k2, 0, oldchunk.l << 4 | j), BiomeBase.ad).id & 255); ++ for (j = 0; j < 16; ++j) { ++ for (k = 0; k < 16; ++k) { ++ blockposition_mutableblockposition.c(oldchunkloader_oldchunk.k << 4 | j, 0, oldchunkloader_oldchunk.l << 4 | k); ++ abyte1[k << 4 | j] = (byte) (worldchunkmanager.getBiome(blockposition_mutableblockposition, BiomeBase.ad).id & 255); + } + } + + nbttagcompound.setByteArray("Biomes", abyte1); -+ nbttagcompound.set("Entities", oldchunk.h); -+ nbttagcompound.set("TileEntities", oldchunk.i); -+ if (oldchunk.j != null) { -+ nbttagcompound.set("TileTicks", oldchunk.j); ++ nbttagcompound.set("Entities", oldchunkloader_oldchunk.h); ++ nbttagcompound.set("TileEntities", oldchunkloader_oldchunk.i); ++ if (oldchunkloader_oldchunk.j != null) { ++ nbttagcompound.set("TileTicks", oldchunkloader_oldchunk.j); + } + + } -+} -diff --git a/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java b/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java -new file mode 100644 -index 0000000..97920b0 ---- /dev/null -+++ b/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java -@@ -0,0 +1,41 @@ -+package net.minecraft.server; + -+public class PacketHandshakingInSetProtocol implements Packet { ++ public static class OldChunk { + -+ private int a; -+ public String b; -+ public int c; -+ private EnumProtocol d; ++ public long a; ++ public boolean b; ++ public byte[] c; ++ public OldNibbleArray d; ++ public OldNibbleArray e; ++ public OldNibbleArray f; ++ public byte[] g; ++ public NBTTagList h; ++ public NBTTagList i; ++ public NBTTagList j; ++ public final int k; ++ public final int l; + -+ public PacketHandshakingInSetProtocol() {} -+ -+ public void a(PacketDataSerializer packetdataserializer) { -+ this.a = packetdataserializer.e(); -+ this.b = packetdataserializer.c(255); -+ this.c = packetdataserializer.readUnsignedShort(); -+ this.d = EnumProtocol.a(packetdataserializer.e()); -+ } -+ -+ public void b(PacketDataSerializer packetdataserializer) { -+ packetdataserializer.b(this.a); -+ packetdataserializer.a(this.b); -+ packetdataserializer.writeShort(this.c); -+ packetdataserializer.b(this.d.a()); -+ } -+ -+ public void a(PacketHandshakingInListener packethandshakinginlistener) { -+ packethandshakinginlistener.a(this); -+ } -+ -+ public EnumProtocol a() { -+ return this.d; -+ } -+ -+ public int b() { -+ return this.a; -+ } -+ -+ public void a(PacketListener packetlistener) { -+ this.a((PacketHandshakingInListener) packetlistener); ++ public OldChunk(int i, int j) { ++ this.k = i; ++ this.l = j; ++ } + } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayInChat.java b/src/main/java/net/minecraft/server/PacketPlayInChat.java new file mode 100644 -index 0000000..8e1740d +index 0000000..0ab90f3 --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayInChat.java -@@ -0,0 +1,36 @@ +@@ -0,0 +1,34 @@ +package net.minecraft.server; + -+public class PacketPlayInChat implements Packet { ++import java.io.IOException; ++ ++public class PacketPlayInChat implements Packet { + + private String a; + @@ -3320,11 +3025,11 @@ index 0000000..8e1740d + this.a = s; + } + -+ public void a(PacketDataSerializer packetdataserializer) { ++ public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.c(100); + } + -+ public void b(PacketDataSerializer packetdataserializer) { ++ public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.a(this.a); + } + @@ -3335,28 +3040,25 @@ index 0000000..8e1740d + public String a() { + return this.a; + } -+ -+ public void a(PacketListener packetlistener) { -+ this.a((PacketListenerPlayIn) packetlistener); -+ } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java new file mode 100644 -index 0000000..e24d3ae +index 0000000..6e368f5 --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java -@@ -0,0 +1,114 @@ +@@ -0,0 +1,119 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; ++import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; + -+public class PacketPlayOutMapChunk implements Packet { ++public class PacketPlayOutMapChunk implements Packet { + + private int a; + private int b; -+ private ChunkMap c; ++ private PacketPlayOutMapChunk.ChunkMap c; + private boolean d; + + public PacketPlayOutMapChunk() {} @@ -3368,16 +3070,16 @@ index 0000000..e24d3ae + this.c = a(chunk, flag, !chunk.getWorld().worldProvider.o(), i); + } + -+ public void a(PacketDataSerializer packetdataserializer) { ++ public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readInt(); + this.b = packetdataserializer.readInt(); + this.d = packetdataserializer.readBoolean(); -+ this.c = new ChunkMap(); ++ this.c = new PacketPlayOutMapChunk.ChunkMap(); + this.c.b = packetdataserializer.readShort(); + this.c.a = packetdataserializer.a(); + } + -+ public void b(PacketDataSerializer packetdataserializer) { ++ public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeInt(this.a); + packetdataserializer.writeInt(this.b); + packetdataserializer.writeBoolean(this.d); @@ -3398,9 +3100,9 @@ index 0000000..e24d3ae + return j + k + l + i1; + } + -+ public static ChunkMap a(Chunk chunk, boolean flag, boolean flag1, int i) { ++ public static PacketPlayOutMapChunk.ChunkMap a(Chunk chunk, boolean flag, boolean flag1, int i) { + ChunkSection[] achunksection = chunk.getSections(); -+ ChunkMap chunkmap = new ChunkMap(); ++ PacketPlayOutMapChunk.ChunkMap packetplayoutmapchunk_chunkmap = new PacketPlayOutMapChunk.ChunkMap(); + ArrayList arraylist = Lists.newArrayList(); + + int j; @@ -3409,12 +3111,12 @@ index 0000000..e24d3ae + ChunkSection chunksection = achunksection[j]; + + if (chunksection != null && (!flag || !chunksection.a()) && (i & 1 << j) != 0) { -+ chunkmap.b |= 1 << j; ++ packetplayoutmapchunk_chunkmap.b |= 1 << j; + arraylist.add(chunksection); + } + } + -+ chunkmap.a = new byte[a(Integer.bitCount(chunkmap.b), flag1, flag)]; ++ packetplayoutmapchunk_chunkmap.a = new byte[a(Integer.bitCount(packetplayoutmapchunk_chunkmap.b), flag1, flag)]; + j = 0; + Iterator iterator = arraylist.iterator(); + @@ -3429,26 +3131,26 @@ index 0000000..e24d3ae + for (int l = 0; l < k; ++l) { + char c0 = achar1[l]; + -+ chunkmap.a[j++] = (byte) (c0 & 255); -+ chunkmap.a[j++] = (byte) (c0 >> 8 & 255); ++ packetplayoutmapchunk_chunkmap.a[j++] = (byte) (c0 & 255); ++ packetplayoutmapchunk_chunkmap.a[j++] = (byte) (c0 >> 8 & 255); + } + } + -+ for (iterator = arraylist.iterator(); iterator.hasNext(); j = a(chunksection1.getEmittedLightArray().a(), chunkmap.a, j)) { ++ for (iterator = arraylist.iterator(); iterator.hasNext(); j = a(chunksection1.getEmittedLightArray().a(), packetplayoutmapchunk_chunkmap.a, j)) { + chunksection1 = (ChunkSection) iterator.next(); + } + + if (flag1) { -+ for (iterator = arraylist.iterator(); iterator.hasNext(); j = a(chunksection1.getSkyLightArray().a(), chunkmap.a, j)) { ++ for (iterator = arraylist.iterator(); iterator.hasNext(); j = a(chunksection1.getSkyLightArray().a(), packetplayoutmapchunk_chunkmap.a, j)) { + chunksection1 = (ChunkSection) iterator.next(); + } + } + + if (flag) { -+ a(chunk.getBiomeIndex(), chunkmap.a, j); ++ a(chunk.getBiomeIndex(), packetplayoutmapchunk_chunkmap.a, j); + } + -+ return chunkmap; ++ return packetplayoutmapchunk_chunkmap; + } + + private static int a(byte[] abyte, byte[] abyte1, int i) { @@ -3456,62 +3158,67 @@ index 0000000..e24d3ae + return i + abyte.length; + } + -+ public void a(PacketListener packetlistener) { -+ this.a((PacketListenerPlayOut) packetlistener); ++ public static class ChunkMap { ++ ++ public byte[] a; ++ public int b; ++ ++ public ChunkMap() {} + } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java new file mode 100644 -index 0000000..8af5e1f +index 0000000..63b90f7 --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java -@@ -0,0 +1,82 @@ +@@ -0,0 +1,79 @@ +package net.minecraft.server; + ++import java.io.IOException; +import java.util.List; + -+public class PacketPlayOutMapChunkBulk implements Packet { ++public class PacketPlayOutMapChunkBulk implements Packet { + + private int[] a; + private int[] b; -+ private ChunkMap[] c; ++ private PacketPlayOutMapChunk.ChunkMap[] c; + private boolean d; + + public PacketPlayOutMapChunkBulk() {} + -+ public PacketPlayOutMapChunkBulk(List list) { ++ public PacketPlayOutMapChunkBulk(List list) { + int i = list.size(); + + this.a = new int[i]; + this.b = new int[i]; -+ this.c = new ChunkMap[i]; ++ this.c = new PacketPlayOutMapChunk.ChunkMap[i]; + this.d = !((Chunk) list.get(0)).getWorld().worldProvider.o(); + + for (int j = 0; j < i; ++j) { + Chunk chunk = (Chunk) list.get(j); -+ ChunkMap chunkmap = PacketPlayOutMapChunk.a(chunk, true, this.d, '\uffff'); ++ PacketPlayOutMapChunk.ChunkMap packetplayoutmapchunk_chunkmap = PacketPlayOutMapChunk.a(chunk, true, this.d, '\uffff'); + + this.a[j] = chunk.locX; + this.b[j] = chunk.locZ; -+ this.c[j] = chunkmap; ++ this.c[j] = packetplayoutmapchunk_chunkmap; + } + + } + -+ public void a(PacketDataSerializer packetdataserializer) { ++ public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.d = packetdataserializer.readBoolean(); + int i = packetdataserializer.e(); + + this.a = new int[i]; + this.b = new int[i]; -+ this.c = new ChunkMap[i]; ++ this.c = new PacketPlayOutMapChunk.ChunkMap[i]; + + int j; + + for (j = 0; j < i; ++j) { + this.a[j] = packetdataserializer.readInt(); + this.b[j] = packetdataserializer.readInt(); -+ this.c[j] = new ChunkMap(); ++ this.c[j] = new PacketPlayOutMapChunk.ChunkMap(); + this.c[j].b = packetdataserializer.readShort() & '\uffff'; + this.c[j].a = new byte[PacketPlayOutMapChunk.a(Integer.bitCount(this.c[j].b), this.d, true)]; + } @@ -3522,7 +3229,7 @@ index 0000000..8af5e1f + + } + -+ public void b(PacketDataSerializer packetdataserializer) { ++ public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeBoolean(this.d); + packetdataserializer.b(this.c.length); + @@ -3543,20 +3250,18 @@ index 0000000..8af5e1f + public void a(PacketListenerPlayOut packetlistenerplayout) { + packetlistenerplayout.a(this); + } -+ -+ public void a(PacketListener packetlistener) { -+ this.a((PacketListenerPlayOut) packetlistener); -+ } +} diff --git a/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java b/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java new file mode 100644 -index 0000000..6f2aac9 +index 0000000..c168194 --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutOpenWindow.java -@@ -0,0 +1,58 @@ +@@ -0,0 +1,56 @@ +package net.minecraft.server; + -+public class PacketPlayOutOpenWindow implements Packet { ++import java.io.IOException; ++ ++public class PacketPlayOutOpenWindow implements Packet { + + private int a; + private String b; @@ -3586,7 +3291,7 @@ index 0000000..6f2aac9 + packetlistenerplayout.a(this); + } + -+ public void a(PacketDataSerializer packetdataserializer) { ++ public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.readUnsignedByte(); + this.b = packetdataserializer.c(32); + this.c = packetdataserializer.d(); @@ -3597,7 +3302,7 @@ index 0000000..6f2aac9 + + } + -+ public void b(PacketDataSerializer packetdataserializer) { ++ public void b(PacketDataSerializer packetdataserializer) throws IOException { + packetdataserializer.writeByte(this.a); + packetdataserializer.a(this.b); + packetdataserializer.a(this.c); @@ -3607,14 +3312,10 @@ index 0000000..6f2aac9 + } + + } -+ -+ public void a(PacketListener packetlistener) { -+ this.a((PacketListenerPlayOut) packetlistener); -+ } +} 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..d1e77a8 +index 0000000..c8eebf8 --- /dev/null +++ b/src/main/java/net/minecraft/server/PathfinderGoalSwell.java @@ -0,0 +1,39 @@ @@ -3633,7 +3334,7 @@ index 0000000..d1e77a8 + public boolean a() { + EntityLiving entityliving = this.a.getGoalTarget(); + -+ return this.a.ck() > 0 || entityliving != null && this.a.h(entityliving) < 9.0D; ++ return this.a.cm() > 0 || entityliving != null && this.a.h(entityliving) < 9.0D; + } + + public void c() { @@ -3659,7 +3360,7 @@ index 0000000..d1e77a8 +} diff --git a/src/main/java/net/minecraft/server/PersistentCollection.java b/src/main/java/net/minecraft/server/PersistentCollection.java new file mode 100644 -index 0000000..6bae818 +index 0000000..4b8d548 --- /dev/null +++ b/src/main/java/net/minecraft/server/PersistentCollection.java @@ -0,0 +1,184 @@ @@ -3682,16 +3383,16 @@ index 0000000..6bae818 +public class PersistentCollection { + + private IDataManager b; -+ protected Map a = Maps.newHashMap(); -+ private List c = Lists.newArrayList(); -+ private Map d = Maps.newHashMap(); ++ protected Map a = Maps.newHashMap(); ++ private List c = Lists.newArrayList(); ++ private Map d = Maps.newHashMap(); + + public PersistentCollection(IDataManager idatamanager) { + this.b = idatamanager; + this.b(); + } + -+ public PersistentBase get(Class oclass, String s) { ++ public PersistentBase get(Class oclass, String s) { + PersistentBase persistentbase = (PersistentBase) this.a.get(s); + + if (persistentbase != null) { @@ -3849,10 +3550,10 @@ index 0000000..6bae818 +} 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..f4f72ef +index 0000000..b07e7d5 --- /dev/null +++ b/src/main/java/net/minecraft/server/RegionFileCache.java -@@ -0,0 +1,68 @@ +@@ -0,0 +1,67 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; @@ -3865,7 +3566,7 @@ index 0000000..f4f72ef + +public class RegionFileCache { + -+ private static final Map a = Maps.newHashMap(); ++ private static final Map a = Maps.newHashMap(); + + public static synchronized RegionFile a(File file, int i, int j) { + File file1 = new File(file, "region"); @@ -3919,22 +3620,34 @@ index 0000000..f4f72ef + + return regionfile.b(i & 31, j & 31); + } -+ +} diff --git a/src/main/java/net/minecraft/server/ServerConnection.java b/src/main/java/net/minecraft/server/ServerConnection.java new file mode 100644 -index 0000000..6508fdf +index 0000000..42188fa --- /dev/null +++ b/src/main/java/net/minecraft/server/ServerConnection.java -@@ -0,0 +1,106 @@ +@@ -0,0 +1,175 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; ++import com.google.common.util.concurrent.ThreadFactoryBuilder; +import io.netty.bootstrap.ServerBootstrap; ++import io.netty.channel.Channel; ++import io.netty.channel.ChannelException; +import io.netty.channel.ChannelFuture; ++import io.netty.channel.ChannelInitializer; ++import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; ++import io.netty.channel.epoll.Epoll; ++import io.netty.channel.epoll.EpollEventLoopGroup; ++import io.netty.channel.epoll.EpollServerSocketChannel; ++import io.netty.channel.local.LocalEventLoopGroup; ++import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioServerSocketChannel; ++import io.netty.handler.timeout.ReadTimeoutHandler; ++import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.GenericFutureListener; ++import java.io.IOException; +import java.net.InetAddress; +import java.util.Collections; +import java.util.Iterator; @@ -3945,30 +3658,83 @@ index 0000000..6508fdf + +public class ServerConnection { + -+ private static final Logger d = LogManager.getLogger(); -+ public static final LazyInitVar a = new LazyInitNioEventLoopGroup(); -+ public static final LazyInitVar b = new LazyInitLocalEventLoopGroup(); -+ private final MinecraftServer e; -+ public volatile boolean c; -+ private final List f = Collections.synchronizedList(Lists.newArrayList()); -+ private final List g = Collections.synchronizedList(Lists.newArrayList()); ++ private static final Logger e = LogManager.getLogger(); ++ public static final LazyInitVar a = new LazyInitVar() { ++ protected NioEventLoopGroup a() { ++ return new NioEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Server IO #%d").setDaemon(true).build()); ++ } ++ ++ protected Object init() { ++ return this.a(); ++ } ++ }; ++ public static final LazyInitVar b = new LazyInitVar() { ++ protected EpollEventLoopGroup a() { ++ return new EpollEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Epoll Server IO #%d").setDaemon(true).build()); ++ } ++ ++ protected Object init() { ++ return this.a(); ++ } ++ }; ++ public static final LazyInitVar c = new LazyInitVar() { ++ protected LocalEventLoopGroup a() { ++ return new LocalEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Local Server IO #%d").setDaemon(true).build()); ++ } ++ ++ protected Object init() { ++ return this.a(); ++ } ++ }; ++ private final MinecraftServer f; ++ public volatile boolean d; ++ private final List g = Collections.synchronizedList(Lists.newArrayList()); ++ private final List h = Collections.synchronizedList(Lists.newArrayList()); + + public ServerConnection(MinecraftServer minecraftserver) { -+ this.e = minecraftserver; -+ this.c = true; ++ this.f = minecraftserver; ++ this.d = true; + } + -+ public void a(InetAddress inetaddress, int i) { -+ List list = this.f; ++ public void a(InetAddress inetaddress, int i) throws IOException { ++ List list = this.g; + -+ synchronized (this.f) { -+ this.f.add(((ServerBootstrap) ((ServerBootstrap) (new ServerBootstrap()).channel(NioServerSocketChannel.class)).childHandler(new ServerConnectionChannel(this)).group((EventLoopGroup) ServerConnection.a.c()).localAddress(inetaddress, i)).bind().syncUninterruptibly()); ++ synchronized (this.g) { ++ Class oclass; ++ LazyInitVar lazyinitvar; ++ ++ if (Epoll.isAvailable() && this.f.ah()) { ++ oclass = EpollServerSocketChannel.class; ++ lazyinitvar = ServerConnection.b; ++ ServerConnection.e.info("Using epoll channel type"); ++ } else { ++ oclass = NioServerSocketChannel.class; ++ lazyinitvar = ServerConnection.a; ++ ServerConnection.e.info("Using default channel type"); ++ } ++ ++ this.g.add(((ServerBootstrap) ((ServerBootstrap) (new ServerBootstrap()).channel(oclass)).childHandler(new ChannelInitializer() { ++ protected void initChannel(Channel channel) throws Exception { ++ try { ++ channel.config().setOption(ChannelOption.TCP_NODELAY, Boolean.valueOf(true)); ++ } catch (ChannelException channelexception) { ++ ; ++ } ++ ++ channel.pipeline().addLast("timeout", new ReadTimeoutHandler(30)).addLast("legacy_query", new LegacyPingHandler(ServerConnection.this)).addLast("splitter", new PacketSplitter()).addLast("decoder", new PacketDecoder(EnumProtocolDirection.SERVERBOUND)).addLast("prepender", new PacketPrepender()).addLast("encoder", new PacketEncoder(EnumProtocolDirection.CLIENTBOUND)); ++ NetworkManager networkmanager = new NetworkManager(EnumProtocolDirection.SERVERBOUND); ++ ++ ServerConnection.this.h.add(networkmanager); ++ channel.pipeline().addLast("packet_handler", networkmanager); ++ networkmanager.a((PacketListener) (new HandshakeListener(ServerConnection.this.f, networkmanager))); ++ } ++ }).group((EventLoopGroup) lazyinitvar.c()).localAddress(inetaddress, i)).bind().syncUninterruptibly()); + } + } + + public void b() { -+ this.c = false; -+ Iterator iterator = this.f.iterator(); ++ this.d = false; ++ Iterator iterator = this.g.iterator(); + + while (iterator.hasNext()) { + ChannelFuture channelfuture = (ChannelFuture) iterator.next(); @@ -3976,20 +3742,20 @@ index 0000000..6508fdf + try { + channelfuture.channel().close().sync(); + } catch (InterruptedException interruptedexception) { -+ ServerConnection.d.error("Interrupted whilst closing channel"); ++ ServerConnection.e.error("Interrupted whilst closing channel"); + } + } + + } + + public void c() { -+ List list = this.g; ++ List list = this.h; + -+ synchronized (this.g) { -+ Iterator iterator = this.g.iterator(); ++ synchronized (this.h) { ++ Iterator iterator = this.h.iterator(); + + while (iterator.hasNext()) { -+ NetworkManager networkmanager = (NetworkManager) iterator.next(); ++ final NetworkManager networkmanager = (NetworkManager) iterator.next(); + + if (!networkmanager.h()) { + if (!networkmanager.g()) { @@ -4003,14 +3769,26 @@ index 0000000..6508fdf + CrashReport crashreport = CrashReport.a(exception, "Ticking memory connection"); + CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Ticking connection"); + -+ crashreportsystemdetails.a("Connection", (Callable) (new CrashReportNetworkManager(this, networkmanager))); ++ crashreportsystemdetails.a("Connection", new Callable() { ++ public String a() throws Exception { ++ return networkmanager.toString(); ++ } ++ ++ public Object call() throws Exception { ++ return this.a(); ++ } ++ }); + throw new ReportedException(crashreport); + } + -+ ServerConnection.d.warn("Failed to handle packet for " + networkmanager.getSocketAddress(), exception); -+ ChatComponentText chatcomponenttext = new ChatComponentText("Internal server error"); ++ ServerConnection.e.warn("Failed to handle packet for " + networkmanager.getSocketAddress(), exception); ++ final ChatComponentText chatcomponenttext = new ChatComponentText("Internal server error"); + -+ networkmanager.a(new PacketPlayOutKickDisconnect(chatcomponenttext), new NetworkManagerCloseFuture(this, networkmanager, chatcomponenttext), new GenericFutureListener[0]); ++ networkmanager.a(new PacketPlayOutKickDisconnect(chatcomponenttext), new GenericFutureListener>() { ++ public void operationComplete(Future future) throws Exception { ++ networkmanager.close(chatcomponenttext); ++ } ++ }, new GenericFutureListener[0]); + networkmanager.k(); + } + } @@ -4021,67 +3799,15 @@ index 0000000..6508fdf + } + + public MinecraftServer d() { -+ return this.e; -+ } -+ -+ static List a(ServerConnection serverconnection) { -+ return serverconnection.g; -+ } -+ -+ static MinecraftServer b(ServerConnection serverconnection) { -+ return serverconnection.e; -+ } -+ -+} -diff --git a/src/main/java/net/minecraft/server/ServerConnectionChannel.java b/src/main/java/net/minecraft/server/ServerConnectionChannel.java -new file mode 100644 -index 0000000..8473d48 ---- /dev/null -+++ b/src/main/java/net/minecraft/server/ServerConnectionChannel.java -@@ -0,0 +1,37 @@ -+package net.minecraft.server; -+ -+import io.netty.channel.Channel; -+import io.netty.channel.ChannelException; -+import io.netty.channel.ChannelInitializer; -+import io.netty.channel.ChannelOption; -+import io.netty.handler.timeout.ReadTimeoutHandler; -+ -+class ServerConnectionChannel extends ChannelInitializer { -+ -+ final ServerConnection a; -+ -+ ServerConnectionChannel(ServerConnection serverconnection) { -+ this.a = serverconnection; -+ } -+ -+ protected void initChannel(Channel channel) { -+ try { -+ channel.config().setOption(ChannelOption.IP_TOS, Integer.valueOf(24)); -+ } catch (ChannelException channelexception) { -+ ; -+ } -+ -+ try { -+ channel.config().setOption(ChannelOption.TCP_NODELAY, Boolean.valueOf(false)); -+ } catch (ChannelException channelexception1) { -+ ; -+ } -+ -+ channel.pipeline().addLast("timeout", new ReadTimeoutHandler(30)).addLast("legacy_query", new LegacyPingHandler(this.a)).addLast("splitter", new PacketSplitter()).addLast("decoder", new PacketDecoder(EnumProtocolDirection.SERVERBOUND)).addLast("prepender", new PacketPrepender()).addLast("encoder", new PacketEncoder(EnumProtocolDirection.CLIENTBOUND)); -+ NetworkManager networkmanager = new NetworkManager(EnumProtocolDirection.SERVERBOUND); -+ -+ ServerConnection.a(this.a).add(networkmanager); -+ channel.pipeline().addLast("packet_handler", networkmanager); -+ networkmanager.a((PacketListener) (new HandshakeListener(ServerConnection.b(this.a), networkmanager))); ++ return this.f; + } +} diff --git a/src/main/java/net/minecraft/server/ServerStatisticManager.java b/src/main/java/net/minecraft/server/ServerStatisticManager.java new file mode 100644 -index 0000000..4561825 +index 0000000..97c3e79 --- /dev/null +++ b/src/main/java/net/minecraft/server/ServerStatisticManager.java -@@ -0,0 +1,213 @@ +@@ -0,0 +1,212 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; @@ -4108,7 +3834,7 @@ index 0000000..4561825 + private static final Logger b = LogManager.getLogger(); + private final MinecraftServer c; + private final File d; -+ private final Set e = Sets.newHashSet(); ++ private final Set e = Sets.newHashSet(); + private int f = -300; + private boolean g = false; + @@ -4147,21 +3873,21 @@ index 0000000..4561825 + this.e.add(statistic); + if (statistic.d() && j == 0 && i > 0) { + this.g = true; -+ if (this.c.az()) { ++ if (this.c.aA()) { + this.c.getPlayerList().sendMessage(new ChatMessage("chat.type.achievement", new Object[] { entityhuman.getScoreboardDisplayName(), statistic.j()})); + } + } + + if (statistic.d() && j > 0 && i == 0) { + this.g = true; -+ if (this.c.az()) { ++ if (this.c.aA()) { + this.c.getPlayerList().sendMessage(new ChatMessage("chat.type.achievement.taken", new Object[] { entityhuman.getScoreboardDisplayName(), statistic.j()})); + } + } + + } + -+ public Set c() { ++ public Set c() { + HashSet hashset = Sets.newHashSet(this.e); + + this.e.clear(); @@ -4169,7 +3895,7 @@ index 0000000..4561825 + return hashset; + } + -+ public Map a(String s) { ++ public Map a(String s) { + JsonElement jsonelement = (new JsonParser()).parse(s); + + if (!jsonelement.isJsonObject()) { @@ -4218,7 +3944,7 @@ index 0000000..4561825 + } + } + -+ public static String a(Map map) { ++ public static String a(Map map) { + JsonObject jsonobject = new JsonObject(); + Iterator iterator = map.entrySet().iterator(); + @@ -4257,7 +3983,7 @@ index 0000000..4561825 + } + + public void a(EntityPlayer entityplayer) { -+ int i = this.c.ar(); ++ int i = this.c.as(); + HashMap hashmap = Maps.newHashMap(); + + if (this.g || i - this.f > 300) { @@ -4293,14 +4019,13 @@ index 0000000..4561825 + public boolean e() { + return this.g; + } -+ +} 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..49b7aa1 +index 0000000..0bced98 --- /dev/null +++ b/src/main/java/net/minecraft/server/StructureGenerator.java -@@ -0,0 +1,213 @@ +@@ -0,0 +1,237 @@ +package net.minecraft.server; + +import com.google.common.collect.Maps; @@ -4313,13 +4038,13 @@ index 0000000..49b7aa1 +public abstract class StructureGenerator extends WorldGenBase { + + private PersistentStructure d; -+ protected Map e = Maps.newHashMap(); ++ protected Map e = Maps.newHashMap(); + + public StructureGenerator() {} + + public abstract String a(); + -+ protected final void a(World world, int i, int j, int k, int l, ChunkSnapshot chunksnapshot) { ++ protected final void a(World world, final int i, final int j, int k, int l, ChunkSnapshot chunksnapshot) { + this.a(world); + if (!this.e.containsKey(Long.valueOf(ChunkCoordIntPair.a(i, j)))) { + this.b.nextInt(); @@ -4336,10 +4061,34 @@ index 0000000..49b7aa1 + CrashReport crashreport = CrashReport.a(throwable, "Exception preparing structure feature"); + CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Feature being prepared"); + -+ crashreportsystemdetails.a("Is feature chunk", (Callable) (new CrashReportIsFeatureChunk(this, i, j))); ++ crashreportsystemdetails.a("Is feature chunk", new Callable() { ++ public String a() throws Exception { ++ return StructureGenerator.this.a(i, j) ? "True" : "False"; ++ } ++ ++ public Object call() throws Exception { ++ return this.a(); ++ } ++ }); + crashreportsystemdetails.a("Chunk location", (Object) String.format("%d,%d", new Object[] { Integer.valueOf(i), Integer.valueOf(j)})); -+ crashreportsystemdetails.a("Chunk pos hash", (Callable) (new CrashReportChunkPosHash(this, i, j))); -+ crashreportsystemdetails.a("Structure type", (Callable) (new CrashReportStructureType(this))); ++ crashreportsystemdetails.a("Chunk pos hash", new Callable() { ++ public String a() throws Exception { ++ return String.valueOf(ChunkCoordIntPair.a(i, j)); ++ } ++ ++ public Object call() throws Exception { ++ return this.a(); ++ } ++ }); ++ crashreportsystemdetails.a("Structure type", new Callable() { ++ public String a() throws Exception { ++ return StructureGenerator.this.getClass().getCanonicalName(); ++ } ++ ++ public Object call() throws Exception { ++ return this.a(); ++ } ++ }); + throw new ReportedException(crashreport); + } + } @@ -4446,7 +4195,7 @@ index 0000000..49b7aa1 + if (blockposition1 != null) { + return blockposition1; + } else { -+ List list = this.y_(); ++ List list = this.z_(); + + if (list != null) { + BlockPosition blockposition3 = null; @@ -4468,7 +4217,7 @@ index 0000000..49b7aa1 + } + } + -+ protected List y_() { ++ protected List z_() { + return null; + } + @@ -4514,120 +4263,12 @@ index 0000000..49b7aa1 + + protected abstract StructureStart b(int i, int j); +} -diff --git a/src/main/java/net/minecraft/server/SwitchHelperBlockFlowerPot.java b/src/main/java/net/minecraft/server/SwitchHelperBlockFlowerPot.java -new file mode 100644 -index 0000000..48436ff ---- /dev/null -+++ b/src/main/java/net/minecraft/server/SwitchHelperBlockFlowerPot.java -@@ -0,0 +1,102 @@ -+package net.minecraft.server; -+ -+class SwitchHelperBlockFlowerPot { -+ -+ static final int[] a; -+ static final int[] b = new int[EnumFlowerVarient.values().length]; -+ -+ static { -+ try { -+ SwitchHelperBlockFlowerPot.b[EnumFlowerVarient.POPPY.ordinal()] = 1; -+ } catch (NoSuchFieldError nosuchfielderror) { -+ ; -+ } -+ -+ try { -+ SwitchHelperBlockFlowerPot.b[EnumFlowerVarient.BLUE_ORCHID.ordinal()] = 2; -+ } catch (NoSuchFieldError nosuchfielderror1) { -+ ; -+ } -+ -+ try { -+ SwitchHelperBlockFlowerPot.b[EnumFlowerVarient.ALLIUM.ordinal()] = 3; -+ } catch (NoSuchFieldError nosuchfielderror2) { -+ ; -+ } -+ -+ try { -+ SwitchHelperBlockFlowerPot.b[EnumFlowerVarient.HOUSTONIA.ordinal()] = 4; -+ } catch (NoSuchFieldError nosuchfielderror3) { -+ ; -+ } -+ -+ try { -+ SwitchHelperBlockFlowerPot.b[EnumFlowerVarient.RED_TULIP.ordinal()] = 5; -+ } catch (NoSuchFieldError nosuchfielderror4) { -+ ; -+ } -+ -+ try { -+ SwitchHelperBlockFlowerPot.b[EnumFlowerVarient.ORANGE_TULIP.ordinal()] = 6; -+ } catch (NoSuchFieldError nosuchfielderror5) { -+ ; -+ } -+ -+ try { -+ SwitchHelperBlockFlowerPot.b[EnumFlowerVarient.WHITE_TULIP.ordinal()] = 7; -+ } catch (NoSuchFieldError nosuchfielderror6) { -+ ; -+ } -+ -+ try { -+ SwitchHelperBlockFlowerPot.b[EnumFlowerVarient.PINK_TULIP.ordinal()] = 8; -+ } catch (NoSuchFieldError nosuchfielderror7) { -+ ; -+ } -+ -+ try { -+ SwitchHelperBlockFlowerPot.b[EnumFlowerVarient.OXEYE_DAISY.ordinal()] = 9; -+ } catch (NoSuchFieldError nosuchfielderror8) { -+ ; -+ } -+ -+ a = new int[EnumLogVariant.values().length]; -+ -+ try { -+ SwitchHelperBlockFlowerPot.a[EnumLogVariant.OAK.ordinal()] = 1; -+ } catch (NoSuchFieldError nosuchfielderror9) { -+ ; -+ } -+ -+ try { -+ SwitchHelperBlockFlowerPot.a[EnumLogVariant.SPRUCE.ordinal()] = 2; -+ } catch (NoSuchFieldError nosuchfielderror10) { -+ ; -+ } -+ -+ try { -+ SwitchHelperBlockFlowerPot.a[EnumLogVariant.BIRCH.ordinal()] = 3; -+ } catch (NoSuchFieldError nosuchfielderror11) { -+ ; -+ } -+ -+ try { -+ SwitchHelperBlockFlowerPot.a[EnumLogVariant.JUNGLE.ordinal()] = 4; -+ } catch (NoSuchFieldError nosuchfielderror12) { -+ ; -+ } -+ -+ try { -+ SwitchHelperBlockFlowerPot.a[EnumLogVariant.ACACIA.ordinal()] = 5; -+ } catch (NoSuchFieldError nosuchfielderror13) { -+ ; -+ } -+ -+ try { -+ SwitchHelperBlockFlowerPot.a[EnumLogVariant.DARK_OAK.ordinal()] = 6; -+ } catch (NoSuchFieldError nosuchfielderror14) { -+ ; -+ } -+ -+ } -+} diff --git a/src/main/java/net/minecraft/server/UserCache.java b/src/main/java/net/minecraft/server/UserCache.java new file mode 100644 -index 0000000..edbf02f +index 0000000..f053f4e --- /dev/null +++ b/src/main/java/net/minecraft/server/UserCache.java -@@ -0,0 +1,223 @@ +@@ -0,0 +1,346 @@ +package net.minecraft.server; + +import com.google.common.base.Charsets; @@ -4637,14 +4278,24 @@ index 0000000..edbf02f +import com.google.common.io.Files; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; ++import com.google.gson.JsonDeserializationContext; ++import com.google.gson.JsonDeserializer; ++import com.google.gson.JsonElement; ++import com.google.gson.JsonObject; ++import com.google.gson.JsonParseException; ++import com.google.gson.JsonSerializationContext; ++import com.google.gson.JsonSerializer; +import com.mojang.authlib.Agent; +import com.mojang.authlib.GameProfile; ++import com.mojang.authlib.ProfileLookupCallback; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.lang.reflect.ParameterizedType; ++import java.lang.reflect.Type; ++import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; @@ -4660,34 +4311,54 @@ index 0000000..edbf02f +public class UserCache { + + public static final SimpleDateFormat a = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); -+ private final Map c = Maps.newHashMap(); -+ private final Map d = Maps.newHashMap(); -+ private final LinkedList e = Lists.newLinkedList(); ++ private final Map c = Maps.newHashMap(); ++ private final Map d = Maps.newHashMap(); ++ private final LinkedList e = Lists.newLinkedList(); + private final MinecraftServer f; + protected final Gson b; + private final File g; -+ private static final ParameterizedType h = new UserCacheEntryType(); ++ private static final ParameterizedType h = new ParameterizedType() { ++ public Type[] getActualTypeArguments() { ++ return new Type[] { UserCache.UserCacheEntry.class}; ++ } ++ ++ public Type getRawType() { ++ return List.class; ++ } ++ ++ public Type getOwnerType() { ++ return null; ++ } ++ }; + + public UserCache(MinecraftServer minecraftserver, File file) { + this.f = minecraftserver; + this.g = file; + GsonBuilder gsonbuilder = new GsonBuilder(); + -+ gsonbuilder.registerTypeHierarchyAdapter(UserCacheEntry.class, new BanEntrySerializer(this, (GameProfileLookup) null)); ++ gsonbuilder.registerTypeHierarchyAdapter(UserCache.UserCacheEntry.class, new UserCache.BanEntrySerializer(null)); + this.b = gsonbuilder.create(); + this.b(); + } + + private static GameProfile a(MinecraftServer minecraftserver, String s) { -+ GameProfile[] agameprofile = new GameProfile[1]; -+ GameProfileLookup gameprofilelookup = new GameProfileLookup(agameprofile); ++ final GameProfile[] agameprofile = new GameProfile[1]; ++ ProfileLookupCallback profilelookupcallback = new ProfileLookupCallback() { ++ public void onProfileLookupSucceeded(GameProfile gameprofile) { ++ agameprofile[0] = gameprofile; ++ } + -+ minecraftserver.getGameProfileRepository().findProfilesByNames(new String[] { s}, Agent.MINECRAFT, gameprofilelookup); ++ public void onProfileLookupFailed(GameProfile gameprofile, Exception exception) { ++ agameprofile[0] = null; ++ } ++ }; ++ ++ minecraftserver.getGameProfileRepository().findProfilesByNames(new String[] { s}, Agent.MINECRAFT, profilelookupcallback); + if (!minecraftserver.getOnlineMode() && agameprofile[0] == null) { + UUID uuid = EntityHuman.a(new GameProfile((UUID) null, s)); + GameProfile gameprofile = new GameProfile(uuid, s); + -+ gameprofilelookup.onProfileLookupSucceeded(gameprofile); ++ profilelookupcallback.onProfileLookupSucceeded(gameprofile); + } + + return agameprofile[0]; @@ -4709,17 +4380,17 @@ index 0000000..edbf02f + } + + String s = gameprofile.getName().toLowerCase(Locale.ROOT); -+ UserCacheEntry usercacheentry = new UserCacheEntry(this, gameprofile, date, (GameProfileLookup) null); ++ UserCache.UserCacheEntry usercache_usercacheentry = new UserCache.UserCacheEntry(gameprofile, date, null); + + if (this.d.containsKey(uuid)) { -+ UserCacheEntry usercacheentry1 = (UserCacheEntry) this.d.get(uuid); ++ UserCache.UserCacheEntry usercache_usercacheentry1 = (UserCache.UserCacheEntry) this.d.get(uuid); + -+ this.c.remove(usercacheentry1.a().getName().toLowerCase(Locale.ROOT)); -+ this.c.put(gameprofile.getName().toLowerCase(Locale.ROOT), usercacheentry); ++ this.c.remove(usercache_usercacheentry1.a().getName().toLowerCase(Locale.ROOT)); ++ this.c.put(gameprofile.getName().toLowerCase(Locale.ROOT), usercache_usercacheentry); + this.e.remove(gameprofile); + } else { -+ this.d.put(uuid, usercacheentry); -+ this.c.put(s, usercacheentry); ++ this.d.put(uuid, usercache_usercacheentry); ++ this.c.put(s, usercache_usercacheentry); + } + + this.e.addFirst(gameprofile); @@ -4727,31 +4398,31 @@ index 0000000..edbf02f + + public GameProfile getProfile(String s) { + String s1 = s.toLowerCase(Locale.ROOT); -+ UserCacheEntry usercacheentry = (UserCacheEntry) this.c.get(s1); ++ UserCache.UserCacheEntry usercache_usercacheentry = (UserCache.UserCacheEntry) this.c.get(s1); + -+ if (usercacheentry != null && (new Date()).getTime() >= UserCacheEntry.a(usercacheentry).getTime()) { -+ this.d.remove(usercacheentry.a().getId()); -+ this.c.remove(usercacheentry.a().getName().toLowerCase(Locale.ROOT)); -+ this.e.remove(usercacheentry.a()); -+ usercacheentry = null; ++ if (usercache_usercacheentry != null && (new Date()).getTime() >= usercache_usercacheentry.c.getTime()) { ++ this.d.remove(usercache_usercacheentry.a().getId()); ++ this.c.remove(usercache_usercacheentry.a().getName().toLowerCase(Locale.ROOT)); ++ this.e.remove(usercache_usercacheentry.a()); ++ usercache_usercacheentry = null; + } + + GameProfile gameprofile; + -+ if (usercacheentry != null) { -+ gameprofile = usercacheentry.a(); ++ if (usercache_usercacheentry != null) { ++ gameprofile = usercache_usercacheentry.a(); + this.e.remove(gameprofile); + this.e.addFirst(gameprofile); + } else { + gameprofile = a(this.f, s1); + if (gameprofile != null) { + this.a(gameprofile); -+ usercacheentry = (UserCacheEntry) this.c.get(s1); ++ usercache_usercacheentry = (UserCache.UserCacheEntry) this.c.get(s1); + } + } + + this.c(); -+ return usercacheentry == null ? null : usercacheentry.a(); ++ return usercache_usercacheentry == null ? null : usercache_usercacheentry.a(); + } + + public String[] a() { @@ -4761,22 +4432,22 @@ index 0000000..edbf02f + } + + public GameProfile a(UUID uuid) { -+ UserCacheEntry usercacheentry = (UserCacheEntry) this.d.get(uuid); ++ UserCache.UserCacheEntry usercache_usercacheentry = (UserCache.UserCacheEntry) this.d.get(uuid); + -+ return usercacheentry == null ? null : usercacheentry.a(); ++ return usercache_usercacheentry == null ? null : usercache_usercacheentry.a(); + } + -+ private UserCacheEntry b(UUID uuid) { -+ UserCacheEntry usercacheentry = (UserCacheEntry) this.d.get(uuid); ++ private UserCache.UserCacheEntry b(UUID uuid) { ++ UserCache.UserCacheEntry usercache_usercacheentry = (UserCache.UserCacheEntry) this.d.get(uuid); + -+ if (usercacheentry != null) { -+ GameProfile gameprofile = usercacheentry.a(); ++ if (usercache_usercacheentry != null) { ++ GameProfile gameprofile = usercache_usercacheentry.a(); + + this.e.remove(gameprofile); + this.e.addFirst(gameprofile); + } + -+ return usercacheentry; ++ return usercache_usercacheentry; + } + + public void b() { @@ -4805,10 +4476,10 @@ index 0000000..edbf02f + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { -+ UserCacheEntry usercacheentry = (UserCacheEntry) iterator.next(); ++ UserCache.UserCacheEntry usercache_usercacheentry = (UserCache.UserCacheEntry) iterator.next(); + -+ if (usercacheentry != null) { -+ this.a(usercacheentry.a(), usercacheentry.b()); ++ if (usercache_usercacheentry != null) { ++ this.a(usercache_usercacheentry.a(), usercache_usercacheentry.b()); + } + } + } @@ -4833,291 +4504,307 @@ index 0000000..edbf02f + + } + -+ private List a(int i) { ++ private List a(int i) { + ArrayList arraylist = Lists.newArrayList(); + ArrayList arraylist1 = Lists.newArrayList(Iterators.limit(this.e.iterator(), i)); + Iterator iterator = arraylist1.iterator(); + + while (iterator.hasNext()) { + GameProfile gameprofile = (GameProfile) iterator.next(); -+ UserCacheEntry usercacheentry = this.b(gameprofile.getId()); ++ UserCache.UserCacheEntry usercache_usercacheentry = this.b(gameprofile.getId()); + -+ if (usercacheentry != null) { -+ arraylist.add(usercacheentry); ++ if (usercache_usercacheentry != null) { ++ arraylist.add(usercache_usercacheentry); + } + } + + return arraylist; + } + -+} -diff --git a/src/main/java/net/minecraft/server/UserCacheEntry.java b/src/main/java/net/minecraft/server/UserCacheEntry.java -new file mode 100644 -index 0000000..50b8b3c ---- /dev/null -+++ b/src/main/java/net/minecraft/server/UserCacheEntry.java -@@ -0,0 +1,33 @@ -+package net.minecraft.server; ++ class UserCacheEntry { + -+import com.mojang.authlib.GameProfile; -+import java.util.Date; ++ private final GameProfile b; ++ private final Date c; + -+class UserCacheEntry { ++ private UserCacheEntry(GameProfile gameprofile, Date date) { ++ this.b = gameprofile; ++ this.c = date; ++ } + -+ private final GameProfile b; -+ private final Date c; -+ final UserCache a; ++ public GameProfile a() { ++ return this.b; ++ } + -+ private UserCacheEntry(UserCache usercache, GameProfile gameprofile, Date date) { -+ this.a = usercache; -+ this.b = gameprofile; -+ this.c = date; ++ public Date b() { ++ return this.c; ++ } ++ ++ UserCacheEntry(GameProfile gameprofile, Date date, Object object) { ++ this(gameprofile, date); ++ } + } + -+ public GameProfile a() { -+ return this.b; -+ } ++ class BanEntrySerializer implements JsonDeserializer, JsonSerializer { + -+ public Date b() { -+ return this.c; -+ } ++ private BanEntrySerializer() {} + -+ UserCacheEntry(UserCache usercache, GameProfile gameprofile, Date date, GameProfileLookup gameprofilelookup) { -+ this(usercache, gameprofile, date); -+ } ++ public JsonElement a(UserCache.UserCacheEntry usercache_usercacheentry, Type type, JsonSerializationContext jsonserializationcontext) { ++ JsonObject jsonobject = new JsonObject(); + -+ static Date a(UserCacheEntry usercacheentry) { -+ return usercacheentry.c; -+ } -+} -diff --git a/src/main/java/net/minecraft/server/WatchableObject.java b/src/main/java/net/minecraft/server/WatchableObject.java -new file mode 100644 -index 0000000..678aa91 ---- /dev/null -+++ b/src/main/java/net/minecraft/server/WatchableObject.java -@@ -0,0 +1,44 @@ -+package net.minecraft.server; ++ jsonobject.addProperty("name", usercache_usercacheentry.a().getName()); ++ UUID uuid = usercache_usercacheentry.a().getId(); + -+public class WatchableObject { ++ jsonobject.addProperty("uuid", uuid == null ? "" : uuid.toString()); ++ jsonobject.addProperty("expiresOn", UserCache.a.format(usercache_usercacheentry.b())); ++ return jsonobject; ++ } + -+ private final int a; -+ private final int b; -+ private Object c; -+ private boolean d; ++ public UserCache.UserCacheEntry a(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { ++ if (jsonelement.isJsonObject()) { ++ JsonObject jsonobject = jsonelement.getAsJsonObject(); ++ JsonElement jsonelement1 = jsonobject.get("name"); ++ JsonElement jsonelement2 = jsonobject.get("uuid"); ++ JsonElement jsonelement3 = jsonobject.get("expiresOn"); + -+ public WatchableObject(int i, int j, Object object) { -+ this.b = j; -+ this.c = object; -+ this.a = i; -+ this.d = true; -+ } ++ if (jsonelement1 != null && jsonelement2 != null) { ++ String s = jsonelement2.getAsString(); ++ String s1 = jsonelement1.getAsString(); ++ Date date = null; + -+ public int a() { -+ return this.b; -+ } ++ if (jsonelement3 != null) { ++ try { ++ date = UserCache.a.parse(jsonelement3.getAsString()); ++ } catch (ParseException parseexception) { ++ date = null; ++ } ++ } + -+ public void a(Object object) { -+ this.c = object; -+ } ++ if (s1 != null && s != null) { ++ UUID uuid; + -+ public Object b() { -+ return this.c; -+ } ++ try { ++ uuid = UUID.fromString(s); ++ } catch (Throwable throwable) { ++ return null; ++ } + -+ public int c() { -+ return this.a; -+ } ++ UserCache.UserCacheEntry usercache_usercacheentry = UserCache.this.new UserCacheEntry(new GameProfile(uuid, s1), date, null); + -+ public boolean d() { -+ return this.d; -+ } ++ return usercache_usercacheentry; ++ } else { ++ return null; ++ } ++ } else { ++ return null; ++ } ++ } else { ++ return null; ++ } ++ } + -+ public void a(boolean flag) { -+ this.d = flag; -+ } ++ public JsonElement serialize(UserCache.UserCacheEntry object, Type type, JsonSerializationContext jsonserializationcontext) { ++ return this.a((UserCache.UserCacheEntry) object, type, jsonserializationcontext); ++ } + -+ static boolean a(WatchableObject watchableobject, boolean flag) { -+ return watchableobject.d = flag; ++ public UserCache.UserCacheEntry deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException { ++ return this.a(jsonelement, type, jsondeserializationcontext); ++ } ++ ++ BanEntrySerializer(Object object) { ++ this(); ++ } + } +} diff --git a/src/main/java/net/minecraft/server/WorldGenForestTree.java b/src/main/java/net/minecraft/server/WorldGenForestTree.java new file mode 100644 -index 0000000..2653bd8 +index 0000000..ffbc47d --- /dev/null +++ b/src/main/java/net/minecraft/server/WorldGenForestTree.java -@@ -0,0 +1,166 @@ +@@ -0,0 +1,178 @@ +package net.minecraft.server; + +import java.util.Random; + +public class WorldGenForestTree extends WorldGenTreeAbstract { + ++ private static final IBlockData a = Blocks.LOG2.getBlockData().set(BlockLog2.VARIANT, BlockWood.EnumLogVariant.DARK_OAK); ++ private static final IBlockData b = Blocks.LEAVES2.getBlockData().set(BlockLeaves2.VARIANT, BlockWood.EnumLogVariant.DARK_OAK).set(BlockLeaves.CHECK_DECAY, Boolean.valueOf(false)); ++ + public WorldGenForestTree(boolean flag) { + super(flag); + } + + public boolean generate(World world, Random random, BlockPosition blockposition) { + int i = random.nextInt(3) + random.nextInt(2) + 6; -+ boolean flag = true; ++ int j = blockposition.getX(); ++ int k = blockposition.getY(); ++ int l = blockposition.getZ(); + -+ if (blockposition.getY() >= 1 && blockposition.getY() + i + 1 <= 256) { -+ int j; -+ int k; ++ if (k >= 1 && k + i + 1 < 256) { ++ BlockPosition blockposition1 = blockposition.down(); ++ Block block = world.getType(blockposition1).getBlock(); + -+ for (int l = blockposition.getY(); l <= blockposition.getY() + 1 + i; ++l) { -+ byte b0 = 1; -+ -+ if (l == blockposition.getY()) { -+ b0 = 0; -+ } -+ -+ if (l >= blockposition.getY() + 1 + i - 2) { -+ b0 = 2; -+ } -+ -+ for (j = blockposition.getX() - b0; j <= blockposition.getX() + b0 && flag; ++j) { -+ for (k = blockposition.getZ() - b0; k <= blockposition.getZ() + b0 && flag; ++k) { -+ if (l >= 0 && l < 256) { -+ if (!this.a(world.getType(new BlockPosition(j, l, k)).getBlock())) { -+ flag = false; -+ } -+ } else { -+ flag = false; -+ } -+ } -+ } -+ } -+ -+ if (!flag) { ++ if (block != Blocks.GRASS && block != Blocks.DIRT) { ++ return false; ++ } else if (!this.a(world, blockposition, i)) { + return false; + } else { -+ Block block = world.getType(blockposition.down()).getBlock(); ++ this.a(world, blockposition1); ++ this.a(world, blockposition1.east()); ++ this.a(world, blockposition1.south()); ++ this.a(world, blockposition1.south().east()); ++ EnumDirection enumdirection = EnumDirection.EnumDirectionLimit.HORIZONTAL.a(random); ++ int i1 = i - random.nextInt(4); ++ int j1 = 2 - random.nextInt(3); ++ int k1 = j; ++ int l1 = l; ++ int i2 = k + i - 1; + -+ if ((block == Blocks.GRASS || block == Blocks.DIRT) && blockposition.getY() < 256 - i - 1) { -+ this.a(world, blockposition.down()); -+ this.a(world, blockposition.a(1, -1, 0)); -+ this.a(world, blockposition.a(1, -1, 1)); -+ this.a(world, blockposition.a(0, -1, 1)); -+ EnumDirection enumdirection = EnumDirectionLimit.HORIZONTAL.a(random); ++ int j2; ++ int k2; + -+ j = i - random.nextInt(4); -+ k = 2 - random.nextInt(3); -+ int i1 = blockposition.getX(); -+ int j1 = blockposition.getZ(); -+ int k1 = 0; -+ -+ int l1; -+ int i2; -+ -+ for (l1 = 0; l1 < i; ++l1) { -+ i2 = blockposition.getY() + l1; -+ if (l1 >= j && k > 0) { -+ i1 += enumdirection.getAdjacentX(); -+ j1 += enumdirection.getAdjacentZ(); -+ --k; -+ } -+ -+ BlockPosition blockposition1 = new BlockPosition(i1, i2, j1); -+ Material material = world.getType(blockposition1).getBlock().getMaterial(); -+ -+ if (material == Material.AIR || material == Material.LEAVES) { -+ this.a(world, blockposition1, Blocks.LOG2, EnumLogVariant.DARK_OAK.a() - 4); -+ this.a(world, blockposition1.east(), Blocks.LOG2, EnumLogVariant.DARK_OAK.a() - 4); -+ this.a(world, blockposition1.south(), Blocks.LOG2, EnumLogVariant.DARK_OAK.a() - 4); -+ this.a(world, blockposition1.east().south(), Blocks.LOG2, EnumLogVariant.DARK_OAK.a() - 4); -+ k1 = i2; -+ } ++ for (j2 = 0; j2 < i; ++j2) { ++ if (j2 >= i1 && j1 > 0) { ++ k1 += enumdirection.getAdjacentX(); ++ l1 += enumdirection.getAdjacentZ(); ++ --j1; + } + -+ for (l1 = -2; l1 <= 0; ++l1) { -+ for (i2 = -2; i2 <= 0; ++i2) { -+ byte b1 = -1; ++ k2 = k + j2; ++ BlockPosition blockposition2 = new BlockPosition(k1, k2, l1); ++ Material material = world.getType(blockposition2).getBlock().getMaterial(); + -+ this.a(world, i1 + l1, k1 + b1, j1 + i2); -+ this.a(world, 1 + i1 - l1, k1 + b1, j1 + i2); -+ this.a(world, i1 + l1, k1 + b1, 1 + j1 - i2); -+ this.a(world, 1 + i1 - l1, k1 + b1, 1 + j1 - i2); -+ if ((l1 > -2 || i2 > -1) && (l1 != -1 || i2 != -2)) { -+ byte b2 = 1; -+ -+ this.a(world, i1 + l1, k1 + b2, j1 + i2); -+ this.a(world, 1 + i1 - l1, k1 + b2, j1 + i2); -+ this.a(world, i1 + l1, k1 + b2, 1 + j1 - i2); -+ this.a(world, 1 + i1 - l1, k1 + b2, 1 + j1 - i2); -+ } -+ } ++ if (material == Material.AIR || material == Material.LEAVES) { ++ this.b(world, blockposition2); ++ this.b(world, blockposition2.east()); ++ this.b(world, blockposition2.south()); ++ this.b(world, blockposition2.east().south()); + } -+ -+ if (random.nextBoolean()) { -+ this.a(world, i1, k1 + 2, j1); -+ this.a(world, i1 + 1, k1 + 2, j1); -+ this.a(world, i1 + 1, k1 + 2, j1 + 1); -+ this.a(world, i1, k1 + 2, j1 + 1); -+ } -+ -+ for (l1 = -3; l1 <= 4; ++l1) { -+ for (i2 = -3; i2 <= 4; ++i2) { -+ if ((l1 != -3 || i2 != -3) && (l1 != -3 || i2 != 4) && (l1 != 4 || i2 != -3) && (l1 != 4 || i2 != 4) && (Math.abs(l1) < 3 || Math.abs(i2) < 3)) { -+ this.a(world, i1 + l1, k1, j1 + i2); -+ } -+ } -+ } -+ -+ for (l1 = -1; l1 <= 2; ++l1) { -+ for (i2 = -1; i2 <= 2; ++i2) { -+ if ((l1 < 0 || l1 > 1 || i2 < 0 || i2 > 1) && random.nextInt(3) <= 0) { -+ int j2 = random.nextInt(3) + 2; -+ -+ int k2; -+ -+ for (k2 = 0; k2 < j2; ++k2) { -+ this.a(world, new BlockPosition(blockposition.getX() + l1, k1 - k2 - 1, blockposition.getZ() + i2), Blocks.LOG2, EnumLogVariant.DARK_OAK.a() - 4); -+ } -+ -+ int l2; -+ -+ for (k2 = -1; k2 <= 1; ++k2) { -+ for (l2 = -1; l2 <= 1; ++l2) { -+ this.a(world, i1 + l1 + k2, k1 - 0, j1 + i2 + l2); -+ } -+ } -+ -+ for (k2 = -2; k2 <= 2; ++k2) { -+ for (l2 = -2; l2 <= 2; ++l2) { -+ if (Math.abs(k2) != 2 || Math.abs(l2) != 2) { -+ this.a(world, i1 + l1 + k2, k1 - 1, j1 + i2 + l2); -+ } -+ } -+ } -+ } -+ } -+ } -+ -+ return true; -+ } else { -+ return false; + } ++ ++ for (j2 = -2; j2 <= 0; ++j2) { ++ for (k2 = -2; k2 <= 0; ++k2) { ++ byte b0 = -1; ++ ++ this.a(world, k1 + j2, i2 + b0, l1 + k2); ++ this.a(world, 1 + k1 - j2, i2 + b0, l1 + k2); ++ this.a(world, k1 + j2, i2 + b0, 1 + l1 - k2); ++ this.a(world, 1 + k1 - j2, i2 + b0, 1 + l1 - k2); ++ if ((j2 > -2 || k2 > -1) && (j2 != -1 || k2 != -2)) { ++ byte b1 = 1; ++ ++ this.a(world, k1 + j2, i2 + b1, l1 + k2); ++ this.a(world, 1 + k1 - j2, i2 + b1, l1 + k2); ++ this.a(world, k1 + j2, i2 + b1, 1 + l1 - k2); ++ this.a(world, 1 + k1 - j2, i2 + b1, 1 + l1 - k2); ++ } ++ } ++ } ++ ++ if (random.nextBoolean()) { ++ this.a(world, k1, i2 + 2, l1); ++ this.a(world, k1 + 1, i2 + 2, l1); ++ this.a(world, k1 + 1, i2 + 2, l1 + 1); ++ this.a(world, k1, i2 + 2, l1 + 1); ++ } ++ ++ for (j2 = -3; j2 <= 4; ++j2) { ++ for (k2 = -3; k2 <= 4; ++k2) { ++ if ((j2 != -3 || k2 != -3) && (j2 != -3 || k2 != 4) && (j2 != 4 || k2 != -3) && (j2 != 4 || k2 != 4) && (Math.abs(j2) < 3 || Math.abs(k2) < 3)) { ++ this.a(world, k1 + j2, i2, l1 + k2); ++ } ++ } ++ } ++ ++ for (j2 = -1; j2 <= 2; ++j2) { ++ for (k2 = -1; k2 <= 2; ++k2) { ++ if ((j2 < 0 || j2 > 1 || k2 < 0 || k2 > 1) && random.nextInt(3) <= 0) { ++ int l2 = random.nextInt(3) + 2; ++ ++ int i3; ++ ++ for (i3 = 0; i3 < l2; ++i3) { ++ this.b(world, new BlockPosition(j + j2, i2 - i3 - 1, l + k2)); ++ } ++ ++ int j3; ++ ++ for (i3 = -1; i3 <= 1; ++i3) { ++ for (j3 = -1; j3 <= 1; ++j3) { ++ this.a(world, k1 + j2 + i3, i2, l1 + k2 + j3); ++ } ++ } ++ ++ for (i3 = -2; i3 <= 2; ++i3) { ++ for (j3 = -2; j3 <= 2; ++j3) { ++ if (Math.abs(i3) != 2 || Math.abs(j3) != 2) { ++ this.a(world, k1 + j2 + i3, i2 - 1, l1 + k2 + j3); ++ } ++ } ++ } ++ } ++ } ++ } ++ ++ return true; + } + } else { + return false; + } + } + ++ private boolean a(World world, BlockPosition blockposition, int i) { ++ int j = blockposition.getX(); ++ int k = blockposition.getY(); ++ int l = blockposition.getZ(); ++ BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); ++ ++ for (int i1 = 0; i1 <= i + 1; ++i1) { ++ byte b0 = 1; ++ ++ if (i1 == 0) { ++ b0 = 0; ++ } ++ ++ if (i1 >= i - 1) { ++ b0 = 2; ++ } ++ ++ for (int j1 = -b0; j1 <= b0; ++j1) { ++ for (int k1 = -b0; k1 <= b0; ++k1) { ++ if (!this.a(world.getType(blockposition_mutableblockposition.c(j + j1, k + i1, l + k1)).getBlock())) { ++ return false; ++ } ++ } ++ } ++ } ++ ++ return true; ++ } ++ ++ private void b(World world, BlockPosition blockposition) { ++ if (this.a(world.getType(blockposition).getBlock())) { ++ this.a(world, blockposition, WorldGenForestTree.a); ++ } ++ ++ } ++ + private void a(World world, int i, int j, int k) { -+ Block block = world.getType(new BlockPosition(i, j, k)).getBlock(); ++ BlockPosition blockposition = new BlockPosition(i, j, k); ++ Block block = world.getType(blockposition).getBlock(); + + if (block.getMaterial() == Material.AIR) { -+ this.a(world, new BlockPosition(i, j, k), Blocks.LEAVES2, 1); ++ this.a(world, blockposition, WorldGenForestTree.b); + } + + } +} diff --git a/src/main/java/net/minecraft/server/WorldGenLargeFeature.java b/src/main/java/net/minecraft/server/WorldGenLargeFeature.java new file mode 100644 -index 0000000..02e6208 +index 0000000..b2f87cc --- /dev/null +++ b/src/main/java/net/minecraft/server/WorldGenLargeFeature.java -@@ -0,0 +1,104 @@ +@@ -0,0 +1,131 @@ +package net.minecraft.server; + +import com.google.common.collect.Lists; @@ -5130,8 +4817,8 @@ index 0000000..02e6208 + +public class WorldGenLargeFeature extends StructureGenerator { + -+ private static final List d = Arrays.asList(new BiomeBase[] { BiomeBase.DESERT, BiomeBase.DESERT_HILLS, BiomeBase.JUNGLE, BiomeBase.JUNGLE_HILLS, BiomeBase.SWAMPLAND}); -+ private List f; ++ private static final List d = Arrays.asList(new BiomeBase[] { BiomeBase.DESERT, BiomeBase.DESERT_HILLS, BiomeBase.JUNGLE, BiomeBase.JUNGLE_HILLS, BiomeBase.SWAMPLAND}); ++ private List f; + private int g; + private int h; + @@ -5139,10 +4826,10 @@ index 0000000..02e6208 + this.f = Lists.newArrayList(); + this.g = 32; + this.h = 8; -+ this.f.add(new BiomeMeta(EntityWitch.class, 1, 1, 1)); ++ this.f.add(new BiomeBase.BiomeMeta(EntityWitch.class, 1, 1, 1)); + } + -+ public WorldGenLargeFeature(Map map) { ++ public WorldGenLargeFeature(Map map) { + this(); + Iterator iterator = map.entrySet().iterator(); + @@ -5202,29 +4889,56 @@ index 0000000..02e6208 + } + + protected StructureStart b(int i, int j) { -+ return new WorldGenLargeFeatureStart(this.c, this.b, i, j); ++ return new WorldGenLargeFeature.WorldGenLargeFeatureStart(this.c, this.b, i, j); + } + + public boolean a(BlockPosition blockposition) { + StructureStart structurestart = this.c(blockposition); + -+ if (structurestart != null && structurestart instanceof WorldGenLargeFeatureStart && !structurestart.a.isEmpty()) { ++ if (structurestart != null && structurestart instanceof WorldGenLargeFeature.WorldGenLargeFeatureStart && !structurestart.a.isEmpty()) { + StructurePiece structurepiece = (StructurePiece) structurestart.a.getFirst(); + -+ return structurepiece instanceof WorldGenWitchHut; ++ return structurepiece instanceof WorldGenRegistration.WorldGenWitchHut; + } else { + return false; + } + } + -+ public List b() { ++ public List b() { + return this.f; + } + ++ public static class WorldGenLargeFeatureStart extends StructureStart { ++ ++ public WorldGenLargeFeatureStart() {} ++ ++ public WorldGenLargeFeatureStart(World world, Random random, int i, int j) { ++ super(i, j); ++ BiomeBase biomebase = world.getBiome(new BlockPosition(i * 16 + 8, 0, j * 16 + 8)); ++ ++ if (biomebase != BiomeBase.JUNGLE && biomebase != BiomeBase.JUNGLE_HILLS) { ++ if (biomebase == BiomeBase.SWAMPLAND) { ++ WorldGenRegistration.WorldGenWitchHut worldgenregistration_worldgenwitchhut = new WorldGenRegistration.WorldGenWitchHut(random, i * 16, j * 16); ++ ++ this.a.add(worldgenregistration_worldgenwitchhut); ++ } else if (biomebase == BiomeBase.DESERT || biomebase == BiomeBase.DESERT_HILLS) { ++ WorldGenRegistration.WorldGenPyramidPiece worldgenregistration_worldgenpyramidpiece = new WorldGenRegistration.WorldGenPyramidPiece(random, i * 16, j * 16); ++ ++ this.a.add(worldgenregistration_worldgenpyramidpiece); ++ } ++ } else { ++ WorldGenRegistration.WorldGenJungleTemple worldgenregistration_worldgenjungletemple = new WorldGenRegistration.WorldGenJungleTemple(random, i * 16, j * 16); ++ ++ this.a.add(worldgenregistration_worldgenjungletemple); ++ } ++ ++ this.c(); ++ } ++ } +} diff --git a/src/main/java/net/minecraft/server/WorldGenPackedIce2.java b/src/main/java/net/minecraft/server/WorldGenPackedIce2.java new file mode 100644 -index 0000000..38e9602 +index 0000000..dcd085a --- /dev/null +++ b/src/main/java/net/minecraft/server/WorldGenPackedIce2.java @@ -0,0 +1,100 @@ @@ -5270,13 +4984,13 @@ index 0000000..38e9602 + Block block = world.getType(blockposition.a(i1, k, j1)).getBlock(); + + if (block.getMaterial() == Material.AIR || block == Blocks.DIRT || block == Blocks.SNOW || block == Blocks.ICE) { -+ this.a(world, blockposition.a(i1, k, j1), Blocks.PACKED_ICE); ++ this.a(world, blockposition.a(i1, k, j1), Blocks.PACKED_ICE.getBlockData()); + } + + if (k != 0 && l > 1) { + block = world.getType(blockposition.a(i1, -k, j1)).getBlock(); + if (block.getMaterial() == Material.AIR || block == Blocks.DIRT || block == Blocks.SNOW || block == Blocks.ICE) { -+ this.a(world, blockposition.a(i1, -k, j1), Blocks.PACKED_ICE); ++ this.a(world, blockposition.a(i1, -k, j1), Blocks.PACKED_ICE.getBlockData()); + } + } + } @@ -5307,7 +5021,7 @@ index 0000000..38e9602 + Block block1 = world.getType(blockposition1).getBlock(); + + if (block1.getMaterial() == Material.AIR || block1 == Blocks.DIRT || block1 == Blocks.SNOW || block1 == Blocks.ICE || block1 == Blocks.PACKED_ICE) { -+ this.a(world, blockposition1, Blocks.PACKED_ICE); ++ this.a(world, blockposition1, Blocks.PACKED_ICE.getBlockData()); + blockposition1 = blockposition1.down(); + --l1; + if (l1 <= 0) { @@ -5330,10 +5044,10 @@ index 0000000..38e9602 +} diff --git a/src/main/java/net/minecraft/server/WorldGenVillage.java b/src/main/java/net/minecraft/server/WorldGenVillage.java new file mode 100644 -index 0000000..375de85 +index 0000000..411f2dc --- /dev/null +++ b/src/main/java/net/minecraft/server/WorldGenVillage.java -@@ -0,0 +1,77 @@ +@@ -0,0 +1,138 @@ +package net.minecraft.server; + +import java.util.Arrays; @@ -5345,7 +5059,7 @@ index 0000000..375de85 + +public class WorldGenVillage extends StructureGenerator { + -+ public static final List d = Arrays.asList(new BiomeBase[] { BiomeBase.PLAINS, BiomeBase.DESERT, BiomeBase.SAVANNA}); ++ public static final List d = Arrays.asList(new BiomeBase[] { BiomeBase.PLAINS, BiomeBase.DESERT, BiomeBase.SAVANNA}); + private int f; + private int g; + private int h; @@ -5355,7 +5069,7 @@ index 0000000..375de85 + this.h = 8; + } + -+ public WorldGenVillage(Map map) { ++ public WorldGenVillage(Map map) { + this(); + Iterator iterator = map.entrySet().iterator(); + @@ -5407,9 +5121,70 @@ index 0000000..375de85 + } + + protected StructureStart b(int i, int j) { -+ return new WorldGenVillageStart(this.c, this.b, i, j, this.f); ++ return new WorldGenVillage.WorldGenVillageStart(this.c, this.b, i, j, this.f); + } + ++ public static class WorldGenVillageStart extends StructureStart { ++ ++ private boolean c; ++ ++ public WorldGenVillageStart() {} ++ ++ public WorldGenVillageStart(World world, Random random, int i, int j, int k) { ++ super(i, j); ++ List list = WorldGenVillagePieces.a(random, k); ++ WorldGenVillagePieces.WorldGenVillageStartPiece worldgenvillagepieces_worldgenvillagestartpiece = new WorldGenVillagePieces.WorldGenVillageStartPiece(world.getWorldChunkManager(), 0, random, (i << 4) + 2, (j << 4) + 2, list, k); ++ ++ this.a.add(worldgenvillagepieces_worldgenvillagestartpiece); ++ worldgenvillagepieces_worldgenvillagestartpiece.a((StructurePiece) worldgenvillagepieces_worldgenvillagestartpiece, (List) this.a, random); ++ List list1 = worldgenvillagepieces_worldgenvillagestartpiece.g; ++ List list2 = worldgenvillagepieces_worldgenvillagestartpiece.f; ++ ++ int l; ++ ++ while (!list1.isEmpty() || !list2.isEmpty()) { ++ StructurePiece structurepiece; ++ ++ if (list1.isEmpty()) { ++ l = random.nextInt(list2.size()); ++ structurepiece = (StructurePiece) list2.remove(l); ++ structurepiece.a((StructurePiece) worldgenvillagepieces_worldgenvillagestartpiece, (List) this.a, random); ++ } else { ++ l = random.nextInt(list1.size()); ++ structurepiece = (StructurePiece) list1.remove(l); ++ structurepiece.a((StructurePiece) worldgenvillagepieces_worldgenvillagestartpiece, (List) this.a, random); ++ } ++ } ++ ++ this.c(); ++ l = 0; ++ Iterator iterator = this.a.iterator(); ++ ++ while (iterator.hasNext()) { ++ StructurePiece structurepiece1 = (StructurePiece) iterator.next(); ++ ++ if (!(structurepiece1 instanceof WorldGenVillagePieces.WorldGenVillageRoadPiece)) { ++ ++l; ++ } ++ } ++ ++ this.c = l > 2; ++ } ++ ++ public boolean d() { ++ return this.c; ++ } ++ ++ public void a(NBTTagCompound nbttagcompound) { ++ super.a(nbttagcompound); ++ nbttagcompound.setBoolean("Valid", this.c); ++ } ++ ++ public void b(NBTTagCompound nbttagcompound) { ++ super.b(nbttagcompound); ++ this.c = nbttagcompound.getBoolean("Valid"); ++ } ++ } +} diff --git a/src/main/java/org/spigotmc/SneakyThrow.java b/src/main/java/org/spigotmc/SneakyThrow.java new file mode 100644 diff --git a/CraftBukkit-Patches/0003-Skeleton-API-Implementations.patch b/CraftBukkit-Patches/0003-Skeleton-API-Implementations.patch index ff73261..cc20823 100644 --- a/CraftBukkit-Patches/0003-Skeleton-API-Implementations.patch +++ b/CraftBukkit-Patches/0003-Skeleton-API-Implementations.patch @@ -1,4 +1,4 @@ -From af4dd992f13829f1991cfb775e0726ba5fe49d09 Mon Sep 17 00:00:00 2001 +From e31c5dbce193a2d4aaedd1094e2d37821bdeba7b Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 2 Jun 2013 15:10:56 +1000 Subject: [PATCH] Skeleton API Implementations @@ -6,10 +6,10 @@ Subject: [PATCH] Skeleton API Implementations This contains the basic, empty implementations for some Spigot-API extensions. They are included early in the patching progress so that compilation will still succeed midway despite the APIs only being provided by subsequent patches. diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 1f936b0..cd304ac 100644 +index 629e6b8..4b3fcac 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1628,4 +1628,14 @@ public final class CraftServer implements Server { +@@ -1642,4 +1642,14 @@ public final class CraftServer implements Server { public UnsafeValues getUnsafe() { return CraftMagicNumbers.INSTANCE; } @@ -25,10 +25,10 @@ index 1f936b0..cd304ac 100644 + } } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index dac2ad0..5ef7d97 100644 +index 621c89f..20357f9 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -1345,4 +1345,14 @@ public class CraftWorld implements World { +@@ -1353,4 +1353,14 @@ public class CraftWorld implements World { cps.queueUnload(chunk.locX, chunk.locZ); } } @@ -104,7 +104,7 @@ index 64e346d..243e8e5 100644 + // Spigot end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 6361b44..fed7b4d 100644 +index 05923b4..058141d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1313,4 +1313,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -161,10 +161,10 @@ index d3ae91b..0b71b53 100644 + // Spigot end } diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java -index c4db462..fa6e826 100644 +index ce42b30..342d4af 100644 --- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java +++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java -@@ -214,5 +214,26 @@ final class CraftTeam extends CraftScoreboardComponent implements Team { +@@ -212,5 +212,26 @@ final class CraftTeam extends CraftScoreboardComponent implements Team { return !(this.team != other.team && (this.team == null || !this.team.equals(other.team))); } diff --git a/CraftBukkit-Patches/0004-Obfuscation-Helpers.patch b/CraftBukkit-Patches/0004-Obfuscation-Helpers.patch index 57c15b0..8f9b4f6 100644 --- a/CraftBukkit-Patches/0004-Obfuscation-Helpers.patch +++ b/CraftBukkit-Patches/0004-Obfuscation-Helpers.patch @@ -1,4 +1,4 @@ -From 3985866c3e05358f49461327fa3d04b610eaf494 Mon Sep 17 00:00:00 2001 +From a5d8ed7311a8a717390419672a8b7b4165adad01 Mon Sep 17 00:00:00 2001 From: md_5 Date: Mon, 14 Apr 2014 10:38:04 +1000 Subject: [PATCH] Obfuscation Helpers @@ -6,10 +6,10 @@ Subject: [PATCH] Obfuscation Helpers Provides several friendly named methods which map to a obfuscated method. Obfuscated methods which are used frequently should be added to this file to ease with updates to new Minecraft versions. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 4bd0c85..0a707eb 100644 +index 4219e7b..486e652 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1309,6 +1309,12 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -1288,6 +1288,12 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs } @@ -19,7 +19,7 @@ index 4bd0c85..0a707eb 100644 + return this.q; + } + // Spigot End - public ServerConnection ao() { + public ServerConnection ap() { return this.q; } -- diff --git a/CraftBukkit-Patches/0005-Spigot-Configuration.patch b/CraftBukkit-Patches/0005-Spigot-Configuration.patch index 0393332..dcab6ce 100644 --- a/CraftBukkit-Patches/0005-Spigot-Configuration.patch +++ b/CraftBukkit-Patches/0005-Spigot-Configuration.patch @@ -1,4 +1,4 @@ -From 6c38d387d270dea5a06c8e784e2831e65c500ac6 Mon Sep 17 00:00:00 2001 +From 0b8be4fd43a70c45431189ab67cc200fa0669586 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 7 Jul 2013 09:32:53 +1000 Subject: [PATCH] Spigot Configuration @@ -6,10 +6,10 @@ Subject: [PATCH] Spigot Configuration Provides the basic infrastructure to load and save the Spigot configuration file, spigot.yml diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index 29c0a34..424b71d 100644 +index d57a796..8bc6ad6 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java -@@ -116,6 +116,11 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -163,6 +163,11 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer if (this.Q() < 0) { this.setPort(this.propertyManager.getInt("server-port", 25565)); } @@ -21,7 +21,7 @@ index 29c0a34..424b71d 100644 DedicatedServer.LOGGER.info("Generating keypair"); this.a(MinecraftEncryption.b()); -@@ -130,7 +135,11 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -177,7 +182,11 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer return false; } @@ -35,10 +35,10 @@ index 29c0a34..424b71d 100644 if (!this.getOnlineMode()) { DedicatedServer.LOGGER.warn("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!"); diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 8dde097..3c1ba5b 100644 +index 5c2e218..345ede9 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -98,6 +98,7 @@ public abstract class World implements IBlockAccess { +@@ -99,6 +99,7 @@ public abstract class World implements IBlockAccess { public long ticksPerMonsterSpawns; public boolean populating; private int tickPosition; @@ -46,7 +46,7 @@ index 8dde097..3c1ba5b 100644 public CraftWorld getWorld() { return this.world; -@@ -112,6 +113,7 @@ public abstract class World implements IBlockAccess { +@@ -113,6 +114,7 @@ public abstract class World implements IBlockAccess { } protected World(IDataManager idatamanager, WorldData worlddata, WorldProvider worldprovider, MethodProfiler methodprofiler, boolean flag, ChunkGenerator gen, org.bukkit.World.Environment env) { @@ -55,7 +55,7 @@ index 8dde097..3c1ba5b 100644 this.world = new CraftWorld((WorldServer) this, gen, env); this.ticksPerAnimalSpawns = this.getServer().getTicksPerAnimalSpawns(); // CraftBukkit diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index cd304ac..09c723f 100644 +index 4b3fcac..2aceeb4 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -247,8 +247,10 @@ public final class CraftServer implements Server { diff --git a/CraftBukkit-Patches/0006-Better-Chunk-Tick-Selection.patch b/CraftBukkit-Patches/0006-Better-Chunk-Tick-Selection.patch index 4dd5653..6f4f931 100644 --- a/CraftBukkit-Patches/0006-Better-Chunk-Tick-Selection.patch +++ b/CraftBukkit-Patches/0006-Better-Chunk-Tick-Selection.patch @@ -1,4 +1,4 @@ -From c013f6381cd2c734afb9b84301b85cbeedad8315 Mon Sep 17 00:00:00 2001 +From 47268e1d09430b441ffbd123d6cab9b2da8c9bda 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 @@ -6,19 +6,19 @@ Subject: [PATCH] Better Chunk Tick Selection An optimized chunk ticking algorithm which better selects chunks around players which are active on the server. diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 3c1ba5b..6d8a5e8 100644 +index 345ede9..bed457a 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -64,7 +64,7 @@ public abstract class World implements IBlockAccess { - public Scoreboard scoreboard = new Scoreboard(); - public final boolean isStatic; +@@ -65,7 +65,7 @@ public abstract class World implements IBlockAccess { + public Scoreboard scoreboard = new Scoreboard(); // CraftBukkit - public + public final boolean isClientSide; // CraftBukkit - longhashset - protected LongHashSet chunkTickList = new LongHashSet(); + // protected LongHashSet chunkTickList = new LongHashSet(); // Spigot - private int K; - public boolean allowMonsters; - public boolean allowAnimals; -@@ -98,6 +98,31 @@ public abstract class World implements IBlockAccess { + private int L; + public boolean allowMonsters; // CraftBukkit - public + public boolean allowAnimals; // CraftBukkit - public +@@ -99,6 +99,31 @@ public abstract class World implements IBlockAccess { public long ticksPerMonsterSpawns; public boolean populating; private int tickPosition; @@ -50,7 +50,7 @@ index 3c1ba5b..6d8a5e8 100644 public final org.spigotmc.SpigotWorldConfig spigotConfig; // Spigot public CraftWorld getWorld() { -@@ -119,6 +144,11 @@ public abstract class World implements IBlockAccess { +@@ -120,6 +145,12 @@ public abstract class World implements IBlockAccess { this.ticksPerAnimalSpawns = this.getServer().getTicksPerAnimalSpawns(); // CraftBukkit this.ticksPerMonsterSpawns = this.getServer().getTicksPerMonsterSpawns(); // CraftBukkit // CraftBukkit end @@ -59,10 +59,11 @@ index 3c1ba5b..6d8a5e8 100644 + this.chunkTickList = new gnu.trove.map.hash.TLongShortHashMap( spigotConfig.chunksPerTick * 5, 0.7f, Long.MIN_VALUE, Short.MIN_VALUE ); + this.chunkTickList.setAutoCompactionFactor( 0 ); + // Spigot end - - this.K = this.random.nextInt(12000); ++ + this.L = this.random.nextInt(12000); this.allowMonsters = true; -@@ -1892,17 +1922,44 @@ public abstract class World implements IBlockAccess { + this.allowAnimals = true; +@@ -1945,17 +1976,44 @@ public abstract class World implements IBlockAccess { int k; int l; @@ -111,7 +112,7 @@ index 3c1ba5b..6d8a5e8 100644 this.methodProfiler.b(); diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 80c464a..b81b1ff 100644 +index 32bf7ff..383a491 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -343,12 +343,15 @@ public class WorldServer extends World implements IAsyncTaskHandler { @@ -157,8 +158,8 @@ index 80c464a..b81b1ff 100644 + // ChunkCoordIntPair chunkcoordintpair = (ChunkCoordIntPair) iterator.next(); int k = chunkX * 16; int l = chunkZ * 16; - -@@ -457,6 +472,12 @@ public class WorldServer extends World implements IAsyncTaskHandler { + +@@ -456,6 +471,12 @@ public class WorldServer extends World implements IAsyncTaskHandler { } } diff --git a/CraftBukkit-Patches/0007-Crop-Growth-Rates.patch b/CraftBukkit-Patches/0007-Crop-Growth-Rates.patch index e7b7376..8fd4994 100644 --- a/CraftBukkit-Patches/0007-Crop-Growth-Rates.patch +++ b/CraftBukkit-Patches/0007-Crop-Growth-Rates.patch @@ -1,4 +1,4 @@ -From 2543375c589c3493a9016a245ffa1b13395296fc Mon Sep 17 00:00:00 2001 +From b018b675a420b7150b58a336044582a1ce034ba6 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 21 Jun 2013 17:17:20 +1000 Subject: [PATCH] Crop Growth Rates @@ -6,10 +6,10 @@ Subject: [PATCH] Crop Growth Rates Allows configuring the growth rates of crops as a percentage of their normal growth rate. diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java -index 59d03ce..12e2b79 100644 +index 4923f8b..6b02059 100644 --- a/src/main/java/net/minecraft/server/Block.java +++ b/src/main/java/net/minecraft/server/Block.java -@@ -927,4 +927,16 @@ public class Block { +@@ -1009,4 +1009,16 @@ public class Block { return 0; } // CraftBukkit end @@ -27,7 +27,7 @@ index 59d03ce..12e2b79 100644 + // Spigot end } diff --git a/src/main/java/net/minecraft/server/BlockCactus.java b/src/main/java/net/minecraft/server/BlockCactus.java -index 6277752..d9f6e0b 100644 +index 7f5e5ca..488e5c2 100644 --- a/src/main/java/net/minecraft/server/BlockCactus.java +++ b/src/main/java/net/minecraft/server/BlockCactus.java @@ -29,7 +29,7 @@ public class BlockCactus extends Block { @@ -40,7 +40,7 @@ index 6277752..d9f6e0b 100644 IBlockData iblockdata1 = iblockdata.set(BlockCactus.AGE, Integer.valueOf(0)); diff --git a/src/main/java/net/minecraft/server/BlockCrops.java b/src/main/java/net/minecraft/server/BlockCrops.java -index 2ce2e34..d61251f 100644 +index e3e898e..b91b220 100644 --- a/src/main/java/net/minecraft/server/BlockCrops.java +++ b/src/main/java/net/minecraft/server/BlockCrops.java @@ -32,8 +32,7 @@ public class BlockCrops extends BlockPlant implements IBlockFragilePlantElement @@ -51,10 +51,10 @@ index 2ce2e34..d61251f 100644 - // CraftBukkit start + if (random.nextInt((int) (world.growthOdds / world.spigotConfig.wheatModifier * (25.0F / f)) + 1) == 0) { // Spigot // CraftBukkit start IBlockData data = iblockdata.set(AGE, Integer.valueOf(i + 1)); - CraftEventFactory.handleBlockGrowEvent(world, blockposition.getX(), blockposition.getY(), blockposition.getZ(), this, toLegacyData(data)); + CraftEventFactory.handleBlockGrowEvent(world, blockposition.getX(), blockposition.getY(), blockposition.getZ(), this, toLegacyData(data)); // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/BlockGrass.java b/src/main/java/net/minecraft/server/BlockGrass.java -index fc0e540..09cdd8a 100644 +index 147fb1f..844ad30 100644 --- a/src/main/java/net/minecraft/server/BlockGrass.java +++ b/src/main/java/net/minecraft/server/BlockGrass.java @@ -45,7 +45,7 @@ public class BlockGrass extends Block implements IBlockFragilePlantElement { @@ -67,7 +67,7 @@ index fc0e540..09cdd8a 100644 Block block = world.getType(blockposition1.up()).getBlock(); IBlockData iblockdata1 = world.getType(blockposition1); diff --git a/src/main/java/net/minecraft/server/BlockMushroom.java b/src/main/java/net/minecraft/server/BlockMushroom.java -index f2944be..decefa9 100644 +index 160a063..7cf7a08 100644 --- a/src/main/java/net/minecraft/server/BlockMushroom.java +++ b/src/main/java/net/minecraft/server/BlockMushroom.java @@ -20,7 +20,7 @@ public class BlockMushroom extends BlockPlant implements IBlockFragilePlantEleme @@ -80,7 +80,7 @@ index f2944be..decefa9 100644 boolean flag = true; Iterator iterator = BlockPosition.b(blockposition.a(-4, -1, -4), blockposition.a(4, 1, 4)).iterator(); diff --git a/src/main/java/net/minecraft/server/BlockMycel.java b/src/main/java/net/minecraft/server/BlockMycel.java -index 8f792e4..cb383a5 100644 +index 70405d5..d2bd4dd 100644 --- a/src/main/java/net/minecraft/server/BlockMycel.java +++ b/src/main/java/net/minecraft/server/BlockMycel.java @@ -44,7 +44,7 @@ public class BlockMycel extends Block { @@ -93,7 +93,7 @@ index 8f792e4..cb383a5 100644 IBlockData iblockdata1 = world.getType(blockposition1); Block block = world.getType(blockposition1.up()).getBlock(); diff --git a/src/main/java/net/minecraft/server/BlockReed.java b/src/main/java/net/minecraft/server/BlockReed.java -index f453c36..27b7f81 100644 +index fae75fa..d00067d 100644 --- a/src/main/java/net/minecraft/server/BlockReed.java +++ b/src/main/java/net/minecraft/server/BlockReed.java @@ -28,7 +28,7 @@ public class BlockReed extends Block { @@ -106,12 +106,12 @@ index f453c36..27b7f81 100644 // world.setTypeUpdate(blockposition.up(), this.getBlockData()); // CraftBukkit BlockPosition upPos = blockposition.up(); diff --git a/src/main/java/net/minecraft/server/BlockSapling.java b/src/main/java/net/minecraft/server/BlockSapling.java -index ff4f576..39c0cba 100644 +index a2667d9..45fbf5c 100644 --- a/src/main/java/net/minecraft/server/BlockSapling.java +++ b/src/main/java/net/minecraft/server/BlockSapling.java -@@ -28,7 +28,7 @@ public class BlockSapling extends BlockPlant implements IBlockFragilePlantElemen +@@ -32,7 +32,7 @@ public class BlockSapling extends BlockPlant implements IBlockFragilePlantElemen public void b(World world, BlockPosition blockposition, IBlockData iblockdata, Random random) { - if (!world.isStatic) { + if (!world.isClientSide) { super.b(world, blockposition, iblockdata, random); - if (world.getLightLevel(blockposition.up()) >= 9 && random.nextInt(7) == 0) { + if (world.getLightLevel(blockposition.up()) >= 9 && (random.nextInt(Math.max(2, (int) ((world.growthOdds / world.spigotConfig.saplingModifier * 7) + 0.5F))) == 0)) { // Spigot) { @@ -119,10 +119,10 @@ index ff4f576..39c0cba 100644 world.captureTreeGeneration = true; // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/BlockStem.java b/src/main/java/net/minecraft/server/BlockStem.java -index e4c65ff..dba443a 100644 +index 2ff1a6b..2618c40 100644 --- a/src/main/java/net/minecraft/server/BlockStem.java +++ b/src/main/java/net/minecraft/server/BlockStem.java -@@ -47,7 +47,7 @@ public class BlockStem extends BlockPlant implements IBlockFragilePlantElement { +@@ -55,7 +55,7 @@ public class BlockStem extends BlockPlant implements IBlockFragilePlantElement { if (world.getLightLevel(blockposition.up()) >= 9) { float f = BlockCrops.a((Block) this, world, blockposition); diff --git a/CraftBukkit-Patches/0008-More-Efficient-Chunk-Save-Queue.patch b/CraftBukkit-Patches/0008-More-Efficient-Chunk-Save-Queue.patch index b9163c2..79c7c87 100644 --- a/CraftBukkit-Patches/0008-More-Efficient-Chunk-Save-Queue.patch +++ b/CraftBukkit-Patches/0008-More-Efficient-Chunk-Save-Queue.patch @@ -1,4 +1,4 @@ -From 61c9eb61268478e85737ae6fc1c51fb5a6c659d1 Mon Sep 17 00:00:00 2001 +From a343b092ffaac6e336eef36fac78bb6ad4962d1c Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 11 Jun 2013 12:09:45 +1000 Subject: [PATCH] More Efficient Chunk Save Queue @@ -6,24 +6,24 @@ Subject: [PATCH] More Efficient Chunk Save Queue Optimizes the data structures behind the chunk save queue into ones more suitable for the type of data and access which they are used for. diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java -index 527ab42..33bb889 100644 +index 044a09d..b7d09a9 100644 --- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java +++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java -@@ -15,8 +15,11 @@ import org.apache.logging.log4j.Logger; +@@ -16,8 +16,11 @@ import org.apache.logging.log4j.Logger; public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { private static final Logger a = LogManager.getLogger(); -- private List b = Lists.newArrayList(); -- private Set c = Sets.newHashSet(); +- private List b = Lists.newArrayList(); +- private Set c = Sets.newHashSet(); + // Spigot start + private java.util.LinkedHashMap pendingSaves = new java.util.LinkedHashMap(); -+ // private List b = Lists.newArrayList(); -+ // private Set c = Sets.newHashSet(); ++ // private List b = Lists.newArrayList(); ++ // private Set c = Sets.newHashSet(); + // Spigot end private Object d = new Object(); private final File e; -@@ -29,13 +32,11 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { +@@ -30,13 +33,11 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(i, j); synchronized (this.d) { @@ -42,14 +42,14 @@ index 527ab42..33bb889 100644 } return RegionFileCache.a(this.e, i, j).chunkExists(i & 31, j & 31); -@@ -62,14 +63,12 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { +@@ -63,14 +64,12 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { Object object = this.d; synchronized (this.d) { - if (this.c.contains(chunkcoordintpair)) { - for (int k = 0; k < this.b.size(); ++k) { -- if (((PendingChunkToSave) this.b.get(k)).a.equals(chunkcoordintpair)) { -- nbttagcompound = ((PendingChunkToSave) this.b.get(k)).b; +- if (((ChunkRegionLoader.PendingChunkToSave) this.b.get(k)).a.equals(chunkcoordintpair)) { +- nbttagcompound = ((ChunkRegionLoader.PendingChunkToSave) this.b.get(k)).b; - break; - } - } @@ -62,14 +62,14 @@ index 527ab42..33bb889 100644 } if (nbttagcompound == null) { -@@ -150,17 +149,14 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { +@@ -149,17 +148,14 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { Object object = this.d; synchronized (this.d) { - if (this.c.contains(chunkcoordintpair)) { - for (int i = 0; i < this.b.size(); ++i) { -- if (((PendingChunkToSave) this.b.get(i)).a.equals(chunkcoordintpair)) { -- this.b.set(i, new PendingChunkToSave(chunkcoordintpair, nbttagcompound)); +- if (((ChunkRegionLoader.PendingChunkToSave) this.b.get(i)).a.equals(chunkcoordintpair)) { +- this.b.set(i, new ChunkRegionLoader.PendingChunkToSave(chunkcoordintpair, nbttagcompound)); - return; - } - } @@ -78,15 +78,15 @@ index 527ab42..33bb889 100644 + return; } -- this.b.add(new PendingChunkToSave(chunkcoordintpair, nbttagcompound)); +- this.b.add(new ChunkRegionLoader.PendingChunkToSave(chunkcoordintpair, nbttagcompound)); - this.c.add(chunkcoordintpair); -+ // this.b.add(new PendingChunkToSave(chunkcoordintpair, nbttagcompound)); ++ // this.b.add(new ChunkRegionLoader.PendingChunkToSave(chunkcoordintpair, nbttagcompound)); + // this.c.add(chunkcoordintpair); + // Spigot end FileIOThread.a().a(this); } } -@@ -170,12 +166,14 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { +@@ -169,12 +165,14 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { Object object = this.d; synchronized (this.d) { @@ -96,14 +96,14 @@ index 527ab42..33bb889 100644 return false; } -- pendingchunktosave = (PendingChunkToSave) this.b.remove(0); -- this.c.remove(pendingchunktosave.a); -+ pendingchunktosave = this.pendingSaves.values().iterator().next(); -+ this.pendingSaves.remove(pendingchunktosave.a); +- chunkregionloader_pendingchunktosave = (ChunkRegionLoader.PendingChunkToSave) this.b.remove(0); +- this.c.remove(chunkregionloader_pendingchunktosave.a); ++ chunkregionloader_pendingchunktosave = this.pendingSaves.values().iterator().next(); ++ this.pendingSaves.remove(chunkregionloader_pendingchunktosave.a); + // Spigot end } - if (pendingchunktosave != null) { + if (chunkregionloader_pendingchunktosave != null) { -- 2.1.0 diff --git a/CraftBukkit-Patches/0009-Merge-tweaks-and-configuration.patch b/CraftBukkit-Patches/0009-Merge-tweaks-and-configuration.patch index 42018e0..b4beddd 100644 --- a/CraftBukkit-Patches/0009-Merge-tweaks-and-configuration.patch +++ b/CraftBukkit-Patches/0009-Merge-tweaks-and-configuration.patch @@ -1,4 +1,4 @@ -From 01d4432152e449698e95ac5ff2e98c5570fb239b Mon Sep 17 00:00:00 2001 +From d715d750c402d8651a2df9457336ad821ba3085a Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 23 Mar 2013 09:46:33 +1100 Subject: [PATCH] Merge tweaks and configuration @@ -6,10 +6,10 @@ Subject: [PATCH] Merge tweaks and configuration This allows the merging of Experience orbs, as well as the configuration of the merge radius of items. Additionally it refactors the merge algorithm to be a better experience for players. diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java -index 21117cc..3f2c5f5 100644 +index 1e575fe..fa7e6df 100644 --- a/src/main/java/net/minecraft/server/EntityItem.java +++ b/src/main/java/net/minecraft/server/EntityItem.java -@@ -122,7 +122,10 @@ public class EntityItem extends Entity { +@@ -123,7 +123,10 @@ public class EntityItem extends Entity { } private void w() { @@ -21,7 +21,7 @@ index 21117cc..3f2c5f5 100644 while (iterator.hasNext()) { EntityItem entityitem = (EntityItem) iterator.next(); -@@ -156,11 +159,13 @@ public class EntityItem extends Entity { +@@ -157,11 +160,13 @@ public class EntityItem extends Entity { } else if (itemstack1.count + itemstack.count > itemstack1.getMaxStackSize()) { return false; } else { @@ -41,10 +41,10 @@ index 21117cc..3f2c5f5 100644 } } else { diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 6d8a5e8..30b5fed 100644 +index bed457a..581224f 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -923,6 +923,23 @@ public abstract class World implements IBlockAccess { +@@ -967,6 +967,23 @@ public abstract class World implements IBlockAccess { // Not all projectiles extend EntityProjectile, so check for Bukkit interface instead event = CraftEventFactory.callProjectileLaunchEvent(entity); } diff --git a/CraftBukkit-Patches/0010-Async-Operation-Catching.patch b/CraftBukkit-Patches/0010-Async-Operation-Catching.patch index 1ec8e9f..f7abd90 100644 --- a/CraftBukkit-Patches/0010-Async-Operation-Catching.patch +++ b/CraftBukkit-Patches/0010-Async-Operation-Catching.patch @@ -1,4 +1,4 @@ -From ebf7df36d00536e84229a9a839b9325248bad306 Mon Sep 17 00:00:00 2001 +From 96589be25d952b55e40a187d76180559f16c4e66 Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 25 Mar 2014 16:10:01 +1100 Subject: [PATCH] Async Operation Catching @@ -6,10 +6,10 @@ Subject: [PATCH] Async Operation Catching Catch and throw an exception when a potentially unsafe operation occurs on a thread other than the main server thread. diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java -index 12e2b79..9a19752 100644 +index 6b02059..66e099f 100644 --- a/src/main/java/net/minecraft/server/Block.java +++ b/src/main/java/net/minecraft/server/Block.java -@@ -268,9 +268,13 @@ public class Block { +@@ -309,9 +309,13 @@ public class Block { return 10; } @@ -26,10 +26,10 @@ index 12e2b79..9a19752 100644 public int a(Random random) { return 1; diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index e0bde4a..778bcd3 100644 +index 9973ff7..256953f 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -565,6 +565,7 @@ public abstract class EntityLiving extends Entity { +@@ -570,6 +570,7 @@ public abstract class EntityLiving extends Entity { } public void addEffect(MobEffect mobeffect) { @@ -38,18 +38,18 @@ index e0bde4a..778bcd3 100644 if (isTickingEffects) { effectsToProcess.add(mobeffect); diff --git a/src/main/java/net/minecraft/server/EntityTracker.java b/src/main/java/net/minecraft/server/EntityTracker.java -index c9058db..350f2f7 100644 +index 1cc9c95..de38e80 100644 --- a/src/main/java/net/minecraft/server/EntityTracker.java +++ b/src/main/java/net/minecraft/server/EntityTracker.java @@ -94,6 +94,7 @@ public class EntityTracker { } - public void addEntity(Entity entity, int i, int j, boolean flag) { + public void addEntity(Entity entity, int i, final int j, boolean flag) { + org.spigotmc.AsyncCatcher.catchOp( "entity track"); // Spigot if (i > this.e) { i = this.e; } -@@ -129,6 +130,7 @@ public class EntityTracker { +@@ -144,6 +145,7 @@ public class EntityTracker { } public void untrackEntity(Entity entity) { @@ -58,18 +58,18 @@ index c9058db..350f2f7 100644 EntityPlayer entityplayer = (EntityPlayer) entity; Iterator iterator = this.c.iterator(); diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java -index 1204c56..640d7ff 100644 +index 5ef2be4..8d50e05 100644 --- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java +++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java -@@ -308,6 +308,7 @@ public class EntityTrackerEntry { +@@ -310,6 +310,7 @@ public class EntityTrackerEntry { } public void updatePlayer(EntityPlayer entityplayer) { + org.spigotmc.AsyncCatcher.catchOp( "player tracker update"); // Spigot if (entityplayer != this.tracker) { if (this.c(entityplayer)) { - if (!this.trackedPlayers.contains(entityplayer) && (this.e(entityplayer) || this.tracker.attachedToPlayer)) { -@@ -538,6 +539,7 @@ public class EntityTrackerEntry { + if (!this.trackedPlayers.contains(entityplayer) && (this.e(entityplayer) || this.tracker.attachedToPlayer)) { +@@ -540,6 +541,7 @@ public class EntityTrackerEntry { } public void clear(EntityPlayer entityplayer) { @@ -78,10 +78,10 @@ index 1204c56..640d7ff 100644 this.trackedPlayers.remove(entityplayer); entityplayer.d(this.tracker); diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 30b5fed..86be044 100644 +index 581224f..a67736a 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -893,6 +893,7 @@ public abstract class World implements IBlockAccess { +@@ -937,6 +937,7 @@ public abstract class World implements IBlockAccess { } public boolean addEntity(Entity entity, SpawnReason spawnReason) { // Changed signature, added SpawnReason @@ -89,7 +89,7 @@ index 30b5fed..86be044 100644 if (entity == null) return false; // CraftBukkit end int i = MathHelper.floor(entity.locX / 16.0D); -@@ -1000,6 +1001,7 @@ public abstract class World implements IBlockAccess { +@@ -1044,6 +1045,7 @@ public abstract class World implements IBlockAccess { } public void removeEntity(Entity entity) { @@ -97,16 +97,16 @@ index 30b5fed..86be044 100644 entity.die(); if (entity instanceof EntityHuman) { this.players.remove(entity); -@@ -2418,6 +2420,7 @@ public abstract class World implements IBlockAccess { +@@ -2474,6 +2476,7 @@ public abstract class World implements IBlockAccess { } - public void b(Collection collection) { + public void b(Collection collection) { + org.spigotmc.AsyncCatcher.catchOp( "entity world add"); // Spigot // CraftBukkit start // this.entityList.addAll(collection); Iterator iterator = collection.iterator(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 5ef7d97..faefbe7 100644 +index 20357f9..7b05b6a 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -165,6 +165,7 @@ public class CraftWorld implements World { @@ -134,7 +134,7 @@ index 5ef7d97..faefbe7 100644 if (generate) { // Use the default variant of loadChunk when generate == true. diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index fed7b4d..9268686 100644 +index 058141d..5dafb80 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -214,6 +214,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -146,7 +146,7 @@ index fed7b4d..9268686 100644 getHandle().playerConnection.disconnect(message == null ? "" : message); diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java -index 87259f1..295aed2 100644 +index 197086e..fbea5db 100644 --- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java +++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java @@ -42,6 +42,7 @@ public final class CraftScoreboardManager implements ScoreboardManager { diff --git a/CraftBukkit-Patches/0011-View-Distance.patch b/CraftBukkit-Patches/0011-View-Distance.patch index 6da7a06..6853821 100644 --- a/CraftBukkit-Patches/0011-View-Distance.patch +++ b/CraftBukkit-Patches/0011-View-Distance.patch @@ -1,4 +1,4 @@ -From 5837c58367bc1875f9bd8855ff5d0d96983427d0 Mon Sep 17 00:00:00 2001 +From 379a48509beb86d658aad372cde149f162da4277 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 23 Mar 2013 09:52:41 +1100 Subject: [PATCH] View Distance @@ -6,23 +6,23 @@ Subject: [PATCH] View Distance This commit allows the user to select per world view distances, and view distances below 3. Be wary of the issues selecting a view distance of 1 or 2 may cause! diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index 8ac9387..5ca5935 100644 +index 688d6f0..abb24c8 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -26,9 +26,9 @@ public class PlayerChunkMap { +@@ -28,9 +28,9 @@ public class PlayerChunkMap { private final int[][] i = new int[][] { { 1, 0}, { 0, 1}, { -1, 0}, { 0, -1}}; private boolean wasNotEmpty; // CraftBukkit - add field - public PlayerChunkMap(WorldServer worldserver) { + public PlayerChunkMap(WorldServer worldserver, int viewDistance /* Spigot */) { this.world = worldserver; -- this.a(worldserver.getMinecraftServer().getPlayerList().t()); +- this.a(worldserver.getMinecraftServer().getPlayerList().s()); + this.a(viewDistance); // Spigot } public WorldServer a() { diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index b81b1ff..8a09a79 100644 +index 383a491..a3c3c78 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -60,7 +60,7 @@ public class WorldServer extends World implements IAsyncTaskHandler { diff --git a/CraftBukkit-Patches/0012-Spigot-Timings.patch b/CraftBukkit-Patches/0012-Spigot-Timings.patch index aa511ef..add9a10 100644 --- a/CraftBukkit-Patches/0012-Spigot-Timings.patch +++ b/CraftBukkit-Patches/0012-Spigot-Timings.patch @@ -1,4 +1,4 @@ -From e38f480ecc388d126b04fa163159f90ecc314e90 Mon Sep 17 00:00:00 2001 +From 0db746ad5cbf69d3f04721e57e4371d9af9af713 Mon Sep 17 00:00:00 2001 From: Aikar Date: Thu, 10 Jan 2013 00:18:11 -0500 Subject: [PATCH] Spigot Timings @@ -6,10 +6,10 @@ Subject: [PATCH] Spigot Timings Overhauls the Timings System adding performance tracking all around the Minecraft Server diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index bf48742..867caca 100644 +index aade3f5..cfcd71e 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -864,6 +864,7 @@ public class Chunk { +@@ -893,6 +893,7 @@ public class Chunk { } public void loadNearby(IChunkProvider ichunkprovider, IChunkProvider ichunkprovider1, int i, int j) { @@ -17,7 +17,7 @@ index bf48742..867caca 100644 boolean flag = ichunkprovider.isChunkLoaded(i, j - 1); boolean flag1 = ichunkprovider.isChunkLoaded(i + 1, j); boolean flag2 = ichunkprovider.isChunkLoaded(i, j + 1); -@@ -910,6 +911,7 @@ public class Chunk { +@@ -939,6 +940,7 @@ public class Chunk { } } @@ -26,10 +26,10 @@ index bf48742..867caca 100644 public BlockPosition h(BlockPosition blockposition) { diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java -index a363af7..9ee7e75 100644 +index 5d75348..e7cdb4e 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java -@@ -130,6 +130,7 @@ public class ChunkProviderServer implements IChunkProvider { +@@ -132,6 +132,7 @@ public class ChunkProviderServer implements IChunkProvider { // CraftBukkit end if (chunk == null) { @@ -37,15 +37,15 @@ index a363af7..9ee7e75 100644 chunk = this.loadChunk(i, j); if (chunk == null) { if (this.chunkProvider == null) { -@@ -181,6 +182,7 @@ public class ChunkProviderServer implements IChunkProvider { +@@ -182,6 +183,7 @@ public class ChunkProviderServer implements IChunkProvider { + } // CraftBukkit end - chunk.loadNearby(this, this, i, j); + world.timings.syncChunkLoadTimer.stopTiming(); // Spigot } return chunk; -@@ -215,7 +217,9 @@ public class ChunkProviderServer implements IChunkProvider { +@@ -216,7 +218,9 @@ public class ChunkProviderServer implements IChunkProvider { if (chunk != null) { chunk.setLastSaved(this.world.getTime()); if (this.chunkProvider != null) { @@ -56,28 +56,29 @@ index a363af7..9ee7e75 100644 } diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java -index 33bb889..7caddb5 100644 +index b7d09a9..5c0ab6c 100644 --- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java +++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java -@@ -45,7 +45,9 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { +@@ -46,7 +46,9 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { // CraftBukkit start - Add async variant, provide compatibility - public Chunk a(World world, int i, int j) { + public Chunk a(World world, int i, int j) throws IOException { + world.timings.syncChunkLoadDataTimer.startTiming(); // Spigot Object[] data = loadChunk(world, i, j); + world.timings.syncChunkLoadDataTimer.stopTiming(); // Spigot if (data != null) { Chunk chunk = (Chunk) data[0]; NBTTagCompound nbttagcompound = (NBTTagCompound) data[1]; -@@ -400,6 +402,7 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { +@@ -399,7 +401,7 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { public void loadEntities(Chunk chunk, NBTTagCompound nbttagcompound, World world) { // CraftBukkit end +- + world.timings.syncChunkLoadEntitiesTimer.startTiming(); // Spigot NBTTagList nbttaglist1 = nbttagcompound.getList("Entities", 10); if (nbttaglist1 != null) { -@@ -425,7 +428,8 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { +@@ -425,7 +427,8 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { } } } @@ -87,7 +88,7 @@ index 33bb889..7caddb5 100644 NBTTagList nbttaglist2 = nbttagcompound.getList("TileEntities", 10); if (nbttaglist2 != null) { -@@ -438,6 +442,8 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { +@@ -438,6 +441,8 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { } } } @@ -96,35 +97,35 @@ index 33bb889..7caddb5 100644 if (nbttagcompound.hasKeyOfType("TileTicks", 9)) { NBTTagList nbttaglist3 = nbttagcompound.getList("TileTicks", 10); -@@ -457,6 +463,7 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { +@@ -457,6 +462,7 @@ public class ChunkRegionLoader implements IChunkLoader, IAsyncChunkSaver { } } } + world.timings.syncChunkLoadTileTicksTimer.stopTiming(); // Spigot - // return chunk; // CraftBukkit + // return chunk; // CraftBukkit } diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index 424b71d..390c6eb 100644 +index 8bc6ad6..1e682e9 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java -@@ -18,6 +18,7 @@ import java.io.PrintStream; +@@ -20,6 +20,7 @@ import java.io.PrintStream; import org.apache.logging.log4j.Level; import org.bukkit.craftbukkit.LoggerOutputStream; +import org.bukkit.craftbukkit.SpigotTimings; // Spigot import org.bukkit.event.server.ServerCommandEvent; - // CraftBukkit end - -@@ -317,6 +318,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer + import org.bukkit.craftbukkit.util.Waitable; + import org.bukkit.event.server.RemoteServerCommandEvent; +@@ -369,6 +370,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer } - public void aM() { + public void aN() { + SpigotTimings.serverCommandTimer.startTiming(); // Spigot - while (!this.k.isEmpty()) { - ServerCommand servercommand = (ServerCommand) this.k.remove(0); + while (!this.l.isEmpty()) { + ServerCommand servercommand = (ServerCommand) this.l.remove(0); -@@ -330,6 +332,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -382,6 +384,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer // CraftBukkit end } @@ -133,7 +134,7 @@ index 424b71d..390c6eb 100644 public boolean ad() { diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index ccf6479..c699dd1 100644 +index d004df3..d3c7d1b 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -16,6 +16,7 @@ import org.bukkit.entity.Hanging; @@ -144,7 +145,7 @@ index ccf6479..c699dd1 100644 import org.bukkit.event.entity.EntityCombustByEntityEvent; import org.bukkit.event.hanging.HangingBreakByEntityEvent; import org.bukkit.event.painting.PaintingBreakByEntityEvent; -@@ -112,6 +113,8 @@ public abstract class Entity implements ICommandListener { +@@ -114,6 +115,8 @@ public abstract class Entity implements ICommandListener { public boolean valid; // CraftBukkit public org.bukkit.projectiles.ProjectileSource projectileSource; // CraftBukkit - For projectiles only @@ -153,16 +154,15 @@ index ccf6479..c699dd1 100644 public int getId() { return this.id; } -@@ -379,6 +382,8 @@ public abstract class Entity implements ICommandListener { +@@ -380,6 +383,7 @@ public abstract class Entity implements ICommandListener { } public void move(double d0, double d1, double d2) { + org.bukkit.craftbukkit.SpigotTimings.entityMoveTimer.startTiming(); // Spigot -+ - if (this.T) { + if (this.noclip) { this.a(this.getBoundingBox().c(d0, d1, d2)); this.recalcPosition(); -@@ -715,6 +720,7 @@ public abstract class Entity implements ICommandListener { +@@ -716,6 +720,7 @@ public abstract class Entity implements ICommandListener { this.world.methodProfiler.b(); } @@ -171,10 +171,10 @@ index ccf6479..c699dd1 100644 private void recalcPosition() { diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 778bcd3..cd56586 100644 +index 256953f..24aaec5 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -21,6 +21,8 @@ import org.bukkit.event.entity.EntityRegainHealthEvent; +@@ -23,6 +23,8 @@ import org.bukkit.event.entity.EntityRegainHealthEvent; import org.bukkit.event.vehicle.VehicleExitEvent; // CraftBukkit end @@ -183,15 +183,15 @@ index 778bcd3..cd56586 100644 public abstract class EntityLiving extends Entity { private static final UUID a = UUID.fromString("662A6B8D-DA3E-4C1C-8813-96EA6097278D"); -@@ -1425,6 +1427,7 @@ public abstract class EntityLiving extends Entity { +@@ -1430,6 +1432,7 @@ public abstract class EntityLiving extends Entity { } - public void s_() { + public void t_() { + SpigotTimings.timerEntityBaseTick.startTiming(); // Spigot - super.s_(); - if (!this.world.isStatic) { - int i = this.bu(); -@@ -1463,7 +1466,9 @@ public abstract class EntityLiving extends Entity { + super.t_(); + if (!this.world.isClientSide) { + int i = this.bv(); +@@ -1468,7 +1471,9 @@ public abstract class EntityLiving extends Entity { } } @@ -201,23 +201,23 @@ index 778bcd3..cd56586 100644 double d0 = this.locX - this.lastX; double d1 = this.locZ - this.lastZ; float f = (float) (d0 * d0 + d1 * d1); -@@ -1528,6 +1533,7 @@ public abstract class EntityLiving extends Entity { +@@ -1533,6 +1538,7 @@ public abstract class EntityLiving extends Entity { this.world.methodProfiler.b(); - this.aR += f2; + this.aT += f2; + SpigotTimings.timerEntityTickRest.stopTiming(); // Spigot } protected float h(float f, float f1) { -@@ -1592,6 +1598,7 @@ public abstract class EntityLiving extends Entity { +@@ -1597,6 +1603,7 @@ public abstract class EntityLiving extends Entity { } this.world.methodProfiler.a("ai"); + SpigotTimings.timerEntityAI.startTiming(); // Spigot - if (this.bC()) { - this.aW = false; - this.aX = 0.0F; -@@ -1602,6 +1609,7 @@ public abstract class EntityLiving extends Entity { + if (this.bD()) { + this.aY = false; + this.aZ = 0.0F; +@@ -1607,6 +1614,7 @@ public abstract class EntityLiving extends Entity { this.doTick(); this.world.methodProfiler.b(); } @@ -225,27 +225,27 @@ index 778bcd3..cd56586 100644 this.world.methodProfiler.b(); this.world.methodProfiler.a("jump"); -@@ -1623,11 +1631,15 @@ public abstract class EntityLiving extends Entity { - this.aX *= 0.98F; - this.aY *= 0.98F; - this.aZ *= 0.9F; +@@ -1628,11 +1636,15 @@ public abstract class EntityLiving extends Entity { + this.aZ *= 0.98F; + this.ba *= 0.98F; + this.bb *= 0.9F; + SpigotTimings.timerEntityAIMove.startTiming(); // Spigot - this.g(this.aX, this.aY); + this.g(this.aZ, this.ba); + SpigotTimings.timerEntityAIMove.stopTiming(); // Spigot this.world.methodProfiler.b(); this.world.methodProfiler.a("push"); - if (!this.world.isStatic) { + if (!this.world.isClientSide) { + SpigotTimings.timerEntityAICollision.startTiming(); // Spigot - this.bK(); + this.bL(); + SpigotTimings.timerEntityAICollision.stopTiming(); // Spigot } this.world.methodProfiler.b(); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 0a707eb..76591fb 100644 +index 486e652..61abf67 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -45,6 +45,7 @@ import joptsimple.OptionSet; +@@ -46,6 +46,7 @@ import joptsimple.OptionSet; import org.bukkit.craftbukkit.Main; import org.bukkit.World.Environment; @@ -253,15 +253,15 @@ index 0a707eb..76591fb 100644 import org.bukkit.craftbukkit.util.Waitable; import org.bukkit.event.server.RemoteServerCommandEvent; import org.bukkit.event.world.WorldSaveEvent; -@@ -596,6 +597,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs - protected void x() {} +@@ -617,6 +618,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs + protected void y() {} - protected void y() throws ExceptionWorldConflict { // CraftBukkit - added throws + protected void z() throws ExceptionWorldConflict { // CraftBukkit - added throws + SpigotTimings.serverTickTimer.startTiming(); // Spigot long i = System.nanoTime(); ++this.ticks; -@@ -622,10 +624,12 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -643,10 +645,12 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs } if (autosavePeriod > 0 && this.ticks % autosavePeriod == 0) { // CraftBukkit @@ -274,7 +274,7 @@ index 0a707eb..76591fb 100644 } this.methodProfiler.a("tallying"); -@@ -642,6 +646,8 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -663,6 +667,8 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs this.methodProfiler.b(); this.methodProfiler.b(); @@ -282,8 +282,8 @@ index 0a707eb..76591fb 100644 + org.spigotmc.CustomTimingsHandler.tick(); // Spigot } - public void z() { -@@ -664,16 +670,23 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs + public void A() { +@@ -677,16 +683,23 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs this.methodProfiler.c("levels"); @@ -307,7 +307,7 @@ index 0a707eb..76591fb 100644 // Send time updates to everyone, it will get the right time from the world the player is in. if (this.ticks % 20 == 0) { for (int i = 0; i < this.getPlayerList().players.size(); ++i) { -@@ -681,6 +694,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -694,6 +707,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs entityplayer.playerConnection.sendPacket(new PacketPlayOutUpdateTime(entityplayer.world.getTime(), entityplayer.getPlayerTime(), entityplayer.world.getGameRules().getBoolean("doDaylightCycle"))); // Add support for per player time } } @@ -315,27 +315,27 @@ index 0a707eb..76591fb 100644 int i; -@@ -704,7 +718,9 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -717,7 +731,9 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs CrashReport crashreport; try { + worldserver.timings.doTick.startTiming(); // Spigot worldserver.doTick(); + worldserver.timings.doTick.stopTiming(); // Spigot - } catch (Throwable throwable1) { - crashreport = CrashReport.a(throwable1, "Exception ticking world"); + } catch (Throwable throwable) { + crashreport = CrashReport.a(throwable, "Exception ticking world"); worldserver.a(crashreport); -@@ -712,7 +728,9 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -725,7 +741,9 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs } try { + worldserver.timings.tickEntities.startTiming(); // Spigot worldserver.tickEntities(); + worldserver.timings.tickEntities.stopTiming(); // Spigot - } catch (Throwable throwable2) { - crashreport = CrashReport.a(throwable2, "Exception ticking world entities"); + } catch (Throwable throwable1) { + crashreport = CrashReport.a(throwable1, "Exception ticking world entities"); worldserver.a(crashreport); -@@ -721,7 +739,9 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -734,7 +752,9 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs this.methodProfiler.b(); this.methodProfiler.a("tracker"); @@ -345,12 +345,12 @@ index 0a707eb..76591fb 100644 this.methodProfiler.b(); this.methodProfiler.b(); // } // CraftBukkit -@@ -730,14 +750,20 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -743,14 +763,20 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs } this.methodProfiler.c("connection"); + SpigotTimings.connectionTimer.startTiming(); // Spigot - this.ao().c(); + this.ap().c(); + SpigotTimings.connectionTimer.stopTiming(); // Spigot this.methodProfiler.c("players"); + SpigotTimings.playerListTimer.startTiming(); // Spigot @@ -359,27 +359,26 @@ index 0a707eb..76591fb 100644 this.methodProfiler.c("tickables"); + SpigotTimings.tickablesTimer.startTiming(); // Spigot - for (i = 0; i < this.o.size(); ++i) { - ((IUpdatePlayerListBox) this.o.get(i)).c(); + for (i = 0; i < this.p.size(); ++i) { + ((IUpdatePlayerListBox) this.p.get(i)).c(); } + SpigotTimings.tickablesTimer.stopTiming(); // Spigot this.methodProfiler.b(); } diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 8d669a4..5c24333 100644 +index 6649c0b..20e09e5 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -1042,6 +1042,8 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -1061,6 +1061,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList // CraftBukkit end - private void handleCommand(String s) { + private void handleCommand(String s) { + org.bukkit.craftbukkit.SpigotTimings.playerCommandTimer.startTiming(); // Spigot -+ // CraftBukkit start - whole method this.c.info(this.player.getName() + " issued server command: " + s); -@@ -1051,18 +1053,22 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -1070,18 +1071,22 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList this.server.getPluginManager().callEvent(event); if (event.isCancelled()) { @@ -403,7 +402,7 @@ index 8d669a4..5c24333 100644 // CraftBukkit end } diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java -index ec76148..a93ad27 100644 +index 8afd376..71bf63a 100644 --- a/src/main/java/net/minecraft/server/TileEntity.java +++ b/src/main/java/net/minecraft/server/TileEntity.java @@ -6,10 +6,12 @@ import java.util.concurrent.Callable; @@ -417,10 +416,10 @@ index ec76148..a93ad27 100644 + public CustomTimingsHandler tickTimer = org.bukkit.craftbukkit.SpigotTimings.getTileEntityTimings(this); // Spigot private static final Logger a = LogManager.getLogger(); - private static Map f = Maps.newHashMap(); - private static Map g = Maps.newHashMap(); + private static Map> f = Maps.newHashMap(); + private static Map, String> g = Maps.newHashMap(); diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 86be044..06bd661 100644 +index a67736a..bf4c758 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -18,6 +18,7 @@ import org.bukkit.Bukkit; @@ -431,7 +430,7 @@ index 86be044..06bd661 100644 import org.bukkit.generator.ChunkGenerator; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.CraftWorld; -@@ -125,6 +126,8 @@ public abstract class World implements IBlockAccess { +@@ -126,6 +127,8 @@ public abstract class World implements IBlockAccess { public final org.spigotmc.SpigotWorldConfig spigotConfig; // Spigot @@ -440,15 +439,15 @@ index 86be044..06bd661 100644 public CraftWorld getWorld() { return this.world; } -@@ -164,6 +167,7 @@ public abstract class World implements IBlockAccess { - this.M.a(new WorldBorderListener(((WorldServer) this).getServer().getHandle())); // CraftBukkit - - this.getServer().addWorld(this.world); // CraftBukkit -+ timings = new SpigotTimings.WorldTimingsHandler(this); // Spigot - code below can generate new world and access timings +@@ -190,6 +193,7 @@ public abstract class World implements IBlockAccess { + }); + this.getServer().addWorld(this.world); + // CraftBukkit end ++ timings = new SpigotTimings.WorldTimingsHandler(this); // Spigot - code below can generate new world and access timings } public World b() { -@@ -1254,6 +1258,7 @@ public abstract class World implements IBlockAccess { +@@ -1299,6 +1303,7 @@ public abstract class World implements IBlockAccess { this.g.clear(); this.methodProfiler.c("regular"); @@ -456,7 +455,7 @@ index 86be044..06bd661 100644 // CraftBukkit start - Use field for loop variable for (this.tickPosition = 0; this.tickPosition < this.entityList.size(); ++this.tickPosition) { entity = (Entity) this.entityList.get(this.tickPosition); -@@ -1270,7 +1275,9 @@ public abstract class World implements IBlockAccess { +@@ -1315,7 +1320,9 @@ public abstract class World implements IBlockAccess { this.methodProfiler.a("tick"); if (!entity.dead) { try { @@ -466,25 +465,25 @@ index 86be044..06bd661 100644 } catch (Throwable throwable1) { crashreport = CrashReport.a(throwable1, "Ticking entity"); crashreportsystemdetails = crashreport.a("Entity being ticked"); -@@ -1295,7 +1302,9 @@ public abstract class World implements IBlockAccess { +@@ -1340,7 +1347,9 @@ public abstract class World implements IBlockAccess { this.methodProfiler.b(); } + timings.entityTick.stopTiming(); // Spigot this.methodProfiler.c("blockEntities"); + timings.tileEntityTick.startTiming(); // Spigot - this.L = true; + this.M = true; // CraftBukkit start - From below, clean up tile entities before ticking them - if (!this.b.isEmpty()) { -@@ -1315,6 +1324,7 @@ public abstract class World implements IBlockAccess { + if (!this.c.isEmpty()) { +@@ -1359,6 +1368,7 @@ public abstract class World implements IBlockAccess { - if (this.isLoaded(blockposition) && this.M.a(blockposition)) { + if (this.isLoaded(blockposition) && this.N.a(blockposition)) { try { + tileentity.tickTimer.startTiming(); // Spigot ((IUpdatePlayerListBox) tileentity).c(); } catch (Throwable throwable2) { CrashReport crashreport1 = CrashReport.a(throwable2, "Ticking block entity"); -@@ -1323,6 +1333,11 @@ public abstract class World implements IBlockAccess { +@@ -1367,6 +1377,11 @@ public abstract class World implements IBlockAccess { tileentity.a(crashreportsystemdetails1); throw new ReportedException(crashreport1); } @@ -496,24 +495,24 @@ index 86be044..06bd661 100644 } } -@@ -1335,6 +1350,8 @@ public abstract class World implements IBlockAccess { +@@ -1379,6 +1394,8 @@ public abstract class World implements IBlockAccess { } } + timings.tileEntityTick.stopTiming(); // Spigot + timings.tileEntityPending.startTiming(); // Spigot - this.L = false; + this.M = false; /* CraftBukkit start - Moved up - if (!this.b.isEmpty()) { -@@ -1367,6 +1384,7 @@ public abstract class World implements IBlockAccess { - this.a.clear(); + if (!this.c.isEmpty()) { +@@ -1411,6 +1428,7 @@ public abstract class World implements IBlockAccess { + this.b.clear(); } + timings.tileEntityPending.stopTiming(); // Spigot this.methodProfiler.b(); this.methodProfiler.b(); } -@@ -1411,6 +1429,7 @@ public abstract class World implements IBlockAccess { +@@ -1455,6 +1473,7 @@ public abstract class World implements IBlockAccess { // CraftBukkit start - Use neighbor cache instead of looking up Chunk startingChunk = this.getChunkIfLoaded(i >> 4, j >> 4); if (!flag || (startingChunk != null && startingChunk.areNeighborsLoaded(2)) /* this.isAreaLoaded(i - b0, 0, j - b0, i + b0, 0, j + b0) */) { @@ -521,7 +520,7 @@ index 86be044..06bd661 100644 // CraftBukkit end entity.P = entity.locX; entity.Q = entity.locY; -@@ -1474,6 +1493,7 @@ public abstract class World implements IBlockAccess { +@@ -1518,6 +1537,7 @@ public abstract class World implements IBlockAccess { } } @@ -530,10 +529,10 @@ index 86be044..06bd661 100644 } diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 8a09a79..1d6be5f 100644 +index a3c3c78..6ed7078 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -210,10 +210,13 @@ public class WorldServer extends World implements IAsyncTaskHandler { +@@ -209,10 +209,13 @@ public class WorldServer extends World implements IAsyncTaskHandler { // CraftBukkit start - Only call spawner if we have players online and the world allows for mobs or animals long time = this.worldData.getTime(); if (this.getGameRules().getBoolean("doMobSpawning") && this.worldData.getType() != WorldType.DEBUG_ALL_BLOCK_STATES && (this.allowMonsters || this.allowAnimals) && (this instanceof WorldServer && this.players.size() > 0)) { @@ -548,7 +547,7 @@ index 8a09a79..1d6be5f 100644 this.methodProfiler.c("chunkSource"); this.chunkProvider.unloadChunks(); int j = this.a(1.0F); -@@ -227,21 +230,34 @@ public class WorldServer extends World implements IAsyncTaskHandler { +@@ -226,21 +229,34 @@ public class WorldServer extends World implements IAsyncTaskHandler { this.worldData.setDayTime(this.worldData.getDayTime() + 1L); } @@ -577,17 +576,17 @@ index 8a09a79..1d6be5f 100644 this.methodProfiler.b(); + timings.doSounds.startTiming(); // Spigot this.ak(); - + this.getWorld().processChunkGC(); // CraftBukkit + timings.doChunkGC.stopTiming(); // Spigot } - public BiomeMeta a(EnumCreatureType enumcreaturetype, BlockPosition blockposition) { + public BiomeBase.BiomeMeta a(EnumCreatureType enumcreaturetype, BlockPosition blockposition) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 09c723f..07f15d1 100644 +index 2aceeb4..ed0c30c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1638,6 +1638,11 @@ public final class CraftServer implements Server { +@@ -1652,6 +1652,11 @@ public final class CraftServer implements Server { private final Spigot spigot = new Spigot() { @@ -600,7 +599,7 @@ index 09c723f..07f15d1 100644 public Spigot spigot() diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index faefbe7..8105872 100644 +index 7b05b6a..609b483 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -255,9 +255,11 @@ public class CraftWorld implements World { @@ -792,10 +791,10 @@ index 0000000..558574f + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java b/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java -index 26ea0d3..7fabfa3 100644 +index 5b56898..5f58a59 100644 --- a/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java +++ b/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOProvider.java -@@ -40,7 +40,9 @@ class ChunkIOProvider implements AsynchronousExecutor.CallBackProvider Date: Fri, 21 Jun 2013 17:29:54 +1000 Subject: [PATCH] Fix Mob Spawning Relative to View Distance @@ -8,18 +8,18 @@ Changes the mob spawning algorithm to properly account for view distance and the Needs better documentation. diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 867caca..9e65ff7 100644 +index cfcd71e..92b25f0 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -42,6 +42,7 @@ public class Chunk { private long u; private int v; - private ConcurrentLinkedQueue w; + private ConcurrentLinkedQueue w; + protected gnu.trove.map.hash.TObjectIntHashMap entityCount = new gnu.trove.map.hash.TObjectIntHashMap(); // Spigot // CraftBukkit start - Neighbor loaded cache for chunk lighting and entity ticking private int neighbors = 0x1 << 12; -@@ -650,6 +651,22 @@ public class Chunk { +@@ -674,6 +675,22 @@ public class Chunk { entity.af = k; entity.ag = this.locZ; this.entitySlices[k].add(entity); @@ -42,7 +42,7 @@ index 867caca..9e65ff7 100644 } public void b(Entity entity) { -@@ -666,6 +683,22 @@ public class Chunk { +@@ -690,6 +707,22 @@ public class Chunk { } this.entitySlices[i].remove(entity); @@ -66,7 +66,7 @@ index 867caca..9e65ff7 100644 public boolean d(BlockPosition blockposition) { diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java -index 25988d4..43954b3 100644 +index 1b9af34..aeb0a44 100644 --- a/src/main/java/net/minecraft/server/SpawnerCreature.java +++ b/src/main/java/net/minecraft/server/SpawnerCreature.java @@ -19,6 +19,25 @@ public final class SpawnerCreature { @@ -107,7 +107,7 @@ index 25988d4..43954b3 100644 for (int i1 = -b0; i1 <= b0; ++i1) { for (k = -b0; k <= b0; ++k) { -@@ -88,17 +112,19 @@ public final class SpawnerCreature { +@@ -87,17 +111,19 @@ public final class SpawnerCreature { if (limit == 0) { continue; } @@ -140,7 +140,7 @@ index 25988d4..43954b3 100644 + continue label115; + } + // Spigot end - if (l2 >= entityinsentient.bU()) { + if (l2 >= entityinsentient.bV()) { continue label115; } diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java diff --git a/CraftBukkit-Patches/0014-Handle-Null-Tile-Entities.patch b/CraftBukkit-Patches/0014-Handle-Null-Tile-Entities.patch index 2451507..1b6d097 100644 --- a/CraftBukkit-Patches/0014-Handle-Null-Tile-Entities.patch +++ b/CraftBukkit-Patches/0014-Handle-Null-Tile-Entities.patch @@ -1,14 +1,14 @@ -From de6f762085ae230640f23c628f61fb90cc50c95f Mon Sep 17 00:00:00 2001 +From e05b61bd35a73364115bba2cf092b4a168a85dcc Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 3 Feb 2013 09:20:19 +1100 Subject: [PATCH] Handle Null Tile Entities diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 06bd661..b6a509c 100644 +index bf4c758..c78c2d8 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -1318,6 +1318,13 @@ public abstract class World implements IBlockAccess { +@@ -1362,6 +1362,13 @@ public abstract class World implements IBlockAccess { while (iterator.hasNext()) { TileEntity tileentity = (TileEntity) iterator.next(); diff --git a/CraftBukkit-Patches/0015-Entity-Activation-Range.patch b/CraftBukkit-Patches/0015-Entity-Activation-Range.patch index eaf143b..9e41d23 100644 --- a/CraftBukkit-Patches/0015-Entity-Activation-Range.patch +++ b/CraftBukkit-Patches/0015-Entity-Activation-Range.patch @@ -1,4 +1,4 @@ -From f483fb8bd514291b3f1a4dd68acf32fd7fa7a79c Mon Sep 17 00:00:00 2001 +From 8bf46817709567086980648b133a6f148823dafd Mon Sep 17 00:00:00 2001 From: Aikar Date: Sun, 3 Feb 2013 05:10:21 -0500 Subject: [PATCH] Entity Activation Range @@ -9,27 +9,27 @@ This will drastically cut down on tick timings for entities that are not in rang This change can have dramatic impact on gameplay if configured too low. Balance according to your servers desired gameplay. diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index c699dd1..9dcddb1 100644 +index d3c7d1b..ebdcaab 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -89,14 +89,14 @@ public abstract class Entity implements ICommandListener { public int ticksLived; public int maxFireTicks; - public int fireTicks; + public int fireTicks; // CraftBukkit - public - protected boolean inWater; + public boolean inWater; // Spigot - protected -> public public int noDamageTicks; protected boolean justCreated; protected boolean fireProof; protected DataWatcher datawatcher; - private double ap; - private double aq; + private double ar; + private double as; - public boolean ad; -+ public boolean ad;public boolean isAddedToChunk() { return ad; } // Spigot ++ public boolean ad; public boolean isAddedToChunk() { return ad; } // Spigot public int ae; public int af; public int ag; -@@ -113,7 +113,13 @@ public abstract class Entity implements ICommandListener { +@@ -115,7 +115,13 @@ public abstract class Entity implements ICommandListener { public boolean valid; // CraftBukkit public org.bukkit.projectiles.ProjectileSource projectileSource; // CraftBukkit - For projectiles only @@ -43,7 +43,7 @@ index c699dd1..9dcddb1 100644 public int getId() { return this.id; -@@ -143,7 +149,12 @@ public abstract class Entity implements ICommandListener { +@@ -145,7 +151,12 @@ public abstract class Entity implements ICommandListener { this.setPosition(0.0D, 0.0D, 0.0D); if (world != null) { this.dimension = world.worldProvider.getDimension(); @@ -57,11 +57,11 @@ index c699dd1..9dcddb1 100644 this.datawatcher = new DataWatcher(this); this.datawatcher.a(0, Byte.valueOf((byte) 0)); diff --git a/src/main/java/net/minecraft/server/EntityAgeable.java b/src/main/java/net/minecraft/server/EntityAgeable.java -index 2adcc19..23091bd 100644 +index 8a74059..09d4335 100644 --- a/src/main/java/net/minecraft/server/EntityAgeable.java +++ b/src/main/java/net/minecraft/server/EntityAgeable.java @@ -9,6 +9,31 @@ public abstract class EntityAgeable extends EntityCreature { - private float bl; + private float bn; public boolean ageLocked = false; // CraftBukkit + // Spigot start @@ -69,7 +69,7 @@ index 2adcc19..23091bd 100644 + public void inactiveTick() + { + super.inactiveTick(); -+ if ( this.world.isStatic || this.ageLocked ) ++ if ( this.world.isClientSide || this.ageLocked ) + { // CraftBukkit + this.a( this.isBaby() ); + } else @@ -93,7 +93,7 @@ index 2adcc19..23091bd 100644 super(world); } diff --git a/src/main/java/net/minecraft/server/EntityArrow.java b/src/main/java/net/minecraft/server/EntityArrow.java -index 3ba285a..6e5450a 100644 +index d0e5f11..01c66e3 100644 --- a/src/main/java/net/minecraft/server/EntityArrow.java +++ b/src/main/java/net/minecraft/server/EntityArrow.java @@ -15,7 +15,7 @@ public class EntityArrow extends Entity implements IProjectile { @@ -107,7 +107,7 @@ index 3ba285a..6e5450a 100644 public Entity shooter; @@ -24,6 +24,18 @@ public class EntityArrow extends Entity implements IProjectile { private double damage = 2.0D; - public int knockbackStrength; + public int knockbackStrength; // CraftBukkit - public + // Spigot Start + @Override @@ -115,7 +115,7 @@ index 3ba285a..6e5450a 100644 + { + if ( this.inGround ) + { -+ this.ap += 1; // Despawn counter. First int after shooter ++ this.ar += 1; // Despawn counter. First int after shooter + } + super.inactiveTick(); + } @@ -125,12 +125,12 @@ index 3ba285a..6e5450a 100644 super(world); this.j = 10.0D; diff --git a/src/main/java/net/minecraft/server/EntityFireworks.java b/src/main/java/net/minecraft/server/EntityFireworks.java -index 8357157..f5b794b 100644 +index 607608f..02f1603 100644 --- a/src/main/java/net/minecraft/server/EntityFireworks.java +++ b/src/main/java/net/minecraft/server/EntityFireworks.java @@ -5,6 +5,15 @@ public class EntityFireworks extends Entity { private int ticksFlown; - public int expectedLifespan; + public int expectedLifespan; // CraftBukkit - public + // Spigot Start + @Override @@ -143,12 +143,12 @@ index 8357157..f5b794b 100644 + public EntityFireworks(World world) { super(world); - this.a(0.25F, 0.25F); + this.setSize(0.25F, 0.25F); diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java -index 3f2c5f5..652b803 100644 +index fa7e6df..65a03df 100644 --- a/src/main/java/net/minecraft/server/EntityItem.java +++ b/src/main/java/net/minecraft/server/EntityItem.java -@@ -121,6 +121,28 @@ public class EntityItem extends Entity { +@@ -122,6 +122,28 @@ public class EntityItem extends Entity { } } @@ -162,7 +162,7 @@ index 3f2c5f5..652b803 100644 + this.lastTick = MinecraftServer.currentTick; + // CraftBukkit end + -+ if (!this.world.isStatic && this.age >= world.spigotConfig.itemDespawnRate) { // Spigot ++ if (!this.world.isClientSide && this.age >= world.spigotConfig.itemDespawnRate) { // Spigot + // CraftBukkit start - fire ItemDespawnEvent + if (org.bukkit.craftbukkit.event.CraftEventFactory.callItemDespawnEvent(this).isCancelled()) { + this.age = 0; @@ -178,10 +178,10 @@ index 3f2c5f5..652b803 100644 // Spigot start double radius = world.spigotConfig.itemMerge; diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index cd56586..89374d7 100644 +index 24aaec5..e90ff2f 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -87,6 +87,13 @@ public abstract class EntityLiving extends Entity { +@@ -89,6 +89,13 @@ public abstract class EntityLiving extends Entity { public int maxAirTicks = 300; ArrayList drops = null; // CraftBukkit end @@ -189,17 +189,17 @@ index cd56586..89374d7 100644 + public void inactiveTick() + { + super.inactiveTick(); -+ ++this.aO; // Above all the floats ++ ++this.ticksFarFromPlayer; // Above all the floats + } + // Spigot end public void G() { this.damageEntity(DamageSource.OUT_OF_WORLD, Float.MAX_VALUE); diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index b6a509c..d85479b 100644 +index c78c2d8..6a975d3 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -1258,6 +1258,7 @@ public abstract class World implements IBlockAccess { +@@ -1303,6 +1303,7 @@ public abstract class World implements IBlockAccess { this.g.clear(); this.methodProfiler.c("regular"); @@ -207,7 +207,7 @@ index b6a509c..d85479b 100644 timings.entityTick.startTiming(); // Spigot // CraftBukkit start - Use field for loop variable for (this.tickPosition = 0; this.tickPosition < this.entityList.size(); ++this.tickPosition) { -@@ -1433,9 +1434,11 @@ public abstract class World implements IBlockAccess { +@@ -1477,9 +1478,11 @@ public abstract class World implements IBlockAccess { int j = MathHelper.floor(entity.locZ); byte b0 = 32; diff --git a/CraftBukkit-Patches/0017-PlayerItemDamageEvent.patch b/CraftBukkit-Patches/0017-PlayerItemDamageEvent.patch index b6c98c6..13da05f 100644 --- a/CraftBukkit-Patches/0017-PlayerItemDamageEvent.patch +++ b/CraftBukkit-Patches/0017-PlayerItemDamageEvent.patch @@ -1,14 +1,14 @@ -From 6e805f1310bdc9c60ae053b397f741c66abb40d4 Mon Sep 17 00:00:00 2001 +From 1447382b4c93fa76fea2224645c098378fed842f Mon Sep 17 00:00:00 2001 From: md_5 Date: Mon, 4 Mar 2013 18:45:52 +1100 Subject: [PATCH] PlayerItemDamageEvent diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index 0457ede..3e0d808 100644 +index 25c6877..62b2136 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java -@@ -323,6 +323,11 @@ public final class ItemStack { +@@ -324,6 +324,11 @@ public final class ItemStack { } public boolean isDamaged(int i, Random random) { @@ -20,7 +20,7 @@ index 0457ede..3e0d808 100644 if (!this.e()) { return false; } else { -@@ -337,7 +342,16 @@ public final class ItemStack { +@@ -338,7 +343,16 @@ public final class ItemStack { } i -= k; @@ -38,12 +38,12 @@ index 0457ede..3e0d808 100644 return false; } } -@@ -350,7 +364,7 @@ public final class ItemStack { +@@ -351,7 +365,7 @@ public final class ItemStack { public void damage(int i, EntityLiving entityliving) { if (!(entityliving instanceof EntityHuman) || !((EntityHuman) entityliving).abilities.canInstantlyBuild) { if (this.e()) { -- if (this.isDamaged(i, entityliving.bb())) { -+ if (this.isDamaged(i, entityliving.bb(), entityliving)) { // Spigot +- if (this.isDamaged(i, entityliving.bc())) { ++ if (this.isDamaged(i, entityliving.bc(), entityliving)) { // Spigot entityliving.b(this); --this.count; if (entityliving instanceof EntityHuman) { diff --git a/CraftBukkit-Patches/0019-Entity-Tracking-Ranges.patch b/CraftBukkit-Patches/0019-Entity-Tracking-Ranges.patch index 7be844e..811ebce 100644 --- a/CraftBukkit-Patches/0019-Entity-Tracking-Ranges.patch +++ b/CraftBukkit-Patches/0019-Entity-Tracking-Ranges.patch @@ -1,4 +1,4 @@ -From f6c53d37393f337957319ad8b8d46e634e7fecab Mon Sep 17 00:00:00 2001 +From 3610083330f3022f069598e344801350f76fa74e Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 20 Feb 2013 11:58:47 -0500 Subject: [PATCH] Entity Tracking Ranges @@ -12,17 +12,56 @@ This has multiple benefits: 4) Less client lag - Not trying to render distant item frames and paintings and entities will reduce entity count on the client, which is major for shop/town worlds which may use tons of item frames. diff --git a/src/main/java/net/minecraft/server/EntityTracker.java b/src/main/java/net/minecraft/server/EntityTracker.java -index 350f2f7..e3b2864 100644 +index de38e80..1f7dd1a 100644 --- a/src/main/java/net/minecraft/server/EntityTracker.java +++ b/src/main/java/net/minecraft/server/EntityTracker.java @@ -95,6 +95,7 @@ public class EntityTracker { - public void addEntity(Entity entity, int i, int j, boolean flag) { + public void addEntity(Entity entity, int i, final int j, boolean flag) { org.spigotmc.AsyncCatcher.catchOp( "entity track"); // Spigot + i = org.spigotmc.TrackingRange.getEntityTrackingRange(entity, i); // Spigot if (i > this.e) { i = this.e; } +diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java +index d3f4af1..0143623 100644 +--- a/src/main/java/org/spigotmc/ActivationRange.java ++++ b/src/main/java/org/spigotmc/ActivationRange.java +@@ -106,7 +106,7 @@ public class ActivationRange + maxRange = Math.max( maxRange, miscActivationRange ); + maxRange = Math.min( ( world.spigotConfig.viewDistance << 4 ) - 8, maxRange ); + +- for ( Entity player : (List) world.players ) ++ for ( Entity player : (List) (List) world.players ) + { + + player.activatedTick = MinecraftServer.currentTick; +@@ -188,7 +188,7 @@ public class ActivationRange + public static boolean checkEntityImmunities(Entity entity) + { + // quick checks. +- if ( entity.inWater /* isInWater */ || entity.fireTicks > 0 ) ++ if ( entity.inWater || entity.fireTicks > 0 ) + { + return true; + } +@@ -215,14 +215,14 @@ public class ActivationRange + { + return true; + } +- if ( entity instanceof EntityVillager && ( (EntityVillager) entity ).ck() /* Getter for first boolean */ ) ++ if ( entity instanceof EntityVillager && ( (EntityVillager) entity ).cm() /* Getter for first boolean */ ) + { + return true; + } + if ( entity instanceof EntityAnimal ) + { + EntityAnimal animal = (EntityAnimal) entity; +- if ( animal.isBaby() || animal.cp() /*love*/ ) ++ if ( animal.isBaby() || animal.isInLove() ) + { + return true; + } diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java index ed2836a..6421bf2 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java diff --git a/CraftBukkit-Patches/0020-Thread-Naming-and-Tweaks.patch b/CraftBukkit-Patches/0020-Thread-Naming-and-Tweaks.patch index 3cde4f1..b0c5cca 100644 --- a/CraftBukkit-Patches/0020-Thread-Naming-and-Tweaks.patch +++ b/CraftBukkit-Patches/0020-Thread-Naming-and-Tweaks.patch @@ -1,4 +1,4 @@ -From 1447e11573baf2733066d84f7af8f3ace5671c03 Mon Sep 17 00:00:00 2001 +From 4a0dd916ac1f28729c9a269f5213c7340f1aad0e Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 23 Apr 2013 11:50:27 +1000 Subject: [PATCH] Thread Naming and Tweaks diff --git a/CraftBukkit-Patches/0021-Close-Unloaded-Save-Files.patch b/CraftBukkit-Patches/0021-Close-Unloaded-Save-Files.patch index f63c492..a55144e 100644 --- a/CraftBukkit-Patches/0021-Close-Unloaded-Save-Files.patch +++ b/CraftBukkit-Patches/0021-Close-Unloaded-Save-Files.patch @@ -1,27 +1,27 @@ -From bd686bb6d5799cecc1e84d821535613b3826fbc2 Mon Sep 17 00:00:00 2001 +From 0e944971858decdee97370dc2da8cc1f94bce1e1 Mon Sep 17 00:00:00 2001 From: Antony Riley Date: Wed, 27 Mar 2013 01:41:54 +0200 Subject: [PATCH] Close Unloaded Save Files diff --git a/src/main/java/net/minecraft/server/RegionFileCache.java b/src/main/java/net/minecraft/server/RegionFileCache.java -index f4f72ef..1b03878 100644 +index b07e7d5..5528019 100644 --- a/src/main/java/net/minecraft/server/RegionFileCache.java +++ b/src/main/java/net/minecraft/server/RegionFileCache.java @@ -10,7 +10,7 @@ import java.util.Map; public class RegionFileCache { -- private static final Map a = Maps.newHashMap(); -+ public static final Map a = Maps.newHashMap(); // Spigot - private -> public +- private static final Map a = Maps.newHashMap(); ++ public static final Map a = Maps.newHashMap(); // Spigot - private -> public public static synchronized RegionFile a(File file, int i, int j) { File file1 = new File(file, "region"); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 07f15d1..fa8ae87 100644 +index ed0c30c..58d52d8 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -953,6 +953,31 @@ public final class CraftServer implements Server { +@@ -967,6 +967,31 @@ public final class CraftServer implements Server { worlds.remove(world.getName().toLowerCase()); console.worlds.remove(console.worlds.indexOf(handle)); diff --git a/CraftBukkit-Patches/0022-Remove-o-Option.patch b/CraftBukkit-Patches/0022-Remove-o-Option.patch index 143f935..176b1f4 100644 --- a/CraftBukkit-Patches/0022-Remove-o-Option.patch +++ b/CraftBukkit-Patches/0022-Remove-o-Option.patch @@ -1,4 +1,4 @@ -From afc2bc63a5b6ddf07e88b38976ac0878fc319655 Mon Sep 17 00:00:00 2001 +From 6edd9fd1c7bd9f906f4668e9be876fc679557e08 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 19 May 2013 18:29:48 +1000 Subject: [PATCH] Remove -o Option @@ -6,10 +6,10 @@ Subject: [PATCH] Remove -o Option Serves no purpose other than to confuse users. diff --git a/src/main/java/net/minecraft/server/PropertyManager.java b/src/main/java/net/minecraft/server/PropertyManager.java -index 00b35a1..622d6e0 100644 +index dbb329c..0549a0f 100644 --- a/src/main/java/net/minecraft/server/PropertyManager.java +++ b/src/main/java/net/minecraft/server/PropertyManager.java -@@ -53,7 +53,7 @@ public class PropertyManager { +@@ -54,7 +54,7 @@ public class PropertyManager { } private T getOverride(String name, T value) { diff --git a/CraftBukkit-Patches/0023-Recipe-Deconstruction.patch b/CraftBukkit-Patches/0023-Recipe-Deconstruction.patch index 2ca5445..cf4efce 100644 --- a/CraftBukkit-Patches/0023-Recipe-Deconstruction.patch +++ b/CraftBukkit-Patches/0023-Recipe-Deconstruction.patch @@ -1,4 +1,4 @@ -From 40d1381d320d2c39caa8503827a2ede8eb239739 Mon Sep 17 00:00:00 2001 +From 157bffdb7ed6d858ad9055e98c25ba08488126eb Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 1 Jun 2013 16:34:38 +1000 Subject: [PATCH] Recipe Deconstruction @@ -6,21 +6,21 @@ Subject: [PATCH] Recipe Deconstruction Some non API methods contributed by Asphodan to allow recipe deconstruction. diff --git a/src/main/java/net/minecraft/server/IRecipe.java b/src/main/java/net/minecraft/server/IRecipe.java -index d2655a0..e5b116f 100644 +index babf604..e7aba17 100644 --- a/src/main/java/net/minecraft/server/IRecipe.java +++ b/src/main/java/net/minecraft/server/IRecipe.java @@ -13,4 +13,6 @@ public interface IRecipe { ItemStack[] b(InventoryCrafting inventorycrafting); - + org.bukkit.inventory.Recipe toBukkitRecipe(); // CraftBukkit + + java.util.List getIngredients(); // Spigot } diff --git a/src/main/java/net/minecraft/server/ShapedRecipes.java b/src/main/java/net/minecraft/server/ShapedRecipes.java -index 407cbfb..6c3de90 100644 +index a387e2d..825b6d9 100644 --- a/src/main/java/net/minecraft/server/ShapedRecipes.java +++ b/src/main/java/net/minecraft/server/ShapedRecipes.java -@@ -11,7 +11,7 @@ public class ShapedRecipes implements IRecipe { +@@ -10,7 +10,7 @@ public class ShapedRecipes implements IRecipe { private final int width; private final int height; private final ItemStack[] items; @@ -29,9 +29,9 @@ index 407cbfb..6c3de90 100644 private boolean e; public ShapedRecipes(int i, int j, ItemStack[] aitemstack, ItemStack itemstack) { -@@ -171,4 +171,11 @@ public class ShapedRecipes implements IRecipe { - this.e = true; - return this; +@@ -165,4 +165,11 @@ public class ShapedRecipes implements IRecipe { + public int a() { + return this.width * this.height; } + + // Spigot start @@ -42,7 +42,7 @@ index 407cbfb..6c3de90 100644 + // Spigot end } diff --git a/src/main/java/net/minecraft/server/ShapelessRecipes.java b/src/main/java/net/minecraft/server/ShapelessRecipes.java -index 2d243d1..b6106db 100644 +index b13dcb7..aa0e9aa 100644 --- a/src/main/java/net/minecraft/server/ShapelessRecipes.java +++ b/src/main/java/net/minecraft/server/ShapelessRecipes.java @@ -12,7 +12,7 @@ import org.bukkit.craftbukkit.inventory.CraftShapelessRecipe; @@ -51,9 +51,9 @@ index 2d243d1..b6106db 100644 - private final ItemStack result; + public final ItemStack result; // Spigot - private final List ingredients; + private final List ingredients; - public ShapelessRecipes(ItemStack itemstack, List list) { + public ShapelessRecipes(ItemStack itemstack, List list) { @@ -90,4 +90,11 @@ public class ShapelessRecipes implements IRecipe { public int a() { return this.ingredients.size(); diff --git a/CraftBukkit-Patches/0024-Implement-Arrow-API.patch b/CraftBukkit-Patches/0024-Implement-Arrow-API.patch index 193d387..3301e7d 100644 --- a/CraftBukkit-Patches/0024-Implement-Arrow-API.patch +++ b/CraftBukkit-Patches/0024-Implement-Arrow-API.patch @@ -1,4 +1,4 @@ -From 3e06be67869c79404fc040387909522a02228088 Mon Sep 17 00:00:00 2001 +From 094f53bc27b0ac80ef7d0142db127b8ffecfd12d Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 2 Jun 2013 15:16:05 +1000 Subject: [PATCH] Implement Arrow API diff --git a/CraftBukkit-Patches/0025-Hopper-Customisations.patch b/CraftBukkit-Patches/0025-Hopper-Customisations.patch index db18d17..0c73b37 100644 --- a/CraftBukkit-Patches/0025-Hopper-Customisations.patch +++ b/CraftBukkit-Patches/0025-Hopper-Customisations.patch @@ -1,4 +1,4 @@ -From 204f59aebe0db94c0d288bc4fc3b2cf4c25ffb47 Mon Sep 17 00:00:00 2001 +From a1f5331d1b57175a29474e6c1465db9c9d56b5af Mon Sep 17 00:00:00 2001 From: erocs Date: Sun, 8 Sep 2013 12:06:15 -0700 Subject: [PATCH] Hopper Customisations @@ -6,10 +6,10 @@ Subject: [PATCH] Hopper Customisations Allows editing hopper cooldowns and amount transferred per tick. diff --git a/src/main/java/net/minecraft/server/TileEntityHopper.java b/src/main/java/net/minecraft/server/TileEntityHopper.java -index 7fe1f46..f4dc9c7 100644 +index 72d067a..b3bf687 100644 --- a/src/main/java/net/minecraft/server/TileEntityHopper.java +++ b/src/main/java/net/minecraft/server/TileEntityHopper.java -@@ -193,12 +193,18 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU +@@ -194,12 +194,18 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU } if (flag) { @@ -29,16 +29,16 @@ index 7fe1f46..f4dc9c7 100644 return false; } else { return false; -@@ -252,7 +258,7 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU +@@ -253,7 +259,7 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU // ItemStack itemstack1 = addItem(iinventory, this.splitStack(i, 1), enumdirection); - + // CraftBukkit start - Call event when pushing items into other inventories - CraftItemStack oitemstack = CraftItemStack.asCraftMirror(this.splitStack(i, 1)); + CraftItemStack oitemstack = CraftItemStack.asCraftMirror(this.splitStack(i, world.spigotConfig.hopperAmount)); // Spigot Inventory destinationInventory; // Have to special case large chests as they work oddly -@@ -266,9 +272,10 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU +@@ -267,9 +273,10 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU this.getWorld().getServer().getPluginManager().callEvent(event); if (event.isCancelled()) { this.setItem(i, itemstack); @@ -50,7 +50,7 @@ index 7fe1f46..f4dc9c7 100644 ItemStack itemstack1 = addItem(iinventory, CraftItemStack.asNMSCopy(event.getItem()), enumdirection); if (itemstack1 == null || itemstack1.count == 0) { -@@ -280,7 +287,7 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU +@@ -281,7 +288,7 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU // CraftBukkit end return true; } @@ -59,7 +59,7 @@ index 7fe1f46..f4dc9c7 100644 this.setItem(i, itemstack); } } -@@ -386,7 +393,7 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU +@@ -391,7 +398,7 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU ItemStack itemstack1 = itemstack.cloneItemStack(); // ItemStack itemstack2 = addItem(ihopper, iinventory.splitStack(i, 1), (EnumDirection) null); // CraftBukkit start - Call event on collection of items from inventories into the hopper @@ -68,24 +68,24 @@ index 7fe1f46..f4dc9c7 100644 Inventory sourceInventory; // Have to special case large chests as they work oddly -@@ -403,13 +410,14 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU +@@ -408,13 +415,13 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU iinventory.setItem(i, itemstack1); if (ihopper instanceof TileEntityHopper) { - ((TileEntityHopper) ihopper).d(8); // Delay hopper checks + ((TileEntityHopper) ihopper).d(ihopper.getWorld().spigotConfig.hopperTransfer); // Spigot } else if (ihopper instanceof EntityMinecartHopper) { -- ((EntityMinecartHopper) ihopper).l(4); // Delay hopper minecart checks -+ ((EntityMinecartHopper) ihopper).l(ihopper.getWorld().spigotConfig.hopperTransfer / 2); // Spigot +- ((EntityMinecartHopper) ihopper).m(4); // Delay hopper minecart checks ++ ((EntityMinecartHopper) ihopper).m(ihopper.getWorld().spigotConfig.hopperTransfer / 2); // Spigot } - +- return false; } + int origCount = event.getItem().getAmount(); // Spigot ItemStack itemstack2 = addItem(ihopper, CraftItemStack.asNMSCopy(event.getItem()), null); if (itemstack2 == null || itemstack2.count == 0) { -@@ -421,6 +429,7 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU +@@ -426,6 +433,7 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU // CraftBukkit end return true; } @@ -93,7 +93,7 @@ index 7fe1f46..f4dc9c7 100644 iinventory.setItem(i, itemstack1); } -@@ -511,7 +520,7 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU +@@ -515,7 +523,7 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU TileEntityHopper tileentityhopper = (TileEntityHopper) iinventory; if (tileentityhopper.o()) { diff --git a/CraftBukkit-Patches/0026-Implement-SpawnerSpawnEvent.patch b/CraftBukkit-Patches/0026-Implement-SpawnerSpawnEvent.patch index 8b6dd8c..68c0dcc 100644 --- a/CraftBukkit-Patches/0026-Implement-SpawnerSpawnEvent.patch +++ b/CraftBukkit-Patches/0026-Implement-SpawnerSpawnEvent.patch @@ -1,4 +1,4 @@ -From 9666b42d5eb9966872cd10ef837ed0b1b28a2e03 Mon Sep 17 00:00:00 2001 +From 7c6666fbd139bdc6e3b1171158299b8b00429488 Mon Sep 17 00:00:00 2001 From: Andy Shulman Date: Mon, 15 Apr 2013 20:06:37 -0500 Subject: [PATCH] Implement SpawnerSpawnEvent. @@ -6,7 +6,7 @@ Subject: [PATCH] Implement SpawnerSpawnEvent. Adds BUKKIT-267 diff --git a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java -index e597d77..4bbd288 100644 +index 8d668fa..41cfde8 100644 --- a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java +++ b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java @@ -4,7 +4,11 @@ import com.google.common.collect.Lists; @@ -48,10 +48,11 @@ index e597d77..4bbd288 100644 if (entity.world != null && flag) { entity.world.addEntity(entity2, CreatureSpawnEvent.SpawnReason.SPAWNER); // CraftBukkit } -@@ -171,7 +185,12 @@ public abstract class MobSpawnerAbstract { +@@ -173,8 +187,12 @@ public abstract class MobSpawnerAbstract { + if (entity instanceof EntityInsentient) { + ((EntityInsentient) entity).prepare(entity.world.E(new BlockPosition(entity)), (GroupDataEntity) null); } - } else if (entity instanceof EntityInsentient && entity.world != null && flag) { // CraftBukkit - EntityLiving -> EntityInsentient - ((EntityInsentient) entity).prepare(entity.world.E(new BlockPosition(entity)), (GroupDataEntity) null); +- - entity.world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); // CraftBukkit + // Spigot start - call SpawnerSpawnEvent, abort if cancelled + SpawnerSpawnEvent event = CraftEventFactory.callSpawnerSpawnEvent(entity, this.b().getX(), this.b().getY(), this.b().getZ()); @@ -63,7 +64,7 @@ index e597d77..4bbd288 100644 return entity; diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 60e2a4f..dd0cab1 100644 +index 7da317c..218fd1f 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -18,6 +18,7 @@ import org.bukkit.Statistic.Type; diff --git a/CraftBukkit-Patches/0027-Firework-Meta-Crash-Fix.patch b/CraftBukkit-Patches/0027-Firework-Meta-Crash-Fix.patch index 1952af3..96afccc 100644 --- a/CraftBukkit-Patches/0027-Firework-Meta-Crash-Fix.patch +++ b/CraftBukkit-Patches/0027-Firework-Meta-Crash-Fix.patch @@ -1,4 +1,4 @@ -From b0b821c92e898f1c6d82743abdd81cbe4327bb22 Mon Sep 17 00:00:00 2001 +From a10a1d12c71d080ddbd92db34de2bfe18a2fbc78 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 15 Jun 2013 21:34:48 +1000 Subject: [PATCH] Firework Meta Crash Fix diff --git a/CraftBukkit-Patches/0028-Allow-Disabling-of-Command-Logging.patch b/CraftBukkit-Patches/0028-Allow-Disabling-of-Command-Logging.patch index 35f0226..336df77 100644 --- a/CraftBukkit-Patches/0028-Allow-Disabling-of-Command-Logging.patch +++ b/CraftBukkit-Patches/0028-Allow-Disabling-of-Command-Logging.patch @@ -1,16 +1,16 @@ -From 2f99b2e55476a79e54bbcffb4f3c092594fbdff4 Mon Sep 17 00:00:00 2001 +From 13dc74685ff2babf3e4f068a0b1c519f515b884c Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 21 Jun 2013 18:01:29 +1000 Subject: [PATCH] Allow Disabling of Command Logging diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 5c24333..6a96c37 100644 +index 20e09e5..9afd03f 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -1045,6 +1045,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -1063,6 +1063,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList + private void handleCommand(String s) { org.bukkit.craftbukkit.SpigotTimings.playerCommandTimer.startTiming(); // Spigot - // CraftBukkit start - whole method + if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot this.c.info(this.player.getName() + " issued server command: " + s); diff --git a/CraftBukkit-Patches/0029-Allow-Disabling-of-Command-TabComplete.patch b/CraftBukkit-Patches/0029-Allow-Disabling-of-Command-TabComplete.patch index fbc2780..b9af956 100644 --- a/CraftBukkit-Patches/0029-Allow-Disabling-of-Command-TabComplete.patch +++ b/CraftBukkit-Patches/0029-Allow-Disabling-of-Command-TabComplete.patch @@ -1,14 +1,14 @@ -From 429ac7e3e8cbd6989d11f6d34f280899b1f98748 Mon Sep 17 00:00:00 2001 +From 68e5367a039241677a762a1af4b76c90a5ef6e53 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 21 Jun 2013 18:05:54 +1000 Subject: [PATCH] Allow Disabling of Command TabComplete diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index fa8ae87..3c83b5a 100644 +index 58d52d8..905573c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1557,6 +1557,13 @@ public final class CraftServer implements Server { +@@ -1571,6 +1571,13 @@ public final class CraftServer implements Server { } public List tabCompleteCommand(Player player, String message) { diff --git a/CraftBukkit-Patches/0030-Configurable-Messages.patch b/CraftBukkit-Patches/0030-Configurable-Messages.patch index e136601..baf1e12 100644 --- a/CraftBukkit-Patches/0030-Configurable-Messages.patch +++ b/CraftBukkit-Patches/0030-Configurable-Messages.patch @@ -1,32 +1,32 @@ -From 204d50e3026b1e3efb49eab3519636ef96ae5253 Mon Sep 17 00:00:00 2001 +From 2697f8ced8ddd323cd47b8c74799dc4dafedc5a8 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 21 Jun 2013 19:21:58 +1000 Subject: [PATCH] Configurable Messages diff --git a/src/main/java/net/minecraft/server/HandshakeListener.java b/src/main/java/net/minecraft/server/HandshakeListener.java -index f8bac48..e036bc6 100644 +index 98f40f1..8f421f3 100644 --- a/src/main/java/net/minecraft/server/HandshakeListener.java +++ b/src/main/java/net/minecraft/server/HandshakeListener.java @@ -62,11 +62,11 @@ public class HandshakeListener implements PacketHandshakingInListener { // CraftBukkit end if (packethandshakinginsetprotocol.b() > 47) { -- chatcomponenttext = new ChatComponentText("Outdated server! I\'m still on 1.8"); -+ chatcomponenttext = new ChatComponentText( java.text.MessageFormat.format( org.spigotmc.SpigotConfig.outdatedServerMessage, "1.8" ) ); // Spigot +- chatcomponenttext = new ChatComponentText("Outdated server! I\'m still on 1.8.3"); ++ chatcomponenttext = new ChatComponentText( java.text.MessageFormat.format( org.spigotmc.SpigotConfig.outdatedServerMessage, "1.8.3" ) ); // Spigot this.b.handle(new PacketLoginOutDisconnect(chatcomponenttext)); this.b.close(chatcomponenttext); } else if (packethandshakinginsetprotocol.b() < 47) { -- chatcomponenttext = new ChatComponentText("Outdated client! Please use 1.8"); -+ chatcomponenttext = new ChatComponentText(java.text.MessageFormat.format( org.spigotmc.SpigotConfig.outdatedClientMessage, "1.8" ) ); // Spigot +- chatcomponenttext = new ChatComponentText("Outdated client! Please use 1.8.3"); ++ chatcomponenttext = new ChatComponentText( java.text.MessageFormat.format( org.spigotmc.SpigotConfig.outdatedClientMessage, "1.8.3" ) ); // Spigot this.b.handle(new PacketLoginOutDisconnect(chatcomponenttext)); this.b.close(chatcomponenttext); } else { diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java -index f10cfa9..b29820c 100644 +index 64b755d..e396288 100644 --- a/src/main/java/net/minecraft/server/PlayerList.java +++ b/src/main/java/net/minecraft/server/PlayerList.java -@@ -388,7 +388,7 @@ public abstract class PlayerList { +@@ -418,7 +418,7 @@ public abstract class PlayerList { event.disallow(PlayerLoginEvent.Result.KICK_BANNED, s); } else if (!this.isWhitelisted(gameprofile)) { // return "You are not white-listed on this server!"; @@ -35,7 +35,7 @@ index f10cfa9..b29820c 100644 } else if (getIPBans().isBanned(socketaddress) && !getIPBans().get(socketaddress).hasExpired()) { IpBanEntry ipbanentry = this.l.get(socketaddress); -@@ -402,7 +402,7 @@ public abstract class PlayerList { +@@ -432,7 +432,7 @@ public abstract class PlayerList { } else { // return this.players.size() >= this.maxPlayers ? "The server is full!" : null; if (this.players.size() >= this.maxPlayers) { @@ -45,7 +45,7 @@ index f10cfa9..b29820c 100644 } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 3c83b5a..18e736a 100644 +index 905573c..f0453e6 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -628,11 +628,7 @@ public final class CraftServer implements Server { diff --git a/CraftBukkit-Patches/0031-Allow-Disabling-of-Random-Lighting-Updates.patch b/CraftBukkit-Patches/0031-Allow-Disabling-of-Random-Lighting-Updates.patch index 3d8a3d6..0f3429e 100644 --- a/CraftBukkit-Patches/0031-Allow-Disabling-of-Random-Lighting-Updates.patch +++ b/CraftBukkit-Patches/0031-Allow-Disabling-of-Random-Lighting-Updates.patch @@ -1,14 +1,14 @@ -From 8a7bd05a3ec26589a239e62d70cccc005095c620 Mon Sep 17 00:00:00 2001 +From 1efa3a7b78341805aff195eedcce8094fca56682 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 22 Jun 2013 16:12:02 +1000 Subject: [PATCH] Allow Disabling of Random Lighting Updates diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 9e65ff7..2e715b3 100644 +index 92b25f0..ab971cf 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -982,7 +982,7 @@ public class Chunk { +@@ -1011,7 +1011,7 @@ public class Chunk { } this.p = true; @@ -18,10 +18,10 @@ index 9e65ff7..2e715b3 100644 } diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index d85479b..dad3d19 100644 +index 6a975d3..8fc5c71 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -2017,7 +2017,7 @@ public abstract class World implements IBlockAccess { +@@ -2071,7 +2071,7 @@ public abstract class World implements IBlockAccess { } this.methodProfiler.a("playerCheckLight"); diff --git a/CraftBukkit-Patches/0032-Properly-Close-Inventories.patch b/CraftBukkit-Patches/0032-Properly-Close-Inventories.patch index 170fe06..0eb97a7 100644 --- a/CraftBukkit-Patches/0032-Properly-Close-Inventories.patch +++ b/CraftBukkit-Patches/0032-Properly-Close-Inventories.patch @@ -1,4 +1,4 @@ -From e59b9c6809c13422cad7fe4d06bef09ed52b0451 Mon Sep 17 00:00:00 2001 +From 1aee6e97da0635b4c3df6e10290b98ee9ae03850 Mon Sep 17 00:00:00 2001 From: md_5 Date: Thu, 27 Jun 2013 17:26:09 +1000 Subject: [PATCH] Properly Close Inventories @@ -6,10 +6,10 @@ Subject: [PATCH] Properly Close Inventories Properly close inventories when unloading and switching worlds. diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 2e715b3..49eab04 100644 +index ab971cf..5f07158 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -796,6 +796,18 @@ public class Chunk { +@@ -820,6 +820,18 @@ public class Chunk { while (iterator.hasNext()) { TileEntity tileentity = (TileEntity) iterator.next(); @@ -28,7 +28,7 @@ index 2e715b3..49eab04 100644 this.world.b(tileentity); } -@@ -806,6 +818,18 @@ public class Chunk { +@@ -830,6 +842,18 @@ public class Chunk { java.util.Iterator iter = newList.iterator(); while (iter.hasNext()) { Entity entity = iter.next(); @@ -48,10 +48,10 @@ index 2e715b3..49eab04 100644 // Do not pass along players, as doing so can get them stuck outside of time. // (which for example disables inventory icon updates and prevents block breaking) diff --git a/src/main/java/net/minecraft/server/EntityMinecartContainer.java b/src/main/java/net/minecraft/server/EntityMinecartContainer.java -index ab1b3a5..bf882de 100644 +index 712018a..17b5714 100644 --- a/src/main/java/net/minecraft/server/EntityMinecartContainer.java +++ b/src/main/java/net/minecraft/server/EntityMinecartContainer.java -@@ -124,6 +124,12 @@ public abstract class EntityMinecartContainer extends EntityMinecartAbstract imp +@@ -127,6 +127,12 @@ public abstract class EntityMinecartContainer extends EntityMinecartAbstract imp } public void c(int i) { diff --git a/CraftBukkit-Patches/0033-Disallow-Interaction-With-Self.patch b/CraftBukkit-Patches/0033-Disallow-Interaction-With-Self.patch index 108bddc..689f335 100644 --- a/CraftBukkit-Patches/0033-Disallow-Interaction-With-Self.patch +++ b/CraftBukkit-Patches/0033-Disallow-Interaction-With-Self.patch @@ -1,14 +1,14 @@ -From 53f8e931acadf9c42c011e9fa779829ac8810d1a Mon Sep 17 00:00:00 2001 +From 35548f6d4f97ccfd58b93c6758e5bcf5b07c12ca Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 28 Jun 2013 19:52:54 +1000 Subject: [PATCH] Disallow Interaction With Self diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 6a96c37..1a2c8f8 100644 +index 9afd03f..a868a19 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -1179,6 +1179,13 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -1198,6 +1198,13 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList PlayerConnectionUtils.ensureMainThread(packetplayinuseentity, this, this.player.u()); WorldServer worldserver = this.minecraftServer.getWorldServer(this.player.dimension); Entity entity = packetplayinuseentity.a((World) worldserver); diff --git a/CraftBukkit-Patches/0034-Entity-Mount-and-Dismount-Events.patch b/CraftBukkit-Patches/0034-Entity-Mount-and-Dismount-Events.patch index 6a8c5bd..27938d8 100644 --- a/CraftBukkit-Patches/0034-Entity-Mount-and-Dismount-Events.patch +++ b/CraftBukkit-Patches/0034-Entity-Mount-and-Dismount-Events.patch @@ -1,14 +1,14 @@ -From 6c0d9ff5e5043eccd210f7f838a9ad0c80e57f77 Mon Sep 17 00:00:00 2001 +From b52a30de982b0edca30416c5075cc4228fb76cf2 Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 2 Jul 2013 20:32:49 +1000 Subject: [PATCH] Entity Mount and Dismount Events diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 9dcddb1..8f7d865 100644 +index ebdcaab..5cf3833 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1537,6 +1537,7 @@ public abstract class Entity implements ICommandListener { +@@ -1540,6 +1540,7 @@ public abstract class Entity implements ICommandListener { } } // CraftBukkit end @@ -16,7 +16,7 @@ index 9dcddb1..8f7d865 100644 this.setPositionRotation(this.vehicle.locX, this.vehicle.getBoundingBox().b + (double) this.vehicle.length, this.vehicle.locZ, this.yaw, this.pitch); this.vehicle.passenger = null; } -@@ -1571,6 +1572,18 @@ public abstract class Entity implements ICommandListener { +@@ -1574,6 +1575,18 @@ public abstract class Entity implements ICommandListener { } } // CraftBukkit end diff --git a/CraftBukkit-Patches/0035-Prevent-Ghost-Players-Caused-by-Plugins.patch b/CraftBukkit-Patches/0035-Prevent-Ghost-Players-Caused-by-Plugins.patch index 7e780ef..ec81443 100644 --- a/CraftBukkit-Patches/0035-Prevent-Ghost-Players-Caused-by-Plugins.patch +++ b/CraftBukkit-Patches/0035-Prevent-Ghost-Players-Caused-by-Plugins.patch @@ -1,4 +1,4 @@ -From e8cfec1c1b15854e523489b9fa2a79980ce613cb Mon Sep 17 00:00:00 2001 +From d2dadf6c02543ca71f6f8b85e5cb2f6046dbbc12 Mon Sep 17 00:00:00 2001 From: Alex Ciuba Date: Tue, 11 Jun 2013 15:23:03 -0400 Subject: [PATCH] Prevent Ghost Players Caused by Plugins @@ -6,10 +6,10 @@ Subject: [PATCH] Prevent Ghost Players Caused by Plugins Check if the player is still connected after firing event. Fixes BUKKIT-4327 diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java -index b29820c..74091d5 100644 +index e396288..f24739d 100644 --- a/src/main/java/net/minecraft/server/PlayerList.java +++ b/src/main/java/net/minecraft/server/PlayerList.java -@@ -515,6 +515,11 @@ public abstract class PlayerList { +@@ -548,6 +548,11 @@ public abstract class PlayerList { Player respawnPlayer = cserver.getPlayer(entityplayer1); PlayerRespawnEvent respawnEvent = new PlayerRespawnEvent(respawnPlayer, location, isBedSpawn); cserver.getPluginManager().callEvent(respawnEvent); diff --git a/CraftBukkit-Patches/0036-Plug-World-Unload-Memory-Leak.patch b/CraftBukkit-Patches/0036-Plug-World-Unload-Memory-Leak.patch index d4413f1..b604faa 100644 --- a/CraftBukkit-Patches/0036-Plug-World-Unload-Memory-Leak.patch +++ b/CraftBukkit-Patches/0036-Plug-World-Unload-Memory-Leak.patch @@ -1,19 +1,19 @@ -From 4fd9b5495f938f14b6b258b1ede36292ed333fb5 Mon Sep 17 00:00:00 2001 +From b61ff25808179d81c140fdff162e6e84f1e43fab Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 3 Aug 2013 19:02:59 +1000 Subject: [PATCH] Plug World Unload Memory Leak diff --git a/src/main/java/net/minecraft/server/BlockRedstoneTorch.java b/src/main/java/net/minecraft/server/BlockRedstoneTorch.java -index 2cdf7d3..6acfb62 100644 +index 125cefe..6a7e7b3 100644 --- a/src/main/java/net/minecraft/server/BlockRedstoneTorch.java +++ b/src/main/java/net/minecraft/server/BlockRedstoneTorch.java @@ -10,7 +10,7 @@ import org.bukkit.event.block.BlockRedstoneEvent; // CraftBukkit public class BlockRedstoneTorch extends BlockTorch { -- private static Map b = Maps.newHashMap(); -+ private static Map b = new java.util.WeakHashMap(); // Spigot +- private static Map> b = Maps.newHashMap(); ++ private static Map> b = new java.util.WeakHashMap(); // Spigot private final boolean isOn; private boolean a(World world, BlockPosition blockposition, boolean flag) { diff --git a/CraftBukkit-Patches/0037-Player-Collision-API.patch b/CraftBukkit-Patches/0037-Player-Collision-API.patch index 69d53cd..fb0f5d7 100644 --- a/CraftBukkit-Patches/0037-Player-Collision-API.patch +++ b/CraftBukkit-Patches/0037-Player-Collision-API.patch @@ -1,11 +1,11 @@ -From b0a27025f00b99c90fd70dc7cfac95cde1b1e591 Mon Sep 17 00:00:00 2001 +From a3aa58034bd77397a293f64aab4e88ac804917a2 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 3 Aug 2013 19:27:07 +1000 Subject: [PATCH] Player Collision API diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index 7eb41e1..b65c225 100644 +index 55340ab..96ed585 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -427,6 +427,7 @@ public abstract class EntityHuman extends EntityLiving { @@ -25,20 +25,20 @@ index 7eb41e1..b65c225 100644 } diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 89374d7..5edefa0 100644 +index e90ff2f..ca0430d 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -1657,7 +1657,7 @@ public abstract class EntityLiving extends Entity { - protected void bK() { - List list = this.world.getEntities(this, this.getBoundingBox().grow(0.20000000298023224D, 0.0D, 0.20000000298023224D)); +@@ -1670,7 +1670,7 @@ public abstract class EntityLiving extends Entity { + } + })); -- if (list != null && !list.isEmpty()) { -+ if (this.ad() && list != null && !list.isEmpty()) { // Spigot: Add this.ad() condition +- if (!list.isEmpty()) { ++ if (this.ad() && !list.isEmpty()) { // Spigot: Add this.ad() condition for (int i = 0; i < list.size(); ++i) { Entity entity = (Entity) list.get(i); - + diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 1a51836..5c961ba 100644 +index aefed46..657f3f5 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -62,6 +62,21 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -64,7 +64,7 @@ index 1a51836..5c961ba 100644 public EntityPlayer(MinecraftServer minecraftserver, WorldServer worldserver, GameProfile gameprofile, PlayerInteractManager playerinteractmanager) { super(worldserver, gameprofile); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 9268686..dfef8cb 100644 +index 5dafb80..3dc0255 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1318,6 +1318,19 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/CraftBukkit-Patches/0038-Fully-Disable-Snooper-When-Not-Required.patch b/CraftBukkit-Patches/0038-Fully-Disable-Snooper-When-Not-Required.patch index 6e14b5a..f4379aa 100644 --- a/CraftBukkit-Patches/0038-Fully-Disable-Snooper-When-Not-Required.patch +++ b/CraftBukkit-Patches/0038-Fully-Disable-Snooper-When-Not-Required.patch @@ -1,25 +1,25 @@ -From 19a5fa4ce25bee4eb0dd9975b6f8343c5d381885 Mon Sep 17 00:00:00 2001 +From 4bd1dd657b32a94cbc065a2189d77e5a7779732f Mon Sep 17 00:00:00 2001 From: agentk20 Date: Sat, 3 Aug 2013 19:28:48 +1000 Subject: [PATCH] Fully Disable Snooper When Not Required diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 76591fb..6ba24ac 100644 +index 61abf67..b7a8a4c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -636,11 +636,11 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs - this.g[this.ticks % 100] = System.nanoTime() - i; +@@ -657,11 +657,11 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs + this.h[this.ticks % 100] = System.nanoTime() - i; this.methodProfiler.b(); this.methodProfiler.a("snooper"); -- if (!this.m.d() && this.ticks > 100) { -+ if (getSnooperEnabled() && !this.m.d() && this.ticks > 100) { // Spigot - this.m.a(); +- if (!this.n.d() && this.ticks > 100) { ++ if (getSnooperEnabled() && !this.n.d() && this.ticks > 100) { // Spigot + this.n.a(); } - if (this.ticks % 6000 == 0) { + if (getSnooperEnabled() && this.ticks % 6000 == 0) { // Spigot - this.m.b(); + this.n.b(); } -- diff --git a/CraftBukkit-Patches/0039-Add-Getter-for-Entity-Invulnerability.patch b/CraftBukkit-Patches/0039-Add-Getter-for-Entity-Invulnerability.patch index 534290e..04499ce 100644 --- a/CraftBukkit-Patches/0039-Add-Getter-for-Entity-Invulnerability.patch +++ b/CraftBukkit-Patches/0039-Add-Getter-for-Entity-Invulnerability.patch @@ -1,4 +1,4 @@ -From f4f4d9c8ac1cb7b1da1ec97f5251050c59b23b87 Mon Sep 17 00:00:00 2001 +From 49d817977c0e7021a305e98a9df7d3575f1c298e Mon Sep 17 00:00:00 2001 From: DerFlash Date: Sat, 3 Aug 2013 19:53:48 +1000 Subject: [PATCH] Add Getter for Entity Invulnerability diff --git a/CraftBukkit-Patches/0040-Cap-Minimum-Player-Speed.patch b/CraftBukkit-Patches/0040-Cap-Minimum-Player-Speed.patch index 122d8e9..ab63fdf 100644 --- a/CraftBukkit-Patches/0040-Cap-Minimum-Player-Speed.patch +++ b/CraftBukkit-Patches/0040-Cap-Minimum-Player-Speed.patch @@ -1,11 +1,11 @@ -From eb503329561dc70abbcfc1e3166af1232927499e Mon Sep 17 00:00:00 2001 +From 8ac4f210d0dd342a3569297679026acda3533ba2 Mon Sep 17 00:00:00 2001 From: md_5 Date: Mon, 5 Aug 2013 20:17:20 +1000 Subject: [PATCH] Cap Minimum Player Speed diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index dfef8cb..348b6e2 100644 +index 3dc0255..027ca4d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1182,7 +1182,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/CraftBukkit-Patches/0041-Update-Inventory-and-Health-for-PlayerConsumeItemEve.patch b/CraftBukkit-Patches/0041-Update-Inventory-and-Health-for-PlayerConsumeItemEve.patch index 8ed8c82..57a4cdd 100644 --- a/CraftBukkit-Patches/0041-Update-Inventory-and-Health-for-PlayerConsumeItemEve.patch +++ b/CraftBukkit-Patches/0041-Update-Inventory-and-Health-for-PlayerConsumeItemEve.patch @@ -1,11 +1,11 @@ -From ff433233faf63a2d234c73c6e54aef64e3a463e0 Mon Sep 17 00:00:00 2001 +From 68e60e378b8ac8c3799012194a71f417f9726159 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 14 Sep 2013 10:16:38 +1000 Subject: [PATCH] Update Inventory and Health for PlayerConsumeItemEvent diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index b65c225..eaa5879 100644 +index 96ed585..2004d67 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -300,6 +300,10 @@ public abstract class EntityHuman extends EntityLiving { diff --git a/CraftBukkit-Patches/0042-Call-EntityChangeBlockEvent-for-Fire-Arrows-hitting-.patch b/CraftBukkit-Patches/0042-Call-EntityChangeBlockEvent-for-Fire-Arrows-hitting-.patch index 819b344..afb867e 100644 --- a/CraftBukkit-Patches/0042-Call-EntityChangeBlockEvent-for-Fire-Arrows-hitting-.patch +++ b/CraftBukkit-Patches/0042-Call-EntityChangeBlockEvent-for-Fire-Arrows-hitting-.patch @@ -1,4 +1,4 @@ -From a4bd9805229e2bf5fe1484c7396c372969a85977 Mon Sep 17 00:00:00 2001 +From 83d50f5bf12811352b54643722ddfc0348a5c658 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,7 +6,7 @@ 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 cc61759..7443873 100644 +index f15b199..40c0a87 100644 --- a/src/main/java/net/minecraft/server/BlockTNT.java +++ b/src/main/java/net/minecraft/server/BlockTNT.java @@ -77,6 +77,11 @@ public class BlockTNT extends Block { diff --git a/CraftBukkit-Patches/0043-Allow-Disabling-of-1.6.3-Structure-Saving.patch b/CraftBukkit-Patches/0043-Allow-Disabling-of-1.6.3-Structure-Saving.patch index 83bd474..a3105fb 100644 --- a/CraftBukkit-Patches/0043-Allow-Disabling-of-1.6.3-Structure-Saving.patch +++ b/CraftBukkit-Patches/0043-Allow-Disabling-of-1.6.3-Structure-Saving.patch @@ -1,14 +1,14 @@ -From ed80edcc31f4e5b9ca408c38dac3b1fafdd78484 Mon Sep 17 00:00:00 2001 +From 9fe0e6a0eb3e48eb3b1668c800cba2b45dd052a4 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 49b7aa1..ecab5d1 100644 +index 0bced98..bb1a11e 100644 --- a/src/main/java/net/minecraft/server/StructureGenerator.java +++ b/src/main/java/net/minecraft/server/StructureGenerator.java -@@ -171,7 +171,15 @@ public abstract class StructureGenerator extends WorldGenBase { +@@ -195,7 +195,15 @@ public abstract class StructureGenerator extends WorldGenBase { private void a(World world) { if (this.d == null) { diff --git a/CraftBukkit-Patches/0044-Item-Despawn-Rate.patch b/CraftBukkit-Patches/0044-Item-Despawn-Rate.patch index 36b9d58..dff5b30 100644 --- a/CraftBukkit-Patches/0044-Item-Despawn-Rate.patch +++ b/CraftBukkit-Patches/0044-Item-Despawn-Rate.patch @@ -1,19 +1,19 @@ -From 867901c33416a8b9b4522a83a95db7b15dc928b0 Mon Sep 17 00:00:00 2001 +From 37d47654d1062f881edd92496fb62005521b8127 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 22 Sep 2013 19:10:53 +1000 Subject: [PATCH] Item Despawn Rate diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java -index 652b803..81bba48 100644 +index 65a03df..d6d83fe 100644 --- a/src/main/java/net/minecraft/server/EntityItem.java +++ b/src/main/java/net/minecraft/server/EntityItem.java -@@ -108,7 +108,7 @@ public class EntityItem extends Entity { - // Craftbukkit end */ +@@ -109,7 +109,7 @@ public class EntityItem extends Entity { + this.W(); -- if (!this.world.isStatic && this.age >= 6000) { -+ if (!this.world.isStatic && this.age >= world.spigotConfig.itemDespawnRate) { // Spigot +- if (!this.world.isClientSide && this.age >= 6000) { ++ if (!this.world.isClientSide && this.age >= world.spigotConfig.itemDespawnRate) { // Spigot // CraftBukkit start - fire ItemDespawnEvent if (org.bukkit.craftbukkit.event.CraftEventFactory.callItemDespawnEvent(this).isCancelled()) { this.age = 0; diff --git a/CraftBukkit-Patches/0045-Don-t-Special-Case-X-Move-Value.patch b/CraftBukkit-Patches/0045-Don-t-Special-Case-X-Move-Value.patch index c5db4d2..bc1b49e 100644 --- a/CraftBukkit-Patches/0045-Don-t-Special-Case-X-Move-Value.patch +++ b/CraftBukkit-Patches/0045-Don-t-Special-Case-X-Move-Value.patch @@ -1,14 +1,14 @@ -From 72172cc543759a0be6d71c589a72a54d87234db2 Mon Sep 17 00:00:00 2001 +From b1712073a0f13630cfb261c29299ccc1328d8d02 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 6 Oct 2013 17:36:28 +1100 Subject: [PATCH] Don't Special Case X Move Value diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 1a2c8f8..c30e96e 100644 +index a868a19..9fa0e67 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -108,6 +108,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -109,6 +109,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList private float lastPitch = Float.MAX_VALUE; private float lastYaw = Float.MAX_VALUE; private boolean justTeleported = false; @@ -16,7 +16,7 @@ index 1a2c8f8..c30e96e 100644 public CraftPlayer getPlayer() { return (this.player == null) ? null : (CraftPlayer) this.player.getBukkitEntity(); -@@ -209,6 +210,18 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -219,6 +220,18 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList } // CraftBukkit start - fire PlayerMoveEvent Player player = this.getPlayer(); @@ -35,7 +35,7 @@ index 1a2c8f8..c30e96e 100644 Location from = new Location(player.getWorld(), lastPosX, lastPosY, lastPosZ, lastYaw, lastPitch); // Get the Players previous Event location. Location to = player.getLocation().clone(); // Start off the To location as the Players current location. -@@ -237,7 +250,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -247,7 +260,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList this.lastPitch = to.getPitch(); // Skip the first time we do this diff --git a/CraftBukkit-Patches/0046-Implement-respawn-API.patch b/CraftBukkit-Patches/0046-Implement-respawn-API.patch index 01c0d11..4fafb2f 100644 --- a/CraftBukkit-Patches/0046-Implement-respawn-API.patch +++ b/CraftBukkit-Patches/0046-Implement-respawn-API.patch @@ -1,11 +1,11 @@ -From c49b50666a4ad0e35112cdd1a3e5904e749ebe79 Mon Sep 17 00:00:00 2001 +From e779bd6a7bcec77b4cafc43b02749891a844c57f Mon Sep 17 00:00:00 2001 From: ninja- Date: Tue, 8 Oct 2013 14:34:49 +0200 Subject: [PATCH] Implement respawn API. diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 348b6e2..272f7df 100644 +index 027ca4d..00043de 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1331,6 +1331,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/CraftBukkit-Patches/0047-Arrow-Despawn-Rate.patch b/CraftBukkit-Patches/0047-Arrow-Despawn-Rate.patch index 3336391..f11c6c6 100644 --- a/CraftBukkit-Patches/0047-Arrow-Despawn-Rate.patch +++ b/CraftBukkit-Patches/0047-Arrow-Despawn-Rate.patch @@ -1,22 +1,22 @@ -From 447d33d7376eae95e7a492d463c8e326bd6528e6 Mon Sep 17 00:00:00 2001 +From c9433b9cc24018bc3fb0c172a7792aebc8bbf536 Mon Sep 17 00:00:00 2001 From: md_5 Date: Mon, 14 Oct 2013 19:20:10 +1100 Subject: [PATCH] Arrow Despawn Rate diff --git a/src/main/java/net/minecraft/server/EntityArrow.java b/src/main/java/net/minecraft/server/EntityArrow.java -index 6e5450a..ead7eef 100644 +index 01c66e3..46f6374 100644 --- a/src/main/java/net/minecraft/server/EntityArrow.java +++ b/src/main/java/net/minecraft/server/EntityArrow.java @@ -155,7 +155,7 @@ public class EntityArrow extends Entity implements IProjectile { if (block == this.g && i == this.h) { - ++this.ap; -- if (this.ap >= 1200) { -+ if (this.ap >= world.spigotConfig.arrowDespawnRate) { // Spigot - First int after shooter + ++this.ar; +- if (this.ar >= 1200) { ++ if (this.ar >= world.spigotConfig.arrowDespawnRate) { // Spigot - First int after shooter this.die(); } - + } else { diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java index a5786ea..af0c4b2 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java diff --git a/CraftBukkit-Patches/0048-Fix-packed-ice-generation.patch b/CraftBukkit-Patches/0048-Fix-packed-ice-generation.patch index aa519d8..b2a5408 100644 --- a/CraftBukkit-Patches/0048-Fix-packed-ice-generation.patch +++ b/CraftBukkit-Patches/0048-Fix-packed-ice-generation.patch @@ -1,25 +1,25 @@ -From 2bde17cffe96cc498b18d34c312cb4716abb52a6 Mon Sep 17 00:00:00 2001 +From ac1c585ef55565675089fe2fd8e73955f6f94532 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 1 Dec 2013 17:52:14 +1100 Subject: [PATCH] Fix packed ice generation diff --git a/src/main/java/net/minecraft/server/WorldGenPackedIce2.java b/src/main/java/net/minecraft/server/WorldGenPackedIce2.java -index 38e9602..3d08a82 100644 +index dcd085a..3d08a82 100644 --- a/src/main/java/net/minecraft/server/WorldGenPackedIce2.java +++ b/src/main/java/net/minecraft/server/WorldGenPackedIce2.java @@ -40,13 +40,13 @@ public class WorldGenPackedIce2 extends WorldGenerator { Block block = world.getType(blockposition.a(i1, k, j1)).getBlock(); if (block.getMaterial() == Material.AIR || block == Blocks.DIRT || block == Blocks.SNOW || block == Blocks.ICE) { -- this.a(world, blockposition.a(i1, k, j1), Blocks.PACKED_ICE); +- this.a(world, blockposition.a(i1, k, j1), Blocks.PACKED_ICE.getBlockData()); + world.setTypeUpdate(blockposition.a(i1, k, j1), Blocks.PACKED_ICE.getBlockData()); // Spigot } if (k != 0 && l > 1) { block = world.getType(blockposition.a(i1, -k, j1)).getBlock(); if (block.getMaterial() == Material.AIR || block == Blocks.DIRT || block == Blocks.SNOW || block == Blocks.ICE) { -- this.a(world, blockposition.a(i1, -k, j1), Blocks.PACKED_ICE); +- this.a(world, blockposition.a(i1, -k, j1), Blocks.PACKED_ICE.getBlockData()); + world.setTypeUpdate(blockposition.a(i1, -k, j1), Blocks.PACKED_ICE.getBlockData()); // Spigot } } @@ -28,7 +28,7 @@ index 38e9602..3d08a82 100644 Block block1 = world.getType(blockposition1).getBlock(); if (block1.getMaterial() == Material.AIR || block1 == Blocks.DIRT || block1 == Blocks.SNOW || block1 == Blocks.ICE || block1 == Blocks.PACKED_ICE) { -- this.a(world, blockposition1, Blocks.PACKED_ICE); +- this.a(world, blockposition1, Blocks.PACKED_ICE.getBlockData()); + world.setTypeUpdate(blockposition1, Blocks.PACKED_ICE.getBlockData()); // Spigot blockposition1 = blockposition1.down(); --l1; diff --git a/CraftBukkit-Patches/0049-Watchdog-Thread.patch b/CraftBukkit-Patches/0049-Watchdog-Thread.patch index 588c381..6ae940c 100644 --- a/CraftBukkit-Patches/0049-Watchdog-Thread.patch +++ b/CraftBukkit-Patches/0049-Watchdog-Thread.patch @@ -1,35 +1,35 @@ -From a14b8d2bee4eff2100f569903a2c6d2427edb216 Mon Sep 17 00:00:00 2001 +From 6e9323fac10fa52d12de38ee61b2aaccc1ff3bec Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 5 Aug 2014 17:20:19 +0100 Subject: [PATCH] Watchdog Thread. diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index 390c6eb..240c909 100644 +index 1e682e9..ae9e255 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java -@@ -225,7 +225,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -271,7 +271,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer } // CraftBukkit end -- if (this.aQ() > 0L) { -+ if (false && this.aQ() > 0L) { // Spigot - disable - Thread thread = new Thread(new ThreadWatchdog(this)); +- if (this.aR() > 0L) { ++ if (false && this.aR() > 0L) { // Spigot - disable + Thread thread1 = new Thread(new ThreadWatchdog(this)); - thread.setName("Server Watchdog"); + thread1.setName("Server Watchdog"); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 6ba24ac..84f27a3 100644 +index b7a8a4c..bcdd918 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -546,6 +546,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -567,6 +567,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs this.a(crashreport); } finally { try { + org.spigotmc.WatchdogThread.doStop(); - this.stop(); this.isStopped = true; + this.stop(); } catch (Throwable throwable1) { -@@ -646,6 +647,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -667,6 +668,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs this.methodProfiler.b(); this.methodProfiler.b(); @@ -39,7 +39,7 @@ index 6ba24ac..84f27a3 100644 } diff --git a/src/main/java/org/spigotmc/RestartCommand.java b/src/main/java/org/spigotmc/RestartCommand.java new file mode 100644 -index 0000000..429c258 +index 0000000..429c2580 --- /dev/null +++ b/src/main/java/org/spigotmc/RestartCommand.java @@ -0,0 +1,124 @@ diff --git a/CraftBukkit-Patches/0050-Clear-Flower-Pot-on-Drop.patch b/CraftBukkit-Patches/0050-Clear-Flower-Pot-on-Drop.patch index ddb400f..6c5bec4 100644 --- a/CraftBukkit-Patches/0050-Clear-Flower-Pot-on-Drop.patch +++ b/CraftBukkit-Patches/0050-Clear-Flower-Pot-on-Drop.patch @@ -1,14 +1,14 @@ -From 289e193139e4dad6f37e57888e17a8471ed414cd Mon Sep 17 00:00:00 2001 +From 5498542d2f34ab0718066833f973fb2b4f9de6b8 Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 3 Dec 2013 11:07:48 +1100 Subject: [PATCH] Clear Flower Pot on Drop diff --git a/src/main/java/net/minecraft/server/BlockFlowerPot.java b/src/main/java/net/minecraft/server/BlockFlowerPot.java -index d1275a3..0fdfdde 100644 +index fd77047..ce46138 100644 --- a/src/main/java/net/minecraft/server/BlockFlowerPot.java +++ b/src/main/java/net/minecraft/server/BlockFlowerPot.java -@@ -90,6 +90,7 @@ public class BlockFlowerPot extends BlockContainer { +@@ -95,6 +95,7 @@ public class BlockFlowerPot extends BlockContainer { if (tileentityflowerpot != null && tileentityflowerpot.b() != null) { a(world, blockposition, new ItemStack(tileentityflowerpot.b(), 1, tileentityflowerpot.c())); diff --git a/CraftBukkit-Patches/0051-Fix-some-chunks-not-being-sent-to-the-client.patch b/CraftBukkit-Patches/0051-Fix-some-chunks-not-being-sent-to-the-client.patch index 406fa42..6d09c3e 100644 --- a/CraftBukkit-Patches/0051-Fix-some-chunks-not-being-sent-to-the-client.patch +++ b/CraftBukkit-Patches/0051-Fix-some-chunks-not-being-sent-to-the-client.patch @@ -1,14 +1,14 @@ -From 922374f93b9f94b020d7a461940293f8864390c0 Mon Sep 17 00:00:00 2001 +From d57ae577426a74a98f9b776aceffad9ae6297e9f Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Mon, 2 Dec 2013 23:42:09 +0000 Subject: [PATCH] Fix some chunks not being sent to the client diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 49eab04..372d90f 100644 +index 5f07158..b2ce05f 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -1024,7 +1024,15 @@ public class Chunk { +@@ -1053,7 +1053,15 @@ public class Chunk { } public boolean isReady() { diff --git a/CraftBukkit-Patches/0052-Fix-Broken-Async-Chat.patch b/CraftBukkit-Patches/0052-Fix-Broken-Async-Chat.patch index a2f030e..6527d1f 100644 --- a/CraftBukkit-Patches/0052-Fix-Broken-Async-Chat.patch +++ b/CraftBukkit-Patches/0052-Fix-Broken-Async-Chat.patch @@ -1,24 +1,22 @@ -From cafc66c0b55ab4064e949c5a70e16c2b5385c6fc Mon Sep 17 00:00:00 2001 +From add640221c6a7a23228de32c3147fb2f0daa4cbd Mon Sep 17 00:00:00 2001 From: md_5 Date: Thu, 5 Dec 2013 13:55:53 +1100 Subject: [PATCH] Fix Broken Async Chat diff --git a/src/main/java/net/minecraft/server/PacketPlayInChat.java b/src/main/java/net/minecraft/server/PacketPlayInChat.java -index 8e1740d..cb614ef 100644 +index 0ab90f3..18358b4 100644 --- a/src/main/java/net/minecraft/server/PacketPlayInChat.java +++ b/src/main/java/net/minecraft/server/PacketPlayInChat.java -@@ -30,7 +30,26 @@ public class PacketPlayInChat implements Packet { - return this.a; +@@ -24,7 +24,24 @@ public class PacketPlayInChat implements Packet { + packetdataserializer.a(this.a); } -- public void a(PacketListener packetlistener) { +- public void a(PacketListenerPlayIn packetlistenerplayin) { + // Spigot Start + private static final java.util.concurrent.ExecutorService executors = java.util.concurrent.Executors.newCachedThreadPool( + new com.google.common.util.concurrent.ThreadFactoryBuilder().setDaemon( true ).setNameFormat( "Async Chat Thread - #%d" ).build() ); -+ @Override -+ public void a(final PacketListener packetlistener) -+ { ++ public void a(final PacketListenerPlayIn packetlistenerplayin) { + if ( !a.startsWith("/") ) + { + executors.submit( new Runnable() @@ -27,15 +25,15 @@ index 8e1740d..cb614ef 100644 + @Override + public void run() + { -+ PacketPlayInChat.this.a( (PacketListenerPlayIn) packetlistener ); ++ packetlistenerplayin.a( PacketPlayInChat.this ); + } + } ); + return; + } + // Spigot End - this.a((PacketListenerPlayIn) packetlistener); + packetlistenerplayin.a(this); } - } + -- 2.1.0 diff --git a/CraftBukkit-Patches/0053-Orebfuscator.patch b/CraftBukkit-Patches/0053-Orebfuscator.patch index a259222..eedee25 100644 --- a/CraftBukkit-Patches/0053-Orebfuscator.patch +++ b/CraftBukkit-Patches/0053-Orebfuscator.patch @@ -1,11 +1,11 @@ -From c58f0fe1ac9b081c3f140ea23bbde86dc31fe435 Mon Sep 17 00:00:00 2001 +From 178ba754758e09c17d82ac88d52f0f86591f7142 Mon Sep 17 00:00:00 2001 From: md_5 Date: Thu, 16 May 2013 18:51:05 +1000 Subject: [PATCH] Orebfuscator diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java -index 22dc42d..fd78677 100644 +index 9e0d5ad..ce91553 100644 --- a/src/main/java/net/minecraft/server/EntityFallingBlock.java +++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java @@ -60,6 +60,7 @@ public class EntityFallingBlock extends Entity { @@ -13,22 +13,22 @@ index 22dc42d..fd78677 100644 if (this.world.getType(blockposition).getBlock() == block && !CraftEventFactory.callEntityChangeBlockEvent(this, blockposition.getX(), blockposition.getY(), blockposition.getZ(), Blocks.AIR, 0).isCancelled()) { this.world.setAir(blockposition); + world.spigotConfig.antiXrayInstance.updateNearbyBlocks(world, blockposition); // Spigot - } else if (!this.world.isStatic) { + } else if (!this.world.isClientSide) { this.die(); return; -@@ -84,6 +85,7 @@ public class EntityFallingBlock extends Entity { - return; - } - this.world.setTypeAndData(blockposition, this.block, 3); -+ world.spigotConfig.antiXrayInstance.updateNearbyBlocks(world, blockposition); // Spigot - // CraftBukkit end - if (block instanceof BlockFalling) { - ((BlockFalling) block).a_(this.world, blockposition); +@@ -85,6 +86,7 @@ public class EntityFallingBlock extends Entity { + return; + } + this.world.setTypeAndData(blockposition, this.block, 3); ++ world.spigotConfig.antiXrayInstance.updateNearbyBlocks(world, blockposition); // Spigot + // CraftBukkit end + if (block instanceof BlockFalling) { + ((BlockFalling) block).a_(this.world, blockposition); diff --git a/src/main/java/net/minecraft/server/Explosion.java b/src/main/java/net/minecraft/server/Explosion.java -index 85bd257..19759e8 100644 +index 71c78bd..4564877 100644 --- a/src/main/java/net/minecraft/server/Explosion.java +++ b/src/main/java/net/minecraft/server/Explosion.java -@@ -198,6 +198,7 @@ public class Explosion { +@@ -194,6 +194,7 @@ public class Explosion { blockposition = (BlockPosition) iterator.next(); Block block = this.world.getType(blockposition).getBlock(); @@ -37,40 +37,40 @@ index 85bd257..19759e8 100644 double d0 = (double) ((float) blockposition.getX() + this.world.random.nextFloat()); double d1 = (double) ((float) blockposition.getY() + this.world.random.nextFloat()); diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java -index e24d3ae..e106a1f 100644 +index 6e368f5..58c0275 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java +++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java -@@ -18,6 +18,7 @@ public class PacketPlayOutMapChunk implements Packet { +@@ -19,6 +19,7 @@ public class PacketPlayOutMapChunk implements Packet { this.b = chunk.locZ; this.d = flag; this.c = a(chunk, flag, !chunk.getWorld().worldProvider.o(), i); + chunk.world.spigotConfig.antiXrayInstance.obfuscateSync(chunk.locX, chunk.locZ, c.b, c.a, chunk.world); } - public void a(PacketDataSerializer packetdataserializer) { + public void a(PacketDataSerializer packetdataserializer) throws IOException { diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java -index 8af5e1f..9df0d53 100644 +index 63b90f7..10c0e34 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java +++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java -@@ -8,6 +8,7 @@ public class PacketPlayOutMapChunkBulk implements Packet { +@@ -9,6 +9,7 @@ public class PacketPlayOutMapChunkBulk implements Packet private int[] b; - private ChunkMap[] c; + private PacketPlayOutMapChunk.ChunkMap[] c; private boolean d; + private World world; // Spigot public PacketPlayOutMapChunkBulk() {} -@@ -27,7 +28,8 @@ public class PacketPlayOutMapChunkBulk implements Packet { +@@ -28,7 +29,8 @@ public class PacketPlayOutMapChunkBulk implements Packet this.b[j] = chunk.locZ; - this.c[j] = chunkmap; + this.c[j] = packetplayoutmapchunk_chunkmap; } - + + world = ((Chunk) list.get(0)).getWorld(); // Spigot } - public void a(PacketDataSerializer packetdataserializer) { -@@ -67,6 +69,7 @@ public class PacketPlayOutMapChunkBulk implements Packet { + public void a(PacketDataSerializer packetdataserializer) throws IOException { +@@ -68,6 +70,7 @@ public class PacketPlayOutMapChunkBulk implements Packet } for (i = 0; i < this.a.length; ++i) { @@ -79,7 +79,7 @@ index 8af5e1f..9df0d53 100644 } diff --git a/src/main/java/net/minecraft/server/PlayerInteractManager.java b/src/main/java/net/minecraft/server/PlayerInteractManager.java -index b2431d9..7b469e1 100644 +index 0301fba..7a84a95 100644 --- a/src/main/java/net/minecraft/server/PlayerInteractManager.java +++ b/src/main/java/net/minecraft/server/PlayerInteractManager.java @@ -197,6 +197,7 @@ public class PlayerInteractManager { @@ -91,10 +91,10 @@ index b2431d9..7b469e1 100644 public void a(BlockPosition blockposition) { diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index dad3d19..f6b1dac 100644 +index 8fc5c71..a4fda33 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -460,6 +460,7 @@ public abstract class World implements IBlockAccess { +@@ -494,6 +494,7 @@ public abstract class World implements IBlockAccess { this.d(blockposition.up(), block); this.d(blockposition.north(), block); this.d(blockposition.south(), block); @@ -102,7 +102,7 @@ index dad3d19..f6b1dac 100644 } public void a(BlockPosition blockposition, Block block, EnumDirection enumdirection) { -@@ -673,9 +674,16 @@ public abstract class World implements IBlockAccess { +@@ -719,9 +720,16 @@ public abstract class World implements IBlockAccess { return this.worldProvider.p()[this.getLightLevel(blockposition)]; } diff --git a/CraftBukkit-Patches/0054-Optimize-DataWatcher.patch b/CraftBukkit-Patches/0054-Optimize-DataWatcher.patch index d95f703..d7740fd 100644 --- a/CraftBukkit-Patches/0054-Optimize-DataWatcher.patch +++ b/CraftBukkit-Patches/0054-Optimize-DataWatcher.patch @@ -1,4 +1,4 @@ -From c1863e84d7af9c8e328c2928f3db960ce2d7215a Mon Sep 17 00:00:00 2001 +From 13c622659e5b7767c3240d9ab5f260252a5226b6 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 13 Dec 2013 11:45:47 +1100 Subject: [PATCH] Optimize DataWatcher @@ -6,69 +6,69 @@ Subject: [PATCH] Optimize DataWatcher Use primitive orientated collections, as well as more effective copies across collections. diff --git a/src/main/java/net/minecraft/server/DataWatcher.java b/src/main/java/net/minecraft/server/DataWatcher.java -index e21e68d..966d737 100644 +index 2bf9196..aa46c28 100644 --- a/src/main/java/net/minecraft/server/DataWatcher.java +++ b/src/main/java/net/minecraft/server/DataWatcher.java -@@ -14,8 +14,13 @@ public class DataWatcher { +@@ -15,8 +15,13 @@ public class DataWatcher { private final Entity a; private boolean b = true; -- private static final Map c = Maps.newHashMap(); -- private final Map d = Maps.newHashMap(); +- private static final Map, Integer> c = Maps.newHashMap(); +- private final Map d = Maps.newHashMap(); + // Spigot Start + private static final gnu.trove.map.TObjectIntMap classToId = new gnu.trove.map.hash.TObjectIntHashMap( 10, 0.5f, -1 ); + private final gnu.trove.map.TIntObjectMap dataValues = new gnu.trove.map.hash.TIntObjectHashMap( 10, 0.5f, -1 ); + // These exist as an attempt at backwards compatability for (broken) NMS plugins -+ private static final Map c = gnu.trove.TDecorators.wrap( classToId ); -+ private final Map d = gnu.trove.TDecorators.wrap( dataValues ); ++ private static final Map, Integer> c = gnu.trove.TDecorators.wrap( classToId ); ++ private final Map d = gnu.trove.TDecorators.wrap( dataValues ); + // Spigot End private boolean e; private ReadWriteLock f = new ReentrantReadWriteLock(); -@@ -24,19 +29,19 @@ public class DataWatcher { +@@ -25,19 +30,19 @@ public class DataWatcher { } - public void a(int i, Object object) { -- Integer integer = (Integer) DataWatcher.c.get(object.getClass()); -+ int integer = classToId.get(object.getClass()); // Spigot + public void a(int i, T t0) { +- Integer integer = (Integer) DataWatcher.c.get(t0.getClass()); ++ int integer = classToId.get(t0.getClass()); // Spigot - if (integer == null) { + if (integer == -1) { // Spigot - throw new IllegalArgumentException("Unknown data type: " + object.getClass()); + throw new IllegalArgumentException("Unknown data type: " + t0.getClass()); } else if (i > 31) { throw new IllegalArgumentException("Data value id is too big with " + i + "! (Max is " + 31 + ")"); - } else if (this.d.containsKey(Integer.valueOf(i))) { + } else if (this.dataValues.containsKey(i)) { // Spigot throw new IllegalArgumentException("Duplicate id value for " + i + "!"); } else { -- WatchableObject watchableobject = new WatchableObject(integer.intValue(), i, object); -+ WatchableObject watchableobject = new WatchableObject(integer, i, object); // Spigot +- DataWatcher.WatchableObject datawatcher_watchableobject = new DataWatcher.WatchableObject(integer.intValue(), i, t0); ++ DataWatcher.WatchableObject datawatcher_watchableobject = new DataWatcher.WatchableObject(integer, i, t0); // Spigot this.f.writeLock().lock(); -- this.d.put(Integer.valueOf(i), watchableobject); -+ this.dataValues.put(i, watchableobject); // Spigot +- this.d.put(Integer.valueOf(i), datawatcher_watchableobject); ++ this.dataValues.put(i, datawatcher_watchableobject); // Spigot this.f.writeLock().unlock(); this.b = false; } -@@ -46,7 +51,7 @@ public class DataWatcher { - WatchableObject watchableobject = new WatchableObject(j, i, (Object) null); +@@ -47,7 +52,7 @@ public class DataWatcher { + DataWatcher.WatchableObject datawatcher_watchableobject = new DataWatcher.WatchableObject(j, i, (Object) null); this.f.writeLock().lock(); -- this.d.put(Integer.valueOf(i), watchableobject); -+ this.dataValues.put(i, watchableobject); // Spigot +- this.d.put(Integer.valueOf(i), datawatcher_watchableobject); ++ this.dataValues.put(i, datawatcher_watchableobject); // Spigot this.f.writeLock().unlock(); this.b = false; } -@@ -81,7 +86,7 @@ public class DataWatcher { - WatchableObject watchableobject; +@@ -82,7 +87,7 @@ public class DataWatcher { + DataWatcher.WatchableObject datawatcher_watchableobject; try { -- watchableobject = (WatchableObject) this.d.get(Integer.valueOf(i)); -+ watchableobject = (WatchableObject) this.dataValues.get(i); // Spigot +- datawatcher_watchableobject = (DataWatcher.WatchableObject) this.d.get(Integer.valueOf(i)); ++ datawatcher_watchableobject = (DataWatcher.WatchableObject) this.dataValues.get(i); // Spigot } catch (Throwable throwable) { CrashReport crashreport = CrashReport.a(throwable, "Getting synched entity data"); CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Synched entity data"); -@@ -138,7 +143,7 @@ public class DataWatcher { +@@ -139,7 +144,7 @@ public class DataWatcher { if (this.e) { this.f.readLock().lock(); @@ -76,29 +76,29 @@ index e21e68d..966d737 100644 + Iterator iterator = this.dataValues.valueCollection().iterator(); // Spigot while (iterator.hasNext()) { - WatchableObject watchableobject = (WatchableObject) iterator.next(); -@@ -162,7 +167,7 @@ public class DataWatcher { + DataWatcher.WatchableObject datawatcher_watchableobject = (DataWatcher.WatchableObject) iterator.next(); +@@ -163,7 +168,7 @@ public class DataWatcher { - public void a(PacketDataSerializer packetdataserializer) { + public void a(PacketDataSerializer packetdataserializer) throws IOException { this.f.readLock().lock(); - Iterator iterator = this.d.values().iterator(); + Iterator iterator = this.dataValues.valueCollection().iterator(); // Spigot while (iterator.hasNext()) { - WatchableObject watchableobject = (WatchableObject) iterator.next(); -@@ -175,18 +180,11 @@ public class DataWatcher { + DataWatcher.WatchableObject datawatcher_watchableobject = (DataWatcher.WatchableObject) iterator.next(); +@@ -176,18 +181,11 @@ public class DataWatcher { } - public List c() { + public List c() { - ArrayList arraylist = null; + ArrayList arraylist = Lists.newArrayList(); // Spigot this.f.readLock().lock(); -- WatchableObject watchableobject; +- DataWatcher.WatchableObject datawatcher_watchableobject; - -- for (Iterator iterator = this.d.values().iterator(); iterator.hasNext(); arraylist.add(watchableobject)) { -- watchableobject = (WatchableObject) iterator.next(); +- for (Iterator iterator = this.d.values().iterator(); iterator.hasNext(); arraylist.add(datawatcher_watchableobject)) { +- datawatcher_watchableobject = (DataWatcher.WatchableObject) iterator.next(); - if (arraylist == null) { - arraylist = Lists.newArrayList(); - } @@ -107,7 +107,7 @@ index e21e68d..966d737 100644 this.f.readLock().unlock(); return arraylist; -@@ -309,13 +307,15 @@ public class DataWatcher { +@@ -310,14 +308,16 @@ public class DataWatcher { } static { @@ -130,7 +130,8 @@ index e21e68d..966d737 100644 + classToId.put(Vector3f.class, 7); + // Spigot End } - } + + public static class WatchableObject { -- 2.1.0 diff --git a/CraftBukkit-Patches/0055-Fire-PreLogin-Events-in-Offline-Mode.patch b/CraftBukkit-Patches/0055-Fire-PreLogin-Events-in-Offline-Mode.patch index 226b0a8..72a10af 100644 --- a/CraftBukkit-Patches/0055-Fire-PreLogin-Events-in-Offline-Mode.patch +++ b/CraftBukkit-Patches/0055-Fire-PreLogin-Events-in-Offline-Mode.patch @@ -1,14 +1,22 @@ -From a2254fd7c9d928ddc9c9ef5cc74feac8ff0d0ee0 Mon Sep 17 00:00:00 2001 +From aefb2679c827a044b2b9d8522b6b0040de3f727f Mon Sep 17 00:00:00 2001 From: md_5 Date: Wed, 18 Dec 2013 13:32:10 +1100 Subject: [PATCH] Fire PreLogin Events in Offline Mode diff --git a/src/main/java/net/minecraft/server/LoginListener.java b/src/main/java/net/minecraft/server/LoginListener.java -index ba2b912..a59ea80 100644 +index 50beec2..42905fd 100644 --- a/src/main/java/net/minecraft/server/LoginListener.java +++ b/src/main/java/net/minecraft/server/LoginListener.java -@@ -60,10 +60,23 @@ public class LoginListener implements PacketLoginInListener, IUpdatePlayerListBo +@@ -13,6 +13,7 @@ import java.util.Arrays; + import java.util.Random; + import java.util.UUID; + import java.util.concurrent.atomic.AtomicInteger; ++import java.util.logging.Level; + import javax.crypto.SecretKey; + import org.apache.commons.lang3.Validate; + import org.apache.logging.log4j.LogManager; +@@ -80,10 +81,23 @@ public class LoginListener implements PacketLoginInListener, IUpdatePlayerListBo } @@ -32,128 +40,99 @@ index ba2b912..a59ea80 100644 // CraftBukkit start - fire PlayerLoginEvent EntityPlayer s = this.server.getPlayerList().attemptLogin(this, this.i, hostname); -@@ -98,7 +111,7 @@ public class LoginListener implements PacketLoginInListener, IUpdatePlayerListBo - this.g = EnumProtocolState.KEY; +@@ -133,7 +147,14 @@ public class LoginListener implements PacketLoginInListener, IUpdatePlayerListBo + this.g = LoginListener.EnumProtocolState.KEY; this.networkManager.handle(new PacketLoginOutEncryptionBegin(this.j, this.server.P().getPublic(), this.e)); } else { -- this.g = EnumProtocolState.READY_TO_ACCEPT; -+ (new ThreadPlayerLookupUUID(this, "User Authenticator #" + b.incrementAndGet())).start(); // Spigot +- this.g = LoginListener.EnumProtocolState.READY_TO_ACCEPT; ++ // Spigot start ++ try { ++ new LoginHandler().fireEvents(); ++ } catch (Exception ex) { ++ disconnect("Failed to verify username!"); ++ server.server.getLogger().log(java.util.logging.Level.WARNING, "Exception verifying " + i.getName(), ex); ++ } ++ // Spigot end } } -diff --git a/src/main/java/net/minecraft/server/ThreadPlayerLookupUUID.java b/src/main/java/net/minecraft/server/ThreadPlayerLookupUUID.java -index 34843be..021cb59 100644 ---- a/src/main/java/net/minecraft/server/ThreadPlayerLookupUUID.java -+++ b/src/main/java/net/minecraft/server/ThreadPlayerLookupUUID.java -@@ -24,50 +24,19 @@ class ThreadPlayerLookupUUID extends Thread { - GameProfile gameprofile = LoginListener.b(this.a); +@@ -162,6 +183,40 @@ public class LoginListener implements PacketLoginInListener, IUpdatePlayerListBo + return; + } - try { -+ // Spigot Start -+ if ( !LoginListener.a( this.a ).getOnlineMode() ) -+ { -+ a.initUUID(); -+ fireLoginEvents(); -+ return; -+ } -+ // Spigot End - String s = (new BigInteger(MinecraftEncryption.a(LoginListener.c(this.a), LoginListener.a(this.a).P().getPublic(), LoginListener.d(this.a)))).toString(16); - - LoginListener.a(this.a, LoginListener.a(this.a).aB().hasJoinedServer(new GameProfile((UUID) null, gameprofile.getName()), s)); - if (LoginListener.b(this.a) != null) { -- // CraftBukkit start - fire PlayerPreLoginEvent -- if (!this.a.networkManager.g()) { -- return; -- } -- -- String playerName = LoginListener.b(this.a).getName(); -- java.net.InetAddress address = ((java.net.InetSocketAddress) a.networkManager.getSocketAddress()).getAddress(); -- java.util.UUID uniqueId = LoginListener.b(this.a).getId(); -- final org.bukkit.craftbukkit.CraftServer server = LoginListener.a(this.a).server; -- -- AsyncPlayerPreLoginEvent asyncEvent = new AsyncPlayerPreLoginEvent(playerName, address, uniqueId); -- server.getPluginManager().callEvent(asyncEvent); -- -- if (PlayerPreLoginEvent.getHandlerList().getRegisteredListeners().length != 0) { -- final PlayerPreLoginEvent event = new PlayerPreLoginEvent(playerName, address, uniqueId); -- if (asyncEvent.getResult() != PlayerPreLoginEvent.Result.ALLOWED) { -- event.disallow(asyncEvent.getResult(), asyncEvent.getKickMessage()); -- } -- Waitable waitable = new Waitable() { -- @Override -- protected PlayerPreLoginEvent.Result evaluate() { -- server.getPluginManager().callEvent(event); -- return event.getResult(); -- }}; -- -- LoginListener.a(this.a).processQueue.add(waitable); -- if (waitable.get() != PlayerPreLoginEvent.Result.ALLOWED) { -- this.a.disconnect(event.getKickMessage()); -- return; -- } -- } else { -- if (asyncEvent.getLoginResult() != AsyncPlayerPreLoginEvent.Result.ALLOWED) { -- this.a.disconnect(asyncEvent.getKickMessage()); -- return; -- } -- } -- // CraftBukkit end -- -- LoginListener.e().info("UUID of player " + LoginListener.b(this.a).getName() + " is " + LoginListener.b(this.a).getId()); -- LoginListener.a(this.a, EnumProtocolState.READY_TO_ACCEPT); -+ fireLoginEvents(); // Spigot - } else if (LoginListener.a(this.a).S()) { - LoginListener.e().warn("Failed to verify username but will let them in anyway!"); - LoginListener.a(this.a, this.a.a(gameprofile)); -@@ -93,4 +62,48 @@ class ThreadPlayerLookupUUID extends Thread { - } - - } ++ new LoginHandler().fireEvents(); ++ } else if (LoginListener.this.server.S()) { ++ LoginListener.c.warn("Failed to verify username but will let them in anyway!"); ++ LoginListener.this.i = LoginListener.this.a(gameprofile); ++ LoginListener.this.g = LoginListener.EnumProtocolState.READY_TO_ACCEPT; ++ } else { ++ LoginListener.this.disconnect("Failed to verify username!"); ++ LoginListener.c.error("Username \'" + gameprofile.getName() + "\' tried to join with an invalid session"); // CraftBukkit - fix null pointer ++ } ++ } catch (AuthenticationUnavailableException authenticationunavailableexception) { ++ if (LoginListener.this.server.S()) { ++ LoginListener.c.warn("Authentication servers are down but will let them in anyway!"); ++ LoginListener.this.i = LoginListener.this.a(gameprofile); ++ LoginListener.this.g = LoginListener.EnumProtocolState.READY_TO_ACCEPT; ++ } else { ++ LoginListener.this.disconnect("Authentication servers are down. Please try again later, sorry!"); ++ LoginListener.c.error("Couldn\'t verify username because servers are unavailable"); ++ } ++ // CraftBukkit start - catch all exceptions ++ } catch (Exception exception) { ++ disconnect("Failed to verify username!"); ++ server.server.getLogger().log(java.util.logging.Level.WARNING, "Exception verifying " + gameprofile.getName(), exception); ++ // CraftBukkit end ++ } + -+ private void fireLoginEvents() throws Exception -+ { -+ // CraftBukkit start - fire PlayerPreLoginEvent -+ if (!this.a.networkManager.g()) { -+ return; ++ } ++ }).start(); + } -+ -+ String playerName = LoginListener.b(this.a).getName(); -+ java.net.InetAddress address = ((java.net.InetSocketAddress) a.networkManager.getSocketAddress()).getAddress(); -+ java.util.UUID uniqueId = LoginListener.b(this.a).getId(); -+ final org.bukkit.craftbukkit.CraftServer server = LoginListener.a(this.a).server; -+ -+ AsyncPlayerPreLoginEvent asyncEvent = new AsyncPlayerPreLoginEvent(playerName, address, uniqueId); -+ server.getPluginManager().callEvent(asyncEvent); -+ -+ if (PlayerPreLoginEvent.getHandlerList().getRegisteredListeners().length != 0) { -+ final PlayerPreLoginEvent event = new PlayerPreLoginEvent(playerName, address, uniqueId); -+ if (asyncEvent.getResult() != PlayerPreLoginEvent.Result.ALLOWED) { -+ event.disallow(asyncEvent.getResult(), asyncEvent.getKickMessage()); -+ } -+ Waitable waitable = new Waitable() { -+ @Override -+ protected PlayerPreLoginEvent.Result evaluate() { -+ server.getPluginManager().callEvent(event); -+ return event.getResult(); -+ }}; -+ -+ LoginListener.a(this.a).processQueue.add(waitable); -+ if (waitable.get() != PlayerPreLoginEvent.Result.ALLOWED) { -+ this.a.disconnect(event.getKickMessage()); -+ return; -+ } -+ } else { -+ if (asyncEvent.getLoginResult() != AsyncPlayerPreLoginEvent.Result.ALLOWED) { -+ this.a.disconnect(asyncEvent.getKickMessage()); -+ return; -+ } -+ } -+ // CraftBukkit end -+ -+ LoginListener.e().info("UUID of player " + LoginListener.b(this.a).getName() + " is " + LoginListener.b(this.a).getId()); -+ LoginListener.a(this.a, EnumProtocolState.READY_TO_ACCEPT); + } - } ++ ++ // Spigot start ++ public class LoginHandler { ++ ++ public void fireEvents() throws Exception { + String playerName = i.getName(); + java.net.InetAddress address = ((java.net.InetSocketAddress) networkManager.getSocketAddress()).getAddress(); + java.util.UUID uniqueId = i.getId(); +@@ -196,34 +251,9 @@ public class LoginListener implements PacketLoginInListener, IUpdatePlayerListBo + // CraftBukkit end + LoginListener.c.info("UUID of player " + LoginListener.this.i.getName() + " is " + LoginListener.this.i.getId()); + LoginListener.this.g = LoginListener.EnumProtocolState.READY_TO_ACCEPT; +- } else if (LoginListener.this.server.S()) { +- LoginListener.c.warn("Failed to verify username but will let them in anyway!"); +- LoginListener.this.i = LoginListener.this.a(gameprofile); +- LoginListener.this.g = LoginListener.EnumProtocolState.READY_TO_ACCEPT; +- } else { +- LoginListener.this.disconnect("Failed to verify username!"); +- LoginListener.c.error("Username \'" + gameprofile.getName() + "\' tried to join with an invalid session"); // CraftBukkit - fix null pointer +- } +- } catch (AuthenticationUnavailableException authenticationunavailableexception) { +- if (LoginListener.this.server.S()) { +- LoginListener.c.warn("Authentication servers are down but will let them in anyway!"); +- LoginListener.this.i = LoginListener.this.a(gameprofile); +- LoginListener.this.g = LoginListener.EnumProtocolState.READY_TO_ACCEPT; +- } else { +- LoginListener.this.disconnect("Authentication servers are down. Please try again later, sorry!"); +- LoginListener.c.error("Couldn\'t verify username because servers are unavailable"); +- } +- // CraftBukkit start - catch all exceptions +- } catch (Exception exception) { +- disconnect("Failed to verify username!"); +- server.server.getLogger().log(java.util.logging.Level.WARNING, "Exception verifying " + gameprofile.getName(), exception); +- // CraftBukkit end +- } +- +- } +- }).start(); + } + } ++ // Spigot end + + protected GameProfile a(GameProfile gameprofile) { + UUID uuid = UUID.nameUUIDFromBytes(("OfflinePlayer:" + gameprofile.getName()).getBytes(Charsets.UTF_8)); -- 2.1.0 diff --git a/CraftBukkit-Patches/0056-BungeeCord-Support.patch b/CraftBukkit-Patches/0056-BungeeCord-Support.patch index b8a8202..79768af 100644 --- a/CraftBukkit-Patches/0056-BungeeCord-Support.patch +++ b/CraftBukkit-Patches/0056-BungeeCord-Support.patch @@ -1,4 +1,4 @@ -From 7c7903f9cd5589868c13b305e9c77c5bee6152d0 Mon Sep 17 00:00:00 2001 +From 5c24f2e31369f0c038b9fdde57327bd0e9c1f99c Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 1 Dec 2013 18:18:41 +1100 Subject: [PATCH] BungeeCord Support @@ -6,15 +6,13 @@ Subject: [PATCH] BungeeCord Support Provides support for IP forwarding via BungeeCord. diff --git a/src/main/java/net/minecraft/server/HandshakeListener.java b/src/main/java/net/minecraft/server/HandshakeListener.java -index e036bc6..c9a7839 100644 +index 8f421f3..727948a 100644 --- a/src/main/java/net/minecraft/server/HandshakeListener.java +++ b/src/main/java/net/minecraft/server/HandshakeListener.java -@@ -6,7 +6,8 @@ import java.util.HashMap; - // CraftBukkit end +@@ -7,6 +7,7 @@ import java.util.HashMap; public class HandshakeListener implements PacketHandshakingInListener { -- -+ + + private static final com.google.gson.Gson gson = new com.google.gson.Gson(); // Spigot // CraftBukkit start - add fields private static final HashMap throttleTracker = new HashMap(); @@ -28,7 +26,7 @@ index e036bc6..c9a7839 100644 + String[] split = packethandshakinginsetprotocol.b.split("\00"); + if ( split.length == 3 || split.length == 4 ) { + packethandshakinginsetprotocol.b = split[0]; -+ b.j = new java.net.InetSocketAddress(split[1], ((java.net.InetSocketAddress) b.getSocketAddress()).getPort()); ++ b.l = new java.net.InetSocketAddress(split[1], ((java.net.InetSocketAddress) b.getSocketAddress()).getPort()); + b.spoofedUUID = com.mojang.util.UUIDTypeAdapter.fromString( split[2] ); + } else + { @@ -47,10 +45,10 @@ index e036bc6..c9a7839 100644 } break; diff --git a/src/main/java/net/minecraft/server/LoginListener.java b/src/main/java/net/minecraft/server/LoginListener.java -index a59ea80..df651d5 100644 +index 42905fd..3508f87 100644 --- a/src/main/java/net/minecraft/server/LoginListener.java +++ b/src/main/java/net/minecraft/server/LoginListener.java -@@ -63,9 +63,24 @@ public class LoginListener implements PacketLoginInListener, IUpdatePlayerListBo +@@ -84,9 +84,24 @@ public class LoginListener implements PacketLoginInListener, IUpdatePlayerListBo // Spigot start public void initUUID() { @@ -77,41 +75,41 @@ index a59ea80..df651d5 100644 // Spigot end diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java -index 33166a3..78d5949 100644 +index e120462..f7a011a 100644 --- a/src/main/java/net/minecraft/server/NetworkManager.java +++ b/src/main/java/net/minecraft/server/NetworkManager.java -@@ -31,7 +31,11 @@ public class NetworkManager extends SimpleChannelInboundHandler { - private final EnumProtocolDirection g; - private final Queue h = Queues.newConcurrentLinkedQueue(); - private Channel i; -- private SocketAddress j; +@@ -64,7 +64,11 @@ public class NetworkManager extends SimpleChannelInboundHandler { + private final Queue i = Queues.newConcurrentLinkedQueue(); + private final ReentrantReadWriteLock j = new ReentrantReadWriteLock(); + public Channel k; // CraftBukkit - public, PAIL: rename +- private SocketAddress l; + // Spigot Start -+ public SocketAddress j; ++ public SocketAddress l; + public java.util.UUID spoofedUUID; + public com.mojang.authlib.properties.Property[] spoofedProfile; + // Spigot End - private PacketListener k; - private IChatBaseComponent l; - private boolean m; -@@ -239,4 +243,11 @@ public class NetworkManager extends SimpleChannelInboundHandler { - static Channel a(NetworkManager networkmanager) { - return networkmanager.i; + private PacketListener m; + private IChatBaseComponent n; + private boolean o; +@@ -322,4 +326,11 @@ public class NetworkManager extends SimpleChannelInboundHandler { + this.b = agenericfuturelistener; + } } + + // Spigot Start + public SocketAddress getRawAddress() + { -+ return this.i.remoteAddress(); ++ return this.k.remoteAddress(); + } + // Spigot End } diff --git a/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java b/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java -index 97920b0..0b86011 100644 +index cc5aee0..18d0c6b 100644 --- a/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java +++ b/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java -@@ -11,7 +11,7 @@ public class PacketHandshakingInSetProtocol implements Packet { +@@ -13,7 +13,7 @@ public class PacketHandshakingInSetProtocol implements Packet Date: Thu, 12 Dec 2013 18:05:03 -0600 Subject: [PATCH] Allow Disabling Zombie Villager Aggression @@ -6,10 +6,10 @@ Subject: [PATCH] Allow Disabling Zombie Villager Aggression Ability to configure if Zombies will be aggressive towards Villagers. diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java -index aa609ef..3e6a101 100644 +index 4b56058..2c0c74c 100644 --- a/src/main/java/net/minecraft/server/EntityZombie.java +++ b/src/main/java/net/minecraft/server/EntityZombie.java -@@ -39,12 +39,12 @@ public class EntityZombie extends EntityMonster { +@@ -38,12 +38,12 @@ public class EntityZombie extends EntityMonster { } protected void n() { diff --git a/CraftBukkit-Patches/0058-Configurable-Amount-of-Netty-Threads.patch b/CraftBukkit-Patches/0058-Configurable-Amount-of-Netty-Threads.patch index d46b2d2..57f9978 100644 --- a/CraftBukkit-Patches/0058-Configurable-Amount-of-Netty-Threads.patch +++ b/CraftBukkit-Patches/0058-Configurable-Amount-of-Netty-Threads.patch @@ -1,4 +1,4 @@ -From 8a7194cd0bc661597b091020b8876bd5312d1a34 Mon Sep 17 00:00:00 2001 +From a52ed5af41b4f75024cbeba009eaa85aabc1e37b Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 13 Dec 2013 11:58:58 +1100 Subject: [PATCH] Configurable Amount of Netty Threads @@ -6,36 +6,36 @@ Subject: [PATCH] Configurable Amount of Netty Threads This brings back the option that the Spigot version of netty saw. By default Netty will try and use cores*2 threads, however if running multiple servers on the same machine, this can be too many threads. Additionally some people have 16 core servers. If 32 Netty threads are allowed in this setup, then the lock contention, and thus blocking between threads becomes much greater, leading to decreased performance. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 84f27a3..6ff18f0 100644 +index bcdd918..4c18e24 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -61,7 +61,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs - private final List o = Lists.newArrayList(); - private final ICommandHandler p; +@@ -63,7 +63,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs + private final List p = Lists.newArrayList(); + protected final ICommandHandler b; public final MethodProfiler methodProfiler = new MethodProfiler(); - private final ServerConnection q; + private ServerConnection q; // Spigot private final ServerPing r = new ServerPing(); private final Random s = new Random(); private String serverIp; -@@ -123,7 +123,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs - this.d = proxy; - MinecraftServer.k = this; +@@ -125,7 +125,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs + this.e = proxy; + MinecraftServer.l = this; // this.universe = file; // CraftBukkit - this.q = new ServerConnection(this); + // this.q = new ServerConnection(this); // Spigot this.Z = new UserCache(this, file1); - this.p = this.h(); + this.b = this.h(); // this.convertable = new WorldLoaderServer(file); // CraftBukkit - moved to DedicatedServer.init -@@ -1344,7 +1344,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -1323,7 +1323,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs } // Spigot End - public ServerConnection ao() { + public ServerConnection ap() { - return this.q; + return this.q == null ? this.q = new ServerConnection(this) : this.q; // Spigot } - public boolean aq() { + public boolean ar() { diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java index 47ab82f..865a17f 100644 --- a/src/main/java/org/spigotmc/SpigotConfig.java diff --git a/CraftBukkit-Patches/0059-Prevent-Mineshaft-Saving.patch b/CraftBukkit-Patches/0059-Prevent-Mineshaft-Saving.patch index ab6a190..fa6e4ad 100644 --- a/CraftBukkit-Patches/0059-Prevent-Mineshaft-Saving.patch +++ b/CraftBukkit-Patches/0059-Prevent-Mineshaft-Saving.patch @@ -1,14 +1,14 @@ -From ff86af308bf2727020508b941887e83a8399f0c9 Mon Sep 17 00:00:00 2001 +From 975fbd6108019d07c966a3d2d6b1100794a54c20 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 13 Dec 2013 15:21:02 +1100 Subject: [PATCH] Prevent Mineshaft Saving diff --git a/src/main/java/net/minecraft/server/StructureGenerator.java b/src/main/java/net/minecraft/server/StructureGenerator.java -index ecab5d1..dde9929 100644 +index bb1a11e..0f8211a 100644 --- a/src/main/java/net/minecraft/server/StructureGenerator.java +++ b/src/main/java/net/minecraft/server/StructureGenerator.java -@@ -172,7 +172,7 @@ public abstract class StructureGenerator extends WorldGenBase { +@@ -196,7 +196,7 @@ public abstract class StructureGenerator extends WorldGenBase { private void a(World world) { if (this.d == null) { // Spigot Start diff --git a/CraftBukkit-Patches/0060-Log-Cause-of-Unexpected-Exceptions.patch b/CraftBukkit-Patches/0060-Log-Cause-of-Unexpected-Exceptions.patch index a199599..21acc2c 100644 --- a/CraftBukkit-Patches/0060-Log-Cause-of-Unexpected-Exceptions.patch +++ b/CraftBukkit-Patches/0060-Log-Cause-of-Unexpected-Exceptions.patch @@ -1,14 +1,14 @@ -From a012b081db4e38b2a392d150dbbda1919ac05d73 Mon Sep 17 00:00:00 2001 +From 51d23beae4d968713dc6c8bdf2c7c41c470a333b Mon Sep 17 00:00:00 2001 From: md_5 Date: Wed, 18 Dec 2013 13:39:14 +1100 Subject: [PATCH] Log Cause of Unexpected Exceptions diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 6ff18f0..85b4bf9 100644 +index 4c18e24..d57af9e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -527,6 +527,12 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -548,6 +548,12 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs } } catch (Throwable throwable) { MinecraftServer.LOGGER.error("Encountered an unexpected exception", throwable); diff --git a/CraftBukkit-Patches/0061-Particle-API.patch b/CraftBukkit-Patches/0061-Particle-API.patch index ea25365..ced952b 100644 --- a/CraftBukkit-Patches/0061-Particle-API.patch +++ b/CraftBukkit-Patches/0061-Particle-API.patch @@ -1,4 +1,4 @@ -From 789c7ec28f8a13d350b4fcad31f215a04f251716 Mon Sep 17 00:00:00 2001 +From 113c3cdca3e582d522b1ff90f5a486b8092cc28d Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Fri, 20 Dec 2013 21:36:06 +0000 Subject: [PATCH] Particle API @@ -19,10 +19,10 @@ index 7de0de5..13f9e9d 100644 datavalue = 0; } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 8105872..204acdb 100644 +index 609b483..5dc77b1 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -814,28 +814,18 @@ public class CraftWorld implements World { +@@ -822,28 +822,18 @@ public class CraftWorld implements World { Validate.isTrue(effect.getData() == null, "Wrong kind of data for this effect!"); } @@ -60,7 +60,7 @@ index 8105872..204acdb 100644 } public T spawn(Location location, Class clazz) throws IllegalArgumentException { -@@ -1353,6 +1343,70 @@ public class CraftWorld implements World { +@@ -1361,6 +1351,70 @@ public class CraftWorld implements World { // Spigot start private final Spigot spigot = new Spigot() { @@ -132,7 +132,7 @@ index 8105872..204acdb 100644 public Spigot spigot() diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 2841e94..9f3e610 100644 +index c28b6bc..276c9fd 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -322,9 +322,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/CraftBukkit-Patches/0062-Save-ticks-lived-to-nbttag.patch b/CraftBukkit-Patches/0062-Save-ticks-lived-to-nbttag.patch index 276b5d3..01f804f 100644 --- a/CraftBukkit-Patches/0062-Save-ticks-lived-to-nbttag.patch +++ b/CraftBukkit-Patches/0062-Save-ticks-lived-to-nbttag.patch @@ -1,14 +1,14 @@ -From 29e58880faa0e54cc4a10353bb2fb52dae36c60d Mon Sep 17 00:00:00 2001 +From 07ac2c012866680de5f9301196a037e5806bff2f Mon Sep 17 00:00:00 2001 From: DerFlash Date: Tue, 9 Jul 2013 00:11:12 +0200 Subject: [PATCH] Save ticks lived to nbttag diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 8f7d865..d7e610b 100644 +index 5cf3833..5e1e695 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1198,6 +1198,7 @@ public abstract class Entity implements ICommandListener { +@@ -1191,6 +1191,7 @@ public abstract class Entity implements ICommandListener { nbttagcompound.setLong("WorldUUIDLeast", this.world.getDataManager().getUUID().getLeastSignificantBits()); nbttagcompound.setLong("WorldUUIDMost", this.world.getDataManager().getUUID().getMostSignificantBits()); nbttagcompound.setInt("Bukkit.updateLevel", CURRENT_LEVEL); @@ -16,7 +16,7 @@ index 8f7d865..d7e610b 100644 // CraftBukkit end if (this.getCustomName() != null && this.getCustomName().length() > 0) { nbttagcompound.setString("CustomName", this.getCustomName()); -@@ -1285,6 +1286,8 @@ public abstract class Entity implements ICommandListener { +@@ -1282,6 +1283,8 @@ public abstract class Entity implements ICommandListener { if (this instanceof EntityLiving) { EntityLiving entity = (EntityLiving) this; diff --git a/CraftBukkit-Patches/0063-More-Efficient-GetCubes.patch b/CraftBukkit-Patches/0063-More-Efficient-GetCubes.patch index c0b83a1..0dd987a 100644 --- a/CraftBukkit-Patches/0063-More-Efficient-GetCubes.patch +++ b/CraftBukkit-Patches/0063-More-Efficient-GetCubes.patch @@ -1,30 +1,29 @@ -From 253f5cf92dddb7284528dfbc34fbc9937311e90d Mon Sep 17 00:00:00 2001 +From 162e0a05ba706a962485f55cb36cd998a9446cd1 Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 11 Jun 2013 12:17:37 +1000 Subject: [PATCH] More Efficient GetCubes diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index f6b1dac..248f485 100644 +index a4fda33..974fe77 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -1052,33 +1052,60 @@ public abstract class World implements IBlockAccess { - int i1 = MathHelper.floor(axisalignedbb.c); - int j1 = MathHelper.floor(axisalignedbb.f + 1.0D); +@@ -1101,28 +1101,56 @@ public abstract class World implements IBlockAccess { + IBlockData iblockdata = Blocks.STONE.getBlockData(); + BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(); - for (int k1 = i; k1 < j; ++k1) { - for (int l1 = i1; l1 < j1; ++l1) { -- if (this.isLoaded(new BlockPosition(k1, 64, l1))) { +- if (this.isLoaded(blockposition_mutableblockposition.c(k1, 64, l1))) { - for (int i2 = k - 1; i2 < l; ++i2) { -- BlockPosition blockposition = new BlockPosition(k1, i2, l1); -- boolean flag = entity.aS(); -- boolean flag1 = this.a(this.af(), entity); -- +- blockposition_mutableblockposition.c(k1, i2, l1); - if (flag && flag1) { - entity.h(false); - } else if (!flag && !flag1) { - entity.h(true); - } +- +- IBlockData iblockdata1 = iblockdata; + // Spigot start + int ystart = ( ( k - 1 ) < 0 ) ? 0 : ( k - 1 ); + for ( int chunkx = ( i >> 4 ); chunkx <= ( ( j - 1 ) >> 4 ); chunkx++ ) @@ -51,8 +50,6 @@ index f6b1dac..248f485 100644 + for ( int y = ystart; y < l; y++ ) + { + BlockPosition blockposition = new BlockPosition( x, y, z ); -+ boolean flag = entity.aS(); -+ boolean flag1 = this.a(this.af(), entity); + + if (flag && flag1) { + entity.h(false); @@ -60,15 +57,10 @@ index f6b1dac..248f485 100644 + entity.h(true); + } -- IBlockData iblockdata; -+ IBlockData iblockdata; - -- if (!this.af().a(blockposition) && flag1) { -- iblockdata = Blocks.STONE.getBlockData(); -- } else { -- iblockdata = this.getType(blockposition); +- if (worldborder.a((BlockPosition) blockposition_mutableblockposition) || !flag1) { +- iblockdata1 = this.getType(blockposition_mutableblockposition); + IBlockData block; -+ if (!this.af().a(blockposition) && flag1) { ++ if (!this.getWorldBorder().a(blockposition) && flag1) { + block = Blocks.STONE.getBlockData(); + } else + { @@ -80,7 +72,7 @@ index f6b1dac..248f485 100644 + } } - -- iblockdata.getBlock().a(this, blockposition, iblockdata, axisalignedbb, arraylist, entity); +- iblockdata1.getBlock().a(this, blockposition_mutableblockposition, iblockdata1, axisalignedbb, arraylist, entity); } } } diff --git a/CraftBukkit-Patches/0064-Add-Option-to-Nerf-Mobs-from-Spawner-s.patch b/CraftBukkit-Patches/0064-Add-Option-to-Nerf-Mobs-from-Spawner-s.patch index af57e0f..e2eb3ea 100644 --- a/CraftBukkit-Patches/0064-Add-Option-to-Nerf-Mobs-from-Spawner-s.patch +++ b/CraftBukkit-Patches/0064-Add-Option-to-Nerf-Mobs-from-Spawner-s.patch @@ -1,14 +1,14 @@ -From 2b450241577ab91631bfc4e4c362728d51b8bf81 Mon Sep 17 00:00:00 2001 +From 4bb35602ee6638ad0778370e8b8f97c210469400 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 2 Feb 2014 16:55:46 +0000 Subject: [PATCH] Add Option to Nerf Mobs from Spawner's diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index d7e610b..a1d51a8 100644 +index 5e1e695..b930c0d 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -118,6 +118,7 @@ public abstract class Entity implements ICommandListener { +@@ -120,6 +120,7 @@ public abstract class Entity implements ICommandListener { public final byte activationType = org.spigotmc.ActivationRange.initializeEntityActivationType(this); public final boolean defaultActivationState; public long activatedTick = Integer.MIN_VALUE; @@ -17,7 +17,7 @@ index d7e610b..a1d51a8 100644 // Spigot end diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index f387687..5ef61d9 100644 +index c8156aa..7c23753 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -450,6 +450,12 @@ public abstract class EntityInsentient extends EntityLiving { @@ -31,10 +31,10 @@ index f387687..5ef61d9 100644 + } + // Spigot End this.world.methodProfiler.a("sensing"); - this.bi.a(); + this.bk.a(); this.world.methodProfiler.b(); diff --git a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java -index 4bbd288..67273f7 100644 +index 41cfde8..df71db5 100644 --- a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java +++ b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java @@ -144,6 +144,12 @@ public abstract class MobSpawnerAbstract { @@ -50,7 +50,7 @@ index 4bbd288..67273f7 100644 } // CraftBukkit end } -@@ -189,6 +195,12 @@ public abstract class MobSpawnerAbstract { +@@ -191,6 +197,12 @@ public abstract class MobSpawnerAbstract { SpawnerSpawnEvent event = CraftEventFactory.callSpawnerSpawnEvent(entity, this.b().getX(), this.b().getY(), this.b().getZ()); if (!event.isCancelled()) { entity.world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SPAWNER); // CraftBukkit diff --git a/CraftBukkit-Patches/0065-Warn-if-PermGen-may-be-insufficient.patch b/CraftBukkit-Patches/0065-Warn-if-PermGen-may-be-insufficient.patch index 322cea6..eb53d1a 100644 --- a/CraftBukkit-Patches/0065-Warn-if-PermGen-may-be-insufficient.patch +++ b/CraftBukkit-Patches/0065-Warn-if-PermGen-may-be-insufficient.patch @@ -1,4 +1,4 @@ -From 48f3305a08768dbae35142074ac26f0b2e2b3406 Mon Sep 17 00:00:00 2001 +From 75a2543c83ce99ca4c1b60a45c6caca5d604adeb Mon Sep 17 00:00:00 2001 From: md_5 Date: Mon, 23 Dec 2013 14:07:41 +1100 Subject: [PATCH] Warn if PermGen may be insufficient diff --git a/CraftBukkit-Patches/0066-Disable-Connected-Check-on-setScoreboard.patch b/CraftBukkit-Patches/0066-Disable-Connected-Check-on-setScoreboard.patch index 9de00c0..9220b99 100644 --- a/CraftBukkit-Patches/0066-Disable-Connected-Check-on-setScoreboard.patch +++ b/CraftBukkit-Patches/0066-Disable-Connected-Check-on-setScoreboard.patch @@ -1,11 +1,11 @@ -From 273dc143ae33035ea2415266a0d3983f92b0ad48 Mon Sep 17 00:00:00 2001 +From dcf83e0337de967e36ed1e2a028c4a976d26c1f6 Mon Sep 17 00:00:00 2001 From: md_5 Date: Mon, 23 Dec 2013 15:57:57 +1100 Subject: [PATCH] Disable Connected Check on setScoreboard diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 9f3e610..2fc4839 100644 +index 276c9fd..cbbcfc9 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1241,7 +1241,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/CraftBukkit-Patches/0067-Add-Late-Bind-Option.patch b/CraftBukkit-Patches/0067-Add-Late-Bind-Option.patch index ac34c2a..f4103b8 100644 --- a/CraftBukkit-Patches/0067-Add-Late-Bind-Option.patch +++ b/CraftBukkit-Patches/0067-Add-Late-Bind-Option.patch @@ -1,4 +1,4 @@ -From 5b926b4e80215c772f0f6f8db5423af7018d5cdf Mon Sep 17 00:00:00 2001 +From 325f69316cc1566252e7b178f281d36ec5fb65e0 Mon Sep 17 00:00:00 2001 From: slide23 Date: Fri, 20 Dec 2013 20:15:33 -0600 Subject: [PATCH] Add Late Bind Option @@ -6,18 +6,18 @@ Subject: [PATCH] Add Late Bind Option Add late-bind config option to delay binding until loading is done. diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index 240c909..ced9efa 100644 +index ae9e255..188a094 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java -@@ -127,6 +127,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -174,6 +174,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer this.a(MinecraftEncryption.b()); DedicatedServer.LOGGER.info("Starting Minecraft server on " + (this.getServerIp().length() == 0 ? "*" : this.getServerIp()) + ":" + this.Q()); + if (!org.spigotmc.SpigotConfig.lateBind) { try { - this.ao().a(inetaddress, this.Q()); - } catch (Throwable ioexception) { // CraftBukkit - IOException -> Throwable -@@ -135,6 +136,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer + this.ap().a(inetaddress, this.Q()); + } catch (IOException ioexception) { +@@ -182,6 +183,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer DedicatedServer.LOGGER.warn("Perhaps a server is already running on that port?"); return false; } @@ -25,14 +25,14 @@ index 240c909..ced9efa 100644 // Spigot Start - Move DedicatedPlayerList up and bring plugin loading from CraftServer to here // this.a((PlayerList) (new DedicatedPlayerList(this))); // CraftBukkit -@@ -225,6 +227,17 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -271,6 +273,17 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer } // CraftBukkit end + if (org.spigotmc.SpigotConfig.lateBind) { + try { -+ this.ao().a(inetaddress, this.Q()); -+ } catch (Throwable ioexception) { // CraftBukkit - IOException -> Throwable ++ this.ap().a(inetaddress, this.Q()); ++ } catch (IOException ioexception) { + DedicatedServer.LOGGER.warn("**** FAILED TO BIND TO PORT!"); + DedicatedServer.LOGGER.warn("The exception was: {}", new Object[] { ioexception.toString()}); + DedicatedServer.LOGGER.warn("Perhaps a server is already running on that port?"); @@ -40,8 +40,8 @@ index 240c909..ced9efa 100644 + } + } + - if (false && this.aQ() > 0L) { // Spigot - disable - Thread thread = new Thread(new ThreadWatchdog(this)); + if (false && this.aR() > 0L) { // Spigot - disable + Thread thread1 = new Thread(new ThreadWatchdog(this)); diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java index 865a17f..f3187f8 100644 diff --git a/CraftBukkit-Patches/0068-Allow-statistics-to-be-disabled-forced.patch b/CraftBukkit-Patches/0068-Allow-statistics-to-be-disabled-forced.patch index fd7de83..52bbe70 100644 --- a/CraftBukkit-Patches/0068-Allow-statistics-to-be-disabled-forced.patch +++ b/CraftBukkit-Patches/0068-Allow-statistics-to-be-disabled-forced.patch @@ -1,11 +1,11 @@ -From 8df8e6fc29a4c1c9d93b862e04bd38cfd7a2ae37 Mon Sep 17 00:00:00 2001 +From 5428d854f3be41d9a03048775e572f867464cab0 Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Tue, 7 Jan 2014 15:56:26 +0000 Subject: [PATCH] Allow statistics to be disabled/forced diff --git a/src/main/java/net/minecraft/server/ServerStatisticManager.java b/src/main/java/net/minecraft/server/ServerStatisticManager.java -index 4561825..9906b56 100644 +index 97c3e79..dc1dffb 100644 --- a/src/main/java/net/minecraft/server/ServerStatisticManager.java +++ b/src/main/java/net/minecraft/server/ServerStatisticManager.java @@ -31,6 +31,14 @@ public class ServerStatisticManager extends StatisticManager { diff --git a/CraftBukkit-Patches/0069-Fix-ItemStack-Unbreakable-Code.patch b/CraftBukkit-Patches/0069-Fix-ItemStack-Unbreakable-Code.patch index f5eea72..d9eb42e 100644 --- a/CraftBukkit-Patches/0069-Fix-ItemStack-Unbreakable-Code.patch +++ b/CraftBukkit-Patches/0069-Fix-ItemStack-Unbreakable-Code.patch @@ -1,14 +1,14 @@ -From d897805eec1424c915fb8296104b0524fe55f7c8 Mon Sep 17 00:00:00 2001 +From fc35ee9742d0f9352ad14e2345eeb2fe342205a7 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 10 Jan 2014 15:15:50 +1100 Subject: [PATCH] Fix ItemStack Unbreakable Code diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index 3e0d808..596db09 100644 +index 62b2136..4b33dbd 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java -@@ -270,7 +270,13 @@ public final class ItemStack { +@@ -272,7 +272,13 @@ public final class ItemStack { } public boolean e() { diff --git a/CraftBukkit-Patches/0070-Try-and-Debug-Crash-Reports-Crashing.patch b/CraftBukkit-Patches/0070-Try-and-Debug-Crash-Reports-Crashing.patch index 1522d71..44a439e 100644 --- a/CraftBukkit-Patches/0070-Try-and-Debug-Crash-Reports-Crashing.patch +++ b/CraftBukkit-Patches/0070-Try-and-Debug-Crash-Reports-Crashing.patch @@ -1,20 +1,20 @@ -From 36b00fa112a13f5390455a150aac049d86393a8a Mon Sep 17 00:00:00 2001 +From 9489a7b68288b5b2c19bc3ab0418ed17df89c17b Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 12 Jan 2014 20:56:41 +1100 Subject: [PATCH] Try and Debug Crash Reports Crashing diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 85b4bf9..0ee0c21 100644 +index d57af9e..1fe3014 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -730,7 +730,13 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -743,7 +743,13 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs worldserver.doTick(); worldserver.timings.doTick.stopTiming(); // Spigot - } catch (Throwable throwable1) { + } catch (Throwable throwable) { + // Spigot Start + try { - crashreport = CrashReport.a(throwable1, "Exception ticking world"); + crashreport = CrashReport.a(throwable, "Exception ticking world"); + } catch (Throwable t){ + throw new RuntimeException("Error generating crash report", t); + } @@ -22,13 +22,13 @@ index 85b4bf9..0ee0c21 100644 worldserver.a(crashreport); throw new ReportedException(crashreport); } -@@ -740,7 +746,13 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -753,7 +759,13 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs worldserver.tickEntities(); worldserver.timings.tickEntities.stopTiming(); // Spigot - } catch (Throwable throwable2) { + } catch (Throwable throwable1) { + // Spigot Start + try { - crashreport = CrashReport.a(throwable2, "Exception ticking world entities"); + crashreport = CrashReport.a(throwable1, "Exception ticking world entities"); + } catch (Throwable t){ + throw new RuntimeException("Error generating crash report", t); + } diff --git a/CraftBukkit-Patches/0071-Improve-AutoSave-Mechanism.patch b/CraftBukkit-Patches/0071-Improve-AutoSave-Mechanism.patch index 4b6e58d..481dbd3 100644 --- a/CraftBukkit-Patches/0071-Improve-AutoSave-Mechanism.patch +++ b/CraftBukkit-Patches/0071-Improve-AutoSave-Mechanism.patch @@ -1,4 +1,4 @@ -From 7637dd80826ce060950cd9b0afc55559ec1e17d5 Mon Sep 17 00:00:00 2001 +From 1eb61c31c972d2eeb44c69d3fe3d889cc470c933 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 12 Jan 2014 21:07:18 +1100 Subject: [PATCH] Improve AutoSave Mechanism @@ -11,10 +11,10 @@ Instead we will mimic the save-all command in its behaviour, which is both safe Also, only save modified chunks, or chunks with entities after 4 auto save passes diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index 372d90f..c0e2a50 100644 +index b2ce05f..a59ff8e 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -905,7 +905,7 @@ public class Chunk { +@@ -934,7 +934,7 @@ public class Chunk { if (this.r && this.world.getTime() != this.lastSaved || this.q) { return true; } @@ -24,10 +24,10 @@ index 372d90f..c0e2a50 100644 } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 0ee0c21..bc0c405 100644 +index 1fe3014..fbd9b4e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -634,7 +634,17 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -655,7 +655,17 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs SpigotTimings.worldSaveTimer.startTiming(); // Spigot this.methodProfiler.a("save"); this.v.savePlayers(); @@ -47,10 +47,10 @@ index 0ee0c21..bc0c405 100644 SpigotTimings.worldSaveTimer.stopTiming(); // Spigot } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 204acdb..660fd07 100644 +index 5dc77b1..62ad47d 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -718,12 +718,17 @@ public class CraftWorld implements World { +@@ -726,12 +726,17 @@ public class CraftWorld implements World { } public void save() { diff --git a/CraftBukkit-Patches/0072-Catch-stalling-on-corrupted-map-data-NBT-arrays.patch b/CraftBukkit-Patches/0072-Catch-stalling-on-corrupted-map-data-NBT-arrays.patch index 3a26ae7..35f1154 100644 --- a/CraftBukkit-Patches/0072-Catch-stalling-on-corrupted-map-data-NBT-arrays.patch +++ b/CraftBukkit-Patches/0072-Catch-stalling-on-corrupted-map-data-NBT-arrays.patch @@ -1,28 +1,28 @@ -From 0c1b7399d0730eb1c33474daf4fa7503f7493085 Mon Sep 17 00:00:00 2001 +From 289d597d3a8ae0d0e35fac45c701e4c636baa461 Mon Sep 17 00:00:00 2001 From: md_5 Date: Mon, 20 Jan 2014 13:44:07 +1100 Subject: [PATCH] Catch stalling on corrupted map data / NBT arrays. diff --git a/src/main/java/net/minecraft/server/NBTTagByteArray.java b/src/main/java/net/minecraft/server/NBTTagByteArray.java -index 7525469..7a293eb 100644 +index 3eeed3e..4e9b714 100644 --- a/src/main/java/net/minecraft/server/NBTTagByteArray.java +++ b/src/main/java/net/minecraft/server/NBTTagByteArray.java -@@ -21,6 +21,7 @@ public class NBTTagByteArray extends NBTBase { +@@ -22,6 +22,7 @@ public class NBTTagByteArray extends NBTBase { - void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws java.io.IOException { + void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws IOException { int j = datainput.readInt(); + com.google.common.base.Preconditions.checkArgument( j < 1 << 24); nbtreadlimiter.a((long) (8 * j)); this.data = new byte[j]; diff --git a/src/main/java/net/minecraft/server/NBTTagIntArray.java b/src/main/java/net/minecraft/server/NBTTagIntArray.java -index f331ef3..17b0c3d 100644 +index 63c3bf9..1ff0902 100644 --- a/src/main/java/net/minecraft/server/NBTTagIntArray.java +++ b/src/main/java/net/minecraft/server/NBTTagIntArray.java -@@ -25,6 +25,7 @@ public class NBTTagIntArray extends NBTBase { +@@ -26,6 +26,7 @@ public class NBTTagIntArray extends NBTBase { - void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws java.io.IOException { + void load(DataInput datainput, int i, NBTReadLimiter nbtreadlimiter) throws IOException { int j = datainput.readInt(); + com.google.common.base.Preconditions.checkArgument( j < 1 << 24); diff --git a/CraftBukkit-Patches/0073-Allow-toggling-of-ZombiePigmen-spawning-in-portal-bl.patch b/CraftBukkit-Patches/0073-Allow-toggling-of-ZombiePigmen-spawning-in-portal-bl.patch index 768b831..6ca34b9 100644 --- a/CraftBukkit-Patches/0073-Allow-toggling-of-ZombiePigmen-spawning-in-portal-bl.patch +++ b/CraftBukkit-Patches/0073-Allow-toggling-of-ZombiePigmen-spawning-in-portal-bl.patch @@ -1,14 +1,14 @@ -From 2c5f50b13981a490c622293f19f956743f301247 Mon Sep 17 00:00:00 2001 +From d9bd763503896640fe63b1654de83d47c3ef7bb2 Mon Sep 17 00:00:00 2001 From: Dmck2b Date: Mon, 20 Jan 2014 20:18:23 +0000 Subject: [PATCH] Allow toggling of ZombiePigmen spawning in portal blocks diff --git a/src/main/java/net/minecraft/server/BlockPortal.java b/src/main/java/net/minecraft/server/BlockPortal.java -index 7565dfb..368d67c 100644 +index 030f4e9..4dc40eb 100644 --- a/src/main/java/net/minecraft/server/BlockPortal.java +++ b/src/main/java/net/minecraft/server/BlockPortal.java -@@ -16,7 +16,7 @@ public class BlockPortal extends BlockHalfTransparent { +@@ -18,7 +18,7 @@ public class BlockPortal extends BlockHalfTransparent { public void b(World world, BlockPosition blockposition, IBlockData iblockdata, Random random) { super.b(world, blockposition, iblockdata, random); diff --git a/CraftBukkit-Patches/0074-Highly-Optimized-Tick-Loop.patch b/CraftBukkit-Patches/0074-Highly-Optimized-Tick-Loop.patch index 1f1900a..192a794 100644 --- a/CraftBukkit-Patches/0074-Highly-Optimized-Tick-Loop.patch +++ b/CraftBukkit-Patches/0074-Highly-Optimized-Tick-Loop.patch @@ -1,14 +1,14 @@ -From 1b44d6ca241d06f64df228d26fac47641fe433ce Mon Sep 17 00:00:00 2001 +From fdcb23ae30c7e144baba75b1ea021186943d4bf6 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 25 Jan 2014 14:08:35 +1100 Subject: [PATCH] Highly Optimized Tick Loop diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index bc0c405..34fb946 100644 +index fbd9b4e..c831ce3 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -118,6 +118,12 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -120,6 +120,12 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs public java.util.Queue processQueue = new java.util.concurrent.ConcurrentLinkedQueue(); public int autosavePeriod; // CraftBukkit end @@ -20,8 +20,8 @@ index bc0c405..34fb946 100644 + // Spigot end public MinecraftServer(OptionSet options, Proxy proxy, File file1) { - this.d = proxy; -@@ -480,6 +486,13 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs + this.e = proxy; +@@ -501,6 +507,13 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs this.isRunning = false; } @@ -35,15 +35,15 @@ index bc0c405..34fb946 100644 public void run() { try { if (this.init()) { -@@ -490,38 +503,34 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs - this.r.setServerInfo(new ServerPingServerData("1.8", 47)); +@@ -511,38 +524,34 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs + this.r.setServerInfo(new ServerPing.ServerData("1.8.3", 47)); this.a(this.r); + // Spigot start + Arrays.fill( recentTps, 20 ); + long lastTick = System.nanoTime(), catchupTime = 0, curTime, wait, tickSection = lastTick; while (this.isRunning) { -- long j = ax(); +- long j = ay(); - long k = j - this.ab; - - if (k > 2000L && this.ab - this.R >= 15000L) { @@ -68,14 +68,14 @@ index bc0c405..34fb946 100644 - i += k; - this.ab = j; -- if (this.worlds.get(0).everyoneDeeplySleeping()) { // CraftBukkit -- this.y(); +- if (this.worlds.get(0).everyoneDeeplySleeping()) { +- this.z(); - i = 0L; - } else { - while (i > 50L) { - MinecraftServer.currentTick = (int) (System.currentTimeMillis() / 50); // CraftBukkit - i -= 50L; -- this.y(); +- this.z(); - } + if ( MinecraftServer.currentTick++ % SAMPLE_INTERVAL == 0 ) + { @@ -88,7 +88,7 @@ index bc0c405..34fb946 100644 + lastTick = curTime; - Thread.sleep(Math.max(1L, 50L - i)); -+ this.y(); ++ this.z(); this.Q = true; } + // Spigot end diff --git a/CraftBukkit-Patches/0075-Add-Spigot-Links.patch b/CraftBukkit-Patches/0075-Add-Spigot-Links.patch index 5b59be8..913b9f7 100644 --- a/CraftBukkit-Patches/0075-Add-Spigot-Links.patch +++ b/CraftBukkit-Patches/0075-Add-Spigot-Links.patch @@ -1,4 +1,4 @@ -From fb40c21776d9184c8c0864c403c0f23c4cac8d9b Mon Sep 17 00:00:00 2001 +From 28faf58f9ce67f8ea804ed5c38954b51d81542bc Mon Sep 17 00:00:00 2001 From: md_5 Date: Thu, 23 Jan 2014 13:17:35 +1100 Subject: [PATCH] Add Spigot Links diff --git a/CraftBukkit-Patches/0076-Configurable-Ping-Sample-Size.patch b/CraftBukkit-Patches/0076-Configurable-Ping-Sample-Size.patch index 8ce3841..fb4f639 100644 --- a/CraftBukkit-Patches/0076-Configurable-Ping-Sample-Size.patch +++ b/CraftBukkit-Patches/0076-Configurable-Ping-Sample-Size.patch @@ -1,17 +1,17 @@ -From cedbae210cab866f083ca06211a900f84eb52246 Mon Sep 17 00:00:00 2001 +From 02cbdc383eccf55a0263cfd0052d013ff55f831c Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 26 Jan 2014 21:48:34 +1100 Subject: [PATCH] Configurable Ping Sample Size diff --git a/src/main/java/net/minecraft/server/PacketStatusListener.java b/src/main/java/net/minecraft/server/PacketStatusListener.java -index 939907b..17d37ac 100644 +index 8966bfb..b996558 100644 --- a/src/main/java/net/minecraft/server/PacketStatusListener.java +++ b/src/main/java/net/minecraft/server/PacketStatusListener.java @@ -113,6 +113,13 @@ public class PacketStatusListener implements PacketStatusInListener { } - ServerPingPlayerSample playerSample = new ServerPingPlayerSample(event.getMaxPlayers(), profiles.size()); + ServerPing.ServerPingPlayerSample playerSample = new ServerPing.ServerPingPlayerSample(event.getMaxPlayers(), profiles.size()); + // Spigot Start + if ( !profiles.isEmpty() ) + { diff --git a/CraftBukkit-Patches/0077-Add-Optional-Tick-Shuffling.patch b/CraftBukkit-Patches/0077-Add-Optional-Tick-Shuffling.patch index 76ad2b4..11a2623 100644 --- a/CraftBukkit-Patches/0077-Add-Optional-Tick-Shuffling.patch +++ b/CraftBukkit-Patches/0077-Add-Optional-Tick-Shuffling.patch @@ -1,4 +1,4 @@ -From 8a0501a6c9a5c70cc1a7abebc403f033f4222e6d Mon Sep 17 00:00:00 2001 +From 6af0da4859d4348adc3ac9e36f3c84f0df0d29df Mon Sep 17 00:00:00 2001 From: md_5 Date: Mon, 27 Jan 2014 08:39:26 +1100 Subject: [PATCH] Add Optional Tick Shuffling @@ -6,21 +6,21 @@ Subject: [PATCH] Add Optional Tick Shuffling This prevents players from 'gaming' the server, and strategically relogging to increase their position in the tick order. diff --git a/src/main/java/net/minecraft/server/ServerConnection.java b/src/main/java/net/minecraft/server/ServerConnection.java -index 6508fdf..6c6ffa7 100644 +index 42188fa..931ab66 100644 --- a/src/main/java/net/minecraft/server/ServerConnection.java +++ b/src/main/java/net/minecraft/server/ServerConnection.java -@@ -57,6 +57,13 @@ public class ServerConnection { - List list = this.g; +@@ -123,6 +123,13 @@ public class ServerConnection { + List list = this.h; - synchronized (this.g) { + synchronized (this.h) { + // Spigot Start + // This prevents players from 'gaming' the server, and strategically relogging to increase their position in the tick order + if ( org.spigotmc.SpigotConfig.playerShuffle > 0 && MinecraftServer.currentTick % org.spigotmc.SpigotConfig.playerShuffle == 0 ) + { -+ Collections.shuffle( this.g ); ++ Collections.shuffle( this.h ); + } + // Spigot End - Iterator iterator = this.g.iterator(); + Iterator iterator = this.h.iterator(); while (iterator.hasNext()) { diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java diff --git a/CraftBukkit-Patches/0078-Allow-Configuring-Chunks-per-Packet.patch b/CraftBukkit-Patches/0078-Allow-Configuring-Chunks-per-Packet.patch index c993f82..46977cf 100644 --- a/CraftBukkit-Patches/0078-Allow-Configuring-Chunks-per-Packet.patch +++ b/CraftBukkit-Patches/0078-Allow-Configuring-Chunks-per-Packet.patch @@ -1,14 +1,14 @@ -From 6658e45f4661e3959442f89b3e5c92b1f97c89d6 Mon Sep 17 00:00:00 2001 +From 8b80b654e0ea8885fc8b98db6eac1023caaca109 Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 28 Jan 2014 20:35:35 +1100 Subject: [PATCH] Allow Configuring Chunks per Packet diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 5c961ba..c087acc 100644 +index 657f3f5..5751844 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -220,7 +220,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -223,7 +223,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { Chunk chunk; diff --git a/CraftBukkit-Patches/0079-Implement-Locale-Getter-for-Players.patch b/CraftBukkit-Patches/0079-Implement-Locale-Getter-for-Players.patch index f87d201..b902e47 100644 --- a/CraftBukkit-Patches/0079-Implement-Locale-Getter-for-Players.patch +++ b/CraftBukkit-Patches/0079-Implement-Locale-Getter-for-Players.patch @@ -1,24 +1,24 @@ -From 1b98229898a57d63e9bc8cf5448c45dcc358639f Mon Sep 17 00:00:00 2001 +From 6731885bf6ad51d1aebc132eabc69c05ce7aca48 Mon Sep 17 00:00:00 2001 From: Smove Date: Sat, 1 Feb 2014 18:12:16 +1100 Subject: [PATCH] Implement Locale Getter for Players diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index c087acc..7719d03 100644 +index 5751844..3854edf 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -27,7 +27,7 @@ import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; public class EntityPlayer extends EntityHuman implements ICrafting { - private static final Logger bF = LogManager.getLogger(); + private static final Logger bH = LogManager.getLogger(); - private String locale = "en_US"; + public String locale = "en_US"; // Spigot public PlayerConnection playerConnection; public final MinecraftServer server; public final PlayerInteractManager playerInteractManager; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 2fc4839..827b8dd 100644 +index cbbcfc9..b494159 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1401,6 +1401,12 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/CraftBukkit-Patches/0080-Cap-Entity-Collisions.patch b/CraftBukkit-Patches/0080-Cap-Entity-Collisions.patch index 59e2433..36deb62 100644 --- a/CraftBukkit-Patches/0080-Cap-Entity-Collisions.patch +++ b/CraftBukkit-Patches/0080-Cap-Entity-Collisions.patch @@ -1,4 +1,4 @@ -From fc96fff109b53cafa5017dee69d65e8ed08ad022 Mon Sep 17 00:00:00 2001 +From 4bae06e72ab3132d8ae68b93f9616c7c7d12cc11 Mon Sep 17 00:00:00 2001 From: Aikar Date: Fri, 31 Jan 2014 11:18:34 -0500 Subject: [PATCH] Cap Entity Collisions @@ -7,39 +7,38 @@ Limit a single entity to colliding a max of configurable times per tick. This will alleviate issues where living entities are hoarded in 1x1 pens. diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index a1d51a8..25192f3 100644 +index b930c0d..82accf4 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1059,6 +1059,7 @@ public abstract class Entity implements ICommandListener { +@@ -1052,6 +1052,7 @@ public abstract class Entity implements ICommandListener { public void d(EntityHuman entityhuman) {} + int numCollisions = 0; // Spigot public void collide(Entity entity) { if (entity.passenger != this && entity.vehicle != this) { - if (!entity.T && !this.T) { + if (!entity.noclip && !this.noclip) { diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 5edefa0..7c8f361 100644 +index ca0430d..c67f0ee 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -1658,7 +1658,9 @@ public abstract class EntityLiving extends Entity { - List list = this.world.getEntities(this, this.getBoundingBox().grow(0.20000000298023224D, 0.0D, 0.20000000298023224D)); +@@ -1671,7 +1671,9 @@ public abstract class EntityLiving extends Entity { + })); - if (this.ad() && list != null && !list.isEmpty()) { // Spigot: Add this.ad() condition + if (this.ad() && !list.isEmpty()) { // Spigot: Add this.ad() condition + numCollisions -= world.spigotConfig.maxCollisionsPerEntity; // Spigot for (int i = 0; i < list.size(); ++i) { + if (numCollisions > world.spigotConfig.maxCollisionsPerEntity) { break; } // Spigot Entity entity = (Entity) list.get(i); - + // TODO better check now? -@@ -1669,9 +1671,12 @@ public abstract class EntityLiving extends Entity { +@@ -1681,8 +1683,11 @@ public abstract class EntityLiving extends Entity { + } // CraftBukkit end - if (entity.ae()) { -+ entity.numCollisions++; // Spigot -+ numCollisions++; // Spigot - this.s(entity); - } ++ entity.numCollisions++; // Spigot ++ numCollisions++; // Spigot + this.s(entity); } + numCollisions = 0; // Spigot } diff --git a/CraftBukkit-Patches/0081-Fix-dispensing-bone-meal-not-having-the-correct-data.patch b/CraftBukkit-Patches/0081-Fix-dispensing-bone-meal-not-having-the-correct-data.patch index 6e15028..152e0bd 100644 --- a/CraftBukkit-Patches/0081-Fix-dispensing-bone-meal-not-having-the-correct-data.patch +++ b/CraftBukkit-Patches/0081-Fix-dispensing-bone-meal-not-having-the-correct-data.patch @@ -1,22 +1,22 @@ -From 7bea711b892234d60b8efe3b1d6fec867d7049cb Mon Sep 17 00:00:00 2001 +From d36dcb2ae4108a697242904dff0741f918ad4c69 Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Thu, 6 Feb 2014 21:59:20 +0000 Subject: [PATCH] Fix dispensing bone meal not having the correct data value -diff --git a/src/main/java/net/minecraft/server/DispenseBehaviorBonemeal.java b/src/main/java/net/minecraft/server/DispenseBehaviorBonemeal.java -index 1fb976c..b0ecb35 100644 ---- a/src/main/java/net/minecraft/server/DispenseBehaviorBonemeal.java -+++ b/src/main/java/net/minecraft/server/DispenseBehaviorBonemeal.java -@@ -18,7 +18,7 @@ final class DispenseBehaviorBonemeal extends DispenseBehaviorItem { - - // CraftBukkit start - org.bukkit.block.Block block = world.getWorld().getBlockAt(isourceblock.getBlockPosition().getX(), isourceblock.getBlockPosition().getY(), isourceblock.getBlockPosition().getZ()); -- CraftItemStack craftItem = CraftItemStack.asNewCraftStack(itemstack.getItem()); -+ CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemstack); // Spigot +diff --git a/src/main/java/net/minecraft/server/DispenserRegistry.java b/src/main/java/net/minecraft/server/DispenserRegistry.java +index f730e97..4d1c04e 100644 +--- a/src/main/java/net/minecraft/server/DispenserRegistry.java ++++ b/src/main/java/net/minecraft/server/DispenserRegistry.java +@@ -463,7 +463,7 @@ public class DispenserRegistry { - BlockDispenseEvent event = new BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector(0, 0, 0)); - if (!BlockDispenser.eventFired) { + // CraftBukkit start + org.bukkit.block.Block block = world.getWorld().getBlockAt(isourceblock.getBlockPosition().getX(), isourceblock.getBlockPosition().getY(), isourceblock.getBlockPosition().getZ()); +- CraftItemStack craftItem = CraftItemStack.asNewCraftStack(itemstack.getItem()); ++ CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemstack); // Spigot + + BlockDispenseEvent event = new BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector(0, 0, 0)); + if (!BlockDispenser.eventFired) { -- 2.1.0 diff --git a/CraftBukkit-Patches/0082-Spam-Filter-Exclusions.patch b/CraftBukkit-Patches/0082-Spam-Filter-Exclusions.patch index f02498f..6f761c5 100644 --- a/CraftBukkit-Patches/0082-Spam-Filter-Exclusions.patch +++ b/CraftBukkit-Patches/0082-Spam-Filter-Exclusions.patch @@ -1,14 +1,14 @@ -From 8afc8d7c7c063110343752af6218a01cbf62318b Mon Sep 17 00:00:00 2001 +From 89f01f61bc5dd98b3435de3aaaa717cd0680c9b4 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 8 Feb 2014 08:13:40 +0000 Subject: [PATCH] Spam Filter Exclusions diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index c30e96e..8148371 100644 +index 9fa0e67..e62c2f3 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -951,9 +951,20 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -969,9 +969,20 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList this.minecraftServer.getPlayerList().sendMessage(chatmessage1, false); } diff --git a/CraftBukkit-Patches/0083-Add-Option-to-Silence-CommandBlock-Console.patch b/CraftBukkit-Patches/0083-Add-Option-to-Silence-CommandBlock-Console.patch index 68b867a..0521793 100644 --- a/CraftBukkit-Patches/0083-Add-Option-to-Silence-CommandBlock-Console.patch +++ b/CraftBukkit-Patches/0083-Add-Option-to-Silence-CommandBlock-Console.patch @@ -1,11 +1,11 @@ -From ba1d1daf0341129b0fe180b58868057371409611 Mon Sep 17 00:00:00 2001 +From 864fe313d03905e3cb0f660fc02b1a6d53b504c0 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 9 Feb 2014 14:39:01 +1100 Subject: [PATCH] Add Option to Silence CommandBlock Console diff --git a/src/main/java/net/minecraft/server/CommandDispatcher.java b/src/main/java/net/minecraft/server/CommandDispatcher.java -index c6032b2..8bd58c9 100644 +index 54133a7..53fbc3e 100644 --- a/src/main/java/net/minecraft/server/CommandDispatcher.java +++ b/src/main/java/net/minecraft/server/CommandDispatcher.java @@ -95,7 +95,7 @@ public class CommandDispatcher extends CommandHandler implements ICommandDispatc diff --git a/CraftBukkit-Patches/0084-Add-support-for-fetching-hidden-players.patch b/CraftBukkit-Patches/0084-Add-support-for-fetching-hidden-players.patch index 2f593fe..a6e61cb 100644 --- a/CraftBukkit-Patches/0084-Add-support-for-fetching-hidden-players.patch +++ b/CraftBukkit-Patches/0084-Add-support-for-fetching-hidden-players.patch @@ -1,11 +1,11 @@ -From 51721b3e27f0775fcb72d536eaeb8a9b201eb70a Mon Sep 17 00:00:00 2001 +From 221131d48bf4531fa60cde7877e9ff5f6e5b1939 Mon Sep 17 00:00:00 2001 From: Tux Date: Sun, 9 Feb 2014 14:03:03 -0500 Subject: [PATCH] Add support for fetching hidden players diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 827b8dd..fd0c2d2 100644 +index b494159..c2e87b1 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1407,6 +1407,18 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/CraftBukkit-Patches/0085-Allow-Disabling-Creative-Item-Filter.patch b/CraftBukkit-Patches/0085-Allow-Disabling-Creative-Item-Filter.patch index c5713b6..5fdc116 100644 --- a/CraftBukkit-Patches/0085-Allow-Disabling-Creative-Item-Filter.patch +++ b/CraftBukkit-Patches/0085-Allow-Disabling-Creative-Item-Filter.patch @@ -1,22 +1,22 @@ -From 1be493de51d3d7bd56b4ce6df97a2523f728471c Mon Sep 17 00:00:00 2001 +From 9a9500938f601950f1d64ba0248ebb661f2445cd Mon Sep 17 00:00:00 2001 From: md_5 Date: Wed, 12 Feb 2014 18:18:01 +1100 Subject: [PATCH] Allow Disabling Creative Item Filter diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 8148371..0dee302 100644 +index e62c2f3..8fff72f 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -1682,7 +1682,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -1699,7 +1699,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList boolean flag1 = packetplayinsetcreativeslot.a() >= 1 && packetplayinsetcreativeslot.a() < 36 + PlayerInventory.getHotbarSize(); // CraftBukkit - Add invalidItems check - boolean flag2 = itemstack == null || itemstack.getItem() != null && !invalidItems.contains(Item.getId(itemstack.getItem())); + boolean flag2 = itemstack == null || itemstack.getItem() != null && (!invalidItems.contains(Item.getId(itemstack.getItem())) || !org.spigotmc.SpigotConfig.filterCreativeItems); // Spigot boolean flag3 = itemstack == null || itemstack.getData() >= 0 && itemstack.count <= 64 && itemstack.count > 0; - - + // CraftBukkit start - Call click event + if (flag || (flag1 && !ItemStack.matches(this.player.defaultContainer.getSlot(packetplayinsetcreativeslot.a()).getItem(), packetplayinsetcreativeslot.getItemStack()))) { // Insist on valid slot diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java index f58208e..86c45c6 100644 --- a/src/main/java/org/spigotmc/SpigotConfig.java diff --git a/CraftBukkit-Patches/0086-Cap-Channel-Registrations.patch b/CraftBukkit-Patches/0086-Cap-Channel-Registrations.patch index fc63374..3118309 100644 --- a/CraftBukkit-Patches/0086-Cap-Channel-Registrations.patch +++ b/CraftBukkit-Patches/0086-Cap-Channel-Registrations.patch @@ -1,11 +1,11 @@ -From d948ca461b0bdfe0a46c85c2a8c83b2156f00c61 Mon Sep 17 00:00:00 2001 +From e6ce2e83cdc2491641c200c1f860b029fb59bb42 Mon Sep 17 00:00:00 2001 From: md_5 Date: Wed, 12 Feb 2014 20:02:58 +1100 Subject: [PATCH] Cap Channel Registrations diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index fd0c2d2..c6caeec 100644 +index c2e87b1..0ab028c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1061,6 +1061,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/CraftBukkit-Patches/0087-Allow-vanilla-commands-to-be-the-main-version-of-a-c.patch b/CraftBukkit-Patches/0087-Allow-vanilla-commands-to-be-the-main-version-of-a-c.patch index c0a47f0..83a6175 100644 --- a/CraftBukkit-Patches/0087-Allow-vanilla-commands-to-be-the-main-version-of-a-c.patch +++ b/CraftBukkit-Patches/0087-Allow-vanilla-commands-to-be-the-main-version-of-a-c.patch @@ -1,11 +1,11 @@ -From 4861273a957bfb20cfcaf68d28242a0e89a109bf Mon Sep 17 00:00:00 2001 +From 5592d63ffecfc0badf3c17d5863cfa2dc87ffa88 Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Wed, 12 Feb 2014 20:44:14 +0000 Subject: [PATCH] Allow vanilla commands to be the main version of a command diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index be4a647..36c0f7e 100644 +index 46710d8..238e282 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -317,8 +317,11 @@ public final class CraftServer implements Server { diff --git a/CraftBukkit-Patches/0088-Unfinalize-the-isDisconnected-method-by-bukkit.patch b/CraftBukkit-Patches/0088-Unfinalize-the-isDisconnected-method-by-bukkit.patch index c8e912d..57b290b 100644 --- a/CraftBukkit-Patches/0088-Unfinalize-the-isDisconnected-method-by-bukkit.patch +++ b/CraftBukkit-Patches/0088-Unfinalize-the-isDisconnected-method-by-bukkit.patch @@ -1,4 +1,4 @@ -From eba64c36ac125bfb19ab3f8017d535aee822a407 Mon Sep 17 00:00:00 2001 +From 81df68f800f262fe65c108319400ec47b91d9c40 Mon Sep 17 00:00:00 2001 From: hcherndon Date: Sat, 15 Feb 2014 01:51:20 -0600 Subject: [PATCH] Unfinalize the isDisconnected() method by bukkit. @@ -6,18 +6,18 @@ Subject: [PATCH] Unfinalize the isDisconnected() method by bukkit. This would literally mean the world to me. You have no idea how much this method being final is fucking me over right now. (Working with NPC's and what not.) diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 0dee302..cabd1fa 100644 +index 8fff72f..b650419 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -2039,7 +2039,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -2060,7 +2060,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList } // CraftBukkit start - Add "isDisconnected" method - public final boolean isDisconnected() { -+ public boolean isDisconnected() { - return !this.player.joining && !NetworkManager.a(this.networkManager).config().isAutoRead(); ++ public boolean isDisconnected() { // Spigot + return !this.player.joining && !this.networkManager.k.config().isAutoRead(); } - } + -- 2.1.0 diff --git a/CraftBukkit-Patches/0089-Implement-Silenceable-Lightning-API.patch b/CraftBukkit-Patches/0089-Implement-Silenceable-Lightning-API.patch index d5e8494..d219d4c 100644 --- a/CraftBukkit-Patches/0089-Implement-Silenceable-Lightning-API.patch +++ b/CraftBukkit-Patches/0089-Implement-Silenceable-Lightning-API.patch @@ -1,11 +1,11 @@ -From 1b1517f403c2a3d34c3eddbcb8f78e7d0ce42134 Mon Sep 17 00:00:00 2001 +From 4c6fabefb7e61513178c4d93e46d3c5b58434030 Mon Sep 17 00:00:00 2001 From: drXor Date: Sun, 23 Feb 2014 16:16:59 -0400 Subject: [PATCH] Implement Silenceable Lightning API diff --git a/src/main/java/net/minecraft/server/EntityLightning.java b/src/main/java/net/minecraft/server/EntityLightning.java -index 5bda5d3..1bbce9b 100644 +index d355e68..286fdef 100644 --- a/src/main/java/net/minecraft/server/EntityLightning.java +++ b/src/main/java/net/minecraft/server/EntityLightning.java @@ -13,6 +13,8 @@ public class EntityLightning extends EntityWeather { @@ -17,7 +17,7 @@ index 5bda5d3..1bbce9b 100644 public EntityLightning(World world, double d0, double d1, double d2) { this(world, d0, d1, d2, false); } -@@ -53,12 +55,19 @@ public class EntityLightning extends EntityWeather { +@@ -52,12 +54,19 @@ public class EntityLightning extends EntityWeather { } } } @@ -31,18 +31,18 @@ index 5bda5d3..1bbce9b 100644 } + // Spigot end - public void s_() { - super.s_(); + public void t_() { + super.t_(); - if (this.lifeTicks == 2) { + if (!isSilent && this.lifeTicks == 2) { // Spigot // CraftBukkit start - Use relative location for far away sounds //this.world.makeSound(this.locX, this.locY, this.locZ, "ambient.weather.thunder", 10000.0F, 0.8F + this.random.nextFloat() * 0.2F); float pitch = 0.8F + this.random.nextFloat() * 0.2F; diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 660fd07..f07d87d 100644 +index 62ad47d..6b26c8f 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -1412,6 +1412,22 @@ public class CraftWorld implements World { +@@ -1420,6 +1420,22 @@ public class CraftWorld implements World { { CraftWorld.this.playEffect( location, effect, 0 ); } diff --git a/CraftBukkit-Patches/0090-Use-one-PermissibleBase-for-all-Command-Blocks.patch b/CraftBukkit-Patches/0090-Use-one-PermissibleBase-for-all-Command-Blocks.patch index 8462a11..532813b 100644 --- a/CraftBukkit-Patches/0090-Use-one-PermissibleBase-for-all-Command-Blocks.patch +++ b/CraftBukkit-Patches/0090-Use-one-PermissibleBase-for-all-Command-Blocks.patch @@ -1,4 +1,4 @@ -From ffb7bbd08c48ce8a96f80193e164273203c02ab9 Mon Sep 17 00:00:00 2001 +From 768bcde3e79b42a77e37ad7b26ab497e0bc12762 Mon Sep 17 00:00:00 2001 From: FrozenBrain Date: Sun, 2 Mar 2014 21:13:46 +0100 Subject: [PATCH] Use one PermissibleBase for all Command Blocks diff --git a/CraftBukkit-Patches/0091-Prevent-hoppers-from-loading-chunks.patch b/CraftBukkit-Patches/0091-Prevent-hoppers-from-loading-chunks.patch index a17c28d..13b24bf 100644 --- a/CraftBukkit-Patches/0091-Prevent-hoppers-from-loading-chunks.patch +++ b/CraftBukkit-Patches/0091-Prevent-hoppers-from-loading-chunks.patch @@ -1,21 +1,21 @@ -From 0a2ce284436e4ec54b52915f09433c02544ec922 Mon Sep 17 00:00:00 2001 +From 61bbf0df8768aaf437b957eb136ea27f9f083090 Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Wed, 5 Mar 2014 20:27:27 +0000 Subject: [PATCH] Prevent hoppers from loading chunks diff --git a/src/main/java/net/minecraft/server/TileEntityHopper.java b/src/main/java/net/minecraft/server/TileEntityHopper.java -index f4dc9c7..280d64f 100644 +index b3bf687..4f50a47 100644 --- a/src/main/java/net/minecraft/server/TileEntityHopper.java +++ b/src/main/java/net/minecraft/server/TileEntityHopper.java -@@ -555,6 +555,7 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU +@@ -556,6 +556,7 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU int j = MathHelper.floor(d1); int k = MathHelper.floor(d2); BlockPosition blockposition = new BlockPosition(i, j, k); + if ( !world.isLoaded( blockposition ) ) return null; // Spigot - TileEntity tileentity = world.getTileEntity(new BlockPosition(i, j, k)); + Block block = world.getType(blockposition).getBlock(); - if (tileentity instanceof IInventory) { + if (block.isTileEntity()) { -- 2.1.0 diff --git a/CraftBukkit-Patches/0092-Guard-Entity-List.patch b/CraftBukkit-Patches/0092-Guard-Entity-List.patch index bea79e0..2f5ae85 100644 --- a/CraftBukkit-Patches/0092-Guard-Entity-List.patch +++ b/CraftBukkit-Patches/0092-Guard-Entity-List.patch @@ -1,23 +1,23 @@ -From 4621df9d2cb409141bc86e08543b51623560ca39 Mon Sep 17 00:00:00 2001 +From 3686a1f9bc04251600256dd63e5c90c891cddca6 Mon Sep 17 00:00:00 2001 From: md_5 Date: Mon, 10 Mar 2014 09:03:28 +1100 Subject: [PATCH] Guard Entity List diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 248f485..59bd847 100644 +index 974fe77..2ea78c2 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -33,7 +33,32 @@ import org.bukkit.event.weather.ThunderChangeEvent; - public abstract class World implements IBlockAccess { +@@ -34,7 +34,32 @@ public abstract class World implements IBlockAccess { + private int a = 63; protected boolean e; -- public final List entityList = Lists.newArrayList(); +- public final List entityList = Lists.newArrayList(); + // Spigot start - guard entity list from removals -+ public List entityList = new java.util.ArrayList() ++ public final List entityList = new java.util.ArrayList() + { + @Override -+ public Object remove(int index) ++ public Entity remove(int index) + { + guard(); + return super.remove( index ); @@ -39,10 +39,10 @@ index 248f485..59bd847 100644 + } + }; + // Spigot end - protected final List g = Lists.newArrayList(); - public final List h = Lists.newArrayList(); - public final List tileEntityList = Lists.newArrayList(); -@@ -101,6 +126,7 @@ public abstract class World implements IBlockAccess { + protected final List g = Lists.newArrayList(); + public final List h = Lists.newArrayList(); + public final List tileEntityList = Lists.newArrayList(); +@@ -102,6 +127,7 @@ public abstract class World implements IBlockAccess { private int tickPosition; // Spigot start @@ -50,7 +50,7 @@ index 248f485..59bd847 100644 protected final gnu.trove.map.hash.TLongShortHashMap chunkTickList; protected float growthOdds = 100; protected float modifiedOdds = 100; -@@ -1295,6 +1321,7 @@ public abstract class World implements IBlockAccess { +@@ -1341,6 +1367,7 @@ public abstract class World implements IBlockAccess { org.spigotmc.ActivationRange.activateEntities(this); // Spigot timings.entityTick.startTiming(); // Spigot @@ -58,7 +58,7 @@ index 248f485..59bd847 100644 // CraftBukkit start - Use field for loop variable for (this.tickPosition = 0; this.tickPosition < this.entityList.size(); ++this.tickPosition) { entity = (Entity) this.entityList.get(this.tickPosition); -@@ -1331,12 +1358,15 @@ public abstract class World implements IBlockAccess { +@@ -1377,12 +1404,15 @@ public abstract class World implements IBlockAccess { this.getChunkAt(j, k).b(entity); } diff --git a/CraftBukkit-Patches/0093-Fix-ConcurrentModificationException-while-being-idle.patch b/CraftBukkit-Patches/0093-Fix-ConcurrentModificationException-while-being-idle.patch index d7efa4f..1353294 100644 --- a/CraftBukkit-Patches/0093-Fix-ConcurrentModificationException-while-being-idle.patch +++ b/CraftBukkit-Patches/0093-Fix-ConcurrentModificationException-while-being-idle.patch @@ -1,4 +1,4 @@ -From f665effb267d8740b909cf1c2c32dae1916b5a2f Mon Sep 17 00:00:00 2001 +From 74a9ae442876b923afc2ffee51d06900fc15f166 Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Tue, 14 Jan 2014 20:11:25 +0000 Subject: [PATCH] Fix ConcurrentModificationException while being idle kicked @@ -6,10 +6,10 @@ Subject: [PATCH] Fix ConcurrentModificationException while being idle kicked diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 59bd847..1fe5cf9 100644 +index 2ea78c2..57fda56 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -1046,6 +1046,7 @@ public abstract class World implements IBlockAccess { +@@ -1090,6 +1090,7 @@ public abstract class World implements IBlockAccess { this.everyoneSleeping(); } @@ -17,7 +17,7 @@ index 59bd847..1fe5cf9 100644 int i = entity.ae; int j = entity.ag; -@@ -1062,6 +1063,7 @@ public abstract class World implements IBlockAccess { +@@ -1106,6 +1107,7 @@ public abstract class World implements IBlockAccess { this.entityList.remove(index); } // CraftBukkit end diff --git a/CraftBukkit-Patches/0094-Cancellable-WitherSkull-potion-effect.patch b/CraftBukkit-Patches/0094-Cancellable-WitherSkull-potion-effect.patch index b0c6c85..385f974 100644 --- a/CraftBukkit-Patches/0094-Cancellable-WitherSkull-potion-effect.patch +++ b/CraftBukkit-Patches/0094-Cancellable-WitherSkull-potion-effect.patch @@ -1,16 +1,16 @@ -From 77438a1939346d53bed1c6f42498f5070089251e Mon Sep 17 00:00:00 2001 +From f6f9ff67f4e3210480843d9d2a3a7e5c74fca239 Mon Sep 17 00:00:00 2001 From: drXor Date: Tue, 25 Feb 2014 15:15:26 -0400 Subject: [PATCH] Cancellable WitherSkull potion effect diff --git a/src/main/java/net/minecraft/server/EntityWitherSkull.java b/src/main/java/net/minecraft/server/EntityWitherSkull.java -index a78e84c..e3f26a4 100644 +index e169184..f0e627b 100644 --- a/src/main/java/net/minecraft/server/EntityWitherSkull.java +++ b/src/main/java/net/minecraft/server/EntityWitherSkull.java -@@ -35,8 +35,11 @@ public class EntityWitherSkull extends EntityFireball { +@@ -36,8 +36,11 @@ public class EntityWitherSkull extends EntityFireball { protected void a(MovingObjectPosition movingobjectposition) { - if (!this.world.isStatic) { + if (!this.world.isClientSide) { if (movingobjectposition.entity != null) { + // Spigot start + boolean didDamage = false; @@ -21,7 +21,7 @@ index a78e84c..e3f26a4 100644 if (!movingobjectposition.entity.isAlive()) { this.shooter.heal(5.0F, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.WITHER); // CraftBukkit } else { -@@ -44,10 +47,11 @@ public class EntityWitherSkull extends EntityFireball { +@@ -45,10 +48,11 @@ public class EntityWitherSkull extends EntityFireball { } } } else { diff --git a/CraftBukkit-Patches/0095-Descriptive-kick-reasons-instead-of-Nope.patch b/CraftBukkit-Patches/0095-Descriptive-kick-reasons-instead-of-Nope.patch index 9c05786..b182df8 100644 --- a/CraftBukkit-Patches/0095-Descriptive-kick-reasons-instead-of-Nope.patch +++ b/CraftBukkit-Patches/0095-Descriptive-kick-reasons-instead-of-Nope.patch @@ -1,14 +1,14 @@ -From 6305a93fd09c6970888d987c81787daa63701e4c Mon Sep 17 00:00:00 2001 +From 5366ec74774f139c46dc97f76cedabcf60753a10 Mon Sep 17 00:00:00 2001 From: drXor Date: Sat, 15 Mar 2014 01:30:05 -0400 Subject: [PATCH] Descriptive kick reasons instead of Nope! diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 25192f3..dfb4299 100644 +index 82accf4..d6bef0b 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -208,7 +208,7 @@ public abstract class Entity implements ICommandListener { +@@ -209,7 +209,7 @@ public abstract class Entity implements ICommandListener { if (f == Float.POSITIVE_INFINITY || f == Float.NEGATIVE_INFINITY) { if (this instanceof EntityPlayer) { this.world.getServer().getLogger().warning(this.getName() + " was caught trying to crash the server with an invalid yaw"); @@ -17,7 +17,7 @@ index 25192f3..dfb4299 100644 } f = 0; } -@@ -221,7 +221,7 @@ public abstract class Entity implements ICommandListener { +@@ -222,7 +222,7 @@ public abstract class Entity implements ICommandListener { if (f1 == Float.POSITIVE_INFINITY || f1 == Float.NEGATIVE_INFINITY) { if (this instanceof EntityPlayer) { this.world.getServer().getLogger().warning(this.getName() + " was caught trying to crash the server with an invalid pitch"); @@ -27,10 +27,10 @@ index 25192f3..dfb4299 100644 f1 = 0; } diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index e8f0167..80e03bc 100644 +index b650419..0bcdef4 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -186,7 +186,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -196,7 +196,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList // CraftBukkit start - Check for NaN if (!NumberConversions.isFinite(packetplayinflying.x) || !NumberConversions.isFinite(packetplayinflying.y) || !NumberConversions.isFinite(packetplayinflying.z)) { c.warn(player.getName() + " was caught trying to crash the server with an invalid position."); @@ -39,7 +39,7 @@ index e8f0167..80e03bc 100644 return; } // CraftBukkit end -@@ -874,7 +874,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -892,7 +892,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList this.player.z(); } else { PlayerConnection.c.warn(this.player.getName() + " tried to set an invalid carried item"); diff --git a/CraftBukkit-Patches/0096-Configurable-dragon-death-and-wither-spawn-sounds.patch b/CraftBukkit-Patches/0096-Configurable-dragon-death-and-wither-spawn-sounds.patch index ccf2007..7904034 100644 --- a/CraftBukkit-Patches/0096-Configurable-dragon-death-and-wither-spawn-sounds.patch +++ b/CraftBukkit-Patches/0096-Configurable-dragon-death-and-wither-spawn-sounds.patch @@ -1,14 +1,14 @@ -From 56599097f688176bf735a8e0134b380443aed751 Mon Sep 17 00:00:00 2001 +From 2516216206c3330ccc1057fe4e9bcc11e9fd2760 Mon Sep 17 00:00:00 2001 From: drXor Date: Sat, 29 Mar 2014 13:44:25 -0400 Subject: [PATCH] Configurable dragon death and wither spawn sounds diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java -index 51686c4..ec94142 100644 +index 253e60b..2b038e0 100644 --- a/src/main/java/net/minecraft/server/EntityEnderDragon.java +++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java -@@ -572,6 +572,7 @@ public class EntityEnderDragon extends EntityInsentient implements IComplex, IMo +@@ -578,6 +578,7 @@ public class EntityEnderDragon extends EntityInsentient implements IComplex, IMo double deltaX = this.locX - player.locX; double deltaZ = this.locZ - player.locZ; double distanceSquared = deltaX * deltaX + deltaZ * deltaZ; @@ -17,10 +17,10 @@ index 51686c4..ec94142 100644 double deltaLength = Math.sqrt(distanceSquared); double relativeX = player.locX + (deltaX / deltaLength) * viewDistance; diff --git a/src/main/java/net/minecraft/server/EntityWither.java b/src/main/java/net/minecraft/server/EntityWither.java -index d21c0e9..8ed2b4b 100644 +index 2816af1..d904a3f 100644 --- a/src/main/java/net/minecraft/server/EntityWither.java +++ b/src/main/java/net/minecraft/server/EntityWither.java -@@ -183,6 +183,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -191,6 +191,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { double deltaX = this.locX - player.locX; double deltaZ = this.locZ - player.locZ; double distanceSquared = deltaX * deltaX + deltaZ * deltaZ; diff --git a/CraftBukkit-Patches/0097-Display-Spigot-in-client-crashes-server-lists-and-Mo.patch b/CraftBukkit-Patches/0097-Display-Spigot-in-client-crashes-server-lists-and-Mo.patch index b1bd79f..8149318 100644 --- a/CraftBukkit-Patches/0097-Display-Spigot-in-client-crashes-server-lists-and-Mo.patch +++ b/CraftBukkit-Patches/0097-Display-Spigot-in-client-crashes-server-lists-and-Mo.patch @@ -1,4 +1,4 @@ -From 671c6af2057b601d2ca7efee24fe3c79ed5e687c Mon Sep 17 00:00:00 2001 +From 98a6c5b5dc1486fe21610b16ae5e0fea70c6d67e Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Fri, 11 Apr 2014 11:16:34 +0100 Subject: [PATCH] Display 'Spigot' in client crashes, server lists and Mojang @@ -6,10 +6,10 @@ Subject: [PATCH] Display 'Spigot' in client crashes, server lists and Mojang diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 34fb946..ff98d02 100644 +index a5cca2b..b2ad2ca 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1053,7 +1053,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -1015,7 +1015,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs } public String getServerModName() { diff --git a/CraftBukkit-Patches/0098-Treat-Bungee-as-Online-Mode.patch b/CraftBukkit-Patches/0098-Treat-Bungee-as-Online-Mode.patch index 99202c7..73443c4 100644 --- a/CraftBukkit-Patches/0098-Treat-Bungee-as-Online-Mode.patch +++ b/CraftBukkit-Patches/0098-Treat-Bungee-as-Online-Mode.patch @@ -1,16 +1,16 @@ -From 6aef733e905e1ec1c487d21ff858f2f49f4022ec Mon Sep 17 00:00:00 2001 +From b505768f38abdcb3d062cd825ebb4ec02422a002 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 12 Apr 2014 21:23:58 +1000 Subject: [PATCH] Treat Bungee as Online Mode diff --git a/src/main/java/net/minecraft/server/NameReferencingFileConverter.java b/src/main/java/net/minecraft/server/NameReferencingFileConverter.java -index 33d0702..3b50d40 100644 +index 31aa200..c1f8ff6 100644 --- a/src/main/java/net/minecraft/server/NameReferencingFileConverter.java +++ b/src/main/java/net/minecraft/server/NameReferencingFileConverter.java -@@ -53,7 +53,7 @@ public class NameReferencingFileConverter { - private static void a(MinecraftServer minecraftserver, Collection collection, ProfileLookupCallback profilelookupcallback) { - String[] astring = (String[]) Iterators.toArray(Iterators.filter(collection.iterator(), new PredicateEmptyList()), String.class); +@@ -63,7 +63,7 @@ public class NameReferencingFileConverter { + } + }), String.class); - if (minecraftserver.getOnlineMode()) { + if (minecraftserver.getOnlineMode() || org.spigotmc.SpigotConfig.bungee) { // Spigot: bungee = online mode, for now. diff --git a/CraftBukkit-Patches/0099-Add-Conversion-Message.patch b/CraftBukkit-Patches/0099-Add-Conversion-Message.patch index daeeddc..ae29d11 100644 --- a/CraftBukkit-Patches/0099-Add-Conversion-Message.patch +++ b/CraftBukkit-Patches/0099-Add-Conversion-Message.patch @@ -1,17 +1,17 @@ -From 75adf09cba4e053a9918a79a62215cf7fd0233d1 Mon Sep 17 00:00:00 2001 +From bcfef4b5882636b74d1535d0bb40df88f4e8bc1f Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 12 Apr 2014 23:30:44 +1000 Subject: [PATCH] Add Conversion Message diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index ced9efa..80755dd 100644 +index 188a094..28135ba 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java -@@ -453,6 +453,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -513,6 +513,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer } - protected boolean aP() { + protected boolean aQ() { + server.getLogger().info( "**** Beginning UUID conversion, this may take A LONG time ****"); // Spigot, let the user know whats up! boolean flag = false; diff --git a/CraftBukkit-Patches/0100-Properly-cancel-fishing-event.-Fixes-BUKKIT-5396.patch b/CraftBukkit-Patches/0100-Properly-cancel-fishing-event.-Fixes-BUKKIT-5396.patch index ae258c0..2087386 100644 --- a/CraftBukkit-Patches/0100-Properly-cancel-fishing-event.-Fixes-BUKKIT-5396.patch +++ b/CraftBukkit-Patches/0100-Properly-cancel-fishing-event.-Fixes-BUKKIT-5396.patch @@ -1,4 +1,4 @@ -From 294401c8382d6ee3e78a42288a30ff9fb0a626f1 Mon Sep 17 00:00:00 2001 +From 2f62f2f27a069a33ffdea27c32ad77d41a45b4a1 Mon Sep 17 00:00:00 2001 From: "gjmcferrin@gmail.com" Date: Mon, 10 Feb 2014 10:05:11 -0500 Subject: [PATCH] Properly cancel fishing event. Fixes BUKKIT-5396 @@ -10,7 +10,7 @@ cleared. This ensures that the player's hooked entity value is set to null so that the next attempt will result in the proper state being called. diff --git a/src/main/java/net/minecraft/server/ItemFishingRod.java b/src/main/java/net/minecraft/server/ItemFishingRod.java -index 423a776..c14d261 100644 +index 3cf292f..050a504 100644 --- a/src/main/java/net/minecraft/server/ItemFishingRod.java +++ b/src/main/java/net/minecraft/server/ItemFishingRod.java @@ -23,6 +23,7 @@ public class ItemFishingRod extends Item { diff --git a/CraftBukkit-Patches/0101-Print-Stack-on-InternalException.patch b/CraftBukkit-Patches/0101-Print-Stack-on-InternalException.patch index 92b265d..35fcb55 100644 --- a/CraftBukkit-Patches/0101-Print-Stack-on-InternalException.patch +++ b/CraftBukkit-Patches/0101-Print-Stack-on-InternalException.patch @@ -1,21 +1,21 @@ -From 8a26917a0a8b00bcbc5534681dc1d97e96c43bf5 Mon Sep 17 00:00:00 2001 +From 7bff30bb6fb6973f318d5108010fd39c2089ce91 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 13 Apr 2014 09:00:59 +1000 Subject: [PATCH] Print Stack on InternalException diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java -index 78d5949..65b66cd 100644 +index f7a011a..b62cc5a 100644 --- a/src/main/java/net/minecraft/server/NetworkManager.java +++ b/src/main/java/net/minecraft/server/NetworkManager.java -@@ -71,6 +71,7 @@ public class NetworkManager extends SimpleChannelInboundHandler { - public void exceptionCaught(ChannelHandlerContext channelhandlercontext, Throwable throwable) { - NetworkManager.f.debug("Disconnecting " + this.getSocketAddress(), throwable); - this.close(new ChatMessage("disconnect.genericReason", new Object[] { "Internal Exception: " + throwable})); +@@ -111,6 +111,7 @@ public class NetworkManager extends SimpleChannelInboundHandler { + } + + this.close(chatmessage); + if (MinecraftServer.getServer().isDebugging()) throwable.printStackTrace(); // Spigot } - protected void a(ChannelHandlerContext channelhandlercontext, Packet packet) { + protected void a(ChannelHandlerContext channelhandlercontext, Packet packet) throws Exception { -- 2.1.0 diff --git a/CraftBukkit-Patches/0102-Use-Offline-Player-Data-Once-if-Required.patch b/CraftBukkit-Patches/0102-Use-Offline-Player-Data-Once-if-Required.patch index 49d0e42..5a1d4c9 100644 --- a/CraftBukkit-Patches/0102-Use-Offline-Player-Data-Once-if-Required.patch +++ b/CraftBukkit-Patches/0102-Use-Offline-Player-Data-Once-if-Required.patch @@ -1,4 +1,4 @@ -From 1c88f9ed2723380e83496f330bc33164e603aabc Mon Sep 17 00:00:00 2001 +From 50e1322dc295a6c10cb28bd67b4fff85f00af049 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 13 Apr 2014 14:41:23 +1000 Subject: [PATCH] Use Offline Player Data Once if Required. @@ -6,7 +6,7 @@ Subject: [PATCH] Use Offline Player Data Once if Required. If we are online mode and the only copy of player data we can find is the player's offline mode data, we will attempt a once off conversion by reading this data and then renaming the file so it won't be used again. diff --git a/src/main/java/net/minecraft/server/WorldNBTStorage.java b/src/main/java/net/minecraft/server/WorldNBTStorage.java -index 6fa10cc..ee79cbd 100644 +index ae78fa2..bb87701 100644 --- a/src/main/java/net/minecraft/server/WorldNBTStorage.java +++ b/src/main/java/net/minecraft/server/WorldNBTStorage.java @@ -200,10 +200,28 @@ public class WorldNBTStorage implements IDataManager, IPlayerFileData { diff --git a/CraftBukkit-Patches/0103-Use-Provided-Case-for-Non-Existent-Offline-Players.patch b/CraftBukkit-Patches/0103-Use-Provided-Case-for-Non-Existent-Offline-Players.patch index 27f98bc..8ba7d90 100644 --- a/CraftBukkit-Patches/0103-Use-Provided-Case-for-Non-Existent-Offline-Players.patch +++ b/CraftBukkit-Patches/0103-Use-Provided-Case-for-Non-Existent-Offline-Players.patch @@ -1,14 +1,14 @@ -From f1665cea0d05a60b4d9ce53ccde91e55d5491fdf Mon Sep 17 00:00:00 2001 +From 404d65b51927004f42484ecb86398567bc9b2e92 Mon Sep 17 00:00:00 2001 From: md_5 Date: Mon, 14 Apr 2014 09:46:20 +1000 Subject: [PATCH] Use Provided Case for Non Existent Offline Players diff --git a/src/main/java/net/minecraft/server/UserCache.java b/src/main/java/net/minecraft/server/UserCache.java -index edbf02f..6781a64 100644 +index f053f4e..2447b48 100644 --- a/src/main/java/net/minecraft/server/UserCache.java +++ b/src/main/java/net/minecraft/server/UserCache.java -@@ -113,7 +113,7 @@ public class UserCache { +@@ -143,7 +143,7 @@ public class UserCache { this.e.remove(gameprofile); this.e.addFirst(gameprofile); } else { @@ -16,7 +16,7 @@ index edbf02f..6781a64 100644 + gameprofile = a(this.f, s); // Spigot - use correct case for offline players if (gameprofile != null) { this.a(gameprofile); - usercacheentry = (UserCacheEntry) this.c.get(s1); + usercache_usercacheentry = (UserCache.UserCacheEntry) this.c.get(s1); -- 2.1.0 diff --git a/CraftBukkit-Patches/0104-Check-for-blank-OfflinePlayer-Names.patch b/CraftBukkit-Patches/0104-Check-for-blank-OfflinePlayer-Names.patch index 413304e..5424147 100644 --- a/CraftBukkit-Patches/0104-Check-for-blank-OfflinePlayer-Names.patch +++ b/CraftBukkit-Patches/0104-Check-for-blank-OfflinePlayer-Names.patch @@ -1,14 +1,14 @@ -From d7706ba9e32131f719f6fd15bd92e658d9a10e56 Mon Sep 17 00:00:00 2001 +From c94603d9db9bc4f01a22597e35f3ef63319544b3 Mon Sep 17 00:00:00 2001 From: md_5 Date: Mon, 14 Apr 2014 17:21:24 +1000 Subject: [PATCH] Check for blank OfflinePlayer Names diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 36c0f7e..db7a8f4 100644 +index 238e282..982d95e 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1277,6 +1277,7 @@ public final class CraftServer implements Server { +@@ -1291,6 +1291,7 @@ public final class CraftServer implements Server { @Deprecated public OfflinePlayer getOfflinePlayer(String name) { Validate.notNull(name, "Name cannot be null"); diff --git a/CraftBukkit-Patches/0105-Fix-Player-Banning.patch b/CraftBukkit-Patches/0105-Fix-Player-Banning.patch index cf14c7c..0bd7eab 100644 --- a/CraftBukkit-Patches/0105-Fix-Player-Banning.patch +++ b/CraftBukkit-Patches/0105-Fix-Player-Banning.patch @@ -1,4 +1,4 @@ -From a8b93fb5c899904d8964d37db82215488ebf6f09 Mon Sep 17 00:00:00 2001 +From 87e3af6c9cc92d97990213263d3dbb59251aa01f Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 15 Apr 2014 10:32:48 +1000 Subject: [PATCH] Fix Player Banning @@ -6,10 +6,10 @@ Subject: [PATCH] Fix Player Banning This issue stems from the fact that Bukkit's API only allows a UUID to be banned, but Minecraft requires both a UUID and name. To fix this we modify the code to require a UUID or a name, or both. The correct fix would be expanding the API to be able to provide a name, however this would require plugin changes. diff --git a/src/main/java/net/minecraft/server/GameProfileBanEntry.java b/src/main/java/net/minecraft/server/GameProfileBanEntry.java -index 1cd7f9c..a5803cc 100644 +index 27ce9d9..e68d2b3 100644 --- a/src/main/java/net/minecraft/server/GameProfileBanEntry.java +++ b/src/main/java/net/minecraft/server/GameProfileBanEntry.java -@@ -28,20 +28,29 @@ public class GameProfileBanEntry extends ExpirableListEntry { +@@ -28,20 +28,29 @@ public class GameProfileBanEntry extends ExpirableListEntry { } private static GameProfile b(JsonObject jsonobject) { diff --git a/CraftBukkit-Patches/0106-Fix-ban-expire-dates.patch b/CraftBukkit-Patches/0106-Fix-ban-expire-dates.patch index 0f1ad9f..3e07514 100644 --- a/CraftBukkit-Patches/0106-Fix-ban-expire-dates.patch +++ b/CraftBukkit-Patches/0106-Fix-ban-expire-dates.patch @@ -1,14 +1,14 @@ -From ba72c7ba6a3dff51302d741b6ea180d7222f86bc Mon Sep 17 00:00:00 2001 +From 2681120997c3cbbfd9b53ba0d1cb3170d9f03895 Mon Sep 17 00:00:00 2001 From: md_5 Date: Wed, 16 Apr 2014 10:09:56 +1000 Subject: [PATCH] Fix ban expire dates. diff --git a/src/main/java/net/minecraft/server/GameProfileBanEntry.java b/src/main/java/net/minecraft/server/GameProfileBanEntry.java -index a5803cc..444f26b 100644 +index e68d2b3..16fe481 100644 --- a/src/main/java/net/minecraft/server/GameProfileBanEntry.java +++ b/src/main/java/net/minecraft/server/GameProfileBanEntry.java -@@ -12,7 +12,7 @@ public class GameProfileBanEntry extends ExpirableListEntry { +@@ -12,7 +12,7 @@ public class GameProfileBanEntry extends ExpirableListEntry { } public GameProfileBanEntry(GameProfile gameprofile, Date date, String s, Date date1, String s1) { diff --git a/CraftBukkit-Patches/0107-Correct-Ban-Expiration.patch b/CraftBukkit-Patches/0107-Correct-Ban-Expiration.patch index 56e1fa8..775c6c5 100644 --- a/CraftBukkit-Patches/0107-Correct-Ban-Expiration.patch +++ b/CraftBukkit-Patches/0107-Correct-Ban-Expiration.patch @@ -1,14 +1,14 @@ -From 4af6734fb4e81c5b8729fd3df41970c723d011bc Mon Sep 17 00:00:00 2001 +From cb0a96fafe85d1aee8c6e911db08f72e11b80ee8 Mon Sep 17 00:00:00 2001 From: md_5 Date: Wed, 16 Apr 2014 11:14:38 +1000 Subject: [PATCH] Correct Ban Expiration diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java -index c942db1..6b93aa9 100644 +index b674e67..ec04782 100644 --- a/src/main/java/net/minecraft/server/PlayerList.java +++ b/src/main/java/net/minecraft/server/PlayerList.java -@@ -385,7 +385,7 @@ public abstract class PlayerList { +@@ -415,7 +415,7 @@ public abstract class PlayerList { } // return s; diff --git a/CraftBukkit-Patches/0108-Convert-Horses-owner-to-UUID.patch b/CraftBukkit-Patches/0108-Convert-Horses-owner-to-UUID.patch index 2e8ff0c..4e2b526 100644 --- a/CraftBukkit-Patches/0108-Convert-Horses-owner-to-UUID.patch +++ b/CraftBukkit-Patches/0108-Convert-Horses-owner-to-UUID.patch @@ -1,14 +1,14 @@ -From ae22d9b47b84aadc8046cc9a97097132d86f507a Mon Sep 17 00:00:00 2001 +From 619a7bb400d731c06a62f5d8b0341fb7a2bf38ba Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 16 Apr 2014 01:40:30 -0400 Subject: [PATCH] Convert Horses owner to UUID diff --git a/src/main/java/net/minecraft/server/EntityHorse.java b/src/main/java/net/minecraft/server/EntityHorse.java -index b3ad7e7..50e9292 100644 +index 272028f..688099f 100644 --- a/src/main/java/net/minecraft/server/EntityHorse.java +++ b/src/main/java/net/minecraft/server/EntityHorse.java -@@ -1010,6 +1010,17 @@ public class EntityHorse extends EntityAnimal implements IInventoryListener { +@@ -1016,6 +1016,17 @@ public class EntityHorse extends EntityAnimal implements IInventoryListener { s = nbttagcompound.getString("OwnerUUID"); } else { String s1 = nbttagcompound.getString("Owner"); diff --git a/CraftBukkit-Patches/0109-Expand-team-API-to-allow-arbitrary-strings.patch b/CraftBukkit-Patches/0109-Expand-team-API-to-allow-arbitrary-strings.patch index 2af224c..36332c4 100644 --- a/CraftBukkit-Patches/0109-Expand-team-API-to-allow-arbitrary-strings.patch +++ b/CraftBukkit-Patches/0109-Expand-team-API-to-allow-arbitrary-strings.patch @@ -1,14 +1,14 @@ -From 4aa76676c86dcc6ac3b61166ef7581c22e4bea69 Mon Sep 17 00:00:00 2001 +From 008bf408d502227c1979f95c858ee21b41bae6cc Mon Sep 17 00:00:00 2001 From: md_5 Date: Thu, 17 Apr 2014 19:22:22 +1000 Subject: [PATCH] Expand team API to allow arbitrary strings. diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java -index fa6e826..a44c160 100644 +index 342d4af..6b7233e 100644 --- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java +++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftTeam.java -@@ -117,6 +117,19 @@ final class CraftTeam extends CraftScoreboardComponent implements Team { +@@ -115,6 +115,19 @@ final class CraftTeam extends CraftScoreboardComponent implements Team { return players.build(); } @@ -28,7 +28,7 @@ index fa6e826..a44c160 100644 public int getSize() throws IllegalStateException { CraftScoreboard scoreboard = checkState(); -@@ -125,28 +138,50 @@ final class CraftTeam extends CraftScoreboardComponent implements Team { +@@ -123,28 +136,50 @@ final class CraftTeam extends CraftScoreboardComponent implements Team { public void addPlayer(OfflinePlayer player) throws IllegalStateException, IllegalArgumentException { Validate.notNull(player, "OfflinePlayer cannot be null"); @@ -83,7 +83,7 @@ index fa6e826..a44c160 100644 } @Override -@@ -213,27 +248,6 @@ final class CraftTeam extends CraftScoreboardComponent implements Team { +@@ -211,27 +246,6 @@ final class CraftTeam extends CraftScoreboardComponent implements Team { final CraftTeam other = (CraftTeam) obj; return !(this.team != other.team && (this.team == null || !this.team.equals(other.team))); } diff --git a/CraftBukkit-Patches/0110-Add-Score.isScoreSet-Z-API.patch b/CraftBukkit-Patches/0110-Add-Score.isScoreSet-Z-API.patch index 3c2c088..1e292c8 100644 --- a/CraftBukkit-Patches/0110-Add-Score.isScoreSet-Z-API.patch +++ b/CraftBukkit-Patches/0110-Add-Score.isScoreSet-Z-API.patch @@ -1,4 +1,4 @@ -From 1cb8abf10cbefb1ea8ae9a0d360c0d218e144441 Mon Sep 17 00:00:00 2001 +From cc614301122f7255fe7d3e4e1d6fe7a46d55d176 Mon Sep 17 00:00:00 2001 From: md_5 Date: Thu, 17 Apr 2014 19:35:53 +1000 Subject: [PATCH] Add Score.isScoreSet()Z API. diff --git a/CraftBukkit-Patches/0111-Log-null-TileEntity-Owner.patch b/CraftBukkit-Patches/0111-Log-null-TileEntity-Owner.patch index 8c1f4e2..3b0d187 100644 --- a/CraftBukkit-Patches/0111-Log-null-TileEntity-Owner.patch +++ b/CraftBukkit-Patches/0111-Log-null-TileEntity-Owner.patch @@ -1,14 +1,14 @@ -From 028be30095ac10a9c799a6b2103bc059805f965a Mon Sep 17 00:00:00 2001 +From d79b0d59a35cf78aae1efe9164bb19f6ba4220c6 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 20 Apr 2014 11:16:54 +1000 Subject: [PATCH] Log null TileEntity Owner diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java -index a93ad27..80c7937 100644 +index 71bf63a..a829555 100644 --- a/src/main/java/net/minecraft/server/TileEntity.java +++ b/src/main/java/net/minecraft/server/TileEntity.java -@@ -189,7 +189,14 @@ public abstract class TileEntity { +@@ -224,7 +224,14 @@ public abstract class TileEntity { // CraftBukkit start - add method public InventoryHolder getOwner() { diff --git a/CraftBukkit-Patches/0112-Don-t-special-case-invalid-usernames-for-UUIDs.patch b/CraftBukkit-Patches/0112-Don-t-special-case-invalid-usernames-for-UUIDs.patch index 094b108..5a286fc 100644 --- a/CraftBukkit-Patches/0112-Don-t-special-case-invalid-usernames-for-UUIDs.patch +++ b/CraftBukkit-Patches/0112-Don-t-special-case-invalid-usernames-for-UUIDs.patch @@ -1,14 +1,14 @@ -From c37498035bb6cec0366b6c4225348015fb727ab2 Mon Sep 17 00:00:00 2001 +From 239050cc5a4688f0903096e36ab503e25bb58379 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 20 Apr 2014 18:58:00 +1000 Subject: [PATCH] Don't special case 'invalid' usernames for UUIDs. diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index db7a8f4..acc2105 100644 +index 982d95e..9328d8e 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1279,11 +1279,6 @@ public final class CraftServer implements Server { +@@ -1293,11 +1293,6 @@ public final class CraftServer implements Server { Validate.notNull(name, "Name cannot be null"); com.google.common.base.Preconditions.checkArgument( !org.apache.commons.lang.StringUtils.isBlank( name ), "Name cannot be blank" ); // Spigot diff --git a/CraftBukkit-Patches/0113-Convert-player-skulls-async.patch b/CraftBukkit-Patches/0113-Convert-player-skulls-async.patch index 7d157e3..4b4ff82 100644 --- a/CraftBukkit-Patches/0113-Convert-player-skulls-async.patch +++ b/CraftBukkit-Patches/0113-Convert-player-skulls-async.patch @@ -1,14 +1,14 @@ -From edd4640a6e72b23c34c915bad412e2b5f0ff165d Mon Sep 17 00:00:00 2001 +From 1e48bf3d21be15e7bbad5aa649279266c667b870 Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Sun, 20 Apr 2014 13:18:55 +0100 Subject: [PATCH] Convert player skulls async diff --git a/src/main/java/net/minecraft/server/ItemSkull.java b/src/main/java/net/minecraft/server/ItemSkull.java -index 17e88b8..75763ab 100644 +index a46cfef..e710073 100644 --- a/src/main/java/net/minecraft/server/ItemSkull.java +++ b/src/main/java/net/minecraft/server/ItemSkull.java -@@ -109,17 +109,24 @@ public class ItemSkull extends Item { +@@ -109,13 +109,21 @@ public class ItemSkull extends Item { return super.a(itemstack); } @@ -33,15 +33,11 @@ index 17e88b8..75763ab 100644 return true; } else { return false; - } - } -- - } diff --git a/src/main/java/net/minecraft/server/TileEntitySkull.java b/src/main/java/net/minecraft/server/TileEntitySkull.java -index 889ae50..6cc8738 100644 +index 20efee7..056e4e7 100644 --- a/src/main/java/net/minecraft/server/TileEntitySkull.java +++ b/src/main/java/net/minecraft/server/TileEntitySkull.java -@@ -5,11 +5,66 @@ import com.mojang.authlib.GameProfile; +@@ -5,11 +5,78 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import java.util.UUID; @@ -56,12 +52,13 @@ index 889ae50..6cc8738 100644 + +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.mojang.authlib.Agent; ++import com.mojang.authlib.ProfileLookupCallback; +// Spigot end + public class TileEntitySkull extends TileEntity { private int a; - public int rotation; + private int rotation; private GameProfile g = null; + // Spigot start + public static final Executor executor = Executors.newFixedThreadPool(3, @@ -77,8 +74,19 @@ index 889ae50..6cc8738 100644 + @Override + public GameProfile load(String key) throws Exception + { -+ GameProfile[] profiles = new GameProfile[1]; -+ GameProfileLookup gameProfileLookup = new GameProfileLookup(profiles); ++ final GameProfile[] profiles = new GameProfile[1]; ++ ProfileLookupCallback gameProfileLookup = new ProfileLookupCallback() { ++ ++ @Override ++ public void onProfileLookupSucceeded(GameProfile gp) { ++ profiles[0] = gp; ++ } ++ ++ @Override ++ public void onProfileLookupFailed(GameProfile gp, Exception excptn) { ++ profiles[0] = gp; ++ } ++ }; + + MinecraftServer.getServer().getGameProfileRepository().findProfilesByNames(new String[] { key }, Agent.MINECRAFT, gameProfileLookup); + @@ -95,7 +103,7 @@ index 889ae50..6cc8738 100644 + + if ( property == null ) + { -+ profile = MinecraftServer.getServer().aB().fillProfileProperties( profile, true ); ++ profile = MinecraftServer.getServer().aC().fillProfileProperties( profile, true ); + } + } + @@ -108,7 +116,7 @@ index 889ae50..6cc8738 100644 public TileEntitySkull() {} -@@ -68,35 +123,60 @@ public class TileEntitySkull extends TileEntity { +@@ -68,35 +135,66 @@ public class TileEntitySkull extends TileEntity { } private void e() { @@ -153,10 +161,14 @@ index 889ae50..6cc8738 100644 + callback.apply(profile); } else { - Property property = (Property) Iterables.getFirst(gameprofile1.getProperties().get("textures"), (Object) null); -- ++ Property property = (Property) Iterables.getFirst(profile.getProperties().get("textures"), (Object) null); + - if (property == null) { -- gameprofile1 = MinecraftServer.getServer().aB().fillProfileProperties(gameprofile1, true); -- } +- gameprofile1 = MinecraftServer.getServer().aC().fillProfileProperties(gameprofile1, true); ++ if (property != null) { ++ callback.apply(profile); ++ return; + } - - return gameprofile1; + executor.execute(new Runnable() { diff --git a/CraftBukkit-Patches/0114-Prevent-NoClassDefError-crash-and-notify-on-crash.patch b/CraftBukkit-Patches/0114-Prevent-NoClassDefError-crash-and-notify-on-crash.patch index dfacc27..3b96c87 100644 --- a/CraftBukkit-Patches/0114-Prevent-NoClassDefError-crash-and-notify-on-crash.patch +++ b/CraftBukkit-Patches/0114-Prevent-NoClassDefError-crash-and-notify-on-crash.patch @@ -1,14 +1,14 @@ -From 55c134f57e20ed3d201642bb8ecd191a04c06fc4 Mon Sep 17 00:00:00 2001 +From 3787870d572aaa638ccb121abf584ebe424b6740 Mon Sep 17 00:00:00 2001 From: David Date: Mon, 21 Apr 2014 12:43:08 +0100 Subject: [PATCH] Prevent NoClassDefError crash and notify on crash diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 1fe5cf9..8579802 100644 +index 57fda56..d58733c 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -131,6 +131,8 @@ public abstract class World implements IBlockAccess { +@@ -132,6 +132,8 @@ public abstract class World implements IBlockAccess { protected float growthOdds = 100; protected float modifiedOdds = 100; private final byte chunkTickRadius; @@ -17,7 +17,7 @@ index 1fe5cf9..8579802 100644 public static long chunkToKey(int x, int z) { -@@ -533,6 +535,9 @@ public abstract class World implements IBlockAccess { +@@ -567,6 +569,9 @@ public abstract class World implements IBlockAccess { } // CraftBukkit end iblockdata.getBlock().doPhysics(this, blockposition, iblockdata, block); diff --git a/CraftBukkit-Patches/0115-Check-Skull-canPlace.patch b/CraftBukkit-Patches/0115-Check-Skull-canPlace.patch index db8b048..f75d577 100644 --- a/CraftBukkit-Patches/0115-Check-Skull-canPlace.patch +++ b/CraftBukkit-Patches/0115-Check-Skull-canPlace.patch @@ -1,17 +1,17 @@ -From e2619bd3c2fc09ec7880ea8d9f4a152881d2795f Mon Sep 17 00:00:00 2001 +From 9759ce95b64c079fd6ef4dde813b388a12b5db1f Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 15 Apr 2014 10:48:35 +1000 Subject: [PATCH] Check Skull canPlace diff --git a/src/main/java/net/minecraft/server/ItemSkull.java b/src/main/java/net/minecraft/server/ItemSkull.java -index 75763ab..7f727f5 100644 +index e710073..519574b 100644 --- a/src/main/java/net/minecraft/server/ItemSkull.java +++ b/src/main/java/net/minecraft/server/ItemSkull.java @@ -35,6 +35,12 @@ public class ItemSkull extends Item { return false; } else { - if (!world.isStatic) { + if (!world.isClientSide) { + // Spigot Start + if ( !Blocks.SKULL.canPlace( world, blockposition ) ) + { diff --git a/CraftBukkit-Patches/0116-Don-t-let-trees-replace-any-block.patch b/CraftBukkit-Patches/0116-Don-t-let-trees-replace-any-block.patch deleted file mode 100644 index 9528c4b..0000000 --- a/CraftBukkit-Patches/0116-Don-t-let-trees-replace-any-block.patch +++ /dev/null @@ -1,30 +0,0 @@ -From c1f010298988666707b32154846543ba8f363a07 Mon Sep 17 00:00:00 2001 -From: Thinkofdeath -Date: Mon, 20 Jan 2014 20:42:28 +0000 -Subject: [PATCH] Don't let trees replace any block. - - -diff --git a/src/main/java/net/minecraft/server/WorldGenForestTree.java b/src/main/java/net/minecraft/server/WorldGenForestTree.java -index 2653bd8..dd9e5b6 100644 ---- a/src/main/java/net/minecraft/server/WorldGenForestTree.java -+++ b/src/main/java/net/minecraft/server/WorldGenForestTree.java -@@ -123,7 +123,15 @@ public class WorldGenForestTree extends WorldGenTreeAbstract { - int k2; - - for (k2 = 0; k2 < j2; ++k2) { -- this.a(world, new BlockPosition(blockposition.getX() + l1, k1 - k2 - 1, blockposition.getZ() + i2), Blocks.LOG2, EnumLogVariant.DARK_OAK.a() - 4); -+ // Spigot start -+ BlockPosition position = new BlockPosition(blockposition.getX() + l1, k1 - k2 - 1, blockposition.getZ() + i2); -+ Block bl = world.getType(position).getBlock(); -+ -+ if (bl.getMaterial() == Material.AIR || bl.getMaterial() == Material.LEAVES) -+ { -+ this.a(world, position, Blocks.LOG2, EnumLogVariant.DARK_OAK.a() - 4); -+ } -+ // Spigot end - } - - int l2; --- -2.1.0 - diff --git a/CraftBukkit-Patches/0117-Fix-race-condition-that-could-kill-connections-befor.patch b/CraftBukkit-Patches/0116-Fix-race-condition-that-could-kill-connections-befor.patch similarity index 72% rename from CraftBukkit-Patches/0117-Fix-race-condition-that-could-kill-connections-befor.patch rename to CraftBukkit-Patches/0116-Fix-race-condition-that-could-kill-connections-befor.patch index 9c3625e..d24cd74 100644 --- a/CraftBukkit-Patches/0117-Fix-race-condition-that-could-kill-connections-befor.patch +++ b/CraftBukkit-Patches/0116-Fix-race-condition-that-could-kill-connections-befor.patch @@ -1,4 +1,4 @@ -From 8bd55705d1a166d769c54fc25713dca93ce3efa0 Mon Sep 17 00:00:00 2001 +From b23cad30d0407c9247cf6327724aa31bc737d92b Mon Sep 17 00:00:00 2001 From: Jonas Konrad Date: Fri, 25 Apr 2014 23:46:46 +0200 Subject: [PATCH] Fix race condition that could kill connections before they @@ -12,42 +12,42 @@ initialized. The ServerConnection does not remove NetworkManagers with this flag. diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java -index 65b66cd..b4eb893 100644 +index b62cc5a..006b172 100644 --- a/src/main/java/net/minecraft/server/NetworkManager.java +++ b/src/main/java/net/minecraft/server/NetworkManager.java -@@ -35,6 +35,7 @@ public class NetworkManager extends SimpleChannelInboundHandler { - public SocketAddress j; +@@ -68,6 +68,7 @@ public class NetworkManager extends SimpleChannelInboundHandler { + public SocketAddress l; public java.util.UUID spoofedUUID; public com.mojang.authlib.properties.Property[] spoofedProfile; + public boolean preparing = true; // Spigot End - private PacketListener k; - private IChatBaseComponent l; -@@ -49,6 +50,9 @@ public class NetworkManager extends SimpleChannelInboundHandler { + private PacketListener m; + private IChatBaseComponent n; +@@ -82,6 +83,9 @@ public class NetworkManager extends SimpleChannelInboundHandler { super.channelActive(channelhandlercontext); - this.i = channelhandlercontext.channel(); - this.j = this.i.remoteAddress(); + this.k = channelhandlercontext.channel(); + this.l = this.k.remoteAddress(); + // Spigot Start + this.preparing = false; + // Spigot End try { this.a(EnumProtocol.HANDSHAKING); -@@ -163,6 +167,9 @@ public class NetworkManager extends SimpleChannelInboundHandler { +@@ -235,6 +239,9 @@ public class NetworkManager extends SimpleChannelInboundHandler { } public void close(IChatBaseComponent ichatbasecomponent) { + // Spigot Start + this.preparing = false; + // Spigot End - if (this.i.isOpen()) { - this.i.close(); // We can't wait as this may be called from an event loop. - this.l = ichatbasecomponent; + if (this.k.isOpen()) { + this.k.close(); // We can't wait as this may be called from an event loop. + this.n = ichatbasecomponent; diff --git a/src/main/java/net/minecraft/server/ServerConnection.java b/src/main/java/net/minecraft/server/ServerConnection.java -index 6c6ffa7..de1b3d1 100644 +index 931ab66..2708d64 100644 --- a/src/main/java/net/minecraft/server/ServerConnection.java +++ b/src/main/java/net/minecraft/server/ServerConnection.java -@@ -71,6 +71,10 @@ public class ServerConnection { +@@ -137,6 +137,10 @@ public class ServerConnection { if (!networkmanager.h()) { if (!networkmanager.g()) { diff --git a/CraftBukkit-Patches/0118-Configurable-UserCache-cap.patch b/CraftBukkit-Patches/0117-Configurable-UserCache-cap.patch similarity index 89% rename from CraftBukkit-Patches/0118-Configurable-UserCache-cap.patch rename to CraftBukkit-Patches/0117-Configurable-UserCache-cap.patch index acfb9f6..2f4452c 100644 --- a/CraftBukkit-Patches/0118-Configurable-UserCache-cap.patch +++ b/CraftBukkit-Patches/0117-Configurable-UserCache-cap.patch @@ -1,14 +1,14 @@ -From d4858d849c5e83d745731c9de1686ff7338dea95 Mon Sep 17 00:00:00 2001 +From 11723e0f84ef387eaac92bf5b42b1ca7d3913c2d Mon Sep 17 00:00:00 2001 From: drXor Date: Fri, 25 Apr 2014 18:17:30 -0400 Subject: [PATCH] Configurable UserCache cap diff --git a/src/main/java/net/minecraft/server/UserCache.java b/src/main/java/net/minecraft/server/UserCache.java -index 6781a64..3eeaf09 100644 +index 2447b48..9e36258 100644 --- a/src/main/java/net/minecraft/server/UserCache.java +++ b/src/main/java/net/minecraft/server/UserCache.java -@@ -186,7 +186,7 @@ public class UserCache { +@@ -216,7 +216,7 @@ public class UserCache { } public void c() { diff --git a/CraftBukkit-Patches/0119-Implement-PlayerSpawnLocationEvent.patch b/CraftBukkit-Patches/0118-Implement-PlayerSpawnLocationEvent.patch similarity index 91% rename from CraftBukkit-Patches/0119-Implement-PlayerSpawnLocationEvent.patch rename to CraftBukkit-Patches/0118-Implement-PlayerSpawnLocationEvent.patch index 3014f82..2cbe331 100644 --- a/CraftBukkit-Patches/0119-Implement-PlayerSpawnLocationEvent.patch +++ b/CraftBukkit-Patches/0118-Implement-PlayerSpawnLocationEvent.patch @@ -1,11 +1,11 @@ -From 63c9c4aea969f96458d7b590ba092aad99ed7944 Mon Sep 17 00:00:00 2001 +From ddad815e80fb11b16f7974d295cff9b447a56d0a Mon Sep 17 00:00:00 2001 From: ninja Date: Tue, 8 Apr 2014 14:05:19 +0200 Subject: [PATCH] Implement PlayerSpawnLocationEvent. diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java -index 6b93aa9..22650b7 100644 +index ec04782..73125d6 100644 --- a/src/main/java/net/minecraft/server/PlayerList.java +++ b/src/main/java/net/minecraft/server/PlayerList.java @@ -36,6 +36,7 @@ import org.bukkit.event.player.PlayerQuitEvent; @@ -34,7 +34,7 @@ index 6b93aa9..22650b7 100644 + // Spigot end + // CraftBukkit - Moved message to after join - // PlayerList.h.info(entityplayer.getName() + "[" + s1 + "] logged in with entity id " + entityplayer.getId() + " at (" + entityplayer.locX + ", " + entityplayer.locY + ", " + entityplayer.locZ + ")"); + // PlayerList.f.info(entityplayer.getName() + "[" + s1 + "] logged in with entity id " + entityplayer.getId() + " at (" + entityplayer.locX + ", " + entityplayer.locY + ", " + entityplayer.locZ + ")"); WorldServer worldserver = this.server.getWorldServer(entityplayer.dimension); -- 2.1.0 diff --git a/CraftBukkit-Patches/0120-Cap-Objective-Score-Length.patch b/CraftBukkit-Patches/0119-Cap-Objective-Score-Length.patch similarity index 94% rename from CraftBukkit-Patches/0120-Cap-Objective-Score-Length.patch rename to CraftBukkit-Patches/0119-Cap-Objective-Score-Length.patch index a506490..71b8a75 100644 --- a/CraftBukkit-Patches/0120-Cap-Objective-Score-Length.patch +++ b/CraftBukkit-Patches/0119-Cap-Objective-Score-Length.patch @@ -1,4 +1,4 @@ -From 70ec470642605e2766a71455fc95b5758e61e1c1 Mon Sep 17 00:00:00 2001 +From eca4acdd7c20fe188f6c529b7d6b44880e1fbe5d Mon Sep 17 00:00:00 2001 From: hauno Date: Tue, 6 May 2014 18:01:37 -0700 Subject: [PATCH] Cap Objective Score Length diff --git a/CraftBukkit-Patches/0121-Process-conversation-input-on-the-main-thread.-Fixes.patch b/CraftBukkit-Patches/0120-Process-conversation-input-on-the-main-thread.-Fixes.patch similarity index 81% rename from CraftBukkit-Patches/0121-Process-conversation-input-on-the-main-thread.-Fixes.patch rename to CraftBukkit-Patches/0120-Process-conversation-input-on-the-main-thread.-Fixes.patch index bcfe429..577d399 100644 --- a/CraftBukkit-Patches/0121-Process-conversation-input-on-the-main-thread.-Fixes.patch +++ b/CraftBukkit-Patches/0120-Process-conversation-input-on-the-main-thread.-Fixes.patch @@ -1,4 +1,4 @@ -From 514c00fc7a33321026d394fdbfc68c0c9ac55d36 Mon Sep 17 00:00:00 2001 +From ac214b4a500a1c74b995618d0b685d74f486fc26 Mon Sep 17 00:00:00 2001 From: riking Date: Wed, 14 May 2014 13:46:48 -0700 Subject: [PATCH] Process conversation input on the main thread. Fixes @@ -6,10 +6,10 @@ Subject: [PATCH] Process conversation input on the main thread. Fixes diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 26f8e10..2cd242e 100644 +index 0bcdef4..ee6fa34 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -936,7 +936,18 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -954,7 +954,18 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList } else if (s.isEmpty()) { c.warn(this.player.getName() + " tried to send an empty message"); } else if (getPlayer().isConversing()) { @@ -26,7 +26,7 @@ index 26f8e10..2cd242e 100644 + } + } ); + // Spigot end - } else if (this.player.getChatFlags() == EnumChatVisibility.SYSTEM) { // Re-add "Command Only" flag check + } else if (this.player.getChatFlags() == EntityHuman.EnumChatVisibility.SYSTEM) { // Re-add "Command Only" flag check ChatMessage chatmessage = new ChatMessage("chat.cannotSend", new Object[0]); -- diff --git a/CraftBukkit-Patches/0122-Configurable-save-on-stop-only-for-UserCache.patch b/CraftBukkit-Patches/0121-Configurable-save-on-stop-only-for-UserCache.patch similarity index 79% rename from CraftBukkit-Patches/0122-Configurable-save-on-stop-only-for-UserCache.patch rename to CraftBukkit-Patches/0121-Configurable-save-on-stop-only-for-UserCache.patch index 06bd815..34fcd9b 100644 --- a/CraftBukkit-Patches/0122-Configurable-save-on-stop-only-for-UserCache.patch +++ b/CraftBukkit-Patches/0121-Configurable-save-on-stop-only-for-UserCache.patch @@ -1,16 +1,16 @@ -From 736748fe29461b2a15840a0b9f0aadf182a49b22 Mon Sep 17 00:00:00 2001 +From 72323216aad70986d8456e4ee8812d1f2c9498bd Mon Sep 17 00:00:00 2001 From: drXor Date: Fri, 23 May 2014 18:05:10 -0400 Subject: [PATCH] Configurable save-on-stop-only for UserCache diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index ff98d02..5f417c1 100644 +index b2ad2ca..6a12218 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -466,7 +466,13 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs - if (this.m.d()) { - this.m.e(); +@@ -487,7 +487,13 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs + if (this.n.d()) { + this.n.e(); } - + // Spigot start @@ -24,16 +24,16 @@ index ff98d02..5f417c1 100644 } diff --git a/src/main/java/net/minecraft/server/UserCache.java b/src/main/java/net/minecraft/server/UserCache.java -index 3eeaf09..03abfbd 100644 +index 9e36258..b8cde5d 100644 --- a/src/main/java/net/minecraft/server/UserCache.java +++ b/src/main/java/net/minecraft/server/UserCache.java -@@ -120,7 +120,7 @@ public class UserCache { +@@ -150,7 +150,7 @@ public class UserCache { } } - this.c(); + if( !org.spigotmc.SpigotConfig.saveUserCacheOnStopOnly ) this.c(); // Spigot - skip saving if disabled - return usercacheentry == null ? null : usercacheentry.a(); + return usercache_usercacheentry == null ? null : usercache_usercacheentry.a(); } diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java diff --git a/CraftBukkit-Patches/0123-Prevent-Unbounded-IntCache-Growth.patch b/CraftBukkit-Patches/0122-Prevent-Unbounded-IntCache-Growth.patch similarity index 96% rename from CraftBukkit-Patches/0123-Prevent-Unbounded-IntCache-Growth.patch rename to CraftBukkit-Patches/0122-Prevent-Unbounded-IntCache-Growth.patch index 8ac3b5d..a94fa16 100644 --- a/CraftBukkit-Patches/0123-Prevent-Unbounded-IntCache-Growth.patch +++ b/CraftBukkit-Patches/0122-Prevent-Unbounded-IntCache-Growth.patch @@ -1,4 +1,4 @@ -From 4ef549713945c2c0f8c2041fed9f3b17cfc7f820 Mon Sep 17 00:00:00 2001 +From d28e2e9836162bbbe0e17f3f7ef4e5f90fc4e913 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 20 Jun 2014 19:40:00 +1000 Subject: [PATCH] Prevent Unbounded IntCache Growth @@ -6,7 +6,7 @@ Subject: [PATCH] Prevent Unbounded IntCache Growth Based on work by Peter Lawrey, this commit prevents unbounded growth of the integer cache and instead caps it to a value specified in the configuration (1024 by default). Should prevent thrashing, especially around world generation. diff --git a/src/main/java/net/minecraft/server/IntCache.java b/src/main/java/net/minecraft/server/IntCache.java -index 4b4f005..0d8eb6c 100644 +index 8167fdd..95060a4 100644 --- a/src/main/java/net/minecraft/server/IntCache.java +++ b/src/main/java/net/minecraft/server/IntCache.java @@ -17,11 +17,11 @@ public class IntCache { diff --git a/CraftBukkit-Patches/0124-Add-damager-to-the-unhandled-error.patch b/CraftBukkit-Patches/0123-Add-damager-to-the-unhandled-error.patch similarity index 97% rename from CraftBukkit-Patches/0124-Add-damager-to-the-unhandled-error.patch rename to CraftBukkit-Patches/0123-Add-damager-to-the-unhandled-error.patch index 11e22bb..e04eaf8 100644 --- a/CraftBukkit-Patches/0124-Add-damager-to-the-unhandled-error.patch +++ b/CraftBukkit-Patches/0123-Add-damager-to-the-unhandled-error.patch @@ -1,11 +1,11 @@ -From 4dd5f28a941dd65dd83482f17ab0644a740f41d6 Mon Sep 17 00:00:00 2001 +From ea91ea574fdd47829f89f60fd8a42d48bdfc076e Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Thu, 26 Jun 2014 23:42:52 +0100 Subject: [PATCH] Add damager to the unhandled error diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index dd0cab1..f057a91 100644 +index 218fd1f..ed762cd 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -184,7 +184,7 @@ public class CraftEventFactory { diff --git a/CraftBukkit-Patches/0125-Cross-World-Entity-Teleportation.patch b/CraftBukkit-Patches/0124-Cross-World-Entity-Teleportation.patch similarity index 95% rename from CraftBukkit-Patches/0125-Cross-World-Entity-Teleportation.patch rename to CraftBukkit-Patches/0124-Cross-World-Entity-Teleportation.patch index 5bb5b66..09f64e5 100644 --- a/CraftBukkit-Patches/0125-Cross-World-Entity-Teleportation.patch +++ b/CraftBukkit-Patches/0124-Cross-World-Entity-Teleportation.patch @@ -1,4 +1,4 @@ -From f5ecbe2285508557fb994705ae395e488f3e4234 Mon Sep 17 00:00:00 2001 +From d70688f3341c1b2ba7d359979958e38c13429bed Mon Sep 17 00:00:00 2001 From: Andrew Krieger Date: Tue, 24 Dec 2013 07:55:23 -0800 Subject: [PATCH] Cross World Entity Teleportation diff --git a/CraftBukkit-Patches/0126-Limit-block-placement-interaction-packets.patch b/CraftBukkit-Patches/0125-Limit-block-placement-interaction-packets.patch similarity index 85% rename from CraftBukkit-Patches/0126-Limit-block-placement-interaction-packets.patch rename to CraftBukkit-Patches/0125-Limit-block-placement-interaction-packets.patch index 9ea8ce9..9e5e22d 100644 --- a/CraftBukkit-Patches/0126-Limit-block-placement-interaction-packets.patch +++ b/CraftBukkit-Patches/0125-Limit-block-placement-interaction-packets.patch @@ -1,14 +1,14 @@ -From ee3b98fa8abed579526772e472ae6151805db4c2 Mon Sep 17 00:00:00 2001 +From 0796f6c3aa958b2d0694a97e1a1ed1561e327229 Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Sun, 29 Jun 2014 21:10:34 +0100 Subject: [PATCH] Limit block placement/interaction packets diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 2cd242e..58cdeba 100644 +index ee6fa34..b4b3cbc 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -616,9 +616,22 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -626,10 +626,23 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList // CraftBukkit end } @@ -19,6 +19,7 @@ index 2cd242e..58cdeba 100644 public void a(PacketPlayInBlockPlace packetplayinblockplace) { PlayerConnectionUtils.ensureMainThread(packetplayinblockplace, this, this.player.u()); WorldServer worldserver = this.minecraftServer.getWorldServer(this.player.dimension); +- + boolean throttled = false; + if (lastPlace != -1 && packetplayinblockplace.timestamp - lastPlace < 30 && packets++ >= 4) { + throttled = true; @@ -28,20 +29,21 @@ index 2cd242e..58cdeba 100644 + packets = 0; + } + // Spigot end - ++ // CraftBukkit start if (this.player.dead) return; -@@ -642,7 +655,8 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList + +@@ -652,7 +665,8 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList // CraftBukkit start int itemstackAmount = itemstack.count; -- +- + // Spigot start - skip the event if throttled + if (!throttled) { // Raytrace to look for 'rogue armswings' float f1 = this.player.pitch; float f2 = this.player.yaw; -@@ -678,6 +692,8 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -688,6 +702,8 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList if (!cancelled) { this.player.playerInteractManager.useItem(this.player, this.player.world, itemstack); } @@ -50,15 +52,15 @@ index 2cd242e..58cdeba 100644 // CraftBukkit - notch decrements the counter by 1 in the above method with food, // snowballs and so forth, but he does it in a place that doesn't cause the -@@ -703,7 +719,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -713,7 +729,7 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList } - if (this.checkMovement && this.player.e((double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D) < 64.0D && !this.minecraftServer.a(worldserver, blockposition, this.player) && worldserver.af().a(blockposition)) { + if (this.checkMovement && this.player.e((double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D) < 64.0D && !this.minecraftServer.a(worldserver, blockposition, this.player) && worldserver.getWorldBorder().a(blockposition)) { - always = !this.player.playerInteractManager.interact(this.player, worldserver, itemstack, blockposition, enumdirection, packetplayinblockplace.d(), packetplayinblockplace.e(), packetplayinblockplace.f()); + always = throttled || !this.player.playerInteractManager.interact(this.player, worldserver, itemstack, blockposition, enumdirection, packetplayinblockplace.d(), packetplayinblockplace.e(), packetplayinblockplace.f()); } - // CraftBukkit end + flag = true; -- 2.1.0 diff --git a/CraftBukkit-Patches/0127-Better-item-validation.patch b/CraftBukkit-Patches/0126-Better-item-validation.patch similarity index 86% rename from CraftBukkit-Patches/0127-Better-item-validation.patch rename to CraftBukkit-Patches/0126-Better-item-validation.patch index 1b3dc50..dd8d62f 100644 --- a/CraftBukkit-Patches/0127-Better-item-validation.patch +++ b/CraftBukkit-Patches/0126-Better-item-validation.patch @@ -1,32 +1,32 @@ -From 7ad92b12d12e3e0474504659eb743c07234f6b81 Mon Sep 17 00:00:00 2001 +From fc74cbedbc1ea5dd4487d13d840a7407438c0a3e Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Wed, 2 Jul 2014 23:35:51 +0100 Subject: [PATCH] Better item validation diff --git a/src/main/java/net/minecraft/server/DataWatcher.java b/src/main/java/net/minecraft/server/DataWatcher.java -index 966d737..ca3469f 100644 +index aa46c28..dec091e 100644 --- a/src/main/java/net/minecraft/server/DataWatcher.java +++ b/src/main/java/net/minecraft/server/DataWatcher.java -@@ -154,6 +154,17 @@ public class DataWatcher { +@@ -155,6 +155,17 @@ public class DataWatcher { arraylist = Lists.newArrayList(); } -+ // Spigot start - copy ItemStacks to prevent ConcurrentModificationExceptions -+ if ( watchableobject.b() instanceof ItemStack ) ++ // Spigot start - copy ItemStacks to prevent ConcurrentModificationExceptions ++ if ( datawatcher_watchableobject.b() instanceof ItemStack ) + { -+ watchableobject = new WatchableObject( -+ watchableobject.c(), -+ watchableobject.a(), -+ ( (ItemStack) watchableobject.b() ).cloneItemStack() ++ datawatcher_watchableobject = new WatchableObject( ++ datawatcher_watchableobject.c(), ++ datawatcher_watchableobject.a(), ++ ( (ItemStack) datawatcher_watchableobject.b() ).cloneItemStack() + ); + } + // Spigot end + - arraylist.add(watchableobject); + arraylist.add(datawatcher_watchableobject); } } -@@ -185,6 +196,21 @@ public class DataWatcher { +@@ -186,6 +197,21 @@ public class DataWatcher { this.f.readLock().lock(); arraylist.addAll(this.dataValues.valueCollection()); // Spigot @@ -49,10 +49,10 @@ index 966d737..ca3469f 100644 this.f.readLock().unlock(); return arraylist; diff --git a/src/main/java/net/minecraft/server/PacketDataSerializer.java b/src/main/java/net/minecraft/server/PacketDataSerializer.java -index 8b7dc17..5227007 100644 +index 32af4ee..f426c2e 100644 --- a/src/main/java/net/minecraft/server/PacketDataSerializer.java +++ b/src/main/java/net/minecraft/server/PacketDataSerializer.java -@@ -172,6 +172,10 @@ public class PacketDataSerializer extends ByteBuf { +@@ -173,6 +173,10 @@ public class PacketDataSerializer extends ByteBuf { NBTTagCompound nbttagcompound = null; if (itemstack.getItem().usesDurability() || itemstack.getItem().p()) { @@ -64,7 +64,7 @@ index 8b7dc17..5227007 100644 } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java -index 42ecde7..47bbcce 100644 +index f23decd..13dbcd4 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBook.java @@ -22,6 +22,10 @@ import net.minecraft.server.IChatBaseComponent; diff --git a/CraftBukkit-Patches/0128-Further-Seed-Customisation.patch b/CraftBukkit-Patches/0127-Further-Seed-Customisation.patch similarity index 94% rename from CraftBukkit-Patches/0128-Further-Seed-Customisation.patch rename to CraftBukkit-Patches/0127-Further-Seed-Customisation.patch index 3d12820..d404280 100644 --- a/CraftBukkit-Patches/0128-Further-Seed-Customisation.patch +++ b/CraftBukkit-Patches/0127-Further-Seed-Customisation.patch @@ -1,4 +1,4 @@ -From 76abed3c46bf38c95c65e440fd39c548746dbb49 Mon Sep 17 00:00:00 2001 +From 0fdac732c8b420d01452e9e997179c5e2e961ec3 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 4 Jul 2014 13:28:45 +1000 Subject: [PATCH] Further Seed Customisation @@ -6,7 +6,7 @@ Subject: [PATCH] Further Seed Customisation Allow server admins that really want to to customise the seeds used in world generation even further. diff --git a/src/main/java/net/minecraft/server/WorldGenLargeFeature.java b/src/main/java/net/minecraft/server/WorldGenLargeFeature.java -index 02e6208..0bd6783 100644 +index b2f87cc..171be82 100644 --- a/src/main/java/net/minecraft/server/WorldGenLargeFeature.java +++ b/src/main/java/net/minecraft/server/WorldGenLargeFeature.java @@ -54,7 +54,7 @@ public class WorldGenLargeFeature extends StructureGenerator { @@ -19,7 +19,7 @@ index 02e6208..0bd6783 100644 i1 *= this.g; j1 *= this.g; diff --git a/src/main/java/net/minecraft/server/WorldGenVillage.java b/src/main/java/net/minecraft/server/WorldGenVillage.java -index 375de85..bf699af 100644 +index 411f2dc..6648a70 100644 --- a/src/main/java/net/minecraft/server/WorldGenVillage.java +++ b/src/main/java/net/minecraft/server/WorldGenVillage.java @@ -53,7 +53,7 @@ public class WorldGenVillage extends StructureGenerator { diff --git a/CraftBukkit-Patches/0129-Disable-ResourceLeakDetector.patch b/CraftBukkit-Patches/0128-Disable-ResourceLeakDetector.patch similarity index 75% rename from CraftBukkit-Patches/0129-Disable-ResourceLeakDetector.patch rename to CraftBukkit-Patches/0128-Disable-ResourceLeakDetector.patch index c180c71..03d2c5b 100644 --- a/CraftBukkit-Patches/0129-Disable-ResourceLeakDetector.patch +++ b/CraftBukkit-Patches/0128-Disable-ResourceLeakDetector.patch @@ -1,4 +1,4 @@ -From c08829cc56c3ae0c922739b8d5cfa17ff4b58433 Mon Sep 17 00:00:00 2001 +From 38c28506adb08d8a1e01796e4049c15345aace31 Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 8 Jul 2014 09:01:50 +1000 Subject: [PATCH] Disable ResourceLeakDetector @@ -6,16 +6,16 @@ Subject: [PATCH] Disable ResourceLeakDetector Hopefully no plugins are somehow leaking buffers, but disabling the ResourceLeakDetector is a good thing for performance of the Netty IO subsytem (it's been disabled in BungeeCord for a while now). diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 5f417c1..7e91511 100644 +index 6a12218..f304df2 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -126,6 +126,7 @@ public abstract class MinecraftServer implements ICommandListener, Runnable, IAs +@@ -128,6 +128,7 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs // Spigot end public MinecraftServer(OptionSet options, Proxy proxy, File file1) { + io.netty.util.ResourceLeakDetector.setEnabled( false ); // Spigot - disable - this.d = proxy; - MinecraftServer.k = this; + this.e = proxy; + MinecraftServer.l = this; // this.universe = file; // CraftBukkit -- 2.1.0 diff --git a/CraftBukkit-Patches/0130-Add-More-Information-to-session.lock-Errors.patch b/CraftBukkit-Patches/0129-Add-More-Information-to-session.lock-Errors.patch similarity index 95% rename from CraftBukkit-Patches/0130-Add-More-Information-to-session.lock-Errors.patch rename to CraftBukkit-Patches/0129-Add-More-Information-to-session.lock-Errors.patch index 8af6a4a..0b404cc 100644 --- a/CraftBukkit-Patches/0130-Add-More-Information-to-session.lock-Errors.patch +++ b/CraftBukkit-Patches/0129-Add-More-Information-to-session.lock-Errors.patch @@ -1,11 +1,11 @@ -From 04c8bba1210dec81e50fc775b15fc19073368547 Mon Sep 17 00:00:00 2001 +From e67d72c182033ac7ef74f1b2a9a110de05ead1bb Mon Sep 17 00:00:00 2001 From: Suddenly Date: Sat, 5 Jul 2014 16:56:44 +0100 Subject: [PATCH] Add More Information to session.lock Errors diff --git a/src/main/java/net/minecraft/server/WorldNBTStorage.java b/src/main/java/net/minecraft/server/WorldNBTStorage.java -index ee79cbd..b187aed 100644 +index bb87701..007846a 100644 --- a/src/main/java/net/minecraft/server/WorldNBTStorage.java +++ b/src/main/java/net/minecraft/server/WorldNBTStorage.java @@ -54,7 +54,7 @@ public class WorldNBTStorage implements IDataManager, IPlayerFileData { diff --git a/CraftBukkit-Patches/0131-Safer-JSON-Loading.patch b/CraftBukkit-Patches/0130-Safer-JSON-Loading.patch similarity index 88% rename from CraftBukkit-Patches/0131-Safer-JSON-Loading.patch rename to CraftBukkit-Patches/0130-Safer-JSON-Loading.patch index 2521450..49faeca 100644 --- a/CraftBukkit-Patches/0131-Safer-JSON-Loading.patch +++ b/CraftBukkit-Patches/0130-Safer-JSON-Loading.patch @@ -1,14 +1,14 @@ -From 90fa4c1baec4fb17347bfbad067e210c54a0e8f4 Mon Sep 17 00:00:00 2001 +From 60c5b248fea86d0f654cb9bf791e4ca2c96a00fb Mon Sep 17 00:00:00 2001 From: Suddenly Date: Tue, 8 Jul 2014 09:44:18 +1000 Subject: [PATCH] Safer JSON Loading diff --git a/src/main/java/net/minecraft/server/JsonList.java b/src/main/java/net/minecraft/server/JsonList.java -index 61c676a..af2e2d1 100644 +index f5c3aae..8e4ecfd 100644 --- a/src/main/java/net/minecraft/server/JsonList.java +++ b/src/main/java/net/minecraft/server/JsonList.java -@@ -149,6 +149,17 @@ public class JsonList { +@@ -170,6 +170,17 @@ public class JsonList> { try { bufferedreader = Files.newReader(this.c, Charsets.UTF_8); collection = (Collection) this.b.fromJson(bufferedreader, JsonList.f); @@ -27,10 +27,10 @@ index 61c676a..af2e2d1 100644 IOUtils.closeQuietly(bufferedreader); } diff --git a/src/main/java/net/minecraft/server/UserCache.java b/src/main/java/net/minecraft/server/UserCache.java -index 03abfbd..bd35a0f 100644 +index b8cde5d..441d1bc 100644 --- a/src/main/java/net/minecraft/server/UserCache.java +++ b/src/main/java/net/minecraft/server/UserCache.java -@@ -160,6 +160,11 @@ public class UserCache { +@@ -190,6 +190,11 @@ public class UserCache { break label64; } catch (FileNotFoundException filenotfoundexception) { ; diff --git a/CraftBukkit-Patches/0132-Fix-Slow-Loading-Libraries.patch b/CraftBukkit-Patches/0131-Fix-Slow-Loading-Libraries.patch similarity index 90% rename from CraftBukkit-Patches/0132-Fix-Slow-Loading-Libraries.patch rename to CraftBukkit-Patches/0131-Fix-Slow-Loading-Libraries.patch index 35a4485..16def59 100644 --- a/CraftBukkit-Patches/0132-Fix-Slow-Loading-Libraries.patch +++ b/CraftBukkit-Patches/0131-Fix-Slow-Loading-Libraries.patch @@ -1,4 +1,4 @@ -From 387f93d3c3d639f56a8d9a2030c3881ca27d8c42 Mon Sep 17 00:00:00 2001 +From f419a5e94b6b3b91698d9e1c7a672e5ad61b2537 Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 8 Jul 2014 20:27:52 +1000 Subject: [PATCH] Fix Slow "Loading Libraries" diff --git a/CraftBukkit-Patches/0133-Add-CommandLine-EULA-Flag.patch b/CraftBukkit-Patches/0132-Add-CommandLine-EULA-Flag.patch similarity index 82% rename from CraftBukkit-Patches/0133-Add-CommandLine-EULA-Flag.patch rename to CraftBukkit-Patches/0132-Add-CommandLine-EULA-Flag.patch index 02c2e08..6aeb695 100644 --- a/CraftBukkit-Patches/0133-Add-CommandLine-EULA-Flag.patch +++ b/CraftBukkit-Patches/0132-Add-CommandLine-EULA-Flag.patch @@ -1,4 +1,4 @@ -From 3229569c2e85085a6661aa1c15d292762080cced Mon Sep 17 00:00:00 2001 +From 3578fae39b7e99cad33c5818f3a2f30fe70c8dda Mon Sep 17 00:00:00 2001 From: md_5 Date: Wed, 9 Jul 2014 10:35:44 +1000 Subject: [PATCH] Add CommandLine EULA Flag @@ -8,14 +8,14 @@ This flag contains the same message as eula.txt (albeit with proper grammar for This feature only exists for hosting companies and people who manage servers in bulk who wish to agree to the terms by setting a flag in a script. diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index 80755dd..2806f1e 100644 +index 28135ba..86ff385 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java -@@ -77,7 +77,16 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -124,7 +124,16 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer DedicatedServer.LOGGER.info("Loading properties"); this.propertyManager = new PropertyManager(this.options); // CraftBukkit - CLI argument support - this.o = new EULA(new File("eula.txt")); -- if (!this.o.a()) { + this.p = new EULA(new File("eula.txt")); +- if (!this.p.a()) { + // Spigot Start + boolean eulaAgreed = Boolean.getBoolean( "com.mojang.eula.agree" ); + if ( eulaAgreed ) @@ -25,9 +25,9 @@ index 80755dd..2806f1e 100644 + System.err.println( "If you do not agree to the above EULA please stop your server and remove this flag immediately." ); + } + // Spigot End -+ if (!this.o.a() && !eulaAgreed) { // Spigot ++ if (!this.p.a() && !eulaAgreed) { // Spigot DedicatedServer.LOGGER.info("You need to agree to the EULA in order to run the server. Go to eula.txt for more info."); - this.o.b(); + this.p.b(); return false; -- 2.1.0 diff --git a/CraftBukkit-Patches/0134-Fix-for-enchanting-table-wiping-meta-when-placing-st.patch b/CraftBukkit-Patches/0133-Fix-for-enchanting-table-wiping-meta-when-placing-st.patch similarity index 86% rename from CraftBukkit-Patches/0134-Fix-for-enchanting-table-wiping-meta-when-placing-st.patch rename to CraftBukkit-Patches/0133-Fix-for-enchanting-table-wiping-meta-when-placing-st.patch index d98f12f..522eeaa 100644 --- a/CraftBukkit-Patches/0134-Fix-for-enchanting-table-wiping-meta-when-placing-st.patch +++ b/CraftBukkit-Patches/0133-Fix-for-enchanting-table-wiping-meta-when-placing-st.patch @@ -1,4 +1,4 @@ -From d051f13023d454859b96f4282dc069b705ce5689 Mon Sep 17 00:00:00 2001 +From 232cb66228907df78c48e490ede6871f1126a698 Mon Sep 17 00:00:00 2001 From: drXor Date: Thu, 17 Jul 2014 21:13:15 -0400 Subject: [PATCH] Fix for enchanting table wiping meta when placing stacked @@ -6,10 +6,10 @@ Subject: [PATCH] Fix for enchanting table wiping meta when placing stacked diff --git a/src/main/java/net/minecraft/server/ContainerEnchantTable.java b/src/main/java/net/minecraft/server/ContainerEnchantTable.java -index eb02821..e223e71 100644 +index 208d426..09eeb43 100644 --- a/src/main/java/net/minecraft/server/ContainerEnchantTable.java +++ b/src/main/java/net/minecraft/server/ContainerEnchantTable.java -@@ -316,7 +316,11 @@ public class ContainerEnchantTable extends Container { +@@ -336,7 +336,11 @@ public class ContainerEnchantTable extends Container { ((Slot) this.c.get(0)).set(itemstack1.cloneItemStack()); itemstack1.count = 0; } else if (itemstack1.count >= 1) { diff --git a/CraftBukkit-Patches/0135-Don-t-spawn-bonus-ocelots-when-plugins-spawn-ocelots.patch b/CraftBukkit-Patches/0134-Don-t-spawn-bonus-ocelots-when-plugins-spawn-ocelots.patch similarity index 83% rename from CraftBukkit-Patches/0135-Don-t-spawn-bonus-ocelots-when-plugins-spawn-ocelots.patch rename to CraftBukkit-Patches/0134-Don-t-spawn-bonus-ocelots-when-plugins-spawn-ocelots.patch index de62a12..b75181c 100644 --- a/CraftBukkit-Patches/0135-Don-t-spawn-bonus-ocelots-when-plugins-spawn-ocelots.patch +++ b/CraftBukkit-Patches/0134-Don-t-spawn-bonus-ocelots-when-plugins-spawn-ocelots.patch @@ -1,22 +1,22 @@ -From 1c7dd9b11427ede62af4fcc41332d7d2113b0aa9 Mon Sep 17 00:00:00 2001 +From e49b1f18add025965d8ae050ca3cb0f10fa03810 Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Sat, 19 Jul 2014 12:49:48 +0100 Subject: [PATCH] Don't spawn bonus ocelots when plugins spawn ocelots diff --git a/src/main/java/net/minecraft/server/EntityOcelot.java b/src/main/java/net/minecraft/server/EntityOcelot.java -index a6b72d8..0f5d09b 100644 +index 84c8721..ea5adbe 100644 --- a/src/main/java/net/minecraft/server/EntityOcelot.java +++ b/src/main/java/net/minecraft/server/EntityOcelot.java @@ -6,6 +6,7 @@ public class EntityOcelot extends EntityTameableAnimal { - private PathfinderGoalAvoidTarget bm; - private PathfinderGoalTempt bn; + private PathfinderGoalAvoidTarget bo; + private PathfinderGoalTempt bp; + public boolean spawnBonus = true; // Spigot public EntityOcelot(World world) { super(world); -@@ -231,7 +232,7 @@ public class EntityOcelot extends EntityTameableAnimal { +@@ -230,7 +231,7 @@ public class EntityOcelot extends EntityTameableAnimal { public GroupDataEntity prepare(DifficultyDamageScaler difficultydamagescaler, GroupDataEntity groupdataentity) { groupdataentity = super.prepare(difficultydamagescaler, groupdataentity); @@ -26,10 +26,10 @@ index a6b72d8..0f5d09b 100644 EntityOcelot entityocelot = new EntityOcelot(this.world); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index f07d87d..e06d2cd 100644 +index 6b26c8f..2bbe104 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -1084,6 +1084,12 @@ public class CraftWorld implements World { +@@ -1092,6 +1092,12 @@ public class CraftWorld implements World { } if (entity != null) { diff --git a/CraftBukkit-Patches/0136-Prevent-a-crash-involving-attributes.patch b/CraftBukkit-Patches/0135-Prevent-a-crash-involving-attributes.patch similarity index 93% rename from CraftBukkit-Patches/0136-Prevent-a-crash-involving-attributes.patch rename to CraftBukkit-Patches/0135-Prevent-a-crash-involving-attributes.patch index 231a206..b31eec8 100644 --- a/CraftBukkit-Patches/0136-Prevent-a-crash-involving-attributes.patch +++ b/CraftBukkit-Patches/0135-Prevent-a-crash-involving-attributes.patch @@ -1,11 +1,11 @@ -From 6a5bdc22401fee2e27362056959e0db48e06fb4e Mon Sep 17 00:00:00 2001 +From 5552267fb01985244e4a5d5a0cb8a3e0f079b587 Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Sat, 19 Jul 2014 19:54:41 +0100 Subject: [PATCH] Prevent a crash involving attributes diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index c6caeec..e529156 100644 +index 0ab028c..c3913e6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1311,7 +1311,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/CraftBukkit-Patches/0137-Make-moved-wrongly-limit-configurable.patch b/CraftBukkit-Patches/0136-Make-moved-wrongly-limit-configurable.patch similarity index 91% rename from CraftBukkit-Patches/0137-Make-moved-wrongly-limit-configurable.patch rename to CraftBukkit-Patches/0136-Make-moved-wrongly-limit-configurable.patch index 8350ab4..cb5d2ac 100644 --- a/CraftBukkit-Patches/0137-Make-moved-wrongly-limit-configurable.patch +++ b/CraftBukkit-Patches/0136-Make-moved-wrongly-limit-configurable.patch @@ -1,14 +1,14 @@ -From ce6e721257c8347d75787a96a641102d472d0adf Mon Sep 17 00:00:00 2001 +From 63cb2ce21992c3b45ac935e9857d908905ff5772 Mon Sep 17 00:00:00 2001 From: Jonas Konrad Date: Fri, 4 Jul 2014 23:03:13 +0200 Subject: [PATCH] Make "moved wrongly" limit configurable diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 58cdeba..51c4e8a 100644 +index b4b3cbc..2e5a55d 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -406,7 +406,8 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -416,7 +416,8 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList d17 = d11 * d11 + d12 * d12 + d13 * d13; boolean flag1 = false; diff --git a/CraftBukkit-Patches/0138-Fix-Null-Tile-Entity-Worlds.patch b/CraftBukkit-Patches/0137-Fix-Null-Tile-Entity-Worlds.patch similarity index 72% rename from CraftBukkit-Patches/0138-Fix-Null-Tile-Entity-Worlds.patch rename to CraftBukkit-Patches/0137-Fix-Null-Tile-Entity-Worlds.patch index 8bd6d57..913258b 100644 --- a/CraftBukkit-Patches/0138-Fix-Null-Tile-Entity-Worlds.patch +++ b/CraftBukkit-Patches/0137-Fix-Null-Tile-Entity-Worlds.patch @@ -1,19 +1,19 @@ -From 355275cc2cdcd23f2c545e09e8fa0dd33d887380 Mon Sep 17 00:00:00 2001 +From 70464635b3bfc6a45e9362197c793c797c1f5cc4 Mon Sep 17 00:00:00 2001 From: "Evan A. Haskell" Date: Thu, 26 Jun 2014 18:37:29 -0400 Subject: [PATCH] Fix Null Tile Entity Worlds diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 8579802..baffc8b 100644 +index d58733c..2d323a9 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -1874,6 +1874,7 @@ public abstract class World implements IBlockAccess { +@@ -1927,6 +1927,7 @@ public abstract class World implements IBlockAccess { } } + tileentity.a(this); // Spigot - No null worlds - this.a.add(tileentity); + this.b.add(tileentity); } else { this.a(tileentity); -- diff --git a/CraftBukkit-Patches/0139-Make-moved-too-quickly-limit-configurable.patch b/CraftBukkit-Patches/0138-Make-moved-too-quickly-limit-configurable.patch similarity index 92% rename from CraftBukkit-Patches/0139-Make-moved-too-quickly-limit-configurable.patch rename to CraftBukkit-Patches/0138-Make-moved-too-quickly-limit-configurable.patch index 2599b57..7f071cc 100644 --- a/CraftBukkit-Patches/0139-Make-moved-too-quickly-limit-configurable.patch +++ b/CraftBukkit-Patches/0138-Make-moved-too-quickly-limit-configurable.patch @@ -1,14 +1,14 @@ -From 41c1c594b94e9f4a8c7f8ce47becb1c82fa0ab64 Mon Sep 17 00:00:00 2001 +From 2faeafd3fcc78777f16617fc147b7b4bc95b2530 Mon Sep 17 00:00:00 2001 From: Jonas Konrad Date: Tue, 22 Jul 2014 15:59:01 +0200 Subject: [PATCH] Make "moved too quickly" limit configurable diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 51c4e8a..a09e793 100644 +index 2e5a55d..7f5044d 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -379,7 +379,8 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList +@@ -389,7 +389,8 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList // CraftBukkit end double d17 = d14 * d14 + d15 * d15 + d16 * d16; diff --git a/CraftBukkit-Patches/0141-Apply-NBTReadLimiter-to-more-things.patch b/CraftBukkit-Patches/0139-Apply-NBTReadLimiter-to-more-things.patch similarity index 90% rename from CraftBukkit-Patches/0141-Apply-NBTReadLimiter-to-more-things.patch rename to CraftBukkit-Patches/0139-Apply-NBTReadLimiter-to-more-things.patch index 850471f..ff7b62a 100644 --- a/CraftBukkit-Patches/0141-Apply-NBTReadLimiter-to-more-things.patch +++ b/CraftBukkit-Patches/0139-Apply-NBTReadLimiter-to-more-things.patch @@ -1,17 +1,17 @@ -From 30818988430027fc24bbbdec1b78d0b3247eb62a Mon Sep 17 00:00:00 2001 +From 1ed3295f62dfe540fe78d8cdca156dfbc62ba578 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 27 Jul 2014 20:46:04 +1000 Subject: [PATCH] Apply NBTReadLimiter to more things. diff --git a/src/main/java/net/minecraft/server/NBTCompressedStreamTools.java b/src/main/java/net/minecraft/server/NBTCompressedStreamTools.java -index e9d8828..14ba8df 100644 +index 2a04b86..b2d5254 100644 --- a/src/main/java/net/minecraft/server/NBTCompressedStreamTools.java +++ b/src/main/java/net/minecraft/server/NBTCompressedStreamTools.java -@@ -48,6 +48,12 @@ public class NBTCompressedStreamTools { +@@ -44,6 +44,12 @@ public class NBTCompressedStreamTools { + } - public static NBTTagCompound a(DataInput datainput, NBTReadLimiter nbtreadlimiter) { - try { + public static NBTTagCompound a(DataInput datainput, NBTReadLimiter nbtreadlimiter) throws IOException { + // Spigot start + if ( datainput instanceof io.netty.buffer.ByteBufInputStream ) + { diff --git a/CraftBukkit-Patches/0142-Allow-Attribute-Capping.patch b/CraftBukkit-Patches/0140-Allow-Attribute-Capping.patch similarity index 97% rename from CraftBukkit-Patches/0142-Allow-Attribute-Capping.patch rename to CraftBukkit-Patches/0140-Allow-Attribute-Capping.patch index 9749f8d..e792041 100644 --- a/CraftBukkit-Patches/0142-Allow-Attribute-Capping.patch +++ b/CraftBukkit-Patches/0140-Allow-Attribute-Capping.patch @@ -1,4 +1,4 @@ -From 40f7a6f4bcdd73b5133115c49511e725b8429a00 Mon Sep 17 00:00:00 2001 +From d95610eff21b6028efc825fcbe11798abfbfe965 Mon Sep 17 00:00:00 2001 From: md_5 Date: Mon, 28 Jul 2014 16:55:51 +1000 Subject: [PATCH] Allow Attribute Capping. @@ -19,7 +19,7 @@ index 13602f0..838daed 100644 public AttributeRanged(IAttribute iattribute, String s, double d0, double d1, double d2) { diff --git a/src/main/java/net/minecraft/server/GenericAttributes.java b/src/main/java/net/minecraft/server/GenericAttributes.java -index 64acbde..ef7a76c 100644 +index 871859f..05beea2 100644 --- a/src/main/java/net/minecraft/server/GenericAttributes.java +++ b/src/main/java/net/minecraft/server/GenericAttributes.java @@ -9,11 +9,13 @@ import org.apache.logging.log4j.Logger; diff --git a/CraftBukkit-Patches/0140-Alternative-Hopper-Ticking.patch b/CraftBukkit-Patches/0140-Alternative-Hopper-Ticking.patch deleted file mode 100644 index 10e84a8..0000000 --- a/CraftBukkit-Patches/0140-Alternative-Hopper-Ticking.patch +++ /dev/null @@ -1,501 +0,0 @@ -From 9e2150db3029aa55d9065d370397ecb5a41a53f0 Mon Sep 17 00:00:00 2001 -From: "Evan A. Haskell" -Date: Sat, 19 Apr 2014 16:58:26 -0400 -Subject: [PATCH] Alternative Hopper Ticking - - -diff --git a/src/main/java/net/minecraft/server/BlockHopper.java b/src/main/java/net/minecraft/server/BlockHopper.java -index cc3e340..9a6ecbb 100644 ---- a/src/main/java/net/minecraft/server/BlockHopper.java -+++ b/src/main/java/net/minecraft/server/BlockHopper.java -@@ -88,6 +88,17 @@ public class BlockHopper extends BlockContainer { - - if (flag != ((Boolean) iblockdata.get(BlockHopper.ENABLED)).booleanValue()) { - world.setTypeAndData(blockposition, iblockdata.set(BlockHopper.ENABLED, Boolean.valueOf(flag)), 4); -+ // Spigot start - When this hopper becomes unpowered, make it active. -+ // Called when this block's power level changes. flag1 is the current -+ // isNotPowered from metadata. flag is the recalculated isNotPowered. -+ if (world.spigotConfig.altHopperTicking) { -+ // e returns the TileEntityHopper associated with this BlockHopper. -+ TileEntityHopper hopper = (TileEntityHopper) world.getTileEntity(blockposition); -+ if (flag && hopper != null) { -+ hopper.makeTick(); -+ } -+ } -+ // Spigot end - } - - } -@@ -149,4 +160,17 @@ public class BlockHopper extends BlockContainer { - protected BlockStateList getStateList() { - return new BlockStateList(this, new IBlockState[] { BlockHopper.FACING, BlockHopper.ENABLED}); - } -+ -+ // Spigot start - Use random block updates to make hoppers active. -+ @Override -+ public void a(World world, BlockPosition blockposition, IBlockData iblockdata, java.util.Random random) { -+ if (world.spigotConfig.altHopperTicking) { -+ // e returns the TileEntityHopper associated with this BlockHopper. -+ TileEntityHopper hopper = (TileEntityHopper) world.getTileEntity(blockposition); -+ if (hopper != null) { -+ hopper.makeTick(); -+ } -+ } -+ } -+ // Spigot end - } -diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index c0e2a50..c50ab45 100644 ---- a/src/main/java/net/minecraft/server/Chunk.java -+++ b/src/main/java/net/minecraft/server/Chunk.java -@@ -751,6 +751,11 @@ public class Chunk { - - tileentity.D(); - this.tileEntities.put(blockposition, tileentity); -+ // Spigot start - The tile entity has a world, now hoppers can be born ticking. -+ if (this.world.spigotConfig.altHopperTicking) { -+ this.world.triggerHoppersList.add(tileentity); -+ } -+ // Spigot end - // CraftBukkit start - } else { - System.out.println("Attempted to place a tile entity (" + tileentity + ") at " + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ() -diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java -index 81bba48..d208d11 100644 ---- a/src/main/java/net/minecraft/server/EntityItem.java -+++ b/src/main/java/net/minecraft/server/EntityItem.java -@@ -100,6 +100,27 @@ public class EntityItem extends Entity { - if (this.onGround) { - this.motY *= -0.5D; - } -+ // Spigot start - Make the hopper(s) below this item active. -+ // Called each tick on each item entity. -+ if (this.world.spigotConfig.altHopperTicking) { -+ int xi = MathHelper.floor(this.getBoundingBox().a); -+ int yi = MathHelper.floor(this.getBoundingBox().b) - 1; -+ int zi = MathHelper.floor(this.getBoundingBox().c); -+ int xf = MathHelper.floor(this.getBoundingBox().d); -+ int yf = MathHelper.floor(this.getBoundingBox().e) - 1; -+ int zf = MathHelper.floor(this.getBoundingBox().f); -+ for (int a = xi; a <= xf; a++) { -+ for (int c = zi; c <= zf; c++) { -+ for (int b = yi; b <= yf; b++) { -+ TileEntity tileEntity = this.world.getTileEntity(new BlockPosition(a, b, c)); -+ if (tileEntity instanceof TileEntityHopper) { -+ ((TileEntityHopper) tileEntity).makeTick(); -+ } -+ } -+ } -+ } -+ } -+ // Spigot end - - /* Craftbukkit start - moved up - if (this.age != -32768) { -diff --git a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java -index ee24008..ffc5ccb 100644 ---- a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java -+++ b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java -@@ -337,6 +337,28 @@ public abstract class EntityMinecartAbstract extends Entity implements INamableT - this.passenger = null; - } - -+ // Spigot start - Make hoppers around this container minecart active. -+ // Called each tick on each minecart. -+ if (this.world.spigotConfig.altHopperTicking && this instanceof EntityMinecartContainer) { -+ int xi = MathHelper.floor(this.getBoundingBox().a) - 1; -+ int yi = MathHelper.floor(this.getBoundingBox().b) - 1; -+ int zi = MathHelper.floor(this.getBoundingBox().c) - 1; -+ int xf = MathHelper.floor(this.getBoundingBox().d) + 1; -+ int yf = MathHelper.floor(this.getBoundingBox().e) + 1; -+ int zf = MathHelper.floor(this.getBoundingBox().f) + 1; -+ for (int a = xi; a <= xf; a++) { -+ for (int b = yi; b <= yf; b++) { -+ for (int c = zi; c <= zf; c++) { -+ TileEntity tileEntity = this.world.getTileEntity(new BlockPosition(a, b, c)); -+ if (tileEntity instanceof TileEntityHopper) { -+ ((TileEntityHopper) tileEntity).makeTick(); -+ } -+ } -+ } -+ } -+ } -+ // Spigot end -+ - this.W(); - } - } -diff --git a/src/main/java/net/minecraft/server/EntityOcelot.java b/src/main/java/net/minecraft/server/EntityOcelot.java -index 0f5d09b..9260f2b 100644 ---- a/src/main/java/net/minecraft/server/EntityOcelot.java -+++ b/src/main/java/net/minecraft/server/EntityOcelot.java -@@ -30,6 +30,31 @@ public class EntityOcelot extends EntityTameableAnimal { - this.datawatcher.a(18, Byte.valueOf((byte) 0)); - } - -+ // Spigot start - When this ocelot begins standing, chests below this ocelot must be -+ // updated as if its contents have changed. We update chests if this ocelot is sitting -+ // knowing that it may be dead, gone, or standing after this method returns. -+ // Called each tick on each ocelot. -+ @Override -+ public void s_() { -+ if (this.world.spigotConfig.altHopperTicking && this.isSitting()) { -+ int xi = MathHelper.floor(this.getBoundingBox().a); -+ int yi = MathHelper.floor(this.getBoundingBox().b) - 1; -+ int zi = MathHelper.floor(this.getBoundingBox().c); -+ int xf = MathHelper.floor(this.getBoundingBox().d); -+ int yf = MathHelper.floor(this.getBoundingBox().e) - 1; -+ int zf = MathHelper.floor(this.getBoundingBox().f); -+ for (int a = xi; a <= xf; a++) { -+ for (int c = zi; c <= zf; c++) { -+ for (int b = yi; b <= yf; b++) { -+ this.world.updateChestAndHoppers(new BlockPosition(a, b, c)); -+ } -+ } -+ } -+ } -+ super.s_(); -+ } -+ // Spigot end -+ - public void E() { - if (this.getControllerMove().a()) { - double d0 = this.getControllerMove().b(); -diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java -index 80c7937..7cf38ea 100644 ---- a/src/main/java/net/minecraft/server/TileEntity.java -+++ b/src/main/java/net/minecraft/server/TileEntity.java -@@ -21,6 +21,41 @@ public abstract class TileEntity { - private int h; - protected Block e; - -+ // Spigot start -+ // Helper method for scheduleTicks. If the hopper at x0, y0, z0 is pointed -+ // at this tile entity, then make it active. -+ private void scheduleTick(BlockPosition blockposition) { -+ TileEntity tileEntity = this.world.getTileEntity(blockposition); -+ if (tileEntity instanceof TileEntityHopper && tileEntity.world != null) { -+ // i is the metadeta assoiated with the direction the hopper faces. -+ EnumDirection dir = BlockHopper.b(tileEntity.u()); -+ -+ // Facing class provides arrays for direction offset. -+ if (tileEntity.position.shift(dir).equals(position)) { -+ ((TileEntityHopper) tileEntity).makeTick(); -+ } -+ } -+ } -+ -+ // Called from update when the contents have changed, so hoppers need updates. -+ // Check all 6 faces. -+ public void scheduleTicks() { -+ if (this.world != null && this.world.spigotConfig.altHopperTicking) { -+ // Check the top -+ this.scheduleTick(position.up()); -+ // Check the sides -+ for (int i = 2; i < 6; i++) { -+ this.scheduleTick(position.shift(EnumDirection.fromType1(i))); -+ } -+ // Check the bottom. -+ TileEntity tileEntity = this.world.getTileEntity(position.down()); -+ if (tileEntity instanceof TileEntityHopper && tileEntity.world != null) { -+ ((TileEntityHopper) tileEntity).makeTick(); -+ } -+ } -+ } -+ // Spigot end -+ - public TileEntity() { - this.position = BlockPosition.ZERO; - this.h = -1; -@@ -105,6 +140,10 @@ public abstract class TileEntity { - if (this.w() != Blocks.AIR) { - this.world.updateAdjacentComparators(this.position, this.w()); - } -+ // Spigot start - Called when the contents have changed, so hoppers around this -+ // tile need updating. -+ this.scheduleTicks(); -+ // Spigot end - } - - } -diff --git a/src/main/java/net/minecraft/server/TileEntityHopper.java b/src/main/java/net/minecraft/server/TileEntityHopper.java -index 280d64f..5355532 100644 ---- a/src/main/java/net/minecraft/server/TileEntityHopper.java -+++ b/src/main/java/net/minecraft/server/TileEntityHopper.java -@@ -16,6 +16,43 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU - private ItemStack[] items = new ItemStack[5]; - private String f; - private int g = -1; -+ -+ // Spigot start -+ private long nextTick = -1; // Next tick this hopper will be ticked. -+ private long lastTick = -1; // Last tick this hopper was polled. -+ -+ // If this hopper is not cooling down, assaign a visible tick for next time. -+ public void makeTick() { -+ if (!this.n()) { -+ this.d(0); -+ } -+ } -+ -+ // Contents changed, so make this hopper active. -+ public void scheduleHopperTick() { -+ if (this.world != null && this.world.spigotConfig.altHopperTicking) { -+ this.makeTick(); -+ } -+ } -+ -+ // Called after this hopper is assaigned a world or when altHopperTicking is turned -+ // on from reload. -+ public void convertToScheduling() { -+ // j is the cooldown in ticks -+ this.d(this.g); -+ } -+ -+ // Called when alt hopper ticking is turned off from the reload command -+ public void convertToPolling() { -+ long cooldownDiff; -+ if (this.lastTick == this.world.getTime()) { -+ cooldownDiff = this.nextTick - this.world.getTime(); -+ } else { -+ cooldownDiff = this.nextTick - this.world.getTime() + 1; -+ } -+ this.d((int) Math.max(0, Math.min(cooldownDiff, Integer.MAX_VALUE))); -+ } -+ // Spigot end - - // CraftBukkit start - add fields and methods - public List transaction = new java.util.ArrayList(); -@@ -81,7 +118,20 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU - } - - nbttagcompound.set("Items", nbttaglist); -- nbttagcompound.setInt("TransferCooldown", this.g); -+ // Spigot start - Need to write the correct cooldown to disk. We convert from long to int on saving. -+ if (this.world != null && this.world.spigotConfig.altHopperTicking) { -+ long cooldownDiff; -+ if (this.lastTick == this.world.getTime()) { -+ cooldownDiff = this.nextTick - this.world.getTime(); -+ } else { -+ cooldownDiff = this.nextTick - this.world.getTime() + 1; -+ } -+ nbttagcompound.setInt("TransferCooldown", (int) Math.max(0, Math.min(cooldownDiff, Integer.MAX_VALUE))); -+ } else { -+ // g is the cooldown in ticks. -+ nbttagcompound.setInt("TransferCooldown", this.g); -+ } -+ // Spigot end - if (this.hasCustomName()) { - nbttagcompound.setString("CustomName", this.f); - } -@@ -90,6 +140,9 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU - - public void update() { - super.update(); -+ // Spigot start - The contents have changed, so make this hopper active. -+ this.scheduleHopperTick(); -+ // Spigot end - } - - public int getSize() { -@@ -170,10 +223,19 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU - - public void c() { - if (this.world != null && !this.world.isStatic) { -- --this.g; -- if (!this.n()) { -- this.d(0); -- this.m(); -+ // Spigot start -+ if (this.world.spigotConfig.altHopperTicking) { -+ this.lastTick = this.world.getTime(); -+ if (this.nextTick == this.world.getTime()) { -+ // Method that does the pushing and pulling. -+ this.m(); -+ } -+ } else { -+ --this.g; -+ if (!this.n()) { -+ this.d(0); -+ this.m(); -+ } - } - - } -@@ -200,7 +262,7 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU - } - - // Spigot start -- if ( !this.n() ) -+ if ( !world.spigotConfig.altHopperTicking && !this.n() ) - { - this.d( world.spigotConfig.hopperCheck ); - } -@@ -597,11 +659,35 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU - } - - public void d(int i) { -- this.g = i; -+ // Spigot start - i is the delay for which this hopper will be ticked next. -+ // i of 1 or below implies a tick next tick. -+ if (this.world != null && this.world.spigotConfig.altHopperTicking) { -+ if (i <= 0) { -+ i = 1; -+ } -+ if (this.lastTick == this.world.getTime()) { -+ this.nextTick = this.world.getTime() + i; -+ } else { -+ this.nextTick = this.world.getTime() + i - 1; -+ } -+ } else { -+ this.g = i; -+ } -+ // Spigot end - } - - public boolean n() { -- return this.g > 0; -+ // Spigot start - Return whether this hopper is cooling down. -+ if (this.world != null && this.world.spigotConfig.altHopperTicking) { -+ if (this.lastTick == this.world.getTime()) { -+ return this.nextTick > this.world.getTime(); -+ } else { -+ return this.nextTick >= this.world.getTime(); -+ } -+ } else { -+ return this.g > 0; -+ } -+ // Spigot end - } - - public boolean o() { -diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index baffc8b..1f44847 100644 ---- a/src/main/java/net/minecraft/server/World.java -+++ b/src/main/java/net/minecraft/server/World.java -@@ -133,6 +133,7 @@ public abstract class World implements IBlockAccess { - private final byte chunkTickRadius; - public static boolean haveWeSilencedAPhysicsCrash; - public static String blockLocation; -+ public List triggerHoppersList = new ArrayList(); // Spigot, When altHopperTicking, tile entities being added go through here. - - public static long chunkToKey(int x, int z) - { -@@ -150,6 +151,43 @@ public abstract class World implements IBlockAccess { - { - return (int) ( ( ( k >> 32 ) & 0xFFFF0000L ) | ( ( k >> 16 ) & 0x0000FFFF ) ); - } -+ -+ // Spigot Start - Hoppers need to be born ticking. -+ private void initializeHoppers() { -+ if (this.spigotConfig.altHopperTicking) { -+ for (TileEntity o : this.triggerHoppersList) { -+ o.scheduleTicks(); -+ if (o instanceof TileEntityHopper) { -+ ((TileEntityHopper) o).convertToScheduling(); -+ ((TileEntityHopper) o).scheduleHopperTick(); -+ } -+ } -+ } -+ triggerHoppersList.clear(); -+ } -+ -+ // Helper method for altHopperTicking. Updates chests at the specified location, -+ // accounting for double chests. Updating the chest will update adjacent hoppers. -+ public void updateChestAndHoppers(BlockPosition blockposition) { -+ Block block = this.getType(blockposition).getBlock(); -+ if (block instanceof BlockChest) { -+ TileEntity tile = this.getTileEntity(blockposition); -+ if (tile instanceof TileEntityChest) { -+ tile.scheduleTicks(); -+ } -+ for (int i = 2; i < 6; i++) { -+ // Facing class provides arrays for direction offset. -+ BlockPosition pos = blockposition.shift(EnumDirection.fromType1(i)); -+ if (this.getType(pos) == block) { -+ tile = this.getTileEntity(pos); -+ if (tile instanceof TileEntityChest) { -+ tile.scheduleTicks(); -+ } -+ break; -+ } -+ } -+ } -+ } - // Spigot end - - public final org.spigotmc.SpigotWorldConfig spigotConfig; // Spigot -@@ -387,6 +425,14 @@ public abstract class World implements IBlockAccess { - // Modularize client and physic updates - notifyAndUpdatePhysics(blockposition, chunk, block1, block, i); - } -+ // Spigot start - If this block is changing to that which a chest beneath it -+ // becomes able to be opened, then the chest must be updated. -+ // block1 is the old block. block is the new block. r returns true if the block type -+ // prevents access to a chest. -+ if (this.spigotConfig.altHopperTicking && block1 != null && block1.isOccluding()&& !block.isOccluding()) { -+ this.updateChestAndHoppers(blockposition.down()); -+ } -+ // Spigot end - // CraftBukkit end - - return true; -@@ -1387,6 +1433,7 @@ public abstract class World implements IBlockAccess { - } - // CraftBukkit end - -+ this.initializeHoppers(); // Spigot - Initializes hoppers which have been added recently. - Iterator iterator = this.tileEntityList.iterator(); - - while (iterator.hasNext()) { -diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index d644922..e094aeb 100644 ---- a/src/main/java/org/spigotmc/SpigotWorldConfig.java -+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -166,11 +166,35 @@ public class SpigotWorldConfig - log( "Entity Tracking Range: Pl " + playerTrackingRange + " / An " + animalTrackingRange + " / Mo " + monsterTrackingRange + " / Mi " + miscTrackingRange + " / Other " + otherTrackingRange ); - } - -+ public boolean altHopperTicking; - public int hopperTransfer; - public int hopperCheck; - public int hopperAmount; - private void hoppers() - { -+ // Alternate ticking method. Uses inventory changes, redstone updates etc. -+ // to update hoppers. Hopper-check is disabled when this is true. -+ boolean prev = altHopperTicking; -+ altHopperTicking = getBoolean( "hopper-alt-ticking", false ); -+ // Necessary for the reload command -+ if (prev != altHopperTicking) { -+ net.minecraft.server.World world = (net.minecraft.server.World) Bukkit.getWorld(this.worldName); -+ if (world != null) { -+ if (altHopperTicking) { -+ for (Object o : world.tileEntityList) { -+ if (o instanceof net.minecraft.server.TileEntityHopper) { -+ ((net.minecraft.server.TileEntityHopper) o).convertToScheduling(); -+ } -+ } -+ } else { -+ for (Object o : world.tileEntityList) { -+ if (o instanceof net.minecraft.server.TileEntityHopper) { -+ ((net.minecraft.server.TileEntityHopper) o).convertToPolling(); -+ } -+ } -+ } -+ } -+ } - // Set the tick delay between hopper item movements - hopperTransfer = getInt( "ticks-per.hopper-transfer", 8 ); - // Set the tick delay between checking for items after the associated -@@ -178,6 +202,7 @@ public class SpigotWorldConfig - // hopper sorting machines from becoming out of sync. - hopperCheck = getInt( "ticks-per.hopper-check", hopperTransfer ); - hopperAmount = getInt( "hopper-amount", 1 ); -+ log( "Alternative Hopper Ticking: " + altHopperTicking ); - log( "Hopper Transfer: " + hopperTransfer + " Hopper Check: " + hopperCheck + " Hopper Amount: " + hopperAmount ); - } - --- -2.1.0 - diff --git a/CraftBukkit-Patches/0143-Only-fetch-an-online-UUID-in-online-mode.patch b/CraftBukkit-Patches/0141-Only-fetch-an-online-UUID-in-online-mode.patch similarity index 91% rename from CraftBukkit-Patches/0143-Only-fetch-an-online-UUID-in-online-mode.patch rename to CraftBukkit-Patches/0141-Only-fetch-an-online-UUID-in-online-mode.patch index 99992bb..eb39116 100644 --- a/CraftBukkit-Patches/0143-Only-fetch-an-online-UUID-in-online-mode.patch +++ b/CraftBukkit-Patches/0141-Only-fetch-an-online-UUID-in-online-mode.patch @@ -1,4 +1,4 @@ -From 2c318c94dabbeac4352924304f684f6d07f6047e Mon Sep 17 00:00:00 2001 +From 603647b6c7abd267dc71b2ea4f774979edcba13b Mon Sep 17 00:00:00 2001 From: Maxim Van de Wynckel Date: Wed, 30 Jul 2014 01:19:51 +0200 Subject: [PATCH] Only fetch an online UUID in online mode @@ -12,10 +12,10 @@ You want to store data for player "Test" who never joined. An online UUID is cr The player Test joins with an offline UUID but that will not match the online UUID of the saved data. diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index acc2105..7cb8a31 100644 +index 9328d8e..59386fd 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1281,8 +1281,14 @@ public final class CraftServer implements Server { +@@ -1295,8 +1295,14 @@ public final class CraftServer implements Server { OfflinePlayer result = getPlayerExact(name); if (result == null) { diff --git a/CraftBukkit-Patches/0144-Filter-attribute-modifiers-which-cause-the-attribute.patch b/CraftBukkit-Patches/0142-Filter-attribute-modifiers-which-cause-the-attribute.patch similarity index 99% rename from CraftBukkit-Patches/0144-Filter-attribute-modifiers-which-cause-the-attribute.patch rename to CraftBukkit-Patches/0142-Filter-attribute-modifiers-which-cause-the-attribute.patch index b0b1723..5346372 100644 --- a/CraftBukkit-Patches/0144-Filter-attribute-modifiers-which-cause-the-attribute.patch +++ b/CraftBukkit-Patches/0142-Filter-attribute-modifiers-which-cause-the-attribute.patch @@ -1,4 +1,4 @@ -From c872c3ed8300482f7671ed9754f0e764aaae72f2 Mon Sep 17 00:00:00 2001 +From c27b1d0d1fffd9a9ba4a4941be8d9306b939ea42 Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Thu, 31 Jul 2014 17:48:20 +0100 Subject: [PATCH] Filter attribute modifiers which cause the attribute to go diff --git a/CraftBukkit-Patches/0145-Plug-WorldMap-Memory-Leak.patch b/CraftBukkit-Patches/0143-Plug-WorldMap-Memory-Leak.patch similarity index 66% rename from CraftBukkit-Patches/0145-Plug-WorldMap-Memory-Leak.patch rename to CraftBukkit-Patches/0143-Plug-WorldMap-Memory-Leak.patch index 08a8247..2fa9547 100644 --- a/CraftBukkit-Patches/0145-Plug-WorldMap-Memory-Leak.patch +++ b/CraftBukkit-Patches/0143-Plug-WorldMap-Memory-Leak.patch @@ -1,27 +1,27 @@ -From 7b8c3623605cadad5dc6e0e365b9130edd0417a7 Mon Sep 17 00:00:00 2001 +From efdacf4c59df0306189d4b0d9c9f81e2b9c15841 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 8 Aug 2014 19:57:03 +1000 Subject: [PATCH] Plug WorldMap Memory Leak diff --git a/src/main/java/net/minecraft/server/PersistentCollection.java b/src/main/java/net/minecraft/server/PersistentCollection.java -index 6bae818..5c36d3e 100644 +index 4b8d548..451f481 100644 --- a/src/main/java/net/minecraft/server/PersistentCollection.java +++ b/src/main/java/net/minecraft/server/PersistentCollection.java @@ -18,7 +18,7 @@ public class PersistentCollection { private IDataManager b; - protected Map a = Maps.newHashMap(); -- private List c = Lists.newArrayList(); -+ public List c = Lists.newArrayList(); // Spigot - private Map d = Maps.newHashMap(); + protected Map a = Maps.newHashMap(); +- private List c = Lists.newArrayList(); ++ public List c = Lists.newArrayList(); // Spigot + private Map d = Maps.newHashMap(); public PersistentCollection(IDataManager idatamanager) { diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 1f44847..c50aa62 100644 +index 2d323a9..1e03e19 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -1083,6 +1083,23 @@ public abstract class World implements IBlockAccess { +@@ -1081,6 +1081,23 @@ public abstract class World implements IBlockAccess { entity.die(); if (entity instanceof EntityHuman) { this.players.remove(entity); @@ -32,7 +32,7 @@ index 1f44847..c50aa62 100644 + { + WorldMap map = (WorldMap) o; + map.i.remove( entity ); -+ for ( Iterator iter = (Iterator) map.g.iterator(); iter.hasNext(); ) ++ for ( Iterator iter = (Iterator) map.g.iterator(); iter.hasNext(); ) + { + if ( iter.next().trackee == entity ) + { @@ -46,17 +46,17 @@ index 1f44847..c50aa62 100644 this.b(entity); } diff --git a/src/main/java/net/minecraft/server/WorldMap.java b/src/main/java/net/minecraft/server/WorldMap.java -index 49826ae..36fcb15 100644 +index 0e03164..9772760 100644 --- a/src/main/java/net/minecraft/server/WorldMap.java +++ b/src/main/java/net/minecraft/server/WorldMap.java @@ -22,7 +22,7 @@ public class WorldMap extends PersistentBase { public byte scale; public byte[] colors = new byte[16384]; - public List g = Lists.newArrayList(); -- private Map i = Maps.newHashMap(); -+ public Map i = Maps.newHashMap(); // Spigot - public Map decorations = Maps.newLinkedHashMap(); - + public List g = Lists.newArrayList(); +- private Map i = Maps.newHashMap(); ++ public Map i = Maps.newHashMap(); // Spigot + public Map decorations = Maps.newLinkedHashMap(); + // CraftBukkit start -- 2.1.0 diff --git a/CraftBukkit-Patches/0146-Fix-Corrupted-Trapped-Chest.patch b/CraftBukkit-Patches/0144-Fix-Corrupted-Trapped-Chest.patch similarity index 91% rename from CraftBukkit-Patches/0146-Fix-Corrupted-Trapped-Chest.patch rename to CraftBukkit-Patches/0144-Fix-Corrupted-Trapped-Chest.patch index c218162..5bc9684 100644 --- a/CraftBukkit-Patches/0146-Fix-Corrupted-Trapped-Chest.patch +++ b/CraftBukkit-Patches/0144-Fix-Corrupted-Trapped-Chest.patch @@ -1,4 +1,4 @@ -From 3daeb7c2a7bb18591c0d013308f331f9938cb01d Mon Sep 17 00:00:00 2001 +From f48c765fc57be686f7d779a91d68034027fc9d00 Mon Sep 17 00:00:00 2001 From: Aikar Date: Fri, 15 Aug 2014 00:56:41 -0400 Subject: [PATCH] Fix Corrupted Trapped Chest @@ -9,7 +9,7 @@ If a Trapped Chest gets its Tile Entity corrupted, it will crash the server ever This will now fix Trapped Chests too. diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 1d6be5f..439bb00 100644 +index 6ed7078..18b7f7d 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -112,7 +112,7 @@ public class WorldServer extends World implements IAsyncTaskHandler { diff --git a/CraftBukkit-Patches/0147-Remove-uneeded-validation.patch b/CraftBukkit-Patches/0145-Remove-uneeded-validation.patch similarity index 96% rename from CraftBukkit-Patches/0147-Remove-uneeded-validation.patch rename to CraftBukkit-Patches/0145-Remove-uneeded-validation.patch index fe5b728..e90c89f 100644 --- a/CraftBukkit-Patches/0147-Remove-uneeded-validation.patch +++ b/CraftBukkit-Patches/0145-Remove-uneeded-validation.patch @@ -1,4 +1,4 @@ -From 5b6c633b8b955f4e9cedeb716715dfa0d71dc8b1 Mon Sep 17 00:00:00 2001 +From a37287fe726437bc2eb3fe6922d6b331d8442e74 Mon Sep 17 00:00:00 2001 From: drXor Date: Fri, 15 Aug 2014 18:11:09 -0400 Subject: [PATCH] Remove uneeded validation diff --git a/CraftBukkit-Patches/0148-Add-Hunger-Config-Values.patch b/CraftBukkit-Patches/0146-Add-Hunger-Config-Values.patch similarity index 88% rename from CraftBukkit-Patches/0148-Add-Hunger-Config-Values.patch rename to CraftBukkit-Patches/0146-Add-Hunger-Config-Values.patch index b7fb801..f962238 100644 --- a/CraftBukkit-Patches/0148-Add-Hunger-Config-Values.patch +++ b/CraftBukkit-Patches/0146-Add-Hunger-Config-Values.patch @@ -1,14 +1,14 @@ -From af5612ab9c5d49ae1a73ff5f5954b0939f53dee0 Mon Sep 17 00:00:00 2001 +From 70d25cc0672928042930789bd318ba3ab9bc70d5 Mon Sep 17 00:00:00 2001 From: lazertester Date: Sun, 17 Aug 2014 19:56:17 +1000 Subject: [PATCH] Add Hunger Config Values diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index eaa5879..00aa03d 100644 +index 2004d67..d73395a 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java -@@ -1085,7 +1085,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1084,7 +1084,7 @@ public abstract class EntityHuman extends EntityLiving { } } @@ -17,8 +17,8 @@ index eaa5879..00aa03d 100644 } else if (flag1) { entity.extinguish(); } -@@ -1332,9 +1332,9 @@ public abstract class EntityHuman extends EntityLiving { - super.bE(); +@@ -1331,9 +1331,9 @@ public abstract class EntityHuman extends EntityLiving { + super.bF(); this.b(StatisticList.u); if (this.isSprinting()) { - this.applyExhaustion(0.8F); @@ -30,7 +30,7 @@ index eaa5879..00aa03d 100644 } diff --git a/src/main/java/net/minecraft/server/FoodMetaData.java b/src/main/java/net/minecraft/server/FoodMetaData.java -index 23aca22..1b44990 100644 +index 456b9b3..3af4180 100644 --- a/src/main/java/net/minecraft/server/FoodMetaData.java +++ b/src/main/java/net/minecraft/server/FoodMetaData.java @@ -63,7 +63,7 @@ public class FoodMetaData { @@ -43,10 +43,10 @@ index 23aca22..1b44990 100644 } } else if (this.foodLevel <= 0) { diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index e094aeb..0a67739 100644 +index d644922..75edbb9 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -326,4 +326,16 @@ public class SpigotWorldConfig +@@ -301,4 +301,16 @@ public class SpigotWorldConfig largeFeatureSeed = getInt( "seed-feature", 14357617 ); log( "Custom Map Seeds: Village: " + villageSeed + " Feature: " + largeFeatureSeed ); } diff --git a/CraftBukkit-Patches/0149-Make-debug-logging-togglable.patch b/CraftBukkit-Patches/0147-Make-debug-logging-togglable.patch similarity index 97% rename from CraftBukkit-Patches/0149-Make-debug-logging-togglable.patch rename to CraftBukkit-Patches/0147-Make-debug-logging-togglable.patch index b78aec6..442dae5 100644 --- a/CraftBukkit-Patches/0149-Make-debug-logging-togglable.patch +++ b/CraftBukkit-Patches/0147-Make-debug-logging-togglable.patch @@ -1,4 +1,4 @@ -From 4e9b8ee9cf6da5a59cfe63aa7577f13dfb722d0b Mon Sep 17 00:00:00 2001 +From 4085dc2656953fefa184a2dc439c16e93ab611dd Mon Sep 17 00:00:00 2001 From: Minecrell Date: Sun, 17 Aug 2014 12:42:53 +0200 Subject: [PATCH] Make debug logging togglable. diff --git a/CraftBukkit-Patches/0150-Skip-invalid-enchants-in-CraftMetaItem.patch b/CraftBukkit-Patches/0148-Skip-invalid-enchants-in-CraftMetaItem.patch similarity index 95% rename from CraftBukkit-Patches/0150-Skip-invalid-enchants-in-CraftMetaItem.patch rename to CraftBukkit-Patches/0148-Skip-invalid-enchants-in-CraftMetaItem.patch index 774b15b..a51dcd9 100644 --- a/CraftBukkit-Patches/0150-Skip-invalid-enchants-in-CraftMetaItem.patch +++ b/CraftBukkit-Patches/0148-Skip-invalid-enchants-in-CraftMetaItem.patch @@ -1,4 +1,4 @@ -From 41727637c2e9a82b6b1cf917dc6c1ad93b70a11b Mon Sep 17 00:00:00 2001 +From 361c1d7528dabf6e01cf8ad66fce2b6b48b01fd8 Mon Sep 17 00:00:00 2001 From: Thinkofdeath Date: Tue, 19 Aug 2014 11:04:21 +0100 Subject: [PATCH] Skip invalid enchants in CraftMetaItem diff --git a/CraftBukkit-Patches/0151-Limit-TNT-Detonations-per-tick.patch b/CraftBukkit-Patches/0149-Limit-TNT-Detonations-per-tick.patch similarity index 86% rename from CraftBukkit-Patches/0151-Limit-TNT-Detonations-per-tick.patch rename to CraftBukkit-Patches/0149-Limit-TNT-Detonations-per-tick.patch index 3990d6d..fd814b1 100644 --- a/CraftBukkit-Patches/0151-Limit-TNT-Detonations-per-tick.patch +++ b/CraftBukkit-Patches/0149-Limit-TNT-Detonations-per-tick.patch @@ -1,4 +1,4 @@ -From cd636c15a85722e15e8e07e1a092a7cda68b7a69 Mon Sep 17 00:00:00 2001 +From 3adf7c50ac25727434bd3aea045dcad4b4ec8cf5 Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 20 Aug 2014 18:12:32 -0400 Subject: [PATCH] Limit TNT Detonations per tick @@ -7,22 +7,22 @@ This gives a per-world control on how much TNT will be processed per-tick, preventing a massive TNT detonation from lagging out the server. diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java -index 98c8d26..3621faf 100644 +index 10f6e47..2d22327 100644 --- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java +++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java @@ -41,6 +41,7 @@ public class EntityTNTPrimed extends Entity { } - public void s_() { + public void t_() { + if (world.spigotConfig.currentPrimedTnt++ > world.spigotConfig.maxTntTicksPerTick) { return; } // Spigot this.lastX = this.locX; this.lastY = this.locY; this.lastZ = this.locZ; diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 439bb00..a61655f 100644 +index 18b7f7d..c820ee0 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -574,6 +574,7 @@ public class WorldServer extends World implements IAsyncTaskHandler { +@@ -581,6 +581,7 @@ public class WorldServer extends World implements IAsyncTaskHandler { } super.tickEntities(); @@ -31,10 +31,10 @@ index 439bb00..a61655f 100644 public void j() { diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 0a67739..a88942e 100644 +index 75edbb9..3b6d4c0 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -338,4 +338,15 @@ public class SpigotWorldConfig +@@ -313,4 +313,15 @@ public class SpigotWorldConfig combatExhaustion = (float) getDouble( "hunger.combat-exhaustion", 0.3 ); regenExhaustion = (float) getDouble( "hunger.regen-exhaustion", 3 ); } diff --git a/CraftBukkit-Patches/0152-Added-isUnbreakable-and-setUnbreakable-to-ItemMeta.patch b/CraftBukkit-Patches/0150-Added-isUnbreakable-and-setUnbreakable-to-ItemMeta.patch similarity index 98% rename from CraftBukkit-Patches/0152-Added-isUnbreakable-and-setUnbreakable-to-ItemMeta.patch rename to CraftBukkit-Patches/0150-Added-isUnbreakable-and-setUnbreakable-to-ItemMeta.patch index c2c504f..a5213b3 100644 --- a/CraftBukkit-Patches/0152-Added-isUnbreakable-and-setUnbreakable-to-ItemMeta.patch +++ b/CraftBukkit-Patches/0150-Added-isUnbreakable-and-setUnbreakable-to-ItemMeta.patch @@ -1,4 +1,4 @@ -From 0f300b295556cc29bc782834d3b27123f2c71767 Mon Sep 17 00:00:00 2001 +From 0e3d4a614635c38e0ed14bdf80a715cef7610756 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Fri, 22 Aug 2014 05:35:16 -0400 Subject: [PATCH] Added isUnbreakable and setUnbreakable to ItemMeta diff --git a/CraftBukkit-Patches/0153-Configurable-Hanging-Tick.patch b/CraftBukkit-Patches/0151-Configurable-Hanging-Tick.patch similarity index 75% rename from CraftBukkit-Patches/0153-Configurable-Hanging-Tick.patch rename to CraftBukkit-Patches/0151-Configurable-Hanging-Tick.patch index 82f3b47..de8bb9e 100644 --- a/CraftBukkit-Patches/0153-Configurable-Hanging-Tick.patch +++ b/CraftBukkit-Patches/0151-Configurable-Hanging-Tick.patch @@ -1,27 +1,27 @@ -From e619fecb979a61dc602cff87e211d1925f2db05f Mon Sep 17 00:00:00 2001 +From fb716254b4919696ab4db97717f208cb169088c5 Mon Sep 17 00:00:00 2001 From: drXor Date: Sat, 9 Aug 2014 13:56:51 -0400 Subject: [PATCH] Configurable Hanging Tick diff --git a/src/main/java/net/minecraft/server/EntityHanging.java b/src/main/java/net/minecraft/server/EntityHanging.java -index 6570340..b74c55e 100644 +index 16dfb1d..e491684 100644 --- a/src/main/java/net/minecraft/server/EntityHanging.java +++ b/src/main/java/net/minecraft/server/EntityHanging.java -@@ -99,7 +99,7 @@ public abstract class EntityHanging extends Entity { +@@ -96,7 +96,7 @@ public abstract class EntityHanging extends Entity { this.lastX = this.locX; this.lastY = this.locY; this.lastZ = this.locZ; -- if (this.c++ == 100 && !this.world.isStatic) { -+ if (this.c++ == this.world.spigotConfig.hangingTickFrequency && !this.world.isStatic) { // Spigot - 100 -> this.world.spigotConfig.hangingTickFrequency +- if (this.c++ == 100 && !this.world.isClientSide) { ++ if (this.c++ == this.world.spigotConfig.hangingTickFrequency && !this.world.isClientSide) { this.c = 0; if (!this.dead && !this.survives()) { // CraftBukkit start - fire break events diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index a88942e..b4f32f0 100644 +index 3b6d4c0..042ec2a 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -349,4 +349,10 @@ public class SpigotWorldConfig +@@ -324,4 +324,10 @@ public class SpigotWorldConfig maxTntTicksPerTick = getInt( "max-tnt-per-tick", 100 ); log( "Max TNT Explosions: " + maxTntTicksPerTick ); } diff --git a/CraftBukkit-Patches/0154-Fix-Some-Memory-Leaks.patch b/CraftBukkit-Patches/0152-Fix-Some-Memory-Leaks.patch similarity index 78% rename from CraftBukkit-Patches/0154-Fix-Some-Memory-Leaks.patch rename to CraftBukkit-Patches/0152-Fix-Some-Memory-Leaks.patch index abff19a..c22071d 100644 --- a/CraftBukkit-Patches/0154-Fix-Some-Memory-Leaks.patch +++ b/CraftBukkit-Patches/0152-Fix-Some-Memory-Leaks.patch @@ -1,16 +1,16 @@ -From d12ee6d274aa3aaf98fd7e8a42c5d900bfebcce8 Mon Sep 17 00:00:00 2001 +From a16d1971da626d2bc10b63fd2afd36fdec1a3955 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 21 Sep 2014 10:06:01 +1000 Subject: [PATCH] Fix Some Memory Leaks diff --git a/src/main/java/net/minecraft/server/EnchantmentManager.java b/src/main/java/net/minecraft/server/EnchantmentManager.java -index c624190..d617228 100644 +index 9865681..32f5a3e 100644 --- a/src/main/java/net/minecraft/server/EnchantmentManager.java +++ b/src/main/java/net/minecraft/server/EnchantmentManager.java -@@ -166,7 +166,10 @@ public class EnchantmentManager { +@@ -168,7 +168,10 @@ public class EnchantmentManager { if (entity instanceof EntityHuman) { - a((EnchantmentModifier) EnchantmentManager.d, entityliving.bz()); + a((EnchantmentManager.EnchantmentModifier) EnchantmentManager.d, entityliving.bA()); } - + // Spigot start @@ -20,9 +20,9 @@ index c624190..d617228 100644 } public static void b(EntityLiving entityliving, Entity entity) { -@@ -179,7 +182,10 @@ public class EnchantmentManager { +@@ -181,7 +184,10 @@ public class EnchantmentManager { if (entityliving instanceof EntityHuman) { - a((EnchantmentModifier) EnchantmentManager.e, entityliving.bz()); + a((EnchantmentManager.EnchantmentModifier) EnchantmentManager.e, entityliving.bA()); } - + // Spigot start @@ -33,7 +33,7 @@ index c624190..d617228 100644 public static int a(EntityLiving entityliving) { diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index 5ef61d9..214c0ca 100644 +index 7c23753..134897a 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -1,5 +1,6 @@ @@ -45,14 +45,14 @@ index 5ef61d9..214c0ca 100644 import java.util.UUID; @@ -24,7 +25,7 @@ public abstract class EntityInsentient extends EntityLiving { protected NavigationAbstract navigation; - public PathfinderGoalSelector goalSelector; // PAIL protected final to public - public PathfinderGoalSelector targetSelector; // PAIL protected final to public + public PathfinderGoalSelector goalSelector; // CraftBukkit - public + public PathfinderGoalSelector targetSelector; // CraftBukkit - public - private EntityLiving goalTarget; + private WeakReference goalTarget = new WeakReference(null); - private EntitySenses bi; + private EntitySenses bk; private ItemStack[] equipment = new ItemStack[5]; - public float[] dropChances = new float[5]; -@@ -83,7 +84,7 @@ public abstract class EntityInsentient extends EntityLiving { + public float[] dropChances = new float[5]; // CraftBukkit - public +@@ -84,7 +85,7 @@ public abstract class EntityInsentient extends EntityLiving { } public EntityLiving getGoalTarget() { @@ -61,7 +61,7 @@ index 5ef61d9..214c0ca 100644 } public void setGoalTarget(EntityLiving entityliving) { -@@ -116,7 +117,7 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -117,7 +118,7 @@ public abstract class EntityInsentient extends EntityLiving { entityliving = null; } } @@ -71,19 +71,19 @@ index 5ef61d9..214c0ca 100644 } diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java -index b4eb893..e34f0f1 100644 +index 006b172..0537d43 100644 --- a/src/main/java/net/minecraft/server/NetworkManager.java +++ b/src/main/java/net/minecraft/server/NetworkManager.java -@@ -169,6 +169,7 @@ public class NetworkManager extends SimpleChannelInboundHandler { +@@ -241,6 +241,7 @@ public class NetworkManager extends SimpleChannelInboundHandler { public void close(IChatBaseComponent ichatbasecomponent) { // Spigot Start this.preparing = false; -+ this.h.clear(); ++ this.i.clear(); // Spigot End - if (this.i.isOpen()) { - this.i.close(); // We can't wait as this may be called from an event loop. + if (this.k.isOpen()) { + this.k.close(); // We can't wait as this may be called from an event loop. diff --git a/src/main/java/net/minecraft/server/PathfinderGoalSwell.java b/src/main/java/net/minecraft/server/PathfinderGoalSwell.java -index d1e77a8..d6fc521 100644 +index c8eebf8..0c05aee 100644 --- a/src/main/java/net/minecraft/server/PathfinderGoalSwell.java +++ b/src/main/java/net/minecraft/server/PathfinderGoalSwell.java @@ -3,7 +3,7 @@ package net.minecraft.server; diff --git a/CraftBukkit-Patches/0155-Refactor-ItemDoor-Place.patch b/CraftBukkit-Patches/0153-Refactor-ItemDoor-Place.patch similarity index 73% rename from CraftBukkit-Patches/0155-Refactor-ItemDoor-Place.patch rename to CraftBukkit-Patches/0153-Refactor-ItemDoor-Place.patch index eb833f7..8016857 100644 --- a/CraftBukkit-Patches/0155-Refactor-ItemDoor-Place.patch +++ b/CraftBukkit-Patches/0153-Refactor-ItemDoor-Place.patch @@ -1,24 +1,24 @@ -From e6202096d6590642f3e468c09f98171acad1396d Mon Sep 17 00:00:00 2001 +From d98a2ce5d86680dc5d80a94cf5f8e5c413887226 Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 30 Sep 2014 21:43:15 +1000 Subject: [PATCH] Refactor ItemDoor Place diff --git a/src/main/java/net/minecraft/server/ItemDoor.java b/src/main/java/net/minecraft/server/ItemDoor.java -index 6f0a065..bca1bc9 100644 +index eef43df..6e92cab 100644 --- a/src/main/java/net/minecraft/server/ItemDoor.java +++ b/src/main/java/net/minecraft/server/ItemDoor.java @@ -48,9 +48,11 @@ public class ItemDoor extends Item { BlockPosition blockposition3 = blockposition.up(); - IBlockData iblockdata = block.getBlockData().set(BlockDoor.FACING, enumdirection).set(BlockDoor.HINGE, flag2 ? EnumDoorHinge.RIGHT : EnumDoorHinge.LEFT); + IBlockData iblockdata = block.getBlockData().set(BlockDoor.FACING, enumdirection).set(BlockDoor.HINGE, flag2 ? BlockDoor.EnumDoorHinge.RIGHT : BlockDoor.EnumDoorHinge.LEFT); -- world.setTypeAndData(blockposition, iblockdata.set(BlockDoor.HALF, EnumDoorHalf.LOWER), 2); -- world.setTypeAndData(blockposition3, iblockdata.set(BlockDoor.HALF, EnumDoorHalf.UPPER), 2); +- world.setTypeAndData(blockposition, iblockdata.set(BlockDoor.HALF, BlockDoor.EnumDoorHalf.LOWER), 2); +- world.setTypeAndData(blockposition3, iblockdata.set(BlockDoor.HALF, BlockDoor.EnumDoorHalf.UPPER), 2); - world.applyPhysics(blockposition, block); - world.applyPhysics(blockposition3, block); + // Spigot start - update physics after the block multi place event -+ world.setTypeAndData(blockposition, iblockdata.set(BlockDoor.HALF, EnumDoorHalf.LOWER), 3); -+ world.setTypeAndData(blockposition3, iblockdata.set(BlockDoor.HALF, EnumDoorHalf.UPPER), 3); ++ world.setTypeAndData(blockposition, iblockdata.set(BlockDoor.HALF, BlockDoor.EnumDoorHalf.LOWER), 3); ++ world.setTypeAndData(blockposition3, iblockdata.set(BlockDoor.HALF, BlockDoor.EnumDoorHalf.UPPER), 3); + // world.applyPhysics(blockposition, block); + // world.applyPhysics(blockposition3, block); + // Spigot end diff --git a/CraftBukkit-Patches/0156-Don-t-Fire-InventoryCloseEvent-Unless-Required.patch b/CraftBukkit-Patches/0154-Don-t-Fire-InventoryCloseEvent-Unless-Required.patch similarity index 90% rename from CraftBukkit-Patches/0156-Don-t-Fire-InventoryCloseEvent-Unless-Required.patch rename to CraftBukkit-Patches/0154-Don-t-Fire-InventoryCloseEvent-Unless-Required.patch index acdda26..6caf169 100644 --- a/CraftBukkit-Patches/0156-Don-t-Fire-InventoryCloseEvent-Unless-Required.patch +++ b/CraftBukkit-Patches/0154-Don-t-Fire-InventoryCloseEvent-Unless-Required.patch @@ -1,11 +1,11 @@ -From 0e5373c55be20077257c9bed0834640ba0a0a7b9 Mon Sep 17 00:00:00 2001 +From c454f0e6d327d22dce343b9b2379028efd072dcd Mon Sep 17 00:00:00 2001 From: md_5 Date: Tue, 30 Sep 2014 21:49:10 +1000 Subject: [PATCH] Don't Fire InventoryCloseEvent Unless Required diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index f057a91..72baeba 100644 +index ed762cd..fd20f9e 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -833,6 +833,7 @@ public class CraftEventFactory { diff --git a/CraftBukkit-Patches/0157-BungeeCord-Chat-API.patch b/CraftBukkit-Patches/0155-BungeeCord-Chat-API.patch similarity index 87% rename from CraftBukkit-Patches/0157-BungeeCord-Chat-API.patch rename to CraftBukkit-Patches/0155-BungeeCord-Chat-API.patch index eca6ac9..86bea5c 100644 --- a/CraftBukkit-Patches/0157-BungeeCord-Chat-API.patch +++ b/CraftBukkit-Patches/0155-BungeeCord-Chat-API.patch @@ -1,4 +1,4 @@ -From e4d916dee99cab96a482aeed1cf735c313292532 Mon Sep 17 00:00:00 2001 +From 660a4cb41b1c6293406af007eab70d428074ac9d Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 13 Dec 2014 13:06:05 +1100 Subject: [PATCH] BungeeCord Chat API @@ -6,13 +6,15 @@ Subject: [PATCH] BungeeCord Chat API diff --git a/src/main/java/net/minecraft/server/PacketPlayOutChat.java b/src/main/java/net/minecraft/server/PacketPlayOutChat.java new file mode 100644 -index 0000000..f9a25e9 +index 0000000..6cd5df2 --- /dev/null +++ b/src/main/java/net/minecraft/server/PacketPlayOutChat.java -@@ -0,0 +1,47 @@ +@@ -0,0 +1,45 @@ +package net.minecraft.server; + -+public class PacketPlayOutChat implements Packet { ++import java.io.IOException; ++ ++public class PacketPlayOutChat implements Packet { + + private IChatBaseComponent a; + public net.md_5.bungee.api.chat.BaseComponent[] components; // Spigot @@ -29,12 +31,12 @@ index 0000000..f9a25e9 + this.b = b0; + } + -+ public void a(PacketDataSerializer packetdataserializer) { ++ public void a(PacketDataSerializer packetdataserializer) throws IOException { + this.a = packetdataserializer.d(); + this.b = packetdataserializer.readByte(); + } + -+ public void b(PacketDataSerializer packetdataserializer) { ++ public void b(PacketDataSerializer packetdataserializer) throws IOException { + // Spigot start + if (components != null) { + packetdataserializer.a(net.md_5.bungee.chat.ComponentSerializer.toString(components)); @@ -52,13 +54,9 @@ index 0000000..f9a25e9 + public boolean b() { + return this.b == 1 || this.b == 2; + } -+ -+ public void a(PacketListener packetlistener) { -+ this.a((PacketListenerPlayOut) packetlistener); -+ } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 7cb8a31..d7e3919 100644 +index 59386fd..6174417 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -121,6 +121,7 @@ import io.netty.buffer.ByteBufOutputStream; @@ -69,7 +67,7 @@ index 7cb8a31..d7e3919 100644 public final class CraftServer implements Server { private static final Player[] EMPTY_PLAYER_ARRAY = new Player[0]; -@@ -1691,6 +1692,20 @@ public final class CraftServer implements Server { +@@ -1705,6 +1706,20 @@ public final class CraftServer implements Server { { return org.spigotmc.SpigotConfig.config; } @@ -91,7 +89,7 @@ index 7cb8a31..d7e3919 100644 public Spigot spigot() diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index e529156..c81d5d2 100644 +index c3913e6..8091b4e 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -18,6 +18,7 @@ import java.util.Set; diff --git a/CraftBukkit-Patches/0159-Use-Standard-List-for-EntitySlices.patch b/CraftBukkit-Patches/0156-Use-Standard-List-for-EntitySlices.patch similarity index 74% rename from CraftBukkit-Patches/0159-Use-Standard-List-for-EntitySlices.patch rename to CraftBukkit-Patches/0156-Use-Standard-List-for-EntitySlices.patch index 6d0dec5..9591f85 100644 --- a/CraftBukkit-Patches/0159-Use-Standard-List-for-EntitySlices.patch +++ b/CraftBukkit-Patches/0156-Use-Standard-List-for-EntitySlices.patch @@ -1,20 +1,20 @@ -From 6fb4627e3e506de605d9a768e1ef76762bf23d16 Mon Sep 17 00:00:00 2001 +From 5230ac21e4f2933df2473d8843c33d1d571a6f4d Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 20 Feb 2015 21:33:36 +1100 Subject: [PATCH] Use Standard List for EntitySlices. diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java -index c50ab45..b76b446 100644 +index a59ff8e..5794345 100644 --- a/src/main/java/net/minecraft/server/Chunk.java +++ b/src/main/java/net/minecraft/server/Chunk.java @@ -31,7 +31,7 @@ public class Chunk { public final int locZ; private boolean k; - public final Map tileEntities; -- public final EntitySlice[] entitySlices; -+ public final List[] entitySlices; // Spigot - public boolean done; + public final Map tileEntities; +- public final EntitySlice[] entitySlices; // CraftBukkit - public ++ public final List[] entitySlices; // Spigot + private boolean done; private boolean lit; private boolean p; @@ -80,14 +80,14 @@ public class Chunk { @@ -34,32 +34,32 @@ index c50ab45..b76b446 100644 } Arrays.fill(this.f, -999); -@@ -892,12 +892,12 @@ public class Chunk { +@@ -916,12 +916,12 @@ public class Chunk { j = MathHelper.clamp(j, 0, this.entitySlices.length - 1); for (int k = i; k <= j; ++k) { -- Iterator iterator = this.entitySlices[k].b(oclass).iterator(); +- Iterator iterator = this.entitySlices[k].c(oclass).iterator(); + Iterator iterator = this.entitySlices[k].iterator(); // Spigot while (iterator.hasNext()) { Entity entity = (Entity) iterator.next(); -- if (entity.getBoundingBox().b(axisalignedbb) && (predicate == null || predicate.apply(entity))) { -+ if (oclass.isInstance(entity) && entity.getBoundingBox().b(axisalignedbb) && (predicate == null || predicate.apply(entity))) { // Spigot - list.add(entity); +- if (entity.getBoundingBox().b(axisalignedbb) && (predicate == null || predicate.apply((T) entity))) { // CraftBukkit - fix decompile error ++ if (oclass.isInstance(entity) && entity.getBoundingBox().b(axisalignedbb) && (predicate == null || predicate.apply((T) entity))) { // CraftBukkit - fix decompile error // Spigot + list.add((T) entity); // Fix decompile error } } -@@ -1278,7 +1278,7 @@ public class Chunk { +@@ -1301,7 +1301,7 @@ public class Chunk { return this.tileEntities; } -- public EntitySlice[] getEntitySlices() { -+ public List[] getEntitySlices() { +- public EntitySlice[] getEntitySlices() { ++ public List[] getEntitySlices() { return this.entitySlices; } diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index d3f4af1..c5ff1be 100644 +index 0143623..621a717 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -141,9 +141,9 @@ public class ActivationRange diff --git a/CraftBukkit-Patches/0160-Allow-Capping-Tile-Entity-Tick-Time.patch b/CraftBukkit-Patches/0157-Allow-Capping-Tile-Entity-Tick-Time.patch similarity index 88% rename from CraftBukkit-Patches/0160-Allow-Capping-Tile-Entity-Tick-Time.patch rename to CraftBukkit-Patches/0157-Allow-Capping-Tile-Entity-Tick-Time.patch index 518ee7c..548c6e4 100644 --- a/CraftBukkit-Patches/0160-Allow-Capping-Tile-Entity-Tick-Time.patch +++ b/CraftBukkit-Patches/0157-Allow-Capping-Tile-Entity-Tick-Time.patch @@ -1,4 +1,4 @@ -From 6166b3835f703314b49c21eb0420e184c61da949 Mon Sep 17 00:00:00 2001 +From 9fb6c64d4e29849949078a5a561aad2978db8f57 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 20 Feb 2015 21:39:31 +1100 Subject: [PATCH] Allow Capping (Tile)Entity Tick Time. @@ -10,23 +10,23 @@ For tiles there is very little tradeoff for this option, as tile ticks are based This feature was commisioned by Chunkr. diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index c50aa62..e921f55 100644 +index 1e03e19..d938b85 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -134,6 +134,9 @@ public abstract class World implements IBlockAccess { + private final byte chunkTickRadius; public static boolean haveWeSilencedAPhysicsCrash; public static String blockLocation; - public List triggerHoppersList = new ArrayList(); // Spigot, When altHopperTicking, tile entities being added go through here. + private org.spigotmc.TickLimiter entityLimiter; + private org.spigotmc.TickLimiter tileLimiter; + private int tileTickPosition; public static long chunkToKey(int x, int z) { -@@ -234,6 +237,8 @@ public abstract class World implements IBlockAccess { - - this.getServer().addWorld(this.world); // CraftBukkit - timings = new SpigotTimings.WorldTimingsHandler(this); // Spigot - code below can generate new world and access timings +@@ -222,6 +225,8 @@ public abstract class World implements IBlockAccess { + this.getServer().addWorld(this.world); + // CraftBukkit end + timings = new SpigotTimings.WorldTimingsHandler(this); // Spigot - code below can generate new world and access timings + this.entityLimiter = new org.spigotmc.TickLimiter(spigotConfig.entityMaxTickTime); + this.tileLimiter = new org.spigotmc.TickLimiter(spigotConfig.tileMaxTickTime); } @@ -46,10 +46,10 @@ index c50aa62..e921f55 100644 entity = (Entity) this.entityList.get(this.tickPosition); // CraftBukkit end if (entity.vehicle != null) { -@@ -1451,14 +1461,18 @@ public abstract class World implements IBlockAccess { +@@ -1449,14 +1459,18 @@ public abstract class World implements IBlockAccess { + this.c.clear(); + } // CraftBukkit end - - this.initializeHoppers(); // Spigot - Initializes hoppers which have been added recently. - Iterator iterator = this.tileEntityList.iterator(); - while (iterator.hasNext()) { @@ -69,7 +69,7 @@ index c50aa62..e921f55 100644 continue; } // Spigot end -@@ -1486,7 +1500,7 @@ public abstract class World implements IBlockAccess { +@@ -1484,7 +1498,7 @@ public abstract class World implements IBlockAccess { } if (tileentity.x()) { @@ -79,10 +79,10 @@ index c50aa62..e921f55 100644 if (this.isLoaded(tileentity.getPosition())) { this.getChunkAtWorldCoords(tileentity.getPosition()).e(tileentity.getPosition()); diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index b4f32f0..908d980 100644 +index 042ec2a..328ff14 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -355,4 +355,13 @@ public class SpigotWorldConfig +@@ -330,4 +330,13 @@ public class SpigotWorldConfig { hangingTickFrequency = getInt( "hanging-tick-frequency", 100 ); } @@ -123,5 +123,5 @@ index 0000000..23a3938 + } +} -- -2.3.1 +2.1.0 diff --git a/CraftBukkit-Patches/0158-Disable-Explosion-avoiding-for-all-mobs.patch b/CraftBukkit-Patches/0158-Disable-Explosion-avoiding-for-all-mobs.patch deleted file mode 100644 index 1efceb1..0000000 --- a/CraftBukkit-Patches/0158-Disable-Explosion-avoiding-for-all-mobs.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 83842cc33f0428678ee61d188b9a1b7ec937f27b Mon Sep 17 00:00:00 2001 -From: Thinkofdeath -Date: Sat, 27 Dec 2014 21:08:51 +0000 -Subject: [PATCH] Disable Explosion avoiding for all mobs - -Its going in 1.8.1 anyway - -diff --git a/src/main/java/net/minecraft/server/EntityMonster.java b/src/main/java/net/minecraft/server/EntityMonster.java -index d849ee7..1ed769f 100644 ---- a/src/main/java/net/minecraft/server/EntityMonster.java -+++ b/src/main/java/net/minecraft/server/EntityMonster.java -@@ -4,7 +4,7 @@ import org.bukkit.event.entity.EntityCombustByEntityEvent; // CraftBukkit - - public abstract class EntityMonster extends EntityCreature implements IMonster { - -- protected final PathfinderGoal a = new PathfinderGoalAvoidTarget(this, new EntitySelectorExplodingCreeper(this), 4.0F, 1.0D, 2.0D); -+ protected final PathfinderGoal a = null; // Spigot : new PathfinderGoalAvoidTarget(this, new EntitySelectorExplodingCreeper(this), 4.0F, 1.0D, 2.0D); - - public EntityMonster(World world) { - super(world); -diff --git a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java -index 35b42db..804ad3a 100644 ---- a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java -+++ b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java -@@ -24,6 +24,7 @@ public class PathfinderGoalSelector { - } - - public void a(int i, PathfinderGoal pathfindergoal) { -+ if (pathfindergoal == null) return; // Spigot - this.b.add(new PathfinderGoalSelectorItem(this, i, pathfindergoal)); - } - --- -2.1.0 - diff --git a/CraftBukkit-Patches/0161-Use-FastMatches-for-ItemStack-Dirty-Check.patch b/CraftBukkit-Patches/0158-Use-FastMatches-for-ItemStack-Dirty-Check.patch similarity index 89% rename from CraftBukkit-Patches/0161-Use-FastMatches-for-ItemStack-Dirty-Check.patch rename to CraftBukkit-Patches/0158-Use-FastMatches-for-ItemStack-Dirty-Check.patch index 4a721ff..fde4e33 100644 --- a/CraftBukkit-Patches/0161-Use-FastMatches-for-ItemStack-Dirty-Check.patch +++ b/CraftBukkit-Patches/0158-Use-FastMatches-for-ItemStack-Dirty-Check.patch @@ -1,4 +1,4 @@ -From 19582c9dcb154e6202f8421dfbede41ea785d7d9 Mon Sep 17 00:00:00 2001 +From a9487bc6a175dc9c84ee4b4c3c49628b61e9d0f3 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sun, 22 Feb 2015 12:27:40 +1100 Subject: [PATCH] Use FastMatches for ItemStack Dirty Check @@ -6,15 +6,15 @@ Subject: [PATCH] Use FastMatches for ItemStack Dirty Check The check to find dirty itemstacks and send update packets each tick can be very intensive as it checks the entire itemstack, including the entire NBT map. To save on this, 19/20 times we will simply compare the basic count/data/type. If for some strange reason the NBT of an item already existing in an inventory is changes, it will take up to 1 second to show, with an average time of half a second. This odd 0.5 second delay is far preferable to lag every tick, and shouldn't be noticed by anyone. diff --git a/src/main/java/net/minecraft/server/Container.java b/src/main/java/net/minecraft/server/Container.java -index 9a12b07..2cfc42d 100644 +index 9c53acd..3e29730 100644 --- a/src/main/java/net/minecraft/server/Container.java +++ b/src/main/java/net/minecraft/server/Container.java @@ -28,6 +28,7 @@ public abstract class Container { - private final Set h = Sets.newHashSet(); - protected List listeners = Lists.newArrayList(); - private Set i = Sets.newHashSet(); + private final Set h = Sets.newHashSet(); + protected List listeners = Lists.newArrayList(); + private Set i = Sets.newHashSet(); + private int tickCount; // Spigot - + // CraftBukkit start public boolean checkReachable = true; @@ -75,7 +76,7 @@ public abstract class Container { @@ -35,10 +35,10 @@ index 9a12b07..2cfc42d 100644 } diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index 596db09..169706e 100644 +index 4b33dbd..de60437 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java -@@ -439,6 +439,18 @@ public final class ItemStack { +@@ -440,6 +440,18 @@ public final class ItemStack { return itemstack == null && itemstack1 == null ? true : (itemstack != null && itemstack1 != null ? (itemstack.tag == null && itemstack1.tag != null ? false : itemstack.tag == null || itemstack.tag.equals(itemstack1.tag)) : false); }