Jelajahi Sumber

Update mcMMO for Minecraft 1.7.2

GJ 11 tahun lalu
induk
melakukan
60ddd799de

+ 7 - 0
Changelog.txt

@@ -8,6 +8,13 @@ Key:
   - Removal
 
 Version 1.5.00-dev
+ + Added Hardened Clay, Stained Clay, and Packed Ice to Mining blocks
+ + Added Acacia and Dark Oak to Woodcutting blocks
+ + Added Salmon, Clownfish, and Pufferfish to Fishing XP
+ + Added new flowers and grasses to Herbalism XP
+ ! Fishing XP now depends on the type of fish.
+ ! Woodcutting XP in experience.yml now uses the tree species names. Oak is now Generic, and Spruce is now Redwood.
+ ! Red_Rose was replaced by Poppy, and so the key in experience.yml has been updated accordingly.
  - Removed deprecated permission nodes
 
 Version 1.4.08

+ 110 - 21
src/main/java/com/gmail/nossr50/config/experience/ExperienceConfig.java

@@ -4,7 +4,10 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.bukkit.Material;
+import org.bukkit.TreeSpecies;
 import org.bukkit.entity.EntityType;
+import org.bukkit.material.LongGrass;
+import org.bukkit.material.MaterialData;
 
 import com.gmail.nossr50.config.AutoUpdateConfigLoader;
 import com.gmail.nossr50.datatypes.experience.FormulaType;
@@ -103,9 +106,7 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
         }
 
         /* Fishing */
-        if (getFishingBaseXP() <= 0) {
-            reason.add("Experience.Fishing.Base should be greater than 0!");
-        }
+        // TODO: Add validation for each fish type once enum is available.
 
         if (getFishingShakeXP() <= 0) {
             reason.add("Experience.Fishing.Shake should be greater than 0!");
@@ -126,20 +127,12 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
         }
 
         /* Woodcutting */
-        if (getWoodcuttingXPOak() <= 0) {
-            reason.add("Experience.Woodcutting.Oak should be greater than 0!");
-        }
-
-        if (getWoodcuttingXPBirch() <= 0) {
-            reason.add("Experience.Woodcutting.Birch should be greater than 0!");
-        }
-
-        if (getWoodcuttingXPSpruce() <= 0) {
-            reason.add("Experience.Woodcutting.Spruce should be greater than 0!");
-        }
+        for (TreeSpecies species : TreeSpecies.values()) {
+            String key = "Experience.Woodcutting." + StringUtils.getPrettyTreeSpeciesString(species).replace(" ", "_");
 
-        if (getWoodcuttingXPJungle() <= 0) {
-            reason.add("Experience.Woodcutting.Jungle should be greater than 0!");
+            if (config.getInt(key) <= 0) {
+                reason.add(key + " should be greater than 0!");
+            }
         }
 
         if (getWoodcuttingXPHugeBrownMushroom() <= 0) {
@@ -211,9 +204,108 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
     public double getPotionXP() { return config.getDouble("Experience.Alchemy.Potion", 150D); }
 
     /* Fishing */
-    public int getFishingBaseXP() { return config.getInt("Experience.Fishing.Base", 800); }
+    public int getFishXp(MaterialData data) {
+        switch (data.getData()) {
+            case 0x0:
+                return config.getInt("Experience.Fishing.Raw_Fish", 800);
+
+            case 0x1:
+                return config.getInt("Experience.Fishing.Raw_Salmon", 800);
+
+            case 0x2:
+                return config.getInt("Experience.Fishing.Clownfish", 800);
+
+            case 0x3:
+                return config.getInt("Experience.Fishing.Pufferfish", 800);
+
+            default:
+                return 0;
+        }
+    }
+
     public int getFishingShakeXP() { return config.getInt("Experience.Fishing.Shake", 50); }
 
+    /* Herbalism */
+    public int getFlowerAndGrassXp(MaterialData data) {
+        Material type = data.getItemType();
+
+        if (type == Material.RED_ROSE) {
+            switch (data.getData()) {
+                case 0x0:
+                    return config.getInt("Experience.Herbalism.Poppy", 100);
+
+                case 0x1:
+                    return config.getInt("Experience.Herbalism.Blue_Orchid", 150);
+
+                case 0x2:
+                    return config.getInt("Experience.Herbalism.Allium", 300);
+
+                case 0x3:
+                    return config.getInt("Experience.Herbalism.Azure_Bluet", 150);
+
+                case 0x4:
+                    return config.getInt("Experience.Herbalism.Red_Tulip", 150);
+
+                case 0x5:
+                    return config.getInt("Experience.Herbalism.Orange_Tulip", 150);
+
+                case 0x6:
+                    return config.getInt("Experience.Herbalism.White_Tulip", 150);
+
+                case 0x7:
+                    return config.getInt("Experience.Herbalism.Pink_Tulip", 150);
+
+                case 0x8:
+                    return config.getInt("Experience.Herbalism.Oxeye_Daisy", 150);
+
+                default:
+                    return 0;
+            }
+
+        }
+        else if (type == Material.LONG_GRASS) {
+            switch (((LongGrass) data).getSpecies()) {
+                case DEAD:
+                    return config.getInt("Experience.Herbalism.Dead_Bush", 100);
+
+                case FERN_LIKE:
+                    return config.getInt("Experience.Herbalism.Small_Fern", 100);
+
+                case NORMAL:
+                    return config.getInt("Experience.Herbalism.Small_Grass", 100);
+
+                default:
+                    return 0;
+            }
+        }
+        else if (type == Material.DOUBLE_PLANT) {
+            switch (data.getData()) {
+                case 0x0:
+                    return config.getInt("Experience.Herbalism.Sunflower", 50);
+
+                case 0x1:
+                    return config.getInt("Experience.Herbalism.Lilac", 50);
+
+                case 0x2:
+                    return config.getInt("Experience.Herbalism.Tall_Grass", 50);
+
+                case 0x3:
+                    return config.getInt("Experience.Herbalism.Tall_Fern", 50);
+
+                case 0x4:
+                    return config.getInt("Experience.Herbalism.Rose_Bush", 50);
+
+                case 0x5:
+                    return config.getInt("Experience.Herbalism.Peony", 50);
+
+                default:
+                    return 0;
+            }
+        }
+
+        return 0;
+    }
+
     /* Repair */
     public double getRepairXPBase() { return config.getDouble("Experience.Repair.Base", 1000.0); }
     public double getRepairXP(RepairMaterialType repairMaterialType) { return config.getDouble("Experience.Repair." + StringUtils.getCapitalized(repairMaterialType.toString())); }
@@ -224,10 +316,7 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
     public int getTamingXPOcelot() { return config.getInt("Experience.Taming.Animal_Taming.Ocelot", 500); }
 
     /* Woodcutting */
-    public int getWoodcuttingXPOak() { return config.getInt("Experience.Woodcutting.Oak", 70); }
-    public int getWoodcuttingXPBirch() { return config.getInt("Experience.Woodcutting.Birch", 90); }
-    public int getWoodcuttingXPSpruce() { return config.getInt("Experience.Woodcutting.Spruce", 80); }
-    public int getWoodcuttingXPJungle() { return config.getInt("Experience.Woodcutting.Jungle", 100); }
+    public int getWoodcuttingTreeXP(TreeSpecies species) { return config.getInt("Experience.Woodcutting." + StringUtils.getPrettyTreeSpeciesString(species).replace(" ", "_")); }
     public int getWoodcuttingXPHugeBrownMushroom() { return config.getInt("Experience.Woodcutting.Huge_Mushroom_Brown", 70); }
     public int getWoodcuttingXPHugeRedMushroom() { return config.getInt("Experience.Woodcutting.Huge_Mushroom_Red", 70); }
 }

+ 2 - 1
src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java

@@ -304,6 +304,7 @@ public class FishingManager extends SkillManager {
      */
     public void handleFishing(Item fishingCatch) {
         this.fishingCatch = fishingCatch;
+        int fishXp = ExperienceConfig.getInstance().getFishXp(fishingCatch.getItemStack().getData());
         int treasureXp = 0;
         Player player = getPlayer();
         FishingTreasure treasure = null;
@@ -351,7 +352,7 @@ public class FishingManager extends SkillManager {
             }
         }
 
-        applyXpGain(ExperienceConfig.getInstance().getFishingBaseXP() + treasureXp);
+        applyXpGain(fishXp + treasureXp);
     }
 
     /**

+ 6 - 1
src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java

@@ -148,7 +148,12 @@ public class HerbalismManager extends SkillManager {
                 processGreenThumbPlants(blockState, greenTerra);
             }
 
-            xp = ExperienceConfig.getInstance().getXp(skill, material);
+            if (material == Material.DOUBLE_PLANT || material == Material.RED_ROSE || material == Material.LONG_GRASS) {
+                xp = ExperienceConfig.getInstance().getFlowerAndGrassXp(blockState.getData());
+            }
+            else {
+                xp = ExperienceConfig.getInstance().getXp(skill, material);
+            }
 
             if (Config.getInstance().getDoubleDropsEnabled(skill, material) && Permissions.secondaryAbilityEnabled(player, SecondaryAbility.HERBALISM_DOUBLE_DROPS)) {
                 drops = blockState.getBlock().getDrops();

+ 12 - 6
src/main/java/com/gmail/nossr50/skills/mining/Mining.java

@@ -39,11 +39,13 @@ public class Mining {
         switch (blockType) {
             case ENDER_STONE:
             case GOLD_ORE:
+            case HARD_CLAY:
             case IRON_ORE:
             case MOSSY_COBBLESTONE:
             case NETHERRACK:
             case OBSIDIAN:
             case SANDSTONE:
+            case STAINED_CLAY:
                 handleMiningDrops(blockState);
                 return;
 
@@ -55,12 +57,13 @@ public class Mining {
 
             case COAL_ORE:
             case DIAMOND_ORE:
-            case REDSTONE_ORE:
+            case EMERALD_ORE:
             case GLOWSTONE:
             case LAPIS_ORE:
-            case STONE:
-            case EMERALD_ORE:
+            case PACKED_ICE:
             case QUARTZ_ORE:
+            case REDSTONE_ORE:
+            case STONE:
                 Misc.dropItem(blockState.getLocation(), new ItemStack(blockType));
                 return;
 
@@ -82,17 +85,20 @@ public class Mining {
             case COAL_ORE:
             case DIAMOND_ORE:
             case EMERALD_ORE:
-            case GLOWSTONE:
-            case LAPIS_ORE:
-            case STONE:
             case ENDER_STONE:
+            case GLOWSTONE:
             case GOLD_ORE:
+            case HARD_CLAY:
             case IRON_ORE:
+            case LAPIS_ORE:
             case MOSSY_COBBLESTONE:
             case NETHERRACK:
             case OBSIDIAN:
+            case PACKED_ICE:
             case REDSTONE_ORE:
             case SANDSTONE:
+            case STAINED_CLAY:
+            case STONE:
             case QUARTZ_ORE:
                 Misc.dropItems(blockState.getLocation(), blockState.getBlock().getDrops());
                 return;

+ 7 - 20
src/main/java/com/gmail/nossr50/skills/woodcutting/Woodcutting.java

@@ -5,6 +5,7 @@ import java.util.List;
 import java.util.Set;
 
 import org.bukkit.Material;
+import org.bukkit.TreeSpecies;
 import org.bukkit.block.BlockFace;
 import org.bukkit.block.BlockState;
 import org.bukkit.inventory.ItemStack;
@@ -55,28 +56,14 @@ public final class Woodcutting {
             return mcMMO.getModManager().getBlock(blockState).getXpGain();
         }
 
-        switch (((Tree) blockState.getData()).getSpecies()) {
-            case GENERIC:
-                return ExperienceConfig.getInstance().getWoodcuttingXPOak();
+        TreeSpecies species = ((Tree) blockState.getData()).getSpecies();
+        int xp = ExperienceConfig.getInstance().getWoodcuttingTreeXP(species);
 
-            case REDWOOD:
-                return ExperienceConfig.getInstance().getWoodcuttingXPSpruce();
-
-            case BIRCH:
-                return ExperienceConfig.getInstance().getWoodcuttingXPBirch();
-
-            case JUNGLE:
-                int xp = ExperienceConfig.getInstance().getWoodcuttingXPJungle();
-
-                if (experienceGainMethod == ExperienceGainMethod.TREE_FELLER) {
-                    xp *= 0.5;
-                }
-
-                return xp;
-
-            default:
-                return 0;
+        if (species == TreeSpecies.JUNGLE && experienceGainMethod == ExperienceGainMethod.TREE_FELLER) {
+            xp *= 0.5;
         }
+
+        return xp;
     }
 
     /**

+ 8 - 1
src/main/java/com/gmail/nossr50/util/BlockUtils.java

@@ -112,7 +112,9 @@ public final class BlockUtils {
         switch (blockState.getType()) {
             case BROWN_MUSHROOM:
             case CACTUS:
+            case DOUBLE_PLANT:
             case MELON_BLOCK:
+            case LONG_GRASS:
             case PUMPKIN:
             case RED_MUSHROOM:
             case RED_ROSE:
@@ -150,10 +152,13 @@ public final class BlockUtils {
         switch (blockState.getType()) {
             case ENDER_STONE:
             case GLOWSTONE:
+            case HARD_CLAY:
             case MOSSY_COBBLESTONE:
             case NETHERRACK:
             case OBSIDIAN:
+            case PACKED_ICE:
             case SANDSTONE:
+            case STAINED_CLAY:
             case STONE:
                 return true;
 
@@ -195,6 +200,7 @@ public final class BlockUtils {
     public static boolean isLog(BlockState blockState) {
         switch (blockState.getType()) {
             case LOG:
+            case LOG_2:
             case HUGE_MUSHROOM_1:
             case HUGE_MUSHROOM_2:
                 return true;
@@ -213,6 +219,7 @@ public final class BlockUtils {
     public static boolean isLeaves(BlockState blockState) {
         switch (blockState.getType()) {
             case LEAVES:
+            case LEAVES_2:
                 return true;
 
             default:
@@ -275,7 +282,7 @@ public final class BlockUtils {
      * Determine if a given block can be made into Mycelium
      *
      * @param blockState The {@link BlockState} of the block to check
-     * @return true if the block can be made in Mycelium, false otherwise
+     * @return true if the block can be made into Mycelium, false otherwise
      */
     public static boolean canMakeShroomy(BlockState blockState) {
         switch (blockState.getType()) {

+ 12 - 2
src/main/java/com/gmail/nossr50/util/ItemUtils.java

@@ -1,12 +1,14 @@
 package com.gmail.nossr50.util;
 
 import org.bukkit.ChatColor;
+import org.bukkit.CoalType;
 import org.bukkit.DyeColor;
 import org.bukkit.Material;
 import org.bukkit.inventory.FurnaceRecipe;
 import org.bukkit.inventory.ItemStack;
 import org.bukkit.inventory.Recipe;
 import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.material.Coal;
 import org.bukkit.material.Dye;
 
 import com.gmail.nossr50.mcMMO;
@@ -586,6 +588,8 @@ public final class ItemUtils {
             case PUMPKIN_SEEDS:
             case WATER_LILY:
             case VINE:
+            case LONG_GRASS:
+            case DOUBLE_PLANT:
                 return true;
 
             case INK_SACK:
@@ -614,7 +618,6 @@ public final class ItemUtils {
             case PORK:
             case GRILLED_PORK:
             case WOOL:
-            case RED_ROSE: // Not sure we should include this, as it will also trigger from herbalism
             case IRON_INGOT:
             case SNOW_BALL:
             case BLAZE_ROD:
@@ -627,12 +630,17 @@ public final class ItemUtils {
             case ARROW:
             case SLIME_BALL:
             case NETHER_STAR:
-            case COAL: // Not sure we should include this, as it will also trigger when mining
             case ROTTEN_FLESH:
             case GOLD_NUGGET:
             case EGG:
                 return true;
 
+            case COAL: // Not sure we should include this, as it will also trigger when mining
+                return (((Coal) item.getData()).getType() == CoalType.COAL);
+
+            case RED_ROSE: // Not sure we should include this, as it will also trigger from herbalism
+                return (item.getData().getData() == 0x0);
+
             default:
                 return false;
         }
@@ -647,7 +655,9 @@ public final class ItemUtils {
     public static boolean isWoodcuttingDrop(ItemStack item) {
         switch (item.getType()) {
             case LOG:
+            case LOG_2:
             case LEAVES:
+            case LEAVES_2:
             case SAPLING:
             case APPLE:
                 return true;

+ 5 - 0
src/main/java/com/gmail/nossr50/util/StringUtils.java

@@ -1,6 +1,7 @@
 package com.gmail.nossr50.util;
 
 import org.bukkit.Material;
+import org.bukkit.TreeSpecies;
 import org.bukkit.entity.EntityType;
 
 import com.gmail.nossr50.datatypes.party.PartyFeature;
@@ -30,6 +31,10 @@ public class StringUtils {
         return createPrettyEnumString(ability.toString());
     }
 
+    public static String getPrettyTreeSpeciesString(TreeSpecies species) {
+        return createPrettyEnumString(species.toString());
+    }
+
     public static String getPrettySecondaryAbilityString(SecondaryAbility secondaryAbility) {
         switch (secondaryAbility) {
             case HERBALISM_DOUBLE_DROPS:

+ 29 - 4
src/main/resources/experience.yml

@@ -82,7 +82,10 @@ Experience:
     Alchemy:
         Potion: 120
     Fishing:
-        Base: 800
+        Raw_Fish: 800
+        Raw_Salmon: 800
+        Clownfish: 800
+        Pufferfish: 800
         Shake: 50
     Excavation:
         Clay: 40
@@ -95,27 +98,46 @@ Experience:
         Snow_Block: 40
         Soul_Sand: 40
     Woodcutting:
-        Oak: 70
-        Spruce: 80
+        Acacia: 90
         Birch: 90
+        Dark_Oak: 90
+        Generic: 70
         Jungle: 100
+        Redwood: 80
         Huge_Mushroom_Red: 70
         Huge_Mushroom_Brown: 70
     Herbalism:
+        Allium: 300
+        Azure_Bluet: 150
+        Blue_Orchid: 150
         Brown_Mushroom: 150
         Cactus: 30
         Carrot: 50
         Cocoa: 30
         Crops: 50
+        Dead_Bush: 100
+        Lilac: 50
         Melon_Block: 20
         Nether_Warts: 50
+        Orange_Tulip: 150
+        Oxeye_Daisy: 150
+        Peony: 50
+        Pink_Tulip: 150
+        Poppy: 100
         Potato: 50
         Pumpkin: 20
         Red_Mushroom: 150
-        Red_Rose: 100
+        Red_Tulip: 150
+        Rose_Bush: 50
+        Small_Fern: 100
+        Small_Grass: 100
         Sugar_Cane_Block: 30
+        Sunflower: 50
+        Tall_Grass: 50
+        Tall_Fern: 50
         Vine: 10
         Water_Lily: 100
+        White_Tulip: 150
         Yellow_Flower: 100
     Mining:
         Coal_Ore: 100
@@ -124,14 +146,17 @@ Experience:
         Ender_Stone: 150
         Glowstone: 30
         Gold_Ore: 350
+        Hard_Clay: 30
         Iron_Ore: 250
         Lapis_Ore: 400
         Mossy_Cobblestone: 30
         Netherrack: 30
         Obsidian: 150
+        Packed_Ice: 50
         Quartz_Ore: 100
         Redstone_Ore: 150
         Sandstone: 30
+        Stained_Clay: 50
         Stone: 30
     Repair:
         Base: 1000.0