From 899768819ee4207fe2a3cc5b73e8f8fb991baa85 Mon Sep 17 00:00:00 2001 From: Paldiu Date: Mon, 11 Apr 2022 10:29:18 -0500 Subject: [PATCH] Beta 20220411-SNAPSHOT Changelog: - Added ExpBoost feature - Added Special Rabbit Foot, which increases a user's luck multiplier. - Added ItemBuilder and MiniComponent library classes - Removed Messages#builder in favor of MiniComponent --- .gradle/7.3.3/checksums/checksums.lock | Bin 17 -> 17 bytes .../executionHistory/executionHistory.bin | Bin 93380 -> 93380 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/7.3.3/fileHashes/fileHashes.bin | Bin 23097 -> 23147 bytes .gradle/7.3.3/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/buildOutputCleanup/outputFiles.bin | Bin 19433 -> 19451 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes build.gradle | 2 +- build/resources/main/plugin.yml | 2 +- .../io/github/simplex/lib/ItemBuilder.java | 62 ++++++++++++++++++ .../java/io/github/simplex/lib/Messages.java | 22 ++----- .../io/github/simplex/lib/MiniComponent.java | 43 ++++++++++++ .../io/github/simplex/luck/FeelingLucky.java | 2 + .../simplex/luck/listener/BlockDrops.java | 3 +- .../simplex/luck/listener/ExpBoost.java | 29 ++++++++ .../simplex/luck/listener/PlayerListener.java | 5 ++ .../simplex/luck/listener/RestoreHunger.java | 3 +- .../simplex/luck/listener/TakeDamage.java | 3 +- .../io/github/simplex/luck/player/Luck.java | 7 +- .../simplex/luck/player/PlayerConfig.java | 15 +++-- .../simplex/luck/{ => util}/ListBox.java | 2 +- .../simplex/luck/{ => util}/LuckCMD.java | 3 +- .../simplex/luck/{ => util}/SneakyWorker.java | 2 +- .../simplex/luck/util/SpecialFootItem.java | 26 ++++++++ 25 files changed, 199 insertions(+), 32 deletions(-) create mode 100644 src/main/java/io/github/simplex/lib/ItemBuilder.java create mode 100644 src/main/java/io/github/simplex/lib/MiniComponent.java create mode 100644 src/main/java/io/github/simplex/luck/listener/ExpBoost.java rename src/main/java/io/github/simplex/luck/{ => util}/ListBox.java (98%) rename src/main/java/io/github/simplex/luck/{ => util}/LuckCMD.java (98%) rename src/main/java/io/github/simplex/luck/{ => util}/SneakyWorker.java (96%) create mode 100644 src/main/java/io/github/simplex/luck/util/SpecialFootItem.java diff --git a/.gradle/7.3.3/checksums/checksums.lock b/.gradle/7.3.3/checksums/checksums.lock index 48290600107dbc0618d9d2001e4fbf47150dfb54..a2e95164067b73b9a0e01de404b901ba0d78e272 100644 GIT binary patch literal 17 UcmZQJ47>Jfmhh~81_-DH05gRIo&W#< literal 17 UcmZQJ47>Jfmhh~81_-DG05gFEng9R* diff --git a/.gradle/7.3.3/executionHistory/executionHistory.bin b/.gradle/7.3.3/executionHistory/executionHistory.bin index c9812a2e36ee6e5ec8fedc6eaa1c6142d0608c15..f1b59b6d06a106d9088c115405f7feb89b08ecf2 100644 GIT binary patch delta 259 zcmX?dll90=)(tj3D&Dip%*~B5i_BAUvQi6jl8q~?j4H}Yv-6CTGa0~u(P?vn&r3;x zAI~2w{4(A8?}fBxspnPxL6alXmI)}OpWBmO@*qx0Y_7uksTu;C`O`TW881x^j5MC? zlOe6Dmz7w=AYkTsk)z4KmYbRRhwP<}*Hb4?e7?TXV8v!87DfgJnTX9j8D|Amq6xZ$ y;rr&=st!i3F2|gLj6_{SJ%i06HC2oT=q|h12Qt2%nE}IjAp4jzHt($Eeh&Z`aAbG@ delta 232 zcmX?dll90=)(tj3i~-Z{8Z#;~G5p`0;PX;aU>@TU2j=AMOVc9vt@y>_v0`#$+A@Jx zE4B)DXwMVcc+-Dw*v-Pe&HU+{jEvVO2SyrC_Q{Y|)eUksFxJaTEMgFteCW`wld|&H zokMkap9ED&ukOFJzR_UqW+s-+JsD>ORT5`c73P!|6=x-86{TdErx{h6rex)3XQw2W zCNe<4tv=gwP~|LM0dGBaR0a%U~~djR6N BUef>o diff --git a/.gradle/7.3.3/executionHistory/executionHistory.lock b/.gradle/7.3.3/executionHistory/executionHistory.lock index 7c7befb0e38a9bd5b115081b80e61786497432ee..fc40dd4744ae1d1f413619a00a6f23aabf6a2fe5 100644 GIT binary patch literal 17 UcmZRcB;nt8QAKht0|dAN04Q(+djJ3c literal 17 UcmZRcB;nt8QAKht0|Yn%04Qt&cK`qY diff --git a/.gradle/7.3.3/fileHashes/fileHashes.bin b/.gradle/7.3.3/fileHashes/fileHashes.bin index 118013aa72a7379832e1de4aa52232df527668b4..5544de60d148d62e754958a4816089aa7bed4d8c 100644 GIT binary patch delta 146 zcmdnFh4J+k#tkMCjIoNhLn$&HFX#5WoQ@NahX z@Zwka@%+KUFVn66UPx<}dS2xp#K6GVAo}xoAVd>G{pA0iE}P$ndodXq1BEn!SP_H; g%sel0H2K$ZGc*5?z0~n~Dn#Fj$q;=rR{&`}0I;JmVE_OC delta 78 zcmaF8g>mN=#tkMCj4_){C3Y}vW|jWT%D8c(;t%nS1{wUD9X-7G73MJ>abQl~zBDaz g--=%>9xE6a80%k^&H2dy0WFjNd%A3XAMV8j0Gt>dVgLXD diff --git a/.gradle/7.3.3/fileHashes/fileHashes.lock b/.gradle/7.3.3/fileHashes/fileHashes.lock index a875477f8cd06d0b2c0fb5a96082503fac8c42ae..61cacdacebeff0e2c27aafd657d8e0ec322f14b6 100644 GIT binary patch literal 17 UcmZQJia%cNU%e)k0Sp+!04;n31poj5 literal 17 UcmZQJia%cNU%e)k0Sp*}04;a~0RR91 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index c3ad868dd22823972a21fc20f0fe84688d5ba169..c2e5c559ca14c254597e1cc7a53853d2a566cec4 100644 GIT binary patch literal 17 UcmZR6D^X+eb%*{#1_c05^~X`v3p{ diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin index 8d31e079314e93afcd51024682bee95a74e0c300..36a9e6b4d0faa80e7971717715f3ecc467925a55 100644 GIT binary patch delta 58 zcmaDko$>c{#tkMCjHa7SC1x-R9FCv<_f-57RR%Ede!2OmWE3+KE9XYVAL1Jg1cWy` MdaPicobM$B0D5K=Gynhq delta 37 vcmV+=0NVfimjUUQ0kAX}0W`BU7?=UG new") + public static ItemBuilder of(Material material) { + return new ItemBuilder(material); + } + + public ItemBuilder setName(String name) { + meta.displayName(MiniComponent.of(name).send()); + return this; + } + + public ItemBuilder setAmount(int amount) { + stack.setAmount(amount); + return this; + } + + public ItemBuilder setLore(String... lore) { + List components = new ArrayList<>(); + Arrays.stream(lore).forEach(entry -> components.add(MiniComponent.of(entry).send())); + meta.lore(components); + return this; + } + + public ItemStack build() { + stack.setItemMeta(meta); + return stack; + } + + private Component component(String content, TextColor color, TextDecoration decoration) { + return Component.empty().content(content).decorate(decoration).color(color); + } + + private Component component(String content, TextColor color) { + return Component.empty().content(content).color(color); + } + + private Component component(String content) { + return Component.empty().content(content); + } +} diff --git a/src/main/java/io/github/simplex/lib/Messages.java b/src/main/java/io/github/simplex/lib/Messages.java index 35e3825..81725ee 100644 --- a/src/main/java/io/github/simplex/lib/Messages.java +++ b/src/main/java/io/github/simplex/lib/Messages.java @@ -3,13 +3,15 @@ package io.github.simplex.lib; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.format.TextDecoration; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public enum Messages { - NOT_FROM_CONSOLE(builder("This command may only be used in game.", null, null)), - NO_PERMISSION(builder("You do not have permission to use this command.", TextColor.color(255, 0, 0), TextDecoration.ITALIC)); + NOT_FROM_CONSOLE(MiniComponent.of("This command may only be used in game.").send()), + NO_PERMISSION(MiniComponent + .of("You do not have permission to use this command.") + .color(TextColor.color(255, 0, 0)) + .decorate(TextDecoration.ITALIC) + .send()); private final Component message; @@ -20,16 +22,4 @@ public enum Messages { public Component get() { return message; } - - private static Component builder(@NotNull String message, @Nullable TextColor color, @Nullable TextDecoration decoration) { - if (color == null) { - if (decoration == null) return Component.empty().content(message); - - return Component.empty().content(message).decoration(decoration, TextDecoration.State.TRUE); - } - - if (decoration == null) return Component.empty().content(message).color(color); - - return Component.empty().content(message).color(color).decoration(decoration, TextDecoration.State.TRUE); - } } diff --git a/src/main/java/io/github/simplex/lib/MiniComponent.java b/src/main/java/io/github/simplex/lib/MiniComponent.java new file mode 100644 index 0000000..0ffbeec --- /dev/null +++ b/src/main/java/io/github/simplex/lib/MiniComponent.java @@ -0,0 +1,43 @@ +package io.github.simplex.lib; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.text.format.TextDecoration; +import org.jetbrains.annotations.Contract; + +public class MiniComponent { + private final String content; + private TextDecoration decoration = null; + private TextColor color = null; + + @Contract("_ -> new") + public static MiniComponent of(String content) { + return new MiniComponent(content); + } + + public MiniComponent(String content) { + this.content = content; + } + + public MiniComponent decorate(TextDecoration decoration) { + this.decoration = decoration; + return this; + } + + public MiniComponent color(TextColor color) { + this.color = color; + return this; + } + + public Component send() { + if (color == null) { + if (decoration == null) return Component.empty().content(content); + + return Component.empty().content(content).decoration(decoration, TextDecoration.State.TRUE); + } + + if (decoration == null) return Component.empty().content(content).color(color); + + return Component.empty().content(content).decorate(decoration).color(color); + } +} diff --git a/src/main/java/io/github/simplex/luck/FeelingLucky.java b/src/main/java/io/github/simplex/luck/FeelingLucky.java index fdca6a2..8b7c0a7 100644 --- a/src/main/java/io/github/simplex/luck/FeelingLucky.java +++ b/src/main/java/io/github/simplex/luck/FeelingLucky.java @@ -3,6 +3,7 @@ package io.github.simplex.luck; import io.github.simplex.luck.listener.*; import io.github.simplex.luck.player.PlayerConfig; import io.github.simplex.luck.player.PlayerHandler; +import io.github.simplex.luck.util.LuckCMD; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; @@ -33,6 +34,7 @@ public final class FeelingLucky extends JavaPlugin { new TakeDamage(this); new RestoreHunger(this); new EnchantmentBoost(this); + new ExpBoost(this); getLogger().info("Registration complete! Attempting to load all player configuration files..."); File[] files = getDataFolder().listFiles(); diff --git a/src/main/java/io/github/simplex/luck/listener/BlockDrops.java b/src/main/java/io/github/simplex/luck/listener/BlockDrops.java index 73e236b..13f1b30 100644 --- a/src/main/java/io/github/simplex/luck/listener/BlockDrops.java +++ b/src/main/java/io/github/simplex/luck/listener/BlockDrops.java @@ -1,9 +1,8 @@ package io.github.simplex.luck.listener; import io.github.simplex.luck.FeelingLucky; -import io.github.simplex.luck.SneakyWorker; +import io.github.simplex.luck.util.SneakyWorker; import io.github.simplex.luck.player.Luck; -import org.bukkit.Bukkit; import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/src/main/java/io/github/simplex/luck/listener/ExpBoost.java b/src/main/java/io/github/simplex/luck/listener/ExpBoost.java new file mode 100644 index 0000000..6fc8c40 --- /dev/null +++ b/src/main/java/io/github/simplex/luck/listener/ExpBoost.java @@ -0,0 +1,29 @@ +package io.github.simplex.luck.listener; + +import com.destroystokyo.paper.event.player.PlayerPickupExperienceEvent; +import io.github.simplex.luck.FeelingLucky; +import io.github.simplex.luck.player.Luck; +import org.bukkit.entity.ExperienceOrb; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public record ExpBoost(FeelingLucky plugin) implements Listener { + public ExpBoost(FeelingLucky plugin) { + this.plugin = plugin; + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + @EventHandler + public void boostExperienceGain(PlayerPickupExperienceEvent event) { + ExperienceOrb orb = event.getExperienceOrb(); + int n = orb.getExperience(); + int math = (5 * n ^ 2) / (2 * n + 4); + int rounded = Math.round(math); + Player player = event.getPlayer(); + Luck luck = plugin.handler.getLuckContainer(player); + if (luck.quickRNG(luck.getPercentage())) { + orb.setExperience(rounded); + } + } +} diff --git a/src/main/java/io/github/simplex/luck/listener/PlayerListener.java b/src/main/java/io/github/simplex/luck/listener/PlayerListener.java index 30c31eb..8ba28aa 100644 --- a/src/main/java/io/github/simplex/luck/listener/PlayerListener.java +++ b/src/main/java/io/github/simplex/luck/listener/PlayerListener.java @@ -2,6 +2,7 @@ package io.github.simplex.luck.listener; import io.github.simplex.luck.FeelingLucky; import io.github.simplex.luck.player.Luck; +import io.github.simplex.luck.util.SpecialFootItem; import net.kyori.adventure.text.Component; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -26,9 +27,13 @@ public record PlayerListener(FeelingLucky plugin) implements Listener { public void rabbitFoot(PlayerInteractEvent event) { Action action = event.getAction(); ItemStack foot = new ItemStack(Material.RABBIT_FOOT); + SpecialFootItem special = new SpecialFootItem(); Player player = event.getPlayer(); Luck luck = plugin.handler.getLuckContainer(player); if (action.isRightClick() && player.getInventory().getItemInMainHand().isSimilar(foot)) { + if (foot.getItemMeta().equals(special.meta()) || foot.equals(special.get())) { + luck.setMultiplier(luck.multiplier() + 1); + } double rng = Luck.RNG().nextDouble(2.0, 5.0); player.getInventory().remove(player.getInventory().getItemInMainHand()); luck.addTo(rng); diff --git a/src/main/java/io/github/simplex/luck/listener/RestoreHunger.java b/src/main/java/io/github/simplex/luck/listener/RestoreHunger.java index f8cd802..4d9d7d9 100644 --- a/src/main/java/io/github/simplex/luck/listener/RestoreHunger.java +++ b/src/main/java/io/github/simplex/luck/listener/RestoreHunger.java @@ -2,9 +2,8 @@ package io.github.simplex.luck.listener; import io.github.simplex.lib.PotionEffectBuilder; import io.github.simplex.luck.FeelingLucky; -import io.github.simplex.luck.ListBox; +import io.github.simplex.luck.util.ListBox; import io.github.simplex.luck.player.Luck; -import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerItemConsumeEvent; diff --git a/src/main/java/io/github/simplex/luck/listener/TakeDamage.java b/src/main/java/io/github/simplex/luck/listener/TakeDamage.java index 5474faa..92cd9c6 100644 --- a/src/main/java/io/github/simplex/luck/listener/TakeDamage.java +++ b/src/main/java/io/github/simplex/luck/listener/TakeDamage.java @@ -2,10 +2,9 @@ package io.github.simplex.luck.listener; import io.github.simplex.lib.PotionEffectBuilder; import io.github.simplex.luck.FeelingLucky; -import io.github.simplex.luck.ListBox; +import io.github.simplex.luck.util.ListBox; import io.github.simplex.luck.player.Luck; import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; diff --git a/src/main/java/io/github/simplex/luck/player/Luck.java b/src/main/java/io/github/simplex/luck/player/Luck.java index 07746b8..d6ea785 100644 --- a/src/main/java/io/github/simplex/luck/player/Luck.java +++ b/src/main/java/io/github/simplex/luck/player/Luck.java @@ -15,11 +15,11 @@ import java.util.SplittableRandom; @SuppressWarnings("all") public class Luck implements LuckContainer { private final Player player; - private final double multiplier; private final PlayerLuckChangeEvent event; private final FeelingLucky plugin; private final List markedPlayers = new ArrayList<>(); private double BASE_VALUE; + private double multiplier; public Luck(FeelingLucky plugin, Player player) { this(plugin, player, 1.0); @@ -132,6 +132,11 @@ public class Luck implements LuckContainer { Bukkit.getPluginManager().callEvent(event); } + public void setMultiplier(double multiplier) { + this.multiplier = multiplier; + plugin.getConfigMap().get(associatedPlayer().getUniqueId()).setMultiplier(multiplier); + } + public double getDefaultValue() { return player.getAttribute(Attribute.GENERIC_LUCK).getDefaultValue(); } diff --git a/src/main/java/io/github/simplex/luck/player/PlayerConfig.java b/src/main/java/io/github/simplex/luck/player/PlayerConfig.java index b835858..b200876 100644 --- a/src/main/java/io/github/simplex/luck/player/PlayerConfig.java +++ b/src/main/java/io/github/simplex/luck/player/PlayerConfig.java @@ -1,7 +1,7 @@ package io.github.simplex.luck.player; import io.github.simplex.luck.FeelingLucky; -import io.github.simplex.luck.SneakyWorker; +import io.github.simplex.luck.util.SneakyWorker; import org.bukkit.attribute.Attribute; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; @@ -50,9 +50,6 @@ public class PlayerConfig { config.set("luck", plugin.handler.getLuckContainer(player).getDefaultValue()); config.set("multiplier", "1.0"); save(); - } else if (!tempUsername.equalsIgnoreCase(player.getName())) { - config.set("username", player.getName()); - save(); } } @@ -80,11 +77,21 @@ public class PlayerConfig { load(); } + public void setUsername(String name) { + config.set("username", name); + save(); + } + public void setLuck(double luck) { config.set("luck", luck); save(); } + public void setMultiplier(double multiplier) { + config.set("multiplier", multiplier); + save(); + } + public YamlConfiguration getConfig() { return config; } diff --git a/src/main/java/io/github/simplex/luck/ListBox.java b/src/main/java/io/github/simplex/luck/util/ListBox.java similarity index 98% rename from src/main/java/io/github/simplex/luck/ListBox.java rename to src/main/java/io/github/simplex/luck/util/ListBox.java index 45833fd..3b78105 100644 --- a/src/main/java/io/github/simplex/luck/ListBox.java +++ b/src/main/java/io/github/simplex/luck/util/ListBox.java @@ -1,4 +1,4 @@ -package io.github.simplex.luck; +package io.github.simplex.luck.util; import org.bukkit.Material; import org.bukkit.event.entity.EntityDamageEvent; diff --git a/src/main/java/io/github/simplex/luck/LuckCMD.java b/src/main/java/io/github/simplex/luck/util/LuckCMD.java similarity index 98% rename from src/main/java/io/github/simplex/luck/LuckCMD.java rename to src/main/java/io/github/simplex/luck/util/LuckCMD.java index 1f2e0b4..122f4a7 100644 --- a/src/main/java/io/github/simplex/luck/LuckCMD.java +++ b/src/main/java/io/github/simplex/luck/util/LuckCMD.java @@ -1,6 +1,7 @@ -package io.github.simplex.luck; +package io.github.simplex.luck.util; import io.github.simplex.lib.Messages; +import io.github.simplex.luck.FeelingLucky; import io.github.simplex.luck.player.Luck; import io.github.simplex.luck.player.PlayerConfig; import net.kyori.adventure.text.Component; diff --git a/src/main/java/io/github/simplex/luck/SneakyWorker.java b/src/main/java/io/github/simplex/luck/util/SneakyWorker.java similarity index 96% rename from src/main/java/io/github/simplex/luck/SneakyWorker.java rename to src/main/java/io/github/simplex/luck/util/SneakyWorker.java index f2f7aba..4fcf643 100644 --- a/src/main/java/io/github/simplex/luck/SneakyWorker.java +++ b/src/main/java/io/github/simplex/luck/util/SneakyWorker.java @@ -1,4 +1,4 @@ -package io.github.simplex.luck; +package io.github.simplex.luck.util; import io.github.simplex.luck.player.Luck; import org.bukkit.Bukkit; diff --git a/src/main/java/io/github/simplex/luck/util/SpecialFootItem.java b/src/main/java/io/github/simplex/luck/util/SpecialFootItem.java new file mode 100644 index 0000000..4f220bf --- /dev/null +++ b/src/main/java/io/github/simplex/luck/util/SpecialFootItem.java @@ -0,0 +1,26 @@ +package io.github.simplex.luck.util; + +import io.github.simplex.lib.ItemBuilder; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class SpecialFootItem { + public final ItemStack stack; + + public SpecialFootItem() { + stack = ItemBuilder.of(Material.RABBIT_FOOT) + .setName("Enhanced Rabbit Foot") + .setAmount(1).setLore("A strange energy radiates from within.", + "This item will increase your luck multiplier by one.") + .build(); + } + + public ItemStack get() { + return stack; + } + + public ItemMeta meta() { + return stack.getItemMeta(); + } +}