9
0
mirror of https://github.com/BX-Team/DivineMC.git synced 2025-12-19 14:59:25 +00:00

Updated Upstream (Purpur)

Upstream has released updates that appear to apply and compile correctly

Purpur Changes:
PurpurMC/Purpur@2af2e71 Updated Upstream (Paper)
PurpurMC/Purpur@ffeb49d ignore `item_model` component for don't run with scissors feature alongside `custom_model_data` component
This commit is contained in:
NONPLAYT
2024-12-07 03:32:16 +03:00
parent 32274f1ff1
commit d39afc08ca
10 changed files with 36 additions and 36 deletions

View File

@@ -3,7 +3,7 @@ import io.papermc.paperweight.util.constants.PAPERCLIP_CONFIG
plugins {
java
`maven-publish`
id("io.papermc.paperweight.patcher") version "1.7.6"
id("io.papermc.paperweight.patcher") version "1.7.7"
}
val paperMavenPublicUrl = "https://repo.papermc.io/repository/maven-public/"

View File

@@ -2,7 +2,7 @@ group = space.bxteam.divinemc
mcVersion = 1.21.4
version = 1.21.4-R0.1-SNAPSHOT
purpurRef = bbae9c1a6e250ce60fd9e24fc1cf01538b3ac82a
purpurRef = ffeb49da1ed5202349756af7436e96fd48eb4ff9
org.gradle.caching = true
org.gradle.parallel = true

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Divine Branding
diff --git a/build.gradle.kts b/build.gradle.kts
index b0fd6c1804844f09428051952e3ac4e58f8c859c..b2d0775719ef98fa3006a8c674df60ce8aa6c077 100644
index 49546dfbb4dd006b5a2419908890ba4c2a0e207a..db5b44861cabd70f7d9acb6a8a951efd68b97a18 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -255,3 +255,12 @@ tasks.check {
@@ -257,3 +257,12 @@ tasks.check {
dependsOn(scanJarForOldGeneratedCode)
}
// Paper end

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] DivineMC API Publish
diff --git a/build.gradle.kts b/build.gradle.kts
index b2d0775719ef98fa3006a8c674df60ce8aa6c077..b0b9d9d37c86fd409353c8d18551f1ced7fe4272 100644
index db5b44861cabd70f7d9acb6a8a951efd68b97a18..95af32719a74893b0c0c7f20f178f222f8d24777 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -264,3 +264,14 @@ tasks.withType<JavaCompile> {
@@ -266,3 +266,14 @@ tasks.withType<JavaCompile> {
compilerArgs.add("-Xlint:-dep-ann")
}
// DivineMC end

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Bump Dependencies
diff --git a/build.gradle.kts b/build.gradle.kts
index bf3e029b5760ce5ee70b9b88bfe0cb079c8100b1..fac9ff73500fb6bf8cac7d17403d407430cecbb6 100644
index 95af32719a74893b0c0c7f20f178f222f8d24777..d6deb2136e314f9e9d66123ab4aaa60342156d3a 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -9,11 +9,17 @@ java {
@@ -28,7 +28,7 @@ index bf3e029b5760ce5ee70b9b88bfe0cb079c8100b1..fac9ff73500fb6bf8cac7d17403d4074
val apiAndDocs: Configuration by configurations.creating {
attributes {
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION))
@@ -70,23 +76,23 @@ dependencies {
@@ -72,23 +78,23 @@ dependencies {
implementation("org.ow2.asm:asm-commons:9.7.1")
// Paper end
@@ -58,7 +58,7 @@ index bf3e029b5760ce5ee70b9b88bfe0cb079c8100b1..fac9ff73500fb6bf8cac7d17403d4074
testImplementation("org.hamcrest:hamcrest:2.2")
testImplementation("org.mockito:mockito-core:5.14.1")
testImplementation("org.ow2.asm:asm-tree:9.7.1")
@@ -180,7 +186,7 @@ tasks.withType<Javadoc> {
@@ -182,7 +188,7 @@ tasks.withType<Javadoc> {
"https://javadoc.io/doc/org.jetbrains/annotations/$annotationsVersion/", // Paper - we don't want Java 5 annotations
// "https://javadoc.io/doc/net.md-5/bungeecord-chat/$bungeeCordChatVersion/", // Paper - don't link to bungee chat
// Paper start - add missing javadoc links
@@ -67,7 +67,7 @@ index bf3e029b5760ce5ee70b9b88bfe0cb079c8100b1..fac9ff73500fb6bf8cac7d17403d4074
"https://www.javadoc.io/doc/com.google.code.gson/gson/2.11.0",
"https://jspecify.dev/docs/api/",
// Paper end
@@ -193,9 +199,9 @@ tasks.withType<Javadoc> {
@@ -195,9 +201,9 @@ tasks.withType<Javadoc> {
"https://jd.advntr.dev/text-serializer-plain/$adventureVersion/",
"https://jd.advntr.dev/text-logger-slf4j/$adventureVersion/",
"https://javadoc.io/doc/org.slf4j/slf4j-api/$slf4jVersion/",

View File

@@ -51,7 +51,7 @@ index 74d7aaae57e0e9ea9e31c4b2189ba50a0ac83bea..445ccd4ca89e6d5a536897e979366a4c
+}
+// DivineMC end
diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java
index 8cde30544e14f8fc2dac32966ae3c21f8cf3a551..d9e5756f40bbafdb1efc97039562ca7835ea3020 100644
index 4a8f95670e25c81952cccbaf4c6e49514cacd529..50f93c65f3461ae66963f603f76989f23e585fc0 100644
--- a/src/main/java/com/destroystokyo/paper/Metrics.java
+++ b/src/main/java/com/destroystokyo/paper/Metrics.java
@@ -3,6 +3,7 @@ package com.destroystokyo.paper;
@@ -62,7 +62,7 @@ index 8cde30544e14f8fc2dac32966ae3c21f8cf3a551..d9e5756f40bbafdb1efc97039562ca78
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
import org.bukkit.plugin.Plugin;
@@ -593,7 +594,7 @@ public class Metrics {
@@ -592,7 +593,7 @@ public class Metrics {
boolean logFailedRequests = config.getBoolean("logFailedRequests", false);
// Only start Metrics, if it's enabled in the config
if (config.getBoolean("enabled", true)) {
@@ -71,7 +71,7 @@ index 8cde30544e14f8fc2dac32966ae3c21f8cf3a551..d9e5756f40bbafdb1efc97039562ca78
metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> {
String minecraftVersion = Bukkit.getVersion();
@@ -603,7 +604,7 @@ public class Metrics {
@@ -602,7 +603,7 @@ public class Metrics {
metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size()));
metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() ? "bungee" : "offline"))); // Purpur

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Add missing purpur config options
diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
index 5904b82b87bcdbe41367843885f7c1bd1272d1f1..c6e2543f81f0d10f00296b3425a2b9345fce842b 100644
index 235596af3a4e210efe966782b29e2b1d4d41e36d..1802be3456bd0b2de35374440b2a548fd815aadc 100644
--- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
+++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java
@@ -162,6 +162,18 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS
@@ -51,7 +51,7 @@ index dbce71f45c008da883b6d244a06343d83ae25e7e..4551fd70a30c7309468a701f92ba92ac
public void addAdditionalSaveData(CompoundTag nbt) {
super.addAdditionalSaveData(nbt);
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
index 49915ec0ee5fb6e7d25b079e0410942d44aa1e33..049e6838035d447e31371806e1b0247b6acce739 100644
index 267f49bf00f5bbd5541e25c938f727a5bafd8eb2..b06946ea57285bb9ec0a70854c9359af9d72e979 100644
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java
@@ -169,6 +169,23 @@ public class Frog extends Animal implements VariantHolder<Holder<FrogVariant>> {
@@ -79,7 +79,7 @@ index 49915ec0ee5fb6e7d25b079e0410942d44aa1e33..049e6838035d447e31371806e1b0247b
protected Brain.Provider<Frog> brainProvider() {
return Brain.provider(MEMORY_TYPES, SENSOR_TYPES);
diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
index fb91677fb03b7bc1decdf181b7b15d971ffacdc2..431fb29b39426e9404da331ab58a0d14232069a5 100644
index 7e92e8c4fec36c8838604f17cf366cc80e82b19b..16802b8e2f624b729241eca5aed7acdd53d2fc32 100644
--- a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
+++ b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java
@@ -95,6 +95,23 @@ public class Tadpole extends AbstractFish {
@@ -130,7 +130,7 @@ index 464a16df15d8759d66f94ad080d1ea28b3f6474c..3742917207572f0698c779a262b887c0
protected void defineSynchedData(SynchedEntityData.Builder builder) {
super.defineSynchedData(builder);
diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
index fcfea2cdd5df9fe505df3f7c866cd8d27ad9b249..aa663c0e4f392f8c1579862f75accf82e558bb54 100644
index cf231928bae5493b0684109c769d7da4dc36f872..bc8d7ab331239077079be74527714e170b1d1578 100644
--- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
+++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java
@@ -153,6 +153,23 @@ public class Warden extends Monster implements VibrationSystem {
@@ -213,10 +213,10 @@ index 4933dc4d6e8e6920feed37f3a68adf74730fee1e..21126e3122ffc5ecd64293e108a181cf
org.bukkit.event.inventory.InventoryType.ENDER_CHEST.setDefaultSize(enderChestSixRows ? 54 : 27);
enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 57ddb4e6a464567cc67e09ce06218cc25af4ddf9..7de33fa1e349a784bcceeda5606402cf64a056d6 100644
index 9f01bef0abbc059629fbc38304d5d5df79589b70..afdf46955a339534cbcad43709fd2b10a4cf5863 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1135,12 +1135,20 @@ public class PurpurWorldConfig {
@@ -1137,12 +1137,20 @@ public class PurpurWorldConfig {
public boolean allayControllable = true;
public double allayMaxHealth = 20.0D;
public double allayScale = 1.0D;
@@ -237,7 +237,7 @@ index 57ddb4e6a464567cc67e09ce06218cc25af4ddf9..7de33fa1e349a784bcceeda5606402cf
}
public boolean armadilloRidable = false;
@@ -1290,7 +1298,15 @@ public class PurpurWorldConfig {
@@ -1292,7 +1300,15 @@ public class PurpurWorldConfig {
public double camelMovementSpeedMin = 0.09D;
public double camelMovementSpeedMax = 0.09D;
public int camelBreedingTicks = 6000;
@@ -253,7 +253,7 @@ index 57ddb4e6a464567cc67e09ce06218cc25af4ddf9..7de33fa1e349a784bcceeda5606402cf
camelRidableInWater = getBoolean("mobs.camel.ridable-in-water", camelRidableInWater);
camelMaxHealthMin = getDouble("mobs.camel.attributes.max_health.min", camelMaxHealthMin);
camelMaxHealthMax = getDouble("mobs.camel.attributes.max_health.max", camelMaxHealthMax);
@@ -1755,7 +1771,17 @@ public class PurpurWorldConfig {
@@ -1757,7 +1773,17 @@ public class PurpurWorldConfig {
public boolean frogControllable = true;
public float frogRidableJumpHeight = 0.65F;
public int frogBreedingTicks = 6000;
@@ -271,7 +271,7 @@ index 57ddb4e6a464567cc67e09ce06218cc25af4ddf9..7de33fa1e349a784bcceeda5606402cf
frogRidable = getBoolean("mobs.frog.ridable", frogRidable);
frogRidableInWater = getBoolean("mobs.frog.ridable-in-water", frogRidableInWater);
frogControllable = getBoolean("mobs.frog.controllable", frogControllable);
@@ -2767,7 +2793,15 @@ public class PurpurWorldConfig {
@@ -2769,7 +2795,15 @@ public class PurpurWorldConfig {
public double snifferMaxHealth = 14.0D;
public double snifferScale = 1.0D;
public int snifferBreedingTicks = 6000;
@@ -287,7 +287,7 @@ index 57ddb4e6a464567cc67e09ce06218cc25af4ddf9..7de33fa1e349a784bcceeda5606402cf
snifferRidable = getBoolean("mobs.sniffer.ridable", snifferRidable);
snifferRidableInWater = getBoolean("mobs.sniffer.ridable-in-water", snifferRidableInWater);
snifferControllable = getBoolean("mobs.sniffer.controllable", snifferControllable);
@@ -2875,7 +2909,17 @@ public class PurpurWorldConfig {
@@ -2877,7 +2911,17 @@ public class PurpurWorldConfig {
public boolean tadpoleRidable = false;
public boolean tadpoleRidableInWater = true;
public boolean tadpoleControllable = true;
@@ -305,7 +305,7 @@ index 57ddb4e6a464567cc67e09ce06218cc25af4ddf9..7de33fa1e349a784bcceeda5606402cf
tadpoleRidable = getBoolean("mobs.tadpole.ridable", tadpoleRidable);
tadpoleRidableInWater = getBoolean("mobs.tadpole.ridable-in-water", tadpoleRidableInWater);
tadpoleControllable = getBoolean("mobs.tadpole.controllable", tadpoleControllable);
@@ -3107,7 +3151,17 @@ public class PurpurWorldConfig {
@@ -3109,7 +3153,17 @@ public class PurpurWorldConfig {
public boolean wardenRidable = false;
public boolean wardenRidableInWater = true;
public boolean wardenControllable = true;

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Block Log4Shell exploit
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 9947271607c2b28b6175334c22f08bf49f30fe4c..621202a01415dec318df62b4af1d2ef00c6b36b0 100644
index 8a468f0c09daf23cfbddb3c607a758c6411babfc..28061983ab0abaf0ddc95b5eaedcf153bdb07c9f 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2514,6 +2514,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -2518,6 +2518,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
}
private void tryHandleChat(String s, Runnable runnable, boolean sync) { // CraftBukkit
@@ -16,7 +16,7 @@ index 9947271607c2b28b6175334c22f08bf49f30fe4c..621202a01415dec318df62b4af1d2ef0
if (ServerGamePacketListenerImpl.isChatMessageIllegal(s)) {
this.disconnectAsync((Component) Component.translatable("multiplayer.disconnect.illegal_characters"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_CHARACTERS); // Paper // Paper - add proper async disconnect
} else if (this.player.isRemoved() || this.player.getChatVisibility() == ChatVisiblity.HIDDEN) { // CraftBukkit - dead men tell no tales
@@ -2545,6 +2546,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -2549,6 +2550,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
}
}
@@ -33,10 +33,10 @@ index 9947271607c2b28b6175334c22f08bf49f30fe4c..621202a01415dec318df62b4af1d2ef0
for (int i = 0; i < message.length(); ++i) {
if (!StringUtil.isAllowedChatCharacter(message.charAt(i))) {
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 22abd7c837fe35423bd0c9e94107d47156d09266..ee5b34c7d7ed68f87e2f5c1c786031043f462636 100644
index d43577ee22c5cafb8bd84d96c24292550a52795c..3dfd941a95ee24db4aae6bd003fa58e26cc90dba 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -758,6 +758,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -759,6 +759,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
Preconditions.checkArgument(msg != null, "msg cannot be null");
if (this.getHandle().connection == null) return;

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Option to disable moved wrongly threshold
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 621202a01415dec318df62b4af1d2ef00c6b36b0..431505a5ec010f56002ef0f07f22511387162f61 100644
index 28061983ab0abaf0ddc95b5eaedcf153bdb07c9f..d0972746c7def6d6930c447f38d76fd5297a8a7e 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -592,7 +592,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -28,7 +28,7 @@ index 621202a01415dec318df62b4af1d2ef00c6b36b0..431505a5ec010f56002ef0f07f225113
ServerGamePacketListenerImpl.LOGGER.warn("{} (vehicle of {}) moved wrongly! {}", new Object[]{entity.getName().getString(), this.player.getName().getString(), Math.sqrt(d10)});
}
@@ -1536,7 +1536,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -1537,7 +1537,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
io.papermc.paper.event.player.PlayerFailMoveEvent event = fireFailMove(io.papermc.paper.event.player.PlayerFailMoveEvent.FailReason.MOVED_TOO_QUICKLY,
toX, toY, toZ, toYaw, toPitch, true);
if (!event.isAllowed()) {
@@ -37,7 +37,7 @@ index 621202a01415dec318df62b4af1d2ef00c6b36b0..431505a5ec010f56002ef0f07f225113
ServerGamePacketListenerImpl.LOGGER.warn("{} moved too quickly! {},{},{}", new Object[]{this.player.getName().getString(), d6, d7, d8});
this.teleport(this.player.getX(), this.player.getY(), this.player.getZ(), this.player.getYRot(), this.player.getXRot());
return;
@@ -1606,7 +1606,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -1607,7 +1607,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
d10 = d6 * d6 + d7 * d7 + d8 * d8;
boolean movedWrongly = false; // Paper - Add fail move event; rename

View File

@@ -64,7 +64,7 @@ index aea9a45c0916501f71018d3250b56da435f5664e..564395b9be9f161dc3ea7956b9b2432d
}
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 48d6b3d45d73c8f235f51a9652f33c81b3472a12..d791deb1d345daeab2cfa86d0baee944edb28bc1 100644
index d0653880e8f8852a27e16c5c964fb7b86c40d542..ca5ec4eb6d9c9a0d63bf942611fc3e70fa338fcc 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -644,6 +644,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -435,10 +435,10 @@ index 65a0d9e7dd742732974774daabce02e9e52039ac..53e1261ef3ec66d90bcc17e99cb21e7d
Rotation rotation = Rotation.getRandom(worldgenRandom);
StructureTemplatePool structureTemplatePool = structurePool.unwrapKey()
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
index 2dd38f40c8c0b48b12ffe557ceeed69213066a6a..11cad88fc387f64df0f4e13558611c4d69487266 100644
index c2bffe3450ee9f768e00a23ec09df74d7a06d49b..922d1037352198432c16b782c892467c76e17428 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java
@@ -205,7 +205,12 @@ public class CraftChunk implements Chunk {
@@ -206,7 +206,12 @@ public class CraftChunk implements Chunk {
@Override
public boolean isSlimeChunk() {
// 987234911L is deterimined in EntitySlime when seeing if a slime can spawn in a chunk
@@ -453,7 +453,7 @@ index 2dd38f40c8c0b48b12ffe557ceeed69213066a6a..11cad88fc387f64df0f4e13558611c4d
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index d57338319e8267fe83ae6578322dfcc1eba336aa..1dacae97862e841fcb1c96dfb6c4fe4e87b872fe 100644
index 0ab9abc08d07d6dba5de2ffdb331598a1fbe6ac9..d7ece9ea131ce0c864bebd65442c1187f1864a40 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1412,7 +1412,11 @@ public final class CraftServer implements Server {