diff --git a/src/main/java/com/songoda/ultimatetimber/UltimateTimber.java b/src/main/java/com/songoda/ultimatetimber/UltimateTimber.java index 70486bc..f86e366 100644 --- a/src/main/java/com/songoda/ultimatetimber/UltimateTimber.java +++ b/src/main/java/com/songoda/ultimatetimber/UltimateTimber.java @@ -15,6 +15,7 @@ import org.bukkit.plugin.java.JavaPlugin; import com.songoda.ultimatetimber.commands.CommandHandler; import com.songoda.ultimatetimber.configurations.DefaultConfig; +import com.songoda.ultimatetimber.hooks.McMMOHook; import com.songoda.ultimatetimber.treefall.CustomLoot; import com.songoda.ultimatetimber.treefall.TreeFallAnimation; import com.songoda.ultimatetimber.treefall.TreeFallListener; @@ -74,6 +75,12 @@ public class UltimateTimber extends JavaPlugin { */ this.reloadValidWorlds(); + /* + Check for McMMO + */ + if (Bukkit.getPluginManager().isPluginEnabled("mcMMO")) + McMMOHook.setEnabled(); + /* Register command executor and tab completer */ diff --git a/src/main/java/com/songoda/ultimatetimber/hooks/McMMOHook.java b/src/main/java/com/songoda/ultimatetimber/hooks/McMMOHook.java new file mode 100644 index 0000000..abc5823 --- /dev/null +++ b/src/main/java/com/songoda/ultimatetimber/hooks/McMMOHook.java @@ -0,0 +1,58 @@ +package com.songoda.ultimatetimber.hooks; + +import java.util.ArrayList; +import java.util.HashSet; + +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.entity.Player; + +import com.gmail.nossr50.api.ExperienceAPI; +import com.gmail.nossr50.datatypes.skills.PrimarySkillType; +import com.gmail.nossr50.util.player.UserManager; +import com.songoda.ultimatetimber.utils.WoodToLogConverter; + +public class McMMOHook { + + private static boolean enabled = false; + + /** + * Updates a Player's Wood Cutting skill based on the number of logs they broke + * + * @param player The Player to update + * @param treeBlocks The tree blocks that were broken + */ + public static void updateWoodCuttingSkill(Player player, HashSet treeBlocks) { + if (!enabled) return; + if (player.getGameMode().equals(GameMode.CREATIVE)) return; + + ExperienceAPI.addXpFromBlocksBySkill(getLogStates(treeBlocks), UserManager.getPlayer(player), PrimarySkillType.WOODCUTTING); + } + + /** + * Sets the hook to enabled + */ + public static void setEnabled() { + enabled = true; + } + + /** + * Counts the number of logs + * + * @param treeBlocks The potential log blocks + * @return The number of logs + */ + private static ArrayList getLogStates(HashSet treeBlocks) { + ArrayList logs = new ArrayList<>(); + for (Block block : treeBlocks) { + Material material = WoodToLogConverter.convert(block.getType()); + if (material.name().endsWith("LOG")) { + logs.add(block.getState()); + } + } + return logs; + } + +} diff --git a/src/main/java/com/songoda/ultimatetimber/treefall/TreeFallListener.java b/src/main/java/com/songoda/ultimatetimber/treefall/TreeFallListener.java index 53a2c21..3814652 100644 --- a/src/main/java/com/songoda/ultimatetimber/treefall/TreeFallListener.java +++ b/src/main/java/com/songoda/ultimatetimber/treefall/TreeFallListener.java @@ -15,6 +15,7 @@ import com.songoda.ultimatetimber.UltimateTimber; import com.songoda.ultimatetimber.configurations.DefaultConfig; import com.songoda.ultimatetimber.events.TreeFallEvent; import com.songoda.ultimatetimber.events.TreeFellEvent; +import com.songoda.ultimatetimber.hooks.McMMOHook; public class TreeFallListener implements Listener { @@ -57,6 +58,9 @@ public class TreeFallListener implements Listener { // Do not let any items drop, it will be handled later event.setDropItems(false); + + // Add to mcMMO XP if installed + McMMOHook.updateWoodCuttingSkill(event.getPlayer(), blocks); if (fileConfiguration.getBoolean(DefaultConfig.ACCURATE_AXE_DURABILITY)) AxeDurability.adjustAxeDamage(blocks, event.getPlayer()); diff --git a/src/main/java/com/songoda/ultimatetimber/treefall/TreeLoot.java b/src/main/java/com/songoda/ultimatetimber/treefall/TreeLoot.java index acd7e7c..0b25f24 100644 --- a/src/main/java/com/songoda/ultimatetimber/treefall/TreeLoot.java +++ b/src/main/java/com/songoda/ultimatetimber/treefall/TreeLoot.java @@ -24,7 +24,7 @@ class TreeLoot { return; if (hasSilkTouch) { // No bonus loot for silk touch - world.dropItem(location, new ItemStack(originalMaterial, 1)); + world.dropItem(location, new ItemStack(WoodToLogConverter.convert(originalMaterial), 1)); return; } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 6b3e81e..4d7132e 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,7 +3,7 @@ version: maven-version-number author: Songoda main: com.songoda.ultimatetimber.UltimateTimber api-version: 1.13 -softdepend: [Multiverse-Core] +softdepend: [Multiverse-Core, mcMMO] commands: ultimatetimber: description: Reloads the configuration file