From e088b17a62b99722d9725be00eb8d93ee9b4f357 Mon Sep 17 00:00:00 2001 From: CTimet <92621765+CTimet@users.noreply.github.com> Date: Sat, 24 Sep 2022 11:22:47 +0800 Subject: [PATCH] [CI skip] update 20220924f0 --- pom.xml | 2 +- .../me/ctimet/specialbekt/BItemGroup.java | 16 +++ .../java/me/ctimet/specialbekt/BItems.java | 4 +- .../specialbekt/MachineProtectListener.java | 123 ++++++++++++++++++ src/main/java/me/ctimet/specialbekt/Main.java | 24 ++-- .../ctimet/specialbekt/data/PlayerBlock.java | 10 -- .../ctimet/specialbekt/data/PluginData.java | 2 +- .../specialbekt/data/SpecialRecipe.java | 7 - .../me/ctimet/specialbekt/data/StickData.java | 43 +----- .../me/ctimet/specialbekt/items/FixStick.java | 19 +-- .../specialbekt/items/RegisterStick.java | 6 +- .../java/me/ctimet/specialbekt/log/Chat.java | 1 - src/main/resources/block.dat | 0 src/main/resources/plugin.yml | 2 +- 14 files changed, 170 insertions(+), 89 deletions(-) create mode 100644 src/main/java/me/ctimet/specialbekt/BItemGroup.java create mode 100644 src/main/java/me/ctimet/specialbekt/MachineProtectListener.java delete mode 100644 src/main/java/me/ctimet/specialbekt/data/PlayerBlock.java delete mode 100644 src/main/java/me/ctimet/specialbekt/data/SpecialRecipe.java create mode 100644 src/main/resources/block.dat diff --git a/pom.xml b/pom.xml index 0355c9e..dedb0f7 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 me.ctimet specialbekt - 1.0-20220923f0 + 1.0-20220924f0 1.8 diff --git a/src/main/java/me/ctimet/specialbekt/BItemGroup.java b/src/main/java/me/ctimet/specialbekt/BItemGroup.java new file mode 100644 index 0000000..483ee79 --- /dev/null +++ b/src/main/java/me/ctimet/specialbekt/BItemGroup.java @@ -0,0 +1,16 @@ +package me.ctimet.specialbekt; + +import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup; +import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack; +import org.bukkit.Material; +import org.bukkit.NamespacedKey; + +public class BItemGroup { + private static final ItemGroup SPECIAL_BEKT_ITEM_GROUP = new ItemGroup(new NamespacedKey(Main.getInstance(), "SPECIAL_BEKT_ITEM_GROUP"), new CustomItemStack(Material.BEDROCK, "&lSpecialBekt")); + public static ItemGroup getSpecialBektItemGroup() { + return SPECIAL_BEKT_ITEM_GROUP; + } + public static void register() { + SPECIAL_BEKT_ITEM_GROUP.register(Main.getInstance()); + } +} diff --git a/src/main/java/me/ctimet/specialbekt/BItems.java b/src/main/java/me/ctimet/specialbekt/BItems.java index e56b1db..38787dd 100644 --- a/src/main/java/me/ctimet/specialbekt/BItems.java +++ b/src/main/java/me/ctimet/specialbekt/BItems.java @@ -30,7 +30,7 @@ public class BItems { ); public static void registerItems() { new RegisterStick( - Main.getSpecialBektItemGroup(), + BItemGroup.getSpecialBektItemGroup(), SPECIAL_BEKT_SUPERFIX_REG, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] { @@ -40,7 +40,7 @@ null, item(Material.STONE), null } ).register(Main.getInstance()); new FixStick( - Main.getSpecialBektItemGroup(), + BItemGroup.getSpecialBektItemGroup(), SPECIAL_BEKT_SUPERFIX_FIX, RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] { diff --git a/src/main/java/me/ctimet/specialbekt/MachineProtectListener.java b/src/main/java/me/ctimet/specialbekt/MachineProtectListener.java new file mode 100644 index 0000000..c3bc8a0 --- /dev/null +++ b/src/main/java/me/ctimet/specialbekt/MachineProtectListener.java @@ -0,0 +1,123 @@ +package me.ctimet.specialbekt; + +import io.github.thebusybiscuit.slimefun4.api.events.AndroidMineEvent; +import io.github.thebusybiscuit.slimefun4.api.events.BlockPlacerPlaceEvent; +import io.github.thebusybiscuit.slimefun4.api.events.ExplosiveToolBreakBlocksEvent; +import me.ctimet.specialbekt.data.StickData; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.*; +import org.bukkit.event.entity.EntityChangeBlockEvent; + +import java.util.Objects; + +public class MachineProtectListener implements Listener { + @EventHandler(priority = EventPriority.MONITOR) + public static void onPlace(BlockPlaceEvent event) + { + //方块放置 + protect(event.getBlock()); + } + + @EventHandler + public static void onBreak(BlockBreakEvent event) + { + //方块破坏 + protect(event.getBlock()); + } + + @EventHandler + public static void onIgnite(BlockIgniteEvent event) + { + //方块被燃烧 + protect(event.getBlock()); + } + + @EventHandler + public static void onPiston(BlockPistonExtendEvent event) + { + //活塞事件 + for (Block block : event.getBlocks()) protect(block); + } + + @EventHandler + public static void onBlockExp(BlockExpEvent event) + { + //方块爆炸事件 + exp(event.getBlock().getLocation()); + } + + @EventHandler + public static void onEntityChangeBlock(EntityChangeBlockEvent event) + { + //实体修改方块事件 + protect(event.getBlock()); + } + + @EventHandler + public static void onBlockDropItem(BlockDropItemEvent event) + { + //方块掉落事件 + protect(event.getBlock()); + } + + @EventHandler + public static void onAndroidBreakBlock(AndroidMineEvent event) + { + //机器人挖掘方块事件 + protect(event.getBlock()); + } + + @EventHandler + public static void onBlockPlayerPlace(BlockPlacerPlaceEvent event) + { + //BlockPlayer放置方块事件 + protect(event.getBlock()); + } + + @EventHandler + public static void onExplosiveToolBreakBlocks(ExplosiveToolBreakBlocksEvent event) + { + //爆炸工具爆炸事件 + protect(event.getPrimaryBlock()); + for (Block block : event.getAdditionalBlocks()) + { + protect(block); + } + } + + //------------------------------自动保护机制------------------------------// + + public static void protect(Block block) + { + Location location = block.getLocation(); + + String xyz = location.getX() + "&" + location.getY() + "&" + location.getZ() + "&" + Objects.requireNonNull(location.getWorld()).getName(); + + StickData.remove(xyz); + } + + //计算爆炸所伤害的方块 + static void exp(Location location) + { + double x = location.getX(); + double y = location.getY(); + double z = location.getZ(); + + double[] xs = new double[]{x-4,x-3,x-2,x-1,x,x+1,x+2,x+3,x+4}; + double[] ys = new double[]{y-3,y-2,y-1,y,y+1,y+2,y+3}; + double[] zs = new double[]{z-4,z-3,z-2,z-1,z,z+1,z+2,z+3,z+4}; + + for (double xxs : xs) { + for (double yys : ys) { + for (double zzs : zs) { + String lt = xxs + "&" + yys + "&" + zzs + "&" + Objects.requireNonNull(location.getWorld()).getName(); + StickData.remove(lt); + } + } + } + } +} diff --git a/src/main/java/me/ctimet/specialbekt/Main.java b/src/main/java/me/ctimet/specialbekt/Main.java index c71c80a..13dc7c8 100644 --- a/src/main/java/me/ctimet/specialbekt/Main.java +++ b/src/main/java/me/ctimet/specialbekt/Main.java @@ -1,30 +1,34 @@ package me.ctimet.specialbekt; import io.github.thebusybiscuit.slimefun4.api.SlimefunAddon; -import io.github.thebusybiscuit.slimefun4.api.items.ItemGroup; import io.github.thebusybiscuit.slimefun4.libraries.dough.config.Config; -import io.github.thebusybiscuit.slimefun4.libraries.dough.items.CustomItemStack; +import me.ctimet.specialbekt.data.StickData; import net.guizhanss.guizhanlib.updater.GuizhanBuildsUpdater; -import org.bukkit.Material; -import org.bukkit.NamespacedKey; +import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; public class Main extends JavaPlugin implements SlimefunAddon { private static Main instance; private static Config cfg; - private static final ItemGroup SPECIAL_BEKT_ITEM_GROUP = new ItemGroup(new NamespacedKey(Main.getInstance(), "SPECIAL_BEKT_ITEM_GROUP"), new CustomItemStack(Material.BEDROCK, "&lSpecialBekt")); @Override public void onEnable() { instance = this; cfg = new Config(this); + saveDefaultConfig(); + saveResource("block.dat", false); + BItemGroup.register(); BItems.registerItems(); - if (cfg.getBoolean("options.check-update")) - new GuizhanBuildsUpdater(instance, getFile(), "CTimet", "SpecialBekt", "master", false).start(); + StickData.readData(); + StickData.startTimer(); + Bukkit.getPluginManager().registerEvents(new MachineProtectListener(), this); +// if (cfg.getBoolean("options.check-update")) +// new GuizhanBuildsUpdater(instance, getFile(), "CTimet", "SpecialBekt", "master", false).start(); } @Override public void onDisable() { - + StickData.stopTimer(); + StickData.saveData(); } public static Config getCfg() { @@ -35,10 +39,6 @@ public static Main getInstance() { return instance; } - public static ItemGroup getSpecialBektItemGroup() { - return SPECIAL_BEKT_ITEM_GROUP; - } - @Override public JavaPlugin getJavaPlugin() { return this; diff --git a/src/main/java/me/ctimet/specialbekt/data/PlayerBlock.java b/src/main/java/me/ctimet/specialbekt/data/PlayerBlock.java deleted file mode 100644 index 847c601..0000000 --- a/src/main/java/me/ctimet/specialbekt/data/PlayerBlock.java +++ /dev/null @@ -1,10 +0,0 @@ -package me.ctimet.specialbekt.data; - -import org.bukkit.Material; - -import java.io.Serializable; - -public record PlayerBlock(String json, Material material) implements Serializable { - @java.io.Serial - private static final long serialVersionUID = 202208241312L; -} diff --git a/src/main/java/me/ctimet/specialbekt/data/PluginData.java b/src/main/java/me/ctimet/specialbekt/data/PluginData.java index 71ed88b..9e5044f 100644 --- a/src/main/java/me/ctimet/specialbekt/data/PluginData.java +++ b/src/main/java/me/ctimet/specialbekt/data/PluginData.java @@ -6,7 +6,7 @@ import java.io.File; public class PluginData { - private static final File BLOCK_DAT = new File("plugins/BedrockTechnology/block.dat"); + private static final File BLOCK_DAT = new File("plugins/SpecialBekt/block.dat"); public static void check() { if (!BLOCK_DAT.exists()) { diff --git a/src/main/java/me/ctimet/specialbekt/data/SpecialRecipe.java b/src/main/java/me/ctimet/specialbekt/data/SpecialRecipe.java deleted file mode 100644 index e52144f..0000000 --- a/src/main/java/me/ctimet/specialbekt/data/SpecialRecipe.java +++ /dev/null @@ -1,7 +0,0 @@ -package me.ctimet.specialbekt.data; - -import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; -import org.bukkit.inventory.ItemStack; - -public record SpecialRecipe(String itemName, ItemStack[] recipe, ItemStack make, SlimefunItemStack out) { -} diff --git a/src/main/java/me/ctimet/specialbekt/data/StickData.java b/src/main/java/me/ctimet/specialbekt/data/StickData.java index d36c00f..0d7173a 100644 --- a/src/main/java/me/ctimet/specialbekt/data/StickData.java +++ b/src/main/java/me/ctimet/specialbekt/data/StickData.java @@ -19,12 +19,11 @@ public class StickData { private static final Timer TIMER = new Timer(); private static final Config CONFIG = Main.getCfg(); - private static final File TEMP_DAT = new File("plugins/BedrockTechnology/temp.dat"); + private static final File TEMP_DAT = new File("plugins/SpecialBekt/temp.dat"); private static final File BLOCK_DAT = PluginData.getBlockDat(); - private static HashMap RegisterBlockData = new HashMap<>(); + private static HashMap RegisterBlockData = new HashMap<>(); private static boolean ReadFinish = false; - private static boolean ThrowException = false; private static int WaitListSize = 0; /** @@ -56,16 +55,6 @@ public static void saveData() { saveRegisterBlockData(BLOCK_DAT); } - /** - *

这个方法仅在op使用

- *

/bedrocktechnology(bekt) reload

- *

时调用

- */ - public static void reloadData() { - if (ReadFinish) ReadFinish = false; - readData(); - } - /** * 这个方法将启动BedrockTechnology的自动保存计时器 */ @@ -141,39 +130,22 @@ public static void remove(String key) { /** * 得到方块数据 * @param key 通过坐标计算得来的key - * @return 方块的BlockData + * @return 方块数据 */ - public static PlayerBlock getBlockData(String key) { + public static String getBlockData(String key) { return RegisterBlockData.get(key); } /** * 向RegisterBlockData中放置方块数据 * @param key 通过坐标计算得来的关键字 - * @param value 方块的BlockData + * @param value 方块数据 */ - public static void putBlockData(String key, PlayerBlock value) { + public static void putBlockData(String key, String value) { RegisterBlockData.put(key,value); addWait(); } - - /** - * 这个方法将返回是否未读取完成 - * @return 是否仍然未读取完成 - */ - public static boolean isNotReadFinish() { - return !ReadFinish; - } - - /** - * return now read situation - * @return read situation, a String - */ - public static String getReadSituation() { - return ThrowException ? "读取发生异常,请向管理汇报" : (ReadFinish ? "读取完成" : "读取尚未完成,请稍加等待"); - } - /** * read the register data * @param file file for save register data @@ -181,7 +153,7 @@ public static String getReadSituation() { @SuppressWarnings("unchecked") private static void readRegisterBlockData(File file) { try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(file))) { - RegisterBlockData = (HashMap) in.readObject(); + RegisterBlockData = (HashMap) in.readObject(); ReadFinish = true; } catch (EOFException e) { //出现 EOF 往往都是文件第一次创建时导致的,此时我们只需把RegisterBlockData初始化即可,无需打印堆栈 @@ -189,7 +161,6 @@ private static void readRegisterBlockData(File file) { ReadFinish = true; } catch (IOException | ClassNotFoundException e) { ExceptionHandler.writeException(e, "readRegisterBlockData", "在读取注册数据时抛出异常", StickData.class); - ThrowException = true; } } diff --git a/src/main/java/me/ctimet/specialbekt/items/FixStick.java b/src/main/java/me/ctimet/specialbekt/items/FixStick.java index 023aac1..1b9924d 100644 --- a/src/main/java/me/ctimet/specialbekt/items/FixStick.java +++ b/src/main/java/me/ctimet/specialbekt/items/FixStick.java @@ -6,13 +6,11 @@ import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItemStack; import io.github.thebusybiscuit.slimefun4.api.recipes.RecipeType; import io.github.thebusybiscuit.slimefun4.core.handlers.ItemUseHandler; -import me.ctimet.specialbekt.data.PlayerBlock; import me.ctimet.specialbekt.data.StickData; import me.ctimet.specialbekt.log.Chat; import me.ctimet.specialbekt.log.Color; import me.mrCookieSlime.Slimefun.api.BlockStorage; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.inventory.ItemStack; @@ -43,18 +41,13 @@ private static void onClick(PlayerRightClickEvent event) { String xyz = location.getX() + "&" + location.getY() + "&" + location.getZ() + "&" + Objects.requireNonNull(location.getWorld()).getName(); - PlayerBlock pb = StickData.getBlockData(xyz); - if (pb != null) { - Material material = pb.material(); - if (material == block.getType()) { - BlockStorage.setBlockInfo(block, pb.json(), true); - StickData.remove(xyz); - chat.sendInfo("方块已修复"); - } else { - chat.sendErr("方块类型匹配错误!插件无法修复方块"); - } + String json = StickData.getBlockData(xyz); + if (json != null) { + BlockStorage.setBlockInfo(block, json, true); + StickData.remove(xyz); + chat.sendInfo("方块已被修复"); } else { - chat.sendMessageWithoutHead("该方块未被注册,插件无法修复", Color.YELLOW); + chat.sendErr("该方块未被注册,不可修复!"); } } } diff --git a/src/main/java/me/ctimet/specialbekt/items/RegisterStick.java b/src/main/java/me/ctimet/specialbekt/items/RegisterStick.java index 9605aa7..3c0aa96 100644 --- a/src/main/java/me/ctimet/specialbekt/items/RegisterStick.java +++ b/src/main/java/me/ctimet/specialbekt/items/RegisterStick.java @@ -1,7 +1,6 @@ package me.ctimet.specialbekt.items; import me.ctimet.specialbekt.log.Chat; -import me.ctimet.specialbekt.data.PlayerBlock; import me.ctimet.specialbekt.data.StickData; import me.ctimet.specialbekt.log.Color; import io.github.thebusybiscuit.slimefun4.api.events.PlayerRightClickEvent; @@ -44,8 +43,6 @@ public static void registerBlock(Player player, Block block) { return; } - String Json = BlockStorage.getBlockInfoAsJson(block); - Location location = block.getLocation(); String xyz = location.getX() + "&" + location.getY() + "&" + location.getZ() + "&" + Objects.requireNonNull(location.getWorld()).getName(); @@ -54,8 +51,7 @@ public static void registerBlock(Player player, Block block) { return; } - PlayerBlock pb = new PlayerBlock(Json, block.getType()); - StickData.putBlockData(xyz, pb); + StickData.putBlockData(xyz, BlockStorage.getBlockInfoAsJson(block)); chat.sendMessageWithoutHead("方块已成功注册", Color.GREEN); } diff --git a/src/main/java/me/ctimet/specialbekt/log/Chat.java b/src/main/java/me/ctimet/specialbekt/log/Chat.java index e9f13f9..18fb6d0 100644 --- a/src/main/java/me/ctimet/specialbekt/log/Chat.java +++ b/src/main/java/me/ctimet/specialbekt/log/Chat.java @@ -1,6 +1,5 @@ package me.ctimet.specialbekt.log; -import me.ctimet.specialbekt.chat.Color; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/src/main/resources/block.dat b/src/main/resources/block.dat new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index c696723..0c8b95f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: SpecialBekt author: CTimet description: A generic Slimefun4-Addon -main: me.ctimet.specialbekt +main: me.ctimet.specialbekt.Main website: https://github.com/CTimet/SpecialBekt version: ${project.version} api-version: 1.17