From 267480f0280345675b66ed5cf99c878989355b04 Mon Sep 17 00:00:00 2001 From: XiaoLFeng Date: Fri, 4 Aug 2023 11:14:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BF=AB=E6=8D=B7=E7=A0=8D=E6=A0=91=E5=86=85?= =?UTF-8?q?=E5=AE=B9=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=8F=AF=E4=BB=A5=E6=8C=87?= =?UTF-8?q?=E4=BB=A4=E5=BC=80=E5=90=AF=E6=88=96=E5=85=B3=E9=97=AD=E7=A0=8D?= =?UTF-8?q?=E6=A0=91=E4=B8=8E=E6=8C=96=E7=9F=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../frontleaves/chainmining/ChainMining.java | 15 +- .../chainmining/commands/ChangeToUse.java | 74 ++ .../chainmining/commands/PluginMenu.java | 105 +++ .../listeners/CutTreeListener.java | 864 ++++++++++++++++++ .../listeners/MineralsListener.java | 88 +- .../listeners/PlayerJoinServerListener.java | 30 + 7 files changed, 1134 insertions(+), 44 deletions(-) create mode 100644 src/main/java/com/frontleaves/chainmining/commands/ChangeToUse.java create mode 100644 src/main/java/com/frontleaves/chainmining/commands/PluginMenu.java create mode 100644 src/main/java/com/frontleaves/chainmining/listeners/CutTreeListener.java create mode 100644 src/main/java/com/frontleaves/chainmining/listeners/PlayerJoinServerListener.java diff --git a/pom.xml b/pom.xml index bc0fb24..36c80f6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.frontleaves ChainMining - 1.0-SNAPSHOT + 1.2-SNAPSHOT jar chainMining diff --git a/src/main/java/com/frontleaves/chainmining/ChainMining.java b/src/main/java/com/frontleaves/chainmining/ChainMining.java index 033d14c..5b7001f 100644 --- a/src/main/java/com/frontleaves/chainmining/ChainMining.java +++ b/src/main/java/com/frontleaves/chainmining/ChainMining.java @@ -1,20 +1,33 @@ package com.frontleaves.chainmining; +import com.frontleaves.chainmining.commands.ChangeToUse; import com.frontleaves.chainmining.commands.PluginMenu; +import com.frontleaves.chainmining.listeners.CutTreeListener; import com.frontleaves.chainmining.listeners.MineralsListener; +import com.frontleaves.chainmining.listeners.PlayerJoinServerListener; import org.bukkit.plugin.java.JavaPlugin; +import java.util.HashMap; +import java.util.Objects; + /** * @author 锋楪技术(深圳)有限公司 */ public final class ChainMining extends JavaPlugin { + public static String prefix = "§8[§bFYCM§8]"; + + public static HashMap> playerList = new HashMap<>(); + @Override public void onEnable() { // 载入插件指令 - getCommand("fycm").setExecutor(new PluginMenu(this)); + Objects.requireNonNull(getCommand("fycm")).setExecutor(new PluginMenu()); + Objects.requireNonNull(getCommand("fykg")).setExecutor(new ChangeToUse()); // 载入监听器 + getServer().getPluginManager().registerEvents(new PlayerJoinServerListener(), this); getServer().getPluginManager().registerEvents(new MineralsListener(), this); + getServer().getPluginManager().registerEvents(new CutTreeListener(), this); // Plugin startup logic getLogger().info("插件启动成功"); } diff --git a/src/main/java/com/frontleaves/chainmining/commands/ChangeToUse.java b/src/main/java/com/frontleaves/chainmining/commands/ChangeToUse.java new file mode 100644 index 0000000..336ffcd --- /dev/null +++ b/src/main/java/com/frontleaves/chainmining/commands/ChangeToUse.java @@ -0,0 +1,74 @@ +package com.frontleaves.chainmining.commands; + +import com.frontleaves.chainmining.ChainMining; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; + +/** + * @author 锋楪技术(深圳)有限公司 + */ +public class ChangeToUse implements CommandExecutor { + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if ("fykg".equalsIgnoreCase(command.getName())) { + if (args.length != 0) { + switch (args[0]) { + case "cm": + switch (args[1]) { + case "on": + ChainMining.playerList.get(sender.getName()).put("chainMining", true); + sender.sendMessage(ChainMining.prefix + "§6 连锁挖矿设置为§2开启"); + break; + case "off": + ChainMining.playerList.get(sender.getName()).put("chainMining", false); + sender.sendMessage(ChainMining.prefix + "§6 连锁挖矿设置为§c关闭"); + break; + case "toggle": + if (ChainMining.playerList.get(sender.getName()).get("chainMining")) { + ChainMining.playerList.get(sender.getName()).put("chainMining", false); + sender.sendMessage(ChainMining.prefix + "§6 连锁挖矿切换为§c关闭"); + } else { + ChainMining.playerList.get(sender.getName()).put("chainMining", true); + sender.sendMessage(ChainMining.prefix + "§6 连锁挖矿切换为§2开启"); + } + break; + default: + sender.sendMessage(ChainMining.prefix + "§c 参数错误"); + break; + } + break; + case "tr": + switch (args[1]) { + case "on": + ChainMining.playerList.get(sender.getName()).put("tree", true); + sender.sendMessage(ChainMining.prefix + "§6 快速砍树设置为§2开启"); + break; + case "off": + ChainMining.playerList.get(sender.getName()).put("tree", false); + sender.sendMessage(ChainMining.prefix + "§6 快速砍树设置为§c关闭"); + break; + case "toggle": + if (ChainMining.playerList.get(sender.getName()).get("tree")) { + ChainMining.playerList.get(sender.getName()).put("tree", false); + sender.sendMessage(ChainMining.prefix + "§6 快速砍树切换为§c关闭"); + } else { + ChainMining.playerList.get(sender.getName()).put("tree", true); + sender.sendMessage(ChainMining.prefix + "§6 快速砍树切换为§2开启"); + } + break; + default: + sender.sendMessage(ChainMining.prefix + "§c 参数错误"); + break; + } + break; + default: + sender.sendMessage(ChainMining.prefix + "§c 参数不正确"); + break; + } + } + } + return true; + } +} diff --git a/src/main/java/com/frontleaves/chainmining/commands/PluginMenu.java b/src/main/java/com/frontleaves/chainmining/commands/PluginMenu.java new file mode 100644 index 0000000..1f3d643 --- /dev/null +++ b/src/main/java/com/frontleaves/chainmining/commands/PluginMenu.java @@ -0,0 +1,105 @@ +package com.frontleaves.chainmining.commands; + +import com.frontleaves.chainmining.ChainMining; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; + +/** + * @author 锋楪技术(深圳)有限公司 + */ +public class PluginMenu implements CommandExecutor { + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if ("fycm".equalsIgnoreCase(command.getName())) { + if (args.length == 0) { + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + sender.sendMessage("§2连锁挖矿 §aChainMining"); + sender.sendMessage("§1作者:§3锋楪技术§8[§9筱锋xiao_lfeng§8]"); + sender.sendMessage("§6使用方法:§e/fycm help"); + sender.sendMessage("§c当前版本:§4v1.1-SNAPSHOT"); + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + } else { + if ("help".equals(args[0])) { + if (args.length == 1) { + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + sender.sendMessage("§6/fycm help info §7--关于操作方法"); + sender.sendMessage("§6/fycm help operate §7--查看如何使用"); + sender.sendMessage("§6/fycm help scope §7--切换不同范围"); + sender.sendMessage("§6/fycm status §7--查看当前状态"); + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + } else { + switch (args[1]) { + case "info": + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + sender.sendMessage("本插件的使用方法大致分为如下四点:"); + sender.sendMessage("- 您可以单独使用连锁挖矿和快速砍树,两者可直接打开不会受到影响"); + sender.sendMessage("- 当您开启全局模式时候其他连锁挖矿、快速砍树和开路模式将会失效"); + sender.sendMessage("- 当您开启开路模式时候其他连锁挖矿、快速砍树和全局模式将会失效"); + sender.sendMessage("- 切换范围仅在全局模式适用,开路模式消耗盔甲耐久"); + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + break; + case "operate": + if (args.length == 2) { + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + sender.sendMessage("§6/fykg cm on §7--启动连锁挖矿"); + sender.sendMessage("§6/fykg cm off §7--关闭连锁挖矿"); + sender.sendMessage("§6/fykg cm toggle §7--切换连锁挖矿"); + sender.sendMessage("§6/fykg tr on §7--启动快速砍树"); + sender.sendMessage("§6/fykg tr off §7--关闭快速砍树"); + sender.sendMessage("§6/fykg tr toggle §7--切换快速砍树"); + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + sender.sendMessage("§31 §8/ §32"); + } else { + if ("1".equals(args[2])) { + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + sender.sendMessage("§6/fykg cm on §7--启动连锁挖矿"); + sender.sendMessage("§6/fykg cm off §7--关闭连锁挖矿"); + sender.sendMessage("§6/fykg cm toggle §7--切换连锁挖矿"); + sender.sendMessage("§6/fykg tr on §7--启动快速砍树"); + sender.sendMessage("§6/fykg tr off §7--关闭快速砍树"); + sender.sendMessage("§6/fykg tr toggle §7--切换快速砍树"); + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + sender.sendMessage("§31 §8/ §32"); + } else if ("2".equals(args[2])) { + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + sender.sendMessage("§6/fykg auto on §7--启动连锁挖矿"); + sender.sendMessage("§6/fykg auto off §7--关闭连锁挖矿"); + sender.sendMessage("§6/fykg auto toggle §7--切换连锁挖矿"); + sender.sendMessage("§6/fykg road on §7--启动快速砍树"); + sender.sendMessage("§6/fykg road off §7--关闭快速砍树"); + sender.sendMessage("§6/fykg road toggle §7--切换快速砍树"); + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + sender.sendMessage("§31 §8/ §32"); + } else { + sender.sendMessage(ChainMining.prefix + "§c 超出页面"); + } + } + break; + case "scope": + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + sender.sendMessage("§6/fycm all §7--切换快速砍树"); + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + break; + default: + sender.sendMessage(ChainMining.prefix + "§c 参数错误,输入 /fycm 查看指令帮助"); + break; + } + } + } else if ("status".equals(args[0])) { + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + sender.sendMessage("§6连锁挖矿:§3" + ChainMining.playerList.get(sender.getName()).get("chainMining")); + sender.sendMessage("§6快速砍树:§3" + ChainMining.playerList.get(sender.getName()).get("tree")); + sender.sendMessage("§6全局操作:§3" + ChainMining.playerList.get(sender.getName()).get("auto")); + sender.sendMessage("§6开路模式:§3" + ChainMining.playerList.get(sender.getName()).get("road")); + sender.sendMessage("§7§l§m=]========§2§l 连锁挖矿§a§lChainMining§7§l§m ========[="); + } else { + sender.sendMessage(ChainMining.prefix + "§c 输入 /fycm 查看指令帮助"); + } + } + } + return true; + } +} diff --git a/src/main/java/com/frontleaves/chainmining/listeners/CutTreeListener.java b/src/main/java/com/frontleaves/chainmining/listeners/CutTreeListener.java new file mode 100644 index 0000000..0aee9ca --- /dev/null +++ b/src/main/java/com/frontleaves/chainmining/listeners/CutTreeListener.java @@ -0,0 +1,864 @@ +package com.frontleaves.chainmining.listeners; + +import com.frontleaves.chainmining.ChainMining; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; +import org.jetbrains.annotations.NotNull; + +/** + * @author 锋楪技术(深圳)有限公司 + */ +public class CutTreeListener implements Listener { + + private int oakNumber; + // 本次木头(需要扣除耐久) + private Material thisBreak; + // 本次树叶 + private Material thisLeaves; + // 获取破坏位置 + private Location breakLocation; + private int relativeDistanceX; + private int relativeDistanceZ; + // 最大破坏能力 + private int damage; + private int maxDamage; + + @EventHandler + public void oakLog(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.OAK_LOG + || blockBreakEvent.getBlock().getType() == Material.STRIPPED_OAK_LOG) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisBreak = blockBreakEvent.getBlock().getType(); + thisLeaves = Material.OAK_LEAVES; + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(0, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void birchLog(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.BIRCH_LOG + || blockBreakEvent.getBlock().getType() == Material.STRIPPED_BIRCH_LOG) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisBreak = blockBreakEvent.getBlock().getType(); + thisLeaves = Material.BIRCH_LEAVES; + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(0, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void jungleLog(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.JUNGLE_LOG + || blockBreakEvent.getBlock().getType() == Material.STRIPPED_JUNGLE_LOG) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisBreak = blockBreakEvent.getBlock().getType(); + thisLeaves = Material.JUNGLE_LEAVES; + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(0, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void acaciaLog(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.ACACIA_LOG + || blockBreakEvent.getBlock().getType() == Material.STRIPPED_ACACIA_LOG) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisBreak = blockBreakEvent.getBlock().getType(); + thisLeaves = Material.ACACIA_LEAVES; + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(0, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void darkOrkLog(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.DARK_OAK_LOG + || blockBreakEvent.getBlock().getType() == Material.STRIPPED_DARK_OAK_LOG) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisBreak = blockBreakEvent.getBlock().getType(); + thisLeaves = Material.DARK_OAK_LEAVES; + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(0, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void mangroveLog(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.MANGROVE_LOG + || blockBreakEvent.getBlock().getType() == Material.STRIPPED_MANGROVE_LOG) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisBreak = blockBreakEvent.getBlock().getType(); + thisLeaves = Material.MANGROVE_LEAVES; + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(0, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void cherryLog(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.CHERRY_LOG + || blockBreakEvent.getBlock().getType() == Material.STRIPPED_CHERRY_LOG) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisBreak = blockBreakEvent.getBlock().getType(); + thisLeaves = Material.CHERRY_LEAVES; + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(0, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void crimsonStem(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.CRIMSON_STEM + || blockBreakEvent.getBlock().getType() == Material.STRIPPED_CRIMSON_STEM) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisBreak = blockBreakEvent.getBlock().getType(); + thisLeaves = Material.CRIMSON_FUNGUS; + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(0, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void warpedStem(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.WARPED_STEM + || blockBreakEvent.getBlock().getType() == Material.STRIPPED_WARPED_STEM) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisBreak = blockBreakEvent.getBlock().getType(); + thisLeaves = Material.WARPED_FUNGUS; + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(0, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void spruceLog(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.SPRUCE_LOG + || blockBreakEvent.getBlock().getType() == Material.STRIPPED_SPRUCE_LOG) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisBreak = blockBreakEvent.getBlock().getType(); + thisLeaves = Material.BIRCH_LEAVES; + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(0, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void oakLeaves(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.OAK_LEAVES) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisLeaves = blockBreakEvent.getBlock().getType(); + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(1, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void spruceLeaves(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.SPRUCE_LEAVES) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisLeaves = blockBreakEvent.getBlock().getType(); + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(1, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void birchLeaves(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.BIRCH_LEAVES) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisLeaves = blockBreakEvent.getBlock().getType(); + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(1, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void jungleLeaves(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.JUNGLE_LEAVES) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisLeaves = blockBreakEvent.getBlock().getType(); + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(1, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void acaciaLeaves(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.ACACIA_LEAVES) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisLeaves = blockBreakEvent.getBlock().getType(); + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(1, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void mangroveLeaves(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.MANGROVE_LEAVES) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisLeaves = blockBreakEvent.getBlock().getType(); + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(1, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void azaleaLeaves(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.AZALEA_LEAVES) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisLeaves = blockBreakEvent.getBlock().getType(); + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(1, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void cherryLeaves(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.CHERRY_LEAVES) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisLeaves = blockBreakEvent.getBlock().getType(); + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(1, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void floweringAzaleaLeaves(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.FLOWERING_AZALEA_LEAVES) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisLeaves = blockBreakEvent.getBlock().getType(); + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(1, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void bambooBlock(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.BAMBOO_BLOCK) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisLeaves = blockBreakEvent.getBlock().getType(); + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(1, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void crimsonFungus(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.CRIMSON_FUNGUS) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisLeaves = blockBreakEvent.getBlock().getType(); + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(1, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + @EventHandler + public void warpedFungus(@NotNull BlockBreakEvent blockBreakEvent) { + // 检查玩家是否开启 + if (ChainMining.playerList.get(blockBreakEvent.getPlayer().getName()).get("tree")) { + if (blockBreakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 检查能否掉落物品 + if (blockBreakEvent.getBlock().getType() == Material.WARPED_FUNGUS) { + // 初始化参数 + Damageable getPlayerItem = (Damageable) blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + thisLeaves = blockBreakEvent.getBlock().getType(); + breakLocation = blockBreakEvent.getBlock().getLocation(); + oakNumber = 0; + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + maxDamage = blockBreakEvent.getPlayer().getInventory().getItemInMainHand().getType().getMaxDurability(); + damage = getPlayerItem.getDamage(); + } + // 进行砍树 + anyWay(1, blockBreakEvent.getBlock()); + // 对物品造成破坏 + if (getPlayerItem != null && getPlayerItem.hasDamage()) { + if (damage + oakNumber < maxDamage) { + getPlayerItem.setDamage(damage + oakNumber); + blockBreakEvent.getPlayer().getInventory().getItemInMainHand().setItemMeta(getPlayerItem); + } else { + blockBreakEvent.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + blockBreakEvent.getPlayer().playSound(blockBreakEvent.getPlayer().getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } + } + } + } + } + } + + private void cutOakAndLeaves(@NotNull Block getBlock) { + while (getBlock.getType() == thisBreak) { + if (damage + oakNumber < maxDamage) { + relativeDistanceX = breakLocation.getBlockX() - getBlock.getLocation().getBlockX(); + relativeDistanceZ = breakLocation.getBlockZ() - getBlock.getLocation().getBlockZ(); + if (relativeDistanceX < 0) { + relativeDistanceX = -relativeDistanceX; + } + if (relativeDistanceZ < 0) { + relativeDistanceZ = -relativeDistanceZ; + } + if (relativeDistanceX <= 5 && relativeDistanceZ <= 5) { + getBlock.breakNaturally(); + oakNumber++; + anyWay(0, getBlock); + } else { + break; + } + } else { + break; + } + } + while (getBlock.getType() == thisLeaves) { + if (damage + oakNumber < maxDamage) { + relativeDistanceX = breakLocation.getBlockX() - getBlock.getLocation().getBlockX(); + relativeDistanceZ = breakLocation.getBlockZ() - getBlock.getLocation().getBlockZ(); + if (relativeDistanceX < 0) { + relativeDistanceX = -relativeDistanceX; + } + if (relativeDistanceZ < 0) { + relativeDistanceZ = -relativeDistanceZ; + } + if (relativeDistanceX <= 5 && relativeDistanceZ <= 5) { + getBlock.breakNaturally(); + anyWay(0, getBlock); + } else { + break; + } + } else { + break; + } + } + } + + private void cutLeaves(@NotNull Block getBlock) { + while (getBlock.getType() == thisLeaves) { + if (damage + oakNumber < maxDamage) { + relativeDistanceX = breakLocation.getBlockX() - getBlock.getLocation().getBlockX(); + relativeDistanceZ = breakLocation.getBlockZ() - getBlock.getLocation().getBlockZ(); + if (relativeDistanceX < 0) { + relativeDistanceX = -relativeDistanceX; + } + if (relativeDistanceZ < 0) { + relativeDistanceZ = -relativeDistanceZ; + } + if (relativeDistanceX <= 3 && relativeDistanceZ <= 3) { + getBlock.breakNaturally(); + oakNumber++; + anyWay(1, getBlock); + } else { + break; + } + } else { + break; + } + } + } + + private void anyWay(int cutType, Block getBlock) { + for (BlockFace blockFace : BlockFace.values()) { + if (cutType == 0 && blockFace == BlockFace.DOWN) { + continue; + } + Block sideBlock = getBlock.getRelative(blockFace); + if (sideBlock.getType() != Material.AIR) { + if (cutType == 0) { + cutOakAndLeaves(sideBlock); + } else { + cutLeaves(sideBlock); + } + } + } + } +} diff --git a/src/main/java/com/frontleaves/chainmining/listeners/MineralsListener.java b/src/main/java/com/frontleaves/chainmining/listeners/MineralsListener.java index db6a1f0..4f4eedd 100644 --- a/src/main/java/com/frontleaves/chainmining/listeners/MineralsListener.java +++ b/src/main/java/com/frontleaves/chainmining/listeners/MineralsListener.java @@ -1,5 +1,6 @@ package com.frontleaves.chainmining.listeners; +import com.frontleaves.chainmining.ChainMining; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.Sound; @@ -26,52 +27,55 @@ public class MineralsListener implements Listener { private static int damage; private static int maxDurability; + @EventHandler - public void coalBlock(BlockBreakEvent breakEvent) { - // 检测这个方块能否掉落 - if (breakEvent.getPlayer().isSneaking()) { - if (breakEvent.isDropItems()) { - Block getBlock = breakEvent.getBlock(); - if (getBlock.getType() == Material.COAL_ORE || getBlock.getType() == Material.DEEPSLATE_COAL_ORE - || getBlock.getType() == Material.LAPIS_ORE || getBlock.getType() == Material.DEEPSLATE_LAPIS_ORE - || getBlock.getType() == Material.COPPER_ORE || getBlock.getType() == Material.DEEPSLATE_COPPER_ORE - || getBlock.getType() == Material.IRON_ORE || getBlock.getType() == Material.DEEPSLATE_IRON_ORE - || getBlock.getType() == Material.GOLD_ORE || getBlock.getType() == Material.DEEPSLATE_GOLD_ORE - || getBlock.getType() == Material.DIAMOND_ORE || getBlock.getType() == Material.DEEPSLATE_DIAMOND_ORE - || getBlock.getType() == Material.REDSTONE_ORE || getBlock.getType() == Material.DEEPSLATE_REDSTONE_ORE - || getBlock.getType() == Material.EMERALD_ORE || getBlock.getType() == Material.DEEPSLATE_EMERALD_ORE - || getBlock.getType() == Material.NETHER_GOLD_ORE - || getBlock.getType() == Material.NETHER_QUARTZ_ORE - || getBlock.getType() == Material.ANCIENT_DEBRIS) { - if (breakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { - // 预备事务 - Player getPlayer = breakEvent.getPlayer(); // 获取破坏方块的玩家 - Damageable getPlayerDamageable = (Damageable) breakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); - maxDurability = getPlayer.getInventory().getItemInMainHand().getType().getMaxDurability(); - if (getPlayerDamageable != null && getPlayerDamageable.hasDamage()) { - // 最大耐久检查 - damage = getPlayerDamageable.getDamage(); - } - blockNumber = 0; - expToGive = 0; - if (maxDurability - damage > 0) { - // 执行操作 - callbackCorruption(breakEvent.getBlock()); - // 执行完毕处理完成事务 + public void minerals(BlockBreakEvent breakEvent) { + if (ChainMining.playerList.get(breakEvent.getPlayer().getName()).get("chainMining")) { + if (breakEvent.getPlayer().isSneaking()) { + // 检测这个方块能否掉落 + if (breakEvent.isDropItems()) { + Block getBlock = breakEvent.getBlock(); + if (getBlock.getType() == Material.COAL_ORE || getBlock.getType() == Material.DEEPSLATE_COAL_ORE + || getBlock.getType() == Material.LAPIS_ORE || getBlock.getType() == Material.DEEPSLATE_LAPIS_ORE + || getBlock.getType() == Material.COPPER_ORE || getBlock.getType() == Material.DEEPSLATE_COPPER_ORE + || getBlock.getType() == Material.IRON_ORE || getBlock.getType() == Material.DEEPSLATE_IRON_ORE + || getBlock.getType() == Material.GOLD_ORE || getBlock.getType() == Material.DEEPSLATE_GOLD_ORE + || getBlock.getType() == Material.DIAMOND_ORE || getBlock.getType() == Material.DEEPSLATE_DIAMOND_ORE + || getBlock.getType() == Material.REDSTONE_ORE || getBlock.getType() == Material.DEEPSLATE_REDSTONE_ORE + || getBlock.getType() == Material.EMERALD_ORE || getBlock.getType() == Material.DEEPSLATE_EMERALD_ORE + || getBlock.getType() == Material.NETHER_GOLD_ORE + || getBlock.getType() == Material.NETHER_QUARTZ_ORE + || getBlock.getType() == Material.ANCIENT_DEBRIS) { + if (breakEvent.getPlayer().getGameMode() == GameMode.SURVIVAL) { + // 预备事务 + Player getPlayer = breakEvent.getPlayer(); // 获取破坏方块的玩家 + Damageable getPlayerDamageable = (Damageable) breakEvent.getPlayer().getInventory().getItemInMainHand().getItemMeta(); + maxDurability = getPlayer.getInventory().getItemInMainHand().getType().getMaxDurability(); if (getPlayerDamageable != null && getPlayerDamageable.hasDamage()) { // 最大耐久检查 - if (maxDurability - damage - blockNumber <= 0) { - if (blockNumber == 0) { - breakEvent.setCancelled(true); - } - getPlayer.getInventory().setItemInMainHand(new ItemStack(Material.AIR)); - getPlayer.playSound(getPlayer.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); - } else { - getPlayerDamageable.setDamage(damage + blockNumber); - getPlayer.getInventory().getItemInMainHand().setItemMeta(getPlayerDamageable); - } + damage = getPlayerDamageable.getDamage(); + } + blockNumber = 0; + expToGive = 0; + if (maxDurability - damage > 0) { + // 执行操作 + callbackCorruption(breakEvent.getBlock()); + // 执行完毕处理完成事务 + if (getPlayerDamageable != null && getPlayerDamageable.hasDamage()) { + // 最大耐久检查 + if (maxDurability - damage - blockNumber <= 0) { + if (blockNumber == 0) { + breakEvent.setCancelled(true); + } + getPlayer.getInventory().setItemInMainHand(new ItemStack(Material.AIR)); + getPlayer.playSound(getPlayer.getLocation(), Sound.ENTITY_ITEM_BREAK, 1.0f, 1.0f); + } else { + getPlayerDamageable.setDamage(damage + blockNumber); + getPlayer.getInventory().getItemInMainHand().setItemMeta(getPlayerDamageable); + } + } + getPlayer.giveExp(expToGive); } - getPlayer.giveExp(expToGive); } } } diff --git a/src/main/java/com/frontleaves/chainmining/listeners/PlayerJoinServerListener.java b/src/main/java/com/frontleaves/chainmining/listeners/PlayerJoinServerListener.java new file mode 100644 index 0000000..c92de0e --- /dev/null +++ b/src/main/java/com/frontleaves/chainmining/listeners/PlayerJoinServerListener.java @@ -0,0 +1,30 @@ +package com.frontleaves.chainmining.listeners; + +import com.frontleaves.chainmining.ChainMining; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import java.util.HashMap; + +/** + * @author 锋楪技术(深圳)有限公司 + */ +public class PlayerJoinServerListener implements Listener { + + @EventHandler + public void playerJoinEvent(PlayerJoinEvent getPlayer) { + HashMap playerData = new HashMap<>(); + playerData.put("chainMining", true); + playerData.put("tree", true); + playerData.put("auto", false); + playerData.put("road", false); + ChainMining.playerList.put(getPlayer.getPlayer().getName(), playerData); + } + + @EventHandler + public void playerLeaveEvent(PlayerQuitEvent getPlayer) { + ChainMining.playerList.remove(getPlayer.getPlayer().getName()); + } +}