Jelajahi Sumber

Add option to shake items from player inventories

TfT_02 10 tahun lalu
induk
melakukan
d5a2dea06b

+ 10 - 0
src/main/java/com/gmail/nossr50/config/treasure/TreasureConfig.java

@@ -176,6 +176,11 @@ public class TreasureConfig extends ConfigLoader {
             else if (materialName.contains("INK_SACK")) {
                 material = Material.INK_SACK;
             }
+            else if (materialName.contains("INVENTORY")) {
+                // Use magic material BED_BLOCK to know that we're grabbing something from the inventory and not a normal treasure
+                shakeFromPlayer.add(new ShakeTreasure(new ItemStack(Material.BED_BLOCK, 1, (byte) 0), 1, getInventoryStealDropChance(), getInventoryStealDropLevel()));
+                continue;
+            }
             else {
                 material = Material.matchMaterial(materialName);
             }
@@ -476,6 +481,11 @@ public class TreasureConfig extends ConfigLoader {
         }
     }
 
+    public boolean getInventoryStealEnabled() { return config.contains("Shake.PLAYER.INVENTORY"); }
+    public boolean getInventoryStealStacks() { return config.getBoolean("Shake.PLAYER.INVENTORY.Whole_Stacks"); }
+    public double getInventoryStealDropChance() { return config.getDouble("Shake.PLAYER.INVENTORY.Drop_Chance"); }
+    public int getInventoryStealDropLevel() { return config.getInt("Shake.PLAYER.INVENTORY.Drop_Level"); }
+
     public double getItemDropRate(int tier, Rarity rarity) { return config.getDouble("Item_Drop_Rates.Tier_" + tier + "." + rarity.toString()); }
     public double getEnchantmentDropRate(int tier, Rarity rarity) { return config.getDouble("Enchantment_Drop_Rates.Tier_" + tier + "." + rarity.toString()); }
 }

+ 23 - 0
src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java

@@ -28,6 +28,7 @@ import org.bukkit.entity.TNTPrimed;
 import org.bukkit.entity.ThrownPotion;
 import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
 import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.PlayerInventory;
 import org.bukkit.inventory.meta.SkullMeta;
 import org.bukkit.material.Wool;
 import org.bukkit.potion.Potion;
@@ -405,6 +406,28 @@ public class FishingManager extends SkillManager {
                             drop.setItemMeta(skullMeta);
                             break;
 
+                        case BED_BLOCK:
+                            if (TreasureConfig.getInstance().getInventoryStealEnabled()) {
+                                PlayerInventory inventory = targetPlayer.getInventory();
+                                int length = inventory.getContents().length;
+                                int slot = Misc.getRandom().nextInt(length);
+                                drop = inventory.getItem(slot);
+
+                                if (drop == null) {
+                                    break;
+                                }
+
+                                if (TreasureConfig.getInstance().getInventoryStealStacks()) {
+                                    inventory.setItem(slot, null);
+                                }
+                                else {
+                                    inventory.setItem(slot, (drop.getAmount() > 1) ? new ItemStack(drop.getType(), drop.getAmount() - 1) : null);
+                                    drop.setAmount(1);
+                                }
+
+                                targetPlayer.updateInventory();
+                            }
+                            break;
 
                         default:
                             break;

+ 4 - 0
src/main/resources/treasures.yml

@@ -799,6 +799,10 @@ Shake:
             XP: 0
             Drop_Chance: 0.0
             Drop_Level: 0
+        INVENTORY:
+            Whole_Stacks: false
+            Drop_Chance: 0.0
+            Drop_Level: 0
     SHEEP:
         WOOL:
             Amount: 3