Skip to content

Commit

Permalink
Get max stack size with NMS.
Browse files Browse the repository at this point in the history
Try getting it to work with buying
  • Loading branch information
Sven65 committed Feb 27, 2021
1 parent 51ee85d commit 52a6e2c
Show file tree
Hide file tree
Showing 20 changed files with 152 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ public String getItemName (ItemStack itemStack) {
return nmsStack.getName();
}

public int getMaxStack (ItemStack itemStack) {
net.minecraft.server.v1_10_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);

return nmsStack.getMaxStackSize();
}

public ItemStack getInteractionItemInHand (PlayerInteractEvent e) {
return e.getItem();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ public String getItemName (ItemStack itemStack) {
return nmsStack.getName();
}

public int getMaxStack (ItemStack itemStack) {
net.minecraft.server.v1_11_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);

return nmsStack.getMaxStackSize();
}

public ItemStack getInteractionItemInHand (PlayerInteractEvent e) {
return e.getItem();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ public String getItemName (ItemStack itemStack) {
return nmsStack.getName();
}

public int getMaxStack (ItemStack itemStack) {
net.minecraft.server.v1_12_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);

return nmsStack.getMaxStackSize();
}

public ItemStack getInteractionItemInHand (PlayerInteractEvent e) {
return e.getItem();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ public String getItemName (ItemStack itemStack) {
return LocaleLanguage.a().a(nmsStack.getItem().getName());
}

public int getMaxStack (ItemStack itemStack) {
net.minecraft.server.v1_13_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);

return nmsStack.getMaxStackSize();
}

public ItemStack getInteractionItemInHand (PlayerInteractEvent e) {
return e.getItem();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ public String getItemName (ItemStack itemStack) {
return LocaleLanguage.a().a(nmsStack.getItem().getName());
}

public int getMaxStack (ItemStack itemStack) {
net.minecraft.server.v1_13_R2.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);

return nmsStack.getMaxStackSize();
}

public ItemStack getInteractionItemInHand (PlayerInteractEvent e) {
return e.getItem();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ public String getItemName (ItemStack itemStack) {
return LocaleLanguage.a().a(nmsStack.getItem().getName());
}

public int getMaxStack (ItemStack itemStack) {
net.minecraft.server.v1_14_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);

return nmsStack.getMaxStackSize();
}

public ItemStack getInteractionItemInHand (PlayerInteractEvent e) {
return e.getItem();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ public String getItemName (ItemStack itemStack) {
return LocaleLanguage.a().a(nmsStack.getItem().getName());
}

public int getMaxStack (ItemStack itemStack) {
net.minecraft.server.v1_15_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);

return nmsStack.getMaxStackSize();
}

public ItemStack getInteractionItemInHand (PlayerInteractEvent e) {
return e.getItem();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ public String getItemName (ItemStack itemStack) {
return LocaleLanguage.a().a(nmsStack.getItem().getName());
}

public int getMaxStack (ItemStack itemStack) {
net.minecraft.server.v1_16_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);

return nmsStack.getMaxStackSize();
}

public ItemStack getInteractionItemInHand (PlayerInteractEvent e) {
EquipmentSlot hand = e.getHand();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ public String getItemName (ItemStack itemStack) {
return LocaleLanguage.a().a(nmsStack.getItem().getName());
}

public int getMaxStack (ItemStack itemStack) {
net.minecraft.server.v1_16_R2.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);

return nmsStack.getMaxStackSize();
}

public ItemStack getInteractionItemInHand (PlayerInteractEvent e) {
EquipmentSlot hand = e.getHand();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ public String getItemName (ItemStack itemStack) {
return LocaleLanguage.a().a(nmsStack.getItem().getName());
}

public int getMaxStack (ItemStack itemStack) {
net.minecraft.server.v1_16_R3.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);

return nmsStack.getMaxStackSize();
}

public ItemStack getInteractionItemInHand (PlayerInteractEvent e) {
EquipmentSlot hand = e.getHand();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@ public String getItemName (ItemStack itemStack) {
return nmsStack.getName();
}

public int getMaxStack (ItemStack itemStack) {
net.minecraft.server.v1_8_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);

return nmsStack.getMaxStackSize();
}

public ItemStack getInteractionItemInHand (PlayerInteractEvent e) {
return e.getItem();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftItemStack;
import org.bukkit.inventory.ItemStack;

public class SlabboItemAPI_v1_8_R1 implements SlabboItemAPI {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ public String getItemName (ItemStack itemStack) {
return nmsStack.getName();
}

public int getMaxStack (ItemStack itemStack) {
net.minecraft.server.v1_8_R2.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);

return nmsStack.getMaxStackSize();
}

public ItemStack getInteractionItemInHand (PlayerInteractEvent e) {
return e.getItem();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ public String getItemName (ItemStack itemStack) {
return nmsStack.getName();
}

public int getMaxStack (ItemStack itemStack) {
net.minecraft.server.v1_8_R3.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);

return nmsStack.getMaxStackSize();
}

public ItemStack getInteractionItemInHand (PlayerInteractEvent e) {
return e.getItem();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@ public String getItemName (ItemStack itemStack) {
return nmsStack.getName();
}

public int getMaxStack (ItemStack itemStack) {
net.minecraft.server.v1_9_R1.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);

return nmsStack.getMaxStackSize();
}

public ItemStack getInteractionItemInHand (PlayerInteractEvent e) {
return e.getItem();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@ public String getItemName (ItemStack itemStack) {
return nmsStack.getName();
}

public int getMaxStack (ItemStack itemStack) {
net.minecraft.server.v1_9_R2.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack);

return nmsStack.getMaxStackSize();
}

public ItemStack getInteractionItemInHand (PlayerInteractEvent e) {
return e.getItem();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,19 @@
import xyz.mackan.Slabbo.GUI.items.GUIItems;
import xyz.mackan.Slabbo.Slabbo;
import xyz.mackan.Slabbo.abstractions.ISlabboSound;
import xyz.mackan.Slabbo.abstractions.SlabboAPI;
import xyz.mackan.Slabbo.manager.LocaleManager;
import xyz.mackan.Slabbo.types.Shop;
import xyz.mackan.Slabbo.utils.DataUtil;
import xyz.mackan.Slabbo.utils.NameUtil;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class ShopUserGUI implements Listener {
ISlabboSound slabboSound = Bukkit.getServicesManager().getRegistration(ISlabboSound.class).getProvider();

SlabboAPI slabboAPI = Bukkit.getServicesManager().getRegistration(SlabboAPI.class).getProvider();

private Shop shop;
private Inventory inv;
Expand Down Expand Up @@ -111,13 +114,41 @@ public void handleBuy (HumanEntity humanEntity) {
return;
}

boolean sellOversized = Slabbo.getInstance().getConfig().getBoolean("sellOversized", false);

PlayerInventory pInv = humanEntity.getInventory();

List<ItemStack> stacksToAdd = new ArrayList<ItemStack>();

ItemStack shopItemClone = shop.item.clone();

shopItemClone.setAmount(itemCount);
if (sellOversized) {
shopItemClone.setAmount(itemCount);
stacksToAdd.add(shopItemClone);
} else {
int maxStackSize = slabboAPI.getMaxStack(shopItemClone);

int totalItems = itemCount;

int totalStacks = (totalItems / maxStackSize + (totalItems % maxStackSize));


for (int i = 0;i<totalStacks;i++) {
int size = maxStackSize;

if (totalItems < maxStackSize) {
size = totalItems;
}

ItemStack clonedStack = shop.item.clone();
clonedStack.setAmount(size);
stacksToAdd.add(clonedStack);

totalItems -= maxStackSize;
}
}

HashMap<Integer, ItemStack> leftovers = pInv.addItem(shopItemClone);
HashMap<Integer, ItemStack> leftovers = pInv.addItem((ItemStack[]) stacksToAdd.toArray());

// TODO: Make this do a dry run to see if the player can acutally get all the items
int leftoverCount = leftovers
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,13 @@ public interface SlabboAPI {
*/
String getItemName (ItemStack itemStack);

/**
* Gets the maximum stack size for an item
* @param itemStack
* @return The max stack size for the item
*/
int getMaxStack (ItemStack itemStack);

/**
* Gets the item a user is holding in their main hand when interacting
* @param e
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,10 @@
import org.bukkit.*;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import xyz.mackan.Slabbo.GUI.ShopDeletionGUI;
import xyz.mackan.Slabbo.Slabbo;
import xyz.mackan.Slabbo.abstractions.SlabboAPI;
import xyz.mackan.Slabbo.manager.ChestLinkManager;
import xyz.mackan.Slabbo.manager.LocaleManager;
import xyz.mackan.Slabbo.manager.ShopManager;
Expand Down Expand Up @@ -100,6 +102,7 @@ public BaseComponent getListComponent (Player player, List<String> rows, int pag
}

ISlabboSound slabboSound = Bukkit.getServicesManager().getRegistration(ISlabboSound.class).getProvider();
SlabboAPI slabboAPI = Bukkit.getServicesManager().getRegistration(SlabboAPI.class).getProvider();

@HelpCommand
@CatchUnknown
Expand Down Expand Up @@ -133,6 +136,18 @@ public void onReload (Player player) {
player.sendMessage("Slabbo "+LocaleManager.getString("general.general.reloaded")+"!");
}

@Subcommand("debug")
@Description("Debugs slabbo")
@CommandPermission("slabbo.info")
public void onDebug (Player player) {
ItemStack item = player.getInventory().getItemInMainHand();

String itemName = slabboAPI.getItemName(item);
int maxSize = slabboAPI.getMaxStack(item);

player.sendMessage(String.format("Max stack size of item %s is %d items.", itemName, maxSize));
}

@Subcommand("info")
@Description("Shows information about Slabbo")
@CommandPermission("slabbo.info")
Expand Down
5 changes: 5 additions & 0 deletions modules/Plugin/src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ stairs: true
# If barrier blocks can be used as shops
barriershops: true

# If shops can add in oversized stacks
# I.e, a regular stack of pickaxes can only have one item,
# an oversized stack can have 64 items.
sellOversized: false

punchRestock:
# If a user can punch a shop with the item to restock it
single: true
Expand Down

0 comments on commit 52a6e2c

Please sign in to comment.