Skip to content

Commit

Permalink
EMI Integration
Browse files Browse the repository at this point in the history
  • Loading branch information
shartte committed Dec 26, 2023
1 parent 76ea4c7 commit a380acc
Show file tree
Hide file tree
Showing 50 changed files with 689 additions and 508 deletions.
17 changes: 9 additions & 8 deletions src/main/java/appeng/api/integrations/emi/EmiStackConverter.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package appeng.api.integrations.emi;

import appeng.api.stacks.GenericStack;
import dev.emi.emi.api.stack.EmiStack;
import org.jetbrains.annotations.Nullable;

import dev.emi.emi.api.stack.EmiStack;

import appeng.api.stacks.GenericStack;

/**
* Implement this interface to provide AE2s EMI integration with a new way to convert between AE2 {@link GenericStack}
* and {@link dev.emi.emi.api.stack.EmiStack}.
Expand All @@ -17,8 +19,8 @@
*/
public interface EmiStackConverter {
/**
* The EMI {@link EmiStack#getKeyOfType key type} handled by this converter.
* AE2 handles {@link net.minecraft.world.level.material.Fluid} and {@link net.minecraft.world.item.Item} already.
* The EMI {@link EmiStack#getKeyOfType key type} handled by this converter. AE2 handles
* {@link net.minecraft.world.level.material.Fluid} and {@link net.minecraft.world.item.Item} already.
*/
Class<?> getKeyType();

Expand All @@ -33,14 +35,13 @@ public interface EmiStackConverter {
* @return Null if the converter can't handle the stack.
*/
@Nullable
EmiStack getIngredientFromStack(GenericStack stack);
EmiStack toEmiStack(GenericStack stack);

/**
* Converts an EmiStack handled by this converter into a generic stack.
*
* @return Null if the ingredient represents an "empty" ingredient (i.e.
* {@link EmiStack#EMPTY}.
* @return Null if the ingredient represents an "empty" ingredient (i.e. {@link EmiStack#EMPTY}.
*/
@Nullable
GenericStack getStackFromIngredient(EmiStack stack);
GenericStack toGenericStack(EmiStack stack);
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package appeng.api.integrations.emi;

import com.google.common.collect.ImmutableList;

import java.util.List;

import com.google.common.collect.ImmutableList;

/**
* Register your {@link EmiStackConverter} instances for JEI here.
*/
Expand Down
13 changes: 7 additions & 6 deletions src/main/java/appeng/client/gui/me/common/MEStorageScreen.java
Original file line number Diff line number Diff line change
Expand Up @@ -80,12 +80,12 @@
import appeng.core.sync.packets.MEInteractionPacket;
import appeng.core.sync.packets.SwitchGuisPacket;
import appeng.helpers.InventoryAction;
import appeng.integration.abstraction.ItemListMod;
import appeng.items.storage.ViewCellItem;
import appeng.menu.SlotSemantics;
import appeng.menu.me.common.GridInventoryEntry;
import appeng.menu.me.common.MEStorageMenu;
import appeng.menu.me.crafting.CraftingStatusMenu;
import appeng.util.ExternalSearch;
import appeng.util.IConfigManagerListener;
import appeng.util.Platform;
import appeng.util.prioritylist.IPartitionList;
Expand Down Expand Up @@ -200,7 +200,7 @@ public MEStorageScreen(C menu, Inventory playerInventory,

// Clear external search on open if configured, but not upon returning from a sub-screen
if (!menu.isReturnedFromSubScreen() && config.isUseExternalSearch() && config.isClearExternalSearchOnOpen()) {
ExternalSearch.clearExternalSearchText();
ItemListMod.setSearchText("");
}
}

Expand Down Expand Up @@ -359,7 +359,7 @@ protected void updateBeforeRender() {
private void updateSearch() {
if (config.isUseExternalSearch()) {
this.searchField.setVisible(false);
var externalSearchText = ExternalSearch.getExternalSearchText();
var externalSearchText = ItemListMod.getSearchText();
if (!Objects.equals(repo.getSearchString(), externalSearchText)) {
setSearchText(externalSearchText);
}
Expand Down Expand Up @@ -387,9 +387,10 @@ private void updateSearch() {
// Sync the search text both ways but make the direction depend on which search has the focus
if (config.isSyncWithExternalSearch()) {
if (searchField.isFocused()) {
ExternalSearch.setExternalSearchText(searchField.getValue());
} else if (ExternalSearch.isExternalSearchFocused()) {
var externalSearchText = ExternalSearch.getExternalSearchText();
String text = searchField.getValue();
ItemListMod.setSearchText(text);
} else if (ItemListMod.hasSearchFocus()) {
var externalSearchText = ItemListMod.getSearchText();
if (!Objects.equals(externalSearchText, searchField.getValue())) {
searchField.setValue(externalSearchText);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@
import appeng.client.gui.widgets.AECheckbox;
import appeng.client.gui.widgets.TabButton;
import appeng.core.localization.GuiText;
import appeng.integration.abstraction.JEIFacade;
import appeng.integration.abstraction.REIFacade;
import appeng.integration.abstraction.ItemListMod;
import appeng.menu.SlotSemantics;
import appeng.menu.me.common.MEStorageMenu;

Expand All @@ -35,15 +34,12 @@ public TerminalSettingsScreen(MEStorageScreen<C> parent) {

Component externalSearchMod;
boolean hasExternalSearch;
if (JEIFacade.instance().isEnabled()) {
externalSearchMod = Component.literal("JEI");
hasExternalSearch = true;
} else if (REIFacade.instance().isEnabled()) {
externalSearchMod = Component.literal("REI");
if (ItemListMod.isEnabled()) {
externalSearchMod = Component.literal(ItemListMod.getShortName());
hasExternalSearch = true;
} else {
// User doesn't have either, so disable the buttons but show what *would* be possible
externalSearchMod = Component.literal("JEI/REI");
externalSearchMod = Component.literal("REI/EMI");
hasExternalSearch = false;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import java.util.TreeMap;
import java.util.concurrent.CompletableFuture;

import appeng.integration.modules.emi.EmiText;
import com.google.common.base.Preconditions;
import com.google.gson.JsonObject;

Expand All @@ -27,6 +26,7 @@
import appeng.core.localization.LocalizationEnum;
import appeng.core.localization.PlayerMessages;
import appeng.datagen.providers.IAE2DataProvider;
import appeng.integration.modules.emi.EmiText;
import appeng.integration.modules.igtooltip.TooltipIds;

public class LocalizationProvider implements IAE2DataProvider {
Expand Down
42 changes: 0 additions & 42 deletions src/main/java/appeng/integration/abstraction/IJEI.java

This file was deleted.

42 changes: 0 additions & 42 deletions src/main/java/appeng/integration/abstraction/IREI.java

This file was deleted.

44 changes: 44 additions & 0 deletions src/main/java/appeng/integration/abstraction/ItemListMod.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package appeng.integration.abstraction;

import com.google.common.base.Strings;

/**
* Abstraction for accessing functionality of mods like JEI/REI/EMI.
*/
public class ItemListMod {

private static ItemListModAdapter adapter = ItemListModAdapter.none();

private ItemListMod() {
}

/**
* @return True when an item-list mod like JEI/REI is active.
*/
public static boolean isEnabled() {
return adapter.isEnabled();
}

/**
* @return The name of the item-list mod that is present.
*/
public static String getShortName() {
return adapter.getShortName();
}

public static String getSearchText() {
return Strings.nullToEmpty(adapter.getSearchText());
}

public static void setSearchText(String text) {
adapter.setSearchText(Strings.nullToEmpty(text));
}

public static boolean hasSearchFocus() {
return adapter.hasSearchFocus();
}

public static void setAdapter(ItemListModAdapter adapter) {
ItemListMod.adapter = adapter;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package appeng.integration.abstraction;

public interface ItemListModAdapter {

boolean isEnabled();

String getShortName();

default String getSearchText() {
return "";
}

default void setSearchText(String text) {
}

default boolean hasSearchFocus() {
return false;
}

static ItemListModAdapter none() {
return new ItemListModAdapter() {
@Override
public boolean isEnabled() {
return false;
}

@Override
public String getShortName() {
return "REI/EMI";
}
};
}

}
38 changes: 0 additions & 38 deletions src/main/java/appeng/integration/abstraction/JEIFacade.java

This file was deleted.

38 changes: 0 additions & 38 deletions src/main/java/appeng/integration/abstraction/REIFacade.java

This file was deleted.

Loading

0 comments on commit a380acc

Please sign in to comment.