3
0
Mirror von https://github.com/PaperMC/Paper.git synchronisiert 2024-12-15 19:10:09 +01:00

More patches for 1.14

Chunk related stuff will need to be revisted later
Dieser Commit ist enthalten in:
Zach Brown 2019-04-27 19:23:53 -04:00
Ursprung b4b181a1fb
Commit 799f6af357
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: CC9DA35FC5450B76
42 geänderte Dateien mit 264 neuen und 534 gelöschten Zeilen

Datei anzeigen

@ -1,18 +1,18 @@
From ac742bd2ace2f239eefa33afb4f7cced59f3680e Mon Sep 17 00:00:00 2001
From d4cdb325da7cbe6154860e78f0bbec61ecea6c14 Mon Sep 17 00:00:00 2001
From: Michael Himing <mhiming@gmail.com>
Date: Sun, 8 Jan 2017 18:50:35 +1100
Subject: [PATCH] Fix block break desync
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index 6874563e4..37caa2a70 100644
index 6874563e4..868d0e98b 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -1176,6 +1176,8 @@ public class PlayerConnection implements PacketListenerPlayIn {
double d3 = d0 * d0 + d1 * d1 + d2 * d2;
if (d3 > 36.0D) {
+ if (worldserver.isChunkLoaded(blockposition.getX() >> 4, blockposition.getZ() >> 4, true)) // Paper - Fix block break desync - Don't send for unloaded chunks
+ if (worldserver.isChunkLoaded(blockposition.getX() >> 4, blockposition.getZ() >> 4)) // Paper - Fix block break desync - Don't send for unloaded chunks
+ this.sendPacket(new PacketPlayOutBlockChange(worldserver, blockposition)); // Paper - Fix block break desync
return;
} else if (blockposition.getY() >= this.minecraftServer.getMaxBuildHeight()) {

Datei anzeigen

@ -1,17 +1,17 @@
From 8b06af0c55201686c142c01024a4fa994b130307 Mon Sep 17 00:00:00 2001
From 7b2008881f05671eedc216afd33c945de5eb313b Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sat, 17 Jun 2017 15:18:30 -0400
Subject: [PATCH] Shoulder Entities Release API
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
index 23e7cdfe88..298012f37c 100644
index 5df763d92..0f8100a05 100644
--- a/src/main/java/net/minecraft/server/EntityHuman.java
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
@@ -1831,21 +1831,48 @@ public abstract class EntityHuman extends EntityLiving {
}
@@ -1781,20 +1781,45 @@ public abstract class EntityHuman extends EntityLiving {
// CraftBukkit end
}
+ // Paper start
+ public Entity releaseLeftShoulderEntity() {
+ Entity entity = this.spawnEntityFromShoulder0(this.getShoulderEntityLeft());
@ -20,9 +20,7 @@ index 23e7cdfe88..298012f37c 100644
+ }
+ return entity;
+ }
- private boolean spawnEntityFromShoulder(@Nullable NBTTagCompound nbttagcompound) { // CraftBukkit void->boolean
- if (!this.world.isClientSide && !nbttagcompound.isEmpty()) {
+
+ public Entity releaseRightShoulderEntity() {
+ Entity entity = this.spawnEntityFromShoulder0(this.getShoulderEntityRight());
+ if (entity != null) {
@ -31,41 +29,40 @@ index 23e7cdfe88..298012f37c 100644
+ return entity;
+ }
+
+ // Paper - incase any plugins used NMS to call this... old method signature to avoid other diff
+ private boolean spawnEntityFromShoulder(@Nullable NBTTagCompound nbttagcompound) {
+ // Paper - maintain old signature
private boolean spawnEntityFromShoulder(@Nullable NBTTagCompound nbttagcompound) { // CraftBukkit void->boolean
- if (!this.world.isClientSide && !nbttagcompound.isEmpty()) {
+ return spawnEntityFromShoulder0(nbttagcompound) != null;
+ }
+ // Paper - Moved to new method that now returns entity, and properly null checks
+ private Entity spawnEntityFromShoulder0(@Nullable NBTTagCompound nbttagcompound) { // CraftBukkit void->boolean - Paper - return Entity
+ if (!this.world.isClientSide && nbttagcompound != null && !nbttagcompound.isEmpty()) { // Paper - null check
Entity entity = EntityTypes.a(nbttagcompound, this.world);
+ if (entity == null) { // Paper - null check
+ return null;
+ }
+
+ // Paper - return entity
+ private Entity spawnEntityFromShoulder0(@Nullable NBTTagCompound nbttagcompound) {
+ if (!this.world.isClientSide && nbttagcompound != null && !nbttagcompound.isEmpty()) {
return EntityTypes.a(nbttagcompound, this.world).map((entity) -> { // CraftBukkit
if (entity instanceof EntityTameableAnimal) {
((EntityTameableAnimal) entity).setOwnerUUID(this.uniqueID);
}
if (entity instanceof EntityTameableAnimal) {
((EntityTameableAnimal) entity).setOwnerUUID(this.uniqueID);
}
entity.setPosition(this.locX, this.locY + 0.699999988079071D, this.locZ);
- return this.world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SHOULDER_ENTITY); // CraftBukkit
+ if (this.world.addEntity(entity, CreatureSpawnEvent.SpawnReason.SHOULDER_ENTITY)) { // CraftBukkit
+ return entity;
+ }
entity.setPosition(this.locX, this.locY + 0.699999988079071D, this.locZ);
- return ((WorldServer) this.world).addEntitySerialized(entity, CreatureSpawnEvent.SpawnReason.SHOULDER_ENTITY); // CraftBukkit
- }).orElse(true); // CraftBukkit
+ boolean addedToWorld = ((WorldServer) this.world).addEntitySerialized(entity, CreatureSpawnEvent.SpawnReason.SHOULDER_ENTITY); // CraftBukkit
+ return addedToWorld ? entity : null;
+ }).orElse(null); // CraftBukkit // Paper - false -> null
}
- return true; // CraftBukkit
+ return null;
+ return null; // Paper - return null
}
+ // Paper end
public abstract boolean isSpectator();
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
index 79d1255676..d5dbc4ca81 100644
index a7b495c7a..c2b6e792a 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
@@ -556,6 +556,32 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
@@ -610,6 +610,32 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
getHandle().getCooldownTracker().a(CraftMagicNumbers.getItem(material), ticks);
}

Datei anzeigen

@ -1,4 +1,4 @@
From 62fe5662571b58921aed09ccdc85810a5e2061b6 Mon Sep 17 00:00:00 2001
From bc9cdd4a213d9542dd238b6a697aa19183b607b5 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sat, 17 Jun 2017 17:00:32 -0400
Subject: [PATCH] Profile Lookup Events
@ -7,7 +7,7 @@ Adds a Pre Lookup Event and a Post Lookup Event so that plugins may prefill in p
profiles that had to be looked up.
diff --git a/src/main/java/com/destroystokyo/paper/profile/PaperGameProfileRepository.java b/src/main/java/com/destroystokyo/paper/profile/PaperGameProfileRepository.java
index 3bcdb8f93f..bb9894318e 100644
index 3bcdb8f93..bb9894318 100644
--- a/src/main/java/com/destroystokyo/paper/profile/PaperGameProfileRepository.java
+++ b/src/main/java/com/destroystokyo/paper/profile/PaperGameProfileRepository.java
@@ -1,17 +1,68 @@

Datei anzeigen

@ -1,14 +1,14 @@
From ed322683af055029de337dbc60c07d8cf30e86b1 Mon Sep 17 00:00:00 2001
From 1c3408f1b9315a7932749a79efb2890814994c4e Mon Sep 17 00:00:00 2001
From: Zach Brown <zach.brown@destroystokyo.com>
Date: Sun, 2 Jul 2017 21:35:56 -0500
Subject: [PATCH] Block player logins during server shutdown
diff --git a/src/main/java/net/minecraft/server/LoginListener.java b/src/main/java/net/minecraft/server/LoginListener.java
index e901c066ac..852dc7162a 100644
index 22d5c7d20..91b6f1de8 100644
--- a/src/main/java/net/minecraft/server/LoginListener.java
+++ b/src/main/java/net/minecraft/server/LoginListener.java
@@ -49,6 +49,12 @@ public class LoginListener implements PacketLoginInListener, ITickable {
@@ -49,6 +49,12 @@ public class LoginListener implements PacketLoginInListener {
}
public void tick() {
@ -19,7 +19,7 @@ index e901c066ac..852dc7162a 100644
+ }
+ // Paper end
if (this.g == LoginListener.EnumProtocolState.READY_TO_ACCEPT) {
this.b();
this.c();
} else if (this.g == LoginListener.EnumProtocolState.DELAY_ACCEPT) {
--
2.21.0

Datei anzeigen

@ -1,14 +1,14 @@
From 8ca9f8cb42942c15263e253d5c42e16b379285f3 Mon Sep 17 00:00:00 2001
From f58c0fe41a80304f921ac5c534d2227aba155c0b Mon Sep 17 00:00:00 2001
From: BillyGalbreath <Blake.Galbreath@GMail.com>
Date: Sun, 18 Jun 2017 18:17:05 -0500
Subject: [PATCH] Entity#fromMobSpawner()
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
index 291a304172..92a15ba947 100644
index ee7fe30c7..c28b498a2 100644
--- a/src/main/java/net/minecraft/server/Entity.java
+++ b/src/main/java/net/minecraft/server/Entity.java
@@ -182,6 +182,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -181,6 +181,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
public final boolean defaultActivationState;
public long activatedTick = Integer.MIN_VALUE;
public boolean fromMobSpawner;
@ -16,7 +16,7 @@ index 291a304172..92a15ba947 100644
protected int numCollisions = 0; // Paper
public void inactiveTick() { }
// Spigot end
@@ -1667,6 +1668,10 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -1573,6 +1574,10 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
if (origin != null) {
nbttagcompound.set("Paper.Origin", this.createList(origin.getX(), origin.getY(), origin.getZ()));
}
@ -27,7 +27,7 @@ index 291a304172..92a15ba947 100644
// Paper end
return nbttagcompound;
} catch (Throwable throwable) {
@@ -1814,6 +1819,8 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
@@ -1700,6 +1705,8 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke
if (!originTag.isEmpty()) {
origin = new Location(world.getWorld(), originTag.getDoubleAt(0), originTag.getDoubleAt(1), originTag.getDoubleAt(2));
}
@ -37,22 +37,22 @@ index 291a304172..92a15ba947 100644
} catch (Throwable throwable) {
diff --git a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
index ce43b4bc52..98065d6b02 100644
index 6499d27e6..2b2af2daa 100644
--- a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
+++ b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
@@ -115,6 +115,7 @@ public abstract class MobSpawnerAbstract {
if (this.spawnData.b().d() == 1 && this.spawnData.b().hasKeyOfType("id", 8) && entity instanceof EntityInsentient) {
((EntityInsentient) entity).prepare(world.getDamageScaler(new BlockPosition(entity)), (GroupDataEntity) null, (NBTTagCompound) null);
@@ -133,6 +133,7 @@ public abstract class MobSpawnerAbstract {
((EntityInsentient) entity).prepare(world, world.getDamageScaler(new BlockPosition(entity)), EnumMobSpawn.SPAWNER, (GroupDataEntity) null, (NBTTagCompound) null);
}
}
+ entity.spawnedViaMobSpawner = true; // Paper
// Spigot Start
if ( entity.world.spigotConfig.nerfSpawnerMobs )
{
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
index 466750f779..84a58c7dcd 100644
index 5d9b4a58e..e0ae72bbc 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
@@ -855,5 +855,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
@@ -983,5 +983,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
Location origin = getHandle().origin;
return origin == null ? null : origin.clone();
}

Datei anzeigen

@ -1,4 +1,4 @@
From 7b02067570d465d1f87f32920b8f36099008c710 Mon Sep 17 00:00:00 2001
From 415781dddbe5dae2d4483881168112c89c3fa53e Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sat, 10 Dec 2016 16:24:06 -0500
Subject: [PATCH] Improve the Saddle API for Horses
@ -7,7 +7,7 @@ Not all horses with Saddles have armor. This lets us break up the horses with sa
and access their saddle state separately from an interface shared with Armor.
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java
index 14d0416802..e56bef3340 100644
index 14d041680..e56bef334 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java
@@ -6,6 +6,7 @@ import net.minecraft.server.EntityHorseAbstract;
@ -27,7 +27,7 @@ index 14d0416802..e56bef3340 100644
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryHorse.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryHorse.java
index 173818e682..2f68524049 100644
index 173818e68..2f6852404 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryHorse.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryHorse.java
@@ -4,7 +4,7 @@ import net.minecraft.server.IInventory;
@ -41,7 +41,7 @@ index 173818e682..2f68524049 100644
super(inventory);
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftSaddledInventory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftSaddledInventory.java
new file mode 100644
index 0000000000..99cfbaf90b
index 000000000..99cfbaf90
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftSaddledInventory.java
@@ -0,0 +1,15 @@

Datei anzeigen

@ -1,4 +1,4 @@
From 70223002377dc229edfeaf45d328d3f17ee4fbf1 Mon Sep 17 00:00:00 2001
From f11ee1d20bd3ca71dee58b437a3dc79141d421a1 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Wed, 4 May 2016 22:43:12 -0400
Subject: [PATCH] Implement ensureServerConversions API
@ -7,10 +7,10 @@ This will take a Bukkit ItemStack and run it through any conversions a server pr
to ensure it meets latest minecraft expectations.
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
index 52041caedc..f5fa58d6cc 100644
index f529367c8..2a51fa41a 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
@@ -294,4 +294,10 @@ public final class CraftItemFactory implements ItemFactory {
@@ -312,4 +312,10 @@ public final class CraftItemFactory implements ItemFactory {
public Material updateMaterial(ItemMeta meta, Material material) throws IllegalArgumentException {
return ((CraftMetaItem) meta).updateMaterial(material);
}

Datei anzeigen

@ -1,4 +1,4 @@
From d7ec5666d9d230e0ce0dec15ff7e7d659c75f5dc Mon Sep 17 00:00:00 2001
From c4add1f5b9e89c011b0efe544cccca56c0ff7bc6 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Wed, 4 May 2016 23:59:38 -0400
Subject: [PATCH] Implement getI18NDisplayName
@ -8,7 +8,7 @@ Currently the server only supports the English language. To override this,
You must replace the language file embedded in the server jar.
diff --git a/src/main/java/net/minecraft/server/LocaleLanguage.java b/src/main/java/net/minecraft/server/LocaleLanguage.java
index 747b8ad4de..4c5556a096 100644
index 8fe8e28aa..295c01b28 100644
--- a/src/main/java/net/minecraft/server/LocaleLanguage.java
+++ b/src/main/java/net/minecraft/server/LocaleLanguage.java
@@ -44,10 +44,12 @@ public class LocaleLanguage {
@ -25,10 +25,10 @@ index 747b8ad4de..4c5556a096 100644
return this.c(s);
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
index f5fa58d6cc..3a6e6f687d 100644
index 2a51fa41a..dd02fb95a 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java
@@ -299,5 +299,18 @@ public final class CraftItemFactory implements ItemFactory {
@@ -317,5 +317,18 @@ public final class CraftItemFactory implements ItemFactory {
public ItemStack ensureServerConversions(ItemStack item) {
return CraftItemStack.asCraftMirror(CraftItemStack.asNMSCopy(item));
}

Datei anzeigen

@ -1,14 +1,14 @@
From 6b5a66b6dc3f5c6a722153e708ef3884d5e8066c Mon Sep 17 00:00:00 2001
From b35a0e4863b159d80828469756202fc68e18e00f Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Mon, 3 Jul 2017 18:11:10 -0500
Subject: [PATCH] ProfileWhitelistVerifyEvent
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
index 8bb3fef21e..96eff10ffa 100644
index 52b2f4874..b855e7968 100644
--- a/src/main/java/net/minecraft/server/PlayerList.java
+++ b/src/main/java/net/minecraft/server/PlayerList.java
@@ -543,9 +543,9 @@ public abstract class PlayerList {
@@ -519,9 +519,9 @@ public abstract class PlayerList {
// return chatmessage;
if (!gameprofilebanentry.hasExpired()) event.disallow(PlayerLoginEvent.Result.KICK_BANNED, CraftChatMessage.fromComponent(chatmessage)); // Spigot
@ -20,7 +20,7 @@ index 8bb3fef21e..96eff10ffa 100644
} else if (getIPBans().isBanned(socketaddress) && !getIPBans().get(socketaddress).hasExpired()) {
IpBanEntry ipbanentry = this.l.get(socketaddress);
@@ -1171,9 +1171,25 @@ public abstract class PlayerList {
@@ -889,9 +889,25 @@ public abstract class PlayerList {
this.server.getCommandDispatcher().a(entityplayer);
}
@ -28,7 +28,7 @@ index 8bb3fef21e..96eff10ffa 100644
public boolean isWhitelisted(GameProfile gameprofile) {
- return !this.hasWhitelist || this.operators.d(gameprofile) || this.whitelist.d(gameprofile);
+ return isWhitelisted(gameprofile, null);
+ }
}
+ public boolean isWhitelisted(GameProfile gameprofile, org.bukkit.event.player.PlayerLoginEvent loginEvent) {
+ boolean isOp = this.operators.d(gameprofile);
+ boolean isWhitelisted = !this.hasWhitelist || isOp || this.whitelist.d(gameprofile);
@ -42,11 +42,11 @@ index 8bb3fef21e..96eff10ffa 100644
+ return false;
+ }
+ return true;
}
+ }
+ // Paper end
public boolean isOp(GameProfile gameprofile) {
return this.operators.d(gameprofile) || this.server.H() && this.server.getWorldServer(DimensionManager.OVERWORLD).getWorldData().u() && this.server.G().equalsIgnoreCase(gameprofile.getName()) || this.u;
return this.operators.d(gameprofile) || this.server.b(gameprofile) && this.server.getWorldServer(DimensionManager.OVERWORLD).getWorldData().u() || this.u;
--
2.21.0

Datei anzeigen

@ -1,4 +1,4 @@
From 55397606a09c8ea5deecea742516e8badfdad445 Mon Sep 17 00:00:00 2001
From 4b74b8f599e4aab980e2e02073bdb3653cfb5ead Mon Sep 17 00:00:00 2001
From: DemonWav <demonwav@gmail.com>
Date: Sun, 6 Aug 2017 17:17:53 -0500
Subject: [PATCH] Fix this stupid bullshit
@ -9,12 +9,12 @@ modified in order to prevent merge conflicts when Spigot changes/disables the wa
and to provide some level of hint without being disruptive.
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index 4102e19700..b145b55bc7 100644
index e3d163ac4..a991cda1f 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -217,10 +217,12 @@ public class Main {
@@ -216,10 +216,12 @@ public class Main {
Calendar deadline = Calendar.getInstance();
deadline.add(Calendar.DAY_OF_YEAR, -21);
deadline.add(Calendar.DAY_OF_YEAR, -3);
if (buildDate.before(deadline.getTime())) {
- System.err.println("*** Error, this build is outdated ***");
+ // Paper start - This is some stupid bullshit

Datei anzeigen

@ -0,0 +1,22 @@
From 3fa0d4dcc51608fefd241573f1184466504f9194 Mon Sep 17 00:00:00 2001
From: BillyGalbreath <Blake.Galbreath@GMail.com>
Date: Mon, 31 Jul 2017 01:54:40 -0500
Subject: [PATCH] Ocelot despawns should honor nametags and leash
diff --git a/src/main/java/net/minecraft/server/EntityOcelot.java b/src/main/java/net/minecraft/server/EntityOcelot.java
index af1ff9518..1713bead2 100644
--- a/src/main/java/net/minecraft/server/EntityOcelot.java
+++ b/src/main/java/net/minecraft/server/EntityOcelot.java
@@ -81,7 +81,7 @@ public class EntityOcelot extends EntityAnimal {
@Override
public boolean isTypeNotPersistent(double d0) {
- return !this.isTrusting() /*&& this.ticksLived > 2400*/; // CraftBukkit
+ return !this.isTrusting() && !this.hasCustomName() && !this.isLeashed() /*&& this.ticksLived > 2400*/; // CraftBukkit // Paper - honor name and leash
}
@Override
--
2.21.0

Datei anzeigen

@ -1,14 +1,14 @@
From 559b3a1c59758c2ab0ff16debdd5529623c02956 Mon Sep 17 00:00:00 2001
From 3c650d7970db805f3d67068ad9d1c189c9d6ec42 Mon Sep 17 00:00:00 2001
From: BillyGalbreath <Blake.Galbreath@GMail.com>
Date: Mon, 31 Jul 2017 01:45:19 -0500
Subject: [PATCH] Reset spawner timer when spawner event is cancelled
diff --git a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
index 98065d6b02..027ba71918 100644
index 2b2af2daa..d8ae336e9 100644
--- a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
+++ b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
@@ -121,6 +121,9 @@ public abstract class MobSpawnerAbstract {
@@ -139,6 +139,9 @@ public abstract class MobSpawnerAbstract {
{
entity.fromMobSpawner = true;
}
@ -18,8 +18,8 @@ index 98065d6b02..027ba71918 100644
if (org.bukkit.craftbukkit.event.CraftEventFactory.callSpawnerSpawnEvent(entity, blockposition).isCancelled()) {
Entity vehicle = entity.getVehicle();
if (vehicle != null) {
@@ -138,7 +141,7 @@ public abstract class MobSpawnerAbstract {
entityinsentient.doSpawnEffect();
@@ -156,7 +159,7 @@ public abstract class MobSpawnerAbstract {
((EntityInsentient) entity).doSpawnEffect();
}
- flag = true;

Datei anzeigen

@ -1,15 +1,15 @@
From 15cd669dcb33567293742d5942ca735b544822d1 Mon Sep 17 00:00:00 2001
From b34797104929ce0cfd6143ec47b33616aeafb133 Mon Sep 17 00:00:00 2001
From: mezz <tehgeek@gmail.com>
Date: Wed, 9 Aug 2017 17:51:22 -0500
Subject: [PATCH] Fix MC-117075: TE Unload Lag Spike
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 5e1ab431dc..cdb430ef4f 100644
index 1286703bf..c9fc001f2 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -1274,7 +1274,11 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
this.methodProfiler.exitEnter("blockEntities");
@@ -727,7 +727,11 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose
gameprofilerfiller.enter("blockEntities");
timings.tileEntityTick.startTiming(); // Spigot
if (!this.tileEntityListUnload.isEmpty()) {
- this.tileEntityListTick.removeAll(this.tileEntityListUnload);

Datei anzeigen

@ -1,4 +1,4 @@
From fee8c1007a09297383dd293f9003f41e347c37c7 Mon Sep 17 00:00:00 2001
From a862ab264571177d979c514e21eafdb472f1b94b Mon Sep 17 00:00:00 2001
From: kashike <kashike@vq.lc>
Date: Thu, 17 Aug 2017 16:08:20 -0700
Subject: [PATCH] Allow specifying a custom "authentication servers down" kick
@ -6,7 +6,7 @@ Subject: [PATCH] Allow specifying a custom "authentication servers down" kick
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
index d10d60921b..2b5dde6d99 100644
index 1adbb2480..a9cf1b8e8 100644
--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
@@ -1,5 +1,6 @@
@ -16,7 +16,7 @@ index d10d60921b..2b5dde6d99 100644
import com.google.common.base.Throwables;
import java.io.File;
@@ -285,4 +286,9 @@ public class PaperConfig {
@@ -261,4 +262,9 @@ public class PaperConfig {
private static void suggestPlayersWhenNull() {
suggestPlayersWhenNullTabCompletions = getBoolean("settings.suggest-player-names-when-null-tab-completions", suggestPlayersWhenNullTabCompletions);
}
@ -27,10 +27,10 @@ index d10d60921b..2b5dde6d99 100644
+ }
}
diff --git a/src/main/java/net/minecraft/server/LoginListener.java b/src/main/java/net/minecraft/server/LoginListener.java
index 852dc7162a..74bc08f85c 100644
index 91b6f1de8..398f67f4b 100644
--- a/src/main/java/net/minecraft/server/LoginListener.java
+++ b/src/main/java/net/minecraft/server/LoginListener.java
@@ -239,6 +239,10 @@ public class LoginListener implements PacketLoginInListener, ITickable {
@@ -242,6 +242,10 @@ public class LoginListener implements PacketLoginInListener {
LoginListener.this.i = LoginListener.this.a(gameprofile);
LoginListener.this.g = LoginListener.EnumProtocolState.READY_TO_ACCEPT;
} else {
@ -39,7 +39,7 @@ index 852dc7162a..74bc08f85c 100644
+ LoginListener.this.disconnect(new ChatComponentText(com.destroystokyo.paper.PaperConfig.authenticationServersDownKickMessage));
+ } else // Paper end
LoginListener.this.disconnect(new ChatMessage("multiplayer.disconnect.authservers_down", new Object[0]));
LoginListener.c.error("Couldn't verify username because servers are unavailable");
LoginListener.LOGGER.error("Couldn't verify username because servers are unavailable");
}
--
2.21.0

Datei anzeigen

@ -1,14 +1,14 @@
From 7329a5ba4aec7f44664e5d1580eb7982602dc0ff Mon Sep 17 00:00:00 2001
From de17608d7017d74e39664f79b7243c5840d6b415 Mon Sep 17 00:00:00 2001
From: BillyGalbreath <Blake.Galbreath@GMail.com>
Date: Mon, 31 Jul 2017 01:49:48 -0500
Subject: [PATCH] LivingEntity#setKiller
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
index 716eda9902..2f96842bb9 100644
index 424b2b708..f95347df0 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
@@ -278,6 +278,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
@@ -277,6 +277,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
return getHandle().killer == null ? null : (Player) getHandle().killer.getBukkitEntity();
}

Datei anzeigen

@ -1,4 +1,4 @@
From 24b3889d4c1ca6119886c22819850d47bf9ce2bd Mon Sep 17 00:00:00 2001
From 3e140363bc07b0523ddad00c7c75be134d659023 Mon Sep 17 00:00:00 2001
From: Minecrell <minecrell@minecrell.net>
Date: Mon, 18 Sep 2017 12:00:03 +0200
Subject: [PATCH] Use Log4j IOStreams to redirect System.out/err to logger
@ -12,7 +12,7 @@ results in a separate line, even though it should not result in
a line break. Log4j's implementation handles it correctly.
diff --git a/pom.xml b/pom.xml
index 2b73ec28a1..0a6e81b680 100644
index 108c8c05e..183c3c4c8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,6 +63,11 @@
@ -28,10 +28,10 @@ index 2b73ec28a1..0a6e81b680 100644
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java
index 5bb1ea880a..0d2c7a6dc4 100644
index 3d0cb874d..d9f1c2205 100644
--- a/src/main/java/net/minecraft/server/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/DedicatedServer.java
@@ -131,8 +131,10 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
@@ -135,8 +135,10 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
*/
// Paper end

Datei anzeigen

@ -1,4 +1,4 @@
From fbb71c462a42540cf6eadfe9769bf6b92cba0c94 Mon Sep 17 00:00:00 2001
From 87bb6601d0339ee3dab7789689dd29d3351710d0 Mon Sep 17 00:00:00 2001
From: Minecrell <minecrell@minecrell.net>
Date: Thu, 21 Sep 2017 16:14:55 +0200
Subject: [PATCH] Handle plugin prefixes using Log4J configuration
@ -15,7 +15,7 @@ This may cause additional prefixes to be disabled for plugins bypassing
the plugin logger.
diff --git a/pom.xml b/pom.xml
index 0a6e81b680..82b9cae166 100644
index 183c3c4c8..c18a7f5ca 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,7 +61,7 @@
@ -28,7 +28,7 @@ index 0a6e81b680..82b9cae166 100644
<dependency>
<groupId>org.apache.logging.log4j</groupId>
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
index fe3bad5830..56f135f244 100644
index b171bdfaa..0d827815c 100644
--- a/src/main/java/org/spigotmc/SpigotConfig.java
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
@@ -291,7 +291,7 @@ public class SpigotConfig
@ -41,7 +41,7 @@ index fe3bad5830..56f135f244 100644
public static int playerShuffle;
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
index 08b6bb7f97..9f8334376f 100644
index 08b6bb7f9..9f8334376 100644
--- a/src/main/resources/log4j2.xml
+++ b/src/main/resources/log4j2.xml
@@ -2,10 +2,22 @@

Datei anzeigen

@ -1,11 +1,11 @@
From e12eabca265e425f44c2bcae003dc7d3f7716da5 Mon Sep 17 00:00:00 2001
From e010dba56ef78266584c5dd25d612b51c1ed7ab1 Mon Sep 17 00:00:00 2001
From: Minecrell <minecrell@minecrell.net>
Date: Thu, 21 Sep 2017 16:33:35 +0200
Subject: [PATCH] Include Log4J2 SLF4J implementation
diff --git a/pom.xml b/pom.xml
index 82b9cae166..3ad5af3463 100644
index c18a7f5ca..16799b4cd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,6 +63,12 @@

Datei anzeigen

@ -1,4 +1,4 @@
From bf7855cdd2469f6ee51b72d01e98685fe6951675 Mon Sep 17 00:00:00 2001
From 0fecfb589e5732e28c516ad6d7f8f25534eaedb7 Mon Sep 17 00:00:00 2001
From: Minecrell <minecrell@minecrell.net>
Date: Sat, 23 Sep 2017 21:07:20 +0200
Subject: [PATCH] Disable logger prefix for various plugins bypassing the
@ -11,7 +11,7 @@ log. Disable the logger prefix for these plugins so the messages
show up correctly.
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
index 9f8334376f..6711e6dff9 100644
index 9f8334376..6711e6dff 100644
--- a/src/main/resources/log4j2.xml
+++ b/src/main/resources/log4j2.xml
@@ -5,7 +5,8 @@

Datei anzeigen

@ -1,26 +1,14 @@
From 089a524589f6065314534ab6607df461a97426e0 Mon Sep 17 00:00:00 2001
From 720eb49fed3242715f0bceec19e5ef72af4d8e74 Mon Sep 17 00:00:00 2001
From: Zach Brown <zach.brown@destroystokyo.com>
Date: Thu, 28 Sep 2017 17:21:44 -0400
Subject: [PATCH] Add PlayerJumpEvent
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
index 298012f37c..bfae875ebb 100644
--- a/src/main/java/net/minecraft/server/EntityHuman.java
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
@@ -1483,6 +1483,7 @@ public abstract class EntityHuman extends EntityLiving {
return 0;
}
+ public void jump() { this.cH(); } // Paper - OBFHELPER
public void cH() {
super.cH();
this.a(StatisticList.JUMP);
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index ac64fcfb31..5fa3268b59 100644
index c07bb9b74..82dad99ef 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -58,6 +58,8 @@ import org.bukkit.inventory.CraftingInventory;
@@ -60,6 +60,8 @@ import org.bukkit.inventory.CraftingInventory;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.InventoryView;
import org.bukkit.util.NumberConversions;
@ -29,11 +17,11 @@ index ac64fcfb31..5fa3268b59 100644
import co.aikar.timings.MinecraftTimings; // Paper
// CraftBukkit end
@@ -872,7 +874,34 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
@@ -913,7 +915,34 @@ public class PlayerConnection implements PacketListenerPlayIn {
d8 = d5 - this.p;
d9 = d6 - this.q;
if (this.player.onGround && !packetplayinflying.b() && d8 > 0.0D) {
- this.player.cH();
- this.player.jump();
+ // Paper start - Add player jump event
+ Player player = this.getPlayer();
+ Location from = new Location(player.getWorld(), lastPosX, lastPosY, lastPosZ, lastYaw, lastPitch); // Get the Players previous Event location.
@ -64,7 +52,7 @@ index ac64fcfb31..5fa3268b59 100644
+ // Paper end
}
this.player.move(EnumMoveType.PLAYER, d7, d8, d9);
this.player.move(EnumMoveType.PLAYER, new Vec3D(d7, d8, d9));
--
2.21.0

Datei anzeigen

@ -1,4 +1,4 @@
From 5b9b0efc388810e9be0e7b7ccc532a7e8cbcc10b Mon Sep 17 00:00:00 2001
From 662f1be875e018ce68fcc261c909bf9a339cf19d Mon Sep 17 00:00:00 2001
From: Shane Freeder <theboyetronic@gmail.com>
Date: Thu, 5 Oct 2017 01:54:07 +0100
Subject: [PATCH] handle PacketPlayInKeepAlive async
@ -15,12 +15,12 @@ also adding some additional logging in order to help work out what is causing
random disconnections for clients.
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index 5fa3268b59..0d87ddc0f5 100644
index 82dad99ef..62c0137a7 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -2451,14 +2451,18 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
}
@@ -2504,14 +2504,18 @@ public class PlayerConnection implements PacketListenerPlayIn {
@Override
public void a(PacketPlayInKeepAlive packetplayinkeepalive) {
- PlayerConnectionUtils.ensureMainThread(packetplayinkeepalive, this, this.player.getWorldServer()); // CraftBukkit
+ //PlayerConnectionUtils.ensureMainThread(packetplayinkeepalive, this, this.player.getWorldServer()); // CraftBukkit // Paper - This shouldn't be on the main thread
@ -29,11 +29,11 @@ index 5fa3268b59..0d87ddc0f5 100644
this.player.ping = (this.player.ping * 3 + i) / 4;
this.awaitingKeepAlive = false;
} else if (!this.player.getDisplayName().getString().equals(this.minecraftServer.G())) {
} else if (!this.isExemptPlayer()) {
- this.disconnect(new ChatMessage("disconnect.timeout", new Object[0]));
+ // Paper start - This needs to be handled on the main thread for plugins
+ minecraftServer.postToMainThread(() -> {
+ this.disconnect(new ChatMessage("disconnect.timeout", new Object[0]));
+ this.disconnect(new ChatMessage("disconnect.timeout"));
+ });
+ // Paper end
}

Datei anzeigen

@ -1,4 +1,4 @@
From 6c0a39d7388e9bfbe78da5bf42868cb6bab7c588 Mon Sep 17 00:00:00 2001
From 14c5f2f61a0c28123ccb3504d313683bceec5807 Mon Sep 17 00:00:00 2001
From: Minecrell <minecrell@minecrell.net>
Date: Tue, 10 Oct 2017 18:45:20 +0200
Subject: [PATCH] Expose client protocol version and virtual host
@ -6,7 +6,7 @@ Subject: [PATCH] Expose client protocol version and virtual host
diff --git a/src/main/java/com/destroystokyo/paper/network/PaperNetworkClient.java b/src/main/java/com/destroystokyo/paper/network/PaperNetworkClient.java
new file mode 100644
index 0000000000..5caca6439d
index 000000000..5caca6439
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/network/PaperNetworkClient.java
@@ -0,0 +1,50 @@
@ -61,7 +61,7 @@ index 0000000000..5caca6439d
+
+}
diff --git a/src/main/java/net/minecraft/server/HandshakeListener.java b/src/main/java/net/minecraft/server/HandshakeListener.java
index 93ca93b640..e732d55f9f 100644
index 60be2fa99..da88978db 100644
--- a/src/main/java/net/minecraft/server/HandshakeListener.java
+++ b/src/main/java/net/minecraft/server/HandshakeListener.java
@@ -15,6 +15,7 @@ public class HandshakeListener implements PacketHandshakingInListener {
@ -72,7 +72,7 @@ index 93ca93b640..e732d55f9f 100644
public HandshakeListener(MinecraftServer minecraftserver, NetworkManager networkmanager) {
this.a = minecraftserver;
@@ -128,6 +129,10 @@ public class HandshakeListener implements PacketHandshakingInListener {
@@ -129,6 +130,10 @@ public class HandshakeListener implements PacketHandshakingInListener {
throw new UnsupportedOperationException("Invalid intention " + packethandshakinginsetprotocol.b());
}
@ -82,9 +82,9 @@ index 93ca93b640..e732d55f9f 100644
+ // Paper end
}
public void a(IChatBaseComponent ichatbasecomponent) {}
@Override
diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
index e2fc41d6d1..2ff2549d0e 100644
index 2db7229e9..5d5e23c18 100644
--- a/src/main/java/net/minecraft/server/NetworkManager.java
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
@@ -62,6 +62,10 @@ public class NetworkManager extends SimpleChannelInboundHandler<Packet<?>> {
@ -99,10 +99,10 @@ index e2fc41d6d1..2ff2549d0e 100644
public NetworkManager(EnumProtocolDirection enumprotocoldirection) {
this.h = enumprotocoldirection;
diff --git a/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java b/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java
index 7acdac55e5..f1a3be69d0 100644
index 4f008e472..8545146fb 100644
--- a/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java
+++ b/src/main/java/net/minecraft/server/PacketHandshakingInSetProtocol.java
@@ -33,6 +33,7 @@ public class PacketHandshakingInSetProtocol implements Packet<PacketHandshakingI
@@ -35,6 +35,7 @@ public class PacketHandshakingInSetProtocol implements Packet<PacketHandshakingI
return this.d;
}
@ -111,10 +111,10 @@ index 7acdac55e5..f1a3be69d0 100644
return this.a;
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index d85e622525..dafc2948c0 100644
index 0b0053207..bb50ae1ac 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -174,6 +174,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -179,6 +179,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
}

Datei anzeigen

@ -1,4 +1,4 @@
From f675c65d7d47b07c993b7d741418f9b6f15ec079 Mon Sep 17 00:00:00 2001
From 6a33d0f087cf96e9f875fe67da1cdfd73aa8d382 Mon Sep 17 00:00:00 2001
From: Shane Freeder <theboyetronic@gmail.com>
Date: Sun, 15 Oct 2017 00:29:07 +0100
Subject: [PATCH] revert serverside behavior of keepalives
@ -17,10 +17,10 @@ from networking or during connections flood of chunk packets on slower clients,
at the cost of dead connections being kept open for longer.
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index 0d87ddc0f5..551740ec6c 100644
index 62c0137a7..9a981a608 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -70,7 +70,7 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
@@ -72,7 +72,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
private final MinecraftServer minecraftServer;
public EntityPlayer player;
private int e;
@ -29,7 +29,7 @@ index 0d87ddc0f5..551740ec6c 100644
private boolean awaitingKeepAlive; private void setPendingPing(boolean isPending) { this.awaitingKeepAlive = isPending;}; private boolean isPendingPing() { return this.awaitingKeepAlive;}; // Paper - OBFHELPER
private long h; private void setKeepAliveID(long keepAliveID) { this.h = keepAliveID;}; private long getKeepAliveID() {return this.h; }; // Paper - OBFHELPER
// CraftBukkit start - multithreaded fields
@@ -101,6 +101,7 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
@@ -103,6 +103,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
private int E;
private int receivedMovePackets;
private int processedMovePackets;
@ -37,14 +37,11 @@ index 0d87ddc0f5..551740ec6c 100644
public PlayerConnection(MinecraftServer minecraftserver, NetworkManager networkmanager, EntityPlayer entityplayer) {
this.minecraftServer = minecraftserver;
@@ -179,18 +180,26 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
@@ -181,18 +182,25 @@ public class PlayerConnection implements PacketListenerPlayIn {
}
this.minecraftServer.methodProfiler.enter("keepAlive");
this.minecraftServer.getMethodProfiler().enter("keepAlive");
- long i = SystemUtils.getMonotonicMillis();
-
- if (i - this.lastKeepAlive >= 25000L) { // CraftBukkit
- if (this.awaitingKeepAlive) {
+ // Paper Start - give clients a longer time to respond to pings as per pre 1.12.2 timings
+ // This should effectively place the keepalive handling back to "as it was" before 1.12.2
+ long currentTime = SystemUtils.getMonotonicMillis();
@ -53,12 +50,6 @@ index 0d87ddc0f5..551740ec6c 100644
+ if (this.isPendingPing()) {
+ if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected
+ PlayerConnection.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getName()); // more info
this.disconnect(new ChatMessage("disconnect.timeout", new Object[0]));
- } else {
- this.awaitingKeepAlive = true;
- this.lastKeepAlive = i;
- this.h = i;
- this.sendPacket(new PacketPlayOutKeepAlive(this.h));
+ }
+ } else {
+ if (elapsedTime >= 15000L) { // 15 seconds
@ -66,12 +57,20 @@ index 0d87ddc0f5..551740ec6c 100644
+ this.setLastPing(currentTime);
+ this.setKeepAliveID(currentTime);
+ this.sendPacket(new PacketPlayOutKeepAlive(this.getKeepAliveID()));
+
- if (i - this.lastKeepAlive >= 25000L) { // CraftBukkit
- if (this.awaitingKeepAlive) {
- this.disconnect(new ChatMessage("disconnect.timeout", new Object[0]));
- } else {
- this.awaitingKeepAlive = true;
- this.lastKeepAlive = i;
- this.h = i;
- this.sendPacket(new PacketPlayOutKeepAlive(this.h));
}
}
+ // Paper end
this.minecraftServer.methodProfiler.exit();
this.minecraftServer.getMethodProfiler().exit();
// CraftBukkit start
--
2.21.0

Datei anzeigen

@ -1,4 +1,4 @@
From 5e1b6f44000755e1b473737e27c13fdc6a2a46a6 Mon Sep 17 00:00:00 2001
From fd2bd4f9885b94441cf42515e5c37a7d59e8c267 Mon Sep 17 00:00:00 2001
From: Brokkonaut <hannos17@gmx.de>
Date: Fri, 20 Oct 2017 04:33:45 +0200
Subject: [PATCH] Replace HashSet with fastutil's ObjectOpenHashSet in
@ -13,7 +13,7 @@ ObjectOpenHashSet never uses compareTo(), so the inconsistencies of NextTickList
Fixes https://github.com/PaperMC/Paper/issues/588
diff --git a/src/main/java/org/bukkit/craftbukkit/util/HashTreeSet.java b/src/main/java/org/bukkit/craftbukkit/util/HashTreeSet.java
index 80a5c29f3b..cd864c4047 100644
index 80a5c29f3..cd864c404 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/HashTreeSet.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/HashTreeSet.java
@@ -8,7 +8,7 @@ import java.util.TreeSet;

Datei anzeigen

@ -1,4 +1,4 @@
From f94e3680ce72b843b725ae03807974c2816d210f Mon Sep 17 00:00:00 2001
From ee17efd1d77554be35135b8e259d2ebd09d6488d Mon Sep 17 00:00:00 2001
From: Brokkonaut <hannos17@gmx.de>
Date: Tue, 31 Oct 2017 03:26:18 +0100
Subject: [PATCH] Send attack SoundEffects only to players who can see the
@ -6,11 +6,11 @@ Subject: [PATCH] Send attack SoundEffects only to players who can see the
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
index bfae875ebb..259f73f66e 100644
index 0f8100a05..a30d88af8 100644
--- a/src/main/java/net/minecraft/server/EntityHuman.java
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
@@ -989,6 +989,15 @@ public abstract class EntityHuman extends EntityLiving {
this.k = 0;
@@ -941,6 +941,15 @@ public abstract class EntityHuman extends EntityLiving {
return super.isFrozen() || this.isSleeping();
}
+ // Paper start - send SoundEffect to everyone who can see fromEntity
@ -23,59 +23,59 @@ index bfae875ebb..259f73f66e 100644
+ // Paper end
+
public void attack(Entity entity) {
if (entity.bk()) {
if (entity.br()) {
if (!entity.t(this)) {
@@ -1013,7 +1022,7 @@ public abstract class EntityHuman extends EntityLiving {
@@ -965,7 +974,7 @@ public abstract class EntityHuman extends EntityLiving {
int i = b0 + EnchantmentManager.b((EntityLiving) this);
if (this.isSprinting() && flag) {
- this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_KNOCKBACK, this.bV(), 1.0F, 1.0F);
+ sendSoundEffect(this, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_KNOCKBACK, this.bV(), 1.0F, 1.0F); // Paper - send while respecting visibility
- this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_KNOCKBACK, this.getSoundCategory(), 1.0F, 1.0F);
+ sendSoundEffect(this, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_KNOCKBACK, this.getSoundCategory(), 1.0F, 1.0F); // Paper - send while respecting visibility
++i;
flag1 = true;
}
@@ -1091,7 +1100,7 @@ public abstract class EntityHuman extends EntityLiving {
@@ -1040,7 +1049,7 @@ public abstract class EntityHuman extends EntityLiving {
}
}
- this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_SWEEP, this.bV(), 1.0F, 1.0F);
+ sendSoundEffect(this, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_SWEEP, this.bV(), 1.0F, 1.0F); // Paper - send while respecting visibility
this.dl();
- this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_SWEEP, this.getSoundCategory(), 1.0F, 1.0F);
+ sendSoundEffect(this, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_SWEEP, this.getSoundCategory(), 1.0F, 1.0F); // Paper - send while respecting visibility
this.dE();
}
@@ -1121,15 +1130,15 @@ public abstract class EntityHuman extends EntityLiving {
@@ -1068,15 +1077,15 @@ public abstract class EntityHuman extends EntityLiving {
}
if (flag2) {
- this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_CRIT, this.bV(), 1.0F, 1.0F);
+ sendSoundEffect(this, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_CRIT, this.bV(), 1.0F, 1.0F); // Paper - send while respecting visibility
- this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_CRIT, this.getSoundCategory(), 1.0F, 1.0F);
+ sendSoundEffect(this, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_CRIT, this.getSoundCategory(), 1.0F, 1.0F); // Paper - send while respecting visibility
this.a(entity);
}
if (!flag2 && !flag3) {
if (flag) {
- this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_STRONG, this.bV(), 1.0F, 1.0F);
+ sendSoundEffect(this, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_STRONG, this.bV(), 1.0F, 1.0F); // Paper - send while respecting visibility
- this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_STRONG, this.getSoundCategory(), 1.0F, 1.0F);
+ sendSoundEffect(this, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_STRONG, this.getSoundCategory(), 1.0F, 1.0F); // Paper - send while respecting visibility
} else {
- this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_WEAK, this.bV(), 1.0F, 1.0F);
+ sendSoundEffect(this, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_WEAK, this.bV(), 1.0F, 1.0F); // Paper - send while respecting visibility
- this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_WEAK, this.getSoundCategory(), 1.0F, 1.0F);
+ sendSoundEffect(this, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_WEAK, this.getSoundCategory(), 1.0F, 1.0F); // Paper - send while respecting visibility
}
}
@@ -1185,7 +1194,7 @@ public abstract class EntityHuman extends EntityLiving {
@@ -1128,7 +1137,7 @@ public abstract class EntityHuman extends EntityLiving {
this.applyExhaustion(world.spigotConfig.combatExhaustion); // Spigot - Change to use configurable value
} else {
- this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_NODAMAGE, this.bV(), 1.0F, 1.0F);
+ sendSoundEffect(this, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_NODAMAGE, this.bV(), 1.0F, 1.0F); // Paper - send while respecting visibility
- this.world.a((EntityHuman) null, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_NODAMAGE, this.getSoundCategory(), 1.0F, 1.0F);
+ sendSoundEffect(this, this.locX, this.locY, this.locZ, SoundEffects.ENTITY_PLAYER_ATTACK_NODAMAGE, this.getSoundCategory(), 1.0F, 1.0F); // Paper - send while respecting visibility
if (flag4) {
entity.extinguish();
}
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index cdb430ef4f..cdef374c61 100644
index c9fc001f2..4d86e7849 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -954,6 +954,12 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
@@ -664,6 +664,10 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose
this.a(entityhuman, (double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D, soundeffect, soundcategory, f, f1);
}
@ -83,11 +83,9 @@ index cdb430ef4f..cdef374c61 100644
+ public final void sendSoundEffect(@Nullable EntityHuman fromEntity, double x, double y, double z, SoundEffect soundeffect, SoundCategory soundcategory, float volume, float pitch) {
+ this.a(fromEntity, x, y, z, soundeffect, soundcategory, volume, pitch);
+ }
+ // Paper end
+
public void a(@Nullable EntityHuman entityhuman, double d0, double d1, double d2, SoundEffect soundeffect, SoundCategory soundcategory, float f, float f1) {
for (int i = 0; i < this.v.size(); ++i) {
((IWorldAccess) this.v.get(i)).a(entityhuman, soundeffect, soundcategory, d0, d1, d2, f, f1);
public abstract void a(@Nullable EntityHuman entityhuman, double d0, double d1, double d2, SoundEffect soundeffect, SoundCategory soundcategory, float f, float f1);
public abstract void a(@Nullable EntityHuman entityhuman, Entity entity, SoundEffect soundeffect, SoundCategory soundcategory, float f, float f1);
--
2.21.0

Datei anzeigen

@ -1,14 +1,14 @@
From 9fe4a6075e6fa09371163a89977cededa88ae9c3 Mon Sep 17 00:00:00 2001
From 8b33d0de3f3ad917a98f1a15c009286a04c612ae 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 3baf0380c0..c9422d545a 100644
index abc967d3f..2a50d6bab 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -387,4 +387,10 @@ public class PaperWorldConfig {
@@ -338,4 +338,10 @@ public class PaperWorldConfig {
disableCreeperLingeringEffect = getBoolean("disable-creeper-lingering-effect", false);
log("Creeper lingering effect: " + disableCreeperLingeringEffect);
}
@ -20,10 +20,10 @@ index 3baf0380c0..c9422d545a 100644
+ }
}
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index 9cbbfed4fe..2985c76f37 100644
index b75369275..8fca14243 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -394,16 +394,32 @@ public class CraftEventFactory {
@@ -499,16 +499,32 @@ public class CraftEventFactory {
EntityExperienceOrb xp = (EntityExperienceOrb) entity;
double radius = world.spigotConfig.expMerge;
if (radius > 0) {

Datei anzeigen

@ -1,11 +1,11 @@
From 6983ce9beb5d9de6bbc77810cee8af4b4cc3bb6b Mon Sep 17 00:00:00 2001
From 017175990b58dac008de3399fe82a3d8d41aebb4 Mon Sep 17 00:00:00 2001
From: pkt77 <parkerkt77@gmail.com>
Date: Fri, 10 Nov 2017 23:46:34 -0500
Subject: [PATCH] Add PlayerArmorChangeEvent
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
index 138a224e04..02fcfc449c 100644
index 121925046..9ef605ba3 100644
--- a/src/main/java/net/minecraft/server/EntityLiving.java
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
@@ -1,5 +1,6 @@
@ -13,9 +13,9 @@ index 138a224e04..02fcfc449c 100644
+import com.destroystokyo.paper.event.player.PlayerArmorChangeEvent;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;
import java.util.Collection;
@@ -2085,6 +2086,13 @@ public abstract class EntityLiving extends Entity {
@@ -2269,6 +2270,13 @@ public abstract class EntityLiving extends Entity {
ItemStack itemstack1 = this.getEquipment(enumitemslot);
if (!ItemStack.matches(itemstack1, itemstack)) {
@ -26,11 +26,11 @@ index 138a224e04..02fcfc449c 100644
+ new PlayerArmorChangeEvent((Player) this.getBukkitEntity(), PlayerArmorChangeEvent.SlotType.valueOf(enumitemslot.name()), oldItem, newItem).callEvent();
+ }
+ // Paper end
((WorldServer) this.world).getTracker().a((Entity) this, (Packet) (new PacketPlayOutEntityEquipment(this.getId(), enumitemslot, itemstack1)));
((WorldServer) this.world).getChunkProvider().broadcast(this, new PacketPlayOutEntityEquipment(this.getId(), enumitemslot, itemstack1));
if (!itemstack.isEmpty()) {
this.getAttributeMap().a(itemstack.a(enumitemslot));
diff --git a/src/main/java/net/minecraft/server/EnumItemSlot.java b/src/main/java/net/minecraft/server/EnumItemSlot.java
index a9a1339933..8f4b5dca94 100644
index 02a7ae678..60b235f16 100644
--- a/src/main/java/net/minecraft/server/EnumItemSlot.java
+++ b/src/main/java/net/minecraft/server/EnumItemSlot.java
@@ -16,6 +16,7 @@ public enum EnumItemSlot {

Datei anzeigen

@ -1,46 +0,0 @@
From 701f704672d685a7c1683c9a4f7c4055e3c4fcdc Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Tue, 11 Jul 2017 23:17:57 -0400
Subject: [PATCH] Fix Anvil Level sync to client
https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/763827668e6e5cddc111f3c93a0d718fec21ff51
Was done incorrectly and is now causing level desyncs to client.
Always send current level to the client, and instead make setWindowProperty set the level.
diff --git a/src/main/java/net/minecraft/server/ContainerAnvil.java b/src/main/java/net/minecraft/server/ContainerAnvil.java
index a6ac516147..1560dd382a 100644
--- a/src/main/java/net/minecraft/server/ContainerAnvil.java
+++ b/src/main/java/net/minecraft/server/ContainerAnvil.java
@@ -375,9 +375,9 @@ public class ContainerAnvil extends Container {
for (int i = 0; i < this.listeners.size(); ++i) {
ICrafting icrafting = (ICrafting) this.listeners.get(i);
- if (this.lastLevelCost != this.levelCost) {
+ //if (this.lastLevelCost != this.levelCost) { // Paper - this was the wrong solution to this, fixing it correctly in CraftPlayer
icrafting.setContainerData(this, 0, this.levelCost);
- }
+ //} // Paper
}
this.lastLevelCost = this.levelCost;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index c5f2284553..d85e622525 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -1405,6 +1405,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
if (container.getBukkitView().getType() != prop.getType()) {
return false;
}
+ // Paper start
+ if (prop == Property.REPAIR_COST && container instanceof net.minecraft.server.ContainerAnvil) {
+ ((net.minecraft.server.ContainerAnvil) container).levelCost = value;
+ }
+ // Paper end
getHandle().setContainerData(container, prop.getId(), value);
return true;
}
--
2.21.0

Datei anzeigen

@ -1,4 +1,4 @@
From 60b37d35e44ae9b29a142bf1a33b4b750906059a Mon Sep 17 00:00:00 2001
From 381f712680dfeaafe48d34a457a51f7c691def20 Mon Sep 17 00:00:00 2001
From: killme <killme-git@ibts.me>
Date: Sun, 12 Nov 2017 19:40:01 +0100
Subject: [PATCH] Prevent logins from being processed when the player has
@ -6,17 +6,17 @@ Subject: [PATCH] Prevent logins from being processed when the player has
diff --git a/src/main/java/net/minecraft/server/LoginListener.java b/src/main/java/net/minecraft/server/LoginListener.java
index 74bc08f85c..15c01333e7 100644
index 398f67f4b..fe912e0eb 100644
--- a/src/main/java/net/minecraft/server/LoginListener.java
+++ b/src/main/java/net/minecraft/server/LoginListener.java
@@ -56,7 +56,11 @@ public class LoginListener implements PacketLoginInListener, ITickable {
@@ -56,7 +56,11 @@ public class LoginListener implements PacketLoginInListener {
}
// Paper end
if (this.g == LoginListener.EnumProtocolState.READY_TO_ACCEPT) {
- this.b();
- this.c();
+ // Paper start - prevent logins to be processed even though disconnect was called
+ if (networkManager.isConnected()) {
+ this.b();
+ this.c();
+ }
+ // Paper end
} else if (this.g == LoginListener.EnumProtocolState.DELAY_ACCEPT) {

Datei anzeigen

@ -1,28 +0,0 @@
From 22ee365ac0b8d43053a9aa2db059eb17738ef115 Mon Sep 17 00:00:00 2001
From: Shane Freeder <theboyetronic@gmail.com>
Date: Sat, 22 Jul 2017 15:22:59 +0100
Subject: [PATCH] Add missing coverages for getTileEntity in order to attempt
to avoid exeptions when calling getTileEntity
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
index 15736f7575..ee09f4c5a0 100644
--- a/src/main/java/net/minecraft/server/WorldServer.java
+++ b/src/main/java/net/minecraft/server/WorldServer.java
@@ -217,6 +217,13 @@ public class WorldServer extends World implements IAsyncTaskHandler {
result = fixTileEntity(pos, type, result);
}
}
+ // Paper Start - add TE fix checks for shulkers, see nms.BlockShulkerBox
+ else if (type instanceof BlockShulkerBox) {
+ if (!(result instanceof TileEntityShulkerBox)) {
+ result = fixTileEntity(pos, type, result);
+ }
+ }
+ // Paper end
return result;
}
--
2.21.0

Datei anzeigen

@ -1,4 +1,4 @@
From 8e4968e7640c46591f5442686ef86bc5cf1bd401 Mon Sep 17 00:00:00 2001
From 63a4edb55045af43ed1e849de350c49842029cc9 Mon Sep 17 00:00:00 2001
From: Shane Freeder <theboyetronic@gmail.com>
Date: Thu, 16 Nov 2017 12:12:41 +0000
Subject: [PATCH] use CB BlockState implementations for captured blocks
@ -18,10 +18,10 @@ the blockstate that will be valid for restoration, as opposed to dropping
information on restoration when the event is cancelled.
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index cdef374c61..d87b08a49e 100644
index 4d86e7849..3737fca81 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -395,7 +395,7 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc
@@ -342,7 +342,7 @@ public abstract class World implements IIBlockAccess, GeneratorAccess, AutoClose
// CraftBukkit start - capture blockstates
CraftBlockState blockstate = null;
if (this.captureBlockStates) {

Datei anzeigen

@ -1,4 +1,4 @@
From a6c89447b205715e04b8a8e86ad3f7af4733cdc9 Mon Sep 17 00:00:00 2001
From ac4ff4469b68dab3d8f1f382ec05dfc687257495 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Mon, 6 Nov 2017 21:08:22 -0500
Subject: [PATCH] API to get a BlockState without a snapshot
@ -13,10 +13,10 @@ also Avoid NPE during CraftBlockEntityState load if could not get TE
If Tile Entity was null, correct Sign to return empty lines instead of null
diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java
index b3c5766a27..29fe031d85 100644
index d8cc35352..4ac97a59c 100644
--- a/src/main/java/net/minecraft/server/TileEntity.java
+++ b/src/main/java/net/minecraft/server/TileEntity.java
@@ -206,7 +206,12 @@ public abstract class TileEntity implements KeyedObject { // Paper
@@ -207,7 +207,12 @@ public abstract class TileEntity implements KeyedObject { // Paper
}
// CraftBukkit start - add method
@ -29,7 +29,7 @@ index b3c5766a27..29fe031d85 100644
if (world == null) return null;
// Spigot start
org.bukkit.block.Block block = world.getWorld().getBlockAt(position.getX(), position.getY(), position.getZ());
@@ -215,7 +220,7 @@ public abstract class TileEntity implements KeyedObject { // Paper
@@ -216,7 +221,7 @@ public abstract class TileEntity implements KeyedObject { // Paper
return null;
}
// Spigot end
@ -39,10 +39,10 @@ index b3c5766a27..29fe031d85 100644
return null;
}
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
index 4b4fdf93f6..7ae4b7952f 100644
index 8eabf8602..69b449507 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
@@ -275,6 +275,20 @@ public class CraftBlock implements Block {
@@ -294,6 +294,20 @@ public class CraftBlock implements Block {
}
public BlockState getState() {
@ -64,7 +64,7 @@ index 4b4fdf93f6..7ae4b7952f 100644
switch (material) {
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java
index 4f4121adca..082a1b6e20 100644
index 4f4121adc..082a1b6e2 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java
@@ -23,20 +23,40 @@ public class CraftBlockEntityState<T extends TileEntity> extends CraftBlockState
@ -114,7 +114,7 @@ index 4f4121adca..082a1b6e20 100644
private T createSnapshot(T tileEntity, World world) {
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java b/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java
index e6f86cc4b1..3a8f643609 100644
index e6f86cc4b..3a8f64360 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java
@@ -15,10 +15,12 @@ public class CraftSign extends CraftBlockEntityState<TileEntitySign> implements

Datei anzeigen

@ -1,4 +1,4 @@
From ea000bfea5378094525b8c3778c8e8a9af11626b Mon Sep 17 00:00:00 2001
From 1144e668d90e4453f729861abc04adee62832f27 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Sun, 26 Nov 2017 13:19:58 -0500
Subject: [PATCH] AsyncTabCompleteEvent
@ -14,12 +14,12 @@ completion, such as offline players.
Also adds isCommand and getLocation to the sync TabCompleteEvent
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
index 551740ec6c..2f00929f63 100644
index 9a981a608..25c86b53e 100644
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
@@ -507,10 +507,10 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
}
@@ -521,10 +521,10 @@ public class PlayerConnection implements PacketListenerPlayIn {
@Override
public void a(PacketPlayInTabComplete packetplayintabcomplete) {
- PlayerConnectionUtils.ensureMainThread(packetplayintabcomplete, this, this.player.getWorldServer());
+ // PlayerConnectionUtils.ensureMainThread(packetplayintabcomplete, this, this.player.getWorldServer()); // Paper - run this async
@ -30,7 +30,7 @@ index 551740ec6c..2f00929f63 100644
return;
}
// CraftBukkit end
@@ -520,12 +520,35 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
@@ -534,12 +534,35 @@ public class PlayerConnection implements PacketListenerPlayIn {
stringreader.skip();
}
@ -68,12 +68,12 @@ index 551740ec6c..2f00929f63 100644
+
}
public void a(PacketPlayInSetCommandBlock packetplayinsetcommandblock) {
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 1e8c4a85cb..8315f63775 100644
index cfcb7a4fd..2173f34fe 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1724,7 +1724,7 @@ public final class CraftServer implements Server {
@@ -1658,7 +1658,7 @@ public final class CraftServer implements Server {
offers = tabCompleteChat(player, message);
}
@ -83,10 +83,10 @@ index 1e8c4a85cb..8315f63775 100644
return tabEvent.isCancelled() ? Collections.EMPTY_LIST : tabEvent.getCompletions();
diff --git a/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java b/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java
index 1e3aae3b8f..95d13c146b 100644
index 24f4a16a6..a01d793e7 100644
--- a/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java
+++ b/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java
@@ -28,6 +28,39 @@ public class ConsoleCommandCompleter implements Completer {
@@ -27,6 +27,39 @@ public class ConsoleCommandCompleter implements Completer {
public void complete(LineReader reader, ParsedLine line, List<Candidate> candidates) {
final CraftServer server = this.server.server;
final String buffer = line.line();

Datei anzeigen

@ -1,14 +1,14 @@
From 2382c61af38c805ec9cf6f4bf795381df4b06734 Mon Sep 17 00:00:00 2001
From 243fcddd45f4e024f50c7acc018b3a301adc32f8 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Wed, 29 Nov 2017 22:18:54 -0500
Subject: [PATCH] Avoid NPE in PathfinderGoalTempt
diff --git a/src/main/java/net/minecraft/server/PathfinderGoalTempt.java b/src/main/java/net/minecraft/server/PathfinderGoalTempt.java
index 5cf9b18963..1f3ae55a00 100644
index fb395bcde..d1164dd68 100644
--- a/src/main/java/net/minecraft/server/PathfinderGoalTempt.java
+++ b/src/main/java/net/minecraft/server/PathfinderGoalTempt.java
@@ -52,7 +52,7 @@ public class PathfinderGoalTempt extends PathfinderGoal {
@@ -55,7 +55,7 @@ public class PathfinderGoalTempt extends PathfinderGoal {
}
this.target = (event.getTarget() == null) ? null : ((CraftLivingEntity) event.getTarget()).getHandle();
}

Datei anzeigen

@ -1,26 +0,0 @@
From bd45d8941e1364a7c28282e3fe90d3c5bc24fee8 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Thu, 27 Jul 2017 00:06:43 -0400
Subject: [PATCH] GH-806: Respect saving disabled before unloading all chunks
in a world
This behavior causes a save to occur even though saving was supposed to be turned off.
It's triggered when Hell/End worlds are empty of players.
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
index ab4f3b7223..e428d4485b 100644
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
@@ -186,7 +186,7 @@ public class PlayerChunkMap {
try (Timing ignored = world.timings.doChunkMapUnloadChunks.startTiming()) { // Paper
WorldProvider worldprovider = this.world.worldProvider;
- if (!worldprovider.canRespawn()) {
+ if (!worldprovider.canRespawn() && !this.world.savingDisabled) { // Paper - respect saving disabled setting
this.world.getChunkProvider().b();
}
} // Paper timing
--
2.21.0

Datei anzeigen

@ -1,4 +1,4 @@
From 1eaf18a755a9c7c9559ed65af9bbbebe454cc588 Mon Sep 17 00:00:00 2001
From 2dba4612c8b3b409d05595711229a0f3028ce56c Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Tue, 19 Dec 2017 22:02:53 -0500
Subject: [PATCH] PlayerPickupExperienceEvent
@ -6,18 +6,18 @@ Subject: [PATCH] PlayerPickupExperienceEvent
Allows plugins to cancel a player picking up an experience orb
diff --git a/src/main/java/net/minecraft/server/EntityExperienceOrb.java b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
index 404a222b45..4bcae2c21b 100644
index 49668f2c2..704a48c8e 100644
--- a/src/main/java/net/minecraft/server/EntityExperienceOrb.java
+++ b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
@@ -218,7 +218,7 @@ public class EntityExperienceOrb extends Entity {
public void d(EntityHuman entityhuman) {
@@ -219,7 +219,7 @@ public class EntityExperienceOrb extends Entity {
@Override
public void pickup(EntityHuman entityhuman) {
if (!this.world.isClientSide) {
- if (this.c == 0 && entityhuman.bJ == 0) {
+ if (this.c == 0 && entityhuman.bJ == 0 && new com.destroystokyo.paper.event.player.PlayerPickupExperienceEvent(((EntityPlayer) entityhuman).getBukkitEntity(), (org.bukkit.entity.ExperienceOrb) this.getBukkitEntity()).callEvent()) { // Paper
entityhuman.bJ = 2;
- if (this.d == 0 && entityhuman.bF == 0) {
+ if (this.d == 0 && entityhuman.bF == 0 && new com.destroystokyo.paper.event.player.PlayerPickupExperienceEvent(((EntityPlayer) entityhuman).getBukkitEntity(), (org.bukkit.entity.ExperienceOrb) this.getBukkitEntity()).callEvent()) { // Paper
entityhuman.bF = 2;
entityhuman.receive(this, 1);
ItemStack itemstack = EnchantmentManager.b(Enchantments.MENDING, (EntityLiving) entityhuman);
Entry<EnumItemSlot, ItemStack> entry = EnchantmentManager.b(Enchantments.MENDING, (EntityLiving) entityhuman);
--
2.21.0

Datei anzeigen

@ -1,4 +1,4 @@
From 48181f892f95ba0aee460a1eee9a7f2a256cf3e3 Mon Sep 17 00:00:00 2001
From c1554b6404351df0b3eacf9d551c9da16d38ba3b 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,10 +8,10 @@ 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/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index 2985c76f37..c02619bb57 100644
index 8fca14243..8d3dca2a9 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -404,7 +404,7 @@ public class CraftEventFactory {
@@ -509,7 +509,7 @@ public class CraftEventFactory {
if (e instanceof EntityExperienceOrb) {
EntityExperienceOrb loopItem = (EntityExperienceOrb) e;
// Paper start

Datei anzeigen

@ -1,4 +1,4 @@
From df166d912b5bec869afcc9174d8536446b786327 Mon Sep 17 00:00:00 2001
From 773bc84cbbf0f96237d6f806536c5532b340efe1 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Wed, 20 Dec 2017 17:36:49 -0500
Subject: [PATCH] Ability to apply mending to XP API
@ -10,22 +10,26 @@ of giving the player experience points.
Both an API To standalone mend, and apply mending logic to .giveExp has been added.
diff --git a/src/main/java/net/minecraft/server/EnchantmentManager.java b/src/main/java/net/minecraft/server/EnchantmentManager.java
index 108ec49aa5..72f0bec4e1 100644
index 6f64b8db3..b6a40e22a 100644
--- a/src/main/java/net/minecraft/server/EnchantmentManager.java
+++ b/src/main/java/net/minecraft/server/EnchantmentManager.java
@@ -242,6 +242,7 @@ public class EnchantmentManager {
@@ -241,6 +241,11 @@ public class EnchantmentManager {
return getEnchantmentLevel(Enchantments.CHANNELING, itemstack) > 0;
}
+ public static ItemStack getRandomEquippedItemWithEnchant(Enchantment enchantment, EntityLiving entityliving) { return b(enchantment, entityliving); } // Paper - OBFHELPER
public static ItemStack b(Enchantment enchantment, EntityLiving entityliving) {
List<ItemStack> list = enchantment.a(entityliving);
+ // Paper - OBFHELPER
+ public static @Nullable ItemStack getRandomEquippedItemWithEnchant(Enchantment enchantment, EntityLiving entityliving) {
+ Entry<EnumItemSlot, ItemStack> entry = b(enchantment, entityliving);
+ return entry != null ? entry.getValue() : null;
+ }
@Nullable
public static Entry<EnumItemSlot, ItemStack> b(Enchantment enchantment, EntityLiving entityliving) {
Map<EnumItemSlot, ItemStack> map = enchantment.a(entityliving);
diff --git a/src/main/java/net/minecraft/server/EntityExperienceOrb.java b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
index 4bcae2c21b..09d85764b0 100644
index 704a48c8e..64d71a9a2 100644
--- a/src/main/java/net/minecraft/server/EntityExperienceOrb.java
+++ b/src/main/java/net/minecraft/server/EntityExperienceOrb.java
@@ -246,10 +246,12 @@ public class EntityExperienceOrb extends Entity {
@@ -251,10 +251,12 @@ public class EntityExperienceOrb extends Entity {
}
}
@ -39,10 +43,10 @@ index 4bcae2c21b..09d85764b0 100644
return i * 2;
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index dafc2948c0..e6dadde80f 100644
index bb50ae1ac..bea3ddf31 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -1026,8 +1026,39 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -1052,8 +1052,39 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return GameMode.getByValue(getHandle().playerInteractManager.getGameMode().getId());
}

Datei anzeigen

@ -1,4 +1,4 @@
From aee359f56881e681adaeaf7b2efde9bb243d4d58 Mon Sep 17 00:00:00 2001
From 2a4121b6db835f78f36e5680d2a2c2bf76767766 Mon Sep 17 00:00:00 2001
From: Zach Brown <zach.brown@destroystokyo.com>
Date: Thu, 11 Jan 2018 16:47:28 -0600
Subject: [PATCH] Make max squid spawn height configurable
@ -7,12 +7,12 @@ I don't know why upstream made only the minimum height configurable but
whatever
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
index 99d6ccc598..07a8ef697f 100644
index 2a50d6bab..c3e61bdfe 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -413,4 +413,9 @@ public class PaperWorldConfig {
log("Max Chunk Gens Per Tick: " + maxChunkGensPerTick);
}
@@ -344,4 +344,9 @@ public class PaperWorldConfig {
expMergeMaxValue = getInt("experience-merge-max-value", -1);
log("Experience Merge Max Value: " + expMergeMaxValue);
}
+
+ public double squidMaxSpawnHeight;
@ -21,21 +21,19 @@ index 99d6ccc598..07a8ef697f 100644
+ }
}
diff --git a/src/main/java/net/minecraft/server/EntitySquid.java b/src/main/java/net/minecraft/server/EntitySquid.java
index 1a347bae37..b9c76325db 100644
index 815844dab..d5dff4b88 100644
--- a/src/main/java/net/minecraft/server/EntitySquid.java
+++ b/src/main/java/net/minecraft/server/EntitySquid.java
@@ -167,7 +167,10 @@ public class EntitySquid extends EntityWaterAnimal {
}
@@ -170,7 +170,8 @@ public class EntitySquid extends EntityWaterAnimal {
public boolean a(GeneratorAccess generatoraccess, boolean flag) {
@Override
public boolean a(GeneratorAccess generatoraccess, EnumMobSpawn enummobspawn) {
- return this.locY > this.world.spigotConfig.squidSpawnRangeMin && this.locY < (double) generatoraccess.getSeaLevel(); // Spigot
+ // Paper - Make max spawn height configurable
+ final double maxHeight = world.paperConfig.squidMaxSpawnHeight > 0 ? world.paperConfig.squidMaxSpawnHeight : world.getSeaLevel();
+ return this.locY > this.world.spigotConfig.squidSpawnRangeMin && this.locY < maxHeight; // Spigot
+ // Paper end
+ return this.locY > this.world.spigotConfig.squidSpawnRangeMin && this.locY < maxHeight; // Spigot // Paper
}
public void c(float f, float f1, float f2) {
public void a(float f, float f1, float f2) {
--
2.21.0

Datei anzeigen

@ -1,22 +0,0 @@
From ad5ce22ff3f19ec60b6b8d096b019cedb7964ebb Mon Sep 17 00:00:00 2001
From: BillyGalbreath <Blake.Galbreath@GMail.com>
Date: Mon, 31 Jul 2017 01:54:40 -0500
Subject: [PATCH] Ocelot despawns should honor nametags and leash
diff --git a/src/main/java/net/minecraft/server/EntityOcelot.java b/src/main/java/net/minecraft/server/EntityOcelot.java
index 47aac5b057..ba074c10c6 100644
--- a/src/main/java/net/minecraft/server/EntityOcelot.java
+++ b/src/main/java/net/minecraft/server/EntityOcelot.java
@@ -61,7 +61,7 @@ public class EntityOcelot extends EntityTameableAnimal {
}
public boolean isTypeNotPersistent() {
- return !this.isTamed() /*&& this.ticksLived > 2400*/; // CraftBukkit
+ return !this.isTamed() && !this.hasCustomName() && !this.isLeashed() /*&& this.ticksLived > 2400*/; // CraftBukkit - Paper (honor name and leash)
}
protected void initAttributes() {
--
2.21.0

Datei anzeigen

@ -1,43 +0,0 @@
From c687ba7547ccb45fff41f690dd9b7a66fc1d395e Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Mon, 1 Jan 2018 15:41:59 -0500
Subject: [PATCH] Configurable Chunks Sends per Tick setting
Vanilla already had this limited, make it configurable.
Limit how much exploration lags the server
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
index c9422d545a..6a8b1c5e03 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -393,4 +393,13 @@ public class PaperWorldConfig {
expMergeMaxValue = getInt("experience-merge-max-value", -1);
log("Experience Merge Max Value: " + expMergeMaxValue);
}
+
+ public int maxChunkSendsPerTick = 81;
+ private void maxChunkSendsPerTick() {
+ maxChunkSendsPerTick = getInt("max-chunk-sends-per-tick", maxChunkSendsPerTick);
+ if (maxChunkSendsPerTick <= 0) {
+ maxChunkSendsPerTick = 81;
+ }
+ log("Max Chunk Sends Per Tick: " + maxChunkSendsPerTick);
+ }
}
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
index e428d4485b..f481e5a4ff 100644
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
@@ -164,7 +164,7 @@ public class PlayerChunkMap {
}
if (!this.g.isEmpty()) {
- j = 81;
+ j = world.paperConfig.maxChunkSendsPerTick; // Paper
try (Timing ignored = world.timings.doChunkMapPendingSendToPlayers.startTiming()) { // Paper
Iterator iterator2 = this.g.iterator();
--
2.21.0

Datei anzeigen

@ -1,111 +0,0 @@
From 9677c211f1a361076a780405a48c5aaad062f172 Mon Sep 17 00:00:00 2001
From: Aikar <aikar@aikar.co>
Date: Mon, 1 Jan 2018 16:10:24 -0500
Subject: [PATCH] Configurable Max Chunk Gens per Tick
Limit the number of generations that can occur in a single tick, forcing them
to be spread out more.
Defaulting to 10 as an average generation is going to be 3-6ms, which means 10 will
likely cause the server to lose TPS, but constrain how much.
This should result in no noticeable speed reduction in generation for servers not
lagging, and let larger servers reduce this value according to their own desires.
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
index 6a8b1c5e03..99d6ccc598 100644
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
@@ -402,4 +402,15 @@ public class PaperWorldConfig {
}
log("Max Chunk Sends Per Tick: " + maxChunkSendsPerTick);
}
+
+ public int maxChunkGensPerTick = 10;
+ private void maxChunkGensPerTick() {
+ maxChunkGensPerTick = getInt("max-chunk-gens-per-tick", maxChunkGensPerTick);
+ if (maxChunkGensPerTick <= 0) {
+ maxChunkGensPerTick = Integer.MAX_VALUE;
+ log("Max Chunk Gens Per Tick: Unlimited (NOT RECOMMENDED)");
+ } else {
+ log("Max Chunk Gens Per Tick: " + maxChunkGensPerTick);
+ }
+ }
}
diff --git a/src/main/java/net/minecraft/server/PlayerChunk.java b/src/main/java/net/minecraft/server/PlayerChunk.java
index b9d90c4fb8..7d3f846a19 100644
--- a/src/main/java/net/minecraft/server/PlayerChunk.java
+++ b/src/main/java/net/minecraft/server/PlayerChunk.java
@@ -21,6 +21,7 @@ public class PlayerChunk {
private int h;
private long i;
private boolean done;
+ boolean chunkExists; // Paper
public PlayerChunk(PlayerChunkMap playerchunkmap, int i, int j) {
this.playerChunkMap = playerchunkmap;
@@ -29,6 +30,7 @@ public class PlayerChunk {
chunkproviderserver.a(i, j);
this.chunk = chunkproviderserver.getChunkAt(i, j, true, false);
+ this.chunkExists = this.chunk != null || org.bukkit.craftbukkit.chunkio.ChunkIOExecutor.hasQueuedChunkLoad(playerChunkMap.getWorld(), i, j); // Paper
markChunkUsed(); // Paper - delay chunk unloads
}
diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java
index f481e5a4ff..679488a3cf 100644
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
@@ -132,6 +132,7 @@ public class PlayerChunkMap {
// Spigot start
org.spigotmc.SlackActivityAccountant activityAccountant = this.world.getMinecraftServer().slackActivityAccountant;
activityAccountant.startActivity(0.5);
+ int chunkGensAllowed = world.paperConfig.maxChunkGensPerTick; // Paper
// Spigot end
Iterator iterator1 = this.h.iterator();
@@ -141,6 +142,11 @@ public class PlayerChunkMap {
if (playerchunk1.f() == null) {
boolean flag = playerchunk1.a(PlayerChunkMap.b);
+ // Paper start
+ if (flag && !playerchunk1.chunkExists && chunkGensAllowed-- <= 0) {
+ continue;
+ }
+ // Paper end
if (playerchunk1.a(flag)) {
iterator1.remove();
diff --git a/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOExecutor.java b/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOExecutor.java
index 7ffb8f6172..33d5fc7d5e 100644
--- a/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOExecutor.java
+++ b/src/main/java/org/bukkit/craftbukkit/chunkio/ChunkIOExecutor.java
@@ -34,4 +34,10 @@ public class ChunkIOExecutor {
public static void tick() {
instance.finishActive();
}
+
+ // Paper start
+ public static boolean hasQueuedChunkLoad(World world, int x, int z) {
+ return instance.hasTask(new QueuedChunk(x, z, null, world, null));
+ }
+ // Paper end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/util/AsynchronousExecutor.java b/src/main/java/org/bukkit/craftbukkit/util/AsynchronousExecutor.java
index 193c3621c6..cf1258c559 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/AsynchronousExecutor.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/AsynchronousExecutor.java
@@ -351,4 +351,10 @@ public final class AsynchronousExecutor<P, T, C, E extends Throwable> {
public void setActiveThreads(final int coreSize) {
pool.setCorePoolSize(coreSize);
}
+
+ // Paper start
+ public boolean hasTask(P parameter) throws IllegalStateException {
+ return tasks.get(parameter) != null;
+ }
+ // Paper end
}
--
2.21.0