From f482d19d56636b0119bf992e1e12a67f0bb65d04 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 24 Jul 2021 02:58:29 -0500 Subject: [PATCH] Hold compass to show bossbar --- patches/server/0141-Implement-TPSBar.patch | 8 +++- patches/server/0236-Add-compass-command.patch | 48 +++++++++++++++++-- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/patches/server/0141-Implement-TPSBar.patch b/patches/server/0141-Implement-TPSBar.patch index 54eaf168d..e3934df9c 100644 --- a/patches/server/0141-Implement-TPSBar.patch +++ b/patches/server/0141-Implement-TPSBar.patch @@ -167,10 +167,10 @@ index 0000000000000000000000000000000000000000..2eca7b78907007be9683d87bf2346c87 +} diff --git a/src/main/java/net/pl3x/purpur/task/BossBarTask.java b/src/main/java/net/pl3x/purpur/task/BossBarTask.java new file mode 100644 -index 0000000000000000000000000000000000000000..1f55902eb8367b4d980a66f23ac2b57709ae78cf +index 0000000000000000000000000000000000000000..89122d7bcfd037a22d277e562f5300f2f3eab2db --- /dev/null +++ b/src/main/java/net/pl3x/purpur/task/BossBarTask.java -@@ -0,0 +1,105 @@ +@@ -0,0 +1,109 @@ +package net.pl3x.purpur.task; + +import net.kyori.adventure.bossbar.BossBar; @@ -237,6 +237,10 @@ index 0000000000000000000000000000000000000000..1f55902eb8367b4d980a66f23ac2b577 + player.showBossBar(bossbar); + } + ++ public boolean hasPlayer(UUID uuid) { ++ return this.bossbars.containsKey(uuid); ++ } ++ + public boolean togglePlayer(Player player) { + if (removePlayer(player)) { + return false; diff --git a/patches/server/0236-Add-compass-command.patch b/patches/server/0236-Add-compass-command.patch index e8eee9194..9d5e5b2a1 100644 --- a/patches/server/0236-Add-compass-command.patch +++ b/patches/server/0236-Add-compass-command.patch @@ -58,6 +58,28 @@ index cd26d6c8ba2d5d6b3b56e484e6e642ab646341e1..11786d686ed1734f8f41f6127b3499cb + } // Purpur end } +diff --git a/src/main/java/net/minecraft/world/item/CompassItem.java b/src/main/java/net/minecraft/world/item/CompassItem.java +index 9d541c9e53f3f8db871f01f8d083e4cfc0de0de1..046bf9cbf02b002e89f7d39b616dd0f5a9539ed7 100644 +--- a/src/main/java/net/minecraft/world/item/CompassItem.java ++++ b/src/main/java/net/minecraft/world/item/CompassItem.java +@@ -46,6 +46,17 @@ public class CompassItem extends Item implements Vanishable { + @Override + public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { + if (!world.isClientSide) { ++ // Purpur start ++ if (world.purpurConfig.compassItemShowsBossBar && entity instanceof net.minecraft.server.level.ServerPlayer player && !player.compassBar()) { ++ net.pl3x.purpur.task.CompassTask task = net.pl3x.purpur.task.CompassTask.instance(); ++ boolean hasTask = task.hasPlayer(player.getUUID()); ++ if (selected && !hasTask) { ++ task.addPlayer(player.getBukkitEntity()); ++ } else if (!selected && hasTask) { ++ task.removePlayer(player.getBukkitEntity()); ++ } ++ } ++ // Purpur end + if (isLodestoneCompass(stack)) { + CompoundTag compoundTag = stack.getOrCreateTag(); + if (compoundTag.contains("LodestoneTracked") && !compoundTag.getBoolean("LodestoneTracked")) { diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java index 8244f362f551ed2bdef4df8e6b83cb176b4a4e59..11e20b7ab11dfc2549eec53e4e0829f14f261a8e 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -88,6 +110,26 @@ index 8244f362f551ed2bdef4df8e6b83cb176b4a4e59..11e20b7ab11dfc2549eec53e4e0829f1 commandGamemodeRequiresPermission = getBoolean("settings.command.gamemode.requires-specific-permission", commandGamemodeRequiresPermission); hideHiddenPlayersFromEntitySelector = getBoolean("settings.command.hide-hidden-players-from-entity-selector", hideHiddenPlayersFromEntitySelector); uptimeFormat = getString("settings.command.uptime.format", uptimeFormat); +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 35472374f55c5fa7e76626ea423a3a1a93f09dcd..35ec2183e4f05020e9370f7e24f9dadc43119a1d 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -175,6 +175,7 @@ public class PurpurWorldConfig { + public float enderPearlEndermiteChance = 0.05F; + public int glowBerriesEatGlowDuration = 0; + public boolean shulkerBoxItemDropContentsWhenDestroyed = true; ++ public boolean compassItemShowsBossBar = false; + private void itemSettings() { + itemImmuneToCactus.clear(); + getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { +@@ -220,6 +221,7 @@ public class PurpurWorldConfig { + enderPearlEndermiteChance = (float) getDouble("gameplay-mechanics.item.ender-pearl.endermite-spawn-chance", enderPearlEndermiteChance); + glowBerriesEatGlowDuration = getInt("gameplay-mechanics.item.glow_berries.eat-glow-duration", glowBerriesEatGlowDuration); + shulkerBoxItemDropContentsWhenDestroyed = getBoolean("gameplay-mechanics.item.shulker_box.drop-contents-when-destroyed", shulkerBoxItemDropContentsWhenDestroyed); ++ compassItemShowsBossBar = getBoolean("gameplay-mechanics.item.compass.holding-shows-bossbar", compassItemShowsBossBar); + } + + public double minecartMaxSpeed = 0.4D; diff --git a/src/main/java/net/pl3x/purpur/command/CompassCommand.java b/src/main/java/net/pl3x/purpur/command/CompassCommand.java new file mode 100644 index 0000000000000000000000000000000000000000..5381dfa162dae02c93afcf28d7c6dfb2170ab175 @@ -116,10 +158,10 @@ index 0000000000000000000000000000000000000000..5381dfa162dae02c93afcf28d7c6dfb2 + } +} diff --git a/src/main/java/net/pl3x/purpur/task/BossBarTask.java b/src/main/java/net/pl3x/purpur/task/BossBarTask.java -index 1f55902eb8367b4d980a66f23ac2b57709ae78cf..173805ec9beae96a120d3501d1cf597c93aa6bd9 100644 +index 89122d7bcfd037a22d277e562f5300f2f3eab2db..d4d08946f38e6e29943a310c4b9385d2e092c803 100644 --- a/src/main/java/net/pl3x/purpur/task/BossBarTask.java +++ b/src/main/java/net/pl3x/purpur/task/BossBarTask.java -@@ -86,10 +86,12 @@ public abstract class BossBarTask extends BukkitRunnable { +@@ -90,10 +90,12 @@ public abstract class BossBarTask extends BukkitRunnable { public static void startAll() { TPSBarTask.instance().start(); @@ -132,7 +174,7 @@ index 1f55902eb8367b4d980a66f23ac2b57709ae78cf..173805ec9beae96a120d3501d1cf597c } public static void addToAll(ServerPlayer player) { -@@ -97,9 +99,13 @@ public abstract class BossBarTask extends BukkitRunnable { +@@ -101,9 +103,13 @@ public abstract class BossBarTask extends BukkitRunnable { if (player.tpsBar()) { TPSBarTask.instance().addPlayer(bukkit); }