diff --git a/gradle.properties b/gradle.properties index 63a241a7..68157676 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false minecraft_version=1.18.2 forge_version=40.1.30 -mod_version=0.5.111 +mod_version=0.5.113 jei_mc_version=1.18.2 jei_version=9.7.2.281 patchouli_version=1.18.2-66 diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/Config.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/Config.java index e44ae342..4288fa47 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/Config.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/Config.java @@ -3,6 +3,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.event.config.ModConfigEvent; import net.p3pp3rf1y.sophisticatedcore.client.gui.SortButtonsPosition; import net.p3pp3rf1y.sophisticatedcore.util.RegistryHelper; @@ -47,6 +48,10 @@ public static class Client { public static class Common { public final EnabledItems enabledItems; + public void initListeners(IEventBus modBus) { + modBus.addListener(this::onConfigReload); + } + @SuppressWarnings("unused") //need the Event parameter for forge reflection to understand what event this listens to public void onConfigReload(ModConfigEvent.Reloading event) { enabledItems.enabledMap.clear(); diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/SophisticatedCore.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/SophisticatedCore.java index c48b4553..791108f0 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/SophisticatedCore.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/SophisticatedCore.java @@ -45,6 +45,7 @@ public SophisticatedCore() { ClientEventHandler.registerHandlers(); } IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); + Config.COMMON.initListeners(modBus); modBus.addListener(SophisticatedCore::setup); modBus.addListener(DataGenerators::gatherData); modBus.addGenericListener(RecipeSerializer.class, this::registerRecipeSerializers); diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/api/IStorageWrapper.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/api/IStorageWrapper.java index 210b1f84..511f4421 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/api/IStorageWrapper.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/api/IStorageWrapper.java @@ -1,5 +1,6 @@ package net.p3pp3rf1y.sophisticatedcore.api; +import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraftforge.energy.IEnergyStorage; @@ -92,4 +93,8 @@ default int getBaseStackSizeMultiplier() { default void onInit() { getInventoryHandler().onInit(); } + + String getStorageType(); + + Component getDisplayName(); } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/client/gui/utils/TranslationHelper.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/client/gui/utils/TranslationHelper.java index c052c0d5..5f04791c 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/client/gui/utils/TranslationHelper.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/client/gui/utils/TranslationHelper.java @@ -27,6 +27,7 @@ public class TranslationHelper { private final String buttonsPrefix; private final String itemUpgradePrefix; private final String blockPrefix; + private final String upgradeGroupPrefix; private final String upgradeButtonsPrefix; private final String upgradeControlsPrefix; private final String keybindPrefix; @@ -36,6 +37,7 @@ public TranslationHelper(String modId) { keybindPrefix = "keybind." + modId + "."; itemUpgradePrefix = "item." + modId + "."; blockPrefix = "block." + modId + "."; + upgradeGroupPrefix = "upgrade_group." + modId + "."; guiUpgradePrefix = guiPrefix + "upgrades."; guiSettingsPrefix = guiPrefix + "settings."; guiStatusPrefix = guiPrefix + "status."; @@ -95,6 +97,10 @@ public Component translError(String key, Object... params) { return new TranslatableComponent(guiPrefix + "error." + key, params); } + public String translUpgradeGroup(String groupName) { + return upgradeGroupPrefix + groupName; + } + public String translUpgradeButton(String buttonName) { return upgradeButtonsPrefix + buttonName; } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/compat/chipped/BlockTransformationUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/compat/chipped/BlockTransformationUpgradeItem.java index ff0ddf98..975e63b8 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/compat/chipped/BlockTransformationUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/compat/chipped/BlockTransformationUpgradeItem.java @@ -3,6 +3,7 @@ import earth.terrarium.chipped.recipe.ChippedRecipe; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.crafting.RecipeType; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -11,7 +12,9 @@ public class BlockTransformationUpgradeItem extends UpgradeItemBase { private static final UpgradeType TYPE = new UpgradeType<>(BlockTransformationUpgradeWrapper::new); private final Supplier> getRecipeType; - public BlockTransformationUpgradeItem(CreativeModeTab itemGroup, Supplier> getRecipeType) {super(itemGroup); + + public BlockTransformationUpgradeItem(CreativeModeTab itemGroup, Supplier> getRecipeType, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.getRecipeType = getRecipeType; } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/IUpgradeCountLimitConfig.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/IUpgradeCountLimitConfig.java new file mode 100644 index 00000000..8cfd754a --- /dev/null +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/IUpgradeCountLimitConfig.java @@ -0,0 +1,11 @@ +package net.p3pp3rf1y.sophisticatedcore.upgrades; + +import net.minecraft.resources.ResourceLocation; + +import javax.annotation.Nullable; + +public interface IUpgradeCountLimitConfig { + int getMaxUpgradesPerStorage(String storageType, @Nullable ResourceLocation upgradeRegistryName); + + int getMaxUpgradesInGroupPerStorage(String storageType, UpgradeGroup upgradeGroup); +} diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/IUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/IUpgradeItem.java index a51a4af5..ffb53ff7 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/IUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/IUpgradeItem.java @@ -1,13 +1,59 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.world.item.ItemStack; import net.p3pp3rf1y.sophisticatedcore.api.IStorageWrapper; +import net.p3pp3rf1y.sophisticatedcore.client.gui.utils.TranslationHelper; import net.p3pp3rf1y.sophisticatedcore.common.gui.UpgradeSlotChangeResult; +import net.p3pp3rf1y.sophisticatedcore.util.InventoryHelper; + +import java.util.HashSet; +import java.util.Set; public interface IUpgradeItem { UpgradeType getType(); default UpgradeSlotChangeResult canAddUpgradeTo(IStorageWrapper storageWrapper, ItemStack upgradeStack, boolean firstLevelStorage, boolean isClientSide) { + return checkUpgradePerStorageTypeLimit(storageWrapper); + } + + private UpgradeSlotChangeResult checkUpgradePerStorageTypeLimit(IStorageWrapper storageWrapper) { + int upgradesPerStorage = getUpgradesPerStorage(storageWrapper.getStorageType()); + int upgradesInGroupPerStorage = getUpgradesInGroupPerStorage(storageWrapper.getStorageType()); + + if (upgradesPerStorage == Integer.MAX_VALUE && upgradesInGroupPerStorage == Integer.MAX_VALUE) { + return new UpgradeSlotChangeResult.Success(); + } + + if (upgradesPerStorage == 0) { + return new UpgradeSlotChangeResult.Fail(TranslationHelper.INSTANCE.translError("add.upgrade_not_allowed", getName(), storageWrapper.getDisplayName()), Set.of(), Set.of(), Set.of()); + } else if (upgradesInGroupPerStorage == 0) { + return new UpgradeSlotChangeResult.Fail(TranslationHelper.INSTANCE.translError("add.upgrade_not_allowed", new TranslatableComponent(getUpgradeGroup().translName()), storageWrapper.getDisplayName()), Set.of(), Set.of(), Set.of()); + } + + Set slotsWithUpgrade = new HashSet<>(); + InventoryHelper.iterate(storageWrapper.getUpgradeHandler(), (slot, stack) -> { + if (stack.getItem() == this) { + slotsWithUpgrade.add(slot); + } + }); + + if (slotsWithUpgrade.size() >= upgradesPerStorage) { + return new UpgradeSlotChangeResult.Fail(TranslationHelper.INSTANCE.translError("add.only_x_upgrades_allowed", upgradesPerStorage, getName(), storageWrapper.getDisplayName(), upgradesPerStorage), slotsWithUpgrade, Set.of(), Set.of()); + } + + Set slotsWithUgradeGroup = new HashSet<>(); + InventoryHelper.iterate(storageWrapper.getUpgradeHandler(), (slot, stack) -> { + if (stack.getItem() instanceof IUpgradeItem upgradeItem && upgradeItem.getUpgradeGroup() == getUpgradeGroup()) { + slotsWithUgradeGroup.add(slot); + } + }); + + if (slotsWithUgradeGroup.size() >= upgradesInGroupPerStorage) { + return new UpgradeSlotChangeResult.Fail(TranslationHelper.INSTANCE.translError("add.only_x_upgrades_allowed", upgradesInGroupPerStorage, new TranslatableComponent(getUpgradeGroup().translName()), storageWrapper.getDisplayName()), slotsWithUpgrade, Set.of(), Set.of()); + } + return new UpgradeSlotChangeResult.Success(); } @@ -16,6 +62,26 @@ default UpgradeSlotChangeResult canRemoveUpgradeFrom(IStorageWrapper storageWrap } default UpgradeSlotChangeResult canSwapUpgradeFor(ItemStack upgradeStackToPut, IStorageWrapper storageWrapper, boolean isClientSide) { + if (upgradeStackToPut.getItem() instanceof IUpgradeItem upgradeToPut) { + int upgradesPerStorage = upgradeToPut.getUpgradesPerStorage(storageWrapper.getStorageType()); + int upgradesInGroupPerStorage = upgradeToPut.getUpgradesInGroupPerStorage(storageWrapper.getStorageType()); + if (upgradesPerStorage < upgradesInGroupPerStorage) { + if (upgradeStackToPut.getItem() != this) { + UpgradeSlotChangeResult result = upgradeToPut.checkUpgradePerStorageTypeLimit(storageWrapper); + if (!result.isSuccessful()) { + return result; + } + } + } else { + if (upgradeToPut.getUpgradeGroup() != getUpgradeGroup()) { + UpgradeSlotChangeResult result = upgradeToPut.checkUpgradePerStorageTypeLimit(storageWrapper); + if (!result.isSuccessful()) { + return result; + } + } + } + } + return canRemoveUpgradeFrom(storageWrapper, isClientSide); } @@ -26,4 +92,14 @@ default int getInventoryColumnsTaken() { default ItemStack getCleanedUpgradeStack(ItemStack upgradeStack) { return upgradeStack; } + + int getUpgradesPerStorage(String storageType); + + int getUpgradesInGroupPerStorage(String storageType); + + default UpgradeGroup getUpgradeGroup() { + return UpgradeGroup.NONE; + } + + Component getName(); } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/UpgradeGroup.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/UpgradeGroup.java new file mode 100644 index 00000000..b77ceb8d --- /dev/null +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/UpgradeGroup.java @@ -0,0 +1,31 @@ +package net.p3pp3rf1y.sophisticatedcore.upgrades; + +public final class UpgradeGroup { + + public static final UpgradeGroup NONE = new UpgradeGroup("none", "none", true); + private final String name; + private final String translName; + private final boolean isSolo; + + public UpgradeGroup(String name, String translName) { + this(name, translName, false); + } + + private UpgradeGroup(String name, String translName, boolean isSolo) { + this.name = name; + this.translName = translName; + this.isSolo = isSolo; + } + + public String name() { + return name; + } + + public String translName() { + return translName; + } + + public boolean isSolo() { + return isSolo; + } +} diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/UpgradeItemBase.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/UpgradeItemBase.java index 9b11fbcb..4847af2f 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/UpgradeItemBase.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/UpgradeItemBase.java @@ -2,6 +2,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; @@ -13,12 +14,35 @@ import java.util.List; public abstract class UpgradeItemBase extends ItemBase implements IUpgradeItem { - protected UpgradeItemBase(CreativeModeTab itemGroup) { + + private final IUpgradeCountLimitConfig upgradeTypeLimitConfig; + + protected UpgradeItemBase(CreativeModeTab itemGroup, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { super(new Properties(), itemGroup); + this.upgradeTypeLimitConfig = upgradeTypeLimitConfig; } @Override public void appendHoverText(ItemStack stack, @Nullable Level worldIn, List tooltip, TooltipFlag flagIn) { tooltip.addAll(TranslationHelper.INSTANCE.getTranslatedLines(stack.getItem().getDescriptionId() + TranslationHelper.TOOLTIP_SUFFIX, null, ChatFormatting.DARK_GRAY)); } + + @Override + public int getUpgradesPerStorage(String storageType) { + return upgradeTypeLimitConfig.getMaxUpgradesPerStorage(storageType, getRegistryName()); + } + + @Override + public int getUpgradesInGroupPerStorage(String storageType) { + if (getUpgradeGroup().isSolo()) { + return Integer.MAX_VALUE; + } + + return upgradeTypeLimitConfig.getMaxUpgradesInGroupPerStorage(storageType, getUpgradeGroup()); + } + + @Override + public Component getName() { + return new TranslatableComponent(getDescriptionId()); + } } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/battery/BatteryUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/battery/BatteryUpgradeItem.java index dbe69e5a..429e814d 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/battery/BatteryUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/battery/BatteryUpgradeItem.java @@ -5,6 +5,7 @@ import net.p3pp3rf1y.sophisticatedcore.api.IStorageWrapper; import net.p3pp3rf1y.sophisticatedcore.client.gui.utils.TranslationHelper; import net.p3pp3rf1y.sophisticatedcore.common.gui.UpgradeSlotChangeResult; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -17,8 +18,8 @@ public class BatteryUpgradeItem extends UpgradeItemBase { private final BatteryUpgradeConfig batteryUpgradeConfig; - public BatteryUpgradeItem(CreativeModeTab itemGroup, BatteryUpgradeConfig batteryUpgradeConfig) { - super(itemGroup); + public BatteryUpgradeItem(CreativeModeTab itemGroup, BatteryUpgradeConfig batteryUpgradeConfig, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.batteryUpgradeConfig = batteryUpgradeConfig; } @@ -38,6 +39,11 @@ public int getInventoryColumnsTaken() { @Override public UpgradeSlotChangeResult canAddUpgradeTo(IStorageWrapper storageWrapper, ItemStack upgradeStack, boolean firstLevelStorage, boolean isClientSide) { + UpgradeSlotChangeResult result = super.canAddUpgradeTo(storageWrapper, upgradeStack, firstLevelStorage, isClientSide); + if (!result.isSuccessful()) { + return result; + } + Set errorUpgradeSlots = new HashSet<>(); storageWrapper.getUpgradeHandler().getSlotWrappers().forEach((slot, wrapper) -> { if (wrapper instanceof BatteryUpgradeWrapper) { diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/compacting/CompactingUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/compacting/CompactingUpgradeItem.java index 942a88a8..d3c9a52a 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/compacting/CompactingUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/compacting/CompactingUpgradeItem.java @@ -1,6 +1,7 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.compacting; import net.minecraft.world.item.CreativeModeTab; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -11,8 +12,8 @@ public class CompactingUpgradeItem extends UpgradeItemBase TYPE = new UpgradeType<>(AutoCookingUpgradeWrapper.AutoBlastingUpgradeWrapper::new); private final AutoCookingUpgradeConfig autoBlastingUpgradeConfig; - public AutoBlastingUpgradeItem(CreativeModeTab itemGroup, AutoCookingUpgradeConfig autoBlastingUpgradeConfig) {super(itemGroup); + public AutoBlastingUpgradeItem(CreativeModeTab itemGroup, AutoCookingUpgradeConfig autoBlastingUpgradeConfig, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.autoBlastingUpgradeConfig = autoBlastingUpgradeConfig; } @@ -21,4 +24,9 @@ public UpgradeType getType public AutoCookingUpgradeConfig getAutoCookingUpgradeConfig() { return autoBlastingUpgradeConfig; } + + @Override + public UpgradeGroup getUpgradeGroup() { + return ICookingUpgrade.UPGRADE_GROUP; + } } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/AutoSmeltingUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/AutoSmeltingUpgradeItem.java index 25f795ab..e2d74efe 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/AutoSmeltingUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/AutoSmeltingUpgradeItem.java @@ -1,6 +1,8 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.cooking; import net.minecraft.world.item.CreativeModeTab; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; +import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeGroup; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -8,7 +10,8 @@ public class AutoSmeltingUpgradeItem extends UpgradeItemBase TYPE = new UpgradeType<>(AutoCookingUpgradeWrapper.AutoSmeltingUpgradeWrapper::new); private final AutoCookingUpgradeConfig autoSmeltingUpgradeConfig; - public AutoSmeltingUpgradeItem(CreativeModeTab itemGroup, AutoCookingUpgradeConfig autoSmeltingUpgradeConfig) {super(itemGroup); + public AutoSmeltingUpgradeItem(CreativeModeTab itemGroup, AutoCookingUpgradeConfig autoSmeltingUpgradeConfig, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.autoSmeltingUpgradeConfig = autoSmeltingUpgradeConfig; } @@ -21,4 +24,9 @@ public UpgradeType getType public AutoCookingUpgradeConfig getAutoCookingUpgradeConfig() { return autoSmeltingUpgradeConfig; } + + @Override + public UpgradeGroup getUpgradeGroup() { + return ICookingUpgrade.UPGRADE_GROUP; + } } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/AutoSmokingUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/AutoSmokingUpgradeItem.java index c10d86d3..33c3643c 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/AutoSmokingUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/AutoSmokingUpgradeItem.java @@ -1,6 +1,7 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.cooking; import net.minecraft.world.item.CreativeModeTab; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -8,7 +9,8 @@ public class AutoSmokingUpgradeItem extends UpgradeItemBase TYPE = new UpgradeType<>(AutoCookingUpgradeWrapper.AutoSmokingUpgradeWrapper::new); private final AutoCookingUpgradeConfig autoSmokingUpgradeConfig; - public AutoSmokingUpgradeItem(CreativeModeTab itemGroup, AutoCookingUpgradeConfig autoSmokingUpgradeConfig) {super(itemGroup); + public AutoSmokingUpgradeItem(CreativeModeTab itemGroup, AutoCookingUpgradeConfig autoSmokingUpgradeConfig, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.autoSmokingUpgradeConfig = autoSmokingUpgradeConfig; } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/BlastingUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/BlastingUpgradeItem.java index 520c8764..fe46668d 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/BlastingUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/BlastingUpgradeItem.java @@ -1,6 +1,8 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.cooking; import net.minecraft.world.item.CreativeModeTab; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; +import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeGroup; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -8,7 +10,8 @@ public class BlastingUpgradeItem extends UpgradeItemBase TYPE = new UpgradeType<>(CookingUpgradeWrapper.BlastingUpgradeWrapper::new); private final CookingUpgradeConfig blastingUpgradeConfig; - public BlastingUpgradeItem(CreativeModeTab itemGroup, CookingUpgradeConfig blastingUpgradeConfig) {super(itemGroup); + public BlastingUpgradeItem(CreativeModeTab itemGroup, CookingUpgradeConfig blastingUpgradeConfig, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.blastingUpgradeConfig = blastingUpgradeConfig; } @@ -21,4 +24,9 @@ public UpgradeType getType() { public CookingUpgradeConfig getCookingUpgradeConfig() { return blastingUpgradeConfig; } + + @Override + public UpgradeGroup getUpgradeGroup() { + return ICookingUpgrade.UPGRADE_GROUP; + } } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/ICookingUpgrade.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/ICookingUpgrade.java index 06048574..12d9135b 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/ICookingUpgrade.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/ICookingUpgrade.java @@ -1,7 +1,10 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.cooking; import net.minecraft.world.item.crafting.AbstractCookingRecipe; +import net.p3pp3rf1y.sophisticatedcore.client.gui.utils.TranslationHelper; +import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeGroup; public interface ICookingUpgrade { + UpgradeGroup UPGRADE_GROUP = new UpgradeGroup("furnace_upgrades", TranslationHelper.INSTANCE.translUpgradeGroup("cooking_upgrades")); CookingLogic getCookingLogic(); } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/SmeltingUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/SmeltingUpgradeItem.java index e23a7431..104b55f7 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/SmeltingUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/SmeltingUpgradeItem.java @@ -1,6 +1,8 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.cooking; import net.minecraft.world.item.CreativeModeTab; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; +import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeGroup; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -9,7 +11,8 @@ public class SmeltingUpgradeItem extends UpgradeItemBase getType() { public CookingUpgradeConfig getCookingUpgradeConfig() { return smeltingUpgradeConfig; } + + @Override + public UpgradeGroup getUpgradeGroup() { + return ICookingUpgrade.UPGRADE_GROUP; + } } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/SmokingUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/SmokingUpgradeItem.java index 9123f7b8..1552d924 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/SmokingUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/cooking/SmokingUpgradeItem.java @@ -1,6 +1,8 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.cooking; import net.minecraft.world.item.CreativeModeTab; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; +import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeGroup; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -8,7 +10,8 @@ public class SmokingUpgradeItem extends UpgradeItemBase TYPE = new UpgradeType<>(CookingUpgradeWrapper.SmokingUpgradeWrapper::new); private final CookingUpgradeConfig smokingUpgradeConfig; - public SmokingUpgradeItem(CreativeModeTab itemGroup, CookingUpgradeConfig smokingUpgradeConfig) {super(itemGroup); + public SmokingUpgradeItem(CreativeModeTab itemGroup, CookingUpgradeConfig smokingUpgradeConfig, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.smokingUpgradeConfig = smokingUpgradeConfig; } @@ -21,4 +24,9 @@ public UpgradeType getType() { public CookingUpgradeConfig getCookingUpgradeConfig() { return smokingUpgradeConfig; } + + @Override + public UpgradeGroup getUpgradeGroup() { + return ICookingUpgrade.UPGRADE_GROUP; + } } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/crafting/CraftingUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/crafting/CraftingUpgradeItem.java index 792ceb71..5bf59900 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/crafting/CraftingUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/crafting/CraftingUpgradeItem.java @@ -1,13 +1,16 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.crafting; import net.minecraft.world.item.CreativeModeTab; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; public class CraftingUpgradeItem extends UpgradeItemBase { private static final UpgradeType TYPE = new UpgradeType<>(CraftingUpgradeWrapper::new); - public CraftingUpgradeItem(CreativeModeTab itemGroup) {super(itemGroup);} + public CraftingUpgradeItem(CreativeModeTab itemGroup, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); + } @Override public UpgradeType getType() { diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/feeding/FeedingUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/feeding/FeedingUpgradeItem.java index 82b92488..2f5498e2 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/feeding/FeedingUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/feeding/FeedingUpgradeItem.java @@ -1,6 +1,7 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.feeding; import net.minecraft.world.item.CreativeModeTab; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -11,8 +12,8 @@ public class FeedingUpgradeItem extends UpgradeItemBase { private final IntSupplier filterSlotCount; - public FeedingUpgradeItem(IntSupplier filterSlotCount, CreativeModeTab itemGroup) { - super(itemGroup); + public FeedingUpgradeItem(IntSupplier filterSlotCount, CreativeModeTab itemGroup, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.filterSlotCount = filterSlotCount; } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/filter/FilterUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/filter/FilterUpgradeItem.java index a90efb1a..853376d7 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/filter/FilterUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/filter/FilterUpgradeItem.java @@ -1,6 +1,7 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.filter; import net.minecraft.world.item.CreativeModeTab; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -10,8 +11,8 @@ public class FilterUpgradeItem extends UpgradeItemBase { public static final UpgradeType TYPE = new UpgradeType<>(FilterUpgradeWrapper::new); private final IntSupplier filterSlotCount; - public FilterUpgradeItem(IntSupplier filterSlotCount, CreativeModeTab itemGroup) { - super(itemGroup); + public FilterUpgradeItem(IntSupplier filterSlotCount, CreativeModeTab itemGroup, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.filterSlotCount = filterSlotCount; } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/jukebox/JukeboxUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/jukebox/JukeboxUpgradeItem.java index d9d4e022..c5dcba51 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/jukebox/JukeboxUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/jukebox/JukeboxUpgradeItem.java @@ -12,10 +12,7 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemStackHandler; import net.p3pp3rf1y.sophisticatedcore.api.IStorageWrapper; -import net.p3pp3rf1y.sophisticatedcore.upgrades.ITickableUpgrade; -import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; -import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; -import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeWrapperBase; +import net.p3pp3rf1y.sophisticatedcore.upgrades.*; import net.p3pp3rf1y.sophisticatedcore.util.NBTHelper; import javax.annotation.Nullable; @@ -26,7 +23,9 @@ public class JukeboxUpgradeItem extends UpgradeItemBase { public static final UpgradeType TYPE = new UpgradeType<>(Wrapper::new); - public JukeboxUpgradeItem(CreativeModeTab itemGroup) {super(itemGroup);} + public JukeboxUpgradeItem(CreativeModeTab itemGroup, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); + } @Override public UpgradeType getType() { diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/magnet/MagnetUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/magnet/MagnetUpgradeItem.java index 25d46a89..0aaa5497 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/magnet/MagnetUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/magnet/MagnetUpgradeItem.java @@ -1,6 +1,7 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.magnet; import net.minecraft.world.item.CreativeModeTab; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -11,8 +12,8 @@ public class MagnetUpgradeItem extends UpgradeItemBase { private final IntSupplier radius; private final IntSupplier filterSlotCount; - public MagnetUpgradeItem(IntSupplier radius, IntSupplier filterSlotCount, CreativeModeTab itemGroup) { - super(itemGroup); + public MagnetUpgradeItem(IntSupplier radius, IntSupplier filterSlotCount, CreativeModeTab itemGroup, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.radius = radius; this.filterSlotCount = filterSlotCount; } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/pickup/PickupUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/pickup/PickupUpgradeItem.java index 239cd22e..7ededf96 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/pickup/PickupUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/pickup/PickupUpgradeItem.java @@ -1,6 +1,7 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.pickup; import net.minecraft.world.item.CreativeModeTab; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -11,8 +12,8 @@ public class PickupUpgradeItem extends UpgradeItemBase { private final IntSupplier filterSlotCount; - public PickupUpgradeItem(IntSupplier filterSlotCount, CreativeModeTab itemGroup) { - super(itemGroup); + public PickupUpgradeItem(IntSupplier filterSlotCount, CreativeModeTab itemGroup, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.filterSlotCount = filterSlotCount; } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/pump/PumpUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/pump/PumpUpgradeItem.java index d8f07604..5002eb8f 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/pump/PumpUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/pump/PumpUpgradeItem.java @@ -1,6 +1,7 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.pump; import net.minecraft.world.item.CreativeModeTab; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -10,8 +11,8 @@ public class PumpUpgradeItem extends UpgradeItemBase { private final boolean interactWithWorldDefault; private final PumpUpgradeConfig pumpUpgradeConfig; - public PumpUpgradeItem(boolean interactWithHandDefault, boolean interactWithWorldDefault, CreativeModeTab itemGroup, PumpUpgradeConfig pumpUpgradeConfig) { - super(itemGroup); + public PumpUpgradeItem(boolean interactWithHandDefault, boolean interactWithWorldDefault, CreativeModeTab itemGroup, PumpUpgradeConfig pumpUpgradeConfig, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.interactWithHandDefault = interactWithHandDefault; this.interactWithWorldDefault = interactWithWorldDefault; this.pumpUpgradeConfig = pumpUpgradeConfig; diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/stack/StackUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/stack/StackUpgradeItem.java index ff003bfb..e15143c8 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/stack/StackUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/stack/StackUpgradeItem.java @@ -5,10 +5,7 @@ import net.p3pp3rf1y.sophisticatedcore.api.IStorageWrapper; import net.p3pp3rf1y.sophisticatedcore.client.gui.utils.TranslationHelper; import net.p3pp3rf1y.sophisticatedcore.common.gui.UpgradeSlotChangeResult; -import net.p3pp3rf1y.sophisticatedcore.upgrades.IStackableContentsUpgrade; -import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; -import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; -import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeWrapperBase; +import net.p3pp3rf1y.sophisticatedcore.upgrades.*; import java.util.Collections; import java.util.HashSet; @@ -17,10 +14,11 @@ public class StackUpgradeItem extends UpgradeItemBase { public static final UpgradeType TYPE = new UpgradeType<>(Wrapper::new); + public static final UpgradeGroup UPGRADE_GROUP = new UpgradeGroup("stack_upgrades", TranslationHelper.INSTANCE.translUpgradeGroup("stack_upgrades")); private final int stackSizeMultiplier; - public StackUpgradeItem(int stackSizeMultiplier, CreativeModeTab itemGroup) { - super(itemGroup); + public StackUpgradeItem(int stackSizeMultiplier, CreativeModeTab itemGroup, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.stackSizeMultiplier = stackSizeMultiplier; } @@ -103,6 +101,11 @@ private UpgradeSlotChangeResult isMultiplierHighEnough(IStorageWrapper storageWr return new UpgradeSlotChangeResult.Success(); } + @Override + public UpgradeGroup getUpgradeGroup() { + return UPGRADE_GROUP; + } + public static class Wrapper extends UpgradeWrapperBase { protected Wrapper(IStorageWrapper storageWrapper, ItemStack upgrade, Consumer upgradeSaveHandler) { super(storageWrapper, upgrade, upgradeSaveHandler); diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/stonecutter/StonecutterUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/stonecutter/StonecutterUpgradeItem.java index d6979980..4a6b758c 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/stonecutter/StonecutterUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/stonecutter/StonecutterUpgradeItem.java @@ -1,13 +1,16 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.stonecutter; import net.minecraft.world.item.CreativeModeTab; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; public class StonecutterUpgradeItem extends UpgradeItemBase { private static final UpgradeType TYPE = new UpgradeType<>(StonecutterUpgradeWrapper::new); - public StonecutterUpgradeItem(CreativeModeTab itemGroup) {super(itemGroup);} + public StonecutterUpgradeItem(CreativeModeTab itemGroup, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); + } @Override public UpgradeType getType() { diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/tank/TankUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/tank/TankUpgradeItem.java index 7021db0f..178c7ca3 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/tank/TankUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/tank/TankUpgradeItem.java @@ -5,6 +5,7 @@ import net.p3pp3rf1y.sophisticatedcore.api.IStorageWrapper; import net.p3pp3rf1y.sophisticatedcore.client.gui.utils.TranslationHelper; import net.p3pp3rf1y.sophisticatedcore.common.gui.UpgradeSlotChangeResult; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -17,8 +18,8 @@ public class TankUpgradeItem extends UpgradeItemBase { private final TankUpgradeConfig tankUpgradeConfig; - public TankUpgradeItem(CreativeModeTab itemGroup, TankUpgradeConfig tankUpgradeConfig) { - super(itemGroup); + public TankUpgradeItem(CreativeModeTab itemGroup, TankUpgradeConfig tankUpgradeConfig, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.tankUpgradeConfig = tankUpgradeConfig; } @@ -47,6 +48,11 @@ public UpgradeType getType() { @Override public UpgradeSlotChangeResult canAddUpgradeTo(IStorageWrapper storageWrapper, ItemStack upgradeStack, boolean firstLevelStorage, boolean isClientSide) { + UpgradeSlotChangeResult result = super.canAddUpgradeTo(storageWrapper, upgradeStack, firstLevelStorage, isClientSide); + if (!result.isSuccessful()) { + return result; + } + Set errorUpgradeSlots = new HashSet<>(); storageWrapper.getUpgradeHandler().getSlotWrappers().forEach((slot, wrapper) -> { if (wrapper instanceof TankUpgradeWrapper) { diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/voiding/VoidUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/voiding/VoidUpgradeItem.java index e43feb98..9672bd39 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/voiding/VoidUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/voiding/VoidUpgradeItem.java @@ -1,6 +1,7 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.voiding; import net.minecraft.world.item.CreativeModeTab; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -8,8 +9,8 @@ public class VoidUpgradeItem extends UpgradeItemBase { public static final UpgradeType TYPE = new UpgradeType<>(VoidUpgradeWrapper::new); private final VoidUpgradeConfig voidUpgradeConfig; - public VoidUpgradeItem(VoidUpgradeConfig voidUpgradeConfig, CreativeModeTab itemGroup) { - super(itemGroup); + public VoidUpgradeItem(VoidUpgradeConfig voidUpgradeConfig, CreativeModeTab itemGroup, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.voidUpgradeConfig = voidUpgradeConfig; } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/xppump/XpPumpUpgradeItem.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/xppump/XpPumpUpgradeItem.java index 2af8b2cb..8f81f9d1 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/xppump/XpPumpUpgradeItem.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/upgrades/xppump/XpPumpUpgradeItem.java @@ -1,6 +1,7 @@ package net.p3pp3rf1y.sophisticatedcore.upgrades.xppump; import net.minecraft.world.item.CreativeModeTab; +import net.p3pp3rf1y.sophisticatedcore.upgrades.IUpgradeCountLimitConfig; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeItemBase; import net.p3pp3rf1y.sophisticatedcore.upgrades.UpgradeType; @@ -8,8 +9,8 @@ public class XpPumpUpgradeItem extends UpgradeItemBase { public static final UpgradeType TYPE = new UpgradeType<>(XpPumpUpgradeWrapper::new); private final XpPumpUpgradeConfig xpPumpUpgradeConfig; - public XpPumpUpgradeItem(CreativeModeTab itemGroup, XpPumpUpgradeConfig xpPumpUpgradeConfig) { - super(itemGroup); + public XpPumpUpgradeItem(CreativeModeTab itemGroup, XpPumpUpgradeConfig xpPumpUpgradeConfig, IUpgradeCountLimitConfig upgradeTypeLimitConfig) { + super(itemGroup, upgradeTypeLimitConfig); this.xpPumpUpgradeConfig = xpPumpUpgradeConfig; } diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/util/CountAbbreviator.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/util/CountAbbreviator.java index 153dddd8..6e7e4433 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/util/CountAbbreviator.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/util/CountAbbreviator.java @@ -2,18 +2,21 @@ import java.math.RoundingMode; import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.Locale; public class CountAbbreviator { private CountAbbreviator() {} private static final String[] COUNT_SUFFIXES = new String[] {"k", "m", "b"}; + private static final DecimalFormatSymbols ROOT_LOCALE_FORMAT_SYMBOLS = new DecimalFormatSymbols(Locale.ROOT); private static final DecimalFormat TWO_DIGIT_PRECISION; private static final DecimalFormat ONE_DIGIT_PRECISION; static { - TWO_DIGIT_PRECISION = new DecimalFormat("#.00"); + TWO_DIGIT_PRECISION = new DecimalFormat("#.00", ROOT_LOCALE_FORMAT_SYMBOLS); TWO_DIGIT_PRECISION.setRoundingMode(RoundingMode.DOWN); - ONE_DIGIT_PRECISION = new DecimalFormat("##.0"); + ONE_DIGIT_PRECISION = new DecimalFormat("##.0", ROOT_LOCALE_FORMAT_SYMBOLS); ONE_DIGIT_PRECISION.setRoundingMode(RoundingMode.DOWN); } @@ -25,7 +28,7 @@ public static String abbreviate(int count) { public static String abbreviate(int count, int maxCharacters) { int digits = (int) Math.log10(count) + 1; if (digits <= maxCharacters) { - return String.format("%,d", count); + return String.format(Locale.ROOT, "%,d", count); } int thousandsExponent = ((digits - maxCharacters) / 3) + 1; @@ -38,7 +41,7 @@ public static String abbreviate(int count, int maxCharacters) { String numberPart = ""; if (wholeDigits > 3 || precisionDigits == 0) { - numberPart = String.format("%,d", (int) divisionResult); + numberPart = String.format(Locale.ROOT, "%,d", (int) divisionResult); } else if (precisionDigits == 2) { numberPart = TWO_DIGIT_PRECISION.format(divisionResult); } else if (precisionDigits == 1) { diff --git a/src/main/java/net/p3pp3rf1y/sophisticatedcore/util/NoopStorageWrapper.java b/src/main/java/net/p3pp3rf1y/sophisticatedcore/util/NoopStorageWrapper.java index 1cd51eb1..05e28884 100644 --- a/src/main/java/net/p3pp3rf1y/sophisticatedcore/util/NoopStorageWrapper.java +++ b/src/main/java/net/p3pp3rf1y/sophisticatedcore/util/NoopStorageWrapper.java @@ -1,7 +1,8 @@ package net.p3pp3rf1y.sophisticatedcore.util; import net.minecraft.nbt.CompoundTag; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraftforge.common.ForgeConfigSpec; @@ -22,204 +23,209 @@ import java.util.function.Consumer; import java.util.function.Supplier; -@SuppressWarnings("java:S4144") //this is noop wrapper and thus identical implementation isn't an issue especially when it means just returning same field +@SuppressWarnings("java:S4144") +//this is noop wrapper and thus identical implementation isn't an issue especially when it means just returning same field public class NoopStorageWrapper implements IStorageWrapper { - public static final NoopStorageWrapper INSTANCE = new NoopStorageWrapper(); - - @Nullable - private UpgradeHandler upgradeHandler; - @Nullable - private InventoryHandler inventoryHandler; - @Nullable - private RenderInfo renderInfo; - @Nullable - private SettingsHandler settingsHandler; - - protected NoopStorageWrapper() {} - - @Override - public void setSaveHandler(Runnable saveHandler) { - //noop - } - - @Override - public ITrackedContentsItemHandler getInventoryForUpgradeProcessing() { - return getInventoryHandler(); - } - - @Override - public InventoryHandler getInventoryHandler() { - if (inventoryHandler == null) { - inventoryHandler = new InventoryHandler(0, this, new CompoundTag(), () -> {}, 64, new StackUpgradeConfig(new ForgeConfigSpec.Builder())) { - @Override - protected boolean isAllowed(ItemStack stack) { - return true; - } - }; - } - return inventoryHandler; - } - - @Override - public ITrackedContentsItemHandler getInventoryForInputOutput() { - return getInventoryHandler(); - } - - @Override - public SettingsHandler getSettingsHandler() { - if (settingsHandler == null) { - settingsHandler = new SettingsHandler(new CompoundTag(), () -> {}, this::getInventoryHandler, this::getRenderInfo) { - @Override - protected CompoundTag getSettingsNbtFromContentsNbt(CompoundTag contentsNbt) { - return contentsNbt; - } - - @Override - protected void addItemDisplayCategory(Supplier inventoryHandlerSupplier, Supplier renderInfoSupplier, CompoundTag settingsNbt) { - //noop - } - - @Override - public String getGlobalSettingsCategoryName() { - return ""; - } - - @Override - public ISettingsCategory instantiateGlobalSettingsCategory(CompoundTag categoryNbt, Consumer saveNbt) { - return new MainSettingsCategory<>(categoryNbt, saveNbt, ""); - } - - @Override - protected void saveCategoryNbt(CompoundTag settingsNbt, String categoryName, CompoundTag tag) { - //noop - } - }; - } - return settingsHandler; - } - - @Override - public UpgradeHandler getUpgradeHandler() { - if (upgradeHandler == null) { - upgradeHandler = new UpgradeHandler(0, this, new CompoundTag(), () -> {}, () -> {}); - } - - return upgradeHandler; - } - - @Override - public Optional getContentsUuid() { - return Optional.empty(); - } - - @Override - public int getMainColor() { - return -1; - } - - @Override - public int getAccentColor() { - return -1; - } - - @Override - public Optional getOpenTabId() { - return Optional.empty(); - } - - @Override - public void setOpenTabId(int openTabId) { - //noop - } - - @Override - public void removeOpenTabId() { - //noop - } - - @Override - public void setColors(int mainColor, int accentColor) { - //noop - } - - @Override - public void setSortBy(SortBy sortBy) { - //noop - } - - @Override - public SortBy getSortBy() { - return SortBy.NAME; - } - - @Override - public void sort() { - //noop - } - - @Override - public void onContentsNbtUpdated() { - //noop - } - - @Override - public void refreshInventoryForUpgradeProcessing() { - //noop - } - - @Override - public void refreshInventoryForInputOutput() { - //noop - } - - @Override - public void setPersistent(boolean persistent) { - //noop - } - - public void setSlotNumbers(int numberOfInventorySlots, int numberOfUpgradeSlots) { - //noop - } - - public void setLoot(ResourceLocation lootTableName, float lootPercentage) { - //noop - } - - @Override - public void fillWithLoot(Player playerEntity) { - //noop - } - - public void setContentsUuid(UUID storageUuid) { - //noop - } - - @Override - public RenderInfo getRenderInfo() { - if (renderInfo == null) { - renderInfo = new RenderInfo(() -> () -> {}) { - - @Override - protected void serializeRenderInfo(CompoundTag renderInfo) { - //noop - } - - @Override - protected Optional getRenderInfoTag() { - return Optional.empty(); - } - }; - } - return renderInfo; - } - - @Override - public void setColumnsTaken(int columnsTaken, boolean hasChanged) { - //noop - } - - @Override - public int getColumnsTaken() { - return 0; - } + public static final NoopStorageWrapper INSTANCE = new NoopStorageWrapper(); + + @Nullable + private UpgradeHandler upgradeHandler; + @Nullable + private InventoryHandler inventoryHandler; + @Nullable + private RenderInfo renderInfo; + @Nullable + private SettingsHandler settingsHandler; + + protected NoopStorageWrapper() { + } + + @Override + public void setSaveHandler(Runnable saveHandler) { + //noop + } + + @Override + public ITrackedContentsItemHandler getInventoryForUpgradeProcessing() { + return getInventoryHandler(); + } + + @Override + public InventoryHandler getInventoryHandler() { + if (inventoryHandler == null) { + inventoryHandler = new InventoryHandler(0, this, new CompoundTag(), () -> { + }, 64, new StackUpgradeConfig(new ForgeConfigSpec.Builder())) { + @Override + protected boolean isAllowed(ItemStack stack) { + return true; + } + }; + } + return inventoryHandler; + } + + @Override + public ITrackedContentsItemHandler getInventoryForInputOutput() { + return getInventoryHandler(); + } + + @Override + public SettingsHandler getSettingsHandler() { + if (settingsHandler == null) { + settingsHandler = new SettingsHandler(new CompoundTag(), () -> { + }, this::getInventoryHandler, this::getRenderInfo) { + @Override + protected CompoundTag getSettingsNbtFromContentsNbt(CompoundTag contentsNbt) { + return contentsNbt; + } + + @Override + protected void addItemDisplayCategory(Supplier inventoryHandlerSupplier, Supplier renderInfoSupplier, CompoundTag settingsNbt) { + //noop + } + + @Override + public String getGlobalSettingsCategoryName() { + return ""; + } + + @Override + public ISettingsCategory instantiateGlobalSettingsCategory(CompoundTag categoryNbt, Consumer saveNbt) { + return new MainSettingsCategory<>(categoryNbt, saveNbt, ""); + } + + @Override + protected void saveCategoryNbt(CompoundTag settingsNbt, String categoryName, CompoundTag tag) { + //noop + } + }; + } + return settingsHandler; + } + + @Override + public UpgradeHandler getUpgradeHandler() { + if (upgradeHandler == null) { + upgradeHandler = new UpgradeHandler(0, this, new CompoundTag(), () -> { + }, () -> { + }); + } + + return upgradeHandler; + } + + @Override + public Optional getContentsUuid() { + return Optional.empty(); + } + + @Override + public int getMainColor() { + return -1; + } + + @Override + public int getAccentColor() { + return -1; + } + + @Override + public Optional getOpenTabId() { + return Optional.empty(); + } + + @Override + public void setOpenTabId(int openTabId) { + //noop + } + + @Override + public void removeOpenTabId() { + //noop + } + + @Override + public void setColors(int mainColor, int accentColor) { + //noop + } + + @Override + public void setSortBy(SortBy sortBy) { + //noop + } + + @Override + public SortBy getSortBy() { + return SortBy.NAME; + } + + @Override + public void sort() { + //noop + } + + @Override + public void onContentsNbtUpdated() { + //noop + } + + @Override + public void refreshInventoryForUpgradeProcessing() { + //noop + } + + @Override + public void refreshInventoryForInputOutput() { + //noop + } + + @Override + public void setPersistent(boolean persistent) { + //noop + } + + @Override + public void fillWithLoot(Player playerEntity) { + //noop + } + + @Override + public RenderInfo getRenderInfo() { + if (renderInfo == null) { + renderInfo = new RenderInfo(() -> () -> { + }) { + + @Override + protected void serializeRenderInfo(CompoundTag renderInfo) { + //noop + } + + @Override + protected Optional getRenderInfoTag() { + return Optional.empty(); + } + }; + } + return renderInfo; + } + + @Override + public void setColumnsTaken(int columnsTaken, boolean hasChanged) { + //noop + } + + @Override + public int getColumnsTaken() { + return 0; + } + + @Override + public String getStorageType() { + return ""; + } + + @Override + public Component getDisplayName() { + return TextComponent.EMPTY; + } } diff --git a/src/main/resources/assets/sophisticatedcore/lang/en_us.json b/src/main/resources/assets/sophisticatedcore/lang/en_us.json index 43778cfb..d31a8cfc 100644 --- a/src/main/resources/assets/sophisticatedcore/lang/en_us.json +++ b/src/main/resources/assets/sophisticatedcore/lang/en_us.json @@ -9,6 +9,8 @@ "item.sophisticatedcore.storage.tooltip.empty": "No Upgrades or Inventory Contents", "item.sophisticatedcore.storage.tooltip.press_for_contents": "Press <%s> to View Contents", "item.sophisticatedcore.storage.tooltip.shift": "Left Shift", + "upgrade_group.sophisticatedcore.stack_upgrades": "Stack Upgrades", + "upgrade_group.sophisticatedcore.cooking_upgrades": "Furnace Upgrades", "gui.sophisticatedcore.settings.no_sort": "No Sort", "gui.sophisticatedcore.settings.no_sort.tooltip": "No Sort Slot Settings", "gui.sophisticatedcore.settings.no_sort.tooltip_detail": "Allows selecting slots that are ignored by sorting\nOpen tab to modify slot settings", @@ -201,6 +203,9 @@ "gui.sophisticatedcore.error.add.tank_capacity_high": "Backpack can't support this tank upgrade. Upgrade backpack or add stack multiplier to get at least %sx higher capacity", "gui.sophisticatedcore.error.add.battery_energy_high": "Backpack can't support this battery upgrade. Upgrade backpack or add stack multiplier to get at least %sx higher max energy", "gui.sophisticatedcore.error.add.battery_exists": "There's already Battery Upgrade in another upgrade slot", + "gui.sophisticatedcore.error.add.upgrade_not_allowed": "%s can't be used in %s", + "gui.sophisticatedcore.error.add.only_single_upgrade_allowed": "Only single %s can be used in %s", + "gui.sophisticatedcore.error.add.only_x_upgrades_allowed": "Only %dx %s can be used in %s", "gui.sophisticatedcore.narrate.tab_button": "Upgrade tab open/close button", "gui.sophisticatedcore.narrate.context_button": "Context toggle set to: %s", "gui.sophisticatedcore.narrate.context_button.usage": "Click to toggle context",