Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Wireless Universal Terminal #88

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Prev Previous commit
Next Next commit
Add Fluid Pattern Module support for Universal Terminal
zeng-github01 committed Oct 14, 2024
commit 06ca99776632e3e6bd4746d34f4dca64b7819595
Original file line number Diff line number Diff line change
@@ -6,5 +6,6 @@ public enum WirelessTerminalType {
GAS,
CRAFTING,
PATTERN,
INTERFACE
INTERFACE,
FLUID_PATTERN,
}
Original file line number Diff line number Diff line change
@@ -3,6 +3,7 @@
import appeng.api.AEApi;
import appeng.util.Platform;
import co.neeve.nae2.common.api.config.WirelessTerminalType;
import com.glodblock.github.loader.FCItems;
import com.mekeng.github.common.ItemAndBlocks;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
@@ -21,6 +22,7 @@ public class UniversalTerminalHelper {
public static final List<WirelessTerminalType> WIRELESS_TERMINAL_TYPE_LIST = Arrays.asList(WirelessTerminalType.values());

private static final boolean isMekEngLoaded = Platform.isModLoaded("mekeng");
private static final boolean isAE2FCLoaded = Platform.isModLoaded("ae2fc");

static {
wirelessTerminals.add(AEApi.instance().definitions().items().wirelessTerminal().maybeStack(1).orElse(null));
@@ -33,10 +35,15 @@ public class UniversalTerminalHelper {
terminals.add(AEApi.instance().definitions().parts().patternTerminal().maybeStack(1).orElse(null));
terminals.add(AEApi.instance().definitions().parts().fluidTerminal().maybeStack(1).orElse(null));

if (Platform.isModLoaded("mekeng")) {
if (isMekEngLoaded) {
wirelessTerminals.add(new ItemStack(ItemAndBlocks.WIRELESS_GAS_TERMINAL));
terminals.add(new ItemStack(ItemAndBlocks.GAS_TERMINAL));
}

if (isAE2FCLoaded) {
wirelessTerminals.add(new ItemStack(FCItems.WIRELESS_FLUID_PATTERN_TERMINAL));
terminals.add(new ItemStack(FCItems.PART_FLUID_PATTERN_TERMINAL));
}
}

public static boolean isWirelessTerminal(ItemStack stack) {
@@ -58,6 +65,11 @@ public static boolean isWirelessTerminal(ItemStack stack) {
if (wirelessGasTerminal.getItem() == item && wirelessGasTerminal.getItemDamage() == itemDamage) return true;
}

if (isAE2FCLoaded) {
ItemStack fluidPatternWirelessTerminal = new ItemStack(FCItems.WIRELESS_FLUID_PATTERN_TERMINAL);
if (fluidPatternWirelessTerminal.getItem() == item && fluidPatternWirelessTerminal.getItemDamage() == itemDamage) return true;
}

ItemStack wirelessCraftingTerminal = AEApi.instance().definitions().items().wirelessCraftingTerminal().maybeStack(1).orElse(null);
if (wirelessCraftingTerminal != null && wirelessCraftingTerminal.getItem() == item && wirelessCraftingTerminal.getItemDamage() == itemDamage)
return true;
@@ -87,6 +99,11 @@ public static boolean isTerminal(ItemStack stack) {
if (gasTerminal.getItem() == item && gasTerminal.getItemDamage() == itemDamage) return true;
}

if (isAE2FCLoaded) {
ItemStack fluidPatternTerminal = new ItemStack(FCItems.PART_FLUID_PATTERN_TERMINAL);
if (fluidPatternTerminal.getItem() == item && fluidPatternTerminal.getItemDamage() == itemDamage) return true;
}

ItemStack craftingTerminal = AEApi.instance().definitions().parts().craftingTerminal().maybeStack(1).orElse(null);
if (craftingTerminal != null && craftingTerminal.getItem() == item && craftingTerminal.getItemDamage() == itemDamage)
return true;
@@ -128,8 +145,8 @@ public static WirelessTerminalType getTerminalType(ItemStack stack) {
return WirelessTerminalType.PATTERN;
}

ItemStack wirelessInterfaceTerminal = AEApi.instance().definitions().parts().interfaceTerminal().maybeStack(1).orElse(null);
if (wirelessInterfaceTerminal != null && wirelessInterfaceTerminal.getItem() == item && wirelessInterfaceTerminal.getItemDamage() == itemDamage) {
ItemStack interfaceTerminal = AEApi.instance().definitions().parts().interfaceTerminal().maybeStack(1).orElse(null);
if (interfaceTerminal != null && interfaceTerminal.getItem() == item && interfaceTerminal.getItemDamage() == itemDamage) {
return WirelessTerminalType.INTERFACE;
}

@@ -155,6 +172,11 @@ public static WirelessTerminalType getTerminalType(ItemStack stack) {
return WirelessTerminalType.PATTERN;
}

ItemStack wirelessInterfaceTerminal = AEApi.instance().definitions().items().wirelessInterfaceTerminal().maybeStack(1).orElse(null);
if (wirelessInterfaceTerminal != null && wirelessInterfaceTerminal.getItem() == item && wirelessInterfaceTerminal.getItemDamage() == itemDamage) {
return WirelessTerminalType.INTERFACE;
}

//MekEng Integration
if (isMekEngLoaded) {
ItemStack gasTerminal = new ItemStack(ItemAndBlocks.GAS_TERMINAL);
@@ -168,21 +190,39 @@ public static WirelessTerminalType getTerminalType(ItemStack stack) {
}
}

if (isAE2FCLoaded) {
ItemStack fluidPatternTerminal = new ItemStack(FCItems.PART_FLUID_PATTERN_TERMINAL);
if (fluidPatternTerminal.getItem() == item && fluidPatternTerminal.getItemDamage() == itemDamage) {
return WirelessTerminalType.FLUID_PATTERN;
}

ItemStack fluidPatternWirelessTerminal = new ItemStack(FCItems.WIRELESS_FLUID_PATTERN_TERMINAL);
if (fluidPatternWirelessTerminal.getItem() == item && fluidPatternWirelessTerminal.getItemDamage() == itemDamage) {
return WirelessTerminalType.FLUID_PATTERN;
}
}

return null;
}

public static boolean isModuleValid(WirelessTerminalType type) {
return switch (type) {
case FLUID_PATTERN -> Platform.isModLoaded("ae2fc");
case GAS -> Platform.isModLoaded("mekeng");
default -> true;
};
}


public static ItemStack changeMode(ItemStack itemStack, EntityPlayer player, NBTTagCompound tag) {
EnumSet<WirelessTerminalType> installedModules = getInstalledModules(itemStack);
int type = tag.getInteger("type");
boolean installed;
WirelessTerminalType terminalType;
do {
type = (type + 1) % WIRELESS_TERMINAL_TYPE_LIST.size();
installed = installedModules.contains(WIRELESS_TERMINAL_TYPE_LIST.get(type));
if (WIRELESS_TERMINAL_TYPE_LIST.get(type) == WirelessTerminalType.GAS && !isMekELoaded) {
installed = false;
}
} while (!installed);
terminalType = WIRELESS_TERMINAL_TYPE_LIST.get(type);

} while (!isModuleValid(terminalType) || !installedModules.contains(terminalType));

tag.setInteger("type", type);

Original file line number Diff line number Diff line change
@@ -8,6 +8,10 @@
import appeng.util.Platform;
import co.neeve.nae2.NAE2;
import co.neeve.nae2.common.api.config.WirelessTerminalType;
import co.neeve.nae2.common.helpers.UniversalTerminalHelper;
import com.glodblock.github.common.item.ItemWirelessFluidPatternTerminal;
import com.glodblock.github.inventory.GuiType;
import com.glodblock.github.util.Util;
import com.mekeng.github.common.container.handler.AEGuiBridge;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.creativetab.CreativeTabs;
@@ -40,6 +44,7 @@ public IGuiHandler getGuiHandler(ItemStack is) {
case CRAFTING -> GuiBridge.GUI_WIRELESS_CRAFTING_TERMINAL;
case PATTERN -> GuiBridge.GUI_WIRELESS_PATTERN_TERMINAL;
case INTERFACE -> GuiBridge.GUI_WIRELESS_INTERFACE_TERMINAL;
default -> GuiBridge.GUI_WIRELESS_TERM;
};
}

@@ -71,7 +76,15 @@ public ActionResult<ItemStack> onItemRightClick(World w, EntityPlayer player, En
}
return new ActionResult(EnumActionResult.SUCCESS, changeMode(stack, player, tagCompound));
}
AEApi.instance().registries().wireless().openWirelessTerminalGui(stack, w, player);

switch (WIRELESS_TERMINAL_TYPE_LIST.get(Platform.openNbtData(stack).getInteger("type"))) {
case FLUID_PATTERN -> {
if (UniversalTerminalHelper.isModuleValid(WirelessTerminalType.FLUID_PATTERN)) {
Util.openWirelessTerminal(player.getHeldItem(hand), hand == EnumHand.MAIN_HAND ? player.inventory.currentItem : 40, false, w, player, GuiType.WIRELESS_FLUID_PATTERN_TERMINAL);
}
}
default -> AEApi.instance().registries().wireless().openWirelessTerminalGui(stack, w, player);
}

return new ActionResult(EnumActionResult.SUCCESS, stack);
}
@@ -123,7 +136,9 @@ protected void getCheckedSubItems(CreativeTabs creativeTab, NonNullList<ItemStac
}
int modulesValue = 0;
for (WirelessTerminalType type : WirelessTerminalType.values()) {
modulesValue |= (1 << type.ordinal());
if (UniversalTerminalHelper.isModuleValid(type)) {
modulesValue |= (1 << type.ordinal());
}
}

NBTTagCompound tag = new NBTTagCompound();
1 change: 1 addition & 0 deletions src/main/resources/assets/nae2/lang/en_us.lang
Original file line number Diff line number Diff line change
@@ -119,6 +119,7 @@ nae2.tooltip.universal_wireless_terminal.gas=Gas
nae2.tooltip.universal_wireless_terminal.crafting=Crafting
nae2.tooltip.universal_wireless_terminal.pattern=Pattern
nae2.tooltip.universal_wireless_terminal.interface=Interface
nae2.tooltip.universal_wireless_terminal.fluid_pattern=Fluid Pattern



2 changes: 2 additions & 0 deletions src/main/resources/assets/nae2/lang/zh_cn.lang
Original file line number Diff line number Diff line change
@@ -101,3 +101,5 @@ nae2.tooltip.universal_wireless_terminal.gas=气体
nae2.tooltip.universal_wireless_terminal.crafting=合成
nae2.tooltip.universal_wireless_terminal.pattern=样板
nae2.tooltip.universal_wireless_terminal.interface=接口
nae2.tooltip.universal_wireless_terminal.fluid_pattern=流体样板