Merge branch 'master' into pre/1.13
* master: MC-135506: Experience should save as Integers Fix EXP orb merging causing values to go negative - Closes #1169 Add "Safe Regen" Duplicate UUID resolver and make default
This commit is contained in:
commit
0f479b740d
13 changed files with 135 additions and 87 deletions
|
@ -1,11 +1,11 @@
|
|||
From 6d0cbb0a82daf262ca29e25e37b2c002eec424c0 Mon Sep 17 00:00:00 2001
|
||||
From 74c77acc857f97071521e3aa54a850b09074e6a0 Mon Sep 17 00:00:00 2001
|
||||
From: BillyGalbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Fri, 10 Nov 2017 23:03:12 -0500
|
||||
Subject: [PATCH] Option for maximum exp value when merging orbs
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 23cb3feef..1c642e636 100644
|
||||
index 23cb3feef0..1c642e6364 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -362,4 +362,10 @@ public class PaperWorldConfig {
|
||||
|
@ -20,16 +20,16 @@ index 23cb3feef..1c642e636 100644
|
|||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 412300fbb..ffafaddba 100644
|
||||
index ed21614e0b..0e7fa6a0f2 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -1005,16 +1005,30 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -1005,16 +1005,31 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
EntityExperienceOrb xp = (EntityExperienceOrb) entity;
|
||||
double radius = spigotConfig.expMerge;
|
||||
if (radius > 0) {
|
||||
+ // Paper start - Maximum exp value when merging - Whole section has been tweaked, see comments for specifics
|
||||
+ final int maxValue = paperConfig.expMergeMaxValue;
|
||||
+ final boolean mergeUnconditionally = maxValue <= 0;
|
||||
+ final boolean mergeUnconditionally = paperConfig.expMergeMaxValue <= 0;
|
||||
+ if (mergeUnconditionally || xp.value < maxValue) { // Paper - Skip iteration if unnecessary
|
||||
+
|
||||
List<Entity> entities = this.getEntities(entity, entity.getBoundingBox().grow(radius, radius, radius));
|
||||
|
@ -37,16 +37,19 @@ index 412300fbb..ffafaddba 100644
|
|||
if (e instanceof EntityExperienceOrb) {
|
||||
EntityExperienceOrb loopItem = (EntityExperienceOrb) e;
|
||||
- if (!loopItem.dead) {
|
||||
+ if (!loopItem.dead && !(maxValue > 0 && loopItem.value >= maxValue)) { // Paper
|
||||
xp.value += loopItem.value;
|
||||
+ // Paper start
|
||||
+ if (!mergeUnconditionally && xp.value > maxValue) {
|
||||
- xp.value += loopItem.value;
|
||||
- loopItem.die();
|
||||
+ // Paper start
|
||||
+ if (!loopItem.dead && !(maxValue > 0 && loopItem.value >= maxValue)) {
|
||||
+ long newTotal = (long)xp.value + (long)loopItem.value;
|
||||
+ if (newTotal > (long)maxValue) {
|
||||
+ loopItem.value = xp.value - maxValue;
|
||||
+ xp.value = maxValue;
|
||||
+ break;
|
||||
+ } else {
|
||||
+ xp.value += loopItem.value;
|
||||
+ loopItem.die();
|
||||
+ }
|
||||
+ // Paper end
|
||||
loopItem.die();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
From c9bc942cb9de94f6ac94ffe2736290433283f15a Mon Sep 17 00:00:00 2001
|
||||
From a52f0dc0ac68a35e4ba71589eeab5fe3e1e06e84 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Tue, 19 Dec 2017 22:57:26 -0500
|
||||
Subject: [PATCH] ExperienceOrbMergeEvent
|
||||
|
@ -8,18 +8,18 @@ Plugins can cancel this if they want to ensure experience orbs do not lose impor
|
|||
metadata such as spawn reason, or conditionally move data from source to target.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index d3b64b741..a961705fb 100644
|
||||
index d40725b17a..0f56969270 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -1014,7 +1014,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
for (Entity e : entities) {
|
||||
@@ -1015,7 +1015,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
if (e instanceof EntityExperienceOrb) {
|
||||
EntityExperienceOrb loopItem = (EntityExperienceOrb) e;
|
||||
- if (!loopItem.dead && !(maxValue > 0 && loopItem.value >= maxValue)) { // Paper
|
||||
+ if (!loopItem.dead && !(maxValue > 0 && loopItem.value >= maxValue) && new com.destroystokyo.paper.event.entity.ExperienceOrbMergeEvent((org.bukkit.entity.ExperienceOrb) entity.getBukkitEntity(), (org.bukkit.entity.ExperienceOrb) loopItem.getBukkitEntity()).callEvent()) { // Paper
|
||||
xp.value += loopItem.value;
|
||||
// Paper start
|
||||
if (!mergeUnconditionally && xp.value > maxValue) {
|
||||
// Paper start
|
||||
- if (!loopItem.dead && !(maxValue > 0 && loopItem.value >= maxValue)) {
|
||||
+ if (!loopItem.dead && !(maxValue > 0 && loopItem.value >= maxValue) && new com.destroystokyo.paper.event.entity.ExperienceOrbMergeEvent((org.bukkit.entity.ExperienceOrb) entity.getBukkitEntity(), (org.bukkit.entity.ExperienceOrb) loopItem.getBukkitEntity()).callEvent()) {
|
||||
long newTotal = (long)xp.value + (long)loopItem.value;
|
||||
if (newTotal > (long)maxValue) {
|
||||
loopItem.value = xp.value - maxValue;
|
||||
--
|
||||
2.18.0
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
From 13a7093e1a97f051dff1b9f20e415d15a18f0fcf Mon Sep 17 00:00:00 2001
|
||||
From 5141b8c2ab3839058f95e6bbc02d06eb04d48a54 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Wed, 4 Jul 2018 03:39:51 -0400
|
||||
Subject: [PATCH] Avoid Chunk Lookups for Entity/TileEntity Current Chunk
|
||||
|
@ -10,7 +10,7 @@ to the object directly on the Entity/TileEntity object we can directly grab.
|
|||
Use that local value instead to reduce lookups in many hot places.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
||||
index 8e6d32bd8..3ac115ff6 100644
|
||||
index d2e87693fa..1997cbdc65 100644
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -721,6 +721,7 @@ public class Chunk implements IChunkAccess {
|
||||
|
@ -22,10 +22,10 @@ index 8e6d32bd8..3ac115ff6 100644
|
|||
this.a(entity, entity.af);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index a961705fb..8dc6ca207 100644
|
||||
index 0f56969270..29678af2de 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -1219,12 +1219,15 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -1220,12 +1220,15 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
int j;
|
||||
// Paper start - Set based removal lists
|
||||
for (Entity e : this.g) {
|
||||
|
@ -42,7 +42,7 @@ index a961705fb..8dc6ca207 100644
|
|||
}
|
||||
|
||||
for (Entity e : this.g) {
|
||||
@@ -1285,12 +1288,17 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -1286,12 +1289,17 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
this.methodProfiler.e();
|
||||
this.methodProfiler.a("remove");
|
||||
if (entity.dead) {
|
||||
|
@ -61,7 +61,7 @@ index a961705fb..8dc6ca207 100644
|
|||
|
||||
guardEntityList = false; // Spigot
|
||||
this.entityList.remove(this.tickPosition--); // CraftBukkit - Use field for loop variable
|
||||
@@ -1335,7 +1343,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -1336,7 +1344,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
BlockPosition blockposition = tileentity.getPosition();
|
||||
|
||||
// Paper start - Skip ticking in chunks scheduled for unload
|
||||
|
@ -70,7 +70,7 @@ index a961705fb..8dc6ca207 100644
|
|||
boolean shouldTick = chunk != null;
|
||||
if(this.paperConfig.skipEntityTickingInChunksScheduledForUnload)
|
||||
shouldTick = shouldTick && !chunk.isUnloading() && chunk.scheduledForUnload == null;
|
||||
@@ -1371,8 +1379,11 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -1372,8 +1380,11 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
tilesThisCycle--;
|
||||
this.tileEntityListTick.remove(tileTickPosition--);
|
||||
//this.tileEntityList.remove(tileentity); // Paper - remove unused list
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
From 389db970dedee85efee0802e63c40bd36ca9d40b Mon Sep 17 00:00:00 2001
|
||||
From 0df97ae8dc5deef81b75512e44b935f2e01404b7 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Sat, 21 Jul 2018 14:27:34 -0400
|
||||
Subject: [PATCH] Duplicate UUID Resolve Option
|
||||
|
@ -33,21 +33,25 @@ But for those who are ok with leaving this inconsistent behavior, you may use WA
|
|||
It is recommended you regenerate the entities, as these were legit entities, and deserve your love.
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 7bd7aa0d9..5d9bed3f1 100644
|
||||
index 7bd7aa0d94..50d3483eb0 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -430,4 +430,40 @@ public class PaperWorldConfig {
|
||||
@@ -430,4 +430,44 @@ public class PaperWorldConfig {
|
||||
log("Bed Search Radius: " + bedSearchRadius);
|
||||
}
|
||||
}
|
||||
+
|
||||
+ public enum DuplicateUUIDMode {
|
||||
+ REGEN, DELETE, NOTHING, WARN
|
||||
+ SAFE_REGEN, REGEN, DELETE, NOTHING, WARN
|
||||
+ }
|
||||
+ public DuplicateUUIDMode duplicateUUIDMode = DuplicateUUIDMode.REGEN;
|
||||
+ public DuplicateUUIDMode duplicateUUIDMode = DuplicateUUIDMode.SAFE_REGEN;
|
||||
+ private void repairDuplicateUUID() {
|
||||
+ String desiredMode = getString("duplicate-uuid-resolver", "regenerate").toLowerCase().trim();
|
||||
+ String desiredMode = getString("duplicate-uuid-resolver", "saferegen").toLowerCase().trim();
|
||||
+ switch (desiredMode.toLowerCase()) {
|
||||
+ case "saferegen":
|
||||
+ case "saferegenerate":
|
||||
+ duplicateUUIDMode = DuplicateUUIDMode.SAFE_REGEN;
|
||||
+ log("Duplicate UUID Resolve: Safer Regenerate New UUID (Delete likely duplicates)");
|
||||
+ case "regen":
|
||||
+ case "regenerate":
|
||||
+ duplicateUUIDMode = DuplicateUUIDMode.REGEN;
|
||||
|
@ -78,7 +82,7 @@ index 7bd7aa0d9..5d9bed3f1 100644
|
|||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
||||
index 1997cbdc6..114a13b62 100644
|
||||
index 1997cbdc65..2838f4e822 100644
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -1,5 +1,10 @@
|
||||
|
@ -108,7 +112,7 @@ index 1997cbdc6..114a13b62 100644
|
|||
}
|
||||
|
||||
int k = MathHelper.floor(entity.locY / 16.0D);
|
||||
@@ -865,6 +872,39 @@ public class Chunk implements IChunkAccess {
|
||||
@@ -865,6 +872,50 @@ public class Chunk implements IChunkAccess {
|
||||
|
||||
for (int j = 0; j < i; ++j) {
|
||||
List entityslice = aentityslice[j]; // Spigot
|
||||
|
@ -123,8 +127,19 @@ index 1997cbdc6..114a13b62 100644
|
|||
+ if (other == null || other.dead || world.getEntityUnloadQueue().contains(other)) {
|
||||
+ other = thisChunk.get(entity.uniqueID);
|
||||
+ }
|
||||
+
|
||||
+ if (mode == DuplicateUUIDMode.SAFE_REGEN && other != null && !other.dead &&
|
||||
+ !world.getEntityUnloadQueue().contains(other)
|
||||
+ && java.util.Objects.equals(other.getSaveID(), entity.getSaveID())
|
||||
+ && entity.getBukkitEntity().getLocation().distance(other.getBukkitEntity().getLocation()) < 24
|
||||
+ ) {
|
||||
+ logger.warn("[DUPE-UUID] Duplicate UUID found used by " + other + ", deleted entity " + entity + " because it was near the duplicate and likely an actual duplicate. See https://github.com/PaperMC/Paper/issues/1223 for discussion on what this is about.");
|
||||
+ entity.die();
|
||||
+ continue;
|
||||
+ }
|
||||
+ if (other != null && !other.dead) {
|
||||
+ switch (mode) {
|
||||
+ case SAFE_REGEN:
|
||||
+ case REGEN: {
|
||||
+ entity.setUUID(UUID.randomUUID());
|
||||
+ logger.warn("[DUPE-UUID] Duplicate UUID found used by " + other + ", regenerated UUID for " + entity + ". See https://github.com/PaperMC/Paper/issues/1223 for discussion on what this is about.");
|
||||
|
@ -149,7 +164,7 @@ index 1997cbdc6..114a13b62 100644
|
|||
this.world.a((Collection) entityslice);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index ff22feee4..9ab635058 100644
|
||||
index ff22feee4d..9ab6350587 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -2724,6 +2724,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
|
@ -161,7 +176,7 @@ index ff22feee4..9ab635058 100644
|
|||
this.uniqueID = uuid;
|
||||
this.au = this.uniqueID.toString();
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 1295078cd..25362ff8e 100644
|
||||
index 29678af2de..0de1847639 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -72,7 +72,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
|
@ -174,7 +189,7 @@ index 1295078cd..25362ff8e 100644
|
|||
public final List<TileEntity> tileEntityListTick = Lists.newArrayList();
|
||||
private final List<TileEntity> c = Lists.newArrayList();
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
index 747d99dbe..7a9f28421 100644
|
||||
index 747d99dbe6..7a9f28421b 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
@@ -40,7 +40,7 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
||||
|
@ -220,5 +235,5 @@ index 747d99dbe..7a9f28421 100644
|
|||
logger.error("Overwrote an existing entity " + old + " with " + entity);
|
||||
if (DEBUG_ENTITIES) {
|
||||
--
|
||||
2.17.1
|
||||
2.18.0
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
From 375fbe4d01f7278fb61f27a3047b7166af568025 Mon Sep 17 00:00:00 2001
|
||||
From ed36f876be22fd9feaf46b86d2f69971d513158d Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Sat, 21 Apr 2018 11:21:48 -0400
|
||||
Subject: [PATCH] Configurable Allowance of Permanent Chunk Loaders
|
||||
|
@ -7,10 +7,10 @@ This disables the behavior that allows players to keep chunks permanently loaded
|
|||
by default and allows server operators to enable it if they wish.
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 5d9bed3f1..9d3e6cc46 100644
|
||||
index 50d3483eb0..5b14973810 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -466,4 +466,9 @@ public class PaperWorldConfig {
|
||||
@@ -470,4 +470,9 @@ public class PaperWorldConfig {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ index 5d9bed3f1..9d3e6cc46 100644
|
|||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
index 497372124..0e0c7b1ab 100644
|
||||
index 4973721243..0e0c7b1abe 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
@@ -111,7 +111,7 @@ public class ChunkProviderServer implements IChunkProvider {
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
From f3e80d88055dc83c911a8e814da000624e91006a Mon Sep 17 00:00:00 2001
|
||||
From 25962f106f179d9d346451ce9c64d7279a590e06 Mon Sep 17 00:00:00 2001
|
||||
From: Hugo Manrique <hugmanrique@gmail.com>
|
||||
Date: Mon, 23 Jul 2018 12:57:39 +0200
|
||||
Subject: [PATCH] Option to prevent armor stands from doing entity lookups
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 9d3e6cc46..5fb330096 100644
|
||||
index 5b14973810..77fda4051e 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -350,6 +350,11 @@ public class PaperWorldConfig {
|
||||
|
@ -21,7 +21,7 @@ index 9d3e6cc46..5fb330096 100644
|
|||
private void maxEntityCollision() {
|
||||
maxCollisionsPerEntity = getInt( "max-entity-collisions", this.spigotConfig.getInt("max-entity-collisions", 8) );
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index b7e92d70f..40943f809 100644
|
||||
index 0de1847639..6f063dc935 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -11,6 +11,7 @@ import java.util.Iterator;
|
||||
|
@ -32,7 +32,7 @@ index b7e92d70f..40943f809 100644
|
|||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.Supplier;
|
||||
@@ -1573,6 +1574,14 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -1574,6 +1575,14 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
From 26d01acf2550d31956c23abe48f53a3a84c18ce3 Mon Sep 17 00:00:00 2001
|
||||
From aebc84bf99be4cd7ae93c2943ddd77d4766a6c7f Mon Sep 17 00:00:00 2001
|
||||
From: Hugo Manrique <hugmanrique@gmail.com>
|
||||
Date: Mon, 23 Jul 2018 14:22:26 +0200
|
||||
Subject: [PATCH] Vanished players don't have rights
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index 9ab635058..4315804dd 100644
|
||||
index 9ab6350587..4315804ddb 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -93,7 +93,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
|
@ -18,7 +18,7 @@ index 9ab635058..4315804dd 100644
|
|||
protected int k;
|
||||
private Entity ax;
|
||||
diff --git a/src/main/java/net/minecraft/server/IBlockData.java b/src/main/java/net/minecraft/server/IBlockData.java
|
||||
index c8f305e6d..b57f6efb3 100644
|
||||
index c8f305e6d6..b57f6efb3a 100644
|
||||
--- a/src/main/java/net/minecraft/server/IBlockData.java
|
||||
+++ b/src/main/java/net/minecraft/server/IBlockData.java
|
||||
@@ -179,6 +179,7 @@ public interface IBlockData extends IBlockDataHolder<IBlockData> {
|
||||
|
@ -30,7 +30,7 @@ index c8f305e6d..b57f6efb3 100644
|
|||
return this.getBlock().f(this, iblockaccess, blockposition);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemBlock.java b/src/main/java/net/minecraft/server/ItemBlock.java
|
||||
index 1cecccef2..afc881d9a 100644
|
||||
index 1cecccef23..afc881d9af 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemBlock.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemBlock.java
|
||||
@@ -70,7 +70,8 @@ public class ItemBlock extends Item {
|
||||
|
@ -44,7 +44,7 @@ index 1cecccef2..afc881d9a 100644
|
|||
BlockCanBuildEvent event = new BlockCanBuildEvent(CraftBlock.at(blockactioncontext.getWorld(), blockactioncontext.getClickPosition()), CraftBlockData.fromData(iblockdata), defaultReturn);
|
||||
blockactioncontext.getWorld().getServer().getPluginManager().callEvent(event);
|
||||
diff --git a/src/main/java/net/minecraft/server/VoxelShape.java b/src/main/java/net/minecraft/server/VoxelShape.java
|
||||
index 53c9f2188..71e408432 100644
|
||||
index 53c9f21887..71e4084320 100644
|
||||
--- a/src/main/java/net/minecraft/server/VoxelShape.java
|
||||
+++ b/src/main/java/net/minecraft/server/VoxelShape.java
|
||||
@@ -22,6 +22,7 @@ public abstract class VoxelShape {
|
||||
|
@ -64,10 +64,10 @@ index 53c9f2188..71e408432 100644
|
|||
return this.a.a();
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 47b9f1c47..52cf52ea7 100644
|
||||
index 6f063dc935..94a4bf3c7a 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -1556,6 +1556,37 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -1557,6 +1557,37 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -106,7 +106,7 @@ index 47b9f1c47..52cf52ea7 100644
|
|||
if (voxelshape.b()) {
|
||||
return true;
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||||
index cf398cd25..140ddae0d 100644
|
||||
index cf398cd250..140ddae0d7 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||||
@@ -804,6 +804,14 @@ public class CraftEventFactory {
|
||||
|
@ -125,5 +125,5 @@ index cf398cd25..140ddae0d 100644
|
|||
return event;
|
||||
}
|
||||
--
|
||||
2.17.1
|
||||
2.18.0
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
From c77d662147a1ed8f12c92092b0fc71754f24430d Mon Sep 17 00:00:00 2001
|
||||
From 7770668b1869f7a081c3e33a64e977d30f4d9237 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Mon, 23 Jul 2018 22:44:23 -0400
|
||||
Subject: [PATCH] Add some Debug to Chunk Entity slices
|
||||
|
@ -9,7 +9,7 @@ This should hopefully avoid duplicate entities ever being created
|
|||
if the entity was to end up in 2 different chunk slices
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
||||
index 92a3c8b5d..6d4b9adff 100644
|
||||
index 2461b5cdd1..eb728f66aa 100644
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -712,8 +712,33 @@ public class Chunk implements IChunkAccess {
|
||||
|
@ -60,7 +60,7 @@ index 92a3c8b5d..6d4b9adff 100644
|
|||
this.markDirty();
|
||||
if (entity instanceof EntityItem) {
|
||||
itemCounts[i]--;
|
||||
@@ -968,6 +999,7 @@ public class Chunk implements IChunkAccess {
|
||||
@@ -979,6 +1010,7 @@ public class Chunk implements IChunkAccess {
|
||||
}
|
||||
// Spigot End
|
||||
entity.setCurrentChunk(null); // Paper
|
||||
|
@ -69,7 +69,7 @@ index 92a3c8b5d..6d4b9adff 100644
|
|||
// Do not pass along players, as doing so can get them stuck outside of time.
|
||||
// (which for example disables inventory icon updates and prevents block breaking)
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index 4315804dd..785c31089 100644
|
||||
index 4315804ddb..785c31089e 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -64,6 +64,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
|
@ -81,5 +81,5 @@ index 4315804dd..785c31089 100644
|
|||
static boolean isLevelAtLeast(NBTTagCompound tag, int level) {
|
||||
return tag.hasKey("Bukkit.updateLevel") && tag.getInt("Bukkit.updateLevel") >= level;
|
||||
--
|
||||
2.17.1
|
||||
2.18.0
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
From 586eacd69777a9e5e020fe3397b05fd6a55bd4bf Mon Sep 17 00:00:00 2001
|
||||
From b8d0747c9e80896a7ecfe94b4cb3d1601229e5f0 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Thu, 26 Jul 2018 00:11:12 -0400
|
||||
Subject: [PATCH] Prevent Saving Bad entities to chunks
|
||||
|
@ -57,10 +57,10 @@ index a97e024ec4..bd52bf6561 100644
|
|||
nbttagcompound.set("Entities", nbttaglist1);
|
||||
NBTTagList nbttaglist2 = new NBTTagList();
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 52cf52ea73..89d0127afd 100644
|
||||
index 94a4bf3c7a..eb56940a18 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -1064,7 +1064,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -1065,7 +1065,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
}
|
||||
|
||||
this.getChunkAt(i, j).a(entity);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
From 47975722cb4b98f424a68262b9275ac8f22b02fc Mon Sep 17 00:00:00 2001
|
||||
From 41011bfa8744eec1ba2c81054d8e20cb2cf73e82 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Sat, 28 Jul 2018 12:09:20 -0400
|
||||
Subject: [PATCH] Always process chunk removal in removeEntity
|
||||
|
@ -8,10 +8,10 @@ which can keep them in the chunk when they shouldnt be if done
|
|||
during entity ticking.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 89d0127afd..f8458a2b49 100644
|
||||
index eb56940a18..7f999cbd5b 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -1134,7 +1134,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -1135,7 +1135,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
this.everyoneSleeping();
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ index 89d0127afd..f8458a2b49 100644
|
|||
int i = entity.ae;
|
||||
int j = entity.ag;
|
||||
|
||||
@@ -1142,6 +1142,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -1143,6 +1143,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
this.getChunkAt(i, j).b(entity);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
From 121f02ef0dd8b89d16f5abef8e779bb658f98c10 Mon Sep 17 00:00:00 2001
|
||||
From e22b56e894628cbeb7e529a3f81e4e56c45329ab Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Sat, 28 Jul 2018 12:18:27 -0400
|
||||
Subject: [PATCH] Ignore Dead Entities in entityList iteration
|
||||
|
@ -11,7 +11,7 @@ This will ensure that dead entities are skipped from iteration since
|
|||
they shouldn't of been in the list in the first place.
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperCommand.java b/src/main/java/com/destroystokyo/paper/PaperCommand.java
|
||||
index 7ff8e70b2..4e854c6db 100644
|
||||
index 7ff8e70b24..4e854c6dbe 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperCommand.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperCommand.java
|
||||
@@ -172,6 +172,7 @@ public class PaperCommand extends Command {
|
||||
|
@ -23,7 +23,7 @@ index 7ff8e70b2..4e854c6db 100644
|
|||
MutablePair<Integer, Map<ChunkCoordIntPair, Integer>> info = list.computeIfAbsent(key, k -> MutablePair.of(0, Maps.newHashMap()));
|
||||
ChunkCoordIntPair chunk = new ChunkCoordIntPair(e.getChunkX(), e.getChunkZ());
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index 785c31089..6b0ca4eb9 100644
|
||||
index 785c31089e..6b0ca4eb98 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -122,6 +122,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
|
||||
|
@ -35,10 +35,10 @@ index 785c31089..6b0ca4eb9 100644
|
|||
public float length;
|
||||
public float J;
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index f8458a2b4..60a2729ad 100644
|
||||
index 7f999cbd5b..397915a553 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -1076,6 +1076,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -1077,6 +1077,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
}
|
||||
|
||||
entity.valid = true; // CraftBukkit
|
||||
|
@ -46,7 +46,7 @@ index f8458a2b4..60a2729ad 100644
|
|||
new com.destroystokyo.paper.event.entity.EntityAddToWorldEvent(entity.getBukkitEntity()).callEvent(); // Paper - fire while valid
|
||||
}
|
||||
|
||||
@@ -1141,6 +1142,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -1142,6 +1143,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
if (entity.inChunk && this.isChunkLoaded(i, j, true)) {
|
||||
this.getChunkAt(i, j).b(entity);
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ index f8458a2b4..60a2729ad 100644
|
|||
|
||||
if (!guardEntityList) { // Spigot - It will get removed after the tick if we are ticking // Paper - always remove from current chunk above
|
||||
// CraftBukkit start - Decrement loop variable field if we've already ticked this entity
|
||||
@@ -2348,6 +2350,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -2349,6 +2351,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
Entity entity = (Entity) iterator.next();
|
||||
|
@ -62,7 +62,7 @@ index f8458a2b4..60a2729ad 100644
|
|||
|
||||
if (oclass.isAssignableFrom(entity.getClass()) && predicate.test((T) entity)) {
|
||||
arraylist.add(entity);
|
||||
@@ -2434,6 +2437,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -2435,6 +2438,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
Entity entity = (Entity) iterator.next();
|
||||
|
@ -71,7 +71,7 @@ index f8458a2b4..60a2729ad 100644
|
|||
if (entity instanceof EntityInsentient) {
|
||||
EntityInsentient entityinsentient = (EntityInsentient) entity;
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index f4dc7e4ac..8923df898 100644
|
||||
index f4dc7e4ac6..8923df898f 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -660,6 +660,7 @@ public class CraftWorld implements World {
|
||||
|
@ -107,5 +107,5 @@ index f4dc7e4ac..8923df898 100644
|
|||
|
||||
if (bukkitEntity == null) {
|
||||
--
|
||||
2.17.1
|
||||
2.18.0
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
From c9e6dd33ed8c202f81aaddcfe777e9e7bfcaba3b Mon Sep 17 00:00:00 2001
|
||||
From c5e45cdd1991ea4afb82da70fc11ca2c59f070b6 Mon Sep 17 00:00:00 2001
|
||||
From: willies952002 <admin@domnian.com>
|
||||
Date: Mon, 30 Jul 2018 02:42:49 -0400
|
||||
Subject: [PATCH] World EntityHuman Lookup Optimizations
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 60a2729ad..c2b9d60f8 100644
|
||||
index 397915a553..29877418c9 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -79,6 +79,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
|
@ -16,7 +16,7 @@ index 60a2729ad..c2b9d60f8 100644
|
|||
public final List<Entity> k = Lists.newArrayList();
|
||||
protected final IntHashMap<Entity> entitiesById = new IntHashMap();
|
||||
private final long G = 16777215L;
|
||||
@@ -1060,6 +1061,8 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -1061,6 +1062,8 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
EntityHuman entityhuman = (EntityHuman) entity;
|
||||
|
||||
this.players.add(entityhuman);
|
||||
|
@ -25,7 +25,7 @@ index 60a2729ad..c2b9d60f8 100644
|
|||
this.everyoneSleeping();
|
||||
}
|
||||
|
||||
@@ -1102,6 +1105,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -1103,6 +1106,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
entity.die();
|
||||
if (entity instanceof EntityHuman) {
|
||||
this.players.remove(entity);
|
||||
|
@ -33,7 +33,7 @@ index 60a2729ad..c2b9d60f8 100644
|
|||
// Spigot start
|
||||
for ( Object o : worldMaps.d )
|
||||
{
|
||||
@@ -1132,6 +1136,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -1133,6 +1137,7 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
entity.die();
|
||||
if (entity instanceof EntityHuman) {
|
||||
this.players.remove(entity);
|
||||
|
@ -41,7 +41,7 @@ index 60a2729ad..c2b9d60f8 100644
|
|||
this.everyoneSleeping();
|
||||
}
|
||||
|
||||
@@ -2660,6 +2665,8 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -2661,6 +2666,8 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
|
||||
@Nullable
|
||||
public EntityHuman a(String s) {
|
||||
|
@ -50,7 +50,7 @@ index 60a2729ad..c2b9d60f8 100644
|
|||
for (int i = 0; i < this.players.size(); ++i) {
|
||||
EntityHuman entityhuman = (EntityHuman) this.players.get(i);
|
||||
|
||||
@@ -2669,10 +2676,15 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -2670,10 +2677,15 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -66,7 +66,7 @@ index 60a2729ad..c2b9d60f8 100644
|
|||
for (int i = 0; i < this.players.size(); ++i) {
|
||||
EntityHuman entityhuman = (EntityHuman) this.players.get(i);
|
||||
|
||||
@@ -2682,6 +2694,10 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
@@ -2683,6 +2695,10 @@ public abstract class World implements GeneratorAccess, IIBlockAccess, AutoClose
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -78,5 +78,5 @@ index 60a2729ad..c2b9d60f8 100644
|
|||
|
||||
public void checkSession() throws ExceptionWorldConflict {
|
||||
--
|
||||
2.17.1
|
||||
2.18.0
|
||||
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
From 59d357424f02eb0ccb9a600333fc477ee52fbe1f Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Fri, 3 Aug 2018 00:04:54 -0400
|
||||
Subject: [PATCH] MC-135506: Experience should save as Integers
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityExperienceOrb.java b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
|
||||
index b8bfc75771..1cffc6f9a9 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityExperienceOrb.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
|
||||
@@ -205,14 +205,14 @@ public class EntityExperienceOrb extends Entity {
|
||||
public void b(NBTTagCompound nbttagcompound) {
|
||||
nbttagcompound.setShort("Health", (short) this.d);
|
||||
nbttagcompound.setShort("Age", (short) this.b);
|
||||
- nbttagcompound.setShort("Value", (short) this.value);
|
||||
+ nbttagcompound.setInt("Value", (short) this.value); // Paper - save as Integer
|
||||
savePaperNBT(nbttagcompound); // Paper
|
||||
}
|
||||
|
||||
public void a(NBTTagCompound nbttagcompound) {
|
||||
this.d = nbttagcompound.getShort("Health");
|
||||
this.b = nbttagcompound.getShort("Age");
|
||||
- this.value = nbttagcompound.getShort("Value");
|
||||
+ this.value = nbttagcompound.getInt("Value"); // Paper - load as Integer
|
||||
loadPaperNBT(nbttagcompound); // Paper
|
||||
}
|
||||
|
||||
--
|
||||
2.18.0
|
||||
|
Loading…
Reference in a new issue