b31089a929
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: d264e972 #591: Add option for a consumer before spawning an item 1c537fce #590: Add spawn and transform reasons for piglin zombification. CraftBukkit Changes: ee5006d1 #810: Add option for a consumer before spawning an item f6a39d3c #809: Add spawn and transform reasons for piglin zombification. 0c24068a Organise imports Spigot Changes: bff52619 Organise imports
235 Zeilen
11 KiB
Diff
235 Zeilen
11 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Sun, 8 Mar 2015 22:55:25 -0600
|
|
Subject: [PATCH] Optimize TileEntity Ticking
|
|
|
|
|
|
diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java
|
|
index d4ebcf8f66197299256bd6b65710a1488c90ea41..c9164dfdb27ddf3709129c8aec54903a1df121ff 100644
|
|
--- a/src/main/java/co/aikar/timings/TimingsExport.java
|
|
+++ b/src/main/java/co/aikar/timings/TimingsExport.java
|
|
@@ -109,7 +109,7 @@ public class TimingsExport extends Thread {
|
|
pair("end", System.currentTimeMillis() / 1000),
|
|
pair("online-mode", Bukkit.getServer().getOnlineMode()),
|
|
pair("sampletime", (System.currentTimeMillis() - TimingsManager.timingStart) / 1000),
|
|
- pair("datapacks", toArrayMapper(MinecraftServer.getServer().getResourcePackRepository().d(), pack -> {
|
|
+ pair("datapacks", toArrayMapper(MinecraftServer.getServer().getResourcePackRepository().e(), pack -> {
|
|
// Don't feel like obf helper'ing these, non fatal if its temp missed.
|
|
return ChatColor.stripColor(CraftChatMessage.fromComponent(pack.a(true)));
|
|
}))
|
|
@@ -148,8 +148,8 @@ public class TimingsExport extends Thread {
|
|
);
|
|
|
|
parent.put("worlds", toObjectMapper(MinecraftServer.getServer().getWorlds(), world -> {
|
|
- if (world.getWorldData().getName().equals("worldeditregentempworld")) return null;
|
|
- return pair(world.getWorldData().getName(), createObject(
|
|
+ if (world.getWorld().getName().equals("worldeditregentempworld")) return null;
|
|
+ return pair(world.getWorld().getName(), createObject(
|
|
pair("gamerules", toObjectMapper(world.getWorld().getGameRules(), rule -> {
|
|
return pair(rule, world.getWorld().getGameRuleValue(rule));
|
|
})),
|
|
diff --git a/src/main/java/net/minecraft/server/BlockChest.java b/src/main/java/net/minecraft/server/BlockChest.java
|
|
index 1441d096d44ea653539ba20ccda94eb62ffc32df..fb7c0d45765e36181c809b250ba4eee5d21c5894 100644
|
|
--- a/src/main/java/net/minecraft/server/BlockChest.java
|
|
+++ b/src/main/java/net/minecraft/server/BlockChest.java
|
|
@@ -10,8 +10,8 @@ import javax.annotation.Nullable;
|
|
public class BlockChest extends BlockChestAbstract<TileEntityChest> implements IBlockWaterlogged {
|
|
|
|
public static final BlockStateDirection FACING = BlockFacingHorizontal.FACING;
|
|
- public static final BlockStateEnum<BlockPropertyChestType> c = BlockProperties.aF;
|
|
- public static final BlockStateBoolean d = BlockProperties.C;
|
|
+ public static final BlockStateEnum<BlockPropertyChestType> c = BlockProperties.aF; public static final BlockStateEnum<BlockPropertyChestType> CHEST_TYPE_PROPERTY = c; // Paper - OBFHELPER
|
|
+ public static final BlockStateBoolean d = BlockProperties.C; public static final BlockStateBoolean waterlogged() { return d; } // Paper OBFHELPER
|
|
protected static final VoxelShape e = Block.a(1.0D, 0.0D, 0.0D, 15.0D, 14.0D, 15.0D);
|
|
protected static final VoxelShape f = Block.a(1.0D, 0.0D, 1.0D, 15.0D, 14.0D, 16.0D);
|
|
protected static final VoxelShape g = Block.a(0.0D, 0.0D, 1.0D, 15.0D, 14.0D, 15.0D);
|
|
diff --git a/src/main/java/net/minecraft/server/IBlockDataHolder.java b/src/main/java/net/minecraft/server/IBlockDataHolder.java
|
|
index 98616f0db75d0e2b2e960dbf88289c87ba426ab6..b19c694cf01bc868dd7c4ec6432b613d19f2ca40 100644
|
|
--- a/src/main/java/net/minecraft/server/IBlockDataHolder.java
|
|
+++ b/src/main/java/net/minecraft/server/IBlockDataHolder.java
|
|
@@ -83,6 +83,7 @@ public abstract class IBlockDataHolder<O, S> {
|
|
return Collections.unmodifiableCollection(this.b.keySet());
|
|
}
|
|
|
|
+ public <T extends Comparable<T>> boolean contains(IBlockState<T> iblockstate) { return this.b(iblockstate); } // Paper - OBFHELPER
|
|
public <T extends Comparable<T>> boolean b(IBlockState<T> iblockstate) {
|
|
return this.b.containsKey(iblockstate);
|
|
}
|
|
diff --git a/src/main/java/net/minecraft/server/TileEntityChest.java b/src/main/java/net/minecraft/server/TileEntityChest.java
|
|
index 8e5ceacf7f6ed0d639d7850334d8a01a74aef6e3..54cad33750efd80b104664723e1115d107c7a72d 100644
|
|
--- a/src/main/java/net/minecraft/server/TileEntityChest.java
|
|
+++ b/src/main/java/net/minecraft/server/TileEntityChest.java
|
|
@@ -8,7 +8,7 @@ import org.bukkit.craftbukkit.entity.CraftHumanEntity;
|
|
import org.bukkit.entity.HumanEntity;
|
|
// CraftBukkit end
|
|
|
|
-public class TileEntityChest extends TileEntityLootable implements ITickable {
|
|
+public class TileEntityChest extends TileEntityLootable { // Paper - Remove ITickable
|
|
|
|
private NonNullList<ItemStack> items;
|
|
protected float a;
|
|
@@ -86,14 +86,20 @@ public class TileEntityChest extends TileEntityLootable implements ITickable {
|
|
return nbttagcompound;
|
|
}
|
|
|
|
- @Override
|
|
public void tick() {
|
|
int i = this.position.getX();
|
|
int j = this.position.getY();
|
|
int k = this.position.getZ();
|
|
|
|
++this.j;
|
|
- this.viewingCount = a(this.world, this, this.j, i, j, k, this.viewingCount);
|
|
+ }
|
|
+
|
|
+ public void doOpenLogic() {
|
|
+ int i = this.position.getX();
|
|
+ int j = this.position.getY();
|
|
+ int k = this.position.getZ();
|
|
+
|
|
+ //this.viewingCount = a(this.world, this, this.j, i, j, k, this.viewingCount); // Paper - check is faulty given our logic is called before active container set
|
|
this.b = this.a;
|
|
float f = 0.1F;
|
|
|
|
@@ -107,8 +113,11 @@ public class TileEntityChest extends TileEntityLootable implements ITickable {
|
|
if (this.viewingCount > 0 && this.a == 0.0F) {
|
|
this.playOpenSound(SoundEffects.BLOCK_CHEST_OPEN);
|
|
}
|
|
+ }
|
|
|
|
- if (this.viewingCount == 0 && this.a > 0.0F || this.viewingCount > 0 && this.a < 1.0F) {
|
|
+ public void doCloseLogic() {
|
|
+ if (this.viewingCount == 0 /* && this.a > 0.0F || this.viewingCount > 0 && this.a < 1.0F */) { // Paper - disable all but player count check
|
|
+ /* // Paper - disable animation stuff
|
|
float f1 = this.a;
|
|
|
|
if (this.viewingCount > 0) {
|
|
@@ -124,8 +133,11 @@ public class TileEntityChest extends TileEntityLootable implements ITickable {
|
|
float f2 = 0.5F;
|
|
|
|
if (this.a < 0.5F && f1 >= 0.5F) {
|
|
+ */
|
|
+ MCUtil.scheduleTask(10, () -> {
|
|
this.playOpenSound(SoundEffects.BLOCK_CHEST_CLOSE);
|
|
- }
|
|
+ }, "Chest Sounds");
|
|
+ //} // Paper end
|
|
|
|
if (this.a < 0.0F) {
|
|
this.a = 0.0F;
|
|
@@ -164,6 +176,7 @@ public class TileEntityChest extends TileEntityLootable implements ITickable {
|
|
}
|
|
|
|
public void playOpenSound(SoundEffect soundeffect) {
|
|
+ if (!this.getBlock().contains(BlockChest.CHEST_TYPE_PROPERTY)) { return; } // Paper - this can be delayed, double check exists - Fixes GH-2074
|
|
BlockPropertyChestType blockpropertychesttype = (BlockPropertyChestType) this.getBlock().get(BlockChest.c);
|
|
|
|
if (blockpropertychesttype != BlockPropertyChestType.LEFT) {
|
|
@@ -202,6 +215,7 @@ public class TileEntityChest extends TileEntityLootable implements ITickable {
|
|
|
|
++this.viewingCount;
|
|
if (this.world == null) return; // CraftBukkit
|
|
+ doOpenLogic(); // Paper
|
|
|
|
// CraftBukkit start - Call redstone event
|
|
if (this.getBlock().getBlock() == Blocks.TRAPPED_CHEST) {
|
|
@@ -224,6 +238,7 @@ public class TileEntityChest extends TileEntityLootable implements ITickable {
|
|
--this.viewingCount;
|
|
|
|
// CraftBukkit start - Call redstone event
|
|
+ doCloseLogic(); // Paper
|
|
if (this.getBlock().getBlock() == Blocks.TRAPPED_CHEST) {
|
|
int newPower = Math.max(0, Math.min(15, this.viewingCount));
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/TileEntityEnderChest.java b/src/main/java/net/minecraft/server/TileEntityEnderChest.java
|
|
index 4ee3520882df2f6f358f3f61dc42c20129984b72..80440aa24f546dd151e89b705322d9c3e906b139 100644
|
|
--- a/src/main/java/net/minecraft/server/TileEntityEnderChest.java
|
|
+++ b/src/main/java/net/minecraft/server/TileEntityEnderChest.java
|
|
@@ -1,6 +1,6 @@
|
|
package net.minecraft.server;
|
|
|
|
-public class TileEntityEnderChest extends TileEntity implements ITickable {
|
|
+public class TileEntityEnderChest extends TileEntity { // Paper - Remove ITickable
|
|
|
|
public float a;
|
|
public float b;
|
|
@@ -11,18 +11,28 @@ public class TileEntityEnderChest extends TileEntity implements ITickable {
|
|
super(TileEntityTypes.ENDER_CHEST);
|
|
}
|
|
|
|
- @Override
|
|
public void tick() {
|
|
if (++this.g % 20 * 4 == 0) {
|
|
this.world.playBlockAction(this.position, Blocks.ENDER_CHEST, 1, this.c);
|
|
}
|
|
|
|
this.b = this.a;
|
|
+ /* // Paper
|
|
int i = this.position.getX();
|
|
int j = this.position.getY();
|
|
int k = this.position.getZ();
|
|
float f = 0.1F;
|
|
double d0;
|
|
+ // Paper start
|
|
+ */
|
|
+ }
|
|
+
|
|
+ private void doOpenLogic() {
|
|
+ int i = this.position.getX();
|
|
+ int j = this.position.getY();
|
|
+ int k = this.position.getZ();
|
|
+ double d0;
|
|
+ // Paper end
|
|
|
|
if (this.c > 0 && this.a == 0.0F) {
|
|
double d1 = (double) i + 0.5D;
|
|
@@ -30,8 +40,17 @@ public class TileEntityEnderChest extends TileEntity implements ITickable {
|
|
d0 = (double) k + 0.5D;
|
|
this.world.playSound((EntityHuman) null, d1, (double) j + 0.5D, d0, SoundEffects.BLOCK_ENDER_CHEST_OPEN, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
|
|
}
|
|
+ // Paper start
|
|
+ }
|
|
|
|
- if (this.c == 0 && this.a > 0.0F || this.c > 0 && this.a < 1.0F) {
|
|
+ private void doCloseLogic() {
|
|
+ int i = this.position.getX();
|
|
+ int j = this.position.getY();
|
|
+ int k = this.position.getZ();
|
|
+ double d0;
|
|
+
|
|
+ if (this.c == 0) { /* && this.a > 0.0F || this.c > 0 && this.a < 1.0F) {
|
|
+ // Paper end
|
|
float f1 = this.a;
|
|
|
|
if (this.c > 0) {
|
|
@@ -47,11 +66,14 @@ public class TileEntityEnderChest extends TileEntity implements ITickable {
|
|
float f2 = 0.5F;
|
|
|
|
if (this.a < 0.5F && f1 >= 0.5F) {
|
|
+ // Paper start
|
|
+ */
|
|
d0 = (double) i + 0.5D;
|
|
double d2 = (double) k + 0.5D;
|
|
|
|
+ MCUtil.scheduleTask(10, () -> {
|
|
this.world.playSound((EntityHuman) null, d0, (double) j + 0.5D, d2, SoundEffects.BLOCK_ENDER_CHEST_CLOSE, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
|
|
- }
|
|
+ }, "Chest Sounds");
|
|
|
|
if (this.a < 0.0F) {
|
|
this.a = 0.0F;
|
|
@@ -79,11 +101,13 @@ public class TileEntityEnderChest extends TileEntity implements ITickable {
|
|
public void d() {
|
|
++this.c;
|
|
this.world.playBlockAction(this.position, Blocks.ENDER_CHEST, 1, this.c);
|
|
+ doOpenLogic(); // Paper
|
|
}
|
|
|
|
public void f() {
|
|
--this.c;
|
|
this.world.playBlockAction(this.position, Blocks.ENDER_CHEST, 1, this.c);
|
|
+ doCloseLogic(); // Paper
|
|
}
|
|
|
|
public boolean a(EntityHuman entityhuman) {
|