From 4239e076983cca8651a7a7ead12e00675ebd81c2 Mon Sep 17 00:00:00 2001 From: MiniDay <372403923@qq.com> Date: Mon, 5 Jun 2023 18:19:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(hamster-chain-break):=20=E5=B0=86=E6=8E=89?= =?UTF-8?q?=E8=90=BD=E7=89=A9=E9=9B=86=E4=B8=AD=E5=9C=A8=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=96=B9=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/chain/breaks/ChainBreakPlugin.java | 27 ++++++++++++ .../chain/breaks/listener/MainListener.java | 43 +++++++++++-------- .../chain/breaks/util/ChainBreakUtils.java | 4 +- .../src/main/resources/config.yml | 15 ++++--- .../src/main/resources/plugin.yml | 5 +++ 5 files changed, 69 insertions(+), 25 deletions(-) diff --git a/hamster-chain-break/src/main/java/cn/hamster3/mc/plugin/chain/breaks/ChainBreakPlugin.java b/hamster-chain-break/src/main/java/cn/hamster3/mc/plugin/chain/breaks/ChainBreakPlugin.java index 3486b58..bba4cba 100644 --- a/hamster-chain-break/src/main/java/cn/hamster3/mc/plugin/chain/breaks/ChainBreakPlugin.java +++ b/hamster-chain-break/src/main/java/cn/hamster3/mc/plugin/chain/breaks/ChainBreakPlugin.java @@ -3,7 +3,10 @@ package cn.hamster3.mc.plugin.chain.breaks; import cn.hamster3.mc.plugin.chain.breaks.core.ConfigManager; import cn.hamster3.mc.plugin.chain.breaks.listener.MainListener; import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.NotNull; public class ChainBreakPlugin extends JavaPlugin { private static ChainBreakPlugin instance; @@ -23,4 +26,28 @@ public class ChainBreakPlugin extends JavaPlugin { Bukkit.getPluginManager().registerEvents(MainListener.INSTANCE, this); } + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + if (args.length < 1) { + return true; + } + switch (args[0]) { + case "reload": { + if (!sender.hasPermission("hamster.chain.break.admin")) { + sender.sendMessage("§c你没有这个权限"); + return true; + } + ConfigManager.init(); + sender.sendMessage("§a插件重载完成"); + return true; + } + case "": { + + } + default: { + sender.sendMessage("§c未找到该指令"); + return true; + } + } + } } diff --git a/hamster-chain-break/src/main/java/cn/hamster3/mc/plugin/chain/breaks/listener/MainListener.java b/hamster-chain-break/src/main/java/cn/hamster3/mc/plugin/chain/breaks/listener/MainListener.java index 6d38811..132dcef 100644 --- a/hamster-chain-break/src/main/java/cn/hamster3/mc/plugin/chain/breaks/listener/MainListener.java +++ b/hamster-chain-break/src/main/java/cn/hamster3/mc/plugin/chain/breaks/listener/MainListener.java @@ -3,9 +3,7 @@ package cn.hamster3.mc.plugin.chain.breaks.listener; import cn.hamster3.mc.plugin.chain.breaks.config.ToolGroup; import cn.hamster3.mc.plugin.chain.breaks.core.ConfigManager; import cn.hamster3.mc.plugin.chain.breaks.util.ChainBreakUtils; -import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.Sound; +import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; @@ -45,18 +43,26 @@ public final class MainListener implements Listener { if (group == null) { return; } - if (!ChainBreakUtils.isToolGroupBlock(group, event.getBlock())) { + Block eventBlock = event.getBlock(); + if (!ChainBreakUtils.isToolGroupBlock(group, eventBlock)) { return; } - List resultBlocks = new ArrayList<>(); - bfsSearchBlock(group, resultBlocks, Collections.singletonList(event.getBlock())); - resultBlocks.remove(event.getBlock()); - if (resultBlocks.isEmpty()) { + List searchResultBlocks = new ArrayList<>(); + bfsSearchBlock(group, searchResultBlocks, Collections.singletonList(eventBlock)); + searchResultBlocks.remove(eventBlock); + if (searchResultBlocks.isEmpty()) { return; } + List dropItemList = new ArrayList<>(); + World blockWorld = eventBlock.getWorld(); + Location blockLocation = eventBlock.getLocation(); if (player.getGameMode() == GameMode.CREATIVE) { - for (Block block : resultBlocks) { - block.breakNaturally(stack); + for (Block block : searchResultBlocks) { + dropItemList.addAll(block.getDrops(stack, player)); + block.setType(Material.AIR, true); + } + for (ItemStack dropItem : dropItemList) { + blockWorld.dropItem(blockLocation, dropItem); } return; } @@ -65,17 +71,20 @@ public final class MainListener implements Listener { if (durability >= maxDurability) { return; } - for (Block block : resultBlocks) { + for (Block block : searchResultBlocks) { boolean leaves = block.getType().name().endsWith("_LEAVES"); - if (block.breakNaturally(stack)) { - if (!leaves) { - durability++; - if (durability >= maxDurability) { - break; - } + dropItemList.addAll(block.getDrops(stack, player)); + block.setType(Material.AIR, true); + if (!leaves) { + durability++; + if (durability >= maxDurability) { + break; } } } + for (ItemStack dropItem : dropItemList) { + blockWorld.dropItem(blockLocation, dropItem); + } if (durability >= maxDurability) { player.getInventory().setItemInMainHand(null); player.getWorld().playSound(player.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); diff --git a/hamster-chain-break/src/main/java/cn/hamster3/mc/plugin/chain/breaks/util/ChainBreakUtils.java b/hamster-chain-break/src/main/java/cn/hamster3/mc/plugin/chain/breaks/util/ChainBreakUtils.java index 95ac26a..1451d93 100644 --- a/hamster-chain-break/src/main/java/cn/hamster3/mc/plugin/chain/breaks/util/ChainBreakUtils.java +++ b/hamster-chain-break/src/main/java/cn/hamster3/mc/plugin/chain/breaks/util/ChainBreakUtils.java @@ -14,7 +14,7 @@ public class ChainBreakUtils { if (stack == null) { return null; } - String name = stack.getType().name().toLowerCase(); + String name = stack.getType().name(); for (ToolGroup group : ConfigManager.getToolGroups()) { for (String type : group.getToolTypes()) { if (name.matches(type)) { @@ -27,7 +27,7 @@ public class ChainBreakUtils { @SuppressWarnings("BooleanMethodIsAlwaysInverted") public static boolean isToolGroupBlock(@NotNull ToolGroup group, @NotNull Block block) { - String name = block.getType().name().toLowerCase(); + String name = block.getType().name(); for (String type : group.getBlockTypes()) { if (name.matches(type)) { return true; diff --git a/hamster-chain-break/src/main/resources/config.yml b/hamster-chain-break/src/main/resources/config.yml index d3dca2d..b9baf77 100644 --- a/hamster-chain-break/src/main/resources/config.yml +++ b/hamster-chain-break/src/main/resources/config.yml @@ -7,14 +7,17 @@ tool-groups: axe: # 该工具组内的物品名称,支持正则表达式匹配 tool-types: - - ".*_axe" + - ".*_AXE" + - "THERMAL_FLUX_SAW" # 该工具组内可以连锁破坏的方块,支持正则表达式匹配 block-types: - - ".*_wood" - - ".*_log" - - ".*_leaves" + - ".*_WOOD" + - ".*_LOG" + - ".*_LEAVES" pickaxe: tool-types: - - ".*_pickaxe" + - ".*_PICKAXE" + - ".*MANASTEEL_PICK" + - "THERMAL_FLUX_DRILL" block-types: - - ".*_ore" + - ".*_ORE" diff --git a/hamster-chain-break/src/main/resources/plugin.yml b/hamster-chain-break/src/main/resources/plugin.yml index 442d420..af271f7 100644 --- a/hamster-chain-break/src/main/resources/plugin.yml +++ b/hamster-chain-break/src/main/resources/plugin.yml @@ -6,3 +6,8 @@ api-version: 1.13 author: MiniDay website: https://github.com/MiniDay/hamster-little-plugins description: 仓鼠连锁破坏:一键挖矿 & 砍树 + +commands: + hamster-chain-break: + aliases: [ chain-break ] + description: 连锁破坏相关指令