-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Initial EMI support * Added JEI boiler recipes * Update EMI version
- Loading branch information
Showing
21 changed files
with
599 additions
and
38 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 2 additions & 2 deletions
4
src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
// 1.20.1 2024-03-15T11:22:03.38324 Languages: en_us | ||
153278f01cd809c49d4c04d4a8256d2f86c68fa5 assets/railcraft/lang/en_us.json | ||
// 1.20.1 2024-03-23T20:42:22.369464 Languages: en_us | ||
a2e26fd2cc0d5cdaf70d3b26c7c13bfca0f8bc7e assets/railcraft/lang/en_us.json |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
57 changes: 57 additions & 0 deletions
57
src/main/java/mods/railcraft/integrations/emi/BlastFurnaceEmiRecipe.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
package mods.railcraft.integrations.emi; | ||
|
||
import java.util.List; | ||
import dev.emi.emi.api.recipe.BasicEmiRecipe; | ||
import dev.emi.emi.api.render.EmiTexture; | ||
import dev.emi.emi.api.render.EmiTooltipComponents; | ||
import dev.emi.emi.api.stack.EmiIngredient; | ||
import dev.emi.emi.api.stack.EmiStack; | ||
import dev.emi.emi.api.widget.WidgetHolder; | ||
import mods.railcraft.integrations.jei.category.BlastFurnaceRecipeCategory; | ||
import mods.railcraft.world.item.RailcraftItems; | ||
import mods.railcraft.world.item.crafting.BlastFurnaceRecipe; | ||
import net.minecraft.SharedConstants; | ||
import net.minecraft.client.Minecraft; | ||
import net.minecraft.network.chat.Component; | ||
import net.minecraft.world.item.ItemStack; | ||
|
||
public class BlastFurnaceEmiRecipe extends BasicEmiRecipe { | ||
|
||
private final BlastFurnaceRecipe recipe; | ||
|
||
public BlastFurnaceEmiRecipe(BlastFurnaceRecipe recipe) { | ||
super(RailcraftEmiPlugin.BLASTING_CATEGORY, recipe.getId(), | ||
BlastFurnaceRecipeCategory.WIDTH, BlastFurnaceRecipeCategory.HEIGHT); | ||
this.recipe = recipe; | ||
this.inputs.add(EmiIngredient.of(recipe.getIngredients().get(0))); | ||
var level = Minecraft.getInstance().level; | ||
this.outputs.add(EmiStack.of(recipe.getResultItem(level.registryAccess()))); | ||
if (recipe.getSlagOutput() > 0) { | ||
this.outputs.add(EmiStack.of( | ||
new ItemStack(RailcraftItems.SLAG.get(), recipe.getSlagOutput()))); | ||
} | ||
} | ||
|
||
@Override | ||
public void addWidgets(WidgetHolder widgets) { | ||
widgets.addTexture(BlastFurnaceRecipeCategory.BACKGROUND, | ||
0, 0, width, height, 55, 16); | ||
widgets.addFillingArrow(24, 18, 10_000).tooltip((x, y) -> { | ||
int cookTime = recipe.getCookingTime(); | ||
if (cookTime > 0) { | ||
int cookTimeSeconds = cookTime / SharedConstants.TICKS_PER_SECOND; | ||
var timeString = Component.translatable("gui.jei.category.smelting.time.seconds", | ||
cookTimeSeconds); | ||
return List.of(EmiTooltipComponents.of(timeString)); | ||
} | ||
return List.of(EmiTooltipComponents.of(Component.empty())); | ||
}); | ||
widgets.addAnimatedTexture(EmiTexture.FULL_FLAME, 1, 20, 10_000, false, true, true); | ||
|
||
widgets.addSlot(this.inputs.get(0), 0, 0); | ||
widgets.addSlot(this.outputs.get(0), 56, 0).large(true).recipeContext(this); | ||
if (this.outputs.size() > 1) { | ||
widgets.addSlot(this.outputs.get(1), 60, 36).recipeContext(this); | ||
} | ||
} | ||
} |
53 changes: 53 additions & 0 deletions
53
src/main/java/mods/railcraft/integrations/emi/CokeOvenEmiRecipe.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
package mods.railcraft.integrations.emi; | ||
|
||
import java.util.List; | ||
import dev.emi.emi.api.forge.ForgeEmiStack; | ||
import dev.emi.emi.api.recipe.BasicEmiRecipe; | ||
import dev.emi.emi.api.render.EmiTexture; | ||
import dev.emi.emi.api.render.EmiTooltipComponents; | ||
import dev.emi.emi.api.stack.EmiIngredient; | ||
import dev.emi.emi.api.stack.EmiStack; | ||
import dev.emi.emi.api.widget.WidgetHolder; | ||
import mods.railcraft.integrations.jei.category.CokeOvenRecipeCategory; | ||
import mods.railcraft.world.item.crafting.CokeOvenRecipe; | ||
import net.minecraft.SharedConstants; | ||
import net.minecraft.client.Minecraft; | ||
import net.minecraft.network.chat.Component; | ||
|
||
public class CokeOvenEmiRecipe extends BasicEmiRecipe { | ||
|
||
private final CokeOvenRecipe recipe; | ||
|
||
public CokeOvenEmiRecipe(CokeOvenRecipe recipe) { | ||
super(RailcraftEmiPlugin.COKING_CATEGORY, recipe.getId(), | ||
CokeOvenRecipeCategory.WIDTH, CokeOvenRecipeCategory.HEIGHT); | ||
this.recipe = recipe; | ||
this.inputs.add(EmiIngredient.of(recipe.getIngredients().get(0))); | ||
var level = Minecraft.getInstance().level; | ||
this.outputs.add(EmiStack.of(recipe.getResultItem(level.registryAccess()))); | ||
} | ||
|
||
@Override | ||
public void addWidgets(WidgetHolder widgets) { | ||
widgets.addTexture(CokeOvenRecipeCategory.BACKGROUND, 0, 0, width, height, 15, 23); | ||
widgets.addFillingArrow(18, 20, 10_000).tooltip((x, y) -> { | ||
int cookTime = recipe.getCookingTime(); | ||
if (cookTime > 0) { | ||
int cookTimeSeconds = cookTime / SharedConstants.TICKS_PER_SECOND; | ||
var timeString = Component.translatable("gui.jei.category.smelting.time.seconds", | ||
cookTimeSeconds); | ||
return List.of(EmiTooltipComponents.of(timeString)); | ||
} | ||
return List.of(EmiTooltipComponents.of(Component.empty())); | ||
}); | ||
widgets.addAnimatedTexture(EmiTexture.FULL_FLAME, 1, 3, 10_000, false, true, true); | ||
|
||
widgets.addSlot(this.inputs.get(0), 0, 19); | ||
widgets.addSlot(this.outputs.get(0), 42, 15).large(true).recipeContext(this); | ||
|
||
var fluid = ForgeEmiStack.of(recipe.getCreosote()); | ||
widgets.addTank(fluid, 74, 0, 50, 49, 10_000) | ||
.drawBack(false) | ||
.recipeContext(this); | ||
} | ||
} |
67 changes: 67 additions & 0 deletions
67
src/main/java/mods/railcraft/integrations/emi/CrusherEmiRecipe.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
package mods.railcraft.integrations.emi; | ||
|
||
import dev.emi.emi.api.recipe.BasicEmiRecipe; | ||
import dev.emi.emi.api.render.EmiTexture; | ||
import dev.emi.emi.api.render.EmiTooltipComponents; | ||
import dev.emi.emi.api.stack.EmiIngredient; | ||
import dev.emi.emi.api.stack.EmiStack; | ||
import dev.emi.emi.api.widget.WidgetHolder; | ||
import mods.railcraft.Translations; | ||
import mods.railcraft.integrations.jei.category.CrusherRecipeCategory; | ||
import mods.railcraft.world.item.crafting.CrusherRecipe; | ||
import net.minecraft.ChatFormatting; | ||
import net.minecraft.SharedConstants; | ||
import net.minecraft.network.chat.Component; | ||
import net.minecraft.world.item.ItemStack; | ||
|
||
public class CrusherEmiRecipe extends BasicEmiRecipe { | ||
|
||
private final CrusherRecipe recipe; | ||
|
||
public CrusherEmiRecipe(CrusherRecipe recipe) { | ||
super(RailcraftEmiPlugin.CRUSHING_CATEGORY, recipe.getId(), | ||
CrusherRecipeCategory.WIDTH, CrusherRecipeCategory.HEIGHT); | ||
this.recipe = recipe; | ||
this.inputs.add(EmiIngredient.of(recipe.getIngredients().get(0))); | ||
this.recipe.getProbabilityOutputs().stream() | ||
.map(CrusherRecipe.CrusherOutput::getOutput) | ||
.map(EmiStack::of) | ||
.forEach(this.outputs::add); | ||
} | ||
|
||
@Override | ||
public void addWidgets(WidgetHolder widgets) { | ||
widgets.addTexture(CrusherRecipeCategory.BACKGROUND, 0, 0, width, height, 0, 171); | ||
var crushingTexture = new EmiTexture(CrusherRecipeCategory.BACKGROUND, | ||
144, 171, 29, 53); | ||
widgets.addAnimatedTexture(crushingTexture, 58, 0, | ||
1000 * this.recipe.getProcessTime() / SharedConstants.TICKS_PER_SECOND, | ||
true, false, false); | ||
|
||
widgets.addSlot(this.inputs.get(0), 18, 18); | ||
|
||
var outputs = recipe.getProbabilityOutputs(); | ||
for (int y = 0; y < 3; y++) { | ||
for (int x = 0; x < 3; x++) { | ||
int index = 1 + x + (y * 3); | ||
var itemStack = ItemStack.EMPTY; | ||
if (outputs.size() > index - 1) { | ||
itemStack = outputs.get(index - 1).getOutput(); | ||
} | ||
if (itemStack.isEmpty()) { | ||
widgets.addSlot(90 + x * 18, y * 18); | ||
} else { | ||
widgets | ||
.addSlot(EmiStack.of(itemStack), 90 + x * 18, y * 18) | ||
.appendTooltip(() -> { | ||
double probability = outputs.get(index - 1).probability() * 100; | ||
var probText = Component.translatable(Translations.Jei.CRUSHER_TIP, probability) | ||
.withStyle(ChatFormatting.GRAY); | ||
return EmiTooltipComponents.of(probText); | ||
}) | ||
.recipeContext(this); | ||
} | ||
} | ||
} | ||
} | ||
} |
72 changes: 72 additions & 0 deletions
72
src/main/java/mods/railcraft/integrations/emi/RailcraftEmiPlugin.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
package mods.railcraft.integrations.emi; | ||
|
||
import java.util.function.Function; | ||
import dev.emi.emi.api.EmiEntrypoint; | ||
import dev.emi.emi.api.EmiPlugin; | ||
import dev.emi.emi.api.EmiRegistry; | ||
import dev.emi.emi.api.recipe.EmiRecipe; | ||
import dev.emi.emi.api.recipe.EmiRecipeCategory; | ||
import dev.emi.emi.api.recipe.VanillaEmiRecipeCategories; | ||
import dev.emi.emi.api.stack.EmiStack; | ||
import mods.railcraft.api.core.RailcraftConstants; | ||
import mods.railcraft.world.item.crafting.RailcraftRecipeTypes; | ||
import mods.railcraft.world.level.block.RailcraftBlocks; | ||
import net.minecraft.world.Container; | ||
import net.minecraft.world.item.crafting.Recipe; | ||
import net.minecraft.world.item.crafting.RecipeType; | ||
|
||
@EmiEntrypoint | ||
public class RailcraftEmiPlugin implements EmiPlugin { | ||
|
||
private static final EmiStack MANUAL_ROLLING_MACHINE = | ||
EmiStack.of(RailcraftBlocks.MANUAL_ROLLING_MACHINE.get()); | ||
public static final EmiRecipeCategory ROLLING_CATEGORY = | ||
new EmiRecipeCategory(RailcraftConstants.rl("rolling_category"), MANUAL_ROLLING_MACHINE); | ||
|
||
private static final EmiStack CRUSHER = | ||
EmiStack.of(RailcraftBlocks.CRUSHER.get()); | ||
public static final EmiRecipeCategory CRUSHING_CATEGORY = | ||
new EmiRecipeCategory(RailcraftConstants.rl("crushing_category"), CRUSHER); | ||
|
||
private static final EmiStack COKE_OVEN = | ||
EmiStack.of(RailcraftBlocks.COKE_OVEN_BRICKS.get()); | ||
public static final EmiRecipeCategory COKING_CATEGORY = | ||
new EmiRecipeCategory(RailcraftConstants.rl("coking_category"), COKE_OVEN); | ||
|
||
private static final EmiStack BLAST_FURNACE = | ||
EmiStack.of(RailcraftBlocks.BLAST_FURNACE_BRICKS.get()); | ||
public static final EmiRecipeCategory BLASTING_CATEGORY = | ||
new EmiRecipeCategory(RailcraftConstants.rl("blasting_category"), BLAST_FURNACE); | ||
|
||
@Override | ||
public void register(EmiRegistry registry) { | ||
// Tell EMI to add a tab for your category | ||
registry.addCategory(ROLLING_CATEGORY); | ||
registry.addCategory(CRUSHING_CATEGORY); | ||
registry.addCategory(COKING_CATEGORY); | ||
registry.addCategory(BLASTING_CATEGORY); | ||
|
||
// Add all the workstations your category uses | ||
registry.addWorkstation(ROLLING_CATEGORY, MANUAL_ROLLING_MACHINE); | ||
registry.addWorkstation(ROLLING_CATEGORY, | ||
EmiStack.of(RailcraftBlocks.POWERED_ROLLING_MACHINE.get())); | ||
registry.addWorkstation(CRUSHING_CATEGORY, CRUSHER); | ||
registry.addWorkstation(COKING_CATEGORY, COKE_OVEN); | ||
registry.addWorkstation(BLASTING_CATEGORY, BLAST_FURNACE); | ||
registry.addWorkstation(VanillaEmiRecipeCategories.SMELTING, | ||
EmiStack.of(RailcraftBlocks.STEAM_OVEN.get())); | ||
|
||
registerRecipe(registry, RailcraftRecipeTypes.ROLLING.get(), RollingEmiRecipe::new); | ||
registerRecipe(registry, RailcraftRecipeTypes.CRUSHING.get(), CrusherEmiRecipe::new); | ||
registerRecipe(registry, RailcraftRecipeTypes.COKING.get(), CokeOvenEmiRecipe::new); | ||
registerRecipe(registry, RailcraftRecipeTypes.BLASTING.get(), BlastFurnaceEmiRecipe::new); | ||
} | ||
|
||
private <C extends Container, T extends Recipe<C>> void registerRecipe( | ||
EmiRegistry registry, RecipeType<T> recipeType, Function<T, EmiRecipe> emiRecipeFunction) { | ||
var manager = registry.getRecipeManager(); | ||
for (var x : manager.getAllRecipesFor(recipeType)) { | ||
registry.addRecipe(emiRecipeFunction.apply(x)); | ||
} | ||
} | ||
} |
39 changes: 39 additions & 0 deletions
39
src/main/java/mods/railcraft/integrations/emi/RollingEmiRecipe.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
package mods.railcraft.integrations.emi; | ||
|
||
import java.util.ArrayList; | ||
import java.util.List; | ||
import dev.emi.emi.api.recipe.EmiCraftingRecipe; | ||
import dev.emi.emi.api.recipe.EmiRecipeCategory; | ||
import dev.emi.emi.api.stack.EmiIngredient; | ||
import dev.emi.emi.api.stack.EmiStack; | ||
import mods.railcraft.world.item.crafting.RollingRecipe; | ||
import net.minecraft.client.Minecraft; | ||
|
||
public class RollingEmiRecipe extends EmiCraftingRecipe { | ||
|
||
public RollingEmiRecipe(RollingRecipe recipe) { | ||
super(padIngredients(recipe), | ||
EmiStack.of(recipe.getResultItem(Minecraft.getInstance().level.registryAccess())), | ||
recipe.getId(), false); | ||
} | ||
|
||
@Override | ||
public EmiRecipeCategory getCategory() { | ||
return RailcraftEmiPlugin.ROLLING_CATEGORY; | ||
} | ||
|
||
private static List<EmiIngredient> padIngredients(RollingRecipe recipe) { | ||
var list = new ArrayList<EmiIngredient>(); | ||
int i = 0; | ||
for (int y = 0; y < 3; y++) { | ||
for (int x = 0; x < 3; x++) { | ||
if (x >= recipe.getWidth() || y >= recipe.getHeight() || i >= recipe.getIngredients().size()) { | ||
list.add(EmiStack.EMPTY); | ||
} else { | ||
list.add(EmiIngredient.of(recipe.getIngredients().get(i++))); | ||
} | ||
} | ||
} | ||
return list; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.