use of net.minecraft.server.v1_12_R1.Item in project PGM by PGMDev.
the class NMSHacks method canMineBlock.
/**
* Test if the given tool is capable of "efficiently" mining the given block.
*
* <p>Derived from CraftBlock.itemCausesDrops()
*/
static boolean canMineBlock(MaterialData blockMaterial, ItemStack tool) {
if (!blockMaterial.getItemType().isBlock()) {
throw new IllegalArgumentException("Material '" + blockMaterial + "' is not a block");
}
net.minecraft.server.v1_8_R3.Block nmsBlock = CraftMagicNumbers.getBlock(blockMaterial.getItemType());
net.minecraft.server.v1_8_R3.Item nmsTool = tool == null ? null : CraftMagicNumbers.getItem(tool.getType());
return nmsBlock != null && (nmsBlock.getMaterial().isAlwaysDestroyable() || (nmsTool != null && nmsTool.canDestroySpecialBlock(nmsBlock)));
}
use of net.minecraft.server.v1_12_R1.Item in project TheAPI by TheDevTec.
the class v1_12_R1 method processInvClickPacket.
@Override
public boolean processInvClickPacket(Player player, HolderGUI gui, Object provPacket) {
PacketPlayInWindowClick packet = (PacketPlayInWindowClick) provPacket;
int slot = packet.b();
if (slot == -999)
return false;
int id = packet.a();
int mouseClick = packet.c();
net.minecraft.server.v1_12_R1.InventoryClickType nmsType = packet.f();
InventoryClickType type = InventoryClickType.valueOf(nmsType.name());
Object container = gui.getContainer(player);
ItemStack item = asBukkitItem(packet.e());
if ((type == InventoryClickType.QUICK_MOVE || type == InventoryClickType.CLONE || type == InventoryClickType.THROW || item.getType() == Material.AIR) && item.getType() == Material.AIR)
item = asBukkitItem(getSlotItem(container, slot));
boolean cancel = false;
if (InventoryClickType.SWAP == type) {
item = player.getInventory().getItem(mouseClick);
mouseClick = 0;
cancel = true;
}
if (item == null)
item = new ItemStack(Material.AIR);
ItemStack before = player.getItemOnCursor();
ClickType clickType = BukkitLoader.buildClick(item, type, slot, mouseClick);
if (!cancel)
cancel = BukkitLoader.useItem(player, item, gui, slot, clickType);
if (!gui.isInsertable())
cancel = true;
int gameSlot = slot > gui.size() - 1 ? InventoryUtils.convertToPlayerInvSlot(slot - gui.size()) : slot;
if (!cancel)
cancel = gui.onIteractItem(player, item, clickType, gameSlot, slot < gui.size());
else
gui.onIteractItem(player, item, clickType, gameSlot, slot < gui.size());
int position = 0;
if (!cancel && type == InventoryClickType.QUICK_MOVE) {
ItemStack[] contents = slot < gui.size() ? player.getInventory().getStorageContents() : gui.getInventory().getStorageContents();
List<Integer> modified = slot < gui.size() ? InventoryUtils.shift(slot, player, gui, clickType, gui instanceof AnvilGUI ? DestinationType.PLAYER_INV_ANVIL : DestinationType.PLAYER_INV_CUSTOM_INV, null, contents, item) : InventoryUtils.shift(slot, player, gui, clickType, DestinationType.CUSTOM_INV, gui.getNotInterableSlots(player), contents, item);
if (!modified.isEmpty()) {
if (slot < gui.size()) {
boolean canRemove = !modified.contains(-1);
player.getInventory().setStorageContents(contents);
if (canRemove) {
gui.remove(gameSlot);
} else {
gui.getInventory().setItem(gameSlot, item);
}
} else {
boolean canRemove = !modified.contains(-1);
gui.getInventory().setStorageContents(contents);
if (canRemove) {
player.getInventory().setItem(gameSlot, null);
} else {
player.getInventory().setItem(gameSlot, item);
}
}
}
return true;
}
if (cancel) {
// MOUSE
BukkitLoader.getPacketHandler().send(player, packetSetSlot(-1, -1, asNMSItem(before)));
switch(type) {
case CLONE:
return true;
case SWAP:
case QUICK_MOVE:
case PICKUP_ALL:
// TOP
for (ItemStack cItem : gui.getInventory().getContents()) {
BukkitLoader.getPacketHandler().send(player, packetSetSlot(id, position++, asNMSItem(cItem)));
}
// BUTTON
player.updateInventory();
return true;
default:
BukkitLoader.getPacketHandler().send(player, packetSetSlot(id, slot, getSlotItem(container, slot)));
if (gui instanceof AnvilGUI) {
// TOP
for (ItemStack cItem : gui.getInventory().getContents()) {
if (position != slot)
BukkitLoader.getPacketHandler().send(player, packetSetSlot(id, position++, asNMSItem(cItem)));
}
// BUTTON
player.updateInventory();
}
return true;
}
} else {
if (gui instanceof AnvilGUI && slot == 2)
postToMainThread(() -> ((ContainerAnvil) container).shiftClick((EntityPlayer) getPlayer(player), slot));
}
return false;
}
use of net.minecraft.server.v1_12_R1.Item in project Autumn by joeengo.
the class ServerUtil method isIllegal.
public static boolean isIllegal(ItemStack item, boolean isInsideShulker) {
if (item == null)
return false;
net.minecraft.server.v1_12_R1.ItemStack nmscopy = CraftItemStack.asNMSCopy(item);
if (nmscopy.hasTag()) {
NBTTagCompound tag = nmscopy.getTag();
assert tag != null;
if (tag.get("AttributeModifiers") != null) {
return true;
}
if (tag.get("Unbreakable") != null) {
return true;
}
}
if (item.getDurability() > item.getType().getMaxDurability() && item.getType().getMaxDurability() > 0) {
return true;
}
;
try {
if (item.getEnchantments() != null) {
Map<Enchantment, Integer> ench = item.getEnchantments();
for (Map.Entry<Enchantment, Integer> entry : ench.entrySet()) {
Enchantment enchant = entry.getKey();
int enchantLvl = entry.getValue();
if (enchantLvl > enchant.getMaxLevel()) {
return true;
}
}
}
} catch (Exception e) {
}
if (MaterialHandler.isIllegalMaterial(item.getType()))
return true;
if ((isShulker(item) && Plugin.Instance.getConfig().getBoolean("Illegals.RevertShulkers"))) {
if (isInsideShulker)
return true;
for (ItemStack i : getShulkerInventory(item).getContents()) {
if (isIllegal(i, true)) {
return true;
}
}
}
if ((item.getAmount() > item.getMaxStackSize()) && Plugin.Instance.getConfig().getBoolean("Illegals.RevertOverstacks"))
return true;
return false;
}
use of net.minecraft.server.v1_12_R1.Item in project PaperDev by Kamillaova.
the class CraftItemStack method setItemMeta.
public static boolean setItemMeta(net.minecraft.server.v1_12_R1.ItemStack item, ItemMeta itemMeta) {
if (item == null) {
return false;
}
if (CraftItemFactory.instance().equals(itemMeta, null)) {
item.setTag(null);
return true;
}
if (!CraftItemFactory.instance().isApplicable(itemMeta, getType(item))) {
return false;
}
itemMeta = CraftItemFactory.instance().asMetaFor(itemMeta, getType(item));
if (itemMeta == null)
return true;
NBTTagCompound tag = new NBTTagCompound();
item.setTag(tag);
((CraftMetaItem) itemMeta).applyToItem(tag);
item.convertStack();
return true;
}
use of net.minecraft.server.v1_12_R1.Item in project PaperDev by Kamillaova.
the class CraftItemStack method asNMSCopy.
public static net.minecraft.server.v1_12_R1.ItemStack asNMSCopy(ItemStack original) {
if (original instanceof CraftItemStack) {
CraftItemStack stack = (CraftItemStack) original;
return stack.handle == null ? net.minecraft.server.v1_12_R1.ItemStack.a : stack.handle.cloneItemStack();
}
if (original == null || original.getTypeId() <= 0) {
return net.minecraft.server.v1_12_R1.ItemStack.a;
}
Item item = CraftMagicNumbers.getItem(original.getType());
if (item == null) {
return net.minecraft.server.v1_12_R1.ItemStack.a;
}
net.minecraft.server.v1_12_R1.ItemStack stack = new net.minecraft.server.v1_12_R1.ItemStack(item, original.getAmount(), original.getDurability(), false);
if (original.hasItemMeta()) {
setItemMeta(stack, original.getItemMeta());
} else {
// Converted after setItemMeta
stack.convertStack();
}
return stack;
}
Aggregations