Skip to content

Commit

Permalink
Made AppliedFlux an optional dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
pedroksl committed Aug 18, 2024
1 parent 3125117 commit 4a17924
Show file tree
Hide file tree
Showing 10 changed files with 309 additions and 86 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,10 @@
import java.util.*;

import appeng.api.ids.AEComponents;
import appeng.api.upgrades.IUpgradeInventory;
import appeng.api.upgrades.IUpgradeableObject;
import appeng.api.upgrades.UpgradeInventories;
import appeng.helpers.patternprovider.*;
import com.glodblock.github.appflux.common.AFSingletons;
import com.glodblock.github.appflux.common.me.energy.EnergyTicker;
import com.glodblock.github.appflux.common.me.service.IEnergyDistributor;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.component.DataComponentMap;
import net.minecraft.world.item.component.ItemContainerContents;
import net.neoforged.fml.ModList;
import net.pedroksl.advanced_ae.common.patterns.AdvPatternDetails;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
Expand Down Expand Up @@ -69,7 +62,7 @@
/**
* Shared code between the pattern provider block and part.
*/
public class AdvPatternProviderLogic implements InternalInventoryHost, ICraftingProvider, IUpgradeableObject {
public class AdvPatternProviderLogic implements InternalInventoryHost, ICraftingProvider {
private static final Logger LOGGER = LoggerFactory.getLogger(AdvPatternProviderLogic.class);

public static final String NBT_MEMORY_CARD_PATTERNS = "patterns";
Expand All @@ -80,14 +73,11 @@ public class AdvPatternProviderLogic implements InternalInventoryHost, ICrafting
public static final String NBT_SEND_DIRECTION = "sendDirection";
public static final String NBT_DIRECTION_MAP = "directionMap";
public static final String NBT_RETURN_INV = "returnInv";
public static final String NBT_UPGRADES = "upgrades";

private final AdvPatternProviderLogicHost host;
private final IManagedGridNode mainNode;
private final IActionSource actionSource;
private final IConfigManager configManager;
private final IUpgradeInventory upgrades;
private EnergyTicker afTicker;

private int priority;

Expand Down Expand Up @@ -140,10 +130,6 @@ public AdvPatternProviderLogic(IManagedGridNode mainNode, AdvPatternProviderLogi
this.mainNode.ifPresent((grid, node) -> grid.getTickManager().alertDevice(node));
this.host.saveChanges();
});
int upgradeCount = ModList.get().isLoaded("appflux") ? 2 : 1;
this.upgrades = UpgradeInventories.forMachine(host.getTerminalIcon().getItem(), upgradeCount, this::onUpgradesChanged);
this.afTicker = new EnergyTicker(this.host::getBlockEntity, this.host, () -> this.upgrades.isInstalled(AFSingletons.INDUCTION_CARD), this.mainNode, this.actionSource);
this.mainNode.addService(IEnergyDistributor.class, this.afTicker);
}

public int getPriority() {
Expand All @@ -157,17 +143,6 @@ public void setPriority(int priority) {
ICraftingProvider.requestUpdate(mainNode);
}

@Override
public IUpgradeInventory getUpgrades() {
return this.upgrades;
}

private void onUpgradesChanged() {
this.host.saveChanges();
this.host.getBlockEntity().invalidateCapabilities();
this.afTicker.updateSleep();
}

public void writeToNBT(CompoundTag tag, HolderLookup.Provider registries) {
this.configManager.writeToNBT(tag, registries);
this.patternInventory.writeToNBT(tag, NBT_MEMORY_CARD_PATTERNS, registries);
Expand Down Expand Up @@ -211,7 +186,6 @@ public void writeToNBT(CompoundTag tag, HolderLookup.Provider registries) {
tag.put(NBT_DIRECTION_MAP, dirListTag);

tag.put(NBT_RETURN_INV, this.returnInv.writeToTag(registries));
this.upgrades.writeToNBT(tag, NBT_UPGRADES, registries);
}

public void readFromNBT(CompoundTag tag, HolderLookup.Provider registries) {
Expand Down Expand Up @@ -261,7 +235,6 @@ public void readFromNBT(CompoundTag tag, HolderLookup.Provider registries) {
}

this.returnInv.readFromTag(tag.getList(NBT_RETURN_INV, Tag.TAG_COMPOUND), registries);
this.upgrades.readFromNBT(tag, NBT_UPGRADES, registries);
}

public IConfigManager getConfigManager() {
Expand Down Expand Up @@ -660,19 +633,12 @@ public void addDrops(List<ItemStack> drops) {
}

this.returnInv.addDrops(drops, this.host.getBlockEntity().getLevel(), this.host.getBlockEntity().getBlockPos());

for (var is : this.upgrades) {
if (!is.isEmpty()) {
drops.add(is);
}
}
}

public void clearContent() {
this.patternInventory.clear();
this.sendList.clear();
this.returnInv.clear();
this.upgrades.clear();
}

public PatternProviderReturnInventory getReturnInv() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

import java.util.EnumSet;

import appeng.api.upgrades.IUpgradeInventory;
import appeng.api.upgrades.IUpgradeableObject;
import appeng.menu.locator.MenuHostLocator;
import net.pedroksl.advanced_ae.gui.advpatternprovider.AdvPatternProviderContainer;
import org.jetbrains.annotations.Nullable;
Expand All @@ -25,7 +23,7 @@
import appeng.menu.ISubMenu;
import appeng.menu.MenuOpener;

public interface AdvPatternProviderLogicHost extends IConfigurableObject, IPriorityHost, PatternContainer, IUpgradeableObject {
public interface AdvPatternProviderLogicHost extends IConfigurableObject, IPriorityHost, PatternContainer {
AdvPatternProviderLogic getLogic();

/**
Expand Down Expand Up @@ -86,8 +84,4 @@ default long getTerminalSortOrder() {
default PatternContainerGroup getTerminalGroup() {
return getLogic().getTerminalGroup();
}

default IUpgradeInventory getUpgrades() {
return ((IUpgradeableObject) this.getLogic()).getUpgrades();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,17 @@
import appeng.api.config.LockCraftingMode;
import appeng.api.config.Settings;
import appeng.api.config.YesNo;
import appeng.api.upgrades.Upgrades;
import appeng.client.gui.AEBaseScreen;
import appeng.client.gui.Icon;
import appeng.client.gui.style.ScreenStyle;
import appeng.client.gui.widgets.*;
import appeng.core.localization.GuiText;
import appeng.core.network.ServerboundPacket;
import appeng.core.network.serverbound.ConfigButtonPacket;
import appeng.menu.SlotSemantics;
import com.glodblock.github.appflux.util.helpers.IUpgradableMenu;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
import net.neoforged.neoforge.network.PacketDistributor;

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

public class AdvPatternProviderGui extends AEBaseScreen<AdvPatternProviderContainer> {

private final SettingToggleButton<YesNo> blockingModeButton;
Expand Down Expand Up @@ -47,8 +41,6 @@ public AdvPatternProviderGui(AdvPatternProviderContainer menu, Inventory playerI

this.lockReason = new AdvPatternProviderLockReason(this);
widgets.add("lockReason", this.lockReason);

this.widgets.add("upgrades", new UpgradesPanel(menu.getSlots(SlotSemantics.UPGRADE), this::getCompatibleUpgrades));
}

@Override
Expand All @@ -66,11 +58,4 @@ private void selectNextPatternProviderMode() {
ServerboundPacket message = new ConfigButtonPacket(Settings.PATTERN_ACCESS_TERMINAL, backwards);
PacketDistributor.sendToServer(message);
}

private List<Component> getCompatibleUpgrades() {
ArrayList<Component> list = new ArrayList<>();
list.add(GuiText.CompatibleUpgrades.text());
list.addAll(Upgrades.getTooltipLinesForMachine(((IUpgradableMenu) this.menu).getUpgrades().getUpgradableItem()));
return list;
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
package net.pedroksl.advanced_ae.gui.advpatternprovider;

import appeng.api.upgrades.IUpgradeInventory;
import appeng.api.upgrades.IUpgradeableObject;
import appeng.menu.ToolboxMenu;
import com.glodblock.github.appflux.util.helpers.IUpgradableMenu;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.MenuType;

Expand All @@ -18,19 +14,16 @@
import appeng.menu.guisync.GuiSync;
import appeng.menu.slot.AppEngSlot;
import appeng.menu.slot.RestrictedInputSlot;
import net.minecraft.world.level.ItemLike;
import net.pedroksl.advanced_ae.common.logic.AdvPatternProviderLogic;
import net.pedroksl.advanced_ae.common.logic.AdvPatternProviderLogicHost;

/**
* @see appeng.client.gui.implementations.PatternProviderScreen
*/
public class AdvPatternProviderMenu extends AEBaseMenu implements IUpgradableMenu {
public class AdvPatternProviderMenu extends AEBaseMenu {

protected final AdvPatternProviderLogic logic;

private final ToolboxMenu toolbox;

@GuiSync(3)
public YesNo blockingMode = YesNo.NO;
@GuiSync(4)
Expand Down Expand Up @@ -64,9 +57,6 @@ protected AdvPatternProviderMenu(MenuType<? extends AdvPatternProviderMenu> menu
this.addSlot(new AppEngSlot(returnInv, i), SlotSemantics.STORAGE);
}
}

this.toolbox = new ToolboxMenu(this);
this.setupUpgrades(((IUpgradeableObject) host).getUpgrades());
}

@Override
Expand All @@ -79,27 +69,13 @@ public void broadcastChanges() {
unlockStack = logic.getUnlockStack();
}

toolbox.tick();

super.broadcastChanges();
}

public GenericStackInv getReturnInv() {
return logic.getReturnInv();
}

public ToolboxMenu getToolbox() {
return this.toolbox;
}

public IUpgradeInventory getUpgrades() {
return ((IUpgradeableObject) this.logic).getUpgrades();
}

public boolean hasUpgrade(ItemLike upgradeCard) {
return this.getUpgrades().isInstalled(upgradeCard);
}

public YesNo getBlockingMode() {
return blockingMode;
}
Expand Down
71 changes: 71 additions & 0 deletions src/main/java/net/pedroksl/advanced_ae/mixins/AAEMixinPlugin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package net.pedroksl.advanced_ae.mixins;

import net.neoforged.fml.ModList;
import org.objectweb.asm.tree.ClassNode;
import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
import net.neoforged.fml.loading.LoadingModList;
import net.neoforged.fml.loading.moddiscovery.ModInfo;

import java.util.List;
import java.util.Set;

public class AAEMixinPlugin implements IMixinConfigPlugin {

private static final Object2ObjectMap<String, String> MOD_MIXINS = new Object2ObjectOpenHashMap<>(
new String[]{"net.pedroksl.advanced_ae.mixins.appflux.MixinAdvPatternProviderMenu",
"net.pedroksl.advanced_ae.mixins.appflux.MixinAdvPatternProviderGui",
"net.pedroksl.advanced_ae.mixins.appflux.MixinAdvPatternProviderLogic",
"net.pedroksl.advanced_ae.mixins.appflux.MixinAdvPatternProviderLogicHost"},
new String[]{"appflux", "appflux", "appflux", "appflux"},
Object2ObjectOpenHashMap.DEFAULT_LOAD_FACTOR
);

@Override
public void onLoad(String s) {
String[] str;

}

@Override
public String getRefMapperConfig() {
return null;
}

@Override
public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
return !MOD_MIXINS.containsKey(mixinClassName) || isModLoaded(MOD_MIXINS.get(mixinClassName));
}

@Override
public void acceptTargets(Set<String> set, Set<String> set1) {

}

@Override
public List<String> getMixins() {
return null;
}

@Override
public void preApply(String s, ClassNode classNode, String s1, IMixinInfo iMixinInfo) {

}

@Override
public void postApply(String s, ClassNode classNode, String s1, IMixinInfo iMixinInfo) {

}

private static boolean isModLoaded(String modId) {
if (ModList.get() == null) {
return LoadingModList.get().getMods()
.stream().map(ModInfo::getModId)
.anyMatch(modId::equals);
} else {
return ModList.get().isLoaded(modId);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package net.pedroksl.advanced_ae.mixins.appflux;

import appeng.api.upgrades.Upgrades;
import appeng.client.gui.AEBaseScreen;
import appeng.client.gui.style.ScreenStyle;
import appeng.client.gui.widgets.UpgradesPanel;
import appeng.core.localization.GuiText;
import appeng.menu.SlotSemantics;
import com.glodblock.github.appflux.util.helpers.IUpgradableMenu;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
import net.pedroksl.advanced_ae.gui.advpatternprovider.AdvPatternProviderContainer;
import net.pedroksl.advanced_ae.gui.advpatternprovider.AdvPatternProviderGui;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

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

@Mixin(AdvPatternProviderGui.class)
public abstract class MixinAdvPatternProviderGui extends AEBaseScreen<AdvPatternProviderContainer> {

@Inject(
method = "<init>",
at = @At("TAIL"),
remap = false
)
private void initUpgrade(AdvPatternProviderContainer menu, Inventory playerInventory, Component title, ScreenStyle style, CallbackInfo ci) {
this.widgets.add("upgrades", new UpgradesPanel(menu.getSlots(SlotSemantics.UPGRADE), this::af_$getCompatibleUpgrades));
}

@Unique
private List<Component> af_$getCompatibleUpgrades() {
var list = new ArrayList<Component>();
list.add(GuiText.CompatibleUpgrades.text());
list.addAll(Upgrades.getTooltipLinesForMachine(((IUpgradableMenu) menu).getUpgrades().getUpgradableItem()));
return list;
}

public MixinAdvPatternProviderGui(AdvPatternProviderContainer menu, Inventory playerInventory, Component title, ScreenStyle style) {
super(menu, playerInventory, title, style);
}

}
Loading

0 comments on commit 4a17924

Please sign in to comment.