Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,14 @@ From: MidnightTale <midnighttale24@gmail.com>
Date: Thu, 24 Jul 2025 08:46:30 +0700
Subject: [PATCH] Purpur: Barrels and enderchests 6 rows

Co-authored by: William Blake Galbreath <Blake.Galbreath@GMail.com>
As part of: Purpur (https://github.com/PurpurMC/Purpur/blob/09f547de09fc5d886f18f6d99ff389289766ec9d/purpur-server/minecraft-patches/features/0003-Barrels-and-enderchests-6-rows.patch)
Licensed under: MIT (https://github.com/PurpurMC/Purpur/blob/09f547de09fc5d886f18f6d99ff389289766ec9d/LICENSE)

diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 5c21fc0c749973d17df690fe7e2eab597b198131..d89f91a08d38869296471a78d52fa84ff97be64a 100644
index 5958732fe6ac391648df07cd76e73c0fb4c312b8..2f4ceb4f26a9861083de02e3d5aa6f10763c20f5 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -1086,6 +1086,9 @@ public abstract class PlayerList {
@@ -1087,6 +1087,9 @@ public abstract class PlayerList {
player.getBukkitEntity().recalculatePermissions(); // CraftBukkit
this.server.getCommands().sendCommands(player);
} // Paper - Add sendOpLevel API
Expand All @@ -34,7 +33,7 @@ index 7ff3562f4095a1e79a1299b56a080ee5a15cfa0d..aa1a5de33aef5718581bf50ee45b1d2b
// CraftBukkit start
public boolean fauxSleeping;
diff --git a/net/minecraft/world/inventory/ChestMenu.java b/net/minecraft/world/inventory/ChestMenu.java
index 0fffa384f928ab84451331380968fb4650eafe26..8cf24c79535d1cf326079f0eacd5f1ac25e3f365 100644
index 0fffa384f928ab84451331380968fb4650eafe26..57ac36b77f15966b0e2a6676bfc15b963ec1100a 100644
--- a/net/minecraft/world/inventory/ChestMenu.java
+++ b/net/minecraft/world/inventory/ChestMenu.java
@@ -70,6 +70,26 @@ public class ChestMenu extends AbstractContainerMenu {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ Subject: [PATCH] Add config for death loot


diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index 06e41bca6b964ca71ea7bca547b03cdb3610ba31..b39f2790fabeb7f2a977dcd1ec66db1fde373e51 100644
index aa242f3f7589c8edafccccb52effaed7582aa6f4..44d8430361cadacff08b5f543a471982d453ff77 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -1249,7 +1249,33 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
@@ -1250,7 +1250,33 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
if (!keepInventory) {
for (ItemStack item : this.getInventory().getContents()) {
if (!item.isEmpty() && !EnchantmentHelper.has(item, net.minecraft.world.item.enchantment.EnchantmentEffectComponents.PREVENT_EQUIPMENT_DROP)) {
Expand All @@ -17,23 +17,23 @@ index 06e41bca6b964ca71ea7bca547b03cdb3610ba31..b39f2790fabeb7f2a977dcd1ec66db1f
+ ItemEntity entity = this.drop(stack, true, false, false, null);
+ // atDeprecated start - death loot protection
+ if (entity != null) {
+ if (fun.mntale.atdeprecated.config.AtCoreConfig.DEATH_LOOT_CONFIG.deathItemsOwnerPickupOnly) {
+ if (fun.mntale.atdeprecated.config.AtCoreConfig.INVENTORY_CONFIG.deathItemsOwnerPickupOnly) {
+ entity.setTarget(this.getUUID());
+ entity.markAsDeathLoot();
+ }
+ if (fun.mntale.atdeprecated.config.AtCoreConfig.DEATH_LOOT_CONFIG.deathItemsGlow) {
+ if (fun.mntale.atdeprecated.config.AtCoreConfig.INVENTORY_CONFIG.deathItemsGlow) {
+ entity.setGlowingTag(true);
+ entity.markAsDeathLoot();
+ }
+ if (fun.mntale.atdeprecated.config.AtCoreConfig.DEATH_LOOT_CONFIG.deathItemsInvulnerable) {
+ if (fun.mntale.atdeprecated.config.AtCoreConfig.INVENTORY_CONFIG.deathItemsInvulnerable) {
+ entity.setInvulnerable(true);
+ entity.markAsDeathLoot();
+ }
+ if (fun.mntale.atdeprecated.config.AtCoreConfig.DEATH_LOOT_CONFIG.deathItemDespawnTimeTicks > 0) {
+ entity.age = -fun.mntale.atdeprecated.config.AtCoreConfig.DEATH_LOOT_CONFIG.deathItemDespawnTimeTicks;
+ if (fun.mntale.atdeprecated.config.AtCoreConfig.INVENTORY_CONFIG.deathItemDespawnTimeTicks > 0) {
+ entity.age = -fun.mntale.atdeprecated.config.AtCoreConfig.INVENTORY_CONFIG.deathItemDespawnTimeTicks;
+ entity.markAsDeathLoot();
+ }
+ if (fun.mntale.atdeprecated.config.AtCoreConfig.DEATH_LOOT_CONFIG.deathItemsMobCantPickup) {
+ if (fun.mntale.atdeprecated.config.AtCoreConfig.INVENTORY_CONFIG.deathItemsMobCantPickup) {
+ entity.canMobPickup = false;
+ entity.markAsDeathLoot();
+ }
Expand All @@ -44,7 +44,7 @@ index 06e41bca6b964ca71ea7bca547b03cdb3610ba31..b39f2790fabeb7f2a977dcd1ec66db1f
}
}
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index d55a6989fd68f0bcf7bd05e9420fda1115afa6c0..25b1db4170104c7b49ed5c62989f6d8c59699465 100644
index d55a6989fd68f0bcf7bd05e9420fda1115afa6c0..08b29d1f7941bb81d9a715656d94d987e8247cc5 100644
--- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java
@@ -3970,9 +3970,17 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
Expand All @@ -56,7 +56,7 @@ index d55a6989fd68f0bcf7bd05e9420fda1115afa6c0..25b1db4170104c7b49ed5c62989f6d8c
- itemEntity.setDeltaMovement(-Mth.sin(f1) * f, 0.2F, Mth.cos(f1) * f);
+ // atDeprecated start
+ if (this instanceof Player) {
+ float f = this.random.nextFloat() * (float) fun.mntale.atdeprecated.config.AtCoreConfig.DEATH_LOOT_CONFIG.deathLootSpread;
+ float f = this.random.nextFloat() * (float) fun.mntale.atdeprecated.config.AtCoreConfig.INVENTORY_CONFIG.deathLootSpread;
+ float f1 = this.random.nextFloat() * (float) (Math.PI * 2);
+ itemEntity.setDeltaMovement(-Mth.sin(f1) * f, 0.2F, Mth.cos(f1) * f);
+ } else {
Expand All @@ -69,7 +69,7 @@ index d55a6989fd68f0bcf7bd05e9420fda1115afa6c0..25b1db4170104c7b49ed5c62989f6d8c
float f = 0.3F;
float f1 = Mth.sin(this.getXRot() * (float) (Math.PI / 180.0));
diff --git a/net/minecraft/world/entity/item/ItemEntity.java b/net/minecraft/world/entity/item/ItemEntity.java
index b745eb5d9c68547335247910ff2ae8d5fb36349c..bef0bf94a54ab85a86efcb5502ca721f28cf33be 100644
index b745eb5d9c68547335247910ff2ae8d5fb36349c..a779bb24475e2ee5b6fab7da9b64a2c96b027242 100644
--- a/net/minecraft/world/entity/item/ItemEntity.java
+++ b/net/minecraft/world/entity/item/ItemEntity.java
@@ -56,6 +56,7 @@ public class ItemEntity extends Entity implements TraceableEntity {
Expand All @@ -85,7 +85,7 @@ index b745eb5d9c68547335247910ff2ae8d5fb36349c..bef0bf94a54ab85a86efcb5502ca721f
this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause
}
+ // atDeprecated start - glowing for death loot
+ if (this.isDeathLoot && fun.mntale.atdeprecated.config.AtCoreConfig.DEATH_LOOT_CONFIG.deathItemsGlow) {
+ if (this.isDeathLoot && fun.mntale.atdeprecated.config.AtCoreConfig.INVENTORY_CONFIG.deathItemsGlow) {
+ this.setGlowingTag(true);
+ }
+ // atDeprecated end
Expand Down Expand Up @@ -118,7 +118,7 @@ index b745eb5d9c68547335247910ff2ae8d5fb36349c..bef0bf94a54ab85a86efcb5502ca721f
public void playerTouch(Player entity) {
if (!this.level().isClientSide) {
+ // atDeprecated start - enforce owner-only pickup for death loot
+ if (this.isDeathLoot && fun.mntale.atdeprecated.config.AtCoreConfig.DEATH_LOOT_CONFIG.deathItemsOwnerPickupOnly) {
+ if (this.isDeathLoot && fun.mntale.atdeprecated.config.AtCoreConfig.INVENTORY_CONFIG.deathItemsOwnerPickupOnly) {
+ if (this.target != null && !this.target.equals(entity.getUUID())) {
+ return;
+ }
Expand All @@ -137,7 +137,7 @@ index b745eb5d9c68547335247910ff2ae8d5fb36349c..bef0bf94a54ab85a86efcb5502ca721f
+ // atDeprecated end
}
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
index aa1a5de33aef5718581bf50ee45b1d2b1c13a46c..b9b14cd9f0ff5556e076aab21f4c2b85d1e48ee5 100644
index aa1a5de33aef5718581bf50ee45b1d2b1c13a46c..d5ba1bea926f0fd3ef38d101055d61eb548679a4 100644
--- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java
@@ -1840,7 +1840,16 @@ public abstract class Player extends LivingEntity {
Expand All @@ -147,7 +147,7 @@ index aa1a5de33aef5718581bf50ee45b1d2b1c13a46c..b9b14cd9f0ff5556e076aab21f4c2b85
- return !level.getGameRules().getBoolean(GameRules.RULE_KEEPINVENTORY) && !this.isSpectator() ? Math.min(this.experienceLevel * 7, 100) : 0;
+ // atDeprecated start - Use deathXpDropPercentage gamerule for XP drop (fixed XP calculation)
+ if (!level.getGameRules().getBoolean(GameRules.RULE_KEEPINVENTORY) && !this.isSpectator()) {
+ int percent = fun.mntale.atdeprecated.config.AtCoreConfig.DEATH_LOOT_CONFIG.deathXpDropPercentage;
+ int percent = fun.mntale.atdeprecated.config.AtCoreConfig.INVENTORY_CONFIG.deathXpDropPercentage;
+ if (percent < 0) percent = 0;
+ if (percent > 100) percent = 100;
+ int xp = getTrueTotalExperience();
Expand Down Expand Up @@ -194,15 +194,15 @@ index aa1a5de33aef5718581bf50ee45b1d2b1c13a46c..b9b14cd9f0ff5556e076aab21f4c2b85
+ // atDeprecated end
}
diff --git a/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/net/minecraft/world/level/block/entity/HopperBlockEntity.java
index 5de769e7bd56bb3355c3c711d46ce5e103ea4409..e823741a915f14254933aebc515f4ad72b174bbc 100644
index 5de769e7bd56bb3355c3c711d46ce5e103ea4409..646cb7159a3e38101c281bd9fac5d0be1d79c3e8 100644
--- a/net/minecraft/world/level/block/entity/HopperBlockEntity.java
+++ b/net/minecraft/world/level/block/entity/HopperBlockEntity.java
@@ -630,6 +630,11 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
}

public static boolean addItem(Container container, ItemEntity item) {
+ // atDeprecated start - prevent hopper pickup of death loot
+ if (item.isDeathLoot && fun.mntale.atdeprecated.config.AtCoreConfig.DEATH_LOOT_CONFIG.deathItemsHopperCantPickup) {
+ if (item.isDeathLoot && fun.mntale.atdeprecated.config.AtCoreConfig.INVENTORY_CONFIG.deathItemsHopperCantPickup) {
+ return false;
+ }
+ // atDeprecated end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ From: MidnightTale <midnighttale24@gmail.com>
Date: Thu, 24 Jul 2025 23:04:37 +0700
Subject: [PATCH] Lophine: Add config to enable Raytracing tracker

Co-authored by: MrHua269 <wangxyper@163.com>
As part of: Lophine (https://github.com/LuminolMC/Lophine/blob/904abaa56499a869259d3e6b3e586c1d33e34d28/lophine-server/minecraft-patches/features/0006-Add-config-to-enable-Raytracing-tracker.patch)
Licensed under: MIT (https://github.com/LuminolMC/Lophine/blob/904abaa56499a869259d3e6b3e586c1d33e34d28/LICENSE.md)

Expand Down Expand Up @@ -96,7 +95,7 @@ index 6f00ffa05d9597917574357e0069c9b056aa5ce2..af0a8b99188f25adb0a76e227d3debc1
public EntityType(
EntityType.EntityFactory<T> factory,
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
index b9b14cd9f0ff5556e076aab21f4c2b85d1e48ee5..4480b491250f08350f479c27d17d51fe62bc60f6 100644
index d5ba1bea926f0fd3ef38d101055d61eb548679a4..e95884b560b8986568dc84214649f640d84d199e 100644
--- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java
@@ -230,6 +230,25 @@ public abstract class Player extends LivingEntity {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MidnightTale <midnighttale24@gmail.com>
Date: Fri, 25 Jul 2025 10:48:02 +0700
Subject: [PATCH] Leaf: Don't save primed tnt entity

As part of: Leaf (https://github.com/Winds-Studio/Leaf/blob/006fe7ce3a58e687183271f02e1331f23fc5bd99/leaf-server/minecraft-patches/features/0137-Don-t-save-primed-tnt-entity.patch)
Licensed under: MIT (https://github.com/Winds-Studio/Leaf/blob/006fe7ce3a58e687183271f02e1331f23fc5bd99/LICENSE.md)

diff --git a/net/minecraft/world/entity/item/PrimedTnt.java b/net/minecraft/world/entity/item/PrimedTnt.java
index 732672aa7d915217eb4af44179b2f2ab1e796cca..19c34d9e453b98e633aa272dae7c35b01339532a 100644
--- a/net/minecraft/world/entity/item/PrimedTnt.java
+++ b/net/minecraft/world/entity/item/PrimedTnt.java
@@ -246,4 +246,11 @@ public class PrimedTnt extends Entity implements TraceableEntity {
return !this.level().paperConfig().fixes.preventTntFromMovingInWater && super.isPushedByFluid();
}
// Paper end - Option to prevent TNT from moving in water
+
+ // Leaf start - PMC - Don't save primed tnt entity
+ @Override
+ public boolean shouldBeSaved() {
+ return !fun.mntale.atdeprecated.config.AtCoreConfig.ENTITY_CONFIG.dontSavePrimedTNT && super.shouldBeSaved();
+ }
+ // Leaf - PMC - Don't save primed tnt entity
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MidnightTale <midnighttale24@gmail.com>
Date: Fri, 25 Jul 2025 10:50:28 +0700
Subject: [PATCH] Leaf: Don't save falling block entity

As part of: Leaf (https://github.com/Winds-Studio/Leaf/blob/006fe7ce3a58e687183271f02e1331f23fc5bd99/leaf-server/minecraft-patches/features/0138-Don-t-save-falling-block-entity.patch)
Licensed under: MIT (https://github.com/Winds-Studio/Leaf/blob/006fe7ce3a58e687183271f02e1331f23fc5bd99/LICENSE.md)

diff --git a/net/minecraft/world/entity/item/FallingBlockEntity.java b/net/minecraft/world/entity/item/FallingBlockEntity.java
index c444c4b7dc8454abd257030a8c59b9b22b9013d9..8fe609d6506edfe26067af196188a395f9ba966b 100644
--- a/net/minecraft/world/entity/item/FallingBlockEntity.java
+++ b/net/minecraft/world/entity/item/FallingBlockEntity.java
@@ -390,4 +390,11 @@ public class FallingBlockEntity extends Entity {
this.forceTickAfterTeleportToDuplicate = entity != null && flag && (io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.allowUnsafeEndPortalTeleportation || me.earthme.luminol.config.modules.fixes.UnsafeTeleportationConfig.enabled); // Paper // Luminol - Unsafe teleportation
return entity;
}
+
+ // Leaf start - PMC - Don't save falling block entity
+ @Override
+ public boolean shouldBeSaved() {
+ return !fun.mntale.atdeprecated.config.AtCoreConfig.ENTITY_CONFIG.dontSaveFallingBlock && super.shouldBeSaved();
+ }
+ // Leaf end - PMC - Don't save falling block entity
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: MidnightTale <midnighttale24@gmail.com>
Date: Fri, 25 Jul 2025 11:16:28 +0700
Subject: [PATCH] Purpur: Don't send useless entity packets

Original license: MIT
Original project: https://github.com/PurpurMC/Purpur

diff --git a/net/minecraft/server/level/ServerEntity.java b/net/minecraft/server/level/ServerEntity.java
index 3a9293d5328ef0befa0b709169489b61a2266807..de476f97c42f6949f769aaf9cf5ce18470bd7cda 100644
--- a/net/minecraft/server/level/ServerEntity.java
+++ b/net/minecraft/server/level/ServerEntity.java
@@ -231,6 +231,7 @@ public class ServerEntity {
} // SparklyPaper end
}

+ if (fun.mntale.atdeprecated.config.AtCoreConfig.ENTITY_CONFIG.reduceUselessEntityMovePackets && isUselessMoveEntityPacket(packet)) packet = null; // Purpur
if (packet != null) {
this.broadcast.accept(packet);
}
@@ -291,6 +292,21 @@ public class ServerEntity {
);
}

+ // Purpur start
+ private boolean isUselessMoveEntityPacket(@Nullable Packet<?> packet) {
+ if (!(packet instanceof ClientboundMoveEntityPacket moveEntityPacket)) return false;
+ return switch (packet) {
+ case ClientboundMoveEntityPacket.Pos ignored ->
+ moveEntityPacket.getXa() == 0 && moveEntityPacket.getYa() == 0 && moveEntityPacket.getZa() == 0;
+ case ClientboundMoveEntityPacket.PosRot ignored ->
+ moveEntityPacket.getXa() == 0 && moveEntityPacket.getYa() == 0 && moveEntityPacket.getZa() == 0 && moveEntityPacket.getYRot() == 0 && moveEntityPacket.getXRot() == 0;
+ case ClientboundMoveEntityPacket.Rot ignored ->
+ moveEntityPacket.getYRot() == 0 && moveEntityPacket.getXRot() == 0;
+ default -> false;
+ };
+ }
+ // Purpur end
+
private void handleMinecartPosRot(NewMinecartBehavior behavior, byte yRot, byte xRot, boolean dirty) {
this.sendDirtyEntityData();
if (behavior.lerpSteps.isEmpty()) {
Loading