Skip to content

Commit

Permalink
[CI skip] update 20220924f0
Browse files Browse the repository at this point in the history
  • Loading branch information
CTimet committed Sep 24, 2022
1 parent b47475e commit e088b17
Show file tree
Hide file tree
Showing 14 changed files with 170 additions and 89 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>me.ctimet</groupId>
<artifactId>specialbekt</artifactId>
<version>1.0-20220923f0</version>
<version>1.0-20220924f0</version>

<properties>
<maven.compiler.source>1.8</maven.compiler.source>
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/me/ctimet/specialbekt/BItemGroup.java
Original file line number Diff line number Diff line change
@@ -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());
}
}
4 changes: 2 additions & 2 deletions src/main/java/me/ctimet/specialbekt/BItems.java
Original file line number Diff line number Diff line change
Expand Up @@ -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[] {
Expand All @@ -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[] {
Expand Down
123 changes: 123 additions & 0 deletions src/main/java/me/ctimet/specialbekt/MachineProtectListener.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
}
}
24 changes: 12 additions & 12 deletions src/main/java/me/ctimet/specialbekt/Main.java
Original file line number Diff line number Diff line change
@@ -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() {
Expand All @@ -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;
Expand Down
10 changes: 0 additions & 10 deletions src/main/java/me/ctimet/specialbekt/data/PlayerBlock.java

This file was deleted.

2 changes: 1 addition & 1 deletion src/main/java/me/ctimet/specialbekt/data/PluginData.java
Original file line number Diff line number Diff line change
Expand Up @@ -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()) {
Expand Down
7 changes: 0 additions & 7 deletions src/main/java/me/ctimet/specialbekt/data/SpecialRecipe.java

This file was deleted.

43 changes: 7 additions & 36 deletions src/main/java/me/ctimet/specialbekt/data/StickData.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, PlayerBlock> RegisterBlockData = new HashMap<>();
private static HashMap<String, String> RegisterBlockData = new HashMap<>();
private static boolean ReadFinish = false;
private static boolean ThrowException = false;
private static int WaitListSize = 0;

/**
Expand Down Expand Up @@ -56,16 +55,6 @@ public static void saveData() {
saveRegisterBlockData(BLOCK_DAT);
}

/**
* <p>这个方法仅在op使用</p>
* <p>/bedrocktechnology(bekt) reload</p>
* <p>时调用</p>
*/
public static void reloadData() {
if (ReadFinish) ReadFinish = false;
readData();
}

/**
* 这个方法将启动BedrockTechnology的自动保存计时器
*/
Expand Down Expand Up @@ -141,55 +130,37 @@ 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
*/
@SuppressWarnings("unchecked")
private static void readRegisterBlockData(File file) {
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(file))) {
RegisterBlockData = (HashMap<String, PlayerBlock>) in.readObject();
RegisterBlockData = (HashMap<String, String>) in.readObject();
ReadFinish = true;
} catch (EOFException e) {
//出现 EOF 往往都是文件第一次创建时导致的,此时我们只需把RegisterBlockData初始化即可,无需打印堆栈
RegisterBlockData = new HashMap<>();
ReadFinish = true;
} catch (IOException | ClassNotFoundException e) {
ExceptionHandler.writeException(e, "readRegisterBlockData", "在读取注册数据时抛出异常", StickData.class);
ThrowException = true;
}
}

Expand Down
19 changes: 6 additions & 13 deletions src/main/java/me/ctimet/specialbekt/items/FixStick.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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("该方块未被注册,不可修复!");
}
}
}
Loading

0 comments on commit e088b17

Please sign in to comment.