From c6cf8bd5b70e40c5c8f77427f79f9fdb762f4b47 Mon Sep 17 00:00:00 2001 From: XiaoMoMi <972454774@qq.com> Date: Thu, 4 Jan 2024 18:00:50 +0800 Subject: [PATCH] toInv --- .../customcrops/api/CustomCropsAPI.java | 2 - build.gradle.kts | 2 +- .../momirealms/customcrops/CustomCrops.java | 3 -- .../api/object/action/DropItemImpl.java | 6 +-- .../customcrops/api/object/loot/Loot.java | 4 +- .../api/object/loot/OtherLoot.java | 15 +++++- .../api/object/loot/QualityLoot.java | 17 +++++-- .../integration/skill/EcoSkillsImpl.java | 1 - .../customcrops/util/AdventureUtils.java | 12 ++--- .../customcrops/util/ConfigUtils.java | 3 +- .../customcrops/util/ItemUtils.java | 49 +++++++++++++++++++ 11 files changed, 88 insertions(+), 26 deletions(-) create mode 100644 plugin/src/main/java/net/momirealms/customcrops/util/ItemUtils.java diff --git a/api/src/main/java/net/momirealms/customcrops/api/CustomCropsAPI.java b/api/src/main/java/net/momirealms/customcrops/api/CustomCropsAPI.java index d94810f..dbd2596 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/CustomCropsAPI.java +++ b/api/src/main/java/net/momirealms/customcrops/api/CustomCropsAPI.java @@ -21,10 +21,8 @@ import net.momirealms.customcrops.api.object.CCGrowingCrop; import net.momirealms.customcrops.api.object.CCPot; import net.momirealms.customcrops.api.object.CCSprinkler; import net.momirealms.customcrops.api.object.CCWorldSeason; -import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; -import org.bukkit.plugin.Plugin; import javax.annotation.Nullable; diff --git a/build.gradle.kts b/build.gradle.kts index 0cd4af0..0f111cc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { allprojects { project.group = "net.momirealms" - project.version = "3.3.1.9" + project.version = "3.3.1.10" apply() apply(plugin = "java") diff --git a/plugin/src/main/java/net/momirealms/customcrops/CustomCrops.java b/plugin/src/main/java/net/momirealms/customcrops/CustomCrops.java index 793c37e..d31ec5e 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/CustomCrops.java +++ b/plugin/src/main/java/net/momirealms/customcrops/CustomCrops.java @@ -22,11 +22,9 @@ import com.comphenix.protocol.ProtocolManager; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.momirealms.customcrops.api.CustomCropsAPIImpl; import net.momirealms.customcrops.api.CustomCropsPlugin; -import net.momirealms.customcrops.api.event.CropBreakEvent; import net.momirealms.customcrops.api.object.basic.ConfigManager; import net.momirealms.customcrops.api.object.basic.MessageManager; import net.momirealms.customcrops.api.object.crop.CropManager; -import net.momirealms.customcrops.api.object.crop.GrowingCrop; import net.momirealms.customcrops.api.object.fertilizer.FertilizerManager; import net.momirealms.customcrops.api.object.hologram.HologramManager; import net.momirealms.customcrops.api.object.pot.PotManager; @@ -34,7 +32,6 @@ import net.momirealms.customcrops.api.object.scheduler.Scheduler; import net.momirealms.customcrops.api.object.season.SeasonManager; import net.momirealms.customcrops.api.object.sprinkler.SprinklerManager; import net.momirealms.customcrops.api.object.wateringcan.WateringCanManager; -import net.momirealms.customcrops.api.object.world.SimpleLocation; import net.momirealms.customcrops.api.object.world.WorldDataManager; import net.momirealms.customcrops.command.CustomCropsCommand; import net.momirealms.customcrops.customplugin.Platform; diff --git a/plugin/src/main/java/net/momirealms/customcrops/api/object/action/DropItemImpl.java b/plugin/src/main/java/net/momirealms/customcrops/api/object/action/DropItemImpl.java index fa2a451..bc4f441 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/api/object/action/DropItemImpl.java +++ b/plugin/src/main/java/net/momirealms/customcrops/api/object/action/DropItemImpl.java @@ -24,19 +24,19 @@ import net.momirealms.customcrops.api.object.world.SimpleLocation; import org.bukkit.entity.Player; import org.jetbrains.annotations.Nullable; -public record DropItemImpl(Loot[] loots) implements Action { +public record DropItemImpl(Loot[] loots, boolean toInv) implements Action { @Override public void doOn(@Nullable Player player, @Nullable SimpleLocation cropLoc, ItemMode itemMode) { if (cropLoc == null) return; if (player != null) { for (Loot loot : loots) { - loot.drop(player, cropLoc.getBukkitLocation()); + loot.drop(player, cropLoc.getBukkitLocation(), toInv); } } else { CustomCrops.getInstance().getScheduler().runTask(() -> { for (Loot loot : loots) { - loot.drop(null, cropLoc.getBukkitLocation()); + loot.drop(null, cropLoc.getBukkitLocation(), toInv); } }); } diff --git a/plugin/src/main/java/net/momirealms/customcrops/api/object/loot/Loot.java b/plugin/src/main/java/net/momirealms/customcrops/api/object/loot/Loot.java index 9563452..3d61065 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/api/object/loot/Loot.java +++ b/plugin/src/main/java/net/momirealms/customcrops/api/object/loot/Loot.java @@ -38,9 +38,7 @@ public abstract class Loot { this.max = max; } - public void drop(@Nullable Player player, Location location) { - //empty - } + public abstract void drop(@Nullable Player player, Location location, boolean toInv); public int getMin() { return min; diff --git a/plugin/src/main/java/net/momirealms/customcrops/api/object/loot/OtherLoot.java b/plugin/src/main/java/net/momirealms/customcrops/api/object/loot/OtherLoot.java index ecb0f73..84520a1 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/api/object/loot/OtherLoot.java +++ b/plugin/src/main/java/net/momirealms/customcrops/api/object/loot/OtherLoot.java @@ -21,6 +21,7 @@ import net.momirealms.customcrops.CustomCrops; import net.momirealms.customcrops.api.object.fertilizer.YieldIncrease; import net.momirealms.customcrops.api.object.pot.Pot; import net.momirealms.customcrops.api.object.world.SimpleLocation; +import net.momirealms.customcrops.util.ItemUtils; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -45,7 +46,8 @@ public class OtherLoot extends Loot { return chance; } - public void drop(Player player, Location location) { + @Override + public void drop(Player player, Location location, boolean toInv) { if (Math.random() < getChance()) { int random = getAmount(player); Pot pot = CustomCrops.getInstance().getWorldDataManager().getPotData(SimpleLocation.getByBukkitLocation(location).add(0,-1,0)); @@ -55,7 +57,16 @@ public class OtherLoot extends Loot { ItemStack drop = CustomCrops.getInstance().getIntegrationManager().build(getItemID(), player); if (drop.getType() == Material.AIR) return; drop.setAmount(random); - location.getWorld().dropItemNaturally(location, drop); + + if (toInv) { + int remain = ItemUtils.putLootsToBag(player.getInventory(), drop, drop.getAmount()); + if (remain > 0) { + drop.setAmount(remain); + location.getWorld().dropItemNaturally(location, drop); + } + } else { + location.getWorld().dropItemNaturally(location, drop); + } } } } \ No newline at end of file diff --git a/plugin/src/main/java/net/momirealms/customcrops/api/object/loot/QualityLoot.java b/plugin/src/main/java/net/momirealms/customcrops/api/object/loot/QualityLoot.java index e3807e4..e7638ac 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/api/object/loot/QualityLoot.java +++ b/plugin/src/main/java/net/momirealms/customcrops/api/object/loot/QualityLoot.java @@ -24,6 +24,7 @@ import net.momirealms.customcrops.api.object.fertilizer.Quality; import net.momirealms.customcrops.api.object.fertilizer.YieldIncrease; import net.momirealms.customcrops.api.object.pot.Pot; import net.momirealms.customcrops.api.object.world.SimpleLocation; +import net.momirealms.customcrops.util.ItemUtils; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -39,7 +40,7 @@ public class QualityLoot extends Loot { } @Override - public void drop(Player player, Location location) { + public void drop(Player player, Location location, boolean toInv) { SimpleLocation simpleLocation = SimpleLocation.getByBukkitLocation(location); Pot pot = CustomCrops.getInstance().getWorldDataManager().getPotData(simpleLocation.add(0,-1,0)); int amount = getAmount(player); @@ -56,16 +57,24 @@ public class QualityLoot extends Loot { double random = Math.random(); for (int j = 0; j < qualityRatio.length; j++) { if (random < qualityRatio[j]) { - dropItem(location, qualityLoots[j], player); + dropItem(location, qualityLoots[j], player, toInv); break; } } } } - private void dropItem(Location location, String id, Player player) { + private void dropItem(Location location, String id, Player player, boolean toInv) { ItemStack drop = CustomCrops.getInstance().getIntegrationManager().build(id, player); if (drop.getType() == Material.AIR) return; - location.getWorld().dropItemNaturally(location, drop); + if (toInv) { + int remain = ItemUtils.putLootsToBag(player.getInventory(), drop, drop.getAmount()); + if (remain > 0) { + drop.setAmount(remain); + location.getWorld().dropItemNaturally(location, drop); + } + } else { + location.getWorld().dropItemNaturally(location, drop); + } } } \ No newline at end of file diff --git a/plugin/src/main/java/net/momirealms/customcrops/integration/skill/EcoSkillsImpl.java b/plugin/src/main/java/net/momirealms/customcrops/integration/skill/EcoSkillsImpl.java index b2dfc49..464ecd1 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/integration/skill/EcoSkillsImpl.java +++ b/plugin/src/main/java/net/momirealms/customcrops/integration/skill/EcoSkillsImpl.java @@ -18,7 +18,6 @@ package net.momirealms.customcrops.integration.skill; import com.willfp.ecoskills.api.EcoSkillsAPI; -import com.willfp.ecoskills.skills.Skill; import com.willfp.ecoskills.skills.Skills; import net.momirealms.customcrops.integration.SkillInterface; import org.bukkit.entity.Player; diff --git a/plugin/src/main/java/net/momirealms/customcrops/util/AdventureUtils.java b/plugin/src/main/java/net/momirealms/customcrops/util/AdventureUtils.java index 877b425..500eb8a 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/util/AdventureUtils.java +++ b/plugin/src/main/java/net/momirealms/customcrops/util/AdventureUtils.java @@ -157,12 +157,12 @@ public class AdventureUtils { case 'd' -> stringBuilder.append(""); case 'e' -> stringBuilder.append(""); case 'f' -> stringBuilder.append(""); - case 'r' -> stringBuilder.append(""); - case 'l' -> stringBuilder.append(""); - case 'm' -> stringBuilder.append(""); - case 'o' -> stringBuilder.append(""); - case 'n' -> stringBuilder.append(""); - case 'k' -> stringBuilder.append(""); + case 'r' -> stringBuilder.append(""); + case 'l' -> stringBuilder.append(""); + case 'm' -> stringBuilder.append(""); + case 'o' -> stringBuilder.append(""); + case 'n' -> stringBuilder.append(""); + case 'k' -> stringBuilder.append(""); case 'x' -> { if (i + 13 >= chars.length || !isColorCode(chars[i+2]) diff --git a/plugin/src/main/java/net/momirealms/customcrops/util/ConfigUtils.java b/plugin/src/main/java/net/momirealms/customcrops/util/ConfigUtils.java index 05bba98..9caf086 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/util/ConfigUtils.java +++ b/plugin/src/main/java/net/momirealms/customcrops/util/ConfigUtils.java @@ -302,6 +302,7 @@ public class ConfigUtils { case "drop-items" -> { ConfigurationSection lootSec = actionSec.getConfigurationSection("value"); if (lootSec == null) continue; + boolean directToInv = lootSec.getBoolean("to-inventory", false); ArrayList loots = new ArrayList<>(); if (lootSec.contains("quality-crops")) { String[] qualityLoots = new String[ConfigManager.defaultRatio.length]; @@ -330,7 +331,7 @@ public class ConfigUtils { loots.add(otherLoot); } } - actions.add(new DropItemImpl(loots.toArray(new Loot[0]))); + actions.add(new DropItemImpl(loots.toArray(new Loot[0]), directToInv)); } case "break" -> actions.add(new BreakImpl( actionSec.getBoolean("value", true), diff --git a/plugin/src/main/java/net/momirealms/customcrops/util/ItemUtils.java b/plugin/src/main/java/net/momirealms/customcrops/util/ItemUtils.java new file mode 100644 index 0000000..5e28694 --- /dev/null +++ b/plugin/src/main/java/net/momirealms/customcrops/util/ItemUtils.java @@ -0,0 +1,49 @@ +package net.momirealms.customcrops.util; + +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class ItemUtils { + + public static int putLootsToBag(Inventory inventory, ItemStack itemStack, int amount) { + ItemMeta meta = itemStack.getItemMeta(); + int maxStackSize = itemStack.getMaxStackSize(); + for (ItemStack other : inventory.getStorageContents()) { + if (other != null) { + if (other.getType() == itemStack.getType() && other.getItemMeta().equals(meta)) { + if (other.getAmount() < maxStackSize) { + int delta = maxStackSize - other.getAmount(); + if (amount > delta) { + other.setAmount(maxStackSize); + amount -= delta; + } else { + other.setAmount(amount + other.getAmount()); + return 0; + } + } + } + } + } + + if (amount > 0) { + for (ItemStack other : inventory.getStorageContents()) { + if (other == null) { + if (amount > maxStackSize) { + amount -= maxStackSize; + ItemStack cloned = itemStack.clone(); + cloned.setAmount(maxStackSize); + inventory.addItem(cloned); + } else { + ItemStack cloned = itemStack.clone(); + cloned.setAmount(amount); + inventory.addItem(cloned); + return 0; + } + } + } + } + + return amount; + } +}