Skip to content

Commit

Permalink
feat: add integration for EMI in storage actuator search
Browse files Browse the repository at this point in the history
  • Loading branch information
klikli-dev committed Aug 2, 2024
1 parent a0f1872 commit c3e654e
Show file tree
Hide file tree
Showing 17 changed files with 158 additions and 86 deletions.
6 changes: 2 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ dependencies {
//Jei
compileOnly "mezz.jei:jei-${minecraft_version}-common-api:${jei_version}"
compileOnly "mezz.jei:jei-${minecraft_version}-neoforge-api:${jei_version}"
runtimeOnly "mezz.jei:jei-${minecraft_version}-neoforge:${jei_version}"
// runtimeOnly "mezz.jei:jei-${minecraft_version}-neoforge:${jei_version}"

//curios
compileOnly "top.theillusivec4.curios:curios-neoforge:${curios_version}+${minecraft_version}:api"
Expand All @@ -174,9 +174,7 @@ dependencies {

// emi
compileOnly "dev.emi:emi-neoforge:${emi_version}:api"
if(System.getenv("EMI") == "true") {
runtimeOnly "dev.emi:emi-neoforge:${emi_version}"
}
runtimeOnly "dev.emi:emi-neoforge:${emi_version}"

//runtime only helper mods for dev env, placed in ./runtime-mods, example: Hwyla-forge-1.10.11-B78_1.16.2.jar
//runtimeOnly "ignoredvalue:Hwyla:forge-1.10.11-B78_1.16.2"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,10 @@
import com.klikli_dev.occultism.client.gui.controls.MachineSlotWidget;
import com.klikli_dev.occultism.client.gui.controls.SizedImageButton;
import com.klikli_dev.occultism.common.container.storage.StorageControllerContainerBase;
import com.klikli_dev.occultism.integration.emi.OccultismEmiIntegration;
import com.klikli_dev.occultism.integration.jei.JeiSettings;
import com.klikli_dev.occultism.integration.jei.OccultismJeiIntegration;
import com.klikli_dev.occultism.network.*;
import com.klikli_dev.occultism.network.Networking;
import com.klikli_dev.occultism.network.messages.*;
import com.klikli_dev.occultism.util.InputUtil;
import com.klikli_dev.occultism.util.TextUtil;
Expand Down Expand Up @@ -83,11 +84,11 @@ public abstract class StorageControllerGuiBase<T extends StorageControllerContai
public List<ItemStack> stacks;
public List<MachineReference> linkedMachines;
public IStorageControllerContainer storageControllerContainer;
public StorageControllerGuiMode guiMode = StorageControllerGuiMode.INVENTORY;
protected int maxItemTypes;
protected int usedItemTypes;
protected long maxTotalItemCount;
protected long usedTotalItemCount;
public StorageControllerGuiMode guiMode = StorageControllerGuiMode.INVENTORY;
protected ItemStack stackUnderMouse = ItemStack.EMPTY;
protected EditBox searchBar;
protected List<ItemSlotWidget> itemSlots = new ArrayList<>();
Expand Down Expand Up @@ -141,6 +142,15 @@ public StorageControllerGuiBase(T container, Inventory playerInventory, Componen
Networking.sendToServer(new MessageRequestStacks());
}

public static void onScreenMouseClickedPre(ScreenEvent.MouseButtonPressed.Pre event) {
//JEI correctly consumes the mouseClicked event if we click in their search bar
//That leads to our search bar never getting unfocused
//so we use the pre-event to unfocus -> if the click was in the search bar then the mouseClicked of our gui will handle it
if (event.getScreen() instanceof StorageControllerGuiBase<?> gui) {
gui.searchBar.setFocused(false);
}
}

//region Getter / Setter
protected abstract boolean isGuiValid();

Expand All @@ -152,10 +162,10 @@ public StorageControllerGuiBase(T container, Inventory playerInventory, Componen

public abstract SortType getSortType();

public abstract void setSortType(SortType sortType);

//endregion Getter / Setter

public abstract void setSortType(SortType sortType);

@Override
public Font getFontRenderer() {
return this.font;
Expand Down Expand Up @@ -219,7 +229,6 @@ public void markDirty() {
this.init();
}


@Override
public void setLinkedMachines(List<MachineReference> machines) {
this.linkedMachines = machines;
Expand Down Expand Up @@ -256,7 +265,9 @@ public void init() {
this.searchBar.setFocused(focus);

this.searchBar.setValue(searchBarText);
if (JeiSettings.isJeiLoaded() && JeiSettings.isJeiSearchSynced()) {
if (OccultismEmiIntegration.get().isLoaded() && JeiSettings.isJeiSearchSynced()) {
this.searchBar.setValue(OccultismEmiIntegration.get().getFilterText());
} else if (OccultismJeiIntegration.get().isLoaded() && JeiSettings.isJeiSearchSynced()) {
this.searchBar.setValue(OccultismJeiIntegration.get().getFilterText());
}

Expand All @@ -267,7 +278,7 @@ public void init() {
-1, 2, 0x404040);
this.storageSpaceLabel
.addLine(I18n.get(TRANSLATION_KEY_BASE + ".space_info_label_new",
String.format("%.2f", (double)this.usedTotalItemCount / (double)this.maxTotalItemCount * 100)
String.format("%.2f", (double) this.usedTotalItemCount / (double) this.maxTotalItemCount * 100)

), false);
this.addRenderableWidget(this.storageSpaceLabel);
Expand All @@ -276,7 +287,7 @@ public void init() {
new LabelWidget(this.leftPos + storageSpaceInfoLabelLeft - 7, this.topPos + storageSpaceInfoLabelTop + 40, true,
-1, 2, 0x404040);
this.storageTypesLabel
.addLine(I18n.get(TRANSLATION_KEY_BASE + ".space_info_label_types", String.format("%.0f", (double)this.usedItemTypes / (double)this.maxItemTypes * 100)), false);
.addLine(I18n.get(TRANSLATION_KEY_BASE + ".space_info_label_types", String.format("%.0f", (double) this.usedItemTypes / (double) this.maxItemTypes * 100)), false);
this.addRenderableWidget(this.storageTypesLabel);
this.initButtons();
}
Expand Down Expand Up @@ -334,16 +345,6 @@ protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX,
this.searchBar.render(guiGraphics, mouseX, mouseY, partialTicks);
}

public static void onScreenMouseClickedPre(ScreenEvent.MouseButtonPressed.Pre event){
//JEI correctly consumes the mouseClicked event if we click in their search bar
//That leads to our search bar never getting unfocused
//so we use the pre-event to unfocus -> if the click was in the search bar then the mouseClicked of our gui will handle it
if(event.getScreen() instanceof StorageControllerGuiBase<?> gui){
gui.searchBar.setFocused(false);
}
}


@Override
public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) {
super.mouseClicked(mouseX, mouseY, mouseButton);
Expand Down Expand Up @@ -410,10 +411,12 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
}

var nothandled = !this.searchBar.keyPressed(keyCode, scanCode, modifiers) && !this.searchBar.canConsumeInput();
if(nothandled)
if (nothandled)
return super.keyPressed(keyCode, scanCode, modifiers);

if (JeiSettings.isJeiLoaded() && JeiSettings.isJeiSearchSynced()) {
if (OccultismEmiIntegration.get().isLoaded() && JeiSettings.isJeiSearchSynced()) {
OccultismEmiIntegration.get().setFilterText(this.searchBar.getValue());
} else if (OccultismJeiIntegration.get().isLoaded() && JeiSettings.isJeiSearchSynced()) {
OccultismJeiIntegration.get().setFilterText(this.searchBar.getValue());
}
return true;
Expand Down Expand Up @@ -452,7 +455,9 @@ public boolean mouseScrolled(double pMouseX, double pMouseY, double pScrollX, do
public boolean charTyped(char typedChar, int keyCode) {
if (this.searchBar.isFocused() && this.searchBar.charTyped(typedChar, keyCode)) {
Networking.sendToServer(new MessageRequestStacks());
if (JeiSettings.isJeiLoaded() && JeiSettings.isJeiSearchSynced()) {
if (OccultismEmiIntegration.get().isLoaded() && JeiSettings.isJeiSearchSynced()) {
OccultismEmiIntegration.get().setFilterText(this.searchBar.getValue());
} else if (OccultismJeiIntegration.get().isLoaded() && JeiSettings.isJeiSearchSynced()) {
OccultismJeiIntegration.get().setFilterText(this.searchBar.getValue());
}
}
Expand Down Expand Up @@ -510,18 +515,18 @@ public void initButtons() {
});
this.addRenderableWidget(this.sortDirectionButton);

int jeiSyncOffset = 140 + (JeiSettings.isJeiSearchSynced() ? 0 : 1) * 28;
this.jeiSyncButton = new SizedImageButton(
this.leftPos + clearTextButtonLeft + controlButtonSize + 3 + controlButtonSize + 3 + controlButtonSize +
3, this.topPos + controlButtonTop, controlButtonSize, controlButtonSize, 0, jeiSyncOffset, 28, 28, 28,
256, 256, BUTTONS, (button) -> {
JeiSettings.setJeiSearchSync(!JeiSettings.isJeiSearchSynced());
this.init();
});
if (OccultismEmiIntegration.get().isLoaded() || OccultismJeiIntegration.get().isLoaded()){
int jeiSyncOffset = 140 + (JeiSettings.isJeiSearchSynced() ? 0 : 1) * 28;
this.jeiSyncButton = new SizedImageButton(
this.leftPos + clearTextButtonLeft + controlButtonSize + 3 + controlButtonSize + 3 + controlButtonSize +
3, this.topPos + controlButtonTop, controlButtonSize, controlButtonSize, 0, jeiSyncOffset, 28, 28, 28,
256, 256, BUTTONS, (button) -> {
JeiSettings.setJeiSearchSync(!JeiSettings.isJeiSearchSynced());
this.init();
});

if (JeiSettings.isJeiLoaded())
this.addRenderableWidget(this.jeiSyncButton);

}

int guiModeButtonTop = 112;
int guiModeButtonLeft = 27;
Expand Down Expand Up @@ -580,7 +585,7 @@ protected void drawItems(GuiGraphics guiGraphics, float partialTicks, int mouseX
var changedStacks = this.lastStacksCount != this.stacks.size();
this.lastStacksCount = this.stacks.size();

if(changedPage || changedStacksToDisplay || changedStacks){
if (changedPage || changedStacksToDisplay || changedStacks) {
this.sortItemStacks(stacksToDisplay);
this.buildPage(stacksToDisplay);
this.buildItemSlots(stacksToDisplay);
Expand Down Expand Up @@ -771,7 +776,7 @@ public int compare(ItemStack a, ItemStack b) {
});
}

protected void resetDisplayCaches(){
protected void resetDisplayCaches() {
this.lastStacksCount = 0;
this.cachedStacksToDisplay = null;
this.previousPage = -1;
Expand Down Expand Up @@ -912,7 +917,9 @@ protected void drawMachineSlots(GuiGraphics guiGraphics, int mouseX, int mouseY)

protected void clearSearch() {
this.searchBar.setValue("");
if (JeiSettings.isJeiLoaded() && JeiSettings.isJeiSearchSynced()) {
if (OccultismEmiIntegration.get().isLoaded() && JeiSettings.isJeiSearchSynced()) {
OccultismEmiIntegration.get().setFilterText("");
} else if (OccultismJeiIntegration.get().isLoaded() && JeiSettings.isJeiSearchSynced()) {
OccultismJeiIntegration.get().setFilterText("");
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/*
* SPDX-FileCopyrightText: 2022 klikli-dev
*
* SPDX-License-Identifier: MIT
*/

package com.klikli_dev.occultism.integration.emi;

import com.klikli_dev.occultism.integration.emi.impl.OccultismEmiIntegrationImpl;

public interface OccultismEmiIntegration {

OccultismEmiIntegration instance = new OccultismEmiIntegrationImpl();

static OccultismEmiIntegration get() {
return instance;
}

boolean isLoaded();

String getFilterText();

void setFilterText(String filter);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// SPDX-FileCopyrightText: 2024 klikli-dev
//
// SPDX-License-Identifier: MIT

package com.klikli_dev.occultism.integration.emi;

public class OccultismEmiIntegrationDummy implements OccultismEmiIntegration {

@Override
public boolean isLoaded() {
return false;
}

@Override
public String getFilterText() {
return "";
}

@Override
public void setFilterText(String filter) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// SPDX-FileCopyrightText: 2024 klikli-dev
//
// SPDX-License-Identifier: MIT

package com.klikli_dev.occultism.integration.emi.impl;

import com.klikli_dev.occultism.integration.emi.OccultismEmiIntegration;
import com.klikli_dev.occultism.integration.jei.impl.JeiPlugin;
import dev.emi.emi.api.EmiApi;
import mezz.jei.api.runtime.IJeiRuntime;
import net.neoforged.fml.ModList;

public class OccultismEmiIntegrationImpl implements OccultismEmiIntegration {
public boolean isLoaded() {
return ModList.get().isLoaded("emi");
}

@Override
public String getFilterText() {
if (!this.isLoaded())
return "";

return OccultismEmiHelper.getFilterText();
}

@Override
public void setFilterText(String filter) {
if (!this.isLoaded())
return;

OccultismEmiHelper.setFilterText(filter);
}

public static class OccultismEmiHelper {
public static String getFilterText() {
return EmiApi.getSearchText();
}

public static void setFilterText(String filter) {
EmiApi.setSearchText(filter);
}
}

}
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package com.klikli_dev.occultism.integration.emi;
package com.klikli_dev.occultism.integration.emi.impl;

import com.klikli_dev.occultism.Occultism;
import com.klikli_dev.occultism.common.entity.spirit.FoliotEntity;
import com.klikli_dev.occultism.crafting.recipe.CrushingRecipe;
import com.klikli_dev.occultism.crafting.recipe.MinerRecipe;
import com.klikli_dev.occultism.crafting.recipe.RitualRecipe;
import com.klikli_dev.occultism.crafting.recipe.SpiritFireRecipe;
import com.klikli_dev.occultism.integration.emi.recipes.CrushingRecipeCategory;
import com.klikli_dev.occultism.integration.emi.recipes.MinerRecipeCategory;
import com.klikli_dev.occultism.integration.emi.recipes.RitualRecipeCategory;
import com.klikli_dev.occultism.integration.emi.recipes.SpiritFireRecipeCategory;
import com.klikli_dev.occultism.integration.emi.render.SpiritRenderable;
import com.klikli_dev.occultism.integration.emi.impl.recipes.CrushingRecipeCategory;
import com.klikli_dev.occultism.integration.emi.impl.recipes.MinerRecipeCategory;
import com.klikli_dev.occultism.integration.emi.impl.recipes.RitualRecipeCategory;
import com.klikli_dev.occultism.integration.emi.impl.recipes.SpiritFireRecipeCategory;
import com.klikli_dev.occultism.integration.emi.impl.render.SpiritRenderable;
import com.klikli_dev.occultism.registry.*;
import dev.emi.emi.api.EmiEntrypoint;
import dev.emi.emi.api.EmiInitRegistry;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,15 @@
package com.klikli_dev.occultism.integration.emi.recipes;
package com.klikli_dev.occultism.integration.emi.impl.recipes;

import com.klikli_dev.occultism.Occultism;
import com.klikli_dev.occultism.common.entity.spirit.FoliotEntity;
import com.klikli_dev.occultism.crafting.recipe.CrushingRecipe;
import com.klikli_dev.occultism.crafting.recipe.SpiritFireRecipe;
import com.klikli_dev.occultism.integration.emi.OccultismEmiPlugin;
import com.klikli_dev.occultism.integration.emi.render.SpiritRenderable;
import com.klikli_dev.occultism.integration.emi.render.SpiritWidget;
import com.klikli_dev.occultism.integration.emi.impl.OccultismEmiPlugin;
import com.klikli_dev.occultism.integration.emi.impl.render.SpiritWidget;
import com.klikli_dev.occultism.registry.OccultismEntities;
import dev.emi.emi.api.recipe.EmiRecipe;
import dev.emi.emi.api.recipe.EmiRecipeCategory;
import dev.emi.emi.api.render.EmiTexture;
import dev.emi.emi.api.stack.EmiIngredient;
import dev.emi.emi.api.stack.EmiStack;
import dev.emi.emi.api.widget.DrawableWidget;
import dev.emi.emi.api.widget.WidgetHolder;
import net.minecraft.client.Minecraft;
import net.minecraft.core.registries.BuiltInRegistries;
Expand All @@ -23,7 +19,6 @@
import net.minecraft.world.item.crafting.RecipeHolder;
import org.jetbrains.annotations.Nullable;

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

public class CrushingRecipeCategory implements EmiRecipe {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.klikli_dev.occultism.integration.emi.recipes;
package com.klikli_dev.occultism.integration.emi.impl.recipes;

import com.klikli_dev.occultism.crafting.recipe.MinerRecipe;
import com.klikli_dev.occultism.integration.emi.OccultismEmiPlugin;
import com.klikli_dev.occultism.integration.emi.impl.OccultismEmiPlugin;
import dev.emi.emi.api.recipe.EmiRecipe;
import dev.emi.emi.api.recipe.EmiRecipeCategory;
import dev.emi.emi.api.render.EmiTexture;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.klikli_dev.occultism.integration.emi.recipes;
package com.klikli_dev.occultism.integration.emi.impl.recipes;

import com.klikli_dev.modonomicon.api.ModonomiconAPI;
import com.klikli_dev.occultism.Occultism;
import com.klikli_dev.occultism.crafting.recipe.RitualRecipe;
import com.klikli_dev.occultism.integration.emi.OccultismEmiPlugin;
import com.klikli_dev.occultism.integration.emi.render.ItemWidget;
import com.klikli_dev.occultism.integration.emi.impl.OccultismEmiPlugin;
import com.klikli_dev.occultism.integration.emi.impl.render.ItemWidget;
import com.klikli_dev.occultism.registry.OccultismBlocks;
import com.klikli_dev.occultism.registry.OccultismItems;
import dev.emi.emi.api.recipe.EmiRecipe;
Expand Down
Loading

0 comments on commit c3e654e

Please sign in to comment.