Added 1.20.5+ max stack size

This commit is contained in:
Jules 2024-06-20 17:36:42 -07:00
parent 7d82c3daf5
commit 3d13d6db0e
2 changed files with 90 additions and 1 deletions

View File

@ -25,6 +25,7 @@ public class ItemStats {
NAME = new DisplayName(),
LORE = new Lore(),
NBT_TAGS = new NBTTags(),
STACK_SIZE = new StackSize(),
LORE_FORMAT = new LoreFormat(),
TOOLTIP = new TooltipStat(),
@ -200,7 +201,7 @@ public class ItemStats {
DOWNGRADE_ON_DEATH_CHANCE = new DoubleStat("DEATH_DOWNGRADE_CHANCE", Material.SKELETON_SKULL, "Death Downgrade Chance", new String[]{"Probability that an item with &cDowngrade ", "&con Death&7 will be downgraded when the", "player dies. ", "", "Exceeding 100% will for sure downgrade", "one item, and roll again to downgrade", "another (with the excess probability).", "&6The same item wont be downgraded twice."}, new String[]{"equipment"}, false),
// Unique Item Stats
DYE_COLOR = new DyeColor(),
DYE_COLOR = new DyeColor(),
HIDE_DYE = new HideDye(),
TRIM_MATERIAL = new TrimMaterialStat(),
TRIM_PATTERN = new TrimPatternStat(),

View File

@ -0,0 +1,88 @@
package net.Indyuce.mmoitems.stat;
import io.lumine.mythic.lib.api.item.ItemTag;
import io.lumine.mythic.lib.api.item.SupportedNBTTagValues;
import net.Indyuce.mmoitems.api.item.build.ItemStackBuilder;
import net.Indyuce.mmoitems.api.item.mmoitem.ReadMMOItem;
import net.Indyuce.mmoitems.api.util.NumericStatFormula;
import net.Indyuce.mmoitems.stat.data.DoubleData;
import net.Indyuce.mmoitems.stat.data.type.StatData;
import net.Indyuce.mmoitems.stat.type.DoubleStat;
import net.Indyuce.mmoitems.stat.type.GemStoneStat;
import net.Indyuce.mmoitems.util.VersionDependant;
import org.bukkit.Material;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
@VersionDependant(version = {1, 20, 5})
public class StackSize extends DoubleStat implements GemStoneStat {
public StackSize() {
super("STACK_SIZE", Material.CHEST, "Max Stack Size", new String[]{"Maximum amount of items which", "can be stacked together (1.20.5+)."}, new String[]{"all"});
}
@Override
public void whenApplied(@NotNull ItemStackBuilder item, @NotNull DoubleData data) {
// Edit meta
item.getMeta().setMaxStackSize((int) data.getValue());
// Apply Custom Model Data
item.addItemTag(getAppliedNBT(data));
}
@Override
public void whenPreviewed(@NotNull ItemStackBuilder item, @NotNull DoubleData currentData, @NotNull NumericStatFormula templateData) throws IllegalArgumentException {
whenApplied(item, currentData);
}
@NotNull
@Override
public ArrayList<ItemTag> getAppliedNBT(@NotNull DoubleData data) {
// Make new ArrayList
ArrayList<ItemTag> ret = new ArrayList<>();
// Add Integer
ret.add(new ItemTag(getNBTPath(), (int) data.getValue()));
// Return thay
return ret;
}
@Override
public void whenLoaded(@NotNull ReadMMOItem mmoitem) {
// Get Relevant tags
ArrayList<ItemTag> relevantTags = new ArrayList<>();
if (mmoitem.getNBT().hasTag(getNBTPath()))
relevantTags.add(ItemTag.getTagAtPath(getNBTPath(), mmoitem.getNBT(), SupportedNBTTagValues.INTEGER));
// Attempt to build data
StatData data = getLoadedNBT(relevantTags);
// Success?
if (data != null) {
mmoitem.setData(this, data);
}
}
@Nullable
@Override
public DoubleData getLoadedNBT(@NotNull ArrayList<ItemTag> storedTags) {
// Find Tag
ItemTag cmd = ItemTag.getTagAtPath(getNBTPath(), storedTags);
// Found?
if (cmd != null) {
// Well thats it
return new DoubleData((Integer) cmd.getValue());
}
return null;
}
}