geforkt von Mirrors/Paper
c97ce029e9
PaperMC believes that 1.16.2 is now ready for general release as we fixed the main issue plagueing the 1.16.x release, the MapLike data conversion issues. Until now, it was not safe for a server to convert a world to 1.16.2 without data conversion issues around villages and potentially other things. If you did, those MapLike errors meant something went wrong. This is now resolved. Big thanks to all those that helped, notably @BillyGalbreath and @Proximyst who did large parts of the update process with me. Please as always, backup your worlds and test before updating to 1.16.2! If you update to 1.16.2, there is no going back to an older build than this. --------------------------------- Co-authored-by: William Blake Galbreath <Blake.Galbreath@GMail.com> Co-authored-by: Mariell Hoversholm <proximyst@proximyst.com> Co-authored-by: krolik-exe <69214078+krolik-exe@users.noreply.github.com> Co-authored-by: BillyGalbreath <BillyGalbreath@users.noreply.github.com> Co-authored-by: stonar96 <minecraft.stonar96@gmail.com> Co-authored-by: Shane Freeder <theboyetronic@gmail.com> Co-authored-by: Jason <jasonpenilla2@me.com> Co-authored-by: kashike <kashike@vq.lc> Co-authored-by: Aurora <21148213+aurorasmiles@users.noreply.github.com> Co-authored-by: KennyTV <kennytv@t-online.de> Co-authored-by: commandblockguy <commandblockguy1@gmail.com> Co-authored-by: DigitalRegent <misterwener@gmail.com> Co-authored-by: ishland <ishlandmc@yeah.net>
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 d4b8daf1f064bff25ef5566b0288dad0087e379e..52f64460ba1bfb298f343f71a923c8f34de9e39d 100644
|
|
--- a/src/main/java/net/minecraft/server/TileEntityChest.java
|
|
+++ b/src/main/java/net/minecraft/server/TileEntityChest.java
|
|
@@ -7,7 +7,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;
|
|
@@ -85,14 +85,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;
|
|
|
|
@@ -106,8 +112,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) {
|
|
@@ -123,8 +132,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;
|
|
@@ -163,6 +175,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) {
|
|
@@ -201,6 +214,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) {
|
|
@@ -223,6 +237,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) {
|