Updated Upstream (Bukkit/CraftBukkit/Spigot) (#7454)

* Updated Upstream (Bukkit/CraftBukkit/Spigot)

Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

Bukkit Changes:
8085edde SPIGOT-6918: Add SpawnCategory API and configurations for Axolotls
04c7e13c PR-719: Add Player Profile API
71564210 SPIGOT-6910: Add BlockDamageAbortEvent

CraftBukkit Changes:
febaa1c6 SPIGOT-6918: Add SpawnCategory API and configurations for Axolotls
9dafd109 Don't send updates over large distances
bdac46b0 SPIGOT-6782: EntityPortalEvent should not destroy entity when setTo() uses same world as getFrom()
8f361ece PR-1002: Add Player Profile API
911875d4 Increase outdated build delay
e5f8a767 SPIGOT-6917: Use main scoreboard for /trigger
a672a531 Clean up callBlockDamageEvent
8e1bdeef SPIGOT-6910: Add BlockDamageAbortEvent

Spigot Changes:
6edb62f3 Rebuild patches
7fbc6a1e Rebuild patches

* Updated Upstream (CraftBukkit)

Upstream has released updates that appear to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
de951355 SPIGOT-6927: Fix default value of spawn-limits in Worlds
This commit is contained in:
Nassim Jahnke 2022-02-12 14:20:33 +01:00 committed by GitHub
parent 00da0989f3
commit 26734e83b0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
313 changed files with 1540 additions and 1298 deletions

View file

@ -7,33 +7,34 @@ Establishes base extension of profile systems for future edits too
diff --git a/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java b/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java
new file mode 100644
index 0000000000000000000000000000000000000000..84551164b76bc8f064a3a0c030c3a1b47f567b6f
index 0000000000000000000000000000000000000000..d64a05742ba78aefc64b2e5d824b4caa2c7bc479
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java
@@ -0,0 +1,302 @@
@@ -0,0 +1,372 @@
+package com.destroystokyo.paper.profile;
+
+import com.destroystokyo.paper.PaperConfig;
+import com.google.common.base.Charsets;
+import com.google.common.collect.Iterables;
+import com.mojang.authlib.GameProfile;
+import com.mojang.authlib.properties.Property;
+import com.mojang.authlib.properties.PropertyMap;
+import net.minecraft.Util;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.server.players.GameProfileCache;
+import org.apache.commons.lang3.Validate;
+import org.bukkit.craftbukkit.entity.CraftPlayer;
+import org.bukkit.craftbukkit.profile.CraftPlayerTextures;
+import org.bukkit.craftbukkit.profile.CraftProfileProperty;
+import org.bukkit.profile.PlayerTextures;
+import org.jetbrains.annotations.NotNull;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.util.AbstractSet;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import java.util.UUID;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+
+public class CraftPlayerProfile implements PlayerProfile {
+public class CraftPlayerProfile implements PlayerProfile, SharedPlayerProfile {
+
+ private GameProfile profile;
+ private final PropertySet properties = new PropertySet();
@ -64,6 +65,22 @@ index 0000000000000000000000000000000000000000..84551164b76bc8f064a3a0c030c3a1b4
+ properties.put(name, new Property(name, property.getValue(), property.getSignature()));
+ }
+
+ @Override
+ public CraftPlayerTextures getTextures() {
+ return new CraftPlayerTextures(this);
+ }
+
+ @Override
+ public void setTextures(@Nullable PlayerTextures textures) {
+ if (textures == null) {
+ this.removeProperty("textures");
+ } else {
+ CraftPlayerTextures craftPlayerTextures = new CraftPlayerTextures(this);
+ craftPlayerTextures.copyFrom(textures);
+ craftPlayerTextures.rebuildPropertyIfDirty();
+ }
+ }
+
+ public GameProfile getGameProfile() {
+ return profile;
+ }
@ -82,6 +99,11 @@ index 0000000000000000000000000000000000000000..84551164b76bc8f064a3a0c030c3a1b4
+ return prev.getId();
+ }
+
+ @Override
+ public UUID getUniqueId() {
+ return getId();
+ }
+
+ @Nullable
+ @Override
+ public String getName() {
@ -117,6 +139,29 @@ index 0000000000000000000000000000000000000000..84551164b76bc8f064a3a0c030c3a1b4
+ return !profile.getProperties().removeAll(property).isEmpty();
+ }
+
+ @Nullable
+ @Override
+ public Property getProperty(String property) {
+ return Iterables.getFirst(this.profile.getProperties().get(property), null);
+ }
+
+ @Nullable
+ @Override
+ public void setProperty(@NotNull String propertyName, @Nullable Property property) {
+ PropertyMap properties = profile.getProperties();
+ properties.removeAll(propertyName);
+ if (property != null) {
+ properties.put(propertyName, property);
+ }
+ }
+
+ @Override
+ public @NotNull GameProfile buildGameProfile() {
+ GameProfile profile = new GameProfile(this.profile.getId(), this.profile.getName());
+ profile.getProperties().putAll(this.profile.getProperties());
+ return profile;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
@ -148,8 +193,16 @@ index 0000000000000000000000000000000000000000..84551164b76bc8f064a3a0c030c3a1b4
+ }
+
+ @Override
+ public @NotNull CompletableFuture<org.bukkit.profile.PlayerProfile> update() {
+ return CompletableFuture.supplyAsync(() -> {
+ final CraftPlayerProfile clone = clone();
+ clone.complete(true);
+ return clone;
+ }, Util.backgroundExecutor());
+ }
+
+ @Override
+ public boolean completeFromCache() {
+ MinecraftServer server = MinecraftServer.getServer();
+ return completeFromCache(false, PaperConfig.isProxyOnlineMode());
+ }
+
@ -193,12 +246,10 @@ index 0000000000000000000000000000000000000000..84551164b76bc8f064a3a0c030c3a1b4
+ }
+
+ public boolean complete(boolean textures) {
+ MinecraftServer server = MinecraftServer.getServer();
+ return complete(textures, PaperConfig.isProxyOnlineMode());
+ }
+ public boolean complete(boolean textures, boolean onlineMode) {
+ MinecraftServer server = MinecraftServer.getServer();
+
+ boolean isCompleteFromCache = this.completeFromCache(true, onlineMode);
+ if (onlineMode && (!isCompleteFromCache || textures && !hasTextures())) {
+ GameProfile result = server.getSessionService().fillProfileProperties(profile, true);
@ -258,6 +309,25 @@ index 0000000000000000000000000000000000000000..84551164b76bc8f064a3a0c030c3a1b4
+ return craft.getGameProfile();
+ }
+
+ @Override
+ public @NotNull Map<String, Object> serialize() {
+ Map<String, Object> map = new LinkedHashMap<>();
+ if (this.getId() != null) {
+ map.put("uniqueId", this.getId().toString());
+ }
+ if (this.getName() != null) {
+ map.put("name", getName());
+ }
+ if (!this.properties.isEmpty()) {
+ List<Object> propertiesData = new ArrayList<>();
+ for (ProfileProperty property : properties) {
+ propertiesData.add(CraftProfileProperty.serialize(new Property(property.getName(), property.getValue(), property.getSignature())));
+ }
+ map.put("properties", propertiesData);
+ }
+ return map;
+ }
+
+ private class PropertySet extends AbstractSet<ProfileProperty> {
+
+ @Override
@ -428,6 +498,35 @@ index 0000000000000000000000000000000000000000..3cdd06d3af7ff94f1fe1a11b9a9275e1
+ super(authenticationService, UUID.randomUUID().toString(), agent);
+ }
+}
diff --git a/src/main/java/com/destroystokyo/paper/profile/SharedPlayerProfile.java b/src/main/java/com/destroystokyo/paper/profile/SharedPlayerProfile.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ac27392a8647ef7d0dc78efe78703e993885017
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/profile/SharedPlayerProfile.java
@@ -0,0 +1,23 @@
+package com.destroystokyo.paper.profile;
+
+import com.mojang.authlib.GameProfile;
+import com.mojang.authlib.properties.Property;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.UUID;
+
+public interface SharedPlayerProfile {
+
+ @Nullable UUID getUniqueId();
+
+ @Nullable String getName();
+
+ boolean removeProperty(@NotNull String property);
+
+ @Nullable Property getProperty(@NotNull String propertyName);
+
+ @Nullable void setProperty(@NotNull String propertyName, @Nullable Property property);
+
+ @NotNull GameProfile buildGameProfile();
+}
diff --git a/src/main/java/net/minecraft/server/MCUtil.java b/src/main/java/net/minecraft/server/MCUtil.java
index 9f292deee1b793d52b5774304318e940128d1e26..0cf818fceddd76e7704fdc6625456787856b2815 100644
--- a/src/main/java/net/minecraft/server/MCUtil.java
@ -491,10 +590,10 @@ index 00f783aafd81fa7e836e4eea5bfeac7434f33b0f..3789441e2df9410aa1c6efe59054aaba
String s1 = name.toLowerCase(Locale.ROOT);
GameProfileCache.GameProfileInfo usercache_usercacheentry = (GameProfileCache.GameProfileInfo) this.profilesByName.get(s1);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 7a96dd337c41cdfa7703de4b21380a4fce0198c8..def56e6c17d6e2efddcdca22e391f11b2de58966 100644
index 909724efb99f88f3de0967b85d539e0ab1bec8e8..7653c23690b927f93ca4692c6e077abfb9e1c5ca 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -249,6 +249,9 @@ import org.yaml.snakeyaml.error.MarkedYAMLException;
@@ -247,6 +247,9 @@ import org.yaml.snakeyaml.error.MarkedYAMLException;
import net.md_5.bungee.api.chat.BaseComponent; // Spigot
@ -504,7 +603,7 @@ index 7a96dd337c41cdfa7703de4b21380a4fce0198c8..def56e6c17d6e2efddcdca22e391f11b
public final class CraftServer implements Server {
private final String serverName = "Paper"; // Paper
private final String serverVersion;
@@ -2552,5 +2555,24 @@ public final class CraftServer implements Server {
@@ -2559,5 +2562,24 @@ public final class CraftServer implements Server {
public boolean suggestPlayerNamesWhenNullTabCompletions() {
return com.destroystokyo.paper.PaperConfig.suggestPlayersWhenNullTabCompletions;
}
@ -529,21 +628,101 @@ index 7a96dd337c41cdfa7703de4b21380a4fce0198c8..def56e6c17d6e2efddcdca22e391f11b
+ }
// Paper end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java
index 9405812b8c308d70de1e26ba55500301b24ecc3c..490df0dcfd0e1e0ab05943410493522f86444ef8 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java
@@ -80,6 +80,13 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta {
diff --git a/src/main/java/org/bukkit/craftbukkit/profile/CraftPlayerProfile.java b/src/main/java/org/bukkit/craftbukkit/profile/CraftPlayerProfile.java
index 3cd37402c1f98d47ea009fa4ea71c85044bbe59f..992d4cd38246d67ab1220dac611d6540b3c3791f 100644
--- a/src/main/java/org/bukkit/craftbukkit/profile/CraftPlayerProfile.java
+++ b/src/main/java/org/bukkit/craftbukkit/profile/CraftPlayerProfile.java
@@ -27,7 +27,7 @@ import org.bukkit.profile.PlayerProfile;
import org.bukkit.profile.PlayerTextures;
@SerializableAs("PlayerProfile")
-public final class CraftPlayerProfile implements PlayerProfile {
+public final class CraftPlayerProfile implements PlayerProfile, com.destroystokyo.paper.profile.SharedPlayerProfile { // Paper
@Nonnull
public static GameProfile validateSkullProfile(@Nonnull GameProfile gameProfile) {
@@ -80,11 +80,11 @@ public final class CraftPlayerProfile implements PlayerProfile {
}
private void setProfile(GameProfile profile) {
+ // Paper start
+ if (profile != null) {
+ com.destroystokyo.paper.profile.CraftPlayerProfile paperProfile = new com.destroystokyo.paper.profile.CraftPlayerProfile(profile);
+ paperProfile.completeFromCache(false, true);
+ profile = paperProfile.getGameProfile();
+ }
+ // Paper end
this.profile = profile;
this.serializedProfile = (profile == null) ? null : NbtUtils.writeGameProfile(new CompoundTag(), profile);
@Nullable
- Property getProperty(String propertyName) {
+ public Property getProperty(String propertyName) { // Paper - public
return Iterables.getFirst(this.properties.get(propertyName), null);
}
- void setProperty(String propertyName, @Nullable Property property) {
+ public void setProperty(String propertyName, @Nullable Property property) { // Paper - public
// Assert: (property == null) || property.getName().equals(propertyName)
this.removeProperty(propertyName);
if (property != null) {
@@ -92,8 +92,10 @@ public final class CraftPlayerProfile implements PlayerProfile {
}
}
- void removeProperty(String propertyName) {
- this.properties.removeAll(propertyName);
+ // Paper start - change return value for shared interface
+ public boolean removeProperty(String propertyName) {
+ return !this.properties.removeAll(propertyName).isEmpty();
+ // Paper end
}
void rebuildDirtyProperties() {
diff --git a/src/main/java/org/bukkit/craftbukkit/profile/CraftPlayerTextures.java b/src/main/java/org/bukkit/craftbukkit/profile/CraftPlayerTextures.java
index c930b7557b141650d63d6802c26139b14ddab6b9..bf56d4fbd34586190e2d680cc33d125578a0953e 100644
--- a/src/main/java/org/bukkit/craftbukkit/profile/CraftPlayerTextures.java
+++ b/src/main/java/org/bukkit/craftbukkit/profile/CraftPlayerTextures.java
@@ -14,7 +14,7 @@ import javax.annotation.Nullable;
import org.bukkit.craftbukkit.util.JsonHelper;
import org.bukkit.profile.PlayerTextures;
-final class CraftPlayerTextures implements PlayerTextures {
+public final class CraftPlayerTextures implements PlayerTextures { // Paper - public
static final String PROPERTY_NAME = "textures";
private static final String MINECRAFT_HOST = "textures.minecraft.net";
@@ -48,7 +48,7 @@ final class CraftPlayerTextures implements PlayerTextures {
}
}
- private final CraftPlayerProfile profile;
+ private final com.destroystokyo.paper.profile.SharedPlayerProfile profile; // Paper
// The textures data is loaded lazily:
private boolean loaded = false;
@@ -67,11 +67,11 @@ final class CraftPlayerTextures implements PlayerTextures {
// GameProfiles (even if these modifications are later reverted).
private boolean dirty = false;
- CraftPlayerTextures(@Nonnull CraftPlayerProfile profile) {
+ public CraftPlayerTextures(@Nonnull com.destroystokyo.paper.profile.SharedPlayerProfile profile) { // Paper
this.profile = profile;
}
- void copyFrom(@Nonnull PlayerTextures other) {
+ public void copyFrom(@Nonnull PlayerTextures other) { // Paper - public
if (other == this) return;
Preconditions.checkArgument(other instanceof CraftPlayerTextures, "Expecting CraftPlayerTextures, got %s", other.getClass().getName());
CraftPlayerTextures otherTextures = (CraftPlayerTextures) other;
@@ -238,7 +238,7 @@ final class CraftPlayerTextures implements PlayerTextures {
return this.profile.getProperty(PROPERTY_NAME);
}
- void rebuildPropertyIfDirty() {
+ public void rebuildPropertyIfDirty() { // Paper - public
if (!this.dirty) return;
// Assert: loaded
this.dirty = false;
diff --git a/src/main/java/org/bukkit/craftbukkit/profile/CraftProfileProperty.java b/src/main/java/org/bukkit/craftbukkit/profile/CraftProfileProperty.java
index 0617ad166dd4cb5e26c0c22b264116c23b50195b..07348f0d2c61a78610c5f7bdb280b5a39633a831 100644
--- a/src/main/java/org/bukkit/craftbukkit/profile/CraftProfileProperty.java
+++ b/src/main/java/org/bukkit/craftbukkit/profile/CraftProfileProperty.java
@@ -21,7 +21,7 @@ import javax.annotation.Nullable;
import org.apache.commons.io.IOUtils;
import org.bukkit.craftbukkit.configuration.ConfigSerializationUtil;
-final class CraftProfileProperty {
+public final class CraftProfileProperty { // Paper - public
/**
* Different JSON formatting styles to use for encoded property values.