apply minecraft server file patches

This commit is contained in:
granny
2025-11-25 22:27:20 -08:00
parent e6561c98ae
commit 757b8d5d42
251 changed files with 1060 additions and 2988 deletions

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/io/papermc/paper/entity/activation/ActivationRange.java b/io/papermc/paper/entity/activation/ActivationRange.java
index ae2bb9a73106febfe5f0d090abd4252bbb5fd27e..ca21597263cb430e2a5ae07e8cecfb0d53a270d2 100644
--- a/io/papermc/paper/entity/activation/ActivationRange.java
+++ b/io/papermc/paper/entity/activation/ActivationRange.java
@@ -147,6 +147,8 @@ public final class ActivationRange {
@@ -147,6 +_,8 @@
continue;
}
@@ -17,7 +9,7 @@ index ae2bb9a73106febfe5f0d090abd4252bbb5fd27e..ca21597263cb430e2a5ae07e8cecfb0d
final int worldHeight = world.getHeight();
ActivationRange.maxBB = player.getBoundingBox().inflate(maxRange, worldHeight, maxRange);
ActivationType.MISC.boundingBox = player.getBoundingBox().inflate(miscActivationRange, worldHeight, miscActivationRange);
@@ -288,6 +290,7 @@ public final class ActivationRange {
@@ -288,6 +_,7 @@
* @return
*/
public static boolean checkIfActive(final Entity entity) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/CrashReport.java b/net/minecraft/CrashReport.java
index 3e0e88afcf010d9a3d46e48bca5cbdf98fe97544..394443d00e661715439be1e56dddc129947699a4 100644
--- a/net/minecraft/CrashReport.java
+++ b/net/minecraft/CrashReport.java
@@ -30,6 +30,7 @@ public class CrashReport {
@@ -30,6 +_,7 @@
private boolean trackingStackTrace = true;
private StackTraceElement[] uncategorizedStackTrace = new StackTraceElement[0];
private final SystemReport systemReport = new SystemReport();
@@ -16,7 +8,7 @@ index 3e0e88afcf010d9a3d46e48bca5cbdf98fe97544..394443d00e661715439be1e56dddc129
public CrashReport(String title, Throwable exception) {
io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(exception); // Paper
@@ -130,7 +131,7 @@ public class CrashReport {
@@ -130,7 +_,7 @@
}
public String getFriendlyReport(ReportType type) {
@@ -24,8 +16,8 @@ index 3e0e88afcf010d9a3d46e48bca5cbdf98fe97544..394443d00e661715439be1e56dddc129
+ return this.getFriendlyReport(type, extraInfo); // Purpur - Rebrand
}
@Nullable
@@ -161,7 +162,7 @@ public class CrashReport {
public @Nullable Path getSaveFile() {
@@ -160,7 +_,7 @@
}
public boolean saveToFile(Path path, ReportType type) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/commands/CommandSourceStack.java b/net/minecraft/commands/CommandSourceStack.java
index be42e2bd05a7468911698e53a33d87abf4a1080b..d3d967cd922a6e5129546cad9d8fa5565960f6a5 100644
--- a/net/minecraft/commands/CommandSourceStack.java
+++ b/net/minecraft/commands/CommandSourceStack.java
@@ -447,6 +447,19 @@ public class CommandSourceStack implements ExecutionCommandSource<CommandSourceS
@@ -430,6 +_,19 @@
}
// CraftBukkit end
@@ -28,10 +20,11 @@ index be42e2bd05a7468911698e53a33d87abf4a1080b..d3d967cd922a6e5129546cad9d8fa556
public Vec3 getPosition() {
return this.worldPosition;
}
@@ -532,6 +545,30 @@ public class CommandSourceStack implements ExecutionCommandSource<CommandSourceS
@@ -512,6 +_,30 @@
}
}
}
+
+ // Purpur start - Purpur config files
+ public void sendSuccess(@Nullable String message) {
+ sendSuccess(message, false);
@@ -55,7 +48,6 @@ index be42e2bd05a7468911698e53a33d87abf4a1080b..d3d967cd922a6e5129546cad9d8fa556
+ sendSuccess(() -> io.papermc.paper.adventure.PaperAdventure.asVanilla(message), broadcastToOps);
+ }
+ // Purpur end - Purpur config files
+
public void sendSuccess(Supplier<Component> messageSupplier, boolean allowLogging) {
boolean flag = this.source.acceptsSuccess() && !this.silent;
boolean flag1 = allowLogging && this.source.shouldInformAdmins() && !this.silent;

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java
index 83f05b042630891d43cfb567e98666831df80f6e..9aa09e11032f539952edeeed119f7705c330db0a 100644
--- a/net/minecraft/commands/Commands.java
+++ b/net/minecraft/commands/Commands.java
@@ -255,11 +255,11 @@ public class Commands {
@@ -265,11 +_,11 @@
JfrCommand.register(this.dispatcher);
}
@@ -22,7 +14,7 @@ index 83f05b042630891d43cfb567e98666831df80f6e..9aa09e11032f539952edeeed119f7705
RaidCommand.register(this.dispatcher, context);
DebugPathCommand.register(this.dispatcher);
DebugMobSpawningCommand.register(this.dispatcher);
@@ -287,6 +287,14 @@ public class Commands {
@@ -297,6 +_,14 @@
StopCommand.register(this.dispatcher);
TransferCommand.register(this.dispatcher);
WhitelistCommand.register(this.dispatcher);
@@ -37,7 +29,7 @@ index 83f05b042630891d43cfb567e98666831df80f6e..9aa09e11032f539952edeeed119f7705
}
if (selection.includeIntegrated) {
@@ -511,6 +519,7 @@ public class Commands {
@@ -522,6 +_,7 @@
private void runSync(ServerPlayer player, java.util.Collection<String> bukkit, RootCommandNode<CommandSourceStack> rootCommandNode) {
// Paper end - Perf: Async command map building
new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent<CommandSourceStack>(player.getBukkitEntity(), (RootCommandNode) rootCommandNode, true).callEvent(); // Paper - Brigadier API
@@ -45,7 +37,7 @@ index 83f05b042630891d43cfb567e98666831df80f6e..9aa09e11032f539952edeeed119f7705
org.bukkit.event.player.PlayerCommandSendEvent event = new org.bukkit.event.player.PlayerCommandSendEvent(player.getBukkitEntity(), new java.util.LinkedHashSet<>(bukkit));
event.getPlayer().getServer().getPluginManager().callEvent(event);
@@ -521,6 +530,8 @@ public class Commands {
@@ -532,6 +_,8 @@
}
}
// CraftBukkit end

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/commands/arguments/selector/EntitySelector.java b/net/minecraft/commands/arguments/selector/EntitySelector.java
index d438e31a082b675d7eb0eead7067a0b92363a9f9..a65ca0b1a44f8c993fad7f230a9c0b11a474e358 100644
--- a/net/minecraft/commands/arguments/selector/EntitySelector.java
+++ b/net/minecraft/commands/arguments/selector/EntitySelector.java
@@ -193,26 +193,27 @@ public class EntitySelector {
@@ -190,26 +_,27 @@
this.checkPermissions(source);
if (this.playerName != null) {
ServerPlayer playerByName = source.getServer().getPlayerList().getPlayerByName(this.playerName);
@@ -40,7 +32,7 @@ index d438e31a082b675d7eb0eead7067a0b92363a9f9..a65ca0b1a44f8c993fad7f230a9c0b11
players.add(serverPlayer1);
if (players.size() >= resultLimit) {
return players;
@@ -271,4 +272,10 @@ public class EntitySelector {
@@ -267,4 +_,10 @@
public static Component joinNames(List<? extends Entity> names) {
return ComponentUtils.formatList(names, Entity::getDisplayName);
}

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/core/BlockPos.java b/net/minecraft/core/BlockPos.java
index 5083959b61ec88868c0ede65a46087608e22983a..0ae78eecdb6556ff85018d49af4c183da5276c2d 100644
--- a/net/minecraft/core/BlockPos.java
+++ b/net/minecraft/core/BlockPos.java
@@ -64,6 +64,12 @@ public class BlockPos extends Vec3i {
@@ -61,6 +_,12 @@
public static final int MAX_HORIZONTAL_COORDINATE = 33554431;
// Paper end - Optimize Bit Operations by inlining

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/core/dispenser/DispenseItemBehavior.java b/net/minecraft/core/dispenser/DispenseItemBehavior.java
index ef72c5d1b6196582cadb87944f3416881f56c8df..5d0eb3893a0cca99ef53c2095b7b36a145dc15be 100644
--- a/net/minecraft/core/dispenser/DispenseItemBehavior.java
+++ b/net/minecraft/core/dispenser/DispenseItemBehavior.java
@@ -746,5 +746,22 @@ public interface DispenseItemBehavior {
@@ -750,5 +_,22 @@
DispenserBlock.registerBehavior(Items.TNT_MINECART, new MinecartDispenseItemBehavior(EntityType.TNT_MINECART));
DispenserBlock.registerBehavior(Items.HOPPER_MINECART, new MinecartDispenseItemBehavior(EntityType.HOPPER_MINECART));
DispenserBlock.registerBehavior(Items.COMMAND_BLOCK_MINECART, new MinecartDispenseItemBehavior(EntityType.COMMAND_BLOCK_MINECART));

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java b/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java
index e2d169b45f1dba6559ca337b07a110f79d3db504..727d04a442053f6d0c4df3e744554e2866fa38cd 100644
--- a/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java
+++ b/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java
@@ -32,7 +32,7 @@ public class EquipmentDispenseItemBehavior extends DefaultDispenseItemBehavior {
@@ -32,7 +_,7 @@
return false;
} else {
LivingEntity livingEntity = entitiesOfClass.getFirst();

View File

@@ -0,0 +1,11 @@
--- a/net/minecraft/gametest/framework/GameTestHelper.java
+++ b/net/minecraft/gametest/framework/GameTestHelper.java
@@ -322,6 +_,8 @@
return gameType;
}
+ public void setAfk(final boolean afk) {} // Purpur - AFK API
+
@Override
public boolean isClientAuthoritative() {
return false;

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/gametest/framework/TestCommand.java b/net/minecraft/gametest/framework/TestCommand.java
index f2c97bb3c849dce59964d51633c47a982d1aa164..32338e6b2e5066b22111fab618a7205139a66536 100644
--- a/net/minecraft/gametest/framework/TestCommand.java
+++ b/net/minecraft/gametest/framework/TestCommand.java
@@ -443,7 +443,7 @@ public class TestCommand {
@@ -443,7 +_,7 @@
)
)
);

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/network/Connection.java b/net/minecraft/network/Connection.java
index 14addbaf68b7ad80490187d12d9c9b00891e2ce1..35b6f8365f4568da7bc0f4e47c39cb3690292aaf 100644
--- a/net/minecraft/network/Connection.java
+++ b/net/minecraft/network/Connection.java
@@ -578,11 +578,20 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
@@ -554,11 +_,20 @@
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

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/network/chat/SignedMessageChain.java b/net/minecraft/network/chat/SignedMessageChain.java
index f6eed34b2fd72ab74cc9dc4b99ca184d512c0a66..a3e211edd348c0936757de33a74b9456248b3bd2 100644
--- a/net/minecraft/network/chat/SignedMessageChain.java
+++ b/net/minecraft/network/chat/SignedMessageChain.java
@@ -45,7 +45,7 @@ public class SignedMessageChain {
@@ -44,7 +_,7 @@
SignedMessageLink signedMessageLink = SignedMessageChain.this.nextLink;
if (signedMessageLink == null) {
throw new SignedMessageChain.DecodeException(SignedMessageChain.DecodeException.CHAIN_BROKEN);

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/Main.java b/net/minecraft/server/Main.java
index 2de7072c8ccc005e514673bba494b64d42e95a15..42841fdc7e64311ba9217789a3dc758a351cf674 100644
--- a/net/minecraft/server/Main.java
+++ b/net/minecraft/server/Main.java
@@ -107,6 +107,13 @@ public class Main {
@@ -105,6 +_,13 @@
JvmProfiler.INSTANCE.start(Environment.SERVER);
}

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java
index f63a5567a2e845de904c2dacfbb875049e3e0c65..9337f3fa2daa224d04499fd2bb0fef9c1283ba27 100644
--- a/net/minecraft/server/MinecraftServer.java
+++ b/net/minecraft/server/MinecraftServer.java
@@ -286,6 +286,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -290,6 +_,7 @@
public joptsimple.OptionSet options;
public org.bukkit.command.ConsoleCommandSender console;
public static int currentTick; // Paper - improve tick loop
@@ -16,7 +8,7 @@ index f63a5567a2e845de904c2dacfbb875049e3e0c65..9337f3fa2daa224d04499fd2bb0fef9c
public java.util.Queue<Runnable> processQueue = new java.util.concurrent.ConcurrentLinkedQueue<Runnable>();
public int autosavePeriod;
// Paper - don't store the vanilla dispatcher
@@ -302,6 +303,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -306,6 +_,8 @@
public boolean isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked
private final Set<String> pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping
public static final long SERVER_INIT = System.nanoTime(); // Paper - Lag compensation
@@ -25,7 +17,7 @@ index f63a5567a2e845de904c2dacfbb875049e3e0c65..9337f3fa2daa224d04499fd2bb0fef9c
// Paper start - improve tick loop
public final ca.spottedleaf.moonrise.common.time.TickData tickTimes1s = new ca.spottedleaf.moonrise.common.time.TickData(java.util.concurrent.TimeUnit.SECONDS.toNanos(1L));
public final ca.spottedleaf.moonrise.common.time.TickData tickTimes5s = new ca.spottedleaf.moonrise.common.time.TickData(java.util.concurrent.TimeUnit.SECONDS.toNanos(5L));
@@ -371,6 +374,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -375,6 +_,7 @@
public double[] computeTPS() {
final long interval = this.tickRateManager().nanosecondsPerTick();
return new double[] {
@@ -33,7 +25,7 @@ index f63a5567a2e845de904c2dacfbb875049e3e0c65..9337f3fa2daa224d04499fd2bb0fef9c
getTPS(this.tickTimes1m, interval),
getTPS(this.tickTimes5m, interval),
getTPS(this.tickTimes15m, interval)
@@ -1013,6 +1017,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1015,6 +_,15 @@
LOGGER.info("Stopping server");
Commands.COMMAND_SENDING_POOL.shutdownNow(); // Paper - Perf: Async command map building; Shutdown and don't bother finishing
@@ -49,7 +41,7 @@ index f63a5567a2e845de904c2dacfbb875049e3e0c65..9337f3fa2daa224d04499fd2bb0fef9c
// CraftBukkit start
if (this.server != null) {
this.server.spark.disable(); // Paper - spark
@@ -1111,6 +1124,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1113,6 +_,8 @@
this.safeShutdown(waitForShutdown, false);
}
public void safeShutdown(boolean waitForShutdown, boolean isRestarting) {
@@ -58,7 +50,7 @@ index f63a5567a2e845de904c2dacfbb875049e3e0c65..9337f3fa2daa224d04499fd2bb0fef9c
this.isRestarting = isRestarting;
this.hasLoggedStop = true; // Paper - Debugging
if (isDebugging()) io.papermc.paper.util.TraceUtil.dumpTraceForThread("Server stopped"); // Paper - Debugging
@@ -1288,6 +1303,16 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1290,6 +_,16 @@
}
// Paper end - Add onboarding message for initial server start
@@ -75,20 +67,19 @@ index f63a5567a2e845de904c2dacfbb875049e3e0c65..9337f3fa2daa224d04499fd2bb0fef9c
while (this.running) {
final long tickStart = System.nanoTime(); // Paper - improve tick loop
long l; // Paper - improve tick loop - diff on change, expect this to be tick interval
@@ -1301,9 +1326,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1303,8 +_,10 @@
final long ticksBehind = Math.max(1L, this.tickSchedule.getPeriodsAhead(l, tickStart));
final long catchup = (long)Math.max(
1,
- 5 //ConfigHolder.getConfig().tickLoop.catchupTicks.getOrDefault(MoonriseConfig.TickLoop.DEFAULT_CATCHUP_TICKS).intValue()
+ org.purpurmc.purpur.PurpurConfig.tpsCatchup ? 5 : 1 //ConfigHolder.getConfig().tickLoop.catchupTicks.getOrDefault(MoonriseConfig.TickLoop.DEFAULT_CATCHUP_TICKS).intValue() // Purpur - Configurable TPS Catchup
);
+ lagging = getTPS()[0] < org.purpurmc.purpur.PurpurConfig.laggingThreshold; // Purpur - Lagging threshold
+
+ lagging = getTPS()[0] < org.purpurmc.purpur.PurpurConfig.laggingThreshold; // Purpur - Lagging threshold
// adjust ticksBehind so that it is not greater-than catchup
if (ticksBehind > catchup) {
final long difference = ticksBehind - catchup;
@@ -1773,7 +1800,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1786,7 +_,7 @@
long worldTime = level.getGameTime();
final ClientboundSetTimePacket worldPacket = new ClientboundSetTimePacket(worldTime, dayTime, doDaylight);
for (Player entityhuman : level.players()) {
@@ -97,7 +88,7 @@ index f63a5567a2e845de904c2dacfbb875049e3e0c65..9337f3fa2daa224d04499fd2bb0fef9c
continue;
}
ServerPlayer entityplayer = (ServerPlayer) entityhuman;
@@ -1945,7 +1972,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1952,7 +_,7 @@
@DontObfuscate
public String getServerModName() {

View File

@@ -1,25 +1,17 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/PlayerAdvancements.java b/net/minecraft/server/PlayerAdvancements.java
index fdeca41d40705f28864ce4443d01cd872c9d51b0..10e5469df1800bcdfb3f8cb4045ee25a4bafc58c 100644
--- a/net/minecraft/server/PlayerAdvancements.java
+++ b/net/minecraft/server/PlayerAdvancements.java
@@ -147,6 +147,7 @@ public class PlayerAdvancements {
@@ -146,6 +_,7 @@
AdvancementHolder advancementHolder = advancementManager.get(path);
if (advancementHolder == null) {
if (!path.getNamespace().equals(ResourceLocation.DEFAULT_NAMESPACE)) return; // CraftBukkit
if (!path.getNamespace().equals(Identifier.DEFAULT_NAMESPACE)) return; // CraftBukkit
+ if (!org.purpurmc.purpur.PurpurConfig.loggerSuppressIgnoredAdvancementWarnings) // Purpur - Logger settings (suppressing pointless logs)
LOGGER.warn("Ignored advancement '{}' in progress file {} - it doesn't exist anymore?", path, this.playerSavePath);
} else {
this.startProgress(advancementHolder, progress);
@@ -194,6 +195,7 @@ public class PlayerAdvancements {
@@ -193,6 +_,7 @@
advancement.value().display().ifPresent(displayInfo -> {
// Paper start - Add Adventure message to PlayerAdvancementDoneEvent
if (event.message() != null && this.player.level().getGameRules().getBoolean(GameRules.RULE_ANNOUNCE_ADVANCEMENTS)) {
if (event.message() != null && this.player.level().getGameRules().get(GameRules.SHOW_ADVANCEMENT_MESSAGES)) {
+ if (org.purpurmc.purpur.PurpurConfig.advancementOnlyBroadcastToAffectedPlayer) this.player.sendMessage(message); else // Purpur - Configurable broadcast settings
this.playerList.broadcastSystemMessage(io.papermc.paper.adventure.PaperAdventure.asVanilla(event.message()), false);
// Paper end

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/commands/EnchantCommand.java b/net/minecraft/server/commands/EnchantCommand.java
index 6f4fcee9fdba2248227708fcced1ce0f40aff6af..13f1dbd0d09428e9e0a42f99d0553283e0065f6f 100644
--- a/net/minecraft/server/commands/EnchantCommand.java
+++ b/net/minecraft/server/commands/EnchantCommand.java
@@ -70,7 +70,7 @@ public class EnchantCommand {
@@ -70,7 +_,7 @@
private static int enchant(CommandSourceStack source, Collection<? extends Entity> targets, Holder<Enchantment> enchantment, int level) throws CommandSyntaxException {
Enchantment enchantment1 = enchantment.value();
@@ -17,7 +9,7 @@ index 6f4fcee9fdba2248227708fcced1ce0f40aff6af..13f1dbd0d09428e9e0a42f99d0553283
throw ERROR_LEVEL_TOO_HIGH.create(level, enchantment1.getMaxLevel());
} else {
int i = 0;
@@ -80,7 +80,7 @@ public class EnchantCommand {
@@ -80,7 +_,7 @@
ItemStack mainHandItem = livingEntity.getMainHandItem();
if (!mainHandItem.isEmpty()) {
if (enchantment1.canEnchant(mainHandItem)

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/commands/GameModeCommand.java b/net/minecraft/server/commands/GameModeCommand.java
index 99b9408a025a0edb054aa2db3b743df4498c4f97..b56d990b172db5be8633f1fb3d8aaef1f69390b8 100644
--- a/net/minecraft/server/commands/GameModeCommand.java
+++ b/net/minecraft/server/commands/GameModeCommand.java
@@ -53,6 +53,18 @@ public class GameModeCommand {
@@ -53,6 +_,18 @@
}
private static int setMode(CommandContext<CommandSourceStack> context, Collection<ServerPlayer> players, GameType gameType) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/commands/GiveCommand.java b/net/minecraft/server/commands/GiveCommand.java
index 4f56cdcf658234b1ca92d38c3df3d31e9be34a15..945d7c0b31fe9ac029e518af92eebd6e8018a69f 100644
--- a/net/minecraft/server/commands/GiveCommand.java
+++ b/net/minecraft/server/commands/GiveCommand.java
@@ -69,6 +69,7 @@ public class GiveCommand {
@@ -69,6 +_,7 @@
i1 -= min;
ItemStack itemStack1 = item.createItemStack(min, false);
boolean flag = serverPlayer.getInventory().add(itemStack1);

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java
index 354b48c88b113c4048e258f2402aad2647d3c364..e728611fc4148f88d5c4f964af6f17a7b7ee9581 100644
--- a/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/net/minecraft/server/dedicated/DedicatedServer.java
@@ -198,6 +198,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@@ -195,6 +_,7 @@
public void run() {
if (!org.bukkit.craftbukkit.Main.useConsole) return; // CraftBukkit
// Paper start - Use TerminalConsoleAppender
@@ -16,7 +8,7 @@ index 354b48c88b113c4048e258f2402aad2647d3c364..e728611fc4148f88d5c4f964af6f17a7
new com.destroystokyo.paper.console.PaperConsole(DedicatedServer.this).start();
/*
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8));
@@ -276,6 +277,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@@ -273,6 +_,15 @@
io.papermc.paper.command.PaperCommands.registerCommands(this); // Paper - setup /paper command
this.server.spark.registerCommandBeforePlugins(this.server); // Paper - spark
com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics
@@ -32,7 +24,7 @@ index 354b48c88b113c4048e258f2402aad2647d3c364..e728611fc4148f88d5c4f964af6f17a7
com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now
// this.worldData.setGameType(properties.gameMode.get()); // CraftBukkit - moved to world loading
@@ -318,6 +328,30 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@@ -315,6 +_,30 @@
if (true) throw new IllegalStateException("Failed to bind to port", var11); // Paper - Propagate failed to bind to port error
return false;
}
@@ -63,13 +55,13 @@ index 354b48c88b113c4048e258f2402aad2647d3c364..e728611fc4148f88d5c4f964af6f17a7
// CraftBukkit start
this.server.loadPlugins();
@@ -393,6 +427,9 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
@@ -389,6 +_,9 @@
MinecraftServerStatistics.registerJmxMonitoring(this);
LOGGER.info("JMX monitoring enabled");
}
+
+ org.purpurmc.purpur.task.BossBarTask.startAll(); // Purpur - Implement TPSBar
+ if (org.purpurmc.purpur.PurpurConfig.beeCountPayload) org.purpurmc.purpur.task.BeehiveTask.instance().register(); // Purpur - Give bee counts in beehives to Purpur clients
+
this.notificationManager().serverStarted();
return true;
}

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/dedicated/DedicatedServerProperties.java b/net/minecraft/server/dedicated/DedicatedServerProperties.java
index e352a29c4a45fd3f397d1cf4586c5f149b4ba0d0..a9cd61f0a7bde931e59f1496191f1f8d465aec5e 100644
--- a/net/minecraft/server/dedicated/DedicatedServerProperties.java
+++ b/net/minecraft/server/dedicated/DedicatedServerProperties.java
@@ -55,6 +55,7 @@ public class DedicatedServerProperties extends Settings<DedicatedServerPropertie
@@ -57,6 +_,7 @@
public final boolean onlineMode = this.get("online-mode", true);
public final boolean preventProxyConnections = this.get("prevent-proxy-connections", false);
public final String serverIp = this.get("server-ip", "");

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/gui/MinecraftServerGui.java b/net/minecraft/server/gui/MinecraftServerGui.java
index f262a7c5ae4e7d56f16f5c0f4f145a2e428abbe4..614c7d9f673c926562acc8fa3b3788623900db41 100644
--- a/net/minecraft/server/gui/MinecraftServerGui.java
+++ b/net/minecraft/server/gui/MinecraftServerGui.java
@@ -39,6 +39,11 @@ public class MinecraftServerGui extends JComponent {
@@ -39,6 +_,11 @@
private Thread logAppenderThread;
private final Collection<Runnable> finalizers = Lists.newArrayList();
final AtomicBoolean isClosing = new AtomicBoolean();
@@ -20,7 +12,7 @@ index f262a7c5ae4e7d56f16f5c0f4f145a2e428abbe4..614c7d9f673c926562acc8fa3b378862
public static MinecraftServerGui showFrameFor(final DedicatedServer server) {
try {
@@ -46,7 +51,7 @@ public class MinecraftServerGui extends JComponent {
@@ -46,7 +_,7 @@
} catch (Exception var3) {
}
@@ -29,7 +21,7 @@ index f262a7c5ae4e7d56f16f5c0f4f145a2e428abbe4..614c7d9f673c926562acc8fa3b378862
final MinecraftServerGui minecraftServerGui = new MinecraftServerGui(server);
jFrame.setDefaultCloseOperation(2);
jFrame.add(minecraftServerGui);
@@ -54,7 +59,7 @@ public class MinecraftServerGui extends JComponent {
@@ -54,7 +_,7 @@
jFrame.setLocationRelativeTo(null);
jFrame.setVisible(true);
// Paper start - Improve ServerGUI
@@ -38,7 +30,7 @@ index f262a7c5ae4e7d56f16f5c0f4f145a2e428abbe4..614c7d9f673c926562acc8fa3b378862
try {
jFrame.setIconImage(javax.imageio.ImageIO.read(java.util.Objects.requireNonNull(MinecraftServerGui.class.getClassLoader().getResourceAsStream("logo.png"))));
} catch (java.io.IOException ignore) {
@@ -64,7 +69,7 @@ public class MinecraftServerGui extends JComponent {
@@ -64,7 +_,7 @@
@Override
public void windowClosing(WindowEvent event) {
if (!minecraftServerGui.isClosing.getAndSet(true)) {
@@ -47,7 +39,7 @@ index f262a7c5ae4e7d56f16f5c0f4f145a2e428abbe4..614c7d9f673c926562acc8fa3b378862
server.halt(true);
minecraftServerGui.runFinalizers();
}
@@ -112,7 +117,7 @@ public class MinecraftServerGui extends JComponent {
@@ -112,7 +_,7 @@
private JComponent buildChatPanel() {
JPanel jPanel = new JPanel(new BorderLayout());
@@ -56,7 +48,7 @@ index f262a7c5ae4e7d56f16f5c0f4f145a2e428abbe4..614c7d9f673c926562acc8fa3b378862
JScrollPane jScrollPane = new JScrollPane(jTextArea, 22, 30);
jTextArea.setEditable(false);
jTextArea.setFont(MONOSPACED);
@@ -121,10 +126,43 @@ public class MinecraftServerGui extends JComponent {
@@ -121,10 +_,43 @@
String trimmed = jTextField.getText().trim();
if (!trimmed.isEmpty()) {
this.server.handleConsoleInput(trimmed, this.server.createCommandSourceStack());
@@ -100,7 +92,7 @@ index f262a7c5ae4e7d56f16f5c0f4f145a2e428abbe4..614c7d9f673c926562acc8fa3b378862
jTextArea.addFocusListener(new FocusAdapter() {
@Override
public void focusGained(FocusEvent event) {
@@ -159,7 +197,7 @@ public class MinecraftServerGui extends JComponent {
@@ -159,7 +_,7 @@
}
private static final java.util.regex.Pattern ANSI = java.util.regex.Pattern.compile("\\e\\[[\\d;]*[^\\d;]"); // CraftBukkit // Paper
@@ -109,7 +101,7 @@ index f262a7c5ae4e7d56f16f5c0f4f145a2e428abbe4..614c7d9f673c926562acc8fa3b378862
if (!SwingUtilities.isEventDispatchThread()) {
SwingUtilities.invokeLater(() -> this.print(textArea, scrollPane, line));
} else {
@@ -170,10 +208,11 @@ public class MinecraftServerGui extends JComponent {
@@ -170,16 +_,29 @@
flag = verticalScrollBar.getValue() + verticalScrollBar.getSize().getHeight() + MONOSPACED.getSize() * 4 > verticalScrollBar.getMaximum();
}
@@ -123,10 +115,10 @@ index f262a7c5ae4e7d56f16f5c0f4f145a2e428abbe4..614c7d9f673c926562acc8fa3b378862
if (flag) {
verticalScrollBar.setValue(Integer.MAX_VALUE);
@@ -181,6 +220,18 @@ public class MinecraftServerGui extends JComponent {
}
}
}
+
+ // Purpur start - GUI Improvements
+ public static class CommandHistory extends java.util.LinkedList<String> {
+ @Override
@@ -138,7 +130,6 @@ index f262a7c5ae4e7d56f16f5c0f4f145a2e428abbe4..614c7d9f673c926562acc8fa3b378862
+ }
+ }
+ // Purpur end - GUI Improvements
+
// Paper start - Add onboarding message for initial server start
private JComponent buildOnboardingPanel() {
String onboardingLink = "https://docs.papermc.io/paper/next-steps";

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/gui/StatsComponent.java b/net/minecraft/server/gui/StatsComponent.java
index 35fd539eb2bfe60ad17ab1e558a01273666acc54..103ff139dae918c991413ce9df61da3e22ee458a 100644
--- a/net/minecraft/server/gui/StatsComponent.java
+++ b/net/minecraft/server/gui/StatsComponent.java
@@ -43,7 +43,7 @@ public class StatsComponent extends JComponent {
@@ -41,7 +_,7 @@
}
this.msgs[0] = "Memory use: " + l / 1024L / 1024L + " mb (" + Runtime.getRuntime().freeMemory() * 100L / Runtime.getRuntime().maxMemory() + "% free)";
this.msgs[1] = "Avg tick: " + DECIMAL_FORMAT.format((double)this.server.getAverageTickTimeNanos() / TimeUtil.NANOSECONDS_PER_MILLISECOND) + " ms";

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index c0ed4e023b35a076b554fa387e9a2324166b2fae..a70c9f9343a5497392d804eb8014b8789c14bafd 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -212,6 +212,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -218,6 +_,8 @@
private final StructureManager structureManager;
private final StructureCheck structureCheck;
private final boolean tickTime;
@@ -17,7 +9,7 @@ index c0ed4e023b35a076b554fa387e9a2324166b2fae..a70c9f9343a5497392d804eb8014b878
private final RandomSequences randomSequences;
final LevelDebugSynchronizers debugSynchronizers = new LevelDebugSynchronizers(this);
@@ -616,8 +618,25 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -622,8 +_,25 @@
// CraftBukkit end
this.tickTime = tickTime;
this.server = server;
@@ -44,7 +36,7 @@ index c0ed4e023b35a076b554fa387e9a2324166b2fae..a70c9f9343a5497392d804eb8014b878
ChunkGenerator chunkGenerator = levelStem.generator();
// CraftBukkit start
this.serverLevelData.setWorld(this);
@@ -699,6 +718,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -709,6 +_,7 @@
this.chunkDataController = new ca.spottedleaf.moonrise.patches.chunk_system.io.datacontroller.ChunkDataController((ServerLevel)(Object)this, this.chunkTaskScheduler);
// Paper end - rewrite chunk system
this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit
@@ -52,19 +44,19 @@ index c0ed4e023b35a076b554fa387e9a2324166b2fae..a70c9f9343a5497392d804eb8014b878
}
// Paper start
@@ -745,7 +765,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -760,7 +_,7 @@
}
int _int = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);
- if (this.sleepStatus.areEnoughSleeping(_int) && this.sleepStatus.areEnoughDeepSleeping(_int, this.players)) {
+ if (this.purpurConfig.playersSkipNight && this.sleepStatus.areEnoughSleeping(_int) && this.sleepStatus.areEnoughDeepSleeping(_int, this.players)) { // Purpur - Config for skipping night
int i = this.getGameRules().get(GameRules.PLAYERS_SLEEPING_PERCENTAGE);
- if (this.sleepStatus.areEnoughSleeping(i) && this.sleepStatus.areEnoughDeepSleeping(i, this.players)) {
+ if (this.purpurConfig.playersSkipNight && this.sleepStatus.areEnoughSleeping(i) && this.sleepStatus.areEnoughDeepSleeping(i, this.players)) { // Purpur - Config for skipping night
// Paper start - create time skip event - move up calculations
final long newDayTime = this.levelData.getDayTime() + 24000L;
org.bukkit.event.world.TimeSkipEvent event = new org.bukkit.event.world.TimeSkipEvent(
@@ -879,6 +899,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -895,6 +_,13 @@
this.serverLevelData.getScheduledEvents().tick(this.server, l);
Profiler.get().pop();
if (this.serverLevelData.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) {
if (this.getGameRules().get(GameRules.ADVANCE_TIME)) {
+ // Purpur start - Configurable daylight cycle
+ int incrementTicks = isBrightOutside() ? this.purpurConfig.daytimeTicks : this.purpurConfig.nighttimeTicks;
+ if (incrementTicks != 12000) {
@@ -75,7 +67,7 @@ index c0ed4e023b35a076b554fa387e9a2324166b2fae..a70c9f9343a5497392d804eb8014b878
this.setDayTime(this.levelData.getDayTime() + 1L);
}
}
@@ -886,6 +913,20 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -902,6 +_,20 @@
public void setDayTime(long time) {
this.serverLevelData.setDayTime(time);
@@ -95,8 +87,8 @@ index c0ed4e023b35a076b554fa387e9a2324166b2fae..a70c9f9343a5497392d804eb8014b878
+ // Purpur end - Configurable daylight cycle
}
public void tickCustomSpawners(boolean spawnEnemies) {
@@ -990,9 +1031,17 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
public long getDayCount() {
@@ -1010,9 +_,17 @@
&& this.random.nextDouble() < currentDifficultyAt.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01) // Paper - Configurable spawn chances for skeleton horses
&& !this.getBlockState(blockPos.below()).is(BlockTags.LIGHTNING_RODS);
if (flag) {
@@ -116,10 +108,10 @@ index c0ed4e023b35a076b554fa387e9a2324166b2fae..a70c9f9343a5497392d804eb8014b878
skeletonHorse.setAge(0);
skeletonHorse.setPos(blockPos.getX(), blockPos.getY(), blockPos.getZ());
this.addFreshEntity(skeletonHorse, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit
@@ -1027,9 +1076,35 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1047,9 +_,35 @@
if (blockState.is(Blocks.SNOW)) {
int layersValue = blockState.getValue(SnowLayerBlock.LAYERS);
if (layersValue < Math.min(_int, 8)) {
if (layersValue < Math.min(i, 8)) {
+ // Purpur start - Smooth snow accumulation
+ boolean canSnow = true;
+ // Ensure snow doesn't get more than N layers taller than its neighbors
@@ -152,19 +144,19 @@ index c0ed4e023b35a076b554fa387e9a2324166b2fae..a70c9f9343a5497392d804eb8014b878
}
} else {
org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockFormEvent(this, heightmapPos, Blocks.SNOW.defaultBlockState(), 3, null); // CraftBukkit
@@ -1050,7 +1125,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1070,7 +_,7 @@
poiType -> poiType.is(PoiTypes.LIGHTNING_ROD),
pos1 -> pos1.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, pos1.getX(), pos1.getZ()) - 1,
blockPos -> blockPos.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, blockPos.getX(), blockPos.getZ()) - 1,
pos,
- 128,
+ org.purpurmc.purpur.PurpurConfig.lightningRodRange, // Purpur - Make lightning rod range configurable
PoiManager.Occupancy.ANY
);
return optional.map(pos1 -> pos1.above(1));
@@ -1099,8 +1174,26 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
int _int = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);
return optional.map(blockPos -> blockPos.above(1));
@@ -1119,8 +_,26 @@
int i = this.getGameRules().get(GameRules.PLAYERS_SLEEPING_PERCENTAGE);
Component component;
if (this.sleepStatus.areEnoughSleeping(_int)) {
if (this.sleepStatus.areEnoughSleeping(i)) {
+ // Purpur start - Customizable sleeping actionbar messages
+ if (org.purpurmc.purpur.PurpurConfig.sleepSkippingNight.isBlank()) {
+ return;
@@ -185,10 +177,10 @@ index c0ed4e023b35a076b554fa387e9a2324166b2fae..a70c9f9343a5497392d804eb8014b878
+ net.kyori.adventure.text.minimessage.tag.resolver.Placeholder.parsed("total", Integer.toString(this.sleepStatus.sleepersNeeded(_int)))));
+ } else
+ // Purpur end - Customizable sleeping actionbar messages
component = Component.translatable("sleep.players_sleeping", this.sleepStatus.amountSleeping(), this.sleepStatus.sleepersNeeded(_int));
component = Component.translatable("sleep.players_sleeping", this.sleepStatus.amountSleeping(), this.sleepStatus.sleepersNeeded(i));
}
@@ -1237,6 +1330,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1275,6 +_,7 @@
@VisibleForTesting
public void resetWeatherCycle() {
// CraftBukkit start
@@ -196,7 +188,7 @@ index c0ed4e023b35a076b554fa387e9a2324166b2fae..a70c9f9343a5497392d804eb8014b878
this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
// Not that everyone ever manages to get the whole server to sleep at the same time....
@@ -1244,6 +1338,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1282,6 +_,7 @@
this.serverLevelData.setRainTime(0);
}
// CraftBukkit end
@@ -204,16 +196,16 @@ index c0ed4e023b35a076b554fa387e9a2324166b2fae..a70c9f9343a5497392d804eb8014b878
this.serverLevelData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents
// CraftBukkit start
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
@@ -1917,7 +2012,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1954,7 +_,7 @@
Explosion.BlockInteraction blockInteraction = switch (explosionInteraction) {
case NONE -> Explosion.BlockInteraction.KEEP;
case BLOCK -> this.getDestroyType(GameRules.RULE_BLOCK_EXPLOSION_DROP_DECAY);
- case MOB -> this.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)
+ case MOB -> ((source instanceof net.minecraft.world.entity.projectile.LargeFireball) ? this.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING, this.purpurConfig.fireballsMobGriefingOverride) : this.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) // Purpur - Add mobGriefing override to everything affected
? this.getDestroyType(GameRules.RULE_MOB_EXPLOSION_DROP_DECAY)
case BLOCK -> this.getDestroyType(GameRules.BLOCK_EXPLOSION_DROP_DECAY);
- case MOB -> this.getGameRules().get(GameRules.MOB_GRIEFING)
+ case MOB -> ((source instanceof net.minecraft.world.entity.projectile.LargeFireball) ? this.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING, this.purpurConfig.fireballsMobGriefingOverride) : this.getGameRules().get(GameRules.MOB_GRIEFING)) // Purpur - Add mobGriefing override to everything affected
? this.getDestroyType(GameRules.MOB_EXPLOSION_DROP_DECAY)
: Explosion.BlockInteraction.KEEP;
case TNT -> this.getDestroyType(GameRules.RULE_TNT_EXPLOSION_DROP_DECAY);
@@ -2794,7 +2889,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
case TNT -> this.getDestroyType(GameRules.TNT_EXPLOSION_DROP_DECAY);
@@ -2846,7 +_,7 @@
// Spigot start
if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message
// Paper start - Fix merchant inventory not closing on entity removal

View File

@@ -1,24 +1,16 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index b4a996ac6c570e988b38237a32f90ec5042cbc17..d4b57465b7d49f8000de31f75c49f3f7ed333419 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -443,6 +443,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -428,6 +_,9 @@
public boolean isRealPlayer; // Paper
public @Nullable com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent
public @Nullable org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event
public com.destroystokyo.paper.event.entity.@Nullable PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent
public org.bukkit.event.player.PlayerQuitEvent.@Nullable QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event
+ private boolean tpsBar = false; // Purpur - Implement TPSBar
+ private boolean compassBar = false; // Purpur - Add compass command
+ private boolean ramBar = false; // Purpur - Implement rambar commands
// Paper start - rewrite chunk system
private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader;
@@ -516,6 +519,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -501,6 +_,9 @@
this.respawnConfig = input.read("respawn", ServerPlayer.RespawnConfig.CODEC).orElse(null);
this.spawnExtraParticlesOnFall = input.getBooleanOr("spawn_extra_particles_on_fall", false);
this.raidOmenPosition = input.read("raid_omen_position", BlockPos.CODEC).orElse(null);
@@ -28,7 +20,7 @@ index b4a996ac6c570e988b38237a32f90ec5042cbc17..d4b57465b7d49f8000de31f75c49f3f7
// Paper start - Expand PlayerGameModeChangeEvent
this.loadGameTypes(input);
}
@@ -557,6 +563,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -542,6 +_,9 @@
output.store("ShoulderEntityRight", CompoundTag.CODEC, this.getShoulderEntityRight());
}
this.getBukkitEntity().setExtraData(output); // CraftBukkit
@@ -38,7 +30,7 @@ index b4a996ac6c570e988b38237a32f90ec5042cbc17..d4b57465b7d49f8000de31f75c49f3f7
}
private void saveParentVehicle(ValueOutput output) {
@@ -1186,6 +1195,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -1178,6 +_,7 @@
// Paper - moved up to sendClientboundPlayerCombatKillPacket()
sendClientboundPlayerCombatKillPacket(event.getShowDeathMessages(), deathScreenMessage); // Paper - Expand PlayerDeathEvent
Team team = this.getTeam();
@@ -46,7 +38,7 @@ index b4a996ac6c570e988b38237a32f90ec5042cbc17..d4b57465b7d49f8000de31f75c49f3f7
if (team == null || team.getDeathMessageVisibility() == Team.Visibility.ALWAYS) {
this.server.getPlayerList().broadcastSystemMessage(deathMessage, false);
} else if (team.getDeathMessageVisibility() == Team.Visibility.HIDE_FOR_OTHER_TEAMS) {
@@ -1293,6 +1303,13 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -1285,6 +_,13 @@
if (this.isInvulnerableTo(level, damageSource)) {
return false;
} else {
@@ -60,7 +52,7 @@ index b4a996ac6c570e988b38237a32f90ec5042cbc17..d4b57465b7d49f8000de31f75c49f3f7
Entity entity = damageSource.getEntity();
if (!( // Paper - split the if statement. If below statement is false, hurtServer would not have been evaluated. Return false.
!(entity instanceof Player player && !this.canHarmPlayer(player))
@@ -1546,6 +1563,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -1539,6 +_,7 @@
profilerFiller.pop();
profilerFiller.push("placing");
@@ -68,21 +60,21 @@ index b4a996ac6c570e988b38237a32f90ec5042cbc17..d4b57465b7d49f8000de31f75c49f3f7
this.setServerLevel(level);
this.connection.internalTeleport(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); // CraftBukkit - use internal teleport without event
this.connection.resetPosition();
@@ -1647,7 +1665,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
new AABB(vec3.x() - 8.0, vec3.y() - 5.0, vec3.z() - 8.0, vec3.x() + 8.0, vec3.y() + 5.0, vec3.z() + 8.0),
monster -> monster.isPreventingPlayerRest(this.level(), this)
);
- if (!entitiesOfClass.isEmpty()) {
+ if (!this.level().purpurConfig.playerSleepNearMonsters && !entitiesOfClass.isEmpty()) { // Purpur - Config to ignore nearby mobs when sleeping
return Either.left(Player.BedSleepingProblem.NOT_SAFE);
@@ -1647,7 +_,7 @@
new AABB(vec3.x() - 8.0, vec3.y() - 5.0, vec3.z() - 8.0, vec3.x() + 8.0, vec3.y() + 5.0, vec3.z() + 8.0),
monster -> monster.isPreventingPlayerRest(this.level(), this)
);
- if (!entitiesOfClass.isEmpty()) {
+ if (!this.level().purpurConfig.playerSleepNearMonsters && !entitiesOfClass.isEmpty()) { // Purpur - Config to ignore nearby mobs when sleeping
return Either.left(Player.BedSleepingProblem.NOT_SAFE);
}
}
}
@@ -1684,7 +1702,19 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
CriteriaTriggers.SLEPT_IN_BED.trigger(this);
});
if (!this.level().canSleepThroughNights()) {
- this.displayClientMessage(Component.translatable("sleep.not_possible"), true);
+ // Purpur start - Customizable sleeping actionbar messages
@@ -1687,8 +_,19 @@
CriteriaTriggers.SLEPT_IN_BED.trigger(this);
});
if (!this.level().canSleepThroughNights()) {
- this.displayClientMessage(Component.translatable("sleep.not_possible"), true);
+ // Purpur start - Customizable sleeping actionbar messages
+ Component clientMessage;
+ if (org.purpurmc.purpur.PurpurConfig.sleepNotPossible.isBlank()) {
+ clientMessage = null;
@@ -90,15 +82,15 @@ index b4a996ac6c570e988b38237a32f90ec5042cbc17..d4b57465b7d49f8000de31f75c49f3f7
+ clientMessage = io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(org.purpurmc.purpur.PurpurConfig.sleepNotPossible));
+ } else {
+ clientMessage = Component.translatable("sleep.not_possible");
+ }
}
+ if (clientMessage != null) {
+ this.displayClientMessage(clientMessage, true);
+ }
+ // Purpur end - Customizable sleeping actionbar messages
}
+ }// Purpur end - Customizable sleeping actionbar messages
+ }
this.level().updateSleepingPlayerList();
@@ -1776,6 +1806,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
this.level().updateSleepingPlayerList();
return either;
@@ -1779,6 +_,7 @@
@Override
public void openTextEdit(SignBlockEntity signEntity, boolean isFrontText) {
@@ -106,7 +98,7 @@ index b4a996ac6c570e988b38237a32f90ec5042cbc17..d4b57465b7d49f8000de31f75c49f3f7
this.connection.send(new ClientboundBlockUpdatePacket(this.level(), signEntity.getBlockPos()));
this.connection.send(new ClientboundOpenSignEditorPacket(signEntity.getBlockPos(), isFrontText));
}
@@ -2085,6 +2116,26 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -2116,6 +_,26 @@
this.lastSentExp = -1; // CraftBukkit - Added to reset
}
@@ -133,7 +125,7 @@ index b4a996ac6c570e988b38237a32f90ec5042cbc17..d4b57465b7d49f8000de31f75c49f3f7
@Override
public void displayClientMessage(Component message, boolean overlay) {
this.sendSystemMessage(message, overlay);
@@ -2319,6 +2370,20 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -2350,6 +_,20 @@
);
}
@@ -154,10 +146,11 @@ index b4a996ac6c570e988b38237a32f90ec5042cbc17..d4b57465b7d49f8000de31f75c49f3f7
public void sendSystemMessage(Component message) {
this.sendSystemMessage(message, false);
}
@@ -2457,7 +2522,67 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -2487,7 +_,67 @@
public void resetLastActionTime() {
this.lastActionTime = Util.getMillis();
- }
+ this.setAfk(false); // Purpur - AFK API
+ }
+
@@ -217,12 +210,12 @@ index b4a996ac6c570e988b38237a32f90ec5042cbc17..d4b57465b7d49f8000de31f75c49f3f7
+ @Override
+ public boolean canBeCollidedWith(Entity entity) {
+ return !this.isAfk() && super.canBeCollidedWith(entity);
}
+ }
+ // Purpur end - AFK API
public ServerStatsCounter getStats() {
return this.stats;
@@ -3098,4 +3223,65 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -3123,4 +_,65 @@
return (org.bukkit.craftbukkit.entity.CraftPlayer) super.getBukkitEntity();
}
// CraftBukkit end

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/level/ServerPlayerGameMode.java b/net/minecraft/server/level/ServerPlayerGameMode.java
index 7166889bce8065508030ecd5b1400ee9be031bf3..fad600f343ee0983efc183f083b1507648987575 100644
--- a/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -368,6 +368,7 @@ public class ServerPlayerGameMode {
@@ -364,6 +_,7 @@
}
return false;
}
@@ -16,7 +8,7 @@ index 7166889bce8065508030ecd5b1400ee9be031bf3..fad600f343ee0983efc183f083b15076
}
// CraftBukkit end
@@ -485,6 +486,7 @@ public class ServerPlayerGameMode {
@@ -481,6 +_,7 @@
public InteractionHand interactHand;
public ItemStack interactItemStack;
public InteractionResult useItemOn(ServerPlayer player, Level level, ItemStack stack, InteractionHand hand, BlockHitResult hitResult) {
@@ -24,7 +16,7 @@ index 7166889bce8065508030ecd5b1400ee9be031bf3..fad600f343ee0983efc183f083b15076
BlockPos blockPos = hitResult.getBlockPos();
BlockState blockState = level.getBlockState(blockPos);
boolean cancelledBlock = false;
@@ -527,7 +529,7 @@ public class ServerPlayerGameMode {
@@ -523,7 +_,7 @@
boolean flag = !player.getMainHandItem().isEmpty() || !player.getOffhandItem().isEmpty();
boolean flag1 = player.isSecondaryUseActive() && flag;
ItemStack itemStack = stack.copy();
@@ -33,7 +25,7 @@ index 7166889bce8065508030ecd5b1400ee9be031bf3..fad600f343ee0983efc183f083b15076
InteractionResult interactionResult = blockState.useItemOn(player.getItemInHand(hand), level, player, hand, hitResult);
if (interactionResult.consumesAction()) {
CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(player, blockPos, itemStack);
@@ -573,4 +575,18 @@ public class ServerPlayerGameMode {
@@ -569,4 +_,18 @@
public void setLevel(ServerLevel level) {
this.level = level;
}

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/level/WorldGenRegion.java b/net/minecraft/server/level/WorldGenRegion.java
index b8be39ae633e466d764f329f614620f1a2e1ef3f..75f3f8e033c1ef3ed6790dabaf9565b9f08d0ef2 100644
--- a/net/minecraft/server/level/WorldGenRegion.java
+++ b/net/minecraft/server/level/WorldGenRegion.java
@@ -314,6 +314,7 @@ public class WorldGenRegion implements WorldGenLevel {
@@ -311,6 +_,7 @@
return true;
} else {
// Paper start - Buffer OOB setBlock calls

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
index c6db2c96db96453daaf49779f588f75f7c3d3d60..e98400719a4ab43dc0ce90cdca19ba86e4849720 100644
--- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
@@ -40,10 +40,11 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -40,10 +_,11 @@
public final Connection connection; // Paper
private final boolean transferred;
//private long keepAliveTime; // Paper - improve keepalives
@@ -21,18 +13,18 @@ index c6db2c96db96453daaf49779f588f75f7c3d3d60..e98400719a4ab43dc0ce90cdca19ba86
private volatile int latency; // Paper - improve keepalives - make volatile
private final io.papermc.paper.util.KeepAlive keepAlive; // Paper - improve keepalives
private volatile boolean suspendFlushingOnServerThread = false;
@@ -54,6 +55,10 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -54,6 +_,10 @@
public final java.util.Map<java.util.UUID, net.kyori.adventure.resource.ResourcePackCallback> packCallbacks = new java.util.concurrent.ConcurrentHashMap<>(); // Paper - adventure resource pack callbacks
private static final long KEEPALIVE_LIMIT = Long.getLong("paper.playerconnection.keepalive", 30) * 1000; // Paper - provide property to set keepalive limit
protected static final net.minecraft.resources.ResourceLocation MINECRAFT_BRAND = net.minecraft.resources.ResourceLocation.withDefaultNamespace("brand"); // Paper - Brand support
protected static final net.minecraft.resources.Identifier MINECRAFT_BRAND = net.minecraft.resources.Identifier.withDefaultNamespace("brand"); // Paper - Brand support
+ // Purpur start - Purpur client support
+ protected static final net.minecraft.resources.ResourceLocation PURPUR_CLIENT = net.minecraft.resources.ResourceLocation.fromNamespaceAndPath("purpur", "client");
+ protected static final net.minecraft.resources.Identifier PURPUR_CLIENT = net.minecraft.resources.Identifier.fromNamespaceAndPath("purpur", "client");
+ public boolean purpurClient;
+ // Purpur end - Purpur client support
// Paper start - retain certain values
public @Nullable String playerBrand;
public final java.util.Set<String> pluginMessagerChannels;
@@ -105,6 +110,18 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -105,6 +_,18 @@
// Paper start - improve keepalives
long now = System.nanoTime();
io.papermc.paper.util.KeepAlive.PendingKeepAlive pending = this.keepAlive.pendingKeepAlives.peek();
@@ -51,7 +43,7 @@ index c6db2c96db96453daaf49779f588f75f7c3d3d60..e98400719a4ab43dc0ce90cdca19ba86
if (pending != null && pending.challengeId() == packet.getId()) {
this.keepAlive.pendingKeepAlives.remove(pending);
@@ -179,6 +196,12 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -179,6 +_,12 @@
return;
}
@@ -64,7 +56,7 @@ index c6db2c96db96453daaf49779f588f75f7c3d3d60..e98400719a4ab43dc0ce90cdca19ba86
if (identifier.equals(MINECRAFT_BRAND)) {
this.playerBrand = new net.minecraft.network.FriendlyByteBuf(io.netty.buffer.Unpooled.wrappedBuffer(data)).readUtf(256);
}
@@ -264,6 +287,23 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
@@ -264,6 +_,23 @@
Profiler.get().push("keepAlive");
long millis = Util.getMillis();
// Paper start - improve keepalives

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index ef7d44ea1c1582bbf1d544819825778c414fe40d..caae7fc98d13ad92d17b6869b1fe86a79a1f5ba6 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -341,6 +341,20 @@ public class ServerGamePacketListenerImpl
@@ -346,6 +_,20 @@
}
// Paper end - configuration phase API
@@ -29,7 +21,7 @@ index ef7d44ea1c1582bbf1d544819825778c414fe40d..caae7fc98d13ad92d17b6869b1fe86a7
@Override
public void tick() {
if (this.ackBlockChangesUpTo > -1) {
@@ -358,6 +372,12 @@ public class ServerGamePacketListenerImpl
@@ -363,6 +_,12 @@
&& this.server.playerIdleTimeout() > 0
&& Util.getMillis() - this.player.getLastActionTime() > TimeUnit.MINUTES.toMillis(this.server.playerIdleTimeout())
&& !this.player.wonGame) {
@@ -42,7 +34,7 @@ index ef7d44ea1c1582bbf1d544819825778c414fe40d..caae7fc98d13ad92d17b6869b1fe86a7
this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause
}
}
@@ -672,6 +692,8 @@ public class ServerGamePacketListenerImpl
@@ -682,6 +_,8 @@
this.lastYaw = to.getYaw();
this.lastPitch = to.getPitch();
@@ -51,7 +43,7 @@ index ef7d44ea1c1582bbf1d544819825778c414fe40d..caae7fc98d13ad92d17b6869b1fe86a7
Location oldTo = to.clone();
PlayerMoveEvent event = new PlayerMoveEvent(player, from, to);
this.cserver.getPluginManager().callEvent(event);
@@ -751,6 +773,7 @@ public class ServerGamePacketListenerImpl
@@ -761,6 +_,7 @@
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level());
if (packet.getId() == this.awaitingTeleport) {
if (this.awaitingPositionFromClient == null) {
@@ -59,7 +51,7 @@ index ef7d44ea1c1582bbf1d544819825778c414fe40d..caae7fc98d13ad92d17b6869b1fe86a7
this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause
return;
}
@@ -1284,6 +1307,10 @@ public class ServerGamePacketListenerImpl
@@ -1308,6 +_,10 @@
final int maxBookPageSize = pageMax.intValue();
final double multiplier = Math.clamp(io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier, 0.3D, 1D);
long byteAllowed = maxBookPageSize;
@@ -70,7 +62,7 @@ index ef7d44ea1c1582bbf1d544819825778c414fe40d..caae7fc98d13ad92d17b6869b1fe86a7
for (final String page : pageList) {
final int byteLength = page.getBytes(java.nio.charset.StandardCharsets.UTF_8).length;
byteTotal += byteLength;
@@ -1308,7 +1335,8 @@ public class ServerGamePacketListenerImpl
@@ -1332,7 +_,8 @@
}
if (byteTotal > byteAllowed) {
@@ -80,7 +72,7 @@ index ef7d44ea1c1582bbf1d544819825778c414fe40d..caae7fc98d13ad92d17b6869b1fe86a7
this.disconnectAsync(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause // Paper - add proper async disconnect
return;
}
@@ -1327,31 +1355,45 @@ public class ServerGamePacketListenerImpl
@@ -1351,31 +_,45 @@
Optional<String> optional = packet.title();
optional.ifPresent(list::add);
list.addAll(packet.pages());
@@ -130,7 +122,7 @@ index ef7d44ea1c1582bbf1d544819825778c414fe40d..caae7fc98d13ad92d17b6869b1fe86a7
itemStack.set(
DataComponents.WRITTEN_BOOK_CONTENT, new WrittenBookContent(this.filterableFromOutgoing(title), this.player.getPlainTextName(), 0, list, true)
);
@@ -1364,6 +1406,16 @@ public class ServerGamePacketListenerImpl
@@ -1388,6 +_,16 @@
return this.player.isTextFilteringEnabled() ? Filterable.passThrough(filteredText.filteredOrEmpty()) : Filterable.from(filteredText);
}
@@ -147,7 +139,7 @@ index ef7d44ea1c1582bbf1d544819825778c414fe40d..caae7fc98d13ad92d17b6869b1fe86a7
@Override
public void handleEntityTagQuery(ServerboundEntityTagQueryPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level());
@@ -1403,7 +1455,15 @@ public class ServerGamePacketListenerImpl
@@ -1427,7 +_,15 @@
@Override
public void handleMovePlayer(ServerboundMovePlayerPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level());
@@ -164,7 +156,7 @@ index ef7d44ea1c1582bbf1d544819825778c414fe40d..caae7fc98d13ad92d17b6869b1fe86a7
this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause
} else {
ServerLevel serverLevel = this.player.level();
@@ -1585,7 +1645,7 @@ public class ServerGamePacketListenerImpl
@@ -1610,7 +_,7 @@
movedWrongly = true;
if (event.getLogWarning())
// Paper end
@@ -173,7 +165,7 @@ index ef7d44ea1c1582bbf1d544819825778c414fe40d..caae7fc98d13ad92d17b6869b1fe86a7
} // Paper
}
@@ -1650,6 +1710,8 @@ public class ServerGamePacketListenerImpl
@@ -1675,6 +_,8 @@
this.lastYaw = to.getYaw();
this.lastPitch = to.getPitch();
@@ -182,7 +174,7 @@ index ef7d44ea1c1582bbf1d544819825778c414fe40d..caae7fc98d13ad92d17b6869b1fe86a7
Location oldTo = to.clone();
PlayerMoveEvent event = new PlayerMoveEvent(player, from, to);
this.cserver.getPluginManager().callEvent(event);
@@ -1705,6 +1767,13 @@ public class ServerGamePacketListenerImpl
@@ -1730,6 +_,13 @@
this.player.tryResetCurrentImpulseContext();
}
@@ -196,7 +188,7 @@ index ef7d44ea1c1582bbf1d544819825778c414fe40d..caae7fc98d13ad92d17b6869b1fe86a7
this.player.checkMovementStatistics(this.player.getX() - x, this.player.getY() - y, this.player.getZ() - z);
this.lastGoodX = this.player.getX();
this.lastGoodY = this.player.getY();
@@ -1722,6 +1791,17 @@ public class ServerGamePacketListenerImpl
@@ -1747,6 +_,17 @@
}
}
@@ -214,7 +206,7 @@ index ef7d44ea1c1582bbf1d544819825778c414fe40d..caae7fc98d13ad92d17b6869b1fe86a7
private boolean shouldCheckPlayerMovement(boolean isElytraMovement) {
if (this.isSingleplayerOwner()) {
return false;
@@ -2121,6 +2201,7 @@ public class ServerGamePacketListenerImpl
@@ -2161,6 +_,7 @@
boolean cancelled;
if (hitResult == null || hitResult.getType() != HitResult.Type.BLOCK) {
@@ -222,20 +214,20 @@ index ef7d44ea1c1582bbf1d544819825778c414fe40d..caae7fc98d13ad92d17b6869b1fe86a7
org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemInHand, hand);
cancelled = event.useItemInHand() == Event.Result.DENY;
} else {
@@ -2768,6 +2849,7 @@ public class ServerGamePacketListenerImpl
@@ -2807,6 +_,7 @@
AABB boundingBox = target.getBoundingBox();
if (this.player.canInteractWithEntity(boundingBox, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(3.0))) { // Paper - configurable lenience value for interact range
if (packet.isWithinRange(this.player, boundingBox, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(3.0))) { // Paper - configurable lenience value for interact range
+ if (target instanceof net.minecraft.world.entity.Mob mob) mob.ticksSinceLastInteraction = 0; // Purpur - Entity lifespan
packet.dispatch(
new ServerboundInteractPacket.Handler() {
private void performInteraction(InteractionHand hand, ServerGamePacketListenerImpl.EntityInteraction entityInteraction, PlayerInteractEntityEvent event) { // CraftBukkit
@@ -3509,7 +3591,7 @@ public class ServerGamePacketListenerImpl
@@ -3552,7 +_,7 @@
@Override
public void handleChangeGameMode(ServerboundChangeGameModePacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level());
- if (!this.player.hasPermissions(2)) {
+ if (!this.player.hasPermissions(2) && !player.getBukkitEntity().hasPermission("purpur.debug.f3n")) { // Purpur - Add permission for F3+N debug
- if (!GameModeCommand.PERMISSION_CHECK.check(this.player.permissions())) {
+ if (!GameModeCommand.PERMISSION_CHECK.check(this.player.permissions()) && !player.getBukkitEntity().hasPermission("purpur.debug.f3n")) { // Purpur - Add permission for F3+N debug
LOGGER.warn(
"Player {} tried to change game mode to {} without required permissions",
this.player.getGameProfile().name(),

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
index c5d071c591c844b11667013131d1d3bae8e3bac6..ace65f36d6562988665c530dd3fdbfaa5d2e2071 100644
--- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
@@ -276,7 +276,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener,
@@ -278,7 +_,7 @@
ServerLoginPacketListenerImpl.LOGGER.warn("Failed to verify username but will let them in anyway!");
ServerLoginPacketListenerImpl.this.startClientVerification(ServerLoginPacketListenerImpl.this.createOfflineProfile(string1)); // Spigot
} else {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/network/ServerStatusPacketListenerImpl.java b/net/minecraft/server/network/ServerStatusPacketListenerImpl.java
index 465559113071a47e706f77a5b0996597ee986b3d..1b966dc52b067cd9d1fa9f500b692e3f75f1cc90 100644
--- a/net/minecraft/server/network/ServerStatusPacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerStatusPacketListenerImpl.java
@@ -37,6 +37,7 @@ public class ServerStatusPacketListenerImpl implements ServerStatusPacketListene
@@ -37,6 +_,7 @@
} else {
this.hasRequestedStatus = true;
// this.connection.send(new ClientboundStatusResponsePacket(this.status)); // Paper

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index cc5d1e8007e2ea32605bd68d0a73683e8fb6886e..0c3451caa323ce2553c0d7ee00e7bf8cc8766b2c 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -305,6 +305,7 @@ public abstract class PlayerList {
@@ -311,6 +_,7 @@
scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam);
}
// Paper end - Configurable player collision
@@ -16,15 +8,15 @@ index cc5d1e8007e2ea32605bd68d0a73683e8fb6886e..0c3451caa323ce2553c0d7ee00e7bf8c
// CraftBukkit start - moved down
LOGGER.info(
"{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", // CraftBukkit - add world name
@@ -425,6 +426,7 @@ public abstract class PlayerList {
@@ -431,6 +_,7 @@
}
public @Nullable net.kyori.adventure.text.Component remove(ServerPlayer player, net.kyori.adventure.text.Component leaveMessage) {
public net.kyori.adventure.text.@Nullable Component remove(ServerPlayer player, net.kyori.adventure.text.Component leaveMessage) {
// Paper end - Fix kick event leave message not being sent
+ org.purpurmc.purpur.task.BossBarTask.removeFromAll(player.getBukkitEntity()); // Purpur - Implement TPSBar
ServerLevel serverLevel = player.level();
player.awardStat(Stats.LEAVE_GAME);
// CraftBukkit start - Quitting must be before we do final save of data, in case plugins need to modify it
@@ -764,6 +766,20 @@ public abstract class PlayerList {
@@ -770,6 +_,20 @@
}
}
@@ -45,23 +37,15 @@ index cc5d1e8007e2ea32605bd68d0a73683e8fb6886e..0c3451caa323ce2553c0d7ee00e7bf8c
public void broadcastAll(Packet<?> packet, ResourceKey<Level> dimension) {
for (ServerPlayer serverPlayer : this.players) {
if (serverPlayer.level().dimension() == dimension) {
@@ -852,12 +868,13 @@ public abstract class PlayerList {
if (player.connection != null) {
byte b;
if (permLevel <= 0) {
- b = 24;
+ b = EntityEvent.PERMISSION_LEVEL_ALL; // Purpur - Constants
} else if (permLevel >= 4) {
- b = 28;
+ b = EntityEvent.PERMISSION_LEVEL_OWNERS; // Purpur - Constants
} else {
b = (byte)(EntityEvent.PERMISSION_LEVEL_ALL + permLevel);
}
@@ -863,6 +_,7 @@
case ADMINS -> EntityEvent.PERMISSION_LEVEL_ADMINS;
case OWNERS -> EntityEvent.PERMISSION_LEVEL_OWNERS;
};
+ if (b < EntityEvent.PERMISSION_LEVEL_OWNERS && player.getBukkitEntity().hasPermission("purpur.debug.f3n")) b = EntityEvent.PERMISSION_LEVEL_OWNERS; // Purpur - Add permission for F3+N debug
player.connection.send(new ClientboundEntityEventPacket(player, b));
}
@@ -870,7 +887,7 @@ public abstract class PlayerList {
@@ -874,7 +_,7 @@
// Paper start - whitelist verify event / login event
public LoginResult canBypassFullServerLogin(final NameAndId nameAndId, final LoginResult currentResult) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/server/players/SleepStatus.java b/net/minecraft/server/players/SleepStatus.java
index 2a7ae521654ad5c9f392baa5562e64bb71b13097..3a3e6992563236141db687084aeec9684437a7db 100644
--- a/net/minecraft/server/players/SleepStatus.java
+++ b/net/minecraft/server/players/SleepStatus.java
@@ -15,7 +15,7 @@ public class SleepStatus {
@@ -15,7 +_,7 @@
public boolean areEnoughDeepSleeping(int requiredSleepPercentage, List<ServerPlayer> sleepingPlayers) {
// CraftBukkit start
@@ -17,7 +9,7 @@ index 2a7ae521654ad5c9f392baa5562e64bb71b13097..3a3e6992563236141db687084aeec968
boolean anyDeepSleep = sleepingPlayers.stream().anyMatch(Player::isSleepingLongEnough);
return anyDeepSleep && i >= this.sleepersNeeded(requiredSleepPercentage);
// CraftBukkit end
@@ -43,7 +43,7 @@ public class SleepStatus {
@@ -43,7 +_,7 @@
for (ServerPlayer serverPlayer : players) {
if (!serverPlayer.isSpectator()) {
this.activePlayers++;

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/stats/ServerRecipeBook.java b/net/minecraft/stats/ServerRecipeBook.java
index 736a52c23da313bec6b25a9d1abf08816462403c..2f4f90bf428deb682fe9ec8c1218ae31ebaeea7c 100644
--- a/net/minecraft/stats/ServerRecipeBook.java
+++ b/net/minecraft/stats/ServerRecipeBook.java
@@ -106,6 +106,7 @@ public class ServerRecipeBook extends RecipeBook {
@@ -106,6 +_,7 @@
private void loadRecipes(List<ResourceKey<Recipe<?>>> recipes, Consumer<ResourceKey<Recipe<?>>> output, Predicate<ResourceKey<Recipe<?>>> isRecognized) {
for (ResourceKey<Recipe<?>> resourceKey : recipes) {
if (!isRecognized.test(resourceKey)) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/util/StringUtil.java b/net/minecraft/util/StringUtil.java
index 62fdb8c215552a897c67dd97a302a86afee6d44f..3c5769e0f29d6b3295df568dc461ed521cb04378 100644
--- a/net/minecraft/util/StringUtil.java
+++ b/net/minecraft/util/StringUtil.java
@@ -87,6 +87,7 @@ public class StringUtil {
@@ -87,6 +_,7 @@
// Paper start - Username validation
public static boolean isReasonablePlayerName(final String name) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/damagesource/CombatRules.java b/net/minecraft/world/damagesource/CombatRules.java
index 5f8637dfe4703cb78f486fe49d2e81518cf48715..d27215349f63e73198d23e107a6b634ddef8f7ca 100644
--- a/net/minecraft/world/damagesource/CombatRules.java
+++ b/net/minecraft/world/damagesource/CombatRules.java
@@ -15,7 +15,7 @@ public class CombatRules {
@@ -15,7 +_,7 @@
public static float getDamageAfterAbsorb(LivingEntity entity, float damageAmount, DamageSource damageSource, float armorValue, float armorToughness) {
float f = 2.0F + armorToughness / 4.0F;
@@ -17,7 +9,7 @@ index 5f8637dfe4703cb78f486fe49d2e81518cf48715..d27215349f63e73198d23e107a6b634d
float f2 = f1 / 25.0F;
ItemStack weaponItem = damageSource.getWeaponItem();
float f3;
@@ -30,7 +30,7 @@ public class CombatRules {
@@ -30,7 +_,7 @@
}
public static float getDamageAfterMagicAbsorb(float damageAmount, float enchantModifiers) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/damagesource/CombatTracker.java b/net/minecraft/world/damagesource/CombatTracker.java
index 4cec197634fac341cca1ed108f1ecb0561f72461..aa6213ca382e4901363317df1e30332c5166f271 100644
--- a/net/minecraft/world/damagesource/CombatTracker.java
+++ b/net/minecraft/world/damagesource/CombatTracker.java
@@ -64,7 +64,7 @@ public class CombatTracker {
@@ -64,7 +_,7 @@
private Component getMessageForAssistedFall(Entity entity, Component entityDisplayName, String hasWeaponTranslationKey, String noWeaponTranslationKey) {
ItemStack itemStack = entity instanceof LivingEntity livingEntity ? livingEntity.getMainHandItem() : ItemStack.EMPTY;
@@ -17,7 +9,7 @@ index 4cec197634fac341cca1ed108f1ecb0561f72461..aa6213ca382e4901363317df1e30332c
? Component.translatable(hasWeaponTranslationKey, this.mob.getDisplayName(), entityDisplayName, itemStack.getDisplayName())
: Component.translatable(noWeaponTranslationKey, this.mob.getDisplayName(), entityDisplayName);
}
@@ -108,6 +108,15 @@ public class CombatTracker {
@@ -107,6 +_,15 @@
Component component = ComponentUtils.wrapInSquareBrackets(Component.translatable(string + ".link")).withStyle(INTENTIONAL_GAME_DESIGN_STYLE);
return Component.translatable(string + ".message", this.mob.getDisplayName(), component);
} else {

View File

@@ -1,23 +1,15 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/damagesource/DamageSource.java b/net/minecraft/world/damagesource/DamageSource.java
index bb021fc9de91f8c4f79e6a753d57fa157efbbda7..5fa92eef9c6b88cf96d3fe427e4d4f16953e8094 100644
--- a/net/minecraft/world/damagesource/DamageSource.java
+++ b/net/minecraft/world/damagesource/DamageSource.java
@@ -30,6 +30,8 @@ public class DamageSource {
@Nullable
private org.bukkit.block.BlockState fromBlockSnapshot; // Captured block snapshot when the eventBlockDamager is not relevant (e.g. for bad respawn point explosions the block is already removed)
@@ -24,6 +_,8 @@
private org.bukkit.block.@Nullable Block eventBlockDamager; // Relevant block set. damageSourcePosition is only used for bad respawn point explosion or custom damage
private org.bukkit.block.@Nullable BlockState fromBlockSnapshot; // Captured block snapshot when the eventBlockDamager is not relevant (e.g. for bad respawn point explosions the block is already removed)
private boolean critical; // Supports arrows and sweeping damage
+ private boolean scissors = false; // Purpur - Dont run with scissors!
+ private boolean stonecutter = false; // Purpur - Stonecutter damage
public DamageSource knownCause(final org.bukkit.event.entity.EntityDamageEvent.DamageCause cause) {
final DamageSource damageSource = this.copy();
@@ -42,6 +44,30 @@ public class DamageSource {
@@ -35,6 +_,30 @@
return this.knownCause;
}
@@ -48,7 +40,7 @@ index bb021fc9de91f8c4f79e6a753d57fa157efbbda7..5fa92eef9c6b88cf96d3fe427e4d4f16
@Nullable
public Entity eventEntityDamager() {
return this.eventEntityDamager;
@@ -103,6 +129,8 @@ public class DamageSource {
@@ -94,6 +_,8 @@
damageSource.eventBlockDamager = this.eventBlockDamager;
damageSource.fromBlockSnapshot = this.fromBlockSnapshot;
damageSource.critical = this.critical;
@@ -57,7 +49,7 @@ index bb021fc9de91f8c4f79e6a753d57fa157efbbda7..5fa92eef9c6b88cf96d3fe427e4d4f16
return damageSource;
}
// CraftBukkit end
@@ -169,12 +197,21 @@ public class DamageSource {
@@ -157,11 +_,20 @@
} else {
Component component = this.causingEntity == null ? this.directEntity.getDisplayName() : this.causingEntity.getDisplayName();
ItemStack itemStack = this.causingEntity instanceof LivingEntity livingEntity1 ? livingEntity1.getMainHandItem() : ItemStack.EMPTY;
@@ -67,7 +59,7 @@ index bb021fc9de91f8c4f79e6a753d57fa157efbbda7..5fa92eef9c6b88cf96d3fe427e4d4f16
: Component.translatable(string, livingEntity.getDisplayName(), component);
}
}
+
+ // Purpur start - Component related conveniences
+ public Component getLocalizedDeathMessage(String str, LivingEntity entity) {
+ net.kyori.adventure.text.Component name = io.papermc.paper.adventure.PaperAdventure.asAdventure(entity.getDisplayName());
@@ -76,7 +68,6 @@ index bb021fc9de91f8c4f79e6a753d57fa157efbbda7..5fa92eef9c6b88cf96d3fe427e4d4f16
+ return io.papermc.paper.adventure.PaperAdventure.asVanilla(component);
+ }
+ // Purpur end - Component related conveniences
+
public String getMsgId() {
return this.type().msgId();
}

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/damagesource/DamageSources.java b/net/minecraft/world/damagesource/DamageSources.java
index cc206ecff2d95f0398ca424c178a336ad80cc396..7afad362801082e5f2e3aceda864ad2a7d4e5ebb 100644
--- a/net/minecraft/world/damagesource/DamageSources.java
+++ b/net/minecraft/world/damagesource/DamageSources.java
@@ -42,6 +42,8 @@ public class DamageSources {
@@ -42,6 +_,8 @@
private final DamageSource stalagmite;
private final DamageSource outsideBorder;
private final DamageSource genericKill;
@@ -17,7 +9,7 @@ index cc206ecff2d95f0398ca424c178a336ad80cc396..7afad362801082e5f2e3aceda864ad2a
public DamageSources(RegistryAccess registry) {
this.damageTypes = registry.lookupOrThrow(Registries.DAMAGE_TYPE);
@@ -70,6 +72,8 @@ public class DamageSources {
@@ -70,6 +_,8 @@
this.stalagmite = this.source(DamageTypes.STALAGMITE);
this.outsideBorder = this.source(DamageTypes.OUTSIDE_BORDER);
this.genericKill = this.source(DamageTypes.GENERIC_KILL);
@@ -26,10 +18,11 @@ index cc206ecff2d95f0398ca424c178a336ad80cc396..7afad362801082e5f2e3aceda864ad2a
}
private DamageSource source(ResourceKey<DamageType> damageTypeKey) {
@@ -84,6 +88,18 @@ public class DamageSources {
@@ -83,6 +_,18 @@
private DamageSource source(ResourceKey<DamageType> damageTypeKey, @Nullable Entity causingEntity, @Nullable Entity directEntity) {
return new DamageSource(this.damageTypes.getOrThrow(damageTypeKey), causingEntity, directEntity);
}
+
+ // Purpur start - Dont run with scissor
+ public DamageSource scissors() {
+ return this.scissors;
@@ -41,7 +34,6 @@ index cc206ecff2d95f0398ca424c178a336ad80cc396..7afad362801082e5f2e3aceda864ad2a
+ return this.stonecutter;
+ }
+ // Purpur end - Stonecutter damage
+
public DamageSource inFire() {
return this.inFire;
}

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/effect/HungerMobEffect.java b/net/minecraft/world/effect/HungerMobEffect.java
index 0890694ae96b6cd60079c34066e7a6e288f038e8..6c0e6bd2a171edc57dec71af178764454de73313 100644
--- a/net/minecraft/world/effect/HungerMobEffect.java
+++ b/net/minecraft/world/effect/HungerMobEffect.java
@@ -12,7 +12,7 @@ class HungerMobEffect extends MobEffect {
@@ -12,7 +_,7 @@
@Override
public boolean applyEffectTick(ServerLevel level, LivingEntity entity, int amplifier) {
if (entity instanceof Player player) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/effect/PoisonMobEffect.java b/net/minecraft/world/effect/PoisonMobEffect.java
index 75327fd96858fd508ea63a6983e5cbc655a8800f..73cfc61ac3f8e33e6b9f4fd08a292266c0adb535 100644
--- a/net/minecraft/world/effect/PoisonMobEffect.java
+++ b/net/minecraft/world/effect/PoisonMobEffect.java
@@ -12,8 +12,8 @@ public class PoisonMobEffect extends MobEffect {
@@ -12,8 +_,8 @@
@Override
public boolean applyEffectTick(ServerLevel level, LivingEntity entity, int amplifier) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/effect/RegenerationMobEffect.java b/net/minecraft/world/effect/RegenerationMobEffect.java
index 76cffa4d4d18d6c04749d941dbdf5eb60aed4095..81481267a1577721dcc405f39a4c350bd59ac9a2 100644
--- a/net/minecraft/world/effect/RegenerationMobEffect.java
+++ b/net/minecraft/world/effect/RegenerationMobEffect.java
@@ -11,7 +11,7 @@ class RegenerationMobEffect extends MobEffect {
@@ -11,7 +_,7 @@
@Override
public boolean applyEffectTick(ServerLevel level, LivingEntity entity, int amplifier) {
if (entity.getHealth() < entity.getMaxHealth()) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/effect/SaturationMobEffect.java b/net/minecraft/world/effect/SaturationMobEffect.java
index c192165910f6b139df6f604d0bce989061efa9cb..622c23f4570d07de8bee9623bf900aabb3331ded 100644
--- a/net/minecraft/world/effect/SaturationMobEffect.java
+++ b/net/minecraft/world/effect/SaturationMobEffect.java
@@ -16,7 +16,8 @@ class SaturationMobEffect extends InstantenousMobEffect {
@@ -16,7 +_,8 @@
int oldFoodLevel = player.getFoodData().foodLevel;
org.bukkit.event.entity.FoodLevelChangeEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callFoodLevelChangeEvent(player, amplifier + 1 + oldFoodLevel);
if (!event.isCancelled()) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/effect/WitherMobEffect.java b/net/minecraft/world/effect/WitherMobEffect.java
index 1fc9e1ad541c46124183a401b2a7d99aea69cecf..881271f0bc77a8a8a7d31daad9a8188bebaca67b 100644
--- a/net/minecraft/world/effect/WitherMobEffect.java
+++ b/net/minecraft/world/effect/WitherMobEffect.java
@@ -12,7 +12,7 @@ public class WitherMobEffect extends MobEffect {
@@ -12,7 +_,7 @@
@Override
public boolean applyEffectTick(ServerLevel level, LivingEntity entity, int amplifier) {

View File

@@ -1,22 +1,14 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 8939cc4ab9612f132aec0a6d0175cc0d40de073e..96320494c8c738d86d33820c4acfb504291dc58c 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -150,6 +150,7 @@ import org.jetbrains.annotations.Contract;
@@ -153,6 +_,7 @@
import org.slf4j.Logger;
public abstract class Entity implements SyncedDataHolder, DebugValueSource, Nameable, ItemOwner, EntityAccess, ScoreHolder, DataComponentGetter, ca.spottedleaf.moonrise.patches.chunk_system.entity.ChunkSystemEntity, ca.spottedleaf.moonrise.patches.entity_tracker.EntityTrackerEntity { // Paper - rewrite chunk system // Paper - optimise entity tracker
public abstract class Entity implements SyncedDataHolder, DebugValueSource, Nameable, ItemOwner, SlotProvider, EntityAccess, ScoreHolder, DataComponentGetter, ca.spottedleaf.moonrise.patches.chunk_system.entity.ChunkSystemEntity, ca.spottedleaf.moonrise.patches.entity_tracker.EntityTrackerEntity { // Paper - rewrite chunk system // Paper - optimise entity tracker
+ public static javax.script.ScriptEngine scriptEngine = new javax.script.ScriptEngineManager().getEngineByName("rhino"); // Purpur - Configurable entity base attributes
// CraftBukkit start
private static final int CURRENT_LEVEL = 2;
static boolean isLevelAtLeast(ValueInput input, int level) {
@@ -281,8 +282,9 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
@@ -282,8 +_,9 @@
public double xOld;
public double yOld;
public double zOld;
@@ -27,8 +19,8 @@ index 8939cc4ab9612f132aec0a6d0175cc0d40de073e..96320494c8c738d86d33820c4acfb504
public int tickCount;
private int remainingFireTicks;
public boolean wasTouchingWater;
@@ -316,8 +318,8 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
public PortalProcessor portalProcess;
@@ -316,8 +_,8 @@
public @Nullable PortalProcessor portalProcess;
public int portalCooldown;
private boolean invulnerable;
- protected UUID uuid = Mth.createInsecureUUID(this.random);
@@ -38,7 +30,7 @@ index 8939cc4ab9612f132aec0a6d0175cc0d40de073e..96320494c8c738d86d33820c4acfb504
private boolean hasGlowingTag;
private final Set<String> tags = new io.papermc.paper.util.SizeLimitedSet<>(new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(), MAX_ENTITY_TAG_COUNT); // Paper - fully limit tag size - replace set impl
private final double[] pistonDeltas = new double[]{0.0, 0.0, 0.0};
@@ -372,6 +374,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
@@ -373,6 +_,7 @@
public long activatedTick = Integer.MIN_VALUE;
public boolean isTemporarilyActive;
public long activatedImmunityTick = Integer.MIN_VALUE;
@@ -46,7 +38,7 @@ index 8939cc4ab9612f132aec0a6d0175cc0d40de073e..96320494c8c738d86d33820c4acfb504
public void inactiveTick() {
}
@@ -534,10 +537,21 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
@@ -535,10 +_,21 @@
}
// Paper end - optimise entity tracker
@@ -68,7 +60,7 @@ index 8939cc4ab9612f132aec0a6d0175cc0d40de073e..96320494c8c738d86d33820c4acfb504
this.position = Vec3.ZERO;
this.blockPosition = BlockPos.ZERO;
this.chunkPosition = ChunkPos.ZERO;
@@ -916,6 +930,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
@@ -931,6 +_,7 @@
&& this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v)
&& (!(this instanceof Player player) || !player.getAbilities().invulnerable))) {
// Paper end - Configurable nether ceiling damage
@@ -76,7 +68,7 @@ index 8939cc4ab9612f132aec0a6d0175cc0d40de073e..96320494c8c738d86d33820c4acfb504
this.onBelowWorld();
}
}
@@ -1941,7 +1956,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
@@ -1956,7 +_,7 @@
}
public boolean fireImmune() {
@@ -85,7 +77,7 @@ index 8939cc4ab9612f132aec0a6d0175cc0d40de073e..96320494c8c738d86d33820c4acfb504
}
public boolean causeFallDamage(double fallDistance, float damageMultiplier, DamageSource damageSource) {
@@ -2634,6 +2649,11 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
@@ -2654,6 +_,11 @@
output.putBoolean("Paper.FreezeLock", true);
}
// Paper end
@@ -97,7 +89,7 @@ index 8939cc4ab9612f132aec0a6d0175cc0d40de073e..96320494c8c738d86d33820c4acfb504
} catch (Throwable var7) {
CrashReport crashReport = CrashReport.forThrowable(var7, "Saving entity NBT");
CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being saved");
@@ -2754,6 +2774,9 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
@@ -2774,6 +_,9 @@
}
freezeLocked = input.getBooleanOr("Paper.FreezeLock", false);
// Paper end
@@ -107,7 +99,7 @@ index 8939cc4ab9612f132aec0a6d0175cc0d40de073e..96320494c8c738d86d33820c4acfb504
} catch (Throwable var7) {
CrashReport crashReport = CrashReport.forThrowable(var7, "Loading entity NBT");
CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being loaded");
@@ -3026,6 +3049,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
@@ -3039,6 +_,7 @@
if (this.isAlive() && this instanceof Leashable leashable2) {
if (leashable2.getLeashHolder() == player) {
if (!this.level().isClientSide()) {
@@ -115,7 +107,7 @@ index 8939cc4ab9612f132aec0a6d0175cc0d40de073e..96320494c8c738d86d33820c4acfb504
// Paper start - EntityUnleashEvent
if (!org.bukkit.craftbukkit.event.CraftEventFactory.handlePlayerUnleashEntityEvent(
leashable2, player, hand, !player.hasInfiniteMaterials(), true
@@ -3450,15 +3474,18 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
@@ -3469,15 +_,18 @@
return Vec3.directionFromRotation(this.getRotationVector());
}
@@ -135,7 +127,7 @@ index 8939cc4ab9612f132aec0a6d0175cc0d40de073e..96320494c8c738d86d33820c4acfb504
}
}
}
@@ -3663,7 +3690,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
@@ -3683,7 +_,7 @@
}
public int getMaxAirSupply() {
@@ -144,7 +136,7 @@ index 8939cc4ab9612f132aec0a6d0175cc0d40de073e..96320494c8c738d86d33820c4acfb504
}
public int getAirSupply() {
@@ -4200,7 +4227,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
@@ -4218,7 +_,7 @@
}
public boolean canUsePortal(boolean allowPassengers) {
@@ -153,7 +145,7 @@ index 8939cc4ab9612f132aec0a6d0175cc0d40de073e..96320494c8c738d86d33820c4acfb504
}
public boolean canTeleport(Level fromLevel, Level toLevel) {
@@ -4715,6 +4742,12 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
@@ -4737,6 +_,12 @@
return Mth.lerp(partialTick, this.yRotO, this.yRot);
}
@@ -166,7 +158,7 @@ index 8939cc4ab9612f132aec0a6d0175cc0d40de073e..96320494c8c738d86d33820c4acfb504
// Paper start - optimise collisions
public boolean updateFluidHeightAndDoFluidPushing(final TagKey<Fluid> fluid, final double flowScale) {
if (this.touchingUnloadedChunk()) {
@@ -5132,7 +5165,7 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
@@ -5157,7 +_,7 @@
}
public float maxUpStep() {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/EntitySelector.java b/net/minecraft/world/entity/EntitySelector.java
index 67d95236e135c2b44845cfd5cbfb7e553b8e31f2..b94b3a5aabd44b0158d535c7a4dc006e6f6f4689 100644
--- a/net/minecraft/world/entity/EntitySelector.java
+++ b/net/minecraft/world/entity/EntitySelector.java
@@ -28,6 +28,8 @@ public final class EntitySelector {
@@ -28,6 +_,8 @@
return net.minecraft.util.Mth.clamp(serverPlayer.getStats().getValue(net.minecraft.stats.Stats.CUSTOM.get(net.minecraft.stats.Stats.TIME_SINCE_REST)), 1, Integer.MAX_VALUE) >= playerInsomniaTicks;
};
// Paper end - Ability to control player's insomnia and phantoms

View File

@@ -1,31 +1,23 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/EntityType.java b/net/minecraft/world/entity/EntityType.java
index 4af1d61a514c487b035f76ef4ae37536dc08ed67..d6f7d96dbdff908c91fbe43432313d2221b57afc 100644
--- a/net/minecraft/world/entity/EntityType.java
+++ b/net/minecraft/world/entity/EntityType.java
@@ -1214,6 +1214,16 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
@@ -1240,6 +_,16 @@
return register(vanillaEntityId(key), builder);
}
+ // Purpur start - PlayerSetSpawnerTypeWithEggEvent
+ public static EntityType<?> getFromBukkitType(org.bukkit.entity.EntityType bukkitType) {
+ return getFromKey(ResourceLocation.parse(bukkitType.getKey().toString()));
+ return getFromKey(Identifier.parse(bukkitType.getKey().toString()));
+ }
+
+ public static EntityType<?> getFromKey(ResourceLocation location) {
+ public static EntityType<?> getFromKey(Identifier location) {
+ return BuiltInRegistries.ENTITY_TYPE.getValue(location);
+ }
+ // Purpur end - PlayerSetSpawnerTypeWithEggEvent
+
public static ResourceLocation getKey(EntityType<?> entityType) {
public static Identifier getKey(EntityType<?> entityType) {
return BuiltInRegistries.ENTITY_TYPE.getKey(entityType);
}
@@ -1445,6 +1455,16 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
@@ -1467,6 +_,16 @@
return this.category;
}
@@ -42,7 +34,7 @@ index 4af1d61a514c487b035f76ef4ae37536dc08ed67..d6f7d96dbdff908c91fbe43432313d22
public String getDescriptionId() {
return this.descriptionId;
}
@@ -1507,6 +1527,7 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
@@ -1528,6 +_,7 @@
// Paper start - Add logging for debugging entity tags with invalid ids
() -> {
LOGGER.warn("Skipping Entity with id {}", input.getStringOr("id", "[invalid]"));

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/ExperienceOrb.java b/net/minecraft/world/entity/ExperienceOrb.java
index 85c5a8497ee45de232a87c3f152e7ca67c1821ee..189488367329df837f4a98cda5af2c80d8847b96 100644
--- a/net/minecraft/world/entity/ExperienceOrb.java
+++ b/net/minecraft/world/entity/ExperienceOrb.java
@@ -358,7 +358,7 @@ public class ExperienceOrb extends Entity {
@@ -355,7 +_,7 @@
public void playerTouch(Player entity) {
if (entity instanceof ServerPlayer serverPlayer) {
if (entity.takeXpDelay == 0 && new com.destroystokyo.paper.event.player.PlayerPickupExperienceEvent(serverPlayer.getBukkitEntity(), (org.bukkit.entity.ExperienceOrb) this.getBukkitEntity()).callEvent()) { // Paper - PlayerPickupExperienceEvent
@@ -17,7 +9,7 @@ index 85c5a8497ee45de232a87c3f152e7ca67c1821ee..189488367329df837f4a98cda5af2c80
entity.take(this, 1);
int i = this.repairPlayerItems(serverPlayer, this.getValue());
if (i > 0) {
@@ -374,7 +374,7 @@ public class ExperienceOrb extends Entity {
@@ -371,7 +_,7 @@
}
private int repairPlayerItems(ServerPlayer player, int value) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index 6fa946c4ff8e1499a421e50d7e246bb669341d97..679073e7cd4e96a018b9bc6598b2c6fb385f1688 100644
--- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java
@@ -447,6 +447,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
@@ -447,6 +_,12 @@
if (d < 0.0) {
double damagePerBlock = serverLevel1.getWorldBorder().getDamagePerBlock();
if (damagePerBlock > 0.0) {
@@ -21,16 +13,16 @@ index 6fa946c4ff8e1499a421e50d7e246bb669341d97..679073e7cd4e96a018b9bc6598b2c6fb
this.hurtServer(serverLevel1, this.damageSources().outOfBorder(), Math.max(1, Mth.floor(-d * damagePerBlock)));
}
}
@@ -462,7 +468,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
@@ -462,7 +_,7 @@
if (this.shouldTakeDrowningDamage()) {
this.setAirSupply(0);
serverLevel1.broadcastEntityEvent(this, EntityEvent.DROWN_PARTICLES);
- this.hurtServer(serverLevel1, this.damageSources().drown(), 2.0F);
+ this.hurtServer(serverLevel1, this.damageSources().drown(), (float) this.level().purpurConfig.damageFromDrowning); // Purpur - Drowning Settings
}
} else if (this.getAirSupply() < this.getMaxAirSupply()) {
} else if (this.getAirSupply() < this.getMaxAirSupply() && MobEffectUtil.shouldEffectsRefillAirsupply(this)) {
this.setAirSupply(this.increaseAirSupply(this.getAirSupply()));
@@ -522,7 +528,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
@@ -522,7 +_,7 @@
}
protected boolean shouldTakeDrowningDamage() {
@@ -39,7 +31,7 @@ index 6fa946c4ff8e1499a421e50d7e246bb669341d97..679073e7cd4e96a018b9bc6598b2c6fb
}
@Override
@@ -1046,15 +1052,33 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
@@ -1050,14 +_,32 @@
if (lookingEntity != null) {
ItemStack itemBySlot = this.getItemBySlot(EquipmentSlot.HEAD);
EntityType<?> type = lookingEntity.getType();
@@ -49,13 +41,15 @@ index 6fa946c4ff8e1499a421e50d7e246bb669341d97..679073e7cd4e96a018b9bc6598b2c6fb
- || type == EntityType.PIGLIN_BRUTE && itemBySlot.is(Items.PIGLIN_HEAD)
- || type == EntityType.CREEPER && itemBySlot.is(Items.CREEPER_HEAD)) {
- d *= 0.5;
- }
- }
+ // Purpur start - Mob head visibility percent
+ if (type == EntityType.SKELETON && itemBySlot.is(Items.SKELETON_SKULL)) {
+ d *= lookingEntity.level().purpurConfig.skeletonHeadVisibilityPercent;
+ }
+ else if (type == EntityType.ZOMBIE && itemBySlot.is(Items.ZOMBIE_HEAD)) {
+ d *= lookingEntity.level().purpurConfig.zombieHeadVisibilityPercent;
}
+ }
+ else if ((type == EntityType.PIGLIN || type == EntityType.PIGLIN_BRUTE) && itemBySlot.is(Items.PIGLIN_HEAD)) {
+ d *= lookingEntity.level().purpurConfig.piglinHeadVisibilityPercent;
+ }
@@ -63,8 +57,8 @@ index 6fa946c4ff8e1499a421e50d7e246bb669341d97..679073e7cd4e96a018b9bc6598b2c6fb
+ d *= lookingEntity.level().purpurConfig.creeperHeadVisibilityPercent;
+ }
+ // Purpur end - Mob head visibility percent
}
+ }
+
+ // Purpur start - Configurable mob blindness
+ if (lookingEntity instanceof LivingEntity entityliving) {
+ if (entityliving.hasEffect(MobEffects.BLINDNESS)) {
@@ -75,11 +69,10 @@ index 6fa946c4ff8e1499a421e50d7e246bb669341d97..679073e7cd4e96a018b9bc6598b2c6fb
+ }
+ }
+ // Purpur end - Configurable mob blindness
+
return d;
}
@@ -1100,6 +1124,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
@@ -1104,6 +_,7 @@
Iterator<MobEffectInstance> iterator = this.activeEffects.values().iterator();
while (iterator.hasNext()) {
MobEffectInstance effect = iterator.next();
@@ -87,7 +80,7 @@ index 6fa946c4ff8e1499a421e50d7e246bb669341d97..679073e7cd4e96a018b9bc6598b2c6fb
EntityPotionEffectEvent event = CraftEventFactory.callEntityPotionEffectChangeEvent(this, effect, null, cause, EntityPotionEffectEvent.Action.CLEARED);
if (event.isCancelled()) {
continue;
@@ -1424,6 +1449,24 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
@@ -1424,6 +_,24 @@
this.stopSleeping();
}
@@ -112,8 +105,8 @@ index 6fa946c4ff8e1499a421e50d7e246bb669341d97..679073e7cd4e96a018b9bc6598b2c6fb
this.noActionTime = 0;
if (amount < 0.0F) {
amount = 0.0F;
@@ -1686,10 +1729,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
protected Player resolvePlayerResponsibleForDamage(DamageSource damageSource) {
@@ -1685,10 +_,10 @@
protected @Nullable Player resolvePlayerResponsibleForDamage(DamageSource damageSource) {
Entity entity = damageSource.getEntity();
if (entity instanceof Player player) {
- this.setLastHurtByPlayer(player, 100);
@@ -125,10 +118,22 @@ index 6fa946c4ff8e1499a421e50d7e246bb669341d97..679073e7cd4e96a018b9bc6598b2c6fb
} else {
this.lastHurtByPlayer = null;
this.lastHurtByPlayerMemoryTime = 0;
@@ -1740,6 +1783,18 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
@@ -1739,6 +_,30 @@
}
}
+ // Purpur start - Totems work in inventory
+ if (level().purpurConfig.totemOfUndyingWorksInInventory && this instanceof ServerPlayer player && (itemStack == null || itemStack.getItem() != Items.TOTEM_OF_UNDYING) && player.getBukkitEntity().hasPermission("purpur.inventory_totem")) {
+ for (ItemStack item : player.getInventory().getNonEquipmentItems()) {
+ if (item.getItem() == Items.TOTEM_OF_UNDYING) {
+ itemInHand = item;
+ itemStack = item.copy();
+ break;
+ }
+ }
+ }
+ // Purpur end - Totems work in inventory
+
+ // Purpur start - Totems work in inventory
+ if (level().purpurConfig.totemOfUndyingWorksInInventory && this instanceof ServerPlayer player && (itemStack == null || itemStack.getItem() != Items.TOTEM_OF_UNDYING) && player.getBukkitEntity().hasPermission("purpur.inventory_totem")) {
+ for (ItemStack item : player.getInventory().getNonEquipmentItems()) {
@@ -144,7 +149,7 @@ index 6fa946c4ff8e1499a421e50d7e246bb669341d97..679073e7cd4e96a018b9bc6598b2c6fb
final org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null;
final EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot);
event.setCancelled(itemStack == null);
@@ -1921,6 +1976,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
@@ -1920,6 +_,7 @@
boolean flag = this.lastHurtByPlayerMemoryTime > 0;
this.dropEquipment(level); // CraftBukkit - from below
if (this.shouldDropLoot(level)) {
@@ -152,7 +157,7 @@ index 6fa946c4ff8e1499a421e50d7e246bb669341d97..679073e7cd4e96a018b9bc6598b2c6fb
this.dropFromLootTable(level, damageSource, flag);
// Paper start
final boolean prev = this.clearEquipmentSlots;
@@ -1929,6 +1985,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
@@ -1928,6 +_,7 @@
// Paper end
this.dropCustomDeathLoot(level, damageSource, flag);
this.clearEquipmentSlots = prev; // Paper
@@ -160,7 +165,7 @@ index 6fa946c4ff8e1499a421e50d7e246bb669341d97..679073e7cd4e96a018b9bc6598b2c6fb
}
// CraftBukkit start - Call death event // Paper start - call advancement triggers with correct entity equipment
@@ -3149,6 +3206,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
@@ -3202,6 +_,7 @@
float f = (float)(d * 10.0 - 3.0);
if (f > 0.0F) {
this.playSound(this.getFallDamageSound((int)f), 1.0F, 1.0F);
@@ -168,16 +173,16 @@ index 6fa946c4ff8e1499a421e50d7e246bb669341d97..679073e7cd4e96a018b9bc6598b2c6fb
this.hurt(this.damageSources().flyIntoWall(), f);
}
}
@@ -4549,6 +4607,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
@@ -4671,6 +_,12 @@
? slot == EquipmentSlot.MAINHAND && this.canUseSlot(EquipmentSlot.MAINHAND)
: slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.getType());
}
+
+ // Purpur start - Dispenser curse of binding protection
+ public @Nullable EquipmentSlot getEquipmentSlotForDispenserItem(ItemStack itemstack) {
+ return EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.BINDING_CURSE, itemstack) > 0 ? null : this.getEquipmentSlotForItem(itemstack);
+ }
+ // Purpur end - Dispenser curse of binding protection
+
private static SlotAccess createEquipmentSlotAccess(LivingEntity entity, EquipmentSlot slot) {
return slot != EquipmentSlot.HEAD && slot != EquipmentSlot.MAINHAND && slot != EquipmentSlot.OFFHAND
? SlotAccess.forEquipmentSlot(entity, slot, itemStack -> itemStack.isEmpty() || entity.getEquipmentSlotForItem(itemStack) == slot)

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java
index f2a321d94ddc9247a3820d42f4a04290ea3ce6f6..7d98c5aaf29d2204ed43f221f95913ac749419db 100644
--- a/net/minecraft/world/entity/Mob.java
+++ b/net/minecraft/world/entity/Mob.java
@@ -150,6 +150,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
@@ -150,6 +_,7 @@
private int homeRadius = -1;
public boolean aware = true; // CraftBukkit
public net.kyori.adventure.util.TriState despawnInPeacefulOverride = net.kyori.adventure.util.TriState.NOT_SET; // Paper - allow changing despawnInPeaceful
@@ -16,7 +8,7 @@ index f2a321d94ddc9247a3820d42f4a04290ea3ce6f6..7d98c5aaf29d2204ed43f221f95913ac
protected Mob(EntityType<? extends Mob> type, Level level) {
super(type, level);
@@ -295,6 +296,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
@@ -292,6 +_,7 @@
target = null;
}
}
@@ -24,13 +16,14 @@ index f2a321d94ddc9247a3820d42f4a04290ea3ce6f6..7d98c5aaf29d2204ed43f221f95913ac
this.target = target;
return true;
// CraftBukkit end
@@ -338,8 +340,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
@@ -335,7 +_,27 @@
}
profilerFiller.pop();
- }
+ incrementTicksSinceLastInteraction(); // Purpur - Entity lifespan
}
+ }
+
+ // Purpur start - Entity lifespan
+ private void incrementTicksSinceLastInteraction() {
+ ++this.ticksSinceLastInteraction;
@@ -49,11 +42,10 @@ index f2a321d94ddc9247a3820d42f4a04290ea3ce6f6..7d98c5aaf29d2204ed43f221f95913ac
+ }
+ }
+ // Purpur end - Entity lifespan
+
@Override
protected void playHurtSound(DamageSource damageSource) {
this.resetAmbientSoundTime();
@@ -443,6 +465,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
@@ -439,6 +_,7 @@
output.putString("Paper.DespawnInPeacefulOverride", this.despawnInPeacefulOverride.name());
}
// Paper end - allow changing despawnInPeaceful
@@ -61,7 +53,7 @@ index f2a321d94ddc9247a3820d42f4a04290ea3ce6f6..7d98c5aaf29d2204ed43f221f95913ac
}
@Override
@@ -470,6 +493,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
@@ -466,6 +_,7 @@
this.lootTableSeed = input.getLongOr("DeathLootTableSeed", 0L);
this.setNoAi(input.getBooleanOr("NoAI", false));
this.aware = input.getBooleanOr("Bukkit.Aware", true); // CraftBukkit
@@ -69,7 +61,7 @@ index f2a321d94ddc9247a3820d42f4a04290ea3ce6f6..7d98c5aaf29d2204ed43f221f95913ac
// Paper start - allow changing despawnInPeaceful
this.despawnInPeacefulOverride = readDespawnInPeacefulOverride(input);
}
@@ -1210,7 +1234,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
@@ -1246,7 +_,7 @@
);
}
@@ -78,10 +70,10 @@ index f2a321d94ddc9247a3820d42f4a04290ea3ce6f6..7d98c5aaf29d2204ed43f221f95913ac
return spawnGroupData;
}
@@ -1557,6 +1581,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
this.playAttackSound();
@@ -1597,6 +_,7 @@
}
this.lungeForwardMaybe();
+ if (target instanceof net.minecraft.server.level.ServerPlayer) this.ticksSinceLastInteraction = 0; // Purpur - Entity lifespan
return flag;
}

View File

@@ -0,0 +1,10 @@
--- a/net/minecraft/world/entity/ai/attributes/RangedAttribute.java
+++ b/net/minecraft/world/entity/ai/attributes/RangedAttribute.java
@@ -29,6 +_,7 @@
@Override
public double sanitizeValue(double value) {
+ if (!org.purpurmc.purpur.PurpurConfig.clampAttributes) return Double.isNaN(value) ? this.minValue : value; // Purpur - Add attribute clamping and armor limit config
return Double.isNaN(value) ? this.minValue : Mth.clamp(value, this.minValue, this.maxValue);
}
}

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/ai/behavior/AcquirePoi.java b/net/minecraft/world/entity/ai/behavior/AcquirePoi.java
index ffc960a4e66ed03a358b363a4ce1dcee0b29ac36..21046cde1bd1ede8e7851eb4ea414e33628aa4a9 100644
--- a/net/minecraft/world/entity/ai/behavior/AcquirePoi.java
+++ b/net/minecraft/world/entity/ai/behavior/AcquirePoi.java
@@ -85,7 +85,7 @@ public class AcquirePoi {
@@ -85,7 +_,7 @@
};
// Paper start - optimise POI access
final java.util.List<Pair<Holder<PoiType>, BlockPos>> poiposes = new java.util.ArrayList<>();

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java b/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java
index 296ecffbbce931b42c67ea523373a61cea23acf4..b2eec24be3635f2c19da9b147211fe6cb454c780 100644
--- a/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java
+++ b/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java
@@ -55,7 +55,7 @@ public class InteractWithDoor {
@@ -55,7 +_,7 @@
Node nextNode = path.getNextNode();
BlockPos blockPos = previousNode.asBlockPos();
BlockState blockState = level.getBlockState(blockPos);
@@ -17,7 +9,7 @@ index 296ecffbbce931b42c67ea523373a61cea23acf4..b2eec24be3635f2c19da9b147211fe6c
DoorBlock doorBlock = (DoorBlock)blockState.getBlock();
if (!doorBlock.isOpen(blockState)) {
// CraftBukkit start - entities opening doors
@@ -72,7 +72,7 @@ public class InteractWithDoor {
@@ -72,7 +_,7 @@
BlockPos blockPos1 = nextNode.asBlockPos();
BlockState blockState1 = level.getBlockState(blockPos1);
@@ -26,7 +18,7 @@ index 296ecffbbce931b42c67ea523373a61cea23acf4..b2eec24be3635f2c19da9b147211fe6c
DoorBlock doorBlock1 = (DoorBlock)blockState1.getBlock();
if (!doorBlock1.isOpen(blockState1)) {
// CraftBukkit start - entities opening doors
@@ -118,7 +118,7 @@ public class InteractWithDoor {
@@ -118,7 +_,7 @@
iterator.remove();
} else {
BlockState blockState = level.getBlockState(blockPos);

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/ai/behavior/ShowTradesToPlayer.java b/net/minecraft/world/entity/ai/behavior/ShowTradesToPlayer.java
index 400e6d49144b3e5803901938dcd2ac4e52e9c131..45c45afeffcfba3558bdf46cbe39ff60004ffc01 100644
--- a/net/minecraft/world/entity/ai/behavior/ShowTradesToPlayer.java
+++ b/net/minecraft/world/entity/ai/behavior/ShowTradesToPlayer.java
@@ -46,6 +46,7 @@ public class ShowTradesToPlayer extends Behavior<Villager> {
@@ -45,6 +_,7 @@
@Override
public boolean canStillUse(ServerLevel level, Villager entity, long gameTime) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/ai/behavior/TransportItemsBetweenContainers.java b/net/minecraft/world/entity/ai/behavior/TransportItemsBetweenContainers.java
index 6d815c3c28b76b1001ad197c6bb1f64620bb32fe..1408aaad39eb72996ea9e3ad6de217407e63d204 100644
--- a/net/minecraft/world/entity/ai/behavior/TransportItemsBetweenContainers.java
+++ b/net/minecraft/world/entity/ai/behavior/TransportItemsBetweenContainers.java
@@ -287,7 +287,7 @@ public class TransportItemsBetweenContainers extends Behavior<PathfinderMob> {
@@ -285,7 +_,7 @@
LevelChunk chunkNow = level.getChunkSource().getChunkNow(chunkPos.x, chunkPos.z);
if (chunkNow != null) {
for (BlockEntity blockEntity : chunkNow.getBlockEntities().values()) {
@@ -17,7 +9,7 @@ index 6d815c3c28b76b1001ad197c6bb1f64620bb32fe..1408aaad39eb72996ea9e3ad6de21740
double d1 = chestBlockEntity.getBlockPos().distToCenterSqr(mob.position());
if (d1 < d) {
TransportItemsBetweenContainers.TransportItemTarget transportItemTarget1 = this.isTargetValidToPick(
@@ -372,7 +372,11 @@ public class TransportItemsBetweenContainers extends Behavior<PathfinderMob> {
@@ -369,7 +_,11 @@
}
private boolean isTargetBlocked(Level level, TransportItemsBetweenContainers.TransportItemTarget target) {
@@ -30,7 +22,7 @@ index 6d815c3c28b76b1001ad197c6bb1f64620bb32fe..1408aaad39eb72996ea9e3ad6de21740
}
private boolean targetHasNotChanged(Level level, TransportItemsBetweenContainers.TransportItemTarget target) {
@@ -449,7 +453,7 @@ public class TransportItemsBetweenContainers extends Behavior<PathfinderMob> {
@@ -446,7 +_,7 @@
}
private boolean isWantedBlock(PathfinderMob mob, BlockState state) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/ai/goal/LlamaFollowCaravanGoal.java b/net/minecraft/world/entity/ai/goal/LlamaFollowCaravanGoal.java
index 6eaf0bd944349cd0c6084462ac385fa2caafe933..be59d0c27a83b329ec3f97c029cfb9c114e22472 100644
--- a/net/minecraft/world/entity/ai/goal/LlamaFollowCaravanGoal.java
+++ b/net/minecraft/world/entity/ai/goal/LlamaFollowCaravanGoal.java
@@ -22,6 +22,7 @@ public class LlamaFollowCaravanGoal extends Goal {
@@ -22,6 +_,7 @@
@Override
public boolean canUse() {
@@ -16,7 +8,7 @@ index 6eaf0bd944349cd0c6084462ac385fa2caafe933..be59d0c27a83b329ec3f97c029cfb9c1
if (!this.llama.isLeashed() && !this.llama.inCaravan()) {
List<Entity> entities = this.llama.level().getEntities(this.llama, this.llama.getBoundingBox().inflate(9.0, 4.0, 9.0), entity1 -> {
EntityType<?> type = entity1.getType();
@@ -71,6 +72,7 @@ public class LlamaFollowCaravanGoal extends Goal {
@@ -71,6 +_,7 @@
@Override
public boolean canContinueToUse() {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/ai/goal/RangedBowAttackGoal.java b/net/minecraft/world/entity/ai/goal/RangedBowAttackGoal.java
index 722f378bb3726200b6fe88948bf1e1d3514a7b5c..e337e22c2cf82b0c1cab3fe0a9ff894c0c718716 100644
--- a/net/minecraft/world/entity/ai/goal/RangedBowAttackGoal.java
+++ b/net/minecraft/world/entity/ai/goal/RangedBowAttackGoal.java
@@ -116,9 +116,9 @@ public class RangedBowAttackGoal<T extends Monster & RangedAttackMob> extends Go
@@ -116,9 +_,9 @@
}
this.mob.lookAt(target, 30.0F, 30.0F);

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java b/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java
index ffa69c974320279ec31b17e66bfab52c3e194e1b..800f8eb0066a83324abac5998848f99f7e45529d 100644
--- a/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java
+++ b/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java
@@ -59,7 +59,7 @@ public class RunAroundLikeCrazyGoal extends Goal {
@@ -59,7 +_,7 @@
if (firstPassenger instanceof Player player) {
int temper = this.horse.getTemper();
int maxTemper = this.horse.getMaxTemper();

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/ai/goal/SwellGoal.java b/net/minecraft/world/entity/ai/goal/SwellGoal.java
index 243a552f6f0c8c2bd25c0209c95e3bca08734711..38fd0196a0f5a90e39fa4eb8592f89bf6b88ccf5 100644
--- a/net/minecraft/world/entity/ai/goal/SwellGoal.java
+++ b/net/minecraft/world/entity/ai/goal/SwellGoal.java
@@ -55,6 +55,14 @@ public class SwellGoal extends Goal {
@@ -54,6 +_,14 @@
this.creeper.setSwellDir(-1);
} else {
this.creeper.setSwellDir(1);

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java b/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java
index 066faa704338c573472381e1ebd063e0d52aaaa4..1f96fd5085bacb4c584576c7cb9f51e7898e9b03 100644
--- a/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java
+++ b/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java
@@ -56,7 +56,7 @@ public class NearestBedSensor extends Sensor<Mob> {
@@ -56,7 +_,7 @@
// Paper start - optimise POI access
java.util.List<Pair<Holder<PoiType>, BlockPos>> poiposes = new java.util.ArrayList<>();
// don't ask me why it's unbounded. ask mojang.

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
index 8e536b1029b1e8f134c316f49df5d76d154d125a..95ad69396d740fbd1b990c6a1382a6e22065dea4 100644
--- a/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
+++ b/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
@@ -64,6 +64,10 @@ public class TargetingConditions {
@@ -63,6 +_,10 @@
return false;
} else if (this.selector != null && !this.selector.test(target, level)) {
return false;

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/Animal.java b/net/minecraft/world/entity/animal/Animal.java
index 384cf7e65cf6a802ba58d5327e971ac033e23962..8ccab236d1b8b00485eb6608778c43c5581641bd 100644
--- a/net/minecraft/world/entity/animal/Animal.java
+++ b/net/minecraft/world/entity/animal/Animal.java
@@ -142,7 +142,7 @@ public abstract class Animal extends AgeableMob {
@@ -140,7 +_,7 @@
ItemStack itemInHand = player.getItemInHand(hand);
if (this.isFood(itemInHand)) {
int age = this.getAge();
@@ -17,7 +9,7 @@ index 384cf7e65cf6a802ba58d5327e971ac033e23962..8ccab236d1b8b00485eb6608778c43c5
final ItemStack breedCopy = itemInHand.copy(); // Paper - Fix EntityBreedEvent copying
this.usePlayerItem(player, hand, itemInHand);
this.setInLove(serverPlayer, breedCopy); // Paper - Fix EntityBreedEvent copying
@@ -224,10 +224,20 @@ public abstract class Animal extends AgeableMob {
@@ -221,10 +_,20 @@
public void spawnChildFromBreeding(ServerLevel level, Animal partner) {
AgeableMob breedOffspring = this.getBreedOffspring(level, partner);
if (breedOffspring != null) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/Bee.java b/net/minecraft/world/entity/animal/Bee.java
index e94c6c1ee969a7d0953b933fb0633cebb510a68c..3988a8e8ba319e5e80a9fba916b62bdb4996e08f 100644
--- a/net/minecraft/world/entity/animal/Bee.java
+++ b/net/minecraft/world/entity/animal/Bee.java
@@ -171,7 +171,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
--- a/net/minecraft/world/entity/animal/bee/Bee.java
+++ b/net/minecraft/world/entity/animal/bee/Bee.java
@@ -171,7 +_,7 @@
// Paper end - Fix MC-167279
this.lookControl = new Bee.BeeLookControl(this);
this.setPathfindingMalus(PathType.DANGER_FIRE, -1.0F);
@@ -17,16 +9,18 @@ index e94c6c1ee969a7d0953b933fb0633cebb510a68c..3988a8e8ba319e5e80a9fba916b62bdb
this.setPathfindingMalus(PathType.WATER_BORDER, 16.0F);
this.setPathfindingMalus(PathType.COCOA, -1.0F);
this.setPathfindingMalus(PathType.FENCE, -1.0F);
@@ -367,7 +367,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
@@ -367,6 +_,10 @@
}
}
public static boolean isNightOrRaining(Level level) {
- return level.dimensionType().hasSkyLight() && level.dimension() != Level.END && (level.isDarkOutside() || level.isRaining());
+ /*public static boolean isNightOrRaining(Level level) {
+ return level.dimensionType().hasSkyLight() && (level.isDarkOutside() && !level.purpurConfig.beeCanWorkAtNight || level.isRaining() && !level.purpurConfig.beeCanWorkInRain); // Purpur - Bee can work when raining or at night
}
+ }*/
+
public void setStayOutOfHiveCountdown(int stayOutOfHiveCountdown) {
@@ -390,7 +390,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
this.stayOutOfHiveCountdown = stayOutOfHiveCountdown;
}
@@ -387,7 +_,7 @@
@Override
protected void customServerAiStep(ServerLevel level) {
boolean hasStung = this.hasStung();
@@ -35,7 +29,7 @@ index e94c6c1ee969a7d0953b933fb0633cebb510a68c..3988a8e8ba319e5e80a9fba916b62bdb
this.underWaterTicks++;
} else {
this.underWaterTicks = 0;
@@ -400,6 +400,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
@@ -397,6 +_,7 @@
this.hurtServer(level, this.damageSources().drown(), 1.0F);
}
@@ -43,7 +37,7 @@ index e94c6c1ee969a7d0953b933fb0633cebb510a68c..3988a8e8ba319e5e80a9fba916b62bdb
if (hasStung) {
this.timeSinceSting++;
if (this.timeSinceSting % 5 == 0 && this.random.nextInt(Mth.clamp(1200 - this.timeSinceSting, 1, 1200)) == 0) {
@@ -1139,6 +1140,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
@@ -1130,6 +_,7 @@
Bee.this.savedFlowerPos = optional.get();
Bee.this.navigation
.moveTo(Bee.this.savedFlowerPos.getX() + 0.5, Bee.this.savedFlowerPos.getY() + 0.5, Bee.this.savedFlowerPos.getZ() + 0.5, 1.2F);
@@ -51,7 +45,7 @@ index e94c6c1ee969a7d0953b933fb0633cebb510a68c..3988a8e8ba319e5e80a9fba916b62bdb
return true;
} else {
Bee.this.remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(Bee.this.random, 20, 60);
@@ -1185,6 +1187,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
@@ -1176,6 +_,7 @@
this.pollinating = false;
Bee.this.navigation.stop();
Bee.this.remainingCooldownBeforeLocatingNewFlower = 200;
@@ -59,7 +53,7 @@ index e94c6c1ee969a7d0953b933fb0633cebb510a68c..3988a8e8ba319e5e80a9fba916b62bdb
}
@Override
@@ -1231,6 +1234,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
@@ -1222,6 +_,7 @@
this.setWantedPos();
}

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/AbstractCow.java b/net/minecraft/world/entity/animal/AbstractCow.java
index 1bedc350a6625adc12359d9c9290a01e44fa638f..439d0dfabf9263bfbfb727b87dba17e848f6e66c 100644
--- a/net/minecraft/world/entity/animal/AbstractCow.java
+++ b/net/minecraft/world/entity/animal/AbstractCow.java
@@ -39,7 +39,7 @@ public abstract class AbstractCow extends Animal {
--- a/net/minecraft/world/entity/animal/cow/AbstractCow.java
+++ b/net/minecraft/world/entity/animal/cow/AbstractCow.java
@@ -40,7 +_,7 @@
this.goalSelector.addGoal(0, new FloatGoal(this));
this.goalSelector.addGoal(1, new PanicGoal(this, 2.0));
this.goalSelector.addGoal(2, new BreedGoal(this, 1.0));
@@ -17,7 +9,7 @@ index 1bedc350a6625adc12359d9c9290a01e44fa638f..439d0dfabf9263bfbfb727b87dba17e8
this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25));
this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0));
this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F));
@@ -95,6 +95,10 @@ public abstract class AbstractCow extends Animal {
@@ -96,6 +_,10 @@
ItemStack itemStack = ItemUtils.createFilledResult(itemInHand, player, org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getItemStack())); // CraftBukkit
player.setItemInHand(hand, itemStack);
return InteractionResult.SUCCESS;
@@ -28,7 +20,7 @@ index 1bedc350a6625adc12359d9c9290a01e44fa638f..439d0dfabf9263bfbfb727b87dba17e8
} else {
return super.mobInteract(player, hand);
}
@@ -104,4 +108,67 @@ public abstract class AbstractCow extends Animal {
@@ -105,4 +_,67 @@
public EntityDimensions getDefaultDimensions(Pose pose) {
return this.isBaby() ? BABY_DIMENSIONS : super.getDefaultDimensions(pose);
}

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/MushroomCow.java b/net/minecraft/world/entity/animal/MushroomCow.java
index 7b4f76ae8907ae45cb0ac6fa397a319ab3cc2a22..3ce300a6abc4ee39f010ff5318b64c50e732742b 100644
--- a/net/minecraft/world/entity/animal/MushroomCow.java
+++ b/net/minecraft/world/entity/animal/MushroomCow.java
@@ -201,6 +201,13 @@ public class MushroomCow extends AbstractCow implements Shearable {
--- a/net/minecraft/world/entity/animal/cow/MushroomCow.java
+++ b/net/minecraft/world/entity/animal/cow/MushroomCow.java
@@ -199,6 +_,13 @@
level.playSound(null, this, SoundEvents.MOOSHROOM_SHEAR, source, 1.0F, 1.0F);
this.convertTo(EntityType.COW, ConversionParams.single(this, false, false), cow -> {
level.sendParticles(ParticleTypes.EXPLOSION, this.getX(), this.getY(0.5), this.getZ(), 1, 0.0, 0.0, 0.0, 0.0);

View File

@@ -1,22 +1,14 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/Dolphin.java b/net/minecraft/world/entity/animal/Dolphin.java
index 91ee1423557d7287de9f4adc8376b0b7ee8c94ac..487a0e850d1d4f4c2e9c1175708712146f809a68 100644
--- a/net/minecraft/world/entity/animal/Dolphin.java
+++ b/net/minecraft/world/entity/animal/Dolphin.java
@@ -75,6 +75,7 @@ public class Dolphin extends AgeableWaterCreature {
--- a/net/minecraft/world/entity/animal/dolphin/Dolphin.java
+++ b/net/minecraft/world/entity/animal/dolphin/Dolphin.java
@@ -75,6 +_,7 @@
public static final float BABY_SCALE = 0.65F;
private static final boolean DEFAULT_GOT_FISH = false;
@Nullable
public BlockPos treasurePos;
@Nullable public BlockPos treasurePos;
+ private boolean isNaturallyAggressiveToPlayers; // Purpur - Dolphins naturally aggressive to players chance
public Dolphin(EntityType<? extends Dolphin> type, Level level) {
super(type, level);
@@ -91,6 +92,7 @@ public class Dolphin extends AgeableWaterCreature {
@@ -90,6 +_,7 @@
this.setAirSupply(this.getMaxAirSupply());
this.setXRot(0.0F);
SpawnGroupData spawnGroupData1 = Objects.requireNonNullElseGet(spawnGroupData, () -> new AgeableMob.AgeableMobGroupData(0.1F));
@@ -24,7 +16,7 @@ index 91ee1423557d7287de9f4adc8376b0b7ee8c94ac..487a0e850d1d4f4c2e9c117570871214
return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData1);
}
@@ -157,17 +159,19 @@ public class Dolphin extends AgeableWaterCreature {
@@ -155,17 +_,19 @@
protected void registerGoals() {
this.goalSelector.addGoal(0, new BreathAirGoal(this));
this.goalSelector.addGoal(0, new TryFindWaterGoal(this));
@@ -45,7 +37,7 @@ index 91ee1423557d7287de9f4adc8376b0b7ee8c94ac..487a0e850d1d4f4c2e9c117570871214
}
public static AttributeSupplier.Builder createAttributes() {
@@ -400,6 +404,7 @@ public class Dolphin extends AgeableWaterCreature {
@@ -392,6 +_,7 @@
@Override
public boolean canUse() {

View File

@@ -1,22 +1,14 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/horse/Llama.java b/net/minecraft/world/entity/animal/horse/Llama.java
index 050daf9e733b1b9edfa9862c5baf5e5412431fed..bcbbcea51261a2f1d6fbe3463e06900a6cd3d0ba 100644
--- a/net/minecraft/world/entity/animal/horse/Llama.java
+++ b/net/minecraft/world/entity/animal/horse/Llama.java
@@ -78,6 +78,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob {
private Llama caravanHead;
@Nullable
public Llama caravanTail; // Paper - public
--- a/net/minecraft/world/entity/animal/equine/Llama.java
+++ b/net/minecraft/world/entity/animal/equine/Llama.java
@@ -76,6 +_,7 @@
boolean didSpit;
private @Nullable Llama caravanHead;
public @Nullable Llama caravanTail; // Paper - public
+ public boolean shouldJoinCaravan = true; // Purpur - Llama API
public Llama(EntityType<? extends Llama> type, Level level) {
super(type, level);
@@ -107,6 +108,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob {
@@ -105,6 +_,7 @@
super.addAdditionalSaveData(output);
output.store("Variant", Llama.Variant.LEGACY_CODEC, this.getVariant());
output.putInt("Strength", this.getStrength());
@@ -24,7 +16,7 @@ index 050daf9e733b1b9edfa9862c5baf5e5412431fed..bcbbcea51261a2f1d6fbe3463e06900a
}
@Override
@@ -114,6 +116,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob {
@@ -112,6 +_,7 @@
this.setStrength(input.getIntOr("Strength", 0));
super.readAdditionalSaveData(input);
this.setVariant(input.read("Variant", Llama.Variant.LEGACY_CODEC).orElse(Llama.Variant.DEFAULT));
@@ -32,7 +24,7 @@ index 050daf9e733b1b9edfa9862c5baf5e5412431fed..bcbbcea51261a2f1d6fbe3463e06900a
}
@Override
@@ -395,6 +398,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob {
@@ -388,6 +_,7 @@
public void leaveCaravan() {
if (this.caravanHead != null) {
@@ -40,7 +32,7 @@ index 050daf9e733b1b9edfa9862c5baf5e5412431fed..bcbbcea51261a2f1d6fbe3463e06900a
this.caravanHead.caravanTail = null;
}
@@ -402,6 +406,7 @@ public class Llama extends AbstractChestedHorse implements RangedAttackMob {
@@ -395,6 +_,7 @@
}
public void joinCaravan(Llama caravanHead) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/Cat.java b/net/minecraft/world/entity/animal/Cat.java
index e1f12787a83458fd51dae6a907bbb81e3e522254..f6912836026638900fa5929b9550386a004fef11 100644
--- a/net/minecraft/world/entity/animal/Cat.java
+++ b/net/minecraft/world/entity/animal/Cat.java
@@ -355,6 +355,14 @@ public class Cat extends TamableAnimal {
--- a/net/minecraft/world/entity/animal/feline/Cat.java
+++ b/net/minecraft/world/entity/animal/feline/Cat.java
@@ -354,6 +_,14 @@
return this.isTame() && otherAnimal instanceof Cat cat && cat.isTame() && super.canMate(otherAnimal);
}
@@ -20,10 +12,10 @@ index e1f12787a83458fd51dae6a907bbb81e3e522254..f6912836026638900fa5929b9550386a
+ }
+ // Purpur end - Configurable default collar color
+
@Nullable
@Override
public SpawnGroupData finalizeSpawn(
@@ -453,7 +461,7 @@ public class Cat extends TamableAnimal {
public @Nullable SpawnGroupData finalizeSpawn(
ServerLevelAccessor level, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData spawnGroupData
@@ -451,7 +_,7 @@
}
private void tryToTame(Player player) {

View File

@@ -0,0 +1,11 @@
--- a/net/minecraft/world/entity/animal/feline/Ocelot.java
+++ b/net/minecraft/world/entity/animal/feline/Ocelot.java
@@ -234,7 +_,7 @@
public boolean checkSpawnObstruction(LevelReader level) {
if (level.isUnobstructed(this) && !level.containsAnyLiquid(this.getBoundingBox())) {
BlockPos blockPos = this.blockPosition();
- if (blockPos.getY() < level.getSeaLevel()) {
+ if (!level().purpurConfig.ocelotSpawnUnderSeaLevel && blockPos.getY() < level.getSeaLevel()) { // Purpur - Option Ocelot Spawn Under Sea Level
return false;
}

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/WaterAnimal.java b/net/minecraft/world/entity/animal/WaterAnimal.java
index b299512f2c495769c07f0fa911eed546b28cab9b..792221566b3ade7e55405a13e0877445445d97b5 100644
--- a/net/minecraft/world/entity/animal/WaterAnimal.java
+++ b/net/minecraft/world/entity/animal/WaterAnimal.java
@@ -76,8 +76,7 @@ public abstract class WaterAnimal extends PathfinderMob {
--- a/net/minecraft/world/entity/animal/fish/WaterAnimal.java
+++ b/net/minecraft/world/entity/animal/fish/WaterAnimal.java
@@ -76,8 +_,7 @@
seaLevel = level.getMinecraftWorld().paperConfig().entities.spawning.wateranimalSpawnHeight.maximum.or(seaLevel);
i = level.getMinecraftWorld().paperConfig().entities.spawning.wateranimalSpawnHeight.minimum.or(i);
// Paper end - Make water animal spawn height configurable

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/Fox.java b/net/minecraft/world/entity/animal/Fox.java
index 849ae9efc0d1e01ff1be36cc873e69530ea30691..30a781b28fc4c78ca581fba405fae66f5b72251e 100644
--- a/net/minecraft/world/entity/animal/Fox.java
+++ b/net/minecraft/world/entity/animal/Fox.java
@@ -348,6 +348,11 @@ public class Fox extends Animal {
--- a/net/minecraft/world/entity/animal/fox/Fox.java
+++ b/net/minecraft/world/entity/animal/fox/Fox.java
@@ -357,6 +_,11 @@
}
private void setTargetGoals() {
@@ -20,18 +12,19 @@ index 849ae9efc0d1e01ff1be36cc873e69530ea30691..30a781b28fc4c78ca581fba405fae66f
if (this.getVariant() == Fox.Variant.RED) {
this.targetSelector.addGoal(4, this.landTargetGoal);
this.targetSelector.addGoal(4, this.turtleEggTargetGoal);
@@ -375,6 +380,7 @@ public class Fox extends Animal {
@@ -384,6 +_,7 @@
public void setVariant(Fox.Variant variant) {
this.entityData.set(DATA_TYPE_ID, variant.getId());
+ this.setTargetGoals(); // Purpur - Tulips change fox type - fix API bug not updating pathfinders on type change
}
@Nullable
@@ -705,6 +711,29 @@ public class Fox extends Animal {
@Override
@@ -709,6 +_,29 @@
return slot == EquipmentSlot.MAINHAND;
}
// Paper end
+
+ // Purpur start - Tulips change fox type
+ @Override
+ public net.minecraft.world.InteractionResult mobInteract(Player player, net.minecraft.world.InteractionHand hand) {
@@ -54,7 +47,6 @@ index 849ae9efc0d1e01ff1be36cc873e69530ea30691..30a781b28fc4c78ca581fba405fae66f
+ return super.mobInteract(player, hand);
+ }
+ // Purpur end - Tulips change fox type
+
@Override
// Paper start - Cancellable death event
protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(ServerLevel level, DamageSource damageSource) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java
index 7549be3f72beb31ce20cbac96f4909368d877067..4f87e06695e49c09078ab673119e2af9f5158bae 100644
--- a/net/minecraft/world/entity/animal/goat/Goat.java
+++ b/net/minecraft/world/entity/animal/goat/Goat.java
@@ -390,6 +390,7 @@ public class Goat extends Animal {
@@ -389,6 +_,7 @@
// Paper start - Goat ram API
public void ram(net.minecraft.world.entity.LivingEntity entity) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java b/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java
index f16a4c8b568603d26e05d028f6f2f08822f2f045..9de4727596b2fde69f4049734eee0f1d81079b6f 100644
--- a/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java
+++ b/net/minecraft/world/entity/animal/coppergolem/CopperGolem.java
@@ -86,6 +86,7 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab
--- a/net/minecraft/world/entity/animal/golem/CopperGolem.java
+++ b/net/minecraft/world/entity/animal/golem/CopperGolem.java
@@ -83,6 +_,7 @@
private final AnimationState interactionDropItemAnimationState = new AnimationState();
private final AnimationState interactionDropNoItemAnimationState = new AnimationState();
public static final EquipmentSlot EQUIPMENT_SLOT_ANTENNA = EquipmentSlot.SADDLE;
@@ -16,7 +8,7 @@ index f16a4c8b568603d26e05d028f6f2f08822f2f045..9de4727596b2fde69f4049734eee0f1d
public CopperGolem(EntityType<? extends AbstractGolem> type, Level level) {
super(type, level);
@@ -99,6 +100,17 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab
@@ -96,6 +_,17 @@
this.getBrain().setMemory(MemoryModuleType.TRANSPORT_ITEMS_COOLDOWN_TICKS, this.getRandom().nextInt(60, 100));
}
@@ -34,7 +26,7 @@ index f16a4c8b568603d26e05d028f6f2f08822f2f045..9de4727596b2fde69f4049734eee0f1d
public static AttributeSupplier.Builder createAttributes() {
return Mob.createMobAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F).add(Attributes.STEP_HEIGHT, 1.0).add(Attributes.MAX_HEALTH, 12.0);
}
@@ -174,6 +186,7 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab
@@ -171,6 +_,7 @@
super.addAdditionalSaveData(output);
output.putLong("next_weather_age", this.nextWeatheringTick);
output.store("weather_state", WeatheringCopper.WeatherState.CODEC, this.getWeatherState());
@@ -42,7 +34,7 @@ index f16a4c8b568603d26e05d028f6f2f08822f2f045..9de4727596b2fde69f4049734eee0f1d
}
@Override
@@ -181,6 +194,7 @@ public class CopperGolem extends AbstractGolem implements ContainerUser, Shearab
@@ -178,6 +_,7 @@
super.readAdditionalSaveData(input);
this.nextWeatheringTick = input.getLongOr("next_weather_age", -1L);
this.setWeatherState(input.read("weather_state", WeatheringCopper.WeatherState.CODEC).orElse(WeatheringCopper.WeatherState.UNAFFECTED));

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/coppergolem/CopperGolemAi.java b/net/minecraft/world/entity/animal/coppergolem/CopperGolemAi.java
index e0875dd19a10cbf03daf67860993fb37ac0097e2..46e947adc04664839025c4167872c427d241b5d3 100644
--- a/net/minecraft/world/entity/animal/coppergolem/CopperGolemAi.java
+++ b/net/minecraft/world/entity/animal/coppergolem/CopperGolemAi.java
@@ -43,7 +43,7 @@ public class CopperGolemAi {
--- a/net/minecraft/world/entity/animal/golem/CopperGolemAi.java
+++ b/net/minecraft/world/entity/animal/golem/CopperGolemAi.java
@@ -43,7 +_,7 @@
private static final int TICK_TO_START_ON_REACHED_INTERACTION = 1;
private static final int TICK_TO_PLAY_ON_REACHED_SOUND = 9;
private static final Predicate<BlockState> TRANSPORT_ITEM_SOURCE_BLOCK = state -> state.is(BlockTags.COPPER_CHESTS);
@@ -17,7 +9,7 @@ index e0875dd19a10cbf03daf67860993fb37ac0097e2..46e947adc04664839025c4167872c427
private static final ImmutableList<SensorType<? extends Sensor<? super CopperGolem>>> SENSOR_TYPES = ImmutableList.of(
SensorType.NEAREST_LIVING_ENTITIES, SensorType.HURT_BY
);
@@ -158,6 +158,11 @@ public class CopperGolemAi {
@@ -158,6 +_,11 @@
}
if (integer == 60) {

View File

@@ -1,17 +1,9 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/IronGolem.java b/net/minecraft/world/entity/animal/IronGolem.java
index 6ba3d1f1019af2b2dde3804635a278e8d2c33dc8..838cc49d1a8b1b9758121c07de9e483966eef245 100644
--- a/net/minecraft/world/entity/animal/IronGolem.java
+++ b/net/minecraft/world/entity/animal/IronGolem.java
@@ -59,13 +59,26 @@ public class IronGolem extends AbstractGolem implements NeutralMob {
private int remainingPersistentAngerTime;
@Nullable
private UUID persistentAngerTarget;
--- a/net/minecraft/world/entity/animal/golem/IronGolem.java
+++ b/net/minecraft/world/entity/animal/golem/IronGolem.java
@@ -58,13 +_,26 @@
private static final UniformInt PERSISTENT_ANGER_TIME = TimeUtil.rangeOfSeconds(20, 39);
private long persistentAngerEndTime;
private @Nullable EntityReference<LivingEntity> persistentAngerTarget;
+ @Nullable private UUID summoner; // Purpur - Summoner API
public IronGolem(EntityType<? extends IronGolem> type, Level level) {
@@ -35,7 +27,7 @@ index 6ba3d1f1019af2b2dde3804635a278e8d2c33dc8..838cc49d1a8b1b9758121c07de9e4839
this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0, true));
this.goalSelector.addGoal(2, new MoveTowardsTargetGoal(this, 0.9, 32.0F));
this.goalSelector.addGoal(2, new MoveBackToVillageGoal(this, 0.6, false));
@@ -143,6 +156,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob {
@@ -142,6 +_,7 @@
protected void addAdditionalSaveData(ValueOutput output) {
super.addAdditionalSaveData(output);
output.putBoolean("PlayerCreated", this.isPlayerCreated());
@@ -43,7 +35,7 @@ index 6ba3d1f1019af2b2dde3804635a278e8d2c33dc8..838cc49d1a8b1b9758121c07de9e4839
this.addPersistentAngerSaveData(output);
}
@@ -150,6 +164,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob {
@@ -149,6 +_,7 @@
protected void readAdditionalSaveData(ValueInput input) {
super.readAdditionalSaveData(input);
this.setPlayerCreated(input.getBooleanOr("PlayerCreated", false));
@@ -51,7 +43,7 @@ index 6ba3d1f1019af2b2dde3804635a278e8d2c33dc8..838cc49d1a8b1b9758121c07de9e4839
this.readPersistentAngerSaveData(this.level(), input);
}
@@ -269,6 +284,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob {
@@ -267,6 +_,7 @@
float f = 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F;
this.playSound(SoundEvents.IRON_GOLEM_REPAIR, 1.0F, f);
itemInHand.consume(1, player);

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/SnowGolem.java b/net/minecraft/world/entity/animal/SnowGolem.java
index 1029f3342e8ba5754d99bd20106aaa30bca5ab19..8fa983d168874ef1497dc38b673295eb76a4e8b4 100644
--- a/net/minecraft/world/entity/animal/SnowGolem.java
+++ b/net/minecraft/world/entity/animal/SnowGolem.java
@@ -46,15 +46,27 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM
--- a/net/minecraft/world/entity/animal/golem/SnowGolem.java
+++ b/net/minecraft/world/entity/animal/golem/SnowGolem.java
@@ -46,15 +_,27 @@
private static final EntityDataAccessor<Byte> DATA_PUMPKIN_ID = SynchedEntityData.defineId(SnowGolem.class, EntityDataSerializers.BYTE);
private static final byte PUMPKIN_FLAG = 16;
private static final boolean DEFAULT_PUMPKIN = true;
@@ -38,7 +30,7 @@ index 1029f3342e8ba5754d99bd20106aaa30bca5ab19..8fa983d168874ef1497dc38b673295eb
this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 6.0F));
this.goalSelector.addGoal(4, new RandomLookAroundGoal(this));
this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Mob.class, 10, true, false, (entity, level) -> entity instanceof Enemy));
@@ -74,12 +86,14 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM
@@ -74,12 +_,14 @@
protected void addAdditionalSaveData(ValueOutput output) {
super.addAdditionalSaveData(output);
output.putBoolean("Pumpkin", this.hasPumpkin());
@@ -53,7 +45,7 @@ index 1029f3342e8ba5754d99bd20106aaa30bca5ab19..8fa983d168874ef1497dc38b673295eb
}
@Override
@@ -153,6 +167,14 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM
@@ -153,6 +_,14 @@
}
return InteractionResult.SUCCESS;

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/Parrot.java b/net/minecraft/world/entity/animal/Parrot.java
index 55d66e13d74f0ed3b4260b806eae03c0ef5053da..f5bd84355cd57b7a8c3ccd0f9ed2f714ff21233b 100644
--- a/net/minecraft/world/entity/animal/Parrot.java
+++ b/net/minecraft/world/entity/animal/Parrot.java
@@ -160,6 +160,7 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal {
--- a/net/minecraft/world/entity/animal/parrot/Parrot.java
+++ b/net/minecraft/world/entity/animal/parrot/Parrot.java
@@ -164,6 +_,7 @@
protected void registerGoals() {
this.goalSelector.addGoal(0, new TamableAnimal.TamableAnimalPanicGoal(1.25));
this.goalSelector.addGoal(0, new FloatGoal(this));
@@ -16,7 +8,7 @@ index 55d66e13d74f0ed3b4260b806eae03c0ef5053da..f5bd84355cd57b7a8c3ccd0f9ed2f714
this.goalSelector.addGoal(1, new LookAtPlayerGoal(this, Player.class, 8.0F));
this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this));
this.goalSelector.addGoal(2, new FollowOwnerGoal(this, 1.0, 5.0F, 1.0F));
@@ -265,7 +266,7 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal {
@@ -269,7 +_,7 @@
}
if (!this.level().isClientSide()) {
@@ -25,7 +17,7 @@ index 55d66e13d74f0ed3b4260b806eae03c0ef5053da..f5bd84355cd57b7a8c3ccd0f9ed2f714
this.tame(player);
this.level().broadcastEntityEvent(this, EntityEvent.TAMING_SUCCEEDED);
} else {
@@ -273,6 +274,7 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal {
@@ -277,6 +_,7 @@
}
}
@@ -33,7 +25,7 @@ index 55d66e13d74f0ed3b4260b806eae03c0ef5053da..f5bd84355cd57b7a8c3ccd0f9ed2f714
return InteractionResult.SUCCESS;
} else if (!itemInHand.is(ItemTags.PARROT_POISONOUS_FOOD)) {
if (!this.isFlying() && this.isTame() && this.isOwnedBy(player)) {
@@ -297,7 +299,7 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal {
@@ -301,7 +_,7 @@
@Override
public boolean isFood(ItemStack stack) {
@@ -42,7 +34,7 @@ index 55d66e13d74f0ed3b4260b806eae03c0ef5053da..f5bd84355cd57b7a8c3ccd0f9ed2f714
}
public static boolean checkParrotSpawnRules(
@@ -312,13 +314,13 @@ public class Parrot extends ShoulderRidingEntity implements FlyingAnimal {
@@ -316,12 +_,12 @@
@Override
public boolean canMate(Animal otherAnimal) {
@@ -50,11 +42,10 @@ index 55d66e13d74f0ed3b4260b806eae03c0ef5053da..f5bd84355cd57b7a8c3ccd0f9ed2f714
+ return super.canMate(otherAnimal); // Purpur - Breedable parrots
}
@Nullable
@Override
public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob partner) {
public @Nullable AgeableMob getBreedOffspring(ServerLevel level, AgeableMob partner) {
- return null;
+ return level.purpurConfig.parrotBreedable ? EntityType.PARROT.create(level, EntitySpawnReason.BREEDING) : null; // Purpur - Breedable parrots
}
@Nullable
@Override

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/Pig.java b/net/minecraft/world/entity/animal/Pig.java
index bbb1b6033c7e742cf1cdf35fdce0dc127aa37756..8a12ac29e2221c7e91f4935046894fbc77eaf2a1 100644
--- a/net/minecraft/world/entity/animal/Pig.java
+++ b/net/minecraft/world/entity/animal/Pig.java
@@ -142,6 +142,19 @@ public class Pig extends Animal implements ItemSteerable {
--- a/net/minecraft/world/entity/animal/pig/Pig.java
+++ b/net/minecraft/world/entity/animal/pig/Pig.java
@@ -142,6 +_,19 @@
@Override
public InteractionResult mobInteract(Player player, InteractionHand hand) {
boolean isFood = this.isFood(player.getItemInHand(hand));

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/PolarBear.java b/net/minecraft/world/entity/animal/PolarBear.java
index 3365988779494860e3248487ed3e9f7c16848a7b..59288cb00951808d3ea7921875c9cbecb2de7f98 100644
--- a/net/minecraft/world/entity/animal/PolarBear.java
+++ b/net/minecraft/world/entity/animal/PolarBear.java
@@ -65,6 +65,29 @@ public class PolarBear extends Animal implements NeutralMob {
--- a/net/minecraft/world/entity/animal/polarbear/PolarBear.java
+++ b/net/minecraft/world/entity/animal/polarbear/PolarBear.java
@@ -66,6 +_,29 @@
super(type, level);
}
@@ -35,10 +27,10 @@ index 3365988779494860e3248487ed3e9f7c16848a7b..59288cb00951808d3ea7921875c9cbec
+ }
+ // Purpur end - Breedable Polar Bears
+
@Nullable
@Override
public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob partner) {
@@ -73,7 +96,7 @@ public class PolarBear extends Animal implements NeutralMob {
public @Nullable AgeableMob getBreedOffspring(ServerLevel level, AgeableMob partner) {
return EntityType.POLAR_BEAR.create(level, EntitySpawnReason.BREEDING);
@@ -73,7 +_,7 @@
@Override
public boolean isFood(ItemStack stack) {
@@ -47,7 +39,7 @@ index 3365988779494860e3248487ed3e9f7c16848a7b..59288cb00951808d3ea7921875c9cbec
}
@Override
@@ -82,6 +105,12 @@ public class PolarBear extends Animal implements NeutralMob {
@@ -82,6 +_,12 @@
this.goalSelector.addGoal(0, new FloatGoal(this));
this.goalSelector.addGoal(1, new PolarBear.PolarBearMeleeAttackGoal());
this.goalSelector.addGoal(1, new PanicGoal(this, 2.0, mob -> mob.isBaby() ? DamageTypeTags.PANIC_CAUSES : DamageTypeTags.PANIC_ENVIRONMENTAL_CAUSES));

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/Rabbit.java b/net/minecraft/world/entity/animal/Rabbit.java
index 94aaae063defb56461351887b4a3023a62e4ce24..aa5bca6c0633cffdbb79ecc50d68e5c4bc2e54cf 100644
--- a/net/minecraft/world/entity/animal/Rabbit.java
+++ b/net/minecraft/world/entity/animal/Rabbit.java
@@ -406,10 +406,23 @@ public class Rabbit extends Animal {
--- a/net/minecraft/world/entity/animal/rabbit/Rabbit.java
+++ b/net/minecraft/world/entity/animal/rabbit/Rabbit.java
@@ -404,10 +_,23 @@
}
this.setVariant(randomRabbitVariant);

View File

@@ -0,0 +1,16 @@
--- a/net/minecraft/world/entity/animal/squid/GlowSquid.java
+++ b/net/minecraft/world/entity/animal/squid/GlowSquid.java
@@ -30,6 +_,13 @@
super(type, level);
}
+ // Purpur start - Flying squids! Oh my!
+ @Override
+ public boolean canFly() {
+ return this.level().purpurConfig.glowSquidsCanFly;
+ }
+ // Purpur end - Flying squids! Oh my!
+
@Override
protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK;

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/Squid.java b/net/minecraft/world/entity/animal/Squid.java
index 8313ea146ba6910d92653c29887c94b75f68cce4..1f63894c82f39e43a25b9900f8f92f83cc5b6e66 100644
--- a/net/minecraft/world/entity/animal/Squid.java
+++ b/net/minecraft/world/entity/animal/Squid.java
@@ -47,10 +47,29 @@ public class Squid extends AgeableWaterCreature {
--- a/net/minecraft/world/entity/animal/squid/Squid.java
+++ b/net/minecraft/world/entity/animal/squid/Squid.java
@@ -48,10 +_,29 @@
public Squid(EntityType<? extends Squid> type, Level level) {
super(type, level);
@@ -39,7 +31,7 @@ index 8313ea146ba6910d92653c29887c94b75f68cce4..1f63894c82f39e43a25b9900f8f92f83
@Override
protected void registerGoals() {
this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this));
@@ -128,6 +147,7 @@ public class Squid extends AgeableWaterCreature {
@@ -128,6 +_,7 @@
}
if (this.isInWater()) {
@@ -47,7 +39,7 @@ index 8313ea146ba6910d92653c29887c94b75f68cce4..1f63894c82f39e43a25b9900f8f92f83
if (this.tentacleMovement < (float) Math.PI) {
float f = this.tentacleMovement / (float) Math.PI;
this.tentacleAngle = Mth.sin(f * f * (float) Math.PI) * (float) Math.PI * 0.25F;
@@ -309,7 +329,7 @@ public class Squid extends AgeableWaterCreature {
@@ -308,7 +_,7 @@
int noActionTime = this.squid.getNoActionTime();
if (noActionTime > 100) {
this.squid.movementVector = Vec3.ZERO;

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/animal/wolf/Wolf.java b/net/minecraft/world/entity/animal/wolf/Wolf.java
index 752e20872725fc11d0f7d8f1d5e7fad87f01db28..9f79615cda890d5823fda94bad5b8cddde22e14d 100644
--- a/net/minecraft/world/entity/animal/wolf/Wolf.java
+++ b/net/minecraft/world/entity/animal/wolf/Wolf.java
@@ -100,6 +100,37 @@ public class Wolf extends TamableAnimal implements NeutralMob {
@@ -100,6 +_,37 @@
EntityType<?> type = entity.getType();
return type == EntityType.SHEEP || type == EntityType.RABBIT || type == EntityType.FOX;
};
@@ -46,7 +38,7 @@ index 752e20872725fc11d0f7d8f1d5e7fad87f01db28..9f79615cda890d5823fda94bad5b8cdd
private static final float START_HEALTH = 8.0F;
private static final float TAME_HEALTH = 40.0F;
private static final float ARMOR_REPAIR_UNIT = 0.125F;
@@ -122,12 +153,47 @@ public class Wolf extends TamableAnimal implements NeutralMob {
@@ -121,12 +_,47 @@
this.setPathfindingMalus(PathType.DANGER_POWDER_SNOW, -1.0F);
}
@@ -94,7 +86,7 @@ index 752e20872725fc11d0f7d8f1d5e7fad87f01db28..9f79615cda890d5823fda94bad5b8cdd
this.goalSelector.addGoal(4, new LeapAtTargetGoal(this, 0.4F));
this.goalSelector.addGoal(5, new MeleeAttackGoal(this, 1.0, true));
this.goalSelector.addGoal(6, new FollowOwnerGoal(this, 1.0, 10.0F, 2.0F));
@@ -140,7 +206,7 @@ public class Wolf extends TamableAnimal implements NeutralMob {
@@ -139,7 +_,7 @@
this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this));
this.targetSelector.addGoal(3, new HurtByTargetGoal(this).setAlertOthers());
this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt));
@@ -103,7 +95,7 @@ index 752e20872725fc11d0f7d8f1d5e7fad87f01db28..9f79615cda890d5823fda94bad5b8cdd
this.targetSelector.addGoal(6, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR));
this.targetSelector.addGoal(7, new NearestAttackableTargetGoal<>(this, AbstractSkeleton.class, false));
this.targetSelector.addGoal(8, new ResetUniversalAngerTargetGoal<>(this, true));
@@ -231,6 +297,7 @@ public class Wolf extends TamableAnimal implements NeutralMob {
@@ -229,6 +_,7 @@
protected void addAdditionalSaveData(ValueOutput output) {
super.addAdditionalSaveData(output);
output.store("CollarColor", DyeColor.LEGACY_ID_CODEC, this.getCollarColor());
@@ -111,7 +103,7 @@ index 752e20872725fc11d0f7d8f1d5e7fad87f01db28..9f79615cda890d5823fda94bad5b8cdd
VariantUtils.writeVariant(output, this.getVariant());
this.addPersistentAngerSaveData(output);
this.getSoundVariant()
@@ -245,6 +312,10 @@ public class Wolf extends TamableAnimal implements NeutralMob {
@@ -243,6 +_,10 @@
super.readAdditionalSaveData(input);
VariantUtils.readVariant(input, Registries.WOLF_VARIANT).ifPresent(this::setVariant);
this.setCollarColor(input.read("CollarColor", DyeColor.LEGACY_ID_CODEC).orElse(DEFAULT_COLLAR_COLOR));
@@ -122,7 +114,7 @@ index 752e20872725fc11d0f7d8f1d5e7fad87f01db28..9f79615cda890d5823fda94bad5b8cdd
this.readPersistentAngerSaveData(this.level(), input);
input.read("sound_variant", ResourceKey.codec(Registries.WOLF_SOUND_VARIANT))
.flatMap(resourceKey -> this.registryAccess().lookupOrThrow(Registries.WOLF_SOUND_VARIANT).get((ResourceKey<WolfSoundVariant>)resourceKey))
@@ -269,6 +340,10 @@ public class Wolf extends TamableAnimal implements NeutralMob {
@@ -266,6 +_,10 @@
}
this.setSoundVariant(WolfSoundVariants.pickRandomSoundVariant(this.registryAccess(), level.getRandom()));
@@ -133,7 +125,7 @@ index 752e20872725fc11d0f7d8f1d5e7fad87f01db28..9f79615cda890d5823fda94bad5b8cdd
return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData);
}
@@ -319,6 +394,11 @@ public class Wolf extends TamableAnimal implements NeutralMob {
@@ -316,6 +_,11 @@
public void tick() {
super.tick();
if (this.isAlive()) {
@@ -145,7 +137,7 @@ index 752e20872725fc11d0f7d8f1d5e7fad87f01db28..9f79615cda890d5823fda94bad5b8cdd
this.interestedAngleO = this.interestedAngle;
if (this.isInterested()) {
this.interestedAngle = this.interestedAngle + (1.0F - this.interestedAngle) * 0.4F;
@@ -520,13 +600,27 @@ public class Wolf extends TamableAnimal implements NeutralMob {
@@ -517,13 +_,27 @@
itemInHand.consume(1, player);
this.tryToTame(player);
return InteractionResult.SUCCESS_SERVER;
@@ -169,8 +161,8 @@ index 752e20872725fc11d0f7d8f1d5e7fad87f01db28..9f79615cda890d5823fda94bad5b8cdd
}
private void tryToTame(Player player) {
- if (this.random.nextInt(3) == 0 && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, player).isCancelled()) { // CraftBukkit - added event call and isCancelled check.
+ if (((this.level().purpurConfig.alwaysTameInCreative && player.hasInfiniteMaterials()) || this.random.nextInt(3) == 0) && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, player).isCancelled()) { // CraftBukkit - added event call and isCancelled check. // Purpur - Config to always tame in Creative
- if (this.random.nextInt(3) == 0 && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, player).isCancelled()) { // CraftBukkit - added event call
+ if (((this.level().purpurConfig.alwaysTameInCreative && player.hasInfiniteMaterials()) || this.random.nextInt(3) == 0) && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityTameEvent(this, player).isCancelled()) { // CraftBukkit - added event call // Purpur - Config to always tame in Creative
this.tame(player);
this.navigation.stop();
this.setTarget(null);

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java
index 4fc773a0cb9d68e22e4d6cc7d819196a6cabf4f1..9503ec9d44a6c0811639b7d0cf504d32fefff58d 100644
--- a/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java
+++ b/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java
@@ -39,6 +39,24 @@ public class EndCrystal extends Entity {
@@ -39,6 +_,24 @@
this.setPos(x, y, z);
}
@@ -33,7 +25,7 @@ index 4fc773a0cb9d68e22e4d6cc7d819196a6cabf4f1..9503ec9d44a6c0811639b7d0cf504d32
@Override
protected Entity.MovementEmission getMovementEmission() {
return Entity.MovementEmission.NONE;
@@ -75,6 +93,8 @@ public class EndCrystal extends Entity {
@@ -75,6 +_,8 @@
}
}
// Paper end - Fix invulnerable end crystals
@@ -42,7 +34,7 @@ index 4fc773a0cb9d68e22e4d6cc7d819196a6cabf4f1..9503ec9d44a6c0811639b7d0cf504d32
}
@Override
@@ -115,15 +135,17 @@ public class EndCrystal extends Entity {
@@ -115,15 +_,17 @@
}
// CraftBukkit end
if (!damageSource.is(DamageTypeTags.IS_EXPLOSION)) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
index 465674ed712667a72e532cc62b11e93433cfdac6..14216ad9e1182dd9c380c79b1f1f3926ad6f458b 100644
--- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
+++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java
@@ -962,6 +962,7 @@ public class EnderDragon extends Mob implements Enemy {
@@ -957,6 +_,7 @@
@Override
protected boolean canRide(Entity entity) {
@@ -16,8 +8,8 @@ index 465674ed712667a72e532cc62b11e93433cfdac6..14216ad9e1182dd9c380c79b1f1f3926
return false;
}
@@ -997,7 +998,7 @@ public class EnderDragon extends Mob implements Enemy {
boolean flag = level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT);
@@ -992,7 +_,7 @@
boolean flag = level.getGameRules().get(GameRules.MOB_DROPS);
int i = 500;
- if (this.dragonFight != null && !this.dragonFight.hasPreviouslyKilledDragon()) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java
index 6d304da949f271cf41cf5897e08afd936fdf7bed..d94d1d673dbb69742203119d1ef6bf0404efaada 100644
--- a/net/minecraft/world/entity/boss/wither/WitherBoss.java
+++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java
@@ -80,6 +80,7 @@ public class WitherBoss extends Monster implements RangedAttackMob {
@@ -80,6 +_,7 @@
private static final TargetingConditions.Selector LIVING_ENTITY_SELECTOR = (entity, level) -> !entity.getType().is(EntityTypeTags.WITHER_FRIENDS)
&& entity.attackable();
private static final TargetingConditions TARGETING_CONDITIONS = TargetingConditions.forCombat().range(20.0).selector(LIVING_ENTITY_SELECTOR);
@@ -16,7 +8,7 @@ index 6d304da949f271cf41cf5897e08afd936fdf7bed..d94d1d673dbb69742203119d1ef6bf04
public WitherBoss(EntityType<? extends WitherBoss> type, Level level) {
super(type, level);
@@ -88,6 +89,17 @@ public class WitherBoss extends Monster implements RangedAttackMob {
@@ -88,6 +_,17 @@
this.xpReward = 50;
}
@@ -34,7 +26,7 @@ index 6d304da949f271cf41cf5897e08afd936fdf7bed..d94d1d673dbb69742203119d1ef6bf04
@Override
protected PathNavigation createNavigation(Level level) {
FlyingPathNavigation flyingPathNavigation = new FlyingPathNavigation(this, level);
@@ -120,6 +132,7 @@ public class WitherBoss extends Monster implements RangedAttackMob {
@@ -120,6 +_,7 @@
protected void addAdditionalSaveData(ValueOutput output) {
super.addAdditionalSaveData(output);
output.putInt("Invul", this.getInvulnerableTicks());
@@ -42,7 +34,7 @@ index 6d304da949f271cf41cf5897e08afd936fdf7bed..d94d1d673dbb69742203119d1ef6bf04
}
@Override
@@ -129,6 +142,7 @@ public class WitherBoss extends Monster implements RangedAttackMob {
@@ -129,6 +_,7 @@
if (this.hasCustomName()) {
this.bossEvent.setName(this.getDisplayName());
}
@@ -50,7 +42,7 @@ index 6d304da949f271cf41cf5897e08afd936fdf7bed..d94d1d673dbb69742203119d1ef6bf04
}
@Override
@@ -272,7 +286,7 @@ public class WitherBoss extends Monster implements RangedAttackMob {
@@ -272,7 +_,7 @@
level.explode(this, this.getX(), this.getEyeY(), this.getZ(), event.getRadius(), event.getFire(), Level.ExplosionInteraction.MOB);
}
// CraftBukkit end
@@ -59,7 +51,7 @@ index 6d304da949f271cf41cf5897e08afd936fdf7bed..d94d1d673dbb69742203119d1ef6bf04
// CraftBukkit start - Use relative location for far away sounds
// level.globalLevelEvent(1023, this.blockPosition(), 0);
int viewDistance = level.getCraftServer().getViewDistance() * 16;
@@ -379,8 +393,10 @@ public class WitherBoss extends Monster implements RangedAttackMob {
@@ -379,8 +_,10 @@
}
}
@@ -72,7 +64,7 @@ index 6d304da949f271cf41cf5897e08afd936fdf7bed..d94d1d673dbb69742203119d1ef6bf04
}
this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth());
@@ -577,6 +593,7 @@ public class WitherBoss extends Monster implements RangedAttackMob {
@@ -577,6 +_,7 @@
@Override
protected boolean canRide(Entity entity) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/decoration/ArmorStand.java b/net/minecraft/world/entity/decoration/ArmorStand.java
index 15479a9fc47cca3d6627b42c31ba8ff114bbe362..f329459ad97ed4ea5297455d4741d008acb32750 100644
--- a/net/minecraft/world/entity/decoration/ArmorStand.java
+++ b/net/minecraft/world/entity/decoration/ArmorStand.java
@@ -92,10 +92,13 @@ public class ArmorStand extends LivingEntity {
@@ -92,10 +_,13 @@
public boolean canTickSetByAPI = false;
private boolean noTickEquipmentDirty = false;
// Paper end - Allow ArmorStands not to tick
@@ -22,7 +14,7 @@ index 15479a9fc47cca3d6627b42c31ba8ff114bbe362..f329459ad97ed4ea5297455d4741d008
}
public ArmorStand(Level level, double x, double y, double z) {
@@ -522,6 +525,7 @@ public class ArmorStand extends LivingEntity {
@@ -522,6 +_,7 @@
// Paper start - Allow ArmorStands not to tick
@Override
public void tick() {
@@ -30,7 +22,7 @@ index 15479a9fc47cca3d6627b42c31ba8ff114bbe362..f329459ad97ed4ea5297455d4741d008
if (!this.canTick) {
if (this.noTickEquipmentDirty) {
this.noTickEquipmentDirty = false;
@@ -812,4 +816,18 @@ public class ArmorStand extends LivingEntity {
@@ -810,4 +_,18 @@
}
}
// Paper end

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/item/ItemEntity.java b/net/minecraft/world/entity/item/ItemEntity.java
index 6be576368695c902a0d6da74b1d77d3018b4585a..8153c870c0c822792ffbb0fa1ae96b201a1444e3 100644
--- a/net/minecraft/world/entity/item/ItemEntity.java
+++ b/net/minecraft/world/entity/item/ItemEntity.java
@@ -56,6 +56,12 @@ public class ItemEntity extends Entity implements TraceableEntity {
@@ -54,6 +_,12 @@
public boolean canMobPickup = true; // Paper - Item#canEntityPickup
private int despawnRate = -1; // Paper - Alternative item-despawn-rate
public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API
@@ -21,7 +13,7 @@ index 6be576368695c902a0d6da74b1d77d3018b4585a..8153c870c0c822792ffbb0fa1ae96b20
public ItemEntity(EntityType<? extends ItemEntity> type, Level level) {
super(type, level);
@@ -333,7 +339,16 @@ public class ItemEntity extends Entity implements TraceableEntity {
@@ -330,7 +_,16 @@
@Override
public final boolean hurtServer(ServerLevel level, DamageSource damageSource, float amount) {
@@ -37,9 +29,9 @@ index 6be576368695c902a0d6da74b1d77d3018b4585a..8153c870c0c822792ffbb0fa1ae96b20
+ } else if (this.isInvulnerableToBase(damageSource)) {
+ // Purpur end - Item entity immunities
return false;
} else if (!level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && damageSource.getEntity() instanceof Mob) {
} else if (!level.getGameRules().get(GameRules.MOB_GRIEFING) && damageSource.getEntity() instanceof Mob) {
return false;
@@ -512,6 +527,12 @@ public class ItemEntity extends Entity implements TraceableEntity {
@@ -508,6 +_,12 @@
public void setItem(ItemStack stack) {
this.getEntityData().set(DATA_ITEM, stack);
this.despawnRate = this.level().paperConfig().entities.spawning.altItemDespawnRate.enabled ? this.level().paperConfig().entities.spawning.altItemDespawnRate.items.getOrDefault(stack.getItem(), this.level().spigotConfig.itemDespawnRate) : this.level().spigotConfig.itemDespawnRate; // Paper - Alternative item-despawn-rate

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/item/PrimedTnt.java b/net/minecraft/world/entity/item/PrimedTnt.java
index c685b5123c88fc73c26a3ba31225ab1226e52702..b988aa11c403a1b520ec5630f2f11593c7507a05 100644
--- a/net/minecraft/world/entity/item/PrimedTnt.java
+++ b/net/minecraft/world/entity/item/PrimedTnt.java
@@ -238,4 +238,32 @@ public class PrimedTnt extends Entity implements TraceableEntity {
@@ -235,4 +_,32 @@
return !this.level().paperConfig().fixes.preventTntFromMovingInWater && super.isPushedByFluid();
}
// Paper end - Option to prevent TNT from moving in water

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/monster/Creeper.java b/net/minecraft/world/entity/monster/Creeper.java
index 10d8975a229c000c1610f4927358fa44bae40c23..c3386bd6028a9391d2eb00567b711f89b4585608 100644
--- a/net/minecraft/world/entity/monster/Creeper.java
+++ b/net/minecraft/world/entity/monster/Creeper.java
@@ -56,6 +56,7 @@ public class Creeper extends Monster {
@@ -56,6 +_,7 @@
public int explosionRadius = 3;
public boolean droppedSkulls;
public @Nullable Entity entityIgniter; // CraftBukkit
@@ -16,7 +8,7 @@ index 10d8975a229c000c1610f4927358fa44bae40c23..c3386bd6028a9391d2eb00567b711f89
public Creeper(EntityType<? extends Creeper> type, Level level) {
super(type, level);
@@ -159,6 +160,27 @@ public class Creeper extends Monster {
@@ -159,6 +_,27 @@
return false; // CraftBukkit
}
@@ -44,7 +36,7 @@ index 10d8975a229c000c1610f4927358fa44bae40c23..c3386bd6028a9391d2eb00567b711f89
@Override
public SoundEvent getHurtSound(DamageSource damageSource) {
return SoundEvents.CREEPER_HURT;
@@ -243,14 +265,16 @@ public class Creeper extends Monster {
@@ -243,14 +_,16 @@
}
public void explodeCreeper() {
@@ -63,7 +55,7 @@ index 10d8975a229c000c1610f4927358fa44bae40c23..c3386bd6028a9391d2eb00567b711f89
this.spawnLingeringCloud();
this.triggerOnDeathMobEffects(serverLevel, Entity.RemovalReason.KILLED);
this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.EXPLODE); // CraftBukkit - add Bukkit remove cause
@@ -261,6 +285,7 @@ public class Creeper extends Monster {
@@ -261,6 +_,7 @@
}
// CraftBukkit end
}

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java
index 9b63c55a61b511ebad6c94b48926cfdf544b0449..87aaa6cd478d8d635b625d1a98bce23d577fb33a 100644
--- a/net/minecraft/world/entity/monster/EnderMan.java
+++ b/net/minecraft/world/entity/monster/EnderMan.java
@@ -102,7 +102,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -101,7 +_,7 @@
this.goalSelector.addGoal(11, new EnderMan.EndermanTakeBlockGoal(this));
this.targetSelector.addGoal(1, new EnderMan.EndermanLookForPlayerGoal(this, this::isAngryAt));
this.targetSelector.addGoal(2, new HurtByTargetGoal(this));
@@ -17,7 +9,7 @@ index 9b63c55a61b511ebad6c94b48926cfdf544b0449..87aaa6cd478d8d635b625d1a98bce23d
this.targetSelector.addGoal(4, new ResetUniversalAngerTargetGoal<>(this, false));
}
@@ -222,7 +222,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -220,7 +_,7 @@
boolean isBeingStaredBy(Player player) {
// Paper start - EndermanAttackPlayerEvent
@@ -26,7 +18,7 @@ index 9b63c55a61b511ebad6c94b48926cfdf544b0449..87aaa6cd478d8d635b625d1a98bce23d
final com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent event = new com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent((org.bukkit.entity.Enderman) getBukkitEntity(), (org.bukkit.entity.Player) player.getBukkitEntity());
event.setCancelled(!shouldAttack);
return event.callEvent();
@@ -378,6 +378,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -375,6 +_,7 @@
public boolean hurtServer(ServerLevel level, DamageSource damageSource, float amount) {
if (this.isInvulnerableTo(level, damageSource)) {
return false;
@@ -34,7 +26,7 @@ index 9b63c55a61b511ebad6c94b48926cfdf544b0449..87aaa6cd478d8d635b625d1a98bce23d
} else {
AbstractThrownPotion abstractThrownPotion1 = damageSource.getDirectEntity() instanceof AbstractThrownPotion abstractThrownPotion
? abstractThrownPotion
@@ -394,6 +395,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -391,6 +_,7 @@
} else {
boolean flag = abstractThrownPotion1 != null && this.hurtWithCleanWater(level, damageSource, abstractThrownPotion1, amount);
@@ -42,7 +34,7 @@ index 9b63c55a61b511ebad6c94b48926cfdf544b0449..87aaa6cd478d8d635b625d1a98bce23d
if (this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.INDIRECT)) { // Paper - EndermanEscapeEvent
for (int i = 0; i < 64; i++) {
if (this.teleport()) {
@@ -437,7 +439,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -434,7 +_,7 @@
@Override
public boolean requiresCustomPersistence() {
@@ -51,19 +43,19 @@ index 9b63c55a61b511ebad6c94b48926cfdf544b0449..87aaa6cd478d8d635b625d1a98bce23d
}
static class EndermanFreezeWhenLookedAt extends Goal {
@@ -481,6 +483,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -477,6 +_,7 @@
@Override
public boolean canUse() {
+ if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur - Add enderman and creeper griefing controls
return this.enderman.getCarriedBlock() != null
&& getServerLevel(this.enderman).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)
&& getServerLevel(this.enderman).getGameRules().get(GameRules.MOB_GRIEFING)
&& this.enderman.getRandom().nextInt(reducedTickDelay(2000)) == 0;
@@ -630,6 +633,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -625,6 +_,7 @@
@Override
public boolean canUse() {
+ if (!enderman.level().purpurConfig.endermanAllowGriefing) return false; // Purpur - Add enderman and creeper griefing controls
return this.enderman.getCarriedBlock() == null
&& getServerLevel(this.enderman).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)
&& getServerLevel(this.enderman).getGameRules().get(GameRules.MOB_GRIEFING)
&& this.enderman.getRandom().nextInt(reducedTickDelay(20)) == 0;

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/monster/Endermite.java b/net/minecraft/world/entity/monster/Endermite.java
index cabf4d06ede5ea155fea5a0d7a17e67c0de8754f..980ec0e45581812c027bb2ce8cd25d74e5f10663 100644
--- a/net/minecraft/world/entity/monster/Endermite.java
+++ b/net/minecraft/world/entity/monster/Endermite.java
@@ -30,12 +30,23 @@ public class Endermite extends Monster {
@@ -30,12 +_,23 @@
private static final int MAX_LIFE = 2400;
private static final int DEFAULT_LIFE = 0;
public int life = 0;
@@ -32,7 +24,7 @@ index cabf4d06ede5ea155fea5a0d7a17e67c0de8754f..980ec0e45581812c027bb2ce8cd25d74
@Override
protected void registerGoals() {
this.goalSelector.addGoal(1, new FloatGoal(this));
@@ -81,12 +92,14 @@ public class Endermite extends Monster {
@@ -81,12 +_,14 @@
protected void readAdditionalSaveData(ValueInput input) {
super.readAdditionalSaveData(input);
this.life = input.getIntOr("Lifetime", 0);

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/monster/Ghast.java b/net/minecraft/world/entity/monster/Ghast.java
index 8f9a299d9e448fad46fa704542a909f6bb90e713..9954f5173c427d8c61e283d9bb2dac42c296f357 100644
--- a/net/minecraft/world/entity/monster/Ghast.java
+++ b/net/minecraft/world/entity/monster/Ghast.java
@@ -156,6 +156,11 @@ public class Ghast extends Mob implements Enemy {
@@ -156,6 +_,11 @@
public static boolean checkGhastSpawnRules(
EntityType<Ghast> entityType, LevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random
) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/monster/Guardian.java b/net/minecraft/world/entity/monster/Guardian.java
index c907feb2ab6862d980f89f6341402131a8a966f2..cd802866af8ed2d0ebd5f8dabe170848cbf4638a 100644
--- a/net/minecraft/world/entity/monster/Guardian.java
+++ b/net/minecraft/world/entity/monster/Guardian.java
@@ -315,6 +315,11 @@ public class Guardian extends Monster {
@@ -312,6 +_,11 @@
public static boolean checkGuardianSpawnRules(
EntityType<? extends Guardian> entityType, LevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random
) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/monster/MagmaCube.java b/net/minecraft/world/entity/monster/MagmaCube.java
index 034a41573c330b2366fb305bb0796293d5d6a187..2323a7315878e38710f8f31f7806ebda94077067 100644
--- a/net/minecraft/world/entity/monster/MagmaCube.java
+++ b/net/minecraft/world/entity/monster/MagmaCube.java
@@ -31,6 +31,11 @@ public class MagmaCube extends Slime {
@@ -31,6 +_,11 @@
public static boolean checkMagmaCubeSpawnRules(
EntityType<MagmaCube> entityType, LevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random
) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/monster/Monster.java b/net/minecraft/world/entity/monster/Monster.java
index e792298d50ed7b7112f862d3b820a03fd9b05550..7c420f567f7841f45acd91b9749cab150397f5e2 100644
--- a/net/minecraft/world/entity/monster/Monster.java
+++ b/net/minecraft/world/entity/monster/Monster.java
@@ -84,6 +84,11 @@ public abstract class Monster extends PathfinderMob implements Enemy {
@@ -84,6 +_,11 @@
}
public static boolean isDarkEnoughToSpawn(ServerLevelAccessor level, BlockPos pos, RandomSource random) {
@@ -20,7 +12,7 @@ index e792298d50ed7b7112f862d3b820a03fd9b05550..7c420f567f7841f45acd91b9749cab15
if (level.getBrightness(LightLayer.SKY, pos) > random.nextInt(32)) {
return false;
} else {
@@ -109,6 +114,11 @@ public abstract class Monster extends PathfinderMob implements Enemy {
@@ -109,6 +_,11 @@
public static boolean checkAnyLightMonsterSpawnRules(
EntityType<? extends Monster> entityType, LevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random
) {
@@ -32,7 +24,7 @@ index e792298d50ed7b7112f862d3b820a03fd9b05550..7c420f567f7841f45acd91b9749cab15
return level.getDifficulty() != Difficulty.PEACEFUL && checkMobSpawnRules(entityType, level, spawnReason, pos, random);
}
@@ -140,4 +150,12 @@ public abstract class Monster extends PathfinderMob implements Enemy {
@@ -146,4 +_,12 @@
return ItemStack.EMPTY;
}
}

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java
index b0f0a70ef6d708917ac8278c7eebd81d1fd7df6a..7da7dfaf400e69434417f6f85d5d021235d11162 100644
--- a/net/minecraft/world/entity/monster/Phantom.java
+++ b/net/minecraft/world/entity/monster/Phantom.java
@@ -170,7 +170,11 @@ public class Phantom extends Mob implements Enemy {
@@ -166,7 +_,11 @@
ServerLevelAccessor level, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData spawnGroupData
) {
this.anchorPoint = this.blockPosition().above(5);

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/monster/Ravager.java b/net/minecraft/world/entity/monster/Ravager.java
index 1686abac483f319d958079e8c4617c4d74a0c4af..da20eb6eaadd9468fcc96f022d67d4583371d717 100644
--- a/net/minecraft/world/entity/monster/Ravager.java
+++ b/net/minecraft/world/entity/monster/Ravager.java
@@ -75,6 +75,7 @@ public class Ravager extends Raider {
@@ -76,6 +_,7 @@
protected void registerGoals() {
super.registerGoals();
this.goalSelector.addGoal(0, new FloatGoal(this));
@@ -16,7 +8,7 @@ index 1686abac483f319d958079e8c4617c4d74a0c4af..da20eb6eaadd9468fcc96f022d67d458
this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0, true));
this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.4));
this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F));
@@ -155,7 +156,7 @@ public class Ravager extends Raider {
@@ -154,7 +_,7 @@
)) {
BlockState blockState = serverLevel.getBlockState(blockPos);
Block block = blockState.getBlock();

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java
index 7c56d3d5d24d25c4d70a19be256b5cbe9374f09f..d0bcd2d1f7afd4a01c9a0f7d66082df38db50edd 100644
--- a/net/minecraft/world/entity/monster/Shulker.java
+++ b/net/minecraft/world/entity/monster/Shulker.java
@@ -94,6 +94,21 @@ public class Shulker extends AbstractGolem implements Enemy {
@@ -93,6 +_,21 @@
this.lookControl = new Shulker.ShulkerLookControl(this);
}
@@ -30,7 +22,7 @@ index 7c56d3d5d24d25c4d70a19be256b5cbe9374f09f..d0bcd2d1f7afd4a01c9a0f7d66082df3
@Override
protected void registerGoals() {
this.goalSelector.addGoal(1, new LookAtPlayerGoal(this, Player.class, 8.0F, 0.02F, true));
@@ -457,11 +472,21 @@ public class Shulker extends AbstractGolem implements Enemy {
@@ -454,11 +_,21 @@
private void hitByShulkerBullet() {
Vec3 vec3 = this.position();
AABB boundingBox = this.getBoundingBox();
@@ -56,7 +48,7 @@ index 7c56d3d5d24d25c4d70a19be256b5cbe9374f09f..d0bcd2d1f7afd4a01c9a0f7d66082df3
if (shulker != null) {
shulker.setVariant(this.getVariant());
shulker.snapTo(vec3);
@@ -569,7 +594,7 @@ public class Shulker extends AbstractGolem implements Enemy {
@@ -565,7 +_,7 @@
}
public Optional<DyeColor> getVariant() {
@@ -64,4 +56,4 @@ index 7c56d3d5d24d25c4d70a19be256b5cbe9374f09f..d0bcd2d1f7afd4a01c9a0f7d66082df3
+ return Optional.ofNullable(this.level().purpurConfig.shulkerSpawnFromBulletRandomColor ? DyeColor.random(this.level().random) : this.getColor()); // Purpur - Shulker spawn from bullet options
}
@Nullable
public @Nullable DyeColor getColor() {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/monster/Slime.java b/net/minecraft/world/entity/monster/Slime.java
index 6a4bdf6e8e785460c864552f21116dec8c545bd6..7abd42fa34c80e868875f0ff3986a85d1a6dcb8c 100644
--- a/net/minecraft/world/entity/monster/Slime.java
+++ b/net/minecraft/world/entity/monster/Slime.java
@@ -301,6 +301,11 @@ public class Slime extends Mob implements Enemy {
@@ -302,6 +_,11 @@
public static boolean checkSlimeSpawnRules(
EntityType<Slime> entityType, LevelAccessor level, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random
) {

View File

@@ -1,14 +1,6 @@
From 73b67b6fc4ab1a46cb7c1113a4648915bf072f56 Mon Sep 17 00:00:00 2001
From: File <noreply+automated@papermc.io>
Date: Sun, 20 Apr 1997 05:37:42 -0800
Subject: [PATCH] purpur File Patches
diff --git a/net/minecraft/world/entity/monster/Strider.java b/net/minecraft/world/entity/monster/Strider.java
index 402723c86ffb8da0f4ed5529a762d2eed151e73e..312564fcaf91280d70e379994bd9d8fcb54b0a40 100644
--- a/net/minecraft/world/entity/monster/Strider.java
+++ b/net/minecraft/world/entity/monster/Strider.java
@@ -393,6 +393,18 @@ public class Strider extends Animal implements ItemSteerable {
@@ -390,6 +_,18 @@
@Override
public InteractionResult mobInteract(Player player, InteractionHand hand) {
boolean isFood = this.isFood(player.getItemInHand(hand));

Some files were not shown because too many files have changed in this diff Show More