Skip to content

Commit

Permalink
Merge pull request #113 from wisp-forest/1.20-EMI
Browse files Browse the repository at this point in the history
Update EMI Compat for 1.20
  • Loading branch information
Noaaan authored Jul 14, 2023
2 parents 88786a2 + 36d9860 commit 23e9231
Show file tree
Hide file tree
Showing 12 changed files with 299 additions and 307 deletions.
5 changes: 3 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ repositories {
maven { url "https://maven.shedaniel.me/" }
maven {
url 'https://api.modrinth.com/maven'
content {includeGroup "maven.modrinth"}
content { includeGroup "maven.modrinth" }
}
maven { url 'https://jitpack.io' }
mavenLocal()
Expand All @@ -41,7 +41,8 @@ dependencies {
modImplementation "io.wispforest:owo-lib:${project.owo_version}"
include "io.wispforest:owo-sentinel:${project.owo_version}"

//modImplementation "dev.emi:emi:${project.emi_version}"
modCompileOnly "dev.emi:emi-fabric:${emi_version}:api"
modLocalRuntime "dev.emi:emi-fabric:${emi_version}"
}

loom {
Expand Down
15 changes: 5 additions & 10 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,20 @@ org.gradle.jvmargs=-Xmx1G
# Fabric Properties
# check these on https://fabricmc.net/develop
minecraft_base_version=1.20
minecraft_version=1.20
yarn_mappings=1.20+build.1
minecraft_version=1.20.1
yarn_mappings=1.20.1+build.9
loader_version=0.14.21
# Mod Properties
mod_version=2.0.21
mod_version=2.0.22
maven_group=io.wispforest
archives_base_name=alloy-forgery

# Dependencies
fabric_version=0.83.0+1.20

# https://maven.shedaniel.me/me/shedaniel/RoughlyEnoughItems-fabric/
rei_version=12.0.613

# https://www.curseforge.com/minecraft/mc-mods/modmenu/files
modmenu_version=7.0.0-beta.2

# https://maven.wispforest.io/io/wispforest/owo-lib
owo_version=0.11.0+1.20

owo_version=0.11.1+1.20
# https://maven.terraformersmc.com/releases/dev/emi/emi
emi_version=0.7.2+1.19.4
emi_version=1.0.8+1.20.1
Original file line number Diff line number Diff line change
@@ -1,33 +1,32 @@
package wraith.alloyforgery.compat.emi;

//import dev.emi.emi.api.EmiPlugin;
//import dev.emi.emi.api.EmiRegistry;
//import dev.emi.emi.api.recipe.EmiRecipeCategory;
//import dev.emi.emi.api.stack.EmiStack;
import dev.emi.emi.api.EmiPlugin;
import dev.emi.emi.api.EmiRegistry;
import dev.emi.emi.api.recipe.EmiRecipeCategory;
import dev.emi.emi.api.stack.EmiStack;
import net.minecraft.block.Block;
import net.minecraft.util.Identifier;
import wraith.alloyforgery.AlloyForgery;
import wraith.alloyforgery.forges.ForgeRegistry;
import wraith.alloyforgery.recipe.AlloyForgeRecipe;

public class AlloyForgeryEmiPlugin /*implements EmiPlugin*/ {
public class AlloyForgeryEmiPlugin implements EmiPlugin {

// private static final Identifier FORGE_ID = AlloyForgery.id("alloy_forge");
// public static final EmiRecipeCategory FORGE_CATEGORY = new EmiRecipeCategory(FORGE_ID, EmiStack.of(ForgeRegistry.getControllerBlocks().get(0)));
//
//
// @Override
// public void register(EmiRegistry registry) {
// registry.addCategory(FORGE_CATEGORY);
//
// for (Block controller : ForgeRegistry.getControllerBlocks()) {
// registry.addWorkstation(FORGE_CATEGORY, EmiStack.of(controller));
// }
//
// for (AlloyForgeRecipe recipe : registry.getRecipeManager().listAllOfType(AlloyForgeRecipe.Type.INSTANCE)) {
// registry.addRecipe(new AlloyForgeryEmiRecipe(recipe));
// }
//
// registry.addRecipeHandler(AlloyForgery.ALLOY_FORGE_SCREEN_HANDLER_TYPE, new AlloyForgeryEmiRecipeHandler());
// }
private static final Identifier FORGE_ID = AlloyForgery.id("alloy_forge");
public static final EmiRecipeCategory FORGE_CATEGORY = new EmiRecipeCategory(FORGE_ID, EmiStack.of(ForgeRegistry.getControllerBlocks().get(0)));

@Override
public void register(EmiRegistry registry) {
registry.addCategory(FORGE_CATEGORY);

for (Block controller : ForgeRegistry.getControllerBlocks()) {
registry.addWorkstation(FORGE_CATEGORY, EmiStack.of(controller));
}

for (AlloyForgeRecipe recipe : registry.getRecipeManager().listAllOfType(AlloyForgeRecipe.Type.INSTANCE)) {
registry.addRecipe(new AlloyForgeryEmiRecipe(recipe));
}

registry.addRecipeHandler(AlloyForgery.ALLOY_FORGE_SCREEN_HANDLER_TYPE, new AlloyForgeryEmiRecipeHandler());
}
}
279 changes: 139 additions & 140 deletions src/main/java/wraith/alloyforgery/compat/emi/AlloyForgeryEmiRecipe.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package wraith.alloyforgery.compat.emi;

//import dev.emi.emi.api.recipe.EmiRecipe;
//import dev.emi.emi.api.recipe.EmiRecipeCategory;
//import dev.emi.emi.api.stack.EmiIngredient;
//import dev.emi.emi.api.stack.EmiStack;
//import dev.emi.emi.api.widget.WidgetHolder;
import me.shedaniel.rei.api.client.gui.widgets.WidgetHolder;
import dev.emi.emi.api.recipe.EmiRecipe;
import dev.emi.emi.api.recipe.EmiRecipeCategory;
import dev.emi.emi.api.stack.EmiIngredient;
import dev.emi.emi.api.stack.EmiStack;
import dev.emi.emi.api.widget.WidgetHolder;
import net.minecraft.item.ItemStack;
import net.minecraft.recipe.Ingredient;
import net.minecraft.text.OrderedText;
Expand All @@ -17,138 +16,138 @@

import java.util.*;

public class AlloyForgeryEmiRecipe /*implements EmiRecipe*/ {

// public AlloyForgeryEmiRecipe(AlloyForgeRecipe recipe) {
// this.id = recipe.getId();
//
// //Convert inputs to a list of EMI Ingredients
// List<EmiIngredient> convertedInputs = new ArrayList<>();
// for (Map.Entry<Ingredient, Integer> entry : recipe.getIngredientsMap().entrySet()) {
// for (int i = entry.getValue(); i > 0; ) {
// int stackCount = Math.min(i, 64);
//
// convertedInputs.add(
// EmiIngredient.of(Arrays.stream(entry.getKey().getMatchingStacks())
// .map(ItemStack::copy)
// .peek(stack -> stack.setCount(stackCount))
// .map(EmiStack::of)
// .toList()));
//
// i -= stackCount;
// }
// }
// this.inputs = convertedInputs;
//
// //tier and fuel same way as REI plugin
// this.minForgeTier = recipe.getMinForgeTier();
// this.requiredFuel = recipe.getFuelPerTick();
//
// //initialize the starting text and stack to show in the plugin
// this.currentTierText = Text.translatable("container.alloy_forgery.rei.min_tier", minForgeTier).asOrderedText();
// this.currentStack = EmiStack.of(recipe.getOutput());
//
// //set the outputs list with the initial stack
// this.outputs = List.of(currentStack);
//
// //re-mapping overrides to EmiStacks for rendering in slot widget
// Map<AlloyForgeRecipe.OverrideRange, EmiStack> tierOverrides = new HashMap<>();
// for (Map.Entry<AlloyForgeRecipe.OverrideRange, ItemStack> entry : recipe.getTierOverrides().entrySet()) {
// tierOverrides.put(entry.getKey(), EmiStack.of(entry.getValue()));
// }
// this.overrides = tierOverrides;
// this.overridesKeys = overrides.keySet().stream().toList();
//
// this.tierTextWidget = new CustomTextWidget(currentTierText, 8, 7, 0x404040, false);
// this.cycleTierWidget = new CustomButtonWidget(127, 2, () -> !overrides.isEmpty(), ((mouseX, mouseY, button) -> cycleStacks()));
// this.outputWidget = new CustomSlotWidget(currentStack, 104, 38, this);
//
// }
//
// static final Identifier GUI_TEXTURE = AlloyForgery.id("textures/gui/forge_controller.png");
//
// private final Identifier id;
// private final List<EmiIngredient> inputs;
// private final List<EmiStack> outputs;
// private final int minForgeTier;
// private final int requiredFuel;
// private final Map<AlloyForgeRecipe.OverrideRange, EmiStack> overrides;
// private final List<AlloyForgeRecipe.OverrideRange> overridesKeys;
// private int currentIndex = 0;
// private OrderedText currentTierText;
// private EmiStack currentStack;
// private final CustomTextWidget tierTextWidget;
// private final CustomButtonWidget cycleTierWidget;
// private final CustomSlotWidget outputWidget;
//
// @Override
// public void addWidgets(WidgetHolder widgets) {
// //the min tier text
// widgets.add(tierTextWidget);
//
// //the fuel required text
// widgets.addText(Text.translatable("container.alloy_forgery.rei.fuel_per_tick", requiredFuel).asOrderedText(), 8, 20, 0x404040, false);
//
// //the ten input slots background
// widgets.addTexture(GUI_TEXTURE, 6, 34, 92, 38, 42, 41);
// widgets.addTexture(GUI_TEXTURE, 107, 14, 10, 10, 208, 30);
// widgets.addTexture(GUI_TEXTURE, 111, 17, 16, 20, 176, 0);
//
// //the input slots themselves
// for (int i = 0; i < inputs.size(); i++) {
// int x = 7 + i % 5 * 18;
// int y = 35 + i / 5 * 18;
// widgets.addTexture(GUI_TEXTURE, x, y, 18, 18, 208, 0);
// widgets.addSlot(inputs.get(i), x, y).drawBack(false);
// }
//
// //add the tier cycling button
// widgets.add(cycleTierWidget);
// widgets.add(outputWidget);
// }
//
// private void cycleStacks() {
// currentIndex++;
// if (currentIndex > overrides.size()) currentIndex = 0;
// if (currentIndex == 0) {
// currentTierText = Text.translatable("container.alloy_forgery.rei.min_tier", minForgeTier).asOrderedText();
// currentStack = outputs.get(0);
// } else {
// AlloyForgeRecipe.OverrideRange range = overridesKeys.get(currentIndex - 1);
// currentTierText = Text.translatable("container.alloy_forgery.rei.min_tier", range).asOrderedText();
// currentStack = overrides.get(range);
// }
// tierTextWidget.setText(currentTierText);
// outputWidget.setMutableStack(currentStack);
// }
//
// @Override
// public EmiRecipeCategory getCategory() {
// return AlloyForgeryEmiPlugin.FORGE_CATEGORY;
// }
//
// @Override
// public @Nullable Identifier getId() {
// return id;
// }
//
// @Override
// public List<EmiIngredient> getInputs() {
// return inputs;
// }
//
// @Override
// public List<EmiStack> getOutputs() {
// return outputs;
// }
//
// @Override
// public int getDisplayWidth() {
// return 142;
// }
//
// @Override
// public int getDisplayHeight() {
// return 78;
// }
public class AlloyForgeryEmiRecipe implements EmiRecipe {

public AlloyForgeryEmiRecipe(AlloyForgeRecipe recipe) {
this.id = recipe.getId();

//Convert inputs to a list of EMI Ingredients
List<EmiIngredient> convertedInputs = new ArrayList<>();
for (Map.Entry<Ingredient, Integer> entry : recipe.getIngredientsMap().entrySet()) {
for (int i = entry.getValue(); i > 0; ) {
int stackCount = Math.min(i, 64);

convertedInputs.add(
EmiIngredient.of(Arrays.stream(entry.getKey().getMatchingStacks())
.map(ItemStack::copy)
.peek(stack -> stack.setCount(stackCount))
.map(EmiStack::of)
.toList()));

i -= stackCount;
}
}
this.inputs = convertedInputs;

//tier and fuel same way as REI plugin
this.minForgeTier = recipe.getMinForgeTier();
this.requiredFuel = recipe.getFuelPerTick();

//initialize the starting text and stack to show in the plugin
this.currentTierText = Text.translatable("container.alloy_forgery.rei.min_tier", minForgeTier).asOrderedText();
this.currentStack = EmiStack.of(recipe.getOutput());

//set the outputs list with the initial stack
this.outputs = List.of(currentStack);

//re-mapping overrides to EmiStacks for rendering in slot widget
Map<AlloyForgeRecipe.OverrideRange, EmiStack> tierOverrides = new HashMap<>();
for (Map.Entry<AlloyForgeRecipe.OverrideRange, ItemStack> entry : recipe.getTierOverrides().entrySet()) {
tierOverrides.put(entry.getKey(), EmiStack.of(entry.getValue()));
}
this.overrides = tierOverrides;
this.overridesKeys = overrides.keySet().stream().toList();

this.tierTextWidget = new CustomTextWidget(currentTierText, 8, 7, 0x404040, false);
this.cycleTierWidget = new CustomButtonWidget(127, 2, () -> !overrides.isEmpty(), ((mouseX, mouseY, button) -> cycleStacks()));
this.outputWidget = new CustomSlotWidget(currentStack, 104, 38, this);

}

static final Identifier GUI_TEXTURE = AlloyForgery.id("textures/gui/forge_controller.png");

private final Identifier id;
private final List<EmiIngredient> inputs;
private final List<EmiStack> outputs;
private final int minForgeTier;
private final int requiredFuel;
private final Map<AlloyForgeRecipe.OverrideRange, EmiStack> overrides;
private final List<AlloyForgeRecipe.OverrideRange> overridesKeys;
private int currentIndex = 0;
private OrderedText currentTierText;
private EmiStack currentStack;
private final CustomTextWidget tierTextWidget;
private final CustomButtonWidget cycleTierWidget;
private final CustomSlotWidget outputWidget;

@Override
public void addWidgets(WidgetHolder widgets) {
//the min tier text
widgets.add(tierTextWidget);

//the fuel required text
widgets.addText(Text.translatable("container.alloy_forgery.rei.fuel_per_tick", requiredFuel).asOrderedText(), 8, 20, 0x404040, false);

//the ten input slots background
widgets.addTexture(GUI_TEXTURE, 6, 34, 92, 38, 42, 41);
widgets.addTexture(GUI_TEXTURE, 107, 14, 10, 10, 208, 30);
widgets.addTexture(GUI_TEXTURE, 111, 17, 16, 20, 176, 0);

//the input slots themselves
for (int i = 0; i < inputs.size(); i++) {
int x = 7 + i % 5 * 18;
int y = 35 + i / 5 * 18;
widgets.addTexture(GUI_TEXTURE, x, y, 18, 18, 208, 0);
widgets.addSlot(inputs.get(i), x, y).drawBack(false);
}

//add the tier cycling button
widgets.add(cycleTierWidget);
widgets.add(outputWidget);
}

private void cycleStacks() {
currentIndex++;
if (currentIndex > overrides.size()) currentIndex = 0;
if (currentIndex == 0) {
currentTierText = Text.translatable("container.alloy_forgery.rei.min_tier", minForgeTier).asOrderedText();
currentStack = outputs.get(0);
} else {
AlloyForgeRecipe.OverrideRange range = overridesKeys.get(currentIndex - 1);
currentTierText = Text.translatable("container.alloy_forgery.rei.min_tier", range).asOrderedText();
currentStack = overrides.get(range);
}
tierTextWidget.setText(currentTierText);
outputWidget.setMutableStack(currentStack);
}

@Override
public EmiRecipeCategory getCategory() {
return AlloyForgeryEmiPlugin.FORGE_CATEGORY;
}

@Override
public @Nullable Identifier getId() {
return id;
}

@Override
public List<EmiIngredient> getInputs() {
return inputs;
}

@Override
public List<EmiStack> getOutputs() {
return outputs;
}

@Override
public int getDisplayWidth() {
return 142;
}

@Override
public int getDisplayHeight() {
return 78;
}
}
Loading

0 comments on commit 23e9231

Please sign in to comment.