mirror of
https://github.com/PaperMC/Paper.git
synced 2025-04-10 08:03:01 +02:00
Mojang made some changes to priorities in 1.17 and it seems that these changes conflict with the changes made in this patch, which in some cases appears to cause excessive rescheduling of tasks. This, however, is not confirmed as such but seems to be the behavior that we're seeing to cause this issue, if mojang has adopted the changes we suggested, then a good chunk of this patch may be unneeded, but, this needs a much better look than I'm currently able to do
101 lines
4.1 KiB
Diff
101 lines
4.1 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <spottedleaf@spottedleaf.dev>
|
|
Date: Mon, 6 Jul 2020 20:46:50 -0700
|
|
Subject: [PATCH] Improve inlinig for some hot IBlockData methods
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
|
|
index 4383936b07c60a12e4368da1b9c36297f1ca7b01..1179c62695da4dcf02590c97d8da3c6fcdbee9ef 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java
|
|
@@ -653,7 +653,14 @@ public abstract class BlockBehaviour {
|
|
}
|
|
// Paper end
|
|
|
|
+ // Paper start
|
|
+ protected boolean isTicking;
|
|
+ protected FluidState fluid;
|
|
+ // Paper end
|
|
+
|
|
public void initCache() {
|
|
+ this.fluid = this.getBlock().getFluidState(this.asState()); // Paper - moved from getFluid()
|
|
+ this.isTicking = this.getBlock().isRandomlyTicking(this.asState()); // Paper - moved from isTicking()
|
|
if (!this.getBlock().hasDynamicShape()) {
|
|
this.cache = new BlockBehaviour.BlockStateBase.Cache(this.asState());
|
|
}
|
|
@@ -692,19 +699,19 @@ public abstract class BlockBehaviour {
|
|
return this.getBlock().getOcclusionShape(this.asState(), world, pos);
|
|
}
|
|
|
|
- public boolean hasLargeCollisionShape() {
|
|
+ public final boolean hasLargeCollisionShape() { // Paper
|
|
return this.cache == null || this.cache.largeCollisionShape;
|
|
}
|
|
|
|
- public boolean useShapeForLightOcclusion() {
|
|
+ public final boolean useShapeForLightOcclusion() { // Paper
|
|
return this.useShapeForLightOcclusion;
|
|
}
|
|
|
|
- public int getLightEmission() {
|
|
+ public final int getLightEmission() { // Paper
|
|
return this.lightEmission;
|
|
}
|
|
|
|
- public boolean isAir() {
|
|
+ public final boolean isAir() { // Paper
|
|
return this.isAir;
|
|
}
|
|
|
|
@@ -778,7 +785,7 @@ public abstract class BlockBehaviour {
|
|
}
|
|
}
|
|
|
|
- public boolean canOcclude() {
|
|
+ public final boolean canOcclude() { // Paper
|
|
return this.canOcclude;
|
|
}
|
|
|
|
@@ -971,12 +978,12 @@ public abstract class BlockBehaviour {
|
|
return this.getBlock() == block;
|
|
}
|
|
|
|
- public FluidState getFluidState() {
|
|
- return this.getBlock().getFluidState(this.asState());
|
|
+ public final FluidState getFluidState() { // Paper
|
|
+ return this.fluid; // Paper - moved into init
|
|
}
|
|
|
|
- public boolean isRandomlyTicking() {
|
|
- return this.getBlock().isRandomlyTicking(this.asState());
|
|
+ public final boolean isRandomlyTicking() { // Paper
|
|
+ return this.isTicking; // Paper - moved into init
|
|
}
|
|
|
|
public long getSeed(BlockPos pos) {
|
|
diff --git a/src/main/java/net/minecraft/world/level/material/FluidState.java b/src/main/java/net/minecraft/world/level/material/FluidState.java
|
|
index 65911334082f9d53fc930d7c6b0313e8acef0c5e..0ae876f0bbfac74a9d5f06fb73f9cfcf5991b02e 100644
|
|
--- a/src/main/java/net/minecraft/world/level/material/FluidState.java
|
|
+++ b/src/main/java/net/minecraft/world/level/material/FluidState.java
|
|
@@ -23,8 +23,12 @@ public final class FluidState extends StateHolder<Fluid, FluidState> {
|
|
public static final int AMOUNT_MAX = 9;
|
|
public static final int AMOUNT_FULL = 8;
|
|
|
|
+ // Paper start
|
|
+ protected final boolean isEmpty;
|
|
+ // Paper end
|
|
public FluidState(Fluid fluid, ImmutableMap<Property<?>, Comparable<?>> propertiesMap, MapCodec<FluidState> codec) {
|
|
super(fluid, propertiesMap, codec);
|
|
+ this.isEmpty = fluid.isEmpty(); // Paper - moved from isEmpty()
|
|
}
|
|
|
|
public Fluid getType() {
|
|
@@ -40,7 +44,7 @@ public final class FluidState extends StateHolder<Fluid, FluidState> {
|
|
}
|
|
|
|
public boolean isEmpty() {
|
|
- return this.getType().isEmpty();
|
|
+ return this.isEmpty; // Paper - moved into constructor
|
|
}
|
|
|
|
public float getHeight(BlockGetter world, BlockPos pos) {
|