diff --git a/pom.xml b/pom.xml index 58c949a..8e26257 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ site.deercloud LiteWorldEdit - 1.4-SNAPSHOT + 1.5.12-SNAPSHOT jar LiteWorldEdit diff --git a/src/main/java/site/deercloud/liteworldedit/Jobs/Place.java b/src/main/java/site/deercloud/liteworldedit/Jobs/Place.java index 23084ec..460b871 100644 --- a/src/main/java/site/deercloud/liteworldedit/Jobs/Place.java +++ b/src/main/java/site/deercloud/liteworldedit/Jobs/Place.java @@ -2,12 +2,17 @@ package site.deercloud.liteworldedit.Jobs; import org.bukkit.*; import org.bukkit.block.Block; +import org.bukkit.block.ShulkerBox; import org.bukkit.entity.Player; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BlockStateMeta; import site.deercloud.liteworldedit.LoggerX; +import java.util.HashMap; + public class Place extends Job { private final Material _block; @@ -35,14 +40,22 @@ public class Place extends Job { return JobErrCode.NOT_AIR_BLOCK; } // 获取到玩家物品中材料的第一个堆叠 + ItemStack stack; int stack_index = _inventory.first(_block); if (stack_index == -1) { - LoggerX.debug("玩家物品中没有该材料!"); - return JobErrCode.NOT_ENOUGH_ITEMS; + // 物品栏没有就去潜影盒里找 + if (!moveBlockFromShulkerBoxToInv()) { + return JobErrCode.NOT_ENOUGH_ITEMS; + } + stack_index = _inventory.first(_block); + if (stack_index == -1) { + LoggerX.debug("物品中没有该材料!"); + return JobErrCode.NOT_ENOUGH_ITEMS; + } } - ItemStack stack = _inventory.getItem(stack_index); + stack = _inventory.getItem(stack_index); if (stack == null) { - LoggerX.debug("获取到的物品为空!"); + LoggerX.debug("物品中没有该材料!"); return JobErrCode.NOT_ENOUGH_ITEMS; } @@ -65,4 +78,40 @@ public class Place extends Job { return JobErrCode.NO_PERMISSION; } } + + private boolean moveBlockFromShulkerBoxToInv() { + HashMap shulkerBoxes = _inventory.all(Material.SHULKER_BOX); + for (Integer index : shulkerBoxes.keySet()) { + LoggerX.debug("找到潜影盒:" + index); + ItemStack itemStack = _inventory.getItem(index); + if (itemStack == null) { + continue; + } + if (!(itemStack.getItemMeta() instanceof BlockStateMeta)) { + LoggerX.debug("不是BlockStateMeta!"); + continue; + } + BlockStateMeta meta = (BlockStateMeta) itemStack.getItemMeta(); + if (!(meta.getBlockState() instanceof ShulkerBox)) { + LoggerX.debug("不是潜影盒!"); + continue; + } + ShulkerBox shulkerBox = (ShulkerBox) meta.getBlockState(); + Inventory boxInv = shulkerBox.getInventory(); + int item_idx = boxInv.first(_block); + if (item_idx == -1) { + return false; + } + // 把物品放到玩家物品栏 + _inventory.addItem(boxInv.getItem(item_idx)); + // 把潜影盒中的物品移除 + shulkerBox.getInventory().setItem(item_idx, null); + // 更新潜影盒 + meta.setBlockState(shulkerBox); + itemStack.setItemMeta(meta); + return true; + } + LoggerX.debug("潜影盒中没有该材料!"); + return false; + } } diff --git a/src/main/java/site/deercloud/liteworldedit/LiteWorldEdit.java b/src/main/java/site/deercloud/liteworldedit/LiteWorldEdit.java index dc77a28..ad10244 100644 --- a/src/main/java/site/deercloud/liteworldedit/LiteWorldEdit.java +++ b/src/main/java/site/deercloud/liteworldedit/LiteWorldEdit.java @@ -36,7 +36,7 @@ public final class LiteWorldEdit extends JavaPlugin { break; } if (re.canContinue()) { - job.get_creator().sendTitle("§c警告", "§c" + re.getMessage(), 10, 70, 20); + job.get_creator().sendTitle("§e警告", "§e" + re.getMessage(), 10, 70, 20); job = _cache.getOneJob(); if (job == null) { return;