diff --git a/patches/server-unmapped/0118-Infinite-fuel-furnace.patch b/patches/server-unmapped/0118-Infinite-fuel-furnace.patch deleted file mode 100644 index 5e29941e0..000000000 --- a/patches/server-unmapped/0118-Infinite-fuel-furnace.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Mon, 19 Oct 2020 15:14:01 -0500 -Subject: [PATCH] Infinite fuel furnace - - -diff --git a/src/main/java/net/minecraft/world/level/block/entity/TileEntityFurnace.java b/src/main/java/net/minecraft/world/level/block/entity/TileEntityFurnace.java -index 9ce19b89c16eb6edd3d5d5cc87a966a37f66895c..ac42fd627009a87709448354f232d8b5ed7fa6b9 100644 ---- a/src/main/java/net/minecraft/world/level/block/entity/TileEntityFurnace.java -+++ b/src/main/java/net/minecraft/world/level/block/entity/TileEntityFurnace.java -@@ -12,6 +12,7 @@ import java.util.Map; - import javax.annotation.Nullable; - import net.minecraft.SharedConstants; - import net.minecraft.SystemUtils; -+import net.minecraft.core.BlockPosition; - import net.minecraft.core.EnumDirection; - import net.minecraft.core.NonNullList; - import net.minecraft.nbt.NBTTagCompound; -@@ -38,6 +39,7 @@ import net.minecraft.world.level.World; - import net.minecraft.world.level.block.BlockFurnace; - import net.minecraft.world.level.block.Blocks; - import net.minecraft.world.level.block.state.IBlockData; -+import net.minecraft.world.level.material.Fluid; - import net.minecraft.world.phys.Vec3D; - - // CraftBukkit start -@@ -308,6 +310,22 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I - if (!this.world.isClientSide) { - ItemStack itemstack = (ItemStack) this.items.get(1); - -+ // Purpur start -+ boolean infiniteFuel = false; -+ if (world.purpurConfig.furnaceInfiniteFuel && !isBurning() && itemstack.isEmpty() && !items.get(0).isEmpty() && world.getTime() % 20 == 0) { -+ BlockPosition pos = getPosition().down(); -+ IBlockData iblockdata = world.getTypeIfLoaded(pos); -+ if (iblockdata != null && iblockdata.equals(Blocks.LAVA)) { -+ Fluid fluid = iblockdata.getFluid(); -+ if (fluid != null && fluid.isSource()) { -+ world.setTypeAndData(pos, Blocks.AIR.getBlockData(), 3); -+ itemstack = Items.LAVA_BUCKET.createItemStack(); -+ infiniteFuel = true; -+ } -+ } -+ } -+ // Purpur end -+ - if (!this.isBurning() && (itemstack.isEmpty() || ((ItemStack) this.items.get(0)).isEmpty())) { - if (!this.isBurning() && this.cookTime > 0) { - this.cookTime = MathHelper.clamp(this.cookTime - 2, 0, this.cookTimeTotal); -@@ -361,6 +379,8 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I - flag1 = true; - this.world.setTypeAndData(this.position, (IBlockData) this.world.getType(this.position).set(BlockFurnace.LIT, this.isBurning()), 3); - } -+ -+ if (infiniteFuel) this.items.set(1, ItemStack.NULL_ITEM); // Purpur - } - - if (flag1) { -diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index b11a71a1dda78098f1995f289a1fb45c9a02eeb6..30ca0eaf588b7056963e9c6ecb4682608b46a463 100644 ---- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -409,6 +409,11 @@ public class PurpurWorldConfig { - farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); - } - -+ public boolean furnaceInfiniteFuel = false; -+ private void furnaceSettings() { -+ furnaceInfiniteFuel = getBoolean("blocks.furnace.infinite-fuel", furnaceInfiniteFuel); -+ } -+ - public boolean lavaInfinite = false; - public int lavaInfiniteRequiredSources = 2; - public int lavaSpeedNether = 10; diff --git a/patches/server-unmapped/0119-Arrows-should-not-reset-despawn-counter.patch b/patches/server-unmapped/0119-Arrows-should-not-reset-despawn-counter.patch deleted file mode 100644 index e49ddc72f..000000000 --- a/patches/server-unmapped/0119-Arrows-should-not-reset-despawn-counter.patch +++ /dev/null @@ -1,21 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Wed, 4 Nov 2020 13:12:50 -0600 -Subject: [PATCH] Arrows should not reset despawn counter - -This prevents keeping arrows alive indefinitely (such as when the block -the arrow is stuck in gets removed, like a piston head going up/down) - -diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityArrow.java b/src/main/java/net/minecraft/world/entity/projectile/EntityArrow.java -index d4d45655ed84d4b35e624a97b64f269e39c99e08..6edf1736aec571c74e5b4a6cbe7b58fe809419c3 100644 ---- a/src/main/java/net/minecraft/world/entity/projectile/EntityArrow.java -+++ b/src/main/java/net/minecraft/world/entity/projectile/EntityArrow.java -@@ -281,7 +281,7 @@ public abstract class EntityArrow extends IProjectile { - Vec3D vec3d = this.getMot(); - - this.setMot(vec3d.d((double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F))); -- this.despawnCounter = 0; -+ // this.despawnCounter = 0; // Purpur - do not reset despawn counter - } - - @Override diff --git a/patches/server-unmapped/0136-Config-migration-disable-saving-projectiles-to-disk-.patch b/patches/server-unmapped/0136-Config-migration-disable-saving-projectiles-to-disk-.patch deleted file mode 100644 index f844d51b6..000000000 --- a/patches/server-unmapped/0136-Config-migration-disable-saving-projectiles-to-disk-.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> -Date: Mon, 30 Nov 2020 18:30:13 -0800 -Subject: [PATCH] Config migration: disable saving projectiles to disk -> - projectile load/save limit of 0 - - -diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index c68ef95730c9c0b2f81be1cfbbc849e0f1c505fd..8a1311eeb2504bc9708403686518ea38bf598c71 100644 ---- a/src/main/java/net/pl3x/purpur/PurpurConfig.java -+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java -@@ -1,6 +1,7 @@ - package net.pl3x.purpur; - - import co.aikar.timings.TimingsManager; -+import com.destroystokyo.paper.PaperConfig; - import com.google.common.base.Throwables; - import net.minecraft.locale.LocaleLanguage; - import net.minecraft.server.MinecraftServer; -@@ -133,6 +134,17 @@ public class PurpurConfig { - return config.getString(path, config.getString(path)); - } - -+ private static void migrateDisableProjectileSaving() { -+ if (PurpurConfig.version < 6) { -+ final boolean saveProjectilesToDisk = getBoolean("world-settings.default.gameplay-mechanics.save-projectiles-to-disk", true); -+ set("world-settings.default.gameplay-mechanics.save-projectiles-to-disk", null); -+ if (!saveProjectilesToDisk) { -+ PaperConfig.config.set("world-settings.default.projectile-load-save-per-chunk-limit", 0); -+ PaperConfig.saveConfig(); -+ } -+ } -+ } -+ - public static String afkBroadcastAway = "§e§o%s is now AFK"; - public static String afkBroadcastBack = "§e§o%s is no longer AFK"; - public static String afkTabListPrefix = "[AFK] "; -diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 944c1bbcb868e2e24f26db04b588f6f0c13164e5..c2044a89fd1547092fd3d6be671570fcf2a60f09 100644 ---- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1,5 +1,6 @@ - package net.pl3x.purpur; - -+import com.destroystokyo.paper.PaperConfig; - import net.minecraft.core.IRegistry; - import net.minecraft.world.EnumDifficulty; - import net.minecraft.world.level.Explosion; -@@ -84,6 +85,17 @@ public class PurpurWorldConfig { - return PurpurConfig.config.getString("world-settings." + worldName + "." + path, PurpurConfig.config.getString("world-settings.default." + path)); - } - -+ private void migrateDisableProjectileSaving() { -+ if (PurpurConfig.version < 6) { -+ final boolean saveProjectilesToDisk = PurpurConfig.config.getBoolean("world-settings." + worldName + ".gameplay-mechanics.save-projectiles-to-disk", true); -+ PurpurConfig.config.set("world-settings." + worldName + ".gameplay-mechanics.save-projectiles-to-disk", null); -+ if (!saveProjectilesToDisk) { -+ PaperConfig.config.set("world-settings." + worldName + ".projectile-load-save-per-chunk-limit", 0); -+ PaperConfig.saveConfig(); -+ } -+ } -+ } -+ - public boolean armorstandSetNameVisible = false; - public boolean armorstandFixNametags = false; - public float armorstandStepHeight = 0.0F; diff --git a/patches/server-unmapped/0117-Allow-infinite-and-mending-enchantments-together.patch b/patches/server/0114-Allow-infinite-and-mending-enchantments-together.patch similarity index 62% rename from patches/server-unmapped/0117-Allow-infinite-and-mending-enchantments-together.patch rename to patches/server/0114-Allow-infinite-and-mending-enchantments-together.patch index 4d9943d6f..17c0890f0 100644 --- a/patches/server-unmapped/0117-Allow-infinite-and-mending-enchantments-together.patch +++ b/patches/server/0114-Allow-infinite-and-mending-enchantments-together.patch @@ -4,23 +4,23 @@ Date: Tue, 13 Oct 2020 20:04:33 -0500 Subject: [PATCH] Allow infinite and mending enchantments together -diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentInfiniteArrows.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentInfiniteArrows.java -index bf9d6d0e593951aa5abc9aef6cf4803430ea18e5..29bebbccf8dd6ff8976d1bfdb4c2ddcfc9de57dc 100644 ---- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentInfiniteArrows.java -+++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentInfiniteArrows.java -@@ -25,6 +25,6 @@ public class EnchantmentInfiniteArrows extends Enchantment { +diff --git a/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java b/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java +index 3aece8245060dd1ba269c08d226c84247a6f0a83..6763d0b96c83d1b462999f525bf1f31c30cf705f 100644 +--- a/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java ++++ b/src/main/java/net/minecraft/world/item/enchantment/ArrowInfiniteEnchantment.java +@@ -24,6 +24,6 @@ public class ArrowInfiniteEnchantment extends Enchantment { @Override - public boolean a(Enchantment enchantment) { -- return enchantment instanceof EnchantmentMending ? false : super.a(enchantment); -+ return enchantment instanceof EnchantmentMending ? net.pl3x.purpur.PurpurConfig.allowInfinityMending : super.a(enchantment); // Purpur + public boolean checkCompatibility(Enchantment other) { +- return other instanceof MendingEnchantment ? false : super.checkCompatibility(other); ++ return other instanceof MendingEnchantment ? net.pl3x.purpur.PurpurConfig.allowInfinityMending : super.checkCompatibility(other); } } diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 318caff699e2a1656ef9428641f898f0508a1df7..f068f0d4101b63b728809dca8dd322c45c793e04 100644 +index ebaa80b52f236a8c7376006b4b7f4f37b409c31d..91605de2724dc3b4f533be168719371060ef105d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java -@@ -198,6 +198,16 @@ public class PurpurConfig { +@@ -196,6 +196,16 @@ public class PurpurConfig { cryingObsidianValidForPortalFrame = getBoolean("settings.blocks.crying_obsidian.valid-for-portal-frame", cryingObsidianValidForPortalFrame); } diff --git a/patches/server/0115-Infinite-fuel-furnace.patch b/patches/server/0115-Infinite-fuel-furnace.patch new file mode 100644 index 000000000..e8bb72c75 --- /dev/null +++ b/patches/server/0115-Infinite-fuel-furnace.patch @@ -0,0 +1,65 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Mon, 19 Oct 2020 15:14:01 -0500 +Subject: [PATCH] Infinite fuel furnace + + +diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +index de53c9652fd6103c4ee5bdb9304979b675cb2bd7..ad281f15ff8fca4770b6a8c3bb81964a835f7f4f 100644 +--- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java ++++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +@@ -40,6 +40,7 @@ import net.minecraft.world.level.Level; + import net.minecraft.world.level.block.AbstractFurnaceBlock; + import net.minecraft.world.level.block.Blocks; + import net.minecraft.world.level.block.state.BlockState; ++import net.minecraft.world.level.material.FluidState; + import net.minecraft.world.phys.Vec3; + // CraftBukkit start + import org.bukkit.craftbukkit.block.CraftBlock; +@@ -316,6 +317,22 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit + + ItemStack itemstack = (ItemStack) blockEntity.items.get(1); + ++ // Purpur start ++ boolean infiniteFuel = false; ++ if (world.purpurConfig.furnaceInfiniteFuel && !blockEntity.isLit() && itemstack.isEmpty() && !blockEntity.items.get(0).isEmpty() && world.getGameTime() % 20 == 0) { ++ BlockPos position = blockEntity.getBlockPos().below(); ++ BlockState blockState = world.getTypeIfLoaded(pos); ++ if (blockState != null && blockState.is(Blocks.LAVA)) { ++ FluidState fluid = state.getFluidState(); ++ if (fluid != null && fluid.isSource()) { ++ world.setBlock(pos, Blocks.AIR.defaultBlockState(), 3); ++ itemstack = Items.LAVA_BUCKET.getDefaultInstance(); ++ infiniteFuel = true; ++ } ++ } ++ } ++ // Purpur end ++ + if (!blockEntity.isLit() && (itemstack.isEmpty() || ((ItemStack) blockEntity.items.get(0)).isEmpty())) { + if (!blockEntity.isLit() && blockEntity.cookingProgress > 0) { + blockEntity.cookingProgress = Mth.clamp(blockEntity.cookingProgress - 2, 0, blockEntity.cookingTotalTime); +@@ -379,6 +396,7 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit + setChanged(world, pos, state); + } + ++ if (infiniteFuel) blockEntity.items.set(1, ItemStack.EMPTY); // Purpur + } + + private static boolean canBurn(@Nullable Recipe recipe, NonNullList slots, int count) { +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index d1472eb116e82bbb7c0c6aec814371a9935d40b3..994928c1bc24f836f957563780cbb2c1b415ba44 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -410,6 +410,11 @@ public class PurpurWorldConfig { + farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); + } + ++ public boolean furnaceInfiniteFuel = false; ++ private void furnaceSettings() { ++ furnaceInfiniteFuel = getBoolean("blocks.furnace.infinite-fuel", furnaceInfiniteFuel); ++ } ++ + public boolean lavaInfinite = false; + public int lavaInfiniteRequiredSources = 2; + public int lavaSpeedNether = 10; diff --git a/patches/server/0116-Arrows-should-not-reset-despawn-counter.patch b/patches/server/0116-Arrows-should-not-reset-despawn-counter.patch new file mode 100644 index 000000000..7c3aee370 --- /dev/null +++ b/patches/server/0116-Arrows-should-not-reset-despawn-counter.patch @@ -0,0 +1,21 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Wed, 4 Nov 2020 13:12:50 -0600 +Subject: [PATCH] Arrows should not reset despawn counter + +This prevents keeping arrows alive indefinitely (such as when the block +the arrow is stuck in gets removed, like a piston head going up/down) + +diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +index f6fc98ffe49d5af9a69f57f2e53e6010f71d55d9..9f35f72a0bacf3847adedbfbd327ab55c483e85c 100644 +--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java ++++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +@@ -308,7 +308,7 @@ public abstract class AbstractArrow extends Projectile { + Vec3 vec3d = this.getDeltaMovement(); + + this.setDeltaMovement(vec3d.multiply((double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F))); +- this.life = 0; ++ // this.life = 0; // PUrpur - do not reset despawn counter + } + + @Override diff --git a/patches/server-unmapped/0120-Add-tablist-suffix-option-for-afk.patch b/patches/server/0117-Add-tablist-suffix-option-for-afk.patch similarity index 52% rename from patches/server-unmapped/0120-Add-tablist-suffix-option-for-afk.patch rename to patches/server/0117-Add-tablist-suffix-option-for-afk.patch index 594ea9fd5..a3cf0c7cd 100644 --- a/patches/server-unmapped/0120-Add-tablist-suffix-option-for-afk.patch +++ b/patches/server/0117-Add-tablist-suffix-option-for-afk.patch @@ -4,39 +4,39 @@ Date: Thu, 12 Nov 2020 11:02:50 +0100 Subject: [PATCH] Add tablist suffix option for afk -diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 16b192f251374a477e9696581672515959338d7b..6238469d8e973ca675bb02988d3324e5c5830b42 100644 ---- a/src/main/java/net/minecraft/server/level/EntityPlayer.java -+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -1962,7 +1962,11 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java +index 8a0487c8c1c4bcff6d92bcbbadf555b04f04717d..5b395fb6f0e7bee4a24fb2d5b0bc9421b70e5b8d 100644 +--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java ++++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java +@@ -1956,7 +1956,11 @@ public class ServerPlayer extends Player { } - if (world.purpurConfig.idleTimeoutUpdateTabList) { -- getBukkitEntity().setPlayerListName((setAfk ? net.pl3x.purpur.PurpurConfig.afkTabListPrefix : "") + getName()); -+ if (setAfk) { -+ getBukkitEntity().setPlayerListName(net.pl3x.purpur.PurpurConfig.afkTabListPrefix + getName() + net.pl3x.purpur.PurpurConfig.afkTabListSuffix); + if (level.purpurConfig.idleTimeoutUpdateTabList) { +- this.getBukkitEntity().setPlayerListName((afk ? net.pl3x.purpur.PurpurConfig.afkTabListPrefix : "") + this.getName()); ++ if (afk) { ++ getBukkitEntity().setPlayerListName(net.pl3x.purpur.PurpurConfig.afkTabListPrefix + getName().getString() + net.pl3x.purpur.PurpurConfig.afkTabListSuffix); + } else { -+ getBukkitEntity().setPlayerListName(getName()); ++ getBukkitEntity().setPlayerListName(getName().getString()); + } } - ((WorldServer) world).everyoneSleeping(); + ((ServerLevel) level).updateSleepingPlayerList(); diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index f068f0d4101b63b728809dca8dd322c45c793e04..6a69d14f8f30de6cb6d5c1b61d2521a206587354 100644 +index 91605de2724dc3b4f533be168719371060ef105d..a6c0d16ec697d01ed7576bd8b92e6995e6141681 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java -@@ -136,12 +136,14 @@ public class PurpurConfig { - public static String afkBroadcastAway = "§e§o%s is now AFK"; - public static String afkBroadcastBack = "§e§o%s is no longer AFK"; +@@ -135,12 +135,14 @@ public class PurpurConfig { + public static String afkBroadcastAway = "%s is now AFK"; + public static String afkBroadcastBack = "%s is no longer AFK"; public static String afkTabListPrefix = "[AFK] "; + public static String afkTabListSuffix = ""; public static String pingCommandOutput = "§a%s's ping is %sms"; - public static String cannotRideMob = "§cYou cannot mount that mob"; private static void messages() { + cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway); afkBroadcastBack = getString("settings.messages.afk-broadcast-back", afkBroadcastBack); afkTabListPrefix = getString("settings.messages.afk-tab-list-prefix", afkTabListPrefix); + afkTabListSuffix = getString("settings.messages.afk-tab-list-suffix", afkTabListSuffix); pingCommandOutput = getString("settings.messages.ping-command-output", pingCommandOutput); - cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); } +