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;