diff --git a/Spigot-Server-Patches/Move-sound-handling-out-of-the-chest-tick-loop.patch b/Spigot-Server-Patches/Move-sound-handling-out-of-the-chest-tick-loop.patch new file mode 100644 index 0000000000..44808c95f0 --- /dev/null +++ b/Spigot-Server-Patches/Move-sound-handling-out-of-the-chest-tick-loop.patch @@ -0,0 +1,172 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Zach Brown <1254957+zachbr@users.noreply.github.com> +Date: Mon, 11 Aug 2014 19:30:19 -0500 +Subject: [PATCH] Move sound handling out of the chest tick loop + +This allows us to disable ticking chests and enderchests without any +noticeable difference to players + +diff --git a/src/main/java/net/minecraft/server/TileEntityChest.java b/src/main/java/net/minecraft/server/TileEntityChest.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/TileEntityChest.java ++++ b/src/main/java/net/minecraft/server/TileEntityChest.java +@@ -0,0 +0,0 @@ public class TileEntityChest extends TileEntity implements IInventory { + } + + this.n = this.m; ++ ++ // PaperSpigot start - Move chest sound handling out of the tick loop ++ /* + f = 0.1F; + double d0; + +@@ -0,0 +0,0 @@ public class TileEntityChest extends TileEntity implements IInventory { + this.m = 0.0F; + } + } ++ */ ++ // PaperSpigot end + } + + public boolean c(int i, int j) { +@@ -0,0 +0,0 @@ public class TileEntityChest extends TileEntity implements IInventory { + if (this.world == null) return; // CraftBukkit + this.world.playBlockAction(this.x, this.y, this.z, this.q(), 1, this.o); + ++ // PaperSpigot start - Move chest open sound handling down to here ++ this.i(); ++ double d0; ++ ++ if (this.o > 0 && this.m == 0.0F && this.i == null && this.k == null) { ++ double d1 = (double) this.x + 0.5D; ++ ++ d0 = (double) this.z + 0.5D; ++ if (this.l != null) { ++ d0 += 0.5D; ++ } ++ ++ if (this.j != null) { ++ d1 += 0.5D; ++ } ++ ++ this.world.makeSound(d1, (double) this.y + 0.5D, d0, "random.chestopen", 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F); ++ } ++ // PaperSpigot end ++ + // CraftBukkit start - Call redstone event + if (this.q() == Blocks.TRAPPED_CHEST) { + int newPower = Math.max(0, Math.min(15, this.o)); +@@ -0,0 +0,0 @@ public class TileEntityChest extends TileEntity implements IInventory { + if (this.world == null) return; // CraftBukkit + this.world.playBlockAction(this.x, this.y, this.z, this.q(), 1, this.o); + ++ // PaperSpigot start - Move chest close sound handling down to here ++ this.i(); ++ double d0; ++ ++ if (this.o == 0 && this.i == null && this.k == null) { ++ d0 = (double) this.x + 0.5D; ++ double d2 = (double) this.z + 0.5D; ++ ++ if (this.l != null) { ++ d2 += 0.5D; ++ } ++ ++ if (this.j != null) { ++ d0 += 0.5D; ++ } ++ ++ this.world.makeSound(d0, (double) this.y + 0.5D, d2, "random.chestclosed", 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F); ++ } ++ // PaperSpigot end ++ + // CraftBukkit start - Call redstone event + if (this.q() == Blocks.TRAPPED_CHEST) { + int newPower = Math.max(0, Math.min(15, this.o)); +diff --git a/src/main/java/net/minecraft/server/TileEntityEnderChest.java b/src/main/java/net/minecraft/server/TileEntityEnderChest.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/net/minecraft/server/TileEntityEnderChest.java ++++ b/src/main/java/net/minecraft/server/TileEntityEnderChest.java +@@ -0,0 +0,0 @@ public class TileEntityEnderChest extends TileEntity { + } + + this.i = this.a; ++ ++ // PaperSpigot start - Move chest sound handling out of the tick loop ++ /* + float f = 0.1F; + double d0; + +@@ -0,0 +0,0 @@ public class TileEntityEnderChest extends TileEntity { + this.a = 0.0F; + } + } ++ */ ++ // PaperSpigot end + } + + public boolean c(int i, int j) { +@@ -0,0 +0,0 @@ public class TileEntityEnderChest extends TileEntity { + public void a() { + ++this.j; + this.world.playBlockAction(this.x, this.y, this.z, Blocks.ENDER_CHEST, 1, this.j); ++ ++ // PaperSpigot start - Move chest open sound handling down to here ++ double d0; ++ ++ if (this.j > 0 && this.a == 0.0F) { ++ double d1 = (double) this.x + 0.5D; ++ ++ d0 = (double) this.z + 0.5D; ++ this.world.makeSound(d1, (double) this.y + 0.5D, d0, "random.chestopen", 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F); ++ } ++ // PaperSpigot end + } + + public void b() { + --this.j; + this.world.playBlockAction(this.x, this.y, this.z, Blocks.ENDER_CHEST, 1, this.j); ++ ++ // PaperSpigot start - Move chest close sound handling down to here ++ float f = 0.1F; ++ double d0; ++ ++ if (this.j == 0 && this.a == 0.0F || this.j > 0 && this.a < 1.0F) { ++ float f1 = this.a; ++ d0 = (double) this.x + 0.5D; ++ double d2 = (double) this.z + 0.5D; ++ ++ this.world.makeSound(d0, (double) this.y + 0.5D, d2, "random.chestclosed", 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F); ++ ++ if (this.a < 0.0F) { ++ this.a = 0.0F; ++ } ++ } ++ // PaperSpigot end + } + + public boolean a(EntityHuman entityhuman) { +diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java ++++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java +@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig + private static final Map defaultTileEntityTickIntervals = new HashMap() {{ + // Use 0 for no ticking + // does findPlayer lookup, so this helps performance to slow down +- put("chest", 10); +- put("enderchest", 10); + put("enchanttable", 10); + + // These TE's have empty tick methods, doing nothing. Never bother ticking them. +@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig + put("skull", 0); + put("comparator", 0); + put("flowerpot", 0); ++ // PaperSpigot - We moved the chest sound handling out of the tick loop, so it's safe to not tick them ++ put("chest", 0); ++ put("enderchest", 0); + + // Slow things down that players won't notice due to craftbukkit "wall time" patches. + put("furnace", 4); +-- \ No newline at end of file diff --git a/Spigot-Server-Patches/mc-dev-imports.patch b/Spigot-Server-Patches/mc-dev-imports.patch index 1969a0c2ab..21d1f998c4 100644 --- a/Spigot-Server-Patches/mc-dev-imports.patch +++ b/Spigot-Server-Patches/mc-dev-imports.patch @@ -84,4 +84,94 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + } + } +} +diff --git a/src/main/java/net/minecraft/server/TileEntityEnderChest.java b/src/main/java/net/minecraft/server/TileEntityEnderChest.java +new file mode 100644 +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 +--- /dev/null ++++ b/src/main/java/net/minecraft/server/TileEntityEnderChest.java +@@ -0,0 +0,0 @@ ++package net.minecraft.server; ++ ++public class TileEntityEnderChest extends TileEntity { ++ ++ public float a; ++ public float i; ++ public int j; ++ private int k; ++ ++ public TileEntityEnderChest() {} ++ ++ public void h() { ++ super.h(); ++ if (++this.k % 20 * 4 == 0) { ++ this.world.playBlockAction(this.x, this.y, this.z, Blocks.ENDER_CHEST, 1, this.j); ++ } ++ ++ this.i = this.a; ++ float f = 0.1F; ++ double d0; ++ ++ if (this.j > 0 && this.a == 0.0F) { ++ double d1 = (double) this.x + 0.5D; ++ ++ d0 = (double) this.z + 0.5D; ++ this.world.makeSound(d1, (double) this.y + 0.5D, d0, "random.chestopen", 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F); ++ } ++ ++ if (this.j == 0 && this.a > 0.0F || this.j > 0 && this.a < 1.0F) { ++ float f1 = this.a; ++ ++ if (this.j > 0) { ++ this.a += f; ++ } else { ++ this.a -= f; ++ } ++ ++ if (this.a > 1.0F) { ++ this.a = 1.0F; ++ } ++ ++ float f2 = 0.5F; ++ ++ if (this.a < f2 && f1 >= f2) { ++ d0 = (double) this.x + 0.5D; ++ double d2 = (double) this.z + 0.5D; ++ ++ this.world.makeSound(d0, (double) this.y + 0.5D, d2, "random.chestclosed", 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F); ++ } ++ ++ if (this.a < 0.0F) { ++ this.a = 0.0F; ++ } ++ } ++ } ++ ++ public boolean c(int i, int j) { ++ if (i == 1) { ++ this.j = j; ++ return true; ++ } else { ++ return super.c(i, j); ++ } ++ } ++ ++ public void s() { ++ this.u(); ++ super.s(); ++ } ++ ++ public void a() { ++ ++this.j; ++ this.world.playBlockAction(this.x, this.y, this.z, Blocks.ENDER_CHEST, 1, this.j); ++ } ++ ++ public void b() { ++ --this.j; ++ this.world.playBlockAction(this.x, this.y, this.z, Blocks.ENDER_CHEST, 1, this.j); ++ } ++ ++ public boolean a(EntityHuman entityhuman) { ++ return this.world.getTileEntity(this.x, this.y, this.z) != this ? false : entityhuman.e((double) this.x + 0.5D, (double) this.y + 0.5D, (double) this.z + 0.5D) <= 64.0D; ++ } ++} -- \ No newline at end of file