Skip to content

Commit

Permalink
feat: add EMI to 1.20.4 (#1091) - thanks @GaeaKat
Browse files Browse the repository at this point in the history
  • Loading branch information
GaeaKat authored Mar 17, 2024
1 parent 04ffdb5 commit 82f5c8a
Show file tree
Hide file tree
Showing 16 changed files with 889 additions and 6 deletions.
9 changes: 9 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,10 @@ repositories {
includeGroup "curse.maven"
}
}
maven {
name = "TerraformersMC"
url = "https://maven.terraformersmc.com/"
}
flatDir {
dirs 'lib'
}
Expand Down Expand Up @@ -138,6 +142,11 @@ dependencies {
compileOnly "com.klikli_dev:theurgy-${minecraft_version}-neoforge:${theurgy_version}"
runtimeOnly "com.klikli_dev:theurgy-${minecraft_version}-neoforge:${theurgy_version}"

// emi
compileOnly "dev.emi:emi-neoforge:${emi_version}:api"
if(System.getenv("EMI") == "true") {
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
4 changes: 3 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,6 @@ modonomicon_version=1.60.0
modonomicon_version_range=[1.60.0,)
theurgy_version=1.17.1
theurgy_version_range=[1.17.1,)
per_viam_invenire_version_range=[0.1.57,)
per_viam_invenire_version_range=[0.1.57,)
emi_version=1.1.3+1.20.4
emi_version_range=[1.1.3+1.20.4,)
56 changes: 55 additions & 1 deletion src/generated/resources/assets/occultism/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -796,6 +796,11 @@
"effect.occultism.mummy_dodge": "Dodge",
"effect.occultism.step_height": "Step Height",
"effect.occultism.third_eye": "Third Eye",
"emi.category.occultism.crushing": "Crushing",
"emi.category.occultism.miner": "Dimensional Mineshaft",
"emi.category.occultism.ritual": "Rituals",
"emi.category.occultism.spirit_fire": "Spirit Fire",
"emi.occultism.item_to_use": "Item to use: %s",
"entity.occultism.afrit": "Afrit",
"entity.occultism.afrit_wild": "Unbound Afrit",
"entity.occultism.bat_familiar": "Bat Familiar",
Expand Down Expand Up @@ -1611,5 +1616,54 @@
"ritual.occultism.summon_wild_parrot.conditions": "Not all requirements for this ritual are met.",
"ritual.occultism.summon_wild_parrot.finished": "Summoned wild parrot successfully.",
"ritual.occultism.summon_wild_parrot.interrupted": "Summoning of wild parrot interrupted.",
"ritual.occultism.summon_wild_parrot.started": "Started summoning wild parrot."
"ritual.occultism.summon_wild_parrot.started": "Started summoning wild parrot.",
"tag.block.forge.ores.iesnium": "Iesnium Ore",
"tag.block.forge.ores.silver": "Silver Ore",
"tag.block.forge.storage_blocks.iesnium": "Iesnium Storage Blocks",
"tag.block.forge.storage_blocks.raw_iesnium": "Raw Iesnium Storage Blocks",
"tag.block.forge.storage_blocks.raw_silver": "Raw Silver Storage Blocks",
"tag.block.forge.storage_blocks.silver": "Silver Storage Blocks",
"tag.block.minecraft.candles": "Candles",
"tag.block.occultism.cave_wall_blocks": "Cave Wall Blocks",
"tag.block.occultism.netherrack": "Netherrack",
"tag.block.occultism.saplings.otherworld": "Otherworld Saplings",
"tag.block.occultism.storage_stabilizer": "Storage Stabilizer Blocks",
"tag.block.occultism.tree_soil": "Tree Soil Blocks",
"tag.block.occultism.worldgen_blacklist": "Worldgen Blacklisted Blocks",
"tag.item.forge.books": "Books",
"tag.item.forge.crops.datura": "Demon's Dream",
"tag.item.forge.dusts.copper": "Copper Dust",
"tag.item.forge.dusts.end_stone": "Crushed End Stone",
"tag.item.forge.dusts.gold": "Gold Dust",
"tag.item.forge.dusts.iesnium": "Iesnium Dust",
"tag.item.forge.dusts.iron": "Iron Dust",
"tag.item.forge.dusts.obsidian": "Crushed Obsidian",
"tag.item.forge.dusts.silver": "Silver Dust",
"tag.item.forge.fruits": "Fruits",
"tag.item.forge.ingots.iesnium": "Iesnium Ingot",
"tag.item.forge.ingots.silver": "Silver Ingot",
"tag.item.forge.magma": "Magma",
"tag.item.forge.nuggets.iesnium": "Iesnium Nugget",
"tag.item.forge.nuggets.silver": "Silver Nugget",
"tag.item.forge.ores.iesnium": "Iesnium Ore",
"tag.item.forge.ores.silver": "Silver Ore",
"tag.item.forge.raw_materials.iesnium": "Raw Iesnium",
"tag.item.forge.raw_materials.silver": "Raw Silver",
"tag.item.forge.seeds.datura": "Demon's Dream Seeds",
"tag.item.forge.storage_blocks.iesnium": "Iesnium Storage Blocks",
"tag.item.forge.storage_blocks.raw_iesnium": "Raw Iesnium Storage Blocks",
"tag.item.forge.storage_blocks.raw_silver": "Raw Silver Storage Blocks",
"tag.item.forge.storage_blocks.silver": "Silver Storage Blocks",
"tag.item.forge.tallow": "Tallow",
"tag.item.forge.tools.metal.axes": "Metal Axes",
"tag.item.occultism.books.book_of_calling_djinni": "Book of Calling Djinni",
"tag.item.occultism.books.book_of_calling_foliot": "Book of Calling Foliot",
"tag.item.occultism.elytra": "Elytras",
"tag.item.occultism.miners.basic_resources": "Basic Resource Miners",
"tag.item.occultism.miners.deeps": "Deepslate Miners",
"tag.item.occultism.miners.master": "Rare Resource Miners",
"tag.item.occultism.miners.ores": "General Miners",
"tag.item.occultism.otherworld_goggles": "Otherworld Goggles",
"tag.item.occultism.saplings.otherworld": "Otherworld Saplings",
"tag.item.occultism.tools.knives": "Knives"
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,16 @@
import com.klikli_dev.occultism.common.ritual.RitualFactory;
import com.klikli_dev.occultism.datagen.OccultismAdvancementSubProvider;
import com.klikli_dev.occultism.integration.modonomicon.OccultismModonomiconConstants.I18n;
import com.klikli_dev.occultism.registry.OccultismBlocks;
import com.klikli_dev.occultism.registry.OccultismEntities;
import com.klikli_dev.occultism.registry.OccultismItems;
import com.klikli_dev.occultism.registry.OccultismRituals;
import com.klikli_dev.occultism.registry.*;
import net.minecraft.ChatFormatting;
import net.minecraft.Util;
import net.minecraft.data.PackOutput;
import net.minecraft.network.chat.contents.TranslatableContents;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.Block;
import net.neoforged.neoforge.registries.DeferredHolder;

public class ENUSProvider extends AbstractModonomiconLanguageProvider {
Expand Down Expand Up @@ -3058,6 +3058,83 @@ private void advancementDescr(String name, String s) {
this.add(((TranslatableContents) OccultismAdvancementSubProvider.descr(name).getContents()).getKey(), s);
}

private void addTags() {
// Block tags
this.addBlockTag(OccultismTags.Blocks.OTHERWORLD_SAPLINGS,"Otherworld Saplings");
this.addBlockTag(OccultismTags.Blocks.CANDLES,"Candles");
this.addBlockTag(OccultismTags.Blocks.CAVE_WALL_BLOCKS,"Cave Wall Blocks");
this.addBlockTag(OccultismTags.Blocks.NETHERRACK,"Netherrack");
this.addBlockTag(OccultismTags.Blocks.STORAGE_STABILIZER,"Storage Stabilizer Blocks");
this.addBlockTag(OccultismTags.Blocks.TREE_SOIL,"Tree Soil Blocks");
this.addBlockTag(OccultismTags.Blocks.WORLDGEN_BLACKLIST,"Worldgen Blacklisted Blocks");
this.addBlockTag(OccultismTags.Blocks.IESNIUM_ORE,"Iesnium Ore");
this.addBlockTag(OccultismTags.Blocks.SILVER_ORE,"Silver Ore");
this.addBlockTag(OccultismTags.Blocks.STORAGE_BLOCKS_IESNIUM,"Iesnium Storage Blocks");
this.addBlockTag(OccultismTags.Blocks.STORAGE_BLOCKS_SILVER,"Silver Storage Blocks");
this.addBlockTag(OccultismTags.Blocks.STORAGE_BLOCKS_RAW_IESNIUM,"Raw Iesnium Storage Blocks");
this.addBlockTag(OccultismTags.Blocks.STORAGE_BLOCKS_RAW_SILVER,"Raw Silver Storage Blocks");


// Item tags
this.addItemTag(OccultismTags.Items.OTHERWORLD_SAPLINGS,"Otherworld Saplings");
this.addItemTag(OccultismTags.Items.BOOK_OF_CALLING_DJINNI,"Book of Calling Djinni");
this.addItemTag(OccultismTags.Items.BOOK_OF_CALLING_FOLIOT,"Book of Calling Foliot");
this.addItemTag(OccultismTags.Items.Miners.BASIC_RESOURCES,"Basic Resource Miners");
this.addItemTag(OccultismTags.Items.Miners.DEEPS,"Deepslate Miners");
this.addItemTag(OccultismTags.Items.Miners.MASTER,"Rare Resource Miners");
this.addItemTag(OccultismTags.Items.Miners.ORES,"General Miners");
this.addItemTag(OccultismTags.Items.TOOL_KNIVES,"Knives");
this.addItemTag(OccultismTags.Items.ELYTRA,"Elytras");
this.addItemTag(OccultismTags.Items.OTHERWORLD_GOGGLES,"Otherworld Goggles");
this.addItemTag(OccultismTags.Items.DATURA_SEEDS,"Demon's Dream Seeds");
this.addItemTag(OccultismTags.Items.DATURA_CROP,"Demon's Dream");
this.addItemTag(OccultismTags.Items.COPPER_DUST,"Copper Dust");
this.addItemTag(OccultismTags.Items.GOLD_DUST,"Gold Dust");
this.addItemTag(OccultismTags.Items.IESNIUM_DUST,"Iesnium Dust");
this.addItemTag(OccultismTags.Items.IRON_DUST,"Iron Dust");
this.addItemTag(OccultismTags.Items.SILVER_DUST,"Silver Dust");
this.addItemTag(OccultismTags.Items.END_STONE_DUST,"Crushed End Stone");
this.addItemTag(OccultismTags.Items.OBSIDIAN_DUST,"Crushed Obsidian");
this.addItemTag(OccultismTags.Items.IESNIUM_INGOT,"Iesnium Ingot");
this.addItemTag(OccultismTags.Items.SILVER_INGOT,"Silver Ingot");
this.addItemTag(OccultismTags.Items.IESNIUM_NUGGET,"Iesnium Nugget");
this.addItemTag(OccultismTags.Items.SILVER_NUGGET,"Silver Nugget");
this.addItemTag(OccultismTags.Items.IESNIUM_ORE,"Iesnium Ore");
this.addItemTag(OccultismTags.Items.SILVER_ORE,"Silver Ore");
this.addItemTag(OccultismTags.Items.RAW_IESNIUM,"Raw Iesnium");
this.addItemTag(OccultismTags.Items.RAW_SILVER,"Raw Silver");
this.addItemTag(OccultismTags.Items.STORAGE_BLOCK_IESNIUM,"Iesnium Storage Blocks");
this.addItemTag(OccultismTags.Items.STORAGE_BLOCK_SILVER,"Silver Storage Blocks");
this.addItemTag(OccultismTags.Items.STORAGE_BLOCK_RAW_IESNIUM,"Raw Iesnium Storage Blocks");
this.addItemTag(OccultismTags.Items.STORAGE_BLOCK_RAW_SILVER,"Raw Silver Storage Blocks");
this.addItemTag(OccultismTags.Items.TALLOW,"Tallow");
this.addItemTag(OccultismTags.Items.METAL_AXES,"Metal Axes");
this.addItemTag(OccultismTags.Items.MAGMA,"Magma");
this.addItemTag(OccultismTags.Items.BOOKS,"Books");
this.addItemTag(OccultismTags.Items.FRUITS,"Fruits");
}

private void addItemTag(ResourceLocation resourceLocation, String string) {
this.add("tag.item."+resourceLocation.getNamespace()+"."+resourceLocation.getPath().replace("/","."), string);
}
private void addBlockTag(TagKey<Block> block, String string) {
this.addBlockTag(block.location(),string);
}
private void addItemTag(TagKey<Item> item, String string) {
this.addItemTag(item.location(),string);
}
private void addBlockTag(ResourceLocation resourceLocation, String string) {
this.add("tag.block."+resourceLocation.getNamespace()+"."+resourceLocation.getPath().replace("/","."), string);
}

private void addEmiTranslations() {
this.add("emi.category.occultism.spirit_fire","Spirit Fire");
this.add("emi.category.occultism.crushing","Crushing");
this.add("emi.category.occultism.miner","Dimensional Mineshaft");
this.add("emi.category.occultism.ritual","Rituals");
this.add("emi.occultism.item_to_use", "Item to use: %s");
}

@Override
protected void addTranslations() {
this.addAdvancements();
Expand All @@ -3077,5 +3154,7 @@ protected void addTranslations() {
this.addDialogs();
this.addPentacles();
this.addModonomiconIntegration();
this.addEmiTranslations();
this.addTags();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.klikli_dev.occultism.integration.emi;

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.registry.OccultismBlocks;
import com.klikli_dev.occultism.registry.OccultismEntities;
import com.klikli_dev.occultism.registry.OccultismItems;
import com.klikli_dev.occultism.registry.OccultismRecipes;
import dev.emi.emi.api.EmiEntrypoint;
import dev.emi.emi.api.EmiInitRegistry;
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.render.EmiTexture;
import dev.emi.emi.api.stack.EmiStack;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.RecipeHolder;
import net.minecraft.world.item.crafting.RecipeManager;

import java.util.Objects;

@EmiEntrypoint
public class OccultismEmiPlugin implements EmiPlugin {
public static final EmiStack SPIRIT_FIRE = EmiStack.of(OccultismItems.SPIRIT_FIRE.get());
public static final EmiStack DIMENSIONAL_MINESHAFT = EmiStack.of(OccultismBlocks.DIMENSIONAL_MINESHAFT.get());
public static final EmiStack GOLDEN_SACRIFICIAL_BOWL = EmiStack.of(OccultismBlocks.GOLDEN_SACRIFICIAL_BOWL.get());
public static final ResourceLocation EMI_WIDGETS = new ResourceLocation(Occultism.MODID, "textures/gui/emi/widgets.png");
public static final EmiRecipeCategory SPIRIT_FIRE_CATEGORY = new EmiRecipeCategory(new ResourceLocation(Occultism.MODID, "spirit_fire"),SPIRIT_FIRE, new EmiTexture(EMI_WIDGETS, 0, 0, 16, 16));
public static final EmiRecipeCategory CRUSHING_CATEGORY = new EmiRecipeCategory(new ResourceLocation(Occultism.MODID, "crushing"), new SpiritRenderable<FoliotEntity>(OccultismEntities.FOLIOT.get()), new EmiTexture(EMI_WIDGETS, 32, 0, 16, 16));
public static final EmiRecipeCategory MINER_CATEGORY = new EmiRecipeCategory(new ResourceLocation(Occultism.MODID, "miner"), DIMENSIONAL_MINESHAFT, new EmiTexture(EMI_WIDGETS, 48, 0, 16, 16));
public static final EmiRecipeCategory RITUAL_CATEGORY = new EmiRecipeCategory(new ResourceLocation(Occultism.MODID, "ritual"),GOLDEN_SACRIFICIAL_BOWL , new EmiTexture(EMI_WIDGETS, 64, 0, 16, 16));

@Override
public void initialize(EmiInitRegistry registry) {
EmiPlugin.super.initialize(registry);
}

@Override
public void register(EmiRegistry emiRegistry) {
emiRegistry.addCategory(SPIRIT_FIRE_CATEGORY);
emiRegistry.addWorkstation(SPIRIT_FIRE_CATEGORY, SPIRIT_FIRE);
emiRegistry.addCategory(CRUSHING_CATEGORY);
emiRegistry.addWorkstation(CRUSHING_CATEGORY, EmiStack.of(new ItemStack(Objects.requireNonNull(BuiltInRegistries.ITEM.get(new ResourceLocation(Occultism.MODID, "ritual_dummy/summon_foliot_crusher"))))));
emiRegistry.addWorkstation(CRUSHING_CATEGORY, EmiStack.of(new ItemStack(Objects.requireNonNull(BuiltInRegistries.ITEM.get(new ResourceLocation(Occultism.MODID, "ritual_dummy/summon_djinni_crusher"))))));
emiRegistry.addWorkstation(CRUSHING_CATEGORY, EmiStack.of(new ItemStack(Objects.requireNonNull(BuiltInRegistries.ITEM.get(new ResourceLocation(Occultism.MODID, "ritual_dummy/summon_afrit_crusher"))))));
emiRegistry.addWorkstation(CRUSHING_CATEGORY, EmiStack.of(new ItemStack(Objects.requireNonNull(BuiltInRegistries.ITEM.get(new ResourceLocation(Occultism.MODID, "ritual_dummy/summon_marid_crusher"))))));

emiRegistry.addCategory(MINER_CATEGORY);
emiRegistry.addWorkstation(MINER_CATEGORY, EmiStack.of(OccultismBlocks.DIMENSIONAL_MINESHAFT.get()));

emiRegistry.addCategory(RITUAL_CATEGORY);
emiRegistry.addWorkstation(RITUAL_CATEGORY, GOLDEN_SACRIFICIAL_BOWL);
RecipeManager manager=emiRegistry.getRecipeManager();
for(RecipeHolder<SpiritFireRecipe> recipe: manager.getAllRecipesFor(OccultismRecipes.SPIRIT_FIRE_TYPE.get())) {
emiRegistry.addRecipe(new SpiritFireRecipeCategory(recipe));
}
for(RecipeHolder<CrushingRecipe> recipe:manager.getAllRecipesFor(OccultismRecipes.CRUSHING_TYPE.get())){
emiRegistry.addRecipe(new CrushingRecipeCategory(recipe));
}
for(RecipeHolder<MinerRecipe> recipe:manager.getAllRecipesFor(OccultismRecipes.MINER_TYPE.get())){
emiRegistry.addRecipe(new MinerRecipeCategory(recipe));
}
for(RecipeHolder<RitualRecipe> recipe:manager.getAllRecipesFor(OccultismRecipes.RITUAL_TYPE.get())){
emiRegistry.addRecipe(new RitualRecipeCategory(recipe));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package com.klikli_dev.occultism.integration.emi.recipes;

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.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.resources.ResourceLocation;
import net.minecraft.world.item.crafting.RecipeHolder;
import org.jetbrains.annotations.Nullable;

import java.util.List;

public class CrushingRecipeCategory implements EmiRecipe {
private final ResourceLocation id;
private final List<EmiIngredient> input;
private final List<EmiStack> output;

public CrushingRecipeCategory(RecipeHolder<CrushingRecipe> recipe) {
id=recipe.id();
this.input = List.of(EmiIngredient.of(recipe.value().getIngredients().get(0)));
this.output = List.of(EmiStack.of(recipe.value().getResultItem(Minecraft.getInstance().level.registryAccess())));
}

@Override
public EmiRecipeCategory getCategory() {
return OccultismEmiPlugin.CRUSHING_CATEGORY;
}

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

@Override
public List<EmiIngredient> getInputs() {
return this.input;
}

@Override
public List<EmiStack> getOutputs() {
return this.output;
}

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

@Override
public int getDisplayHeight() {
return 20;
}

@Override
public void addWidgets(WidgetHolder widgetHolder) {
widgetHolder.addSlot(input.get(0), 0, 2);
widgetHolder.addTexture(EmiTexture.EMPTY_ARROW,18,2);

SpiritWidget widget= new SpiritWidget(53,0, OccultismEntities.FOLIOT.get());
widgetHolder.add(widget);
widgetHolder.addTexture(EmiTexture.EMPTY_ARROW,64,2);
// Adds an output slot on the right
// Note that output slots need to call `recipeContext` to inform EMI about their recipe context
// This includes being able to resolve recipe trees, favorite stacks with recipe context, and more
widgetHolder.addSlot(output.get(0), 90, 2).recipeContext(this);
}
}
Loading

0 comments on commit 82f5c8a

Please sign in to comment.