use of net.minecraft.server.v1_12_R1.Slot in project custom-items-gradle by knokko.
the class ItemAttributes method setAttribute.
public static ItemStack setAttribute(ItemStack original, String attribute, double value, String slot, int operation) {
net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(original);
NBTTagCompound compound = (nmsStack.hasTag()) ? nmsStack.getTag() : new NBTTagCompound();
NBTTagList modifiers = compound.getList("AttributeModifiers", 10);
if (modifiers == null)
modifiers = new NBTTagList();
setAttribute(modifiers, attribute, value, slot, operation);
compound.set("AttributeModifiers", modifiers);
nmsStack.setTag(compound);
return CraftItemStack.asBukkitCopy(nmsStack);
}
use of net.minecraft.server.v1_12_R1.Slot in project custom-items-gradle by knokko.
the class ItemAttributes method setAttribute.
private static void setAttribute(NBTTagList modifiers, String name, double value, String slot, int operation) {
NBTTagCompound damage = new NBTTagCompound();
damage.set("AttributeName", new NBTTagString(name));
damage.set("Name", new NBTTagString(name));
damage.set("Amount", new NBTTagDouble(value));
damage.set("Operation", new NBTTagInt(operation));
long most = modifiers.size() + 1 + slot.hashCode() * name.hashCode();
long least = modifiers.size() + 1 + slot.hashCode() + name.hashCode();
if (most == 0)
most = -8;
if (least == 0)
least = 12;
damage.set("UUIDLeast", new NBTTagLong(least));
damage.set("UUIDMost", new NBTTagLong(most));
damage.set("Slot", new NBTTagString(slot));
modifiers.add(damage);
}
use of net.minecraft.server.v1_12_R1.Slot in project custom-items-gradle by knokko.
the class ItemAttributes method getAttributes.
public static Single[] getAttributes(ItemStack stack) {
net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(stack);
if (nmsStack.hasTag()) {
NBTTagCompound compound = nmsStack.getTag();
NBTTagList modifiers = compound.getList("AttributeModifiers", 10);
if (modifiers != null) {
Single[] attributes = new Single[modifiers.size()];
for (int index = 0; index < modifiers.size(); index++) {
NBTTagCompound attributeTag = modifiers.get(index);
String attribute = attributeTag.getString("Name");
String slot = attributeTag.getString("Slot");
int operation = attributeTag.getInt("Operation");
double amount = attributeTag.getDouble("Amount");
attributes[index] = new Single(attribute, slot, operation, amount);
}
return attributes;
} else {
return new Single[0];
}
} else {
return new Single[0];
}
}
use of net.minecraft.server.v1_12_R1.Slot 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.Slot in project Panilla by ds58.
the class InventoryCleaner method clean.
@Override
public void clean(IPanillaPlayer player) {
CraftPlayer craftPlayer = (CraftPlayer) player.getHandle();
Container container = craftPlayer.getHandle().activeContainer;
int containerSlotsSize = 0;
if (is_1_12_2) {
containerSlotsSize = container.slots.size();
} else {
try {
Field slotsField = Container.class.getField("c");
List<Slot> slots = (List<Slot>) slotsField.get(container);
containerSlotsSize = slots.size();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
for (int slot = 0; slot < containerSlotsSize; slot++) {
ItemStack itemStack = container.getSlot(slot).getItem();
if (itemStack == null || !itemStack.hasTag()) {
continue;
}
NBTTagCompound nmsTag = itemStack.getTag();
INbtTagCompound tag = new NbtTagCompound(nmsTag);
String itemName = itemStack.getItem().getName();
if (nmsTag == null || itemName == null) {
continue;
}
FailedNbt failedNbt = NbtChecks.checkAll(tag, itemName, panilla);
if (FailedNbt.failsThreshold(failedNbt)) {
container.getSlot(slot).getItem().setTag(null);
} else if (FailedNbt.fails(failedNbt)) {
nmsTag.remove(failedNbt.key);
container.getSlot(slot).getItem().setTag(nmsTag);
}
}
}
Aggregations