Skip to content

Commit

Permalink
Merge pull request #199 from P3pp3rF1y/1.18.x-dev
Browse files Browse the repository at this point in the history
Release merge
  • Loading branch information
P3pp3rF1y authored Feb 4, 2024
2 parents d66dbaf + 28a0ea0 commit 4002c89
Show file tree
Hide file tree
Showing 34 changed files with 495 additions and 246 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/net/p3pp3rf1y/sophisticatedcore/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -92,4 +93,8 @@ default int getBaseStackSizeMultiplier() {
default void onInit() {
getInventoryHandler().onInit();
}

String getStorageType();

Component getDisplayName();
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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.";
Expand Down Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -11,7 +12,9 @@
public class BlockTransformationUpgradeItem extends UpgradeItemBase<BlockTransformationUpgradeWrapper> {
private static final UpgradeType<BlockTransformationUpgradeWrapper> TYPE = new UpgradeType<>(BlockTransformationUpgradeWrapper::new);
private final Supplier<RecipeType<ChippedRecipe>> getRecipeType;
public BlockTransformationUpgradeItem(CreativeModeTab itemGroup, Supplier<RecipeType<ChippedRecipe>> getRecipeType) {super(itemGroup);

public BlockTransformationUpgradeItem(CreativeModeTab itemGroup, Supplier<RecipeType<ChippedRecipe>> getRecipeType, IUpgradeCountLimitConfig upgradeTypeLimitConfig) {
super(itemGroup, upgradeTypeLimitConfig);
this.getRecipeType = getRecipeType;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
Original file line number Diff line number Diff line change
@@ -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<T extends IUpgradeWrapper> {
UpgradeType<T> 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<Integer> 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<Integer> 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();
}

Expand All @@ -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);
}

Expand All @@ -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();
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -13,12 +14,35 @@
import java.util.List;

public abstract class UpgradeItemBase<T extends IUpgradeWrapper> extends ItemBase implements IUpgradeItem<T> {
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<Component> 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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -17,8 +18,8 @@ public class BatteryUpgradeItem extends UpgradeItemBase<BatteryUpgradeWrapper> {

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;
}

Expand All @@ -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<Integer> errorUpgradeSlots = new HashSet<>();
storageWrapper.getUpgradeHandler().getSlotWrappers().forEach((slot, wrapper) -> {
if (wrapper instanceof BatteryUpgradeWrapper) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -11,8 +12,8 @@ public class CompactingUpgradeItem extends UpgradeItemBase<CompactingUpgradeWrap
private final boolean shouldCompactThreeByThree;
private final IntSupplier filterSlotCount;

public CompactingUpgradeItem(boolean shouldCompactThreeByThree, IntSupplier filterSlotCount, CreativeModeTab itemGroup) {
super(itemGroup);
public CompactingUpgradeItem(boolean shouldCompactThreeByThree, IntSupplier filterSlotCount, CreativeModeTab itemGroup, IUpgradeCountLimitConfig upgradeTypeLimitConfig) {
super(itemGroup, upgradeTypeLimitConfig);
this.shouldCompactThreeByThree = shouldCompactThreeByThree;
this.filterSlotCount = filterSlotCount;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
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;

public class AutoBlastingUpgradeItem extends UpgradeItemBase<AutoCookingUpgradeWrapper.AutoBlastingUpgradeWrapper> implements IAutoCookingUpgradeItem {
public static final UpgradeType<AutoCookingUpgradeWrapper.AutoBlastingUpgradeWrapper> 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;
}

Expand All @@ -21,4 +24,9 @@ public UpgradeType<AutoCookingUpgradeWrapper.AutoBlastingUpgradeWrapper> getType
public AutoCookingUpgradeConfig getAutoCookingUpgradeConfig() {
return autoBlastingUpgradeConfig;
}

@Override
public UpgradeGroup getUpgradeGroup() {
return ICookingUpgrade.UPGRADE_GROUP;
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
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;

public class AutoSmeltingUpgradeItem extends UpgradeItemBase<AutoCookingUpgradeWrapper.AutoSmeltingUpgradeWrapper> implements IAutoCookingUpgradeItem {
public static final UpgradeType<AutoCookingUpgradeWrapper.AutoSmeltingUpgradeWrapper> 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;
}

Expand All @@ -21,4 +24,9 @@ public UpgradeType<AutoCookingUpgradeWrapper.AutoSmeltingUpgradeWrapper> getType
public AutoCookingUpgradeConfig getAutoCookingUpgradeConfig() {
return autoSmeltingUpgradeConfig;
}

@Override
public UpgradeGroup getUpgradeGroup() {
return ICookingUpgrade.UPGRADE_GROUP;
}
}
Loading

0 comments on commit 4002c89

Please sign in to comment.