Archiviert
12
0

Add TickFreeze Patch

Dieser Commit ist enthalten in:
yoyosource 2021-12-13 22:05:07 +01:00
Ursprung 0a9b35f004
Commit 243a56213c

Datei anzeigen

@ -5,7 +5,7 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
=================================================================== ===================================================================
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
--- a/src/main/java/net/minecraft/server/WorldServer.java (revision 571772e5fd38f66c11220ce29cd15d70e8da46f6) --- a/src/main/java/net/minecraft/server/WorldServer.java (revision 571772e5fd38f66c11220ce29cd15d70e8da46f6)
+++ b/src/main/java/net/minecraft/server/WorldServer.java (date 1639424761201) +++ b/src/main/java/net/minecraft/server/WorldServer.java (date 1639429464511)
@@ -14,38 +14,28 @@ @@ -14,38 +14,28 @@
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
import it.unimi.dsi.fastutil.objects.ObjectIterator; import it.unimi.dsi.fastutil.objects.ObjectIterator;
@ -66,7 +66,15 @@ diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java
this.ticking = true; this.ticking = true;
gameprofilerfiller.enter("world border"); gameprofilerfiller.enter("world border");
@@ -308,7 +299,7 @@ @@ -303,12 +294,14 @@
}
this.N();
- this.a();
+ if (!currentlyFrozen) {
+ this.a();
+ }
gameprofilerfiller.exitEnter("chunkSource");
this.getChunkProvider().tick(booleansupplier); this.getChunkProvider().tick(booleansupplier);
gameprofilerfiller.exitEnter("tickPending"); gameprofilerfiller.exitEnter("tickPending");
timings.doTickPending.startTiming(); // Spigot timings.doTickPending.startTiming(); // Spigot
@ -75,7 +83,7 @@ diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java
this.nextTickListBlock.b(); this.nextTickListBlock.b();
this.nextTickListFluid.b(); this.nextTickListFluid.b();
} }
@@ -322,7 +313,9 @@ @@ -322,7 +315,9 @@
gameprofilerfiller.exitEnter("blockEvents"); gameprofilerfiller.exitEnter("blockEvents");
timings.doSounds.startTiming(); // Spigot timings.doSounds.startTiming(); // Spigot
@ -86,15 +94,14 @@ diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java
timings.doSounds.stopTiming(); // Spigot timings.doSounds.stopTiming(); // Spigot
this.ticking = false; this.ticking = false;
gameprofilerfiller.exitEnter("entities"); gameprofilerfiller.exitEnter("entities");
@@ -332,18 +325,28 @@ @@ -332,19 +327,28 @@
this.resetEmptyTime(); this.resetEmptyTime();
} }
+ lastFreezed = false; + lastFreezed = false;
+ if (!currentlyFrozen && !physicsTick.isEmpty()) { + if (!currentlyFrozen && !physicsTick.isEmpty()) {
+ Map<BlockPosition, Runnable> physicsTickList = new LinkedHashMap<>(physicsTick); + physicsTick.forEach((blockPosition, runnable) -> runnable.run());
+ physicsTick.clear(); + physicsTick.clear();
+ physicsTickList.forEach((blockPosition, runnable) -> runnable.run());
+ lastFreezed = true; + lastFreezed = true;
+ } + }
+ +
@ -110,13 +117,14 @@ diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java
// CraftBukkit start - Fixed an NPE // CraftBukkit start - Fixed an NPE
if (entity == null) { if (entity == null) {
continue; continue;
+ } }
+ if (currentlyFrozen && !(entity instanceof EntityPlayer)) { + if (currentlyFrozen && !(entity instanceof EntityPlayer)) {
+ continue; + continue;
} + }
// CraftBukkit end // CraftBukkit end
this.a((entity1) -> { this.a((entity1) -> {
@@ -415,7 +418,9 @@ ++entity1.ticksLived;
@@ -415,7 +419,9 @@
gameprofilerfiller.exit(); gameprofilerfiller.exit();
timings.tickEntities.stopTiming(); // Spigot timings.tickEntities.stopTiming(); // Spigot
@ -127,7 +135,7 @@ diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java
} }
gameprofilerfiller.exit(); gameprofilerfiller.exit();
@@ -428,6 +433,7 @@ @@ -428,6 +434,7 @@
} }
public void a(Chunk chunk, int i) { public void a(Chunk chunk, int i) {
@ -135,7 +143,7 @@ diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java
ChunkCoordIntPair chunkcoordintpair = chunk.getPos(); ChunkCoordIntPair chunkcoordintpair = chunk.getPos();
boolean flag = this.isRaining(); boolean flag = this.isRaining();
int j = chunkcoordintpair.d(); int j = chunkcoordintpair.d();
@@ -584,6 +590,7 @@ @@ -584,6 +591,7 @@
} }
private void a(NextTickListEntry<FluidType> nextticklistentry) { private void a(NextTickListEntry<FluidType> nextticklistentry) {
@ -143,7 +151,7 @@ diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java
Fluid fluid = this.getFluid(nextticklistentry.a); Fluid fluid = this.getFluid(nextticklistentry.a);
if (fluid.getType() == nextticklistentry.b()) { if (fluid.getType() == nextticklistentry.b()) {
@@ -593,6 +600,7 @@ @@ -593,6 +601,7 @@
} }
private void b(NextTickListEntry<Block> nextticklistentry) { private void b(NextTickListEntry<Block> nextticklistentry) {
@ -151,7 +159,7 @@ diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java
IBlockData iblockdata = this.getType(nextticklistentry.a); IBlockData iblockdata = this.getType(nextticklistentry.a);
if (iblockdata.getBlock() == nextticklistentry.b()) { if (iblockdata.getBlock() == nextticklistentry.b()) {
@@ -602,6 +610,36 @@ @@ -602,6 +611,36 @@
} }
public void entityJoinedWorld(Entity entity) { public void entityJoinedWorld(Entity entity) {
@ -188,19 +196,6 @@ diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java
if (entity instanceof EntityHuman || this.getChunkProvider().a(entity)) { if (entity instanceof EntityHuman || this.getChunkProvider().a(entity)) {
// Spigot start // Spigot start
if (!org.spigotmc.ActivationRange.checkIfActive(entity)) { if (!org.spigotmc.ActivationRange.checkIfActive(entity)) {
@@ -1315,6 +1353,12 @@
@Override
public void playBlockAction(BlockPosition blockposition, Block block, int i, int j) {
+ if (!currentlyFrozen) {
+ physicsTick.put(blockposition, () -> {
+ this.I.add(new BlockActionData(blockposition, block, i, j));
+ });
+ return;
+ }
this.I.add(new BlockActionData(blockposition, block, i, j));
}
Index: src/main/java/net/minecraft/server/World.java Index: src/main/java/net/minecraft/server/World.java
IDEA additional info: IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
@ -208,7 +203,7 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
=================================================================== ===================================================================
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
--- a/src/main/java/net/minecraft/server/World.java (revision 571772e5fd38f66c11220ce29cd15d70e8da46f6) --- a/src/main/java/net/minecraft/server/World.java (revision 571772e5fd38f66c11220ce29cd15d70e8da46f6)
+++ b/src/main/java/net/minecraft/server/World.java (date 1639417061068) +++ b/src/main/java/net/minecraft/server/World.java (date 1639428902021)
@@ -1,29 +1,23 @@ @@ -1,29 +1,23 @@
package net.minecraft.server; package net.minecraft.server;
@ -292,22 +287,10 @@ diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/m
if (!this.isClientSide) { if (!this.isClientSide) {
IBlockData iblockdata = this.getType(blockposition); IBlockData iblockdata = this.getType(blockposition);
@@ -1193,7 +1207,9 @@ @@ -1226,6 +1240,14 @@
}
protected void a() {
- this.a(this.worldData.getTime() + 1L);
+ if (!currentlyFrozen) {
+ this.a(this.worldData.getTime() + 1L);
+ }
if (this.worldData.v().getBoolean(GameRules.DO_DAYLIGHT_CYCLE)) {
this.setDayTime(this.worldData.getDayTime() + 1L);
}
@@ -1226,7 +1242,16 @@
} }
public void playBlockAction(BlockPosition blockposition, Block block, int i, int j) { public void playBlockAction(BlockPosition blockposition, Block block, int i, int j) {
- this.getType(blockposition).a(this, blockposition, i, j);
+ /* + /*
+ if (!currentlyFrozen) { + if (!currentlyFrozen) {
+ physicsTick.put(blockposition, () -> { + physicsTick.put(blockposition, () -> {
@ -316,8 +299,6 @@ diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/m
+ return; + return;
+ } + }
+ */ + */
+ IBlockData iblockdata = this.getType(blockposition); // Block of Position this.getType(blockposition).a(this, blockposition, i, j);
+ iblockdata.a(this, blockposition, i, j);
} }
@Override