9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2025-12-19 15:09:25 +00:00

Updated Upstream (Gale/Purpur)

This commit is contained in:
Dreeam
2024-05-07 08:32:10 -04:00
parent 234d7e311a
commit b81d95630e
20 changed files with 282 additions and 120 deletions

View File

@@ -1,7 +1,7 @@
group = org.dreeam.leaf
version = 1.20.6-R0.1-SNAPSHOT
galeCommit = 6582b9b215859997f52debf81c75dfb7aec3e2ac
galeCommit = 593d73f96816716e0ef7c017140b914bf0c93279
org.gradle.caching = true
org.gradle.parallel = true

View File

@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-rc-1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME

2
gradlew vendored
View File

@@ -55,7 +55,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Leaf config files
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index db539f0324f2d7c9a9bcb2738bd8eb4158f8d4b5..defa5be01d2f396a1e46c3ad9aa1d20e7c505424 100644
index 359dcc9e25a49df5b79e568bfbf7a03e79b6d645..4fefbde12a189a481efd0fd0fec06ff0bd02a57b 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -2307,6 +2307,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@@ -2310,6 +2310,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
// Paper end

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Purpur API Changes
Original license: MIT
Original project: https://github.com/PurpurMC/Purpur
Commit: a90a4730d672968428e371f024c8317b64eba9af
Commit: a398e71e9d559597b85108ca91b929738352582e
Patches below are removed in this patch:
Pufferfish-API-Changes.patch
@@ -33,10 +33,10 @@ index a736d7bcdc5861a01b66ba36158db1c716339346..22fc165fd9c95f0f3ae1be7a0857e48c
@Override
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index 1a4eae45a9352fcc55b8c8a63a126d734604e8c6..a3c696dfb2d6b00ba3f681b74e2cd56c65cf16b2 100644
index 8dfb22c3cf06c8037ca709ebd486a37c71a5a352..76dbc19ab0b87a3b081dbc38e8185268a50f4e3e 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2974,4 +2974,127 @@ public final class Bukkit {
@@ -2977,4 +2977,127 @@ public final class Bukkit {
public static Server.Spigot spigot() {
return server.spigot();
}
@@ -255,10 +255,10 @@ index 918a045165cdcde264bc24082b7afebb407271de..687d11619379aead7f665d4a5f8f8bcc
+ // Purpur end
}
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
index 82d009c0bbe4b3026a535e02d6e0ed20c7bd525d..0366400fe6dea7af40badaa3335b49ff5992a516 100644
index 7a337fe908915f8ea487a0b9236c511cb07d5e66..1dd02e2782364bf25521088cf8858d3443643447 100644
--- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java
@@ -11653,4 +11653,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
@@ -11657,4 +11657,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
public boolean isEnabledByFeature(@NotNull World world) {
return Bukkit.getDataPackManager().isEnabledByFeature(this, world);
}
@@ -411,10 +411,10 @@ index 30298a629b39bd43ce14b414fc697b2dfcbea89c..ce00af9121de7a910aaea4e0685a06d4
+ // Purpur end - OfflinePlayer API
}
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index defa5be01d2f396a1e46c3ad9aa1d20e7c505424..20b9547f892e6da0337e1f19015fbb2d144cf871 100644
index 4fefbde12a189a481efd0fd0fec06ff0bd02a57b..5f306e9cf3ca332338a82414a420f3c7a58c31fe 100644
--- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java
@@ -2307,6 +2307,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@@ -2310,6 +2310,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
// Paper end
@@ -433,7 +433,7 @@ index defa5be01d2f396a1e46c3ad9aa1d20e7c505424..20b9547f892e6da0337e1f19015fbb2d
// Leaf start
@NotNull
public org.bukkit.configuration.file.YamlConfiguration getLeafConfig()
@@ -2624,4 +2636,104 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
@@ -2627,4 +2639,104 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
long getLastTickOversleepTime();
// Gale end - YAPFA - last tick time - API
@@ -996,10 +996,10 @@ index bc84b892cae5fe7019a3ad481e9da79956efa1fe..48eb5b00c460cccde29d327cef1d63fc
+ // Purpur end
}
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index 0b3a1f3285fc0d8954f4204a93d3905df01cd828..2ba39b38a97333f867bcabdf593448ca14255703 100644
index ba3edf4cb1a2fc0529465d6973ec086291bae41c..04392bebe3a0ca1cff8932610393cb3dbec1c722 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -3806,4 +3806,123 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
@@ -3816,4 +3816,123 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
@Override
Spigot spigot();
// Spigot end

View File

@@ -7,10 +7,10 @@ Original license: MIT
Original project: https://github.com/KeYiMC/KeYi
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index 2ba39b38a97333f867bcabdf593448ca14255703..fbe4f03bec652e096c46496f1f52080ce43982eb 100644
index 04392bebe3a0ca1cff8932610393cb3dbec1c722..2d454fb1446c2d8808253b4f020c0afda341545c 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -3925,4 +3925,22 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
@@ -3935,4 +3935,22 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
sendDeathScreen(message);
}
// Purpur end

View File

@@ -7,10 +7,10 @@ Original license: MIT
Original project: https://github.com/Cryptite/Slice
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index fbe4f03bec652e096c46496f1f52080ce43982eb..55a578e216cbc160d98d5f5675d8e3c52fa8c178 100644
index 2d454fb1446c2d8808253b4f020c0afda341545c..e2dbb6bf5a424d7d8b9e9b233badc2fe8cbbf28f 100644
--- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java
@@ -3628,6 +3628,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
@@ -3638,6 +3638,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
String getClientBrandName();
// Paper end

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Purpur generated-api Changes
Original license: MIT
Original project: https://github.com/PurpurMC/Purpur
Commit: a90a4730d672968428e371f024c8317b64eba9af
Commit: a398e71e9d559597b85108ca91b929738352582e
diff --git a/com/destroystokyo/paper/entity/ai/VanillaGoal.java b/com/destroystokyo/paper/entity/ai/VanillaGoal.java
index 43f4deacef349502cbb207aafc4f9cb7a75177c5..6b692c24a62e2172116a6b9c371b1c0e2411c27e 100644

View File

@@ -9,7 +9,7 @@ Fix-pufferfish-issues.patch
Original license: MIT
Original project: https://github.com/PurpurMC/Purpur
Commit: a90a4730d672968428e371f024c8317b64eba9af
Commit: a398e71e9d559597b85108ca91b929738352582e
Patches below are removed in this patch:
Metrics changes in Purpur-config-files.patch
@@ -657,10 +657,10 @@ index a024c697a65bbab27408da1d6a75e531d9719b47..e4fab82b369f2c2ea0d8c8acd814d061
// Paper end - Add drops to shear events
continue;
diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java
index 6da6a7befa2dc8988900abee03d24ba894939932..8c9e214f6d77b3118750f63398a5f3881989cb42 100644
index 20dbef631bbb10285cc8060652247d00b2e1472e..364bbcd77316e781eefa5e40738b368331324d77 100644
--- a/src/main/java/net/minecraft/network/Connection.java
+++ b/src/main/java/net/minecraft/network/Connection.java
@@ -608,11 +608,20 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
@@ -609,11 +609,20 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
private static final int MAX_PER_TICK = io.papermc.paper.configuration.GlobalConfiguration.get().misc.maxJoinsPerTick; // Paper - Buffer joins to world
private static int joinAttemptsThisTick; // Paper - Buffer joins to world
private static int currTick; // Paper - Buffer joins to world
@@ -1279,7 +1279,7 @@ index cdcbd708b7ee74002428ca8a148d857912ce14ab..bda8c6af98945d3e5fa671b9b3bc016d
}
// Paper end - Fix merchant inventory not closing on entity removal
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index f4829e31111bb640901e8143ed3afa4de3e28b7d..ada4956a0b204cb098e90979aff14db32455f481 100644
index f4829e31111bb640901e8143ed3afa4de3e28b7d..2707bc1dc8b45a239ffe0b0aeffe96a1359b9a5c 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -299,6 +299,10 @@ public class ServerPlayer extends Player {
@@ -1392,7 +1392,15 @@ index f4829e31111bb640901e8143ed3afa4de3e28b7d..ada4956a0b204cb098e90979aff14db3
}
((ServerLevel) this.level()).updateSleepingPlayerList();
@@ -1974,6 +2017,26 @@ public class ServerPlayer extends Player {
@@ -1640,6 +1683,7 @@ public class ServerPlayer extends Player {
@Override
public void openTextEdit(SignBlockEntity sign, boolean front) {
+ if (level().purpurConfig.signAllowColors) this.connection.send(sign.getTranslatedUpdatePacket(textFilteringEnabled, front)); // Purpur
this.connection.send(new ClientboundBlockUpdatePacket(this.level(), sign.getBlockPos()));
this.connection.send(new ClientboundOpenSignEditorPacket(sign.getBlockPos(), front));
}
@@ -1974,6 +2018,26 @@ public class ServerPlayer extends Player {
this.lastSentExp = -1; // CraftBukkit - Added to reset
}
@@ -1419,7 +1427,7 @@ index f4829e31111bb640901e8143ed3afa4de3e28b7d..ada4956a0b204cb098e90979aff14db3
@Override
public void displayClientMessage(Component message, boolean overlay) {
this.sendSystemMessage(message, overlay);
@@ -2299,8 +2362,68 @@ public class ServerPlayer extends Player {
@@ -2299,8 +2363,68 @@ public class ServerPlayer extends Player {
public void resetLastActionTime() {
this.lastActionTime = Util.getMillis();
@@ -1488,7 +1496,7 @@ index f4829e31111bb640901e8143ed3afa4de3e28b7d..ada4956a0b204cb098e90979aff14db3
public ServerStatsCounter getStats() {
return this.stats;
}
@@ -2868,4 +2991,50 @@ public class ServerPlayer extends Player {
@@ -2868,4 +2992,50 @@ public class ServerPlayer extends Player {
return (CraftPlayer) super.getBukkitEntity();
}
// CraftBukkit end
@@ -1614,7 +1622,7 @@ index 83196467cf7152ba756f5f6d179ee17c00a4325f..5972362c1c968dbabb799824227c6ae3
try {
String channels = payload.toString(com.google.common.base.Charsets.UTF_8);
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 5d02133cffb226ea7e48f517c1414ee7933b300f..45cf2c58fac237fe169a4be75c9a445a002389dd 100644
index 79894b08d778a73336b3d265759baeb837d14ada..8432a36a7b047cf2d930735feb426233769e1931 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -336,6 +336,20 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -1692,7 +1700,86 @@ index 5d02133cffb226ea7e48f517c1414ee7933b300f..45cf2c58fac237fe169a4be75c9a445a
server.scheduleOnMain(() -> this.disconnect("Book too large!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause
return;
}
@@ -1315,8 +1344,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -1221,10 +1250,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
Objects.requireNonNull(list);
stream.forEach(list::add);
+ // Purpur start
+ boolean hasEditPerm = getCraftPlayer().hasPermission("purpur.book.color.edit");
+ boolean hasSignPerm = hasEditPerm || getCraftPlayer().hasPermission("purpur.book.color.sign");
+ // Purpur end
Consumer<List<FilteredText>> consumer = optional.isPresent() ? (list1) -> {
- this.signBook((FilteredText) list1.get(0), list1.subList(1, list1.size()), i);
+ this.signBook((FilteredText) list1.get(0), list1.subList(1, list1.size()), i, hasSignPerm); // Purpur
} : (list1) -> {
- this.updateBookContents(list1, i);
+ this.updateBookContents(list1, i, hasEditPerm); // Purpur
};
this.filterTextPacket((List) list).thenAcceptAsync(consumer, this.server);
@@ -1232,13 +1265,18 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
}
private void updateBookContents(List<FilteredText> pages, int slotId) {
+ // Purpur start
+ updateBookContents(pages, slotId, false);
+ }
+ private void updateBookContents(List<FilteredText> pages, int slotId, boolean hasPerm) {
+ // Purpur end
// CraftBukkit start
ItemStack handItem = this.player.getInventory().getItem(slotId);
ItemStack itemstack = handItem.copy();
// CraftBukkit end
if (itemstack.is(Items.WRITABLE_BOOK)) {
- List<Filterable<String>> list1 = pages.stream().map(this::filterableFromOutgoing).toList();
+ List<Filterable<String>> list1 = pages.stream().map(filteredText -> filterableFromOutgoing(filteredText).map(s -> color(s, hasPerm))).toList(); // Purpur
itemstack.set(DataComponents.WRITABLE_BOOK_CONTENT, new WritableBookContent(list1));
this.player.getInventory().setItem(slotId, CraftEventFactory.handleEditBookEvent(this.player, slotId, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent)
@@ -1246,6 +1284,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
}
private void signBook(FilteredText title, List<FilteredText> pages, int slotId) {
+ // Purpur start
+ signBook(title, pages, slotId, false);
+ }
+ private void signBook(FilteredText title, List<FilteredText> pages, int slotId, boolean hasPerm) {
+ // Purpur end
ItemStack itemstack = this.player.getInventory().getItem(slotId);
if (itemstack.is(Items.WRITABLE_BOOK)) {
@@ -1253,10 +1296,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
itemstack1.remove(DataComponents.WRITABLE_BOOK_CONTENT);
List<Filterable<Component>> list1 = (List<Filterable<Component>>) (List) pages.stream().map((filteredtext1) -> { // CraftBukkit - decompile error
- return this.filterableFromOutgoing(filteredtext1).map(Component::literal);
+ return this.filterableFromOutgoing(filteredtext1).map(s -> hexColor(s, hasPerm)); // Purpur
}).toList();
- itemstack1.set(DataComponents.WRITTEN_BOOK_CONTENT, new WrittenBookContent(this.filterableFromOutgoing(title), this.player.getName().getString(), 0, list1, true));
+ itemstack1.set(DataComponents.WRITTEN_BOOK_CONTENT, new WrittenBookContent(this.filterableFromOutgoing(title).map(s -> color(s, hasPerm)), this.player.getName().getString(), 0, list1, true)); // Purpur
CraftEventFactory.handleEditBookEvent(this.player, slotId, itemstack, itemstack1); // CraftBukkit
this.player.getInventory().setItem(slotId, itemstack); // CraftBukkit - event factory updates the hand book
}
@@ -1266,6 +1309,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
return this.player.isTextFilteringEnabled() ? Filterable.passThrough(message.filteredOrEmpty()) : Filterable.from(message);
}
+ // Purpur start
+ private Component hexColor(String str, boolean hasPerm) {
+ return hasPerm ? PaperAdventure.asVanilla(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacyAmpersand().deserialize(str)) : Component.literal(str);
+ }
+
+ private String color(String str, boolean hasPerm) {
+ return hasPerm ? org.bukkit.ChatColor.color(str, false) : str;
+ }
+ // Purpur end
+
@Override
public void handleEntityTagQuery(ServerboundEntityTagQueryPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());
@@ -1315,8 +1368,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@Override
public void handleMovePlayer(ServerboundMovePlayerPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());
@@ -1710,7 +1797,7 @@ index 5d02133cffb226ea7e48f517c1414ee7933b300f..45cf2c58fac237fe169a4be75c9a445a
} else {
ServerLevel worldserver = this.player.serverLevel();
@@ -1503,7 +1540,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -1503,7 +1564,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
movedWrongly = true;
if (event.getLogWarning())
// Paper end
@@ -1719,7 +1806,7 @@ index 5d02133cffb226ea7e48f517c1414ee7933b300f..45cf2c58fac237fe169a4be75c9a445a
} // Paper
}
@@ -1571,6 +1608,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -1571,6 +1632,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
this.lastYaw = to.getYaw();
this.lastPitch = to.getPitch();
@@ -1728,7 +1815,7 @@ index 5d02133cffb226ea7e48f517c1414ee7933b300f..45cf2c58fac237fe169a4be75c9a445a
Location oldTo = to.clone();
PlayerMoveEvent event = new PlayerMoveEvent(player, from, to);
this.cserver.getPluginManager().callEvent(event);
@@ -1612,6 +1651,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -1612,6 +1675,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
this.player.resetCurrentImpulseContext();
}
@@ -1742,7 +1829,7 @@ index 5d02133cffb226ea7e48f517c1414ee7933b300f..45cf2c58fac237fe169a4be75c9a445a
this.player.checkMovementStatistics(this.player.getX() - d3, this.player.getY() - d4, this.player.getZ() - d5);
this.lastGoodX = this.player.getX();
this.lastGoodY = this.player.getY();
@@ -1651,6 +1697,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -1651,6 +1721,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
return false;
}
// Paper end - optimise out extra getCubes
@@ -1758,7 +1845,7 @@ index 5d02133cffb226ea7e48f517c1414ee7933b300f..45cf2c58fac237fe169a4be75c9a445a
private boolean isPlayerCollidingWithAnythingNew(LevelReader world, AABB box, double newX, double newY, double newZ) {
AABB axisalignedbb1 = this.player.getBoundingBox().move(newX - this.player.getX(), newY - this.player.getY(), newZ - this.player.getZ());
Iterable<VoxelShape> iterable = world.getCollisions(this.player, axisalignedbb1.deflate(9.999999747378752E-6D));
@@ -1661,7 +1716,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -1661,7 +1740,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
do {
if (!iterator.hasNext()) {
@@ -1767,7 +1854,7 @@ index 5d02133cffb226ea7e48f517c1414ee7933b300f..45cf2c58fac237fe169a4be75c9a445a
}
voxelshape1 = (VoxelShape) iterator.next();
@@ -1999,6 +2054,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -1999,6 +2078,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
boolean cancelled;
if (movingobjectposition == null || movingobjectposition.getType() != HitResult.Type.BLOCK) {
@@ -1775,7 +1862,7 @@ index 5d02133cffb226ea7e48f517c1414ee7933b300f..45cf2c58fac237fe169a4be75c9a445a
org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemstack, enumhand);
cancelled = event.useItemInHand() == Event.Result.DENY;
} else {
@@ -2783,6 +2839,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -2785,6 +2865,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
AABB axisalignedbb = entity.getBoundingBox();
if (this.player.canInteractWithEntity(axisalignedbb, 1.0D)) {
@@ -1783,7 +1870,7 @@ index 5d02133cffb226ea7e48f517c1414ee7933b300f..45cf2c58fac237fe169a4be75c9a445a
packet.dispatch(new ServerboundInteractPacket.Handler() {
private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit
ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand);
@@ -2796,6 +2853,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -2798,6 +2879,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event);
@@ -3607,7 +3694,7 @@ index 68bc8699a9389d118411ea7134ea0e0588adf8dc..1731147abd53ca2149683ea593e96523
if (baseEntity == null) {
if (this.isCombat && (!targetEntity.canBeSeenAsEnemy() || targetEntity.level().getDifficulty() == Difficulty.PEACEFUL)) {
diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
index f223e369dd8d781e32e1f06572b2ae717afd6f32..f1a3e05d993e87cb93e6916d2c5a130d7d852b6a 100644
index f223e369dd8d781e32e1f06572b2ae717afd6f32..d88bf61a864c8d2f579a43e831cfa0e1740a5317 100644
--- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java
+++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java
@@ -44,12 +44,59 @@ public class Bat extends AmbientCreature {
@@ -3623,7 +3710,7 @@ index f223e369dd8d781e32e1f06572b2ae717afd6f32..f1a3e05d993e87cb93e6916d2c5a130d
+ // Purpur start
+ @Override
+ public boolean shouldSendAttribute(net.minecraft.world.entity.ai.attributes.Attribute attribute) { return attribute != Attributes.FLYING_SPEED; } // Fixes log spam on clients
+ public boolean shouldSendAttribute(net.minecraft.world.entity.ai.attributes.Attribute attribute) { return attribute != Attributes.FLYING_SPEED.value(); } // Fixes log spam on clients
+
+ @Override
+ public boolean isRidable() {
@@ -6319,7 +6406,7 @@ index 30b87b5cb18c25cdd04eab64cfbe5acd6c1b6d84..01dc59695f295657b1cd7bb015558bfc
this.turtle.setSpeed(Mth.lerp(0.125F, this.turtle.getSpeed(), f1));
this.turtle.setDeltaMovement(this.turtle.getDeltaMovement().add(0.0D, (double) this.turtle.getSpeed() * d1 * 0.1D, 0.0D));
diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
index b5ee82e5abfecc59e2362628f288b76881855f36..b12544d1280f39b6c365317a0f4965c8d65b6497 100644
index cebbb7341f86b13dcbfc3a41cbe264e9d4b68d60..e1f6202df983be2510436538904a45beedbdc9c2 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
@@ -30,6 +30,8 @@ import net.minecraft.world.DifficultyInstance;
@@ -6514,7 +6601,7 @@ index b5ee82e5abfecc59e2362628f288b76881855f36..b12544d1280f39b6c365317a0f4965c8
this.interestedAngleO = this.interestedAngle;
if (this.isInterested()) {
this.interestedAngle += (1.0F - this.interestedAngle) * 0.4F;
@@ -505,6 +629,19 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder<Hol
@@ -507,6 +631,19 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder<Hol
itemstack.consume(1, player);
this.tryToTame(player);
return InteractionResult.SUCCESS;
@@ -6534,7 +6621,7 @@ index b5ee82e5abfecc59e2362628f288b76881855f36..b12544d1280f39b6c365317a0f4965c8
} else {
return super.mobInteract(player, hand);
}
@@ -512,7 +649,7 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder<Hol
@@ -514,7 +651,7 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder<Hol
private void tryToTame(Player player) {
// CraftBukkit - added event call and isCancelled check.
@@ -8535,10 +8622,10 @@ index aee2fa184bc5723dfd3d54f460a173982d874c8b..27db17e19dd95e99f7bd67747eba3c30
if (this.nextHeightOffsetChangeTick <= 0) {
this.nextHeightOffsetChangeTick = 100;
diff --git a/src/main/java/net/minecraft/world/entity/monster/Bogged.java b/src/main/java/net/minecraft/world/entity/monster/Bogged.java
index 754eb747179d9318bc5a3883e5622cc400c4e06c..4e929539cb093d58f3311d5f6a62bd1aeb71cfb0 100644
index e9f9b041ae7195e9d23bd446454b1d8c47a1ace1..03b1023e182744a84d324bdad082cc1b9e574e30 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Bogged.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Bogged.java
@@ -155,7 +155,7 @@ public class Bogged extends AbstractSkeleton implements Shearable {
@@ -159,7 +159,7 @@ public class Bogged extends AbstractSkeleton implements Shearable {
// Paper start - shear drops API
@Override
@@ -10287,10 +10374,10 @@ index ac411202c0029052a962b51b015da191b124de5f..ae3eb87af8d3853be82c2002507141e4
this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true));
this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false));
diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java
index 2d7b7c949faaaaae94c0043132a4a822f55df104..9551bd7c9bed37cf17910e7f71b82ed20fb2d759 100644
index 2d7b7c949faaaaae94c0043132a4a822f55df104..dbfcca8adb7afa7a3101f22c2bc48aff6abae4a2 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java
@@ -68,14 +68,54 @@ public class Ravager extends Raider {
@@ -68,14 +68,55 @@ public class Ravager extends Raider {
this.setPathfindingMalus(PathType.LEAVES, 0.0F);
}
@@ -10337,6 +10424,7 @@ index 2d7b7c949faaaaae94c0043132a4a822f55df104..9551bd7c9bed37cf17910e7f71b82ed2
super.registerGoals();
this.goalSelector.addGoal(0, new FloatGoal(this));
+ this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur
+ if (level().purpurConfig.ravagerAvoidRabbits) this.goalSelector.addGoal(3, new net.minecraft.world.entity.ai.goal.AvoidEntityGoal<>(this, net.minecraft.world.entity.animal.Rabbit.class, 6.0F, 1.0D, 1.2D)); // Purpur
this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0D, true));
this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.4D));
this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F));
@@ -10345,7 +10433,7 @@ index 2d7b7c949faaaaae94c0043132a4a822f55df104..9551bd7c9bed37cf17910e7f71b82ed2
this.targetSelector.addGoal(2, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers());
this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, true));
this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true, (entityliving) -> {
@@ -128,7 +168,7 @@ public class Ravager extends Raider {
@@ -128,7 +169,7 @@ public class Ravager extends Raider {
@Override
public void aiStep() {
super.aiStep();
@@ -10354,7 +10442,7 @@ index 2d7b7c949faaaaae94c0043132a4a822f55df104..9551bd7c9bed37cf17910e7f71b82ed2
if (this.isImmobile()) {
this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(0.0D);
} else {
@@ -138,7 +178,7 @@ public class Ravager extends Raider {
@@ -138,7 +179,7 @@ public class Ravager extends Raider {
this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(Mth.lerp(0.1D, d1, d0));
}
@@ -10363,7 +10451,7 @@ index 2d7b7c949faaaaae94c0043132a4a822f55df104..9551bd7c9bed37cf17910e7f71b82ed2
boolean flag = false;
AABB axisalignedbb = this.getBoundingBox().inflate(0.2D);
Iterator iterator = BlockPos.betweenClosed(Mth.floor(axisalignedbb.minX), Mth.floor(axisalignedbb.minY), Mth.floor(axisalignedbb.minZ), Mth.floor(axisalignedbb.maxX), Mth.floor(axisalignedbb.maxY), Mth.floor(axisalignedbb.maxZ)).iterator();
@@ -148,7 +188,7 @@ public class Ravager extends Raider {
@@ -148,7 +189,7 @@ public class Ravager extends Raider {
BlockState iblockdata = this.level().getBlockState(blockposition);
Block block = iblockdata.getBlock();
@@ -13707,7 +13795,7 @@ index 49557d6f22c5725c663a231deab019d4f6fe95fa..046652e8f9c5dcdf7c90acb9391214ca
return true;
diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java
index 0f6504a7160bc304b3af554f8740c65e2987cd37..9a8092602c96ddd77c8e6fcfe7a6f5ed733023a2 100644
index 1f52feb5684ee1bab710e1557cf69b43b4d4dfd4..78f124f5204e4af9318ca3eeced6b1e3353b210f 100644
--- a/src/main/java/net/minecraft/world/item/CrossbowItem.java
+++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java
@@ -60,7 +60,7 @@ public class CrossbowItem extends ProjectileWeaponItem {
@@ -13871,7 +13959,7 @@ index 06497b5141e611cc7a1b6030a7b9c54b5c4eda06..28df1b3230762e52b5458ac93a85c9a5
return InteractionResult.PASS;
}
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
index 028d86b7c26724b955e88373c80af5fea7869d67..1545ec1759526ab88838309133e2a16c634ce074 100644
index 1856d56b2ef1f8839bf2526133b945be637ef062..ae3e1ebb26a04e744e5db3ebd68196e0d04028f1 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
@@ -475,6 +475,7 @@ public final class ItemStack implements DataComponentHolder {
@@ -14031,7 +14119,7 @@ index 774c982f28b4f127fc3f036c19dfb47fb9ae3264..d49b60e7e643498b49c03593dc0da2f8
// Paper end - Add PlayerNameEntityEvent
mob.setPersistenceRequired();
diff --git a/src/main/java/net/minecraft/world/item/ProjectileWeaponItem.java b/src/main/java/net/minecraft/world/item/ProjectileWeaponItem.java
index f91ce87491b18f4f4ae6458192d1f320b308102a..aec96d297401b705ca2af97904739afdf1134574 100644
index d27e83c08c45b8514207f26e48ceb1a91ded94be..8f01772a7b06b2acf96a3f922cb9b481f634680b 100644
--- a/src/main/java/net/minecraft/world/item/ProjectileWeaponItem.java
+++ b/src/main/java/net/minecraft/world/item/ProjectileWeaponItem.java
@@ -131,6 +131,14 @@ public abstract class ProjectileWeaponItem extends Item {
@@ -14893,14 +14981,14 @@ index daae7fd6e0148cfba8e359d990748a0c83a3376e..0e06b1bcd906e92c083dc74d56d6d0a2
return random.nextFloat() < f1 ? this.getNext(state) : Optional.empty();
}
diff --git a/src/main/java/net/minecraft/world/level/block/ChestBlock.java b/src/main/java/net/minecraft/world/level/block/ChestBlock.java
index 491474b66856fccb038ee436968c9a5d3e4bf75c..a66499c9bd9af9da5d261a3c1aa23b1d436d4008 100644
index 8fbfd18b3caeed769396b3ffb1b1778b2f38edc0..4cdfd2d181089e0e198d7f2690d1598b54d0ac4b 100644
--- a/src/main/java/net/minecraft/world/level/block/ChestBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/ChestBlock.java
@@ -343,6 +343,7 @@ public class ChestBlock extends AbstractChestBlock<ChestBlockEntity> implements
}
private static boolean isBlockedChestByBlock(BlockGetter world, BlockPos pos) {
+ if (world instanceof Level && ((Level) world).purpurConfig.chestOpenWithBlockOnTop) return false; // Purpur
public static boolean isBlockedChestByBlock(BlockGetter world, BlockPos pos) {
+ if(world instanceof Level && ((Level) world).purpurConfig.chestOpenWithBlockOnTop) return false; // Purpur
BlockPos blockposition1 = pos.above();
return world.getBlockState(blockposition1).isRedstoneConductor(world, blockposition1);
@@ -15102,7 +15190,7 @@ index 7272d70c672b54dcf595beafd7a2ed33c96e35cb..d7f33c676bba279661583d908d3a58c8
ServerLevel worldserver = ((ServerLevel) world).getServer().getLevel(resourcekey);
diff --git a/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java b/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java
index 5f9858ef8d0ec1a74d469ab4426eb1db068873fd..d7ef772444b301d0a3f167679027195e4150b064 100644
index ca92d49ef2010ba00c623491671dcde8ebe697c1..bd65df4588584b8bb001e9dc3656a14e381a0b6d 100644
--- a/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/EnderChestBlock.java
@@ -91,7 +91,7 @@ public class EnderChestBlock extends AbstractChestBlock<EnderChestBlockEntity> i
@@ -16081,7 +16169,7 @@ index 7b263fab4f0014400b3b8e7e33db32f9a125f6ba..f7a6ab35c95ffda73f17843916ddb624
private int ticksInHive;
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java
index 7963afff4b32a0e46be9bdeb413657718cfc14f5..5168e8e9ebb54b6c00acb7f2939262eb06a7426d 100644
index 6349f2e0a5ba30d250f5ffe43771f325c0999a76..8dc1436fe78759cee5247cc28e8a18999e738a1b 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java
@@ -87,6 +87,12 @@ public abstract class BlockEntity {
@@ -16113,7 +16201,7 @@ index 7963afff4b32a0e46be9bdeb413657718cfc14f5..5168e8e9ebb54b6c00acb7f2939262eb
protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) {}
public final CompoundTag saveWithFullMetadata(HolderLookup.Provider registryLookup) {
@@ -397,4 +412,16 @@ public abstract class BlockEntity {
@@ -407,4 +422,16 @@ public abstract class BlockEntity {
<T> T getOrDefault(DataComponentType<? extends T> type, T fallback);
}
@@ -16252,6 +16340,73 @@ index d47bc2f54c4722a0b8c419b99ee57eb3cb25d750..fdeabdcc781b605d6f3ee18528fd380f
+ }
+ // Purpur
}
diff --git a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
index a28be7a332659be655f419d969e0c64e659b6c21..8cd812a25b1cc05ea14675658bf9c1503ebebd51 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
@@ -201,16 +201,31 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C
return this.setText((SignText) textChanger.apply(signtext), front);
}
+ // Purpur start
+ private Component translateColors(org.bukkit.entity.Player player, String line, Style style) {
+ if (level.purpurConfig.signAllowColors) {
+ if (player.hasPermission("purpur.sign.color")) line = line.replaceAll("(?i)&([0-9a-fr])", "\u00a7$1");
+ if (player.hasPermission("purpur.sign.style")) line = line.replaceAll("(?i)&([l-or])", "\u00a7$1");
+ if (player.hasPermission("purpur.sign.magic")) line = line.replaceAll("(?i)&([kr])", "\u00a7$1");
+
+ return io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(line));
+ } else {
+ return Component.literal(line).setStyle(style);
+ }
+ }
+ // Purpur end
+
private SignText setMessages(net.minecraft.world.entity.player.Player entityhuman, List<FilteredText> list, SignText signtext, boolean front) { // CraftBukkit
SignText originalText = signtext; // CraftBukkit
for (int i = 0; i < list.size(); ++i) {
FilteredText filteredtext = (FilteredText) list.get(i);
Style chatmodifier = signtext.getMessage(i, entityhuman.isTextFilteringEnabled()).getStyle();
+ org.bukkit.entity.Player player = (org.bukkit.craftbukkit.entity.CraftPlayer) entityhuman.getBukkitEntity(); // Purpur
if (entityhuman.isTextFilteringEnabled()) {
- signtext = signtext.setMessage(i, Component.literal(net.minecraft.util.StringUtil.filterText(filteredtext.filteredOrEmpty())).setStyle(chatmodifier)); // Paper - filter sign text to chat only
+ signtext = signtext.setMessage(i, translateColors(player, net.minecraft.util.StringUtil.filterText(filteredtext.filteredOrEmpty()), chatmodifier)); // Paper - filter sign text to chat only // Purpur
} else {
- signtext = signtext.setMessage(i, Component.literal(net.minecraft.util.StringUtil.filterText(filteredtext.raw())).setStyle(chatmodifier), Component.literal(net.minecraft.util.StringUtil.filterText(filteredtext.filteredOrEmpty())).setStyle(chatmodifier)); // Paper - filter sign text to chat only
+ signtext = signtext.setMessage(i, translateColors(player, net.minecraft.util.StringUtil.filterText(filteredtext.raw()), chatmodifier), translateColors(player, net.minecraft.util.StringUtil.filterText(filteredtext.filteredOrEmpty()), chatmodifier)); // Paper - filter sign text to chat only // Purpur
}
}
@@ -345,6 +360,28 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C
return new CommandSourceStack(commandSource, Vec3.atCenterOf(pos), Vec2.ZERO, (ServerLevel) world, 2, s, (Component) object, world.getServer(), player); // Paper - Fix commands from signs not firing command events
}
+ // Purpur start
+ public ClientboundBlockEntityDataPacket getTranslatedUpdatePacket(boolean filtered, boolean front) {
+ final CompoundTag nbt = new CompoundTag();
+ this.saveAdditional(nbt, this.getLevel().registryAccess());
+ final Component[] lines = front ? frontText.getMessages(filtered) : backText.getMessages(filtered);
+ final String side = front ? "front_text" : "back_text";
+ for (int i = 0; i < 4; i++) {
+ final var component = io.papermc.paper.adventure.PaperAdventure.asAdventure(lines[i]);
+ final String line = net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacyAmpersand().serialize(component);
+ final var text = net.kyori.adventure.text.Component.text(line);
+ final String json = net.kyori.adventure.text.serializer.gson.GsonComponentSerializer.gson().serialize(text);
+ if (!nbt.contains(side)) nbt.put(side, new CompoundTag());
+ final CompoundTag sideNbt = nbt.getCompound(side);
+ if (!sideNbt.contains("messages")) sideNbt.put("messages", new net.minecraft.nbt.ListTag());
+ final net.minecraft.nbt.ListTag messagesNbt = sideNbt.getList("messages", Tag.TAG_STRING);
+ messagesNbt.set(i, net.minecraft.nbt.StringTag.valueOf(json));
+ }
+ nbt.putString("PurpurEditor", "true");
+ return ClientboundBlockEntityDataPacket.create(this, (blockEntity, registryAccess) -> nbt);
+ }
+ // Purpur end
+
@Override
public ClientboundBlockEntityDataPacket getUpdatePacket() {
return ClientboundBlockEntityDataPacket.create(this);
diff --git a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java
index 3a3182544ca338e81edfa64fd116092775ca0c6c..0e58011d22536051a18388c2d45fd1a30c2f5ffd 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java
@@ -16761,7 +16916,7 @@ index 9d93130f23addb18b97d7f5ec013faef17a74529..29d2fb87a65778926aea2cfc7a5b486c
+ // Purpur end - OfflinePlayer API
}
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 1231a1e2106a75417d1da9dc3e1488704b91a3f1..339b16641a7548d89fb15baad8edf0c5f95db635 100644
index 5f9cc88fbb05e587e022160b392e58a88b7d6fea..483e16f27cd07cc9a0276db9cb9d84d8a41f97d0 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -407,6 +407,20 @@ public final class CraftServer implements Server {
@@ -16954,7 +17109,7 @@ index 2abe6131cc04ed397446c2aa08f77f9da00ce8c5..f27cf4efa3675cee8e6dd45c6f366cda
public Collection<GeneratedStructure> getStructures(int x, int z) {
return this.getStructures(x, z, struct -> true);
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index cd8ca1c9c8253e54c0b34d30b08fb0c2341cc98e..42f08f65207673125b288d4a74fc6d18eb713e9e 100644
index 87a82481476e2011ed33bded68e3a5c2e9e0fd9f..49aa5493f65e6e53553290ab82f91632e9dd6d20 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -196,6 +196,14 @@ public class Main {
@@ -17338,10 +17493,10 @@ index 0ad16ee7b33582d214dab41eeee378d52c8e38ed..16bd1294c219f15ada653ef810bc2d74
+ // Purpur end
}
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 0ff9bb5f5d312503ec4b3cf3bf8c532b09a8f08b..1c1159867c78a54984219a9d56a3838c630c58d8 100644
index 5f896948d158651cd9837364759dbfbcce6b7d21..88948526f9acf4bb2157484b80891902fd843b02 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -565,10 +565,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -574,10 +574,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public void setPlayerListName(String name) {
@@ -17358,7 +17513,7 @@ index 0ff9bb5f5d312503ec4b3cf3bf8c532b09a8f08b..1c1159867c78a54984219a9d56a3838c
if (this.getHandle().connection == null) return; // Paper - Updates are possible before the player has fully joined
for (ServerPlayer player : (List<ServerPlayer>) this.server.getHandle().players) {
if (player.getBukkitEntity().canSee(this)) {
@@ -1429,6 +1434,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -1438,6 +1443,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API
@@ -17369,7 +17524,7 @@ index 0ff9bb5f5d312503ec4b3cf3bf8c532b09a8f08b..1c1159867c78a54984219a9d56a3838c
return false;
}
@@ -2727,6 +2736,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -2736,6 +2745,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.getHandle().getAbilities().walkingSpeed * 2f;
}
@@ -17398,7 +17553,7 @@ index 0ff9bb5f5d312503ec4b3cf3bf8c532b09a8f08b..1c1159867c78a54984219a9d56a3838c
private void validateSpeed(float value) {
Preconditions.checkArgument(value <= 1f && value >= -1f, "Speed value (%s) need to be between -1f and 1f", value);
}
@@ -3513,4 +3544,70 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -3522,4 +3553,70 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
public void setSendViewDistance(final int viewDistance) {
this.getHandle().setSendViewDistance(viewDistance);
}
@@ -18291,10 +18446,10 @@ index 0000000000000000000000000000000000000000..8facd29bac314d4b8897113460f78ea7
+}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..dde2e82e8f3686f6b77fefdaad9beaeb90059c23
index 0000000000000000000000000000000000000000..4a385c42da7ab3be46d5e47d00daee5e0b6da88f
--- /dev/null
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -0,0 +1,3284 @@
@@ -0,0 +1,3291 @@
+package org.purpurmc.purpur;
+
+import net.minecraft.core.registries.BuiltInRegistries;
@@ -19402,6 +19557,11 @@ index 0000000000000000000000000000000000000000..dde2e82e8f3686f6b77fefdaad9beaeb
+ sculkShriekerCanSummonDefault = getBoolean("blocks.sculk_shrieker.can-summon-default", sculkShriekerCanSummonDefault);
+ }
+
+ public boolean signAllowColors = false;
+ private void signSettings() {
+ signAllowColors = getBoolean("blocks.sign.allow-colors", signAllowColors);
+ }
+
+ public boolean slabHalfBreak = false;
+ private void slabSettings() {
+ slabHalfBreak = getBoolean("blocks.slab.break-individual-slabs-when-sneaking", slabHalfBreak);
@@ -20689,6 +20849,7 @@ index 0000000000000000000000000000000000000000..dde2e82e8f3686f6b77fefdaad9beaeb
+ public boolean ravagerTakeDamageFromWater = false;
+ public List<Block> ravagerGriefableBlocks = new ArrayList<>();
+ public boolean ravagerAlwaysDropExp = false;
+ public boolean ravagerAvoidRabbits = false;
+ private void ravagerSettings() {
+ ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable);
+ ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater);
@@ -20719,6 +20880,7 @@ index 0000000000000000000000000000000000000000..dde2e82e8f3686f6b77fefdaad9beaeb
+ }
+ });
+ ravagerAlwaysDropExp = getBoolean("mobs.ravager.always-drop-exp", ravagerAlwaysDropExp);
+ ravagerAvoidRabbits = getBoolean("mobs.ravager.avoid-rabbits", ravagerAvoidRabbits);
+ }
+
+ public boolean salmonRidable = false;

View File

@@ -829,7 +829,7 @@ index 56b07a3306e5735816c8d89601b519cb0db6379a..524d9f0e2cc9a840fdf74bfa98537b5c
return executedUnloadTask | canSaveChunk | canSaveEntities | canSavePOI ? new SaveStat(executedUnloadTask || canSaveChunk, canSaveEntities, canSavePOI): null;
}
diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
index 6db7af1f073649dc1a35e00d38e961638ca84022..1bab647e27e72bc9e94454351c86435c4e663a7e 100644
index e246171b3eb3b8d8caab2c2535f305e8af2f3701..f6dd905176605228cbd6673ca2f77431a48248ad 100644
--- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
+++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
@@ -1,6 +1,5 @@
@@ -1519,10 +1519,10 @@ index 8099bcb9e66ddd0ae4518e8a0129d72823cdcff1..2d649d98985203005f3e423d61e88a8e
} else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 45cf2c58fac237fe169a4be75c9a445a002389dd..b36daaeb6372cb217c579d0449a19a71c0c3bef1 100644
index 8432a36a7b047cf2d930735feb426233769e1931..a42431f9788fbb75eb3daae4b7be7f8261056dcc 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2529,7 +2529,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -2555,7 +2555,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
public void handleCommand(String s) { // Paper - private -> public
org.spigotmc.AsyncCatcher.catchOp("Command Dispatched Async: " + s); // Paper - Add async catcher
@@ -1530,7 +1530,7 @@ index 45cf2c58fac237fe169a4be75c9a445a002389dd..b36daaeb6372cb217c579d0449a19a71
if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot
this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s);
@@ -2539,7 +2538,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -2565,7 +2564,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
this.cserver.getPluginManager().callEvent(event);
if (event.isCancelled()) {
@@ -1538,7 +1538,7 @@ index 45cf2c58fac237fe169a4be75c9a445a002389dd..b36daaeb6372cb217c579d0449a19a71
return;
}
@@ -2551,8 +2549,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -2577,8 +2575,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
player.sendMessage(org.bukkit.ChatColor.RED + "An internal error occurred while attempting to perform this command");
java.util.logging.Logger.getLogger(ServerGamePacketListenerImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
return;
@@ -1800,7 +1800,7 @@ index 14aaabb6b9595847358f65ff01c81b179d9548ea..3dc9f10f00dd982ca28a66b364e5088c
@Nullable
private String descriptionId;
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java
index 5168e8e9ebb54b6c00acb7f2939262eb06a7426d..4687526a250ef4e6f2aead29cf4ccb1e2e38c20e 100644
index 8dc1436fe78759cee5247cc28e8a18999e738a1b..ce3cc2d4b8cdfae98c02e03f7290c6115b0198d7 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java
@@ -33,14 +33,9 @@ import org.bukkit.craftbukkit.persistence.CraftPersistentDataTypeRegistry;
@@ -1862,7 +1862,7 @@ index 35147d7a6649708c2b068065eb44831f40c3ab8e..1a2ef85cd8a62824b23f4212a5e2a70c
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 339b16641a7548d89fb15baad8edf0c5f95db635..f17eb11741d09f9b04eac98918261680b600749a 100644
index 483e16f27cd07cc9a0276db9cb9d84d8a41f97d0..141056d003eaaee8b2a436554733e52d7d74689d 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -470,7 +470,6 @@ public final class CraftServer implements Server {
@@ -1874,7 +1874,7 @@ index 339b16641a7548d89fb15baad8edf0c5f95db635..f17eb11741d09f9b04eac98918261680
console.autosavePeriod = this.configuration.getInt("ticks-per.autosave");
this.warningState = WarningState.value(this.configuration.getString("settings.deprecated-verbose"));
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index 42f08f65207673125b288d4a74fc6d18eb713e9e..f236e7c56c6c72f3fcdba8314f258026e6561ecb 100644
index 49aa5493f65e6e53553290ab82f91632e9dd6d20..27edd8f2dec9426fb2b51641305a1c13c307a970 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -374,8 +374,6 @@ public class Main {
@@ -2051,7 +2051,7 @@ index d67089b621f3ba07f3cf4cd64ee6ccb99ed23445..44153969844ac521cc082c9bdb3bd02e
@Override
diff --git a/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java b/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java
index b4cca06a583fbb7918237de256f43ee61fd8ec6c..dd4a5f610e6e84a73051a8ed46e1961804356ca3 100644
index b1fc5368d439ef77128c77468c497dc3fbb0ccb8..b95cd1755fb9187db75eec266bf79a901d16f570 100644
--- a/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java
+++ b/src/main/java/org/galemc/gale/configuration/GaleGlobalConfiguration.java
@@ -80,41 +80,6 @@ public class GaleGlobalConfiguration extends ConfigurationPart {
@@ -2095,7 +2095,7 @@ index b4cca06a583fbb7918237de256f43ee61fd8ec6c..dd4a5f610e6e84a73051a8ed46e19618
-
public Keepalive keepalive;
public class Keepalive extends ConfigurationPart {
public boolean sendMultiple = true; // Gale - Purpur - send multiple keep-alive packets
public boolean sendMultiple = false; // Gale - Purpur - send multiple keep-alive packets
diff --git a/src/main/java/org/galemc/gale/configuration/timingsexport/GaleConfigurationTimingsExport.java b/src/main/java/org/galemc/gale/configuration/timingsexport/GaleConfigurationTimingsExport.java
deleted file mode 100644
index 579c2e69d8f6ce8398eb1297d1d1ead98c9068a5..0000000000000000000000000000000000000000

View File

@@ -7,10 +7,10 @@ This Check is added in 1.17.x -> 1.18.x update by Mojang.
By removing this check, it enable hackers to use some modules of hack clients.
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index a18cbed0089a845eaf31b1ac351c60bbfede7aad..bafe83f2a9b12868a7f310ab3a63c2302cbac28f 100644
index a42431f9788fbb75eb3daae4b7be7f8261056dcc..479fe0a14736a2eec61a7d50b7afbacc548c06e2 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1984,7 +1984,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -2008,7 +2008,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
Vec3 vec3d1 = vec3d.subtract(Vec3.atCenterOf(blockposition));
double d0 = 1.0000001D;

View File

@@ -7,10 +7,10 @@ Original license: MIT
Original project: https://github.com/KeYiMC/KeYi
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 90338017ebcb2a690dff7dad57aa6fbb95e0ff93..fd57b7f69f3a8ee490cd4fa55c0e5480e0a4a14b 100644
index 88948526f9acf4bb2157484b80891902fd843b02..1e5fb608ff04d2e9ae8db30896eb88fde914b8af 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -3610,4 +3610,27 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -3619,4 +3619,27 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundPlayerCombatKillPacket(getEntityId(), io.papermc.paper.adventure.PaperAdventure.asVanilla(message)));
}
// Purpur end

View File

@@ -7,7 +7,7 @@ Original license: MIT
Original project: https://github.com/Cryptite/Slice
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index ada4956a0b204cb098e90979aff14db32455f481..31111babbb119175fa3c7b79624bb2a955b9cba3 100644
index 2707bc1dc8b45a239ffe0b0aeffe96a1359b9a5c..7fc94ec08f6bd9649ad9168ea3b9aa6ac9bf60e0 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -303,6 +303,7 @@ public class ServerPlayer extends Player {
@@ -36,10 +36,10 @@ index c9673051ce9f4096b981087eefe8b72bbe34819a..07b9f53d49d9ba8bbd3fa3da99bb7cd0
entityplayer1.connection.send(new ClientboundChangeDifficultyPacket(worlddata.getDifficulty(), worlddata.isDifficultyLocked()));
entityplayer1.connection.send(new ClientboundSetExperiencePacket(entityplayer1.experienceProgress, entityplayer1.totalExperience, entityplayer1.experienceLevel));
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index fd57b7f69f3a8ee490cd4fa55c0e5480e0a4a14b..bdc69aed63d1d84a398c25ccf3dabc7ae123fad8 100644
index 1e5fb608ff04d2e9ae8db30896eb88fde914b8af..507faaf2578d49c900ed8a3d9ab995695d47142d 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -1338,6 +1338,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -1347,6 +1347,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
// Paper end
}

View File

@@ -7,7 +7,7 @@ Original license: GPLv3
Original project: https://github.com/LeavesMC/Leaves
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index f0886b4b63adb17ffe73b60f6ff6bdb734a4e8cf..b877dc3f82bdd9640f522e7bd2dc1dbf23610eb1 100644
index 479fe0a14736a2eec61a7d50b7afbacc548c06e2..1acac1e6288e67db00599f98fbdf8ba12702c11a 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -589,7 +589,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -28,7 +28,7 @@ index f0886b4b63adb17ffe73b60f6ff6bdb734a4e8cf..b877dc3f82bdd9640f522e7bd2dc1dbf
flag2 = true; // Paper - diff on change, this should be moved wrongly
ServerGamePacketListenerImpl.LOGGER.warn("{} (vehicle of {}) moved wrongly! {}", new Object[]{entity.getName().getString(), this.player.getName().getString(), Math.sqrt(d10)});
}
@@ -1462,7 +1462,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -1486,7 +1486,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 f0886b4b63adb17ffe73b60f6ff6bdb734a4e8cf..b877dc3f82bdd9640f522e7bd2dc1dbf
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;
@@ -1532,7 +1532,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -1556,7 +1556,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
d10 = d6 * d6 + d7 * d7 + d8 * d8;
boolean movedWrongly = false; // Paper - Add fail move event; rename

View File

@@ -36,10 +36,10 @@ index a3adc109213885a193f7131405bd4a2f6a90f9be..e971ef13754402f3de118ea24cb9f83b
if (net.minecraft.world.phys.shapes.Shapes.joinIsNotEmpty(voxelshape, net.minecraft.world.phys.shapes.Shapes.create(entity.getBoundingBox()), net.minecraft.world.phys.shapes.BooleanOp.AND)) {
return false;
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index bdc69aed63d1d84a398c25ccf3dabc7ae123fad8..753e5a1c99e427729c4bcb5378005fc8012996ab 100644
index 507faaf2578d49c900ed8a3d9ab995695d47142d..d2e869d35bfb12fe2e0fe1c4e144446883166dd3 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -627,6 +627,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -636,6 +636,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return false;
}
OfflinePlayer other = (OfflinePlayer) obj;

View File

@@ -97,10 +97,10 @@ index 5bae3215ee0bf222c3bd77b3131f3d01ac6c9c41..8a643108954698425413d14eb9a2c86c
@Override
public EntityDimensions getDefaultDimensions(Pose pose) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index dde2e82e8f3686f6b77fefdaad9beaeb90059c23..3416c6778faf56666a521a69382799bb1bee1497 100644
index 4a385c42da7ab3be46d5e47d00daee5e0b6da88f..7a3017177f68111c0de9b197b0bf8e4159fd561d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1525,6 +1525,7 @@ public class PurpurWorldConfig {
@@ -1530,6 +1530,7 @@ public class PurpurWorldConfig {
public boolean drownedTakeDamageFromWater = false;
public boolean drownedBreakDoors = false;
public boolean drownedAlwaysDropExp = false;
@@ -108,7 +108,7 @@ index dde2e82e8f3686f6b77fefdaad9beaeb90059c23..3416c6778faf56666a521a69382799bb
private void drownedSettings() {
drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable);
drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater);
@@ -1542,6 +1543,7 @@ public class PurpurWorldConfig {
@@ -1547,6 +1548,7 @@ public class PurpurWorldConfig {
drownedTakeDamageFromWater = getBoolean("mobs.drowned.takes-damage-from-water", drownedTakeDamageFromWater);
drownedBreakDoors = getBoolean("mobs.drowned.can-break-doors", drownedBreakDoors);
drownedAlwaysDropExp = getBoolean("mobs.drowned.always-drop-exp", drownedAlwaysDropExp);
@@ -116,7 +116,7 @@ index dde2e82e8f3686f6b77fefdaad9beaeb90059c23..3416c6778faf56666a521a69382799bb
}
public boolean elderGuardianRidable = false;
@@ -1888,6 +1890,7 @@ public class PurpurWorldConfig {
@@ -1893,6 +1895,7 @@ public class PurpurWorldConfig {
public boolean huskJockeyTryExistingChickens = true;
public boolean huskTakeDamageFromWater = false;
public boolean huskAlwaysDropExp = false;
@@ -124,7 +124,7 @@ index dde2e82e8f3686f6b77fefdaad9beaeb90059c23..3416c6778faf56666a521a69382799bb
private void huskSettings() {
huskRidable = getBoolean("mobs.husk.ridable", huskRidable);
huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater);
@@ -1904,6 +1907,7 @@ public class PurpurWorldConfig {
@@ -1909,6 +1912,7 @@ public class PurpurWorldConfig {
huskJockeyTryExistingChickens = getBoolean("mobs.husk.jockey.try-existing-chickens", huskJockeyTryExistingChickens);
huskTakeDamageFromWater = getBoolean("mobs.husk.takes-damage-from-water", huskTakeDamageFromWater);
huskAlwaysDropExp = getBoolean("mobs.husk.always-drop-exp", huskAlwaysDropExp);
@@ -132,7 +132,7 @@ index dde2e82e8f3686f6b77fefdaad9beaeb90059c23..3416c6778faf56666a521a69382799bb
}
public boolean illusionerRidable = false;
@@ -3118,6 +3122,7 @@ public class PurpurWorldConfig {
@@ -3125,6 +3129,7 @@ public class PurpurWorldConfig {
public boolean zombieTakeDamageFromWater = false;
public boolean zombieAlwaysDropExp = false;
public double zombieHeadVisibilityPercent = 0.5D;
@@ -140,7 +140,7 @@ index dde2e82e8f3686f6b77fefdaad9beaeb90059c23..3416c6778faf56666a521a69382799bb
private void zombieSettings() {
zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable);
zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater);
@@ -3137,6 +3142,7 @@ public class PurpurWorldConfig {
@@ -3144,6 +3149,7 @@ public class PurpurWorldConfig {
zombieTakeDamageFromWater = getBoolean("mobs.zombie.takes-damage-from-water", zombieTakeDamageFromWater);
zombieAlwaysDropExp = getBoolean("mobs.zombie.always-drop-exp", zombieAlwaysDropExp);
zombieHeadVisibilityPercent = getDouble("mobs.zombie.head-visibility-percent", zombieHeadVisibilityPercent);
@@ -148,7 +148,7 @@ index dde2e82e8f3686f6b77fefdaad9beaeb90059c23..3416c6778faf56666a521a69382799bb
}
public boolean zombieHorseRidable = false;
@@ -3185,6 +3191,7 @@ public class PurpurWorldConfig {
@@ -3192,6 +3198,7 @@ public class PurpurWorldConfig {
public int zombieVillagerCuringTimeMax = 6000;
public boolean zombieVillagerCureEnabled = true;
public boolean zombieVillagerAlwaysDropExp = false;
@@ -156,7 +156,7 @@ index dde2e82e8f3686f6b77fefdaad9beaeb90059c23..3416c6778faf56666a521a69382799bb
private void zombieVillagerSettings() {
zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable);
zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater);
@@ -3204,6 +3211,7 @@ public class PurpurWorldConfig {
@@ -3211,6 +3218,7 @@ public class PurpurWorldConfig {
zombieVillagerCuringTimeMax = getInt("mobs.zombie_villager.curing_time.max", zombieVillagerCuringTimeMax);
zombieVillagerCureEnabled = getBoolean("mobs.zombie_villager.cure.enabled", zombieVillagerCureEnabled);
zombieVillagerAlwaysDropExp = getBoolean("mobs.zombie_villager.always-drop-exp", zombieVillagerAlwaysDropExp);
@@ -164,7 +164,7 @@ index dde2e82e8f3686f6b77fefdaad9beaeb90059c23..3416c6778faf56666a521a69382799bb
}
public boolean zombifiedPiglinRidable = false;
@@ -3217,6 +3225,7 @@ public class PurpurWorldConfig {
@@ -3224,6 +3232,7 @@ public class PurpurWorldConfig {
public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true;
public boolean zombifiedPiglinTakeDamageFromWater = false;
public boolean zombifiedPiglinAlwaysDropExp = false;
@@ -172,7 +172,7 @@ index dde2e82e8f3686f6b77fefdaad9beaeb90059c23..3416c6778faf56666a521a69382799bb
private void zombifiedPiglinSettings() {
zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable);
zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater);
@@ -3234,6 +3243,7 @@ public class PurpurWorldConfig {
@@ -3241,6 +3250,7 @@ public class PurpurWorldConfig {
zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry);
zombifiedPiglinTakeDamageFromWater = getBoolean("mobs.zombified_piglin.takes-damage-from-water", zombifiedPiglinTakeDamageFromWater);
zombifiedPiglinAlwaysDropExp = getBoolean("mobs.zombified_piglin.always-drop-exp", zombifiedPiglinAlwaysDropExp);

View File

@@ -236,10 +236,10 @@ index 8facd29bac314d4b8897113460f78ea7ed3e82b6..300d5144d828330e3de934b1026a0f1b
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 3416c6778faf56666a521a69382799bb1bee1497..92e41dab573e8c979564c83377e460cd93ec2865 100644
index 7a3017177f68111c0de9b197b0bf8e4159fd561d..fb7bead916b9ed069b3a3351625393958da5cd83 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1165,10 +1165,20 @@ public class PurpurWorldConfig {
@@ -1170,10 +1170,20 @@ public class PurpurWorldConfig {
public boolean allayRidable = false;
public boolean allayRidableInWater = true;
public boolean allayControllable = true;
@@ -260,7 +260,7 @@ index 3416c6778faf56666a521a69382799bb1bee1497..92e41dab573e8c979564c83377e460cd
}
public boolean axolotlRidable = false;
@@ -1282,6 +1292,10 @@ public class PurpurWorldConfig {
@@ -1287,6 +1297,10 @@ public class PurpurWorldConfig {
public double camelMovementSpeedMin = 0.09D;
public double camelMovementSpeedMax = 0.09D;
public int camelBreedingTicks = 6000;
@@ -271,7 +271,7 @@ index 3416c6778faf56666a521a69382799bb1bee1497..92e41dab573e8c979564c83377e460cd
private void camelSettings() {
camelRidableInWater = getBoolean("mobs.camel.ridable-in-water", camelRidableInWater);
camelMaxHealthMin = getDouble("mobs.camel.attributes.max_health.min", camelMaxHealthMin);
@@ -1291,6 +1305,10 @@ public class PurpurWorldConfig {
@@ -1296,6 +1310,10 @@ public class PurpurWorldConfig {
camelMovementSpeedMin = getDouble("mobs.camel.attributes.movement_speed.min", camelMovementSpeedMin);
camelMovementSpeedMax = getDouble("mobs.camel.attributes.movement_speed.max", camelMovementSpeedMax);
camelBreedingTicks = getInt("mobs.camel.breeding-delay-ticks", camelBreedingTicks);
@@ -282,7 +282,7 @@ index 3416c6778faf56666a521a69382799bb1bee1497..92e41dab573e8c979564c83377e460cd
}
public boolean catRidable = false;
@@ -1712,12 +1730,22 @@ public class PurpurWorldConfig {
@@ -1717,12 +1735,22 @@ public class PurpurWorldConfig {
public boolean frogControllable = true;
public float frogRidableJumpHeight = 0.65F;
public int frogBreedingTicks = 6000;
@@ -305,7 +305,7 @@ index 3416c6778faf56666a521a69382799bb1bee1497..92e41dab573e8c979564c83377e460cd
}
public boolean ghastRidable = false;
@@ -2658,12 +2686,20 @@ public class PurpurWorldConfig {
@@ -2665,12 +2693,20 @@ public class PurpurWorldConfig {
public boolean snifferControllable = true;
public double snifferMaxHealth = 14.0D;
public int snifferBreedingTicks = 6000;
@@ -326,7 +326,7 @@ index 3416c6778faf56666a521a69382799bb1bee1497..92e41dab573e8c979564c83377e460cd
}
public boolean squidRidable = false;
@@ -2757,10 +2793,20 @@ public class PurpurWorldConfig {
@@ -2764,10 +2800,20 @@ public class PurpurWorldConfig {
public boolean tadpoleRidable = false;
public boolean tadpoleRidableInWater = true;
public boolean tadpoleControllable = true;
@@ -347,7 +347,7 @@ index 3416c6778faf56666a521a69382799bb1bee1497..92e41dab573e8c979564c83377e460cd
}
public boolean traderLlamaRidable = false;
@@ -2973,10 +3019,20 @@ public class PurpurWorldConfig {
@@ -2980,10 +3026,20 @@ public class PurpurWorldConfig {
public boolean wardenRidable = false;
public boolean wardenRidableInWater = true;
public boolean wardenControllable = true;

View File

@@ -29,7 +29,7 @@ index 3852985ebf9643f6b1b17a3d090175800bcdd079..4f2f652cf7403221226e524586aa73fe
}
// CraftBukkit end
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 753e5a1c99e427729c4bcb5378005fc8012996ab..ea784b6c5aeb156147900ad6161c52cc185825dd 100644
index d2e869d35bfb12fe2e0fe1c4e144446883166dd3..65105a4fc797c9d7767fa9f837d9cef08f3f46ab 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -198,7 +198,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -41,7 +41,7 @@ index 753e5a1c99e427729c4bcb5378005fc8012996ab..ea784b6c5aeb156147900ad6161c52cc
private final Set<UUID> unlistedEntities = new HashSet<>(); // Paper - Add Listing API for Player
private static final WeakHashMap<Plugin, WeakReference<Plugin>> pluginWeakReferences = new WeakHashMap<>();
private int hash = 0;
@@ -2238,9 +2238,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -2247,9 +2247,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override
public boolean canSee(org.bukkit.entity.Entity entity) {

View File

@@ -21,10 +21,10 @@ index 6ad5245aebba43abf10fe980e63a8872e3e15484..9f48fc9bc38e0138c45000456a49c78d
org.purpurmc.purpur.command.DemoCommand.register(this.dispatcher); // Purpur
org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 31111babbb119175fa3c7b79624bb2a955b9cba3..bd7f40e04f8b0117eeaa12f62c7e61d4a41d3d82 100644
index 7fc94ec08f6bd9649ad9168ea3b9aa6ac9bf60e0..2fac364c8ce66a4c00b65adc4c723b734e165ddc 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -2368,6 +2368,8 @@ public class ServerPlayer extends Player {
@@ -2369,6 +2369,8 @@ public class ServerPlayer extends Player {
// Purpur Start
private boolean isAfk = false;
@@ -33,7 +33,7 @@ index 31111babbb119175fa3c7b79624bb2a955b9cba3..bd7f40e04f8b0117eeaa12f62c7e61d4
@Override
public void setAfk(boolean afk) {
@@ -2405,6 +2407,9 @@ public class ServerPlayer extends Player {
@@ -2406,6 +2408,9 @@ public class ServerPlayer extends Player {
String prefix = (split.length > 0 ? split[0] : "").replace(org.purpurmc.purpur.PurpurConfig.afkTabListPrefix, "");
String suffix = (split.length > 1 ? split[1] : "").replace(org.purpurmc.purpur.PurpurConfig.afkTabListSuffix, "");
if (afk) {
@@ -44,10 +44,10 @@ index 31111babbb119175fa3c7b79624bb2a955b9cba3..bd7f40e04f8b0117eeaa12f62c7e61d4
} else {
getBukkitEntity().setPlayerListName(prefix + scoreboardName + suffix);
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index b877dc3f82bdd9640f522e7bd2dc1dbf23610eb1..492de69a877318bad5e49fb57ee461974ad562b6 100644
index 1acac1e6288e67db00599f98fbdf8ba12702c11a..5fe21ffe8a868184b909e444798701fab52e91c1 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2230,8 +2230,34 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -2254,8 +2254,34 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
}
}

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Block log4j rce exploit in chat
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 492de69a877318bad5e49fb57ee461974ad562b6..7aa64742d7967a74e4078af168b6b2bac005ccd1 100644
index 5fe21ffe8a868184b909e444798701fab52e91c1..b4bab818c53c31bba220996696406a05cb57db8b 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2418,6 +2418,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -2444,6 +2444,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
}
private void tryHandleChat(String s, Runnable runnable, boolean sync) { // CraftBukkit
@@ -17,7 +17,7 @@ index 492de69a877318bad5e49fb57ee461974ad562b6..7aa64742d7967a74e4078af168b6b2ba
if (ServerGamePacketListenerImpl.isChatMessageIllegal(s)) {
this.disconnect(Component.translatable("multiplayer.disconnect.illegal_characters"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_CHARACTERS); // Paper
} else if (this.player.isRemoved() || this.player.getChatVisibility() == ChatVisiblity.HIDDEN) { // CraftBukkit - dead men tell no tales
@@ -2449,6 +2451,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
@@ -2475,6 +2477,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
}
}
@@ -34,10 +34,10 @@ index 492de69a877318bad5e49fb57ee461974ad562b6..7aa64742d7967a74e4078af168b6b2ba
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 ea784b6c5aeb156147900ad6161c52cc185825dd..f4e916c3f38900576df974269ec5c88648a29eac 100644
index 65105a4fc797c9d7767fa9f837d9cef08f3f46ab..059aebbe2173bfc77071fad0884d92ebe756f848 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -742,6 +742,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@@ -751,6 +751,8 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
if (this.getHandle().connection == null) return;