No actually this will have to be 2.8.9
This commit is contained in:
parent
2476880a1f
commit
6ba1342408
@ -2,6 +2,8 @@ package com.massivecraft.massivecore.command.massivecore;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import com.massivecraft.massivecore.MassiveCorePerm;
|
import com.massivecraft.massivecore.MassiveCorePerm;
|
||||||
@ -12,6 +14,7 @@ import com.massivecraft.massivecore.command.Visibility;
|
|||||||
import com.massivecraft.massivecore.command.requirement.RequirementHasPerm;
|
import com.massivecraft.massivecore.command.requirement.RequirementHasPerm;
|
||||||
import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer;
|
import com.massivecraft.massivecore.command.requirement.RequirementIsPlayer;
|
||||||
import com.massivecraft.massivecore.command.type.TypeItemStack;
|
import com.massivecraft.massivecore.command.type.TypeItemStack;
|
||||||
|
import com.massivecraft.massivecore.command.type.primitive.TypeBoolean;
|
||||||
import com.massivecraft.massivecore.mson.Mson;
|
import com.massivecraft.massivecore.mson.Mson;
|
||||||
import com.massivecraft.massivecore.util.InventoryUtil;
|
import com.massivecraft.massivecore.util.InventoryUtil;
|
||||||
|
|
||||||
@ -26,6 +29,9 @@ public class CmdMassiveCoreTest extends MassiveCommand
|
|||||||
// Aliases
|
// Aliases
|
||||||
this.addAliases("test");
|
this.addAliases("test");
|
||||||
|
|
||||||
|
// Parameters
|
||||||
|
this.addParameter(false, TypeBoolean.getYes(), "set", "no");
|
||||||
|
|
||||||
// Requirements
|
// Requirements
|
||||||
this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.TEST.node));
|
this.addRequirements(RequirementHasPerm.get(MassiveCorePerm.TEST.node));
|
||||||
this.addRequirements(RequirementIsPlayer.get());
|
this.addRequirements(RequirementIsPlayer.get());
|
||||||
@ -41,6 +47,19 @@ public class CmdMassiveCoreTest extends MassiveCommand
|
|||||||
@Override
|
@Override
|
||||||
public void perform() throws MassiveException
|
public void perform() throws MassiveException
|
||||||
{
|
{
|
||||||
|
// Args
|
||||||
|
boolean set = this.readArg();
|
||||||
|
|
||||||
|
if (set)
|
||||||
|
{
|
||||||
|
InventoryUtil.setHelmet(me, new ItemStack(Material.DIAMOND_HELMET));
|
||||||
|
InventoryUtil.setChestplate(me, new ItemStack(Material.DIAMOND_CHESTPLATE));
|
||||||
|
InventoryUtil.setLeggings(me, new ItemStack(Material.DIAMOND_LEGGINGS));
|
||||||
|
InventoryUtil.setBoots(me, new ItemStack(Material.DIAMOND_BOOTS));
|
||||||
|
InventoryUtil.setWeapon(me, new ItemStack(Material.DIAMOND_SWORD));
|
||||||
|
InventoryUtil.setShield(me, new ItemStack(Material.DIRT));
|
||||||
|
}
|
||||||
|
|
||||||
inform("helmet", InventoryUtil.getHelmet(me));
|
inform("helmet", InventoryUtil.getHelmet(me));
|
||||||
inform("chestplate", InventoryUtil.getChestplate(me));
|
inform("chestplate", InventoryUtil.getChestplate(me));
|
||||||
inform("leggings", InventoryUtil.getLeggings(me));
|
inform("leggings", InventoryUtil.getLeggings(me));
|
||||||
@ -65,7 +84,7 @@ public class CmdMassiveCoreTest extends MassiveCommand
|
|||||||
|
|
||||||
public Mson visualize(ItemStack... items)
|
public Mson visualize(ItemStack... items)
|
||||||
{
|
{
|
||||||
List<Mson> msons = new MassiveList<>();
|
List<Mson> msons = new MassiveList<>(Mson.mson(String.valueOf(items.length)).color(ChatColor.AQUA));
|
||||||
for (ItemStack item : items)
|
for (ItemStack item : items)
|
||||||
{
|
{
|
||||||
msons.add(visualize(item));
|
msons.add(visualize(item));
|
||||||
|
@ -86,6 +86,23 @@ public class InventoryUtil
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This method is used to clean out inconsistent air entries.
|
||||||
|
public static ItemStack clean(ItemStack item)
|
||||||
|
{
|
||||||
|
if (item == null) return null;
|
||||||
|
if (item.getType() == Material.AIR) return null;
|
||||||
|
// NOTE: In 1.9 zero quantity is a thing.
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void clean(ItemStack[] items)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < items.length; i++)
|
||||||
|
{
|
||||||
|
items[i] = clean(items[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// SLOTS
|
// SLOTS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
@ -96,7 +113,9 @@ public class InventoryUtil
|
|||||||
{
|
{
|
||||||
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
||||||
if (playerInventory == null) return null;
|
if (playerInventory == null) return null;
|
||||||
return playerInventory.getHelmet();
|
ItemStack ret = playerInventory.getHelmet();
|
||||||
|
ret = clean(ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
public static void setHelmet(Inventory inventory, ItemStack helmet)
|
public static void setHelmet(Inventory inventory, ItemStack helmet)
|
||||||
{
|
{
|
||||||
@ -121,7 +140,9 @@ public class InventoryUtil
|
|||||||
{
|
{
|
||||||
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
||||||
if (playerInventory == null) return null;
|
if (playerInventory == null) return null;
|
||||||
return playerInventory.getChestplate();
|
ItemStack ret = playerInventory.getChestplate();
|
||||||
|
ret = clean(ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
public static void setChestplate(Inventory inventory, ItemStack chestplate)
|
public static void setChestplate(Inventory inventory, ItemStack chestplate)
|
||||||
{
|
{
|
||||||
@ -146,7 +167,9 @@ public class InventoryUtil
|
|||||||
{
|
{
|
||||||
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
||||||
if (playerInventory == null) return null;
|
if (playerInventory == null) return null;
|
||||||
return playerInventory.getLeggings();
|
ItemStack ret = playerInventory.getLeggings();
|
||||||
|
ret = clean(ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
public static void setLeggings(Inventory inventory, ItemStack leggings)
|
public static void setLeggings(Inventory inventory, ItemStack leggings)
|
||||||
{
|
{
|
||||||
@ -171,7 +194,9 @@ public class InventoryUtil
|
|||||||
{
|
{
|
||||||
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
||||||
if (playerInventory == null) return null;
|
if (playerInventory == null) return null;
|
||||||
return playerInventory.getBoots();
|
ItemStack ret = playerInventory.getBoots();
|
||||||
|
ret = clean(ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
public static void setBoots(Inventory inventory, ItemStack boots)
|
public static void setBoots(Inventory inventory, ItemStack boots)
|
||||||
{
|
{
|
||||||
@ -192,12 +217,16 @@ public class InventoryUtil
|
|||||||
|
|
||||||
// WEAPON
|
// WEAPON
|
||||||
|
|
||||||
|
// NOTE: We make sure to convert AIR into null due to a Bukkit API inconsistency.
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public static ItemStack getWeapon(Inventory inventory)
|
public static ItemStack getWeapon(Inventory inventory)
|
||||||
{
|
{
|
||||||
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
||||||
if (playerInventory == null) return null;
|
if (playerInventory == null) return null;
|
||||||
return playerInventory.getItemInHand();
|
ItemStack ret = playerInventory.getItemInHand();
|
||||||
|
ret = clean(ret);
|
||||||
|
return ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public static void setWeapon(Inventory inventory, ItemStack weapon)
|
public static void setWeapon(Inventory inventory, ItemStack weapon)
|
||||||
@ -210,7 +239,9 @@ public class InventoryUtil
|
|||||||
public static ItemStack getWeapon(HumanEntity human)
|
public static ItemStack getWeapon(HumanEntity human)
|
||||||
{
|
{
|
||||||
if (human == null) return null;
|
if (human == null) return null;
|
||||||
return human.getItemInHand();
|
ItemStack ret = human.getItemInHand();
|
||||||
|
ret = clean(ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public static void setWeapon(HumanEntity human, ItemStack weapon)
|
public static void setWeapon(HumanEntity human, ItemStack weapon)
|
||||||
@ -225,14 +256,22 @@ public class InventoryUtil
|
|||||||
{
|
{
|
||||||
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
||||||
if (playerInventory == null) return null;
|
if (playerInventory == null) return null;
|
||||||
if (playerInventory.getSize() <= INDEX_PLAYER_SHIELD) return null;
|
ItemStack[] contents = playerInventory.getContents();
|
||||||
return playerInventory.getItem(INDEX_PLAYER_SHIELD);
|
|
||||||
|
if (contents.length <= INDEX_PLAYER_SHIELD) return null;
|
||||||
|
|
||||||
|
ItemStack ret = contents[INDEX_PLAYER_SHIELD];
|
||||||
|
ret = clean(ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
public static void setShield(Inventory inventory, ItemStack shield)
|
public static void setShield(Inventory inventory, ItemStack shield)
|
||||||
{
|
{
|
||||||
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
||||||
if (playerInventory == null) return;
|
if (playerInventory == null) return;
|
||||||
if (playerInventory.getSize() <= INDEX_PLAYER_SHIELD) return;
|
ItemStack[] contents = playerInventory.getContents();
|
||||||
|
|
||||||
|
if (contents.length <= INDEX_PLAYER_SHIELD) return;
|
||||||
|
|
||||||
inventory.setItem(INDEX_PLAYER_SHIELD, shield);
|
inventory.setItem(INDEX_PLAYER_SHIELD, shield);
|
||||||
}
|
}
|
||||||
public static ItemStack getShield(HumanEntity human)
|
public static ItemStack getShield(HumanEntity human)
|
||||||
@ -249,30 +288,40 @@ public class InventoryUtil
|
|||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
// CONTENTS SECTIONS
|
// CONTENTS SECTIONS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
// When Reading:
|
||||||
|
// The content sections NPE evade and aim to behave as the latest Minecraft version.
|
||||||
|
// So rather than returning null for getContentsExtra() we create and return a new array.
|
||||||
|
//
|
||||||
|
// When Writing:
|
||||||
|
// ...
|
||||||
|
|
||||||
// All content varies over versions.
|
// All content varies over versions.
|
||||||
// Before 1.9 it was getContents() + getArmorContents().
|
// Before 1.9 it was getContents() + getArmorContents() + new ItemStack[1].
|
||||||
// From and including 1.9 it's just getContents().
|
// From and including 1.9 it's just getContents().
|
||||||
public static ItemStack[] getContentsAll(Inventory inventory)
|
public static ItemStack[] getContentsAll(Inventory inventory)
|
||||||
{
|
{
|
||||||
if (inventory == null) return null;
|
if (inventory == null) return null;
|
||||||
|
ItemStack[] contents = inventory.getContents();
|
||||||
|
ItemStack[] ret = contents;
|
||||||
|
|
||||||
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
||||||
if (playerInventory != null && inventory.getSize() == SIZE_PLAYER_STORAGE)
|
if (playerInventory != null && contents.length == SIZE_PLAYER_STORAGE)
|
||||||
{
|
{
|
||||||
return concat(playerInventory.getContents(), playerInventory.getArmorContents());
|
ret = concat(contents, playerInventory.getArmorContents(), new ItemStack[SIZE_PLAYER_EXTRA]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return inventory.getContents();
|
clean(ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
public static void setContentsAll(Inventory inventory, ItemStack[] all)
|
public static void setContentsAll(Inventory inventory, ItemStack[] all)
|
||||||
{
|
{
|
||||||
if (inventory == null) return;
|
if (inventory == null) return;
|
||||||
|
ItemStack[] contents = inventory.getContents();
|
||||||
|
|
||||||
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
||||||
if (playerInventory == null || (all.length == SIZE_PLAYER_ALL && inventory.getSize() == SIZE_PLAYER_ALL))
|
if (playerInventory == null)
|
||||||
{
|
{
|
||||||
inventory.setContents(all);
|
inventory.setContents(range(all, 0, contents.length));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -295,24 +344,30 @@ public class InventoryUtil
|
|||||||
public static ItemStack[] getContentsStorage(Inventory inventory)
|
public static ItemStack[] getContentsStorage(Inventory inventory)
|
||||||
{
|
{
|
||||||
if (inventory == null) return null;
|
if (inventory == null) return null;
|
||||||
ItemStack [] all = inventory.getContents();
|
ItemStack[] contents = inventory.getContents();
|
||||||
|
ItemStack[] ret = contents;
|
||||||
|
|
||||||
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
||||||
if (playerInventory == null) return all;
|
if (playerInventory != null)
|
||||||
|
{
|
||||||
|
ret = range(contents, INDEX_PLAYER_STORAGE_FROM, INDEX_PLAYER_STORAGE_TO);
|
||||||
|
}
|
||||||
|
|
||||||
return range(all, INDEX_PLAYER_STORAGE_FROM, INDEX_PLAYER_STORAGE_TO);
|
clean(ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
public static void setContentsStorage(Inventory inventory, ItemStack[] storage)
|
public static void setContentsStorage(Inventory inventory, ItemStack[] storage)
|
||||||
{
|
{
|
||||||
if (inventory == null) return;
|
if (inventory == null) return;
|
||||||
|
ItemStack[] contents = inventory.getContents();
|
||||||
|
|
||||||
// Calculate the exclusive maximum
|
// Calculate exclusive maximum
|
||||||
int max = inventory.getSize();
|
int max = Math.min(storage.length, contents.length);
|
||||||
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
||||||
if (playerInventory != null) max = INDEX_PLAYER_STORAGE_TO;
|
if (playerInventory != null) max = Math.min(max, INDEX_PLAYER_STORAGE_TO);
|
||||||
|
|
||||||
// Set as much as possible
|
// Set as much as possible
|
||||||
for (int i = 0; i < storage.length && i < max; i++)
|
for (int i = 0; i < max; i++)
|
||||||
{
|
{
|
||||||
inventory.setItem(i, storage[i]);
|
inventory.setItem(i, storage[i]);
|
||||||
}
|
}
|
||||||
@ -323,12 +378,17 @@ public class InventoryUtil
|
|||||||
{
|
{
|
||||||
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
||||||
if (playerInventory == null) return null;
|
if (playerInventory == null) return null;
|
||||||
return playerInventory.getArmorContents();
|
|
||||||
|
ItemStack[] ret = playerInventory.getArmorContents();
|
||||||
|
|
||||||
|
clean(ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
public static void setContentsArmor(Inventory inventory, ItemStack[] armor)
|
public static void setContentsArmor(Inventory inventory, ItemStack[] armor)
|
||||||
{
|
{
|
||||||
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
||||||
if (playerInventory == null) return;
|
if (playerInventory == null) return;
|
||||||
|
|
||||||
playerInventory.setArmorContents(armor);
|
playerInventory.setArmorContents(armor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -339,15 +399,31 @@ public class InventoryUtil
|
|||||||
{
|
{
|
||||||
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
PlayerInventory playerInventory = asPlayerInventory(inventory);
|
||||||
if (playerInventory == null) return null;
|
if (playerInventory == null) return null;
|
||||||
if (inventory.getSize() < INDEX_PLAYER_EXTRA_TO) return null;
|
ItemStack[] contents = playerInventory.getContents();
|
||||||
ItemStack [] all = inventory.getContents();
|
ItemStack[] ret = new ItemStack[SIZE_PLAYER_EXTRA];
|
||||||
return range(all, INDEX_PLAYER_EXTRA_FROM, INDEX_PLAYER_EXTRA_TO);
|
|
||||||
|
int max = SIZE_PLAYER_EXTRA;
|
||||||
|
max = Math.min(max, contents.length - INDEX_PLAYER_EXTRA_FROM);
|
||||||
|
|
||||||
|
for (int i = 0; i < max; i++)
|
||||||
|
{
|
||||||
|
ret[i] = contents[INDEX_PLAYER_EXTRA_FROM + i];
|
||||||
|
}
|
||||||
|
|
||||||
|
clean(ret);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
public static void setContentsExtra(Inventory intentory, ItemStack[] extra)
|
public static void setContentsExtra(Inventory intentory, ItemStack[] extra)
|
||||||
{
|
{
|
||||||
PlayerInventory playerInventory = asPlayerInventory(intentory);
|
PlayerInventory playerInventory = asPlayerInventory(intentory);
|
||||||
if (playerInventory == null) return;
|
if (playerInventory == null) return;
|
||||||
for (int i = 0; i < extra.length && INDEX_PLAYER_EXTRA_FROM + i < playerInventory.getSize(); i++)
|
ItemStack[] contents = playerInventory.getContents();
|
||||||
|
|
||||||
|
int max = SIZE_PLAYER_EXTRA;
|
||||||
|
max = Math.min(max, contents.length - INDEX_PLAYER_EXTRA_FROM);
|
||||||
|
max = Math.min(max, extra.length);
|
||||||
|
|
||||||
|
for (int i = 0; i < max; i++)
|
||||||
{
|
{
|
||||||
playerInventory.setItem(INDEX_PLAYER_EXTRA_FROM + i, extra[i]);
|
playerInventory.setItem(INDEX_PLAYER_EXTRA_FROM + i, extra[i]);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user