diff --git a/pom.xml b/pom.xml
index eef4f47b..117de595 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
vg.civcraft.mc.citadel
Citadel
jar
- 3.11.5
+ 3.11.6
Citadel
https://github.com/Devotedmc/Citadel
diff --git a/src/vg/civcraft/mc/citadel/Utility.java b/src/vg/civcraft/mc/citadel/Utility.java
index c2b13d0a..11d40a99 100644
--- a/src/vg/civcraft/mc/citadel/Utility.java
+++ b/src/vg/civcraft/mc/citadel/Utility.java
@@ -229,6 +229,74 @@ public static PlayerReinforcement createPlayerReinforcement(Player player, Group
return rein;
}
+ public static boolean createTheoreticalReinforcement(Player player, Group g, Block block, ReinforcementType type, ItemStack reinfMat) {
+ if (player == null || g == null || block == null || type == null) {
+ return false;
+ }
+
+ if (g.isDisciplined()) {
+ return false;
+ }
+ if (NonReinforceableType.isNonReinforceable(block.getType())){
+
+ return false;
+ }
+
+ if (!NameAPI.getGroupManager().hasAccess(g.getName(), player.getUniqueId(), PermissionType.getPermission("REINFORCE"))) {
+ return false;
+ }
+
+ // Find necessary itemstacks
+ final PlayerInventory inv = player.getInventory();
+ final int invSize = inv.getSize();
+ final ItemStack itemType = type.getItemStack();
+ List slots = new ArrayList(type.getRequiredAmount());
+ int requirementscheck = type.getRequiredAmount();
+ if (requirementscheck <= 0) {
+ return false;
+ }
+ if (reinfMat != null && itemType.isSimilar(reinfMat)){ // only in CTF.
+ requirementscheck++;
+ }
+ int requirements = requirementscheck;
+ boolean consumeOffhand = false;
+ try {
+ //offhand needs special handling
+
+ ItemStack offSlot = inv.getItemInOffHand();
+ if (offSlot != null && offSlot.isSimilar(itemType)) {
+ requirementscheck -= offSlot.getAmount();
+ consumeOffhand = true;
+ }
+ //cycle through normal inventory
+ for (int slot = 0; slot < invSize && requirements > 0; ++slot) {
+ final ItemStack slotItem = inv.getItem(slot);
+ if (slotItem == null) {
+ continue;
+ }
+ if (!slotItem.isSimilar(itemType)) {
+ continue;
+ }
+ requirementscheck -= slotItem.getAmount();
+ slots.add(slot);
+ }
+ } catch (Exception ex) {
+ // Eat any inventory size mis-match exceptions, like with the Anvil
+ }
+ if (requirementscheck > 0) {
+ // Not enough reinforcement material
+ return false;
+ }
+ // Fire the creation event
+ PlayerReinforcement rein = new PlayerReinforcement(block.getLocation(),
+ type.getHitPoints(), getIntFormofMaturation(System.currentTimeMillis(),type.getItemStack()),
+ getIntFormofAcidMaturation(System.currentTimeMillis(),type.getItemStack()),
+ g, type.getItemStack());
+ ReinforcementCreationEvent event = new ReinforcementCreationEvent(rein, block, player);
+ Bukkit.getPluginManager().callEvent(event);
+ return true;
+ }
+
/**
* Creates a player reinforcement without consuming any materials. This should only be used
* for admin tools