From 5dca31f2dec68371cd4a3c5fa8db205ab262fecb Mon Sep 17 00:00:00 2001 From: XiaoMoMi <70987828+Xiao-MoMi@users.noreply.github.com> Date: Wed, 28 Aug 2024 16:30:21 +0800 Subject: [PATCH] to inventory --- .../mechanic/fishing/CustomFishingHook.java | 52 ++++++++++++------- .../api/mechanic/item/ItemManager.java | 2 + .../customfishing/api/mechanic/loot/Loot.java | 15 ++++++ .../api/mechanic/loot/LootImpl.java | 18 ++++++- .../customfishing/api}/util/PlayerUtils.java | 2 +- .../bukkit/action/BukkitActionManager.java | 2 +- .../bukkit/bag/BukkitBagManager.java | 2 +- .../command/feature/GetItemCommand.java | 2 +- .../command/feature/GiveItemCommand.java | 2 +- .../bukkit/config/BukkitConfigManager.java | 7 +++ .../bukkit/hook/BukkitHookManager.java | 2 +- .../bukkit/item/BukkitItemManager.java | 9 +++- .../bukkit/market/MarketGUI.java | 2 +- gradle.properties | 2 +- 14 files changed, 89 insertions(+), 30 deletions(-) rename {core/src/main/java/net/momirealms/customfishing/bukkit => api/src/main/java/net/momirealms/customfishing/api}/util/PlayerUtils.java (99%) diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java index d575108e..e4bfa952 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/fishing/CustomFishingHook.java @@ -39,6 +39,7 @@ import net.momirealms.customfishing.api.mechanic.loot.Loot; import net.momirealms.customfishing.api.mechanic.loot.LootType; import net.momirealms.customfishing.api.mechanic.requirement.RequirementManager; import net.momirealms.customfishing.api.util.EventUtils; +import net.momirealms.customfishing.api.util.PlayerUtils; import net.momirealms.customfishing.common.helper.AdventureHelper; import net.momirealms.customfishing.common.plugin.scheduler.SchedulerTask; import net.momirealms.customfishing.common.util.TriConsumer; @@ -459,27 +460,42 @@ public class CustomFishingHook { case ITEM -> { context.arg(ContextKeys.SIZE_MULTIPLIER, tempFinalEffect.sizeMultiplier()); context.arg(ContextKeys.SIZE_ADDER, tempFinalEffect.sizeAdder()); + boolean directlyToInventory = nextLoot.toInventory().evaluate(context) != 0; for (int i = 0; i < amount; i++) { plugin.getScheduler().sync().runLater(() -> { - Item item = plugin.getItemManager().dropItemLoot(context, gears.getItem(FishingGears.GearType.ROD).stream().findAny().orElseThrow().right(), hook); - if (item != null && Objects.equals(context.arg(ContextKeys.NICK), "UNDEFINED")) { - ItemStack stack = item.getItemStack(); - Optional displayName = plugin.getItemManager().wrap(stack).displayName(); - if (displayName.isPresent()) { - context.arg(ContextKeys.NICK, AdventureHelper.jsonToMiniMessage(displayName.get())); - } else { - context.arg(ContextKeys.NICK, ""); + if (directlyToInventory) { + ItemStack stack = plugin.getItemManager().getItemLoot(context, gears.getItem(FishingGears.GearType.ROD).stream().findAny().orElseThrow().right(), hook); + if (stack.getType() != Material.AIR) { + Optional displayName = plugin.getItemManager().wrap(stack).displayName(); + if (displayName.isPresent()) { + context.arg(ContextKeys.NICK, AdventureHelper.jsonToMiniMessage(displayName.get())); + } else { + context.arg(ContextKeys.NICK, ""); + } + PlayerUtils.giveItem(context.holder(), stack, stack.getAmount()); + } + } else { + Item item = plugin.getItemManager().dropItemLoot(context, gears.getItem(FishingGears.GearType.ROD).stream().findAny().orElseThrow().right(), hook); + if (item != null && Objects.equals(context.arg(ContextKeys.NICK), "UNDEFINED")) { + ItemStack stack = item.getItemStack(); + Optional displayName = plugin.getItemManager().wrap(stack).displayName(); + if (displayName.isPresent()) { + context.arg(ContextKeys.NICK, AdventureHelper.jsonToMiniMessage(displayName.get())); + } else { + context.arg(ContextKeys.NICK, ""); + } + } + if (item != null) { + FishingLootSpawnEvent spawnEvent = new FishingLootSpawnEvent(context, hook.getLocation(), nextLoot, item); + Bukkit.getPluginManager().callEvent(spawnEvent); + if (!spawnEvent.summonEntity()) + item.remove(); + if (spawnEvent.skipActions()) + return; + if (item.isValid() && nextLoot.preventGrabbing()) { + item.getPersistentDataContainer().set(Objects.requireNonNull(NamespacedKey.fromString("owner", plugin.getBoostrap())), PersistentDataType.STRING, context.holder().getName()); + } } - } - - FishingLootSpawnEvent spawnEvent = new FishingLootSpawnEvent(context, hook.getLocation(), nextLoot, item); - Bukkit.getPluginManager().callEvent(spawnEvent); - if (item != null && !spawnEvent.summonEntity()) - item.remove(); - if (spawnEvent.skipActions()) - return; - if (item != null && item.isValid() && nextLoot.preventGrabbing()) { - item.getPersistentDataContainer().set(Objects.requireNonNull(NamespacedKey.fromString("owner", plugin.getBoostrap())), PersistentDataType.STRING, context.holder().getName()); } doSuccessActions(); }, (long) ConfigManager.multipleLootSpawnDelay() * i, hook.getLocation()); diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/item/ItemManager.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/item/ItemManager.java index 8d1978fe..87f6d434 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/item/ItemManager.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/item/ItemManager.java @@ -95,6 +95,8 @@ public interface ItemManager extends Reloadable { @Nullable String getCustomFishingItemID(@NotNull ItemStack itemStack); + ItemStack getItemLoot(@NotNull Context context, ItemStack rod, FishHook hook); + /** * Drops a custom fishing item as loot. * diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/loot/Loot.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/loot/Loot.java index 05612807..981785fa 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/loot/Loot.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/loot/Loot.java @@ -70,6 +70,13 @@ public interface Loot { */ boolean preventGrabbing(); + /** + * If the loot item should go directly into inventory + * + * @return True if loot go directly into inventory + */ + MathValue toInventory(); + /** * Get the unique identifier for this loot. * @@ -230,6 +237,14 @@ public interface Loot { */ Builder lootBaseEffect(LootBaseEffect lootBaseEffect); + /** + * Set if the loot go directly into inventory + * + * @param toInventory go directly into the inventory + * @return The builder instance. + */ + Builder toInventory(MathValue toInventory); + /** * Build and return the Loot instance. * diff --git a/api/src/main/java/net/momirealms/customfishing/api/mechanic/loot/LootImpl.java b/api/src/main/java/net/momirealms/customfishing/api/mechanic/loot/LootImpl.java index 6b9259e5..3d0f2796 100644 --- a/api/src/main/java/net/momirealms/customfishing/api/mechanic/loot/LootImpl.java +++ b/api/src/main/java/net/momirealms/customfishing/api/mechanic/loot/LootImpl.java @@ -41,8 +41,9 @@ public class LootImpl implements Loot { private final MathValue score; private final String[] groups; private final LootBaseEffect lootBaseEffect; + private final MathValue toInventory; - public LootImpl(LootType type, boolean instantGame, boolean disableGame, boolean disableStatistics, boolean showInFinder, boolean preventGrabbing, String id, String nick, StatisticsKeys statisticsKeys, MathValue score, String[] groups, LootBaseEffect lootBaseEffect) { + public LootImpl(LootType type, boolean instantGame, boolean disableGame, boolean disableStatistics, boolean showInFinder, boolean preventGrabbing, String id, String nick, StatisticsKeys statisticsKeys, MathValue score, String[] groups, LootBaseEffect lootBaseEffect, MathValue toInventory) { this.type = type; this.instantGame = instantGame; this.disableGame = disableGame; @@ -55,6 +56,7 @@ public class LootImpl implements Loot { this.groups = groups; this.lootBaseEffect = lootBaseEffect; this.preventGrabbing = preventGrabbing; + this.toInventory = toInventory; } @Override @@ -93,6 +95,11 @@ public class LootImpl implements Loot { return preventGrabbing; } + @Override + public MathValue toInventory() { + return toInventory; + } + @Override public MathValue score() { return score; @@ -132,6 +139,7 @@ public class LootImpl implements Loot { private MathValue score = DEFAULT_SCORE; private String[] groups = new String[0]; private LootBaseEffect lootBaseEffect = null; + private MathValue toInventory = MathValue.plain(0); @Override public Builder type(LootType type) { @@ -194,6 +202,11 @@ public class LootImpl implements Loot { return this; } @Override + public Builder toInventory(MathValue toInventory) { + this.toInventory = toInventory; + return this; + } + @Override public Loot build() { return new LootImpl( type, @@ -207,7 +220,8 @@ public class LootImpl implements Loot { Optional.ofNullable(statisticsKeys).orElse(new StatisticsKeys(id, id)), score, groups, - requireNonNull(lootBaseEffect) + requireNonNull(lootBaseEffect), + toInventory ); } } diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/util/PlayerUtils.java b/api/src/main/java/net/momirealms/customfishing/api/util/PlayerUtils.java similarity index 99% rename from core/src/main/java/net/momirealms/customfishing/bukkit/util/PlayerUtils.java rename to api/src/main/java/net/momirealms/customfishing/api/util/PlayerUtils.java index f982aa63..e9eb983e 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/util/PlayerUtils.java +++ b/api/src/main/java/net/momirealms/customfishing/api/util/PlayerUtils.java @@ -15,7 +15,7 @@ * along with this program. If not, see . */ -package net.momirealms.customfishing.bukkit.util; +package net.momirealms.customfishing.api.util; import net.momirealms.customfishing.common.util.RandomUtils; import org.bukkit.Location; diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/action/BukkitActionManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/action/BukkitActionManager.java index bd7e0ce2..6030b96b 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/action/BukkitActionManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/action/BukkitActionManager.java @@ -35,7 +35,7 @@ import net.momirealms.customfishing.api.mechanic.misc.value.TextValue; import net.momirealms.customfishing.api.mechanic.requirement.Requirement; import net.momirealms.customfishing.bukkit.integration.VaultHook; import net.momirealms.customfishing.bukkit.util.LocationUtils; -import net.momirealms.customfishing.bukkit.util.PlayerUtils; +import net.momirealms.customfishing.api.util.PlayerUtils; import net.momirealms.customfishing.common.helper.AdventureHelper; import net.momirealms.customfishing.common.locale.MessageConstants; import net.momirealms.customfishing.common.locale.TranslationManager; diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/bag/BukkitBagManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/bag/BukkitBagManager.java index 798251c4..20d85d1f 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/bag/BukkitBagManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/bag/BukkitBagManager.java @@ -32,7 +32,7 @@ import net.momirealms.customfishing.api.mechanic.requirement.RequirementManager; import net.momirealms.customfishing.api.storage.user.UserData; import net.momirealms.customfishing.api.util.EventUtils; import net.momirealms.customfishing.bukkit.config.BukkitConfigManager; -import net.momirealms.customfishing.bukkit.util.PlayerUtils; +import net.momirealms.customfishing.api.util.PlayerUtils; import net.momirealms.customfishing.common.helper.AdventureHelper; import net.momirealms.sparrow.heart.SparrowHeart; import org.bukkit.Bukkit; diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/command/feature/GetItemCommand.java b/core/src/main/java/net/momirealms/customfishing/bukkit/command/feature/GetItemCommand.java index 972ffa53..33a975ca 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/command/feature/GetItemCommand.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/command/feature/GetItemCommand.java @@ -22,7 +22,7 @@ import net.momirealms.customfishing.api.BukkitCustomFishingPlugin; import net.momirealms.customfishing.api.mechanic.context.Context; import net.momirealms.customfishing.api.mechanic.context.ContextKeys; import net.momirealms.customfishing.bukkit.command.BukkitCommandFeature; -import net.momirealms.customfishing.bukkit.util.PlayerUtils; +import net.momirealms.customfishing.api.util.PlayerUtils; import net.momirealms.customfishing.common.command.CustomFishingCommandManager; import net.momirealms.customfishing.common.locale.MessageConstants; import org.bukkit.command.CommandSender; diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/command/feature/GiveItemCommand.java b/core/src/main/java/net/momirealms/customfishing/bukkit/command/feature/GiveItemCommand.java index 7ea35e3a..83c90a3d 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/command/feature/GiveItemCommand.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/command/feature/GiveItemCommand.java @@ -22,7 +22,7 @@ import net.momirealms.customfishing.api.BukkitCustomFishingPlugin; import net.momirealms.customfishing.api.mechanic.context.Context; import net.momirealms.customfishing.api.mechanic.context.ContextKeys; import net.momirealms.customfishing.bukkit.command.BukkitCommandFeature; -import net.momirealms.customfishing.bukkit.util.PlayerUtils; +import net.momirealms.customfishing.api.util.PlayerUtils; import net.momirealms.customfishing.common.command.CustomFishingCommandManager; import net.momirealms.customfishing.common.locale.MessageConstants; import org.bukkit.command.CommandSender; diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/config/BukkitConfigManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/config/BukkitConfigManager.java index 99916ae0..fe2ba8cf 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/config/BukkitConfigManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/config/BukkitConfigManager.java @@ -961,6 +961,13 @@ public class BukkitConfigManager extends ConfigManager { } private void registerBuiltInLootParser() { + this.registerLootParser(object -> { + if (object instanceof Boolean b) { + return builder -> builder.toInventory(MathValue.plain(b ? 1 : 0)); + } else { + return builder -> builder.toInventory(MathValue.auto(object)); + } + }, "to-inventory"); this.registerLootParser(object -> { boolean value = (boolean) object; return builder -> builder.preventGrabbing(value); diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/hook/BukkitHookManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/hook/BukkitHookManager.java index 279cdfea..ed969beb 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/hook/BukkitHookManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/hook/BukkitHookManager.java @@ -33,7 +33,7 @@ import net.momirealms.customfishing.api.mechanic.requirement.RequirementManager; import net.momirealms.customfishing.bukkit.item.damage.CustomDurabilityItem; import net.momirealms.customfishing.bukkit.item.damage.DurabilityItem; import net.momirealms.customfishing.bukkit.item.damage.VanillaDurabilityItem; -import net.momirealms.customfishing.bukkit.util.PlayerUtils; +import net.momirealms.customfishing.api.util.PlayerUtils; import net.momirealms.customfishing.common.helper.AdventureHelper; import net.momirealms.customfishing.common.item.Item; import org.bukkit.Bukkit; diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/item/BukkitItemManager.java b/core/src/main/java/net/momirealms/customfishing/bukkit/item/BukkitItemManager.java index 88311170..09a10667 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/item/BukkitItemManager.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/item/BukkitItemManager.java @@ -168,9 +168,8 @@ public class BukkitItemManager implements ItemManager, Listener { return (String) factory.wrap(itemStack).getTag("CustomFishing", "id").orElse(null); } - @Nullable @Override - public org.bukkit.entity.Item dropItemLoot(@NotNull Context context, ItemStack rod, FishHook hook) { + public ItemStack getItemLoot(@NotNull Context context, ItemStack rod, FishHook hook) { String id = requireNonNull(context.arg(ContextKeys.ID)); ItemStack itemStack; if (id.equals("vanilla")) { @@ -178,7 +177,13 @@ public class BukkitItemManager implements ItemManager, Listener { } else { itemStack = requireNonNull(buildInternal(context, id)); } + return itemStack; + } + @Nullable + @Override + public org.bukkit.entity.Item dropItemLoot(@NotNull Context context, ItemStack rod, FishHook hook) { + ItemStack itemStack = getItemLoot(context, rod, hook); if (itemStack.getType() == Material.AIR) { return null; } diff --git a/core/src/main/java/net/momirealms/customfishing/bukkit/market/MarketGUI.java b/core/src/main/java/net/momirealms/customfishing/bukkit/market/MarketGUI.java index c251d908..6222c6ff 100644 --- a/core/src/main/java/net/momirealms/customfishing/bukkit/market/MarketGUI.java +++ b/core/src/main/java/net/momirealms/customfishing/bukkit/market/MarketGUI.java @@ -23,7 +23,7 @@ import net.momirealms.customfishing.api.mechanic.context.ContextKeys; import net.momirealms.customfishing.api.mechanic.market.MarketGUIHolder; import net.momirealms.customfishing.api.storage.data.EarningData; import net.momirealms.customfishing.api.storage.user.UserData; -import net.momirealms.customfishing.bukkit.util.PlayerUtils; +import net.momirealms.customfishing.api.util.PlayerUtils; import net.momirealms.customfishing.common.helper.AdventureHelper; import net.momirealms.customfishing.common.util.Pair; import net.momirealms.sparrow.heart.SparrowHeart; diff --git a/gradle.properties b/gradle.properties index 2f076fa1..006348e9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=2.2.19 +project_version=2.2.20 config_version=36 project_group=net.momirealms