diff --git a/src/main/java/WayofTime/bloodmagic/BloodMagic.java b/src/main/java/WayofTime/bloodmagic/BloodMagic.java index 69f725b0..e270d518 100644 --- a/src/main/java/WayofTime/bloodmagic/BloodMagic.java +++ b/src/main/java/WayofTime/bloodmagic/BloodMagic.java @@ -65,6 +65,7 @@ public class BloodMagic { ModRecipes.init(); ModRituals.initRituals(); ModRituals.initImperfectRituals(); + ModCompatibility.registerModCompat(); ConfigHandler.checkRituals(); proxy.init(); diff --git a/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarTier.java b/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarTier.java index 40368243..87da7da5 100644 --- a/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarTier.java +++ b/src/main/java/WayofTime/bloodmagic/api/altar/EnumAltarTier.java @@ -132,4 +132,8 @@ public enum EnumAltarTier { public void buildComponents() { } + + public int toInt() { + return ordinal() + 1; + } } diff --git a/src/main/java/WayofTime/bloodmagic/compat/ICompatibility.java b/src/main/java/WayofTime/bloodmagic/compat/ICompatibility.java new file mode 100644 index 00000000..ebdb2ac5 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/compat/ICompatibility.java @@ -0,0 +1,17 @@ +package WayofTime.bloodmagic.compat; + +/** + * Implement on all primary compatibility classes. + */ +public interface ICompatibility { + + /** + * Called after the given {@code modid} has been verified as loaded. + */ + void loadCompatibility(); + + /** + * The {@code modid} of the mod we are adding compatibility for. + */ + String getModId(); +} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java b/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java new file mode 100644 index 00000000..a2ad9986 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicPlugin.java @@ -0,0 +1,43 @@ +package WayofTime.bloodmagic.compat.jei; + +import WayofTime.bloodmagic.compat.jei.altar.AltarRecipeCategory; +import WayofTime.bloodmagic.compat.jei.altar.AltarRecipeHandler; +import WayofTime.bloodmagic.compat.jei.altar.AltarRecipeMaker; +import mezz.jei.api.IModPlugin; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeHandler; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class BloodMagicPlugin implements IModPlugin { + + @Override + public boolean isModLoaded() { + return true; + } + + @Override + public Iterable getRecipeCategories() { + return Arrays.asList( + new AltarRecipeCategory() + ); + } + + @Override + public Iterable getRecipeHandlers() { + return Arrays.asList( + new AltarRecipeHandler() + ); + } + + @Override + public Iterable getRecipes() { + List recipes = new ArrayList(); + + recipes.addAll(AltarRecipeMaker.getAltarRecipes()); + + return recipes; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicRecipeWrapper.java b/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicRecipeWrapper.java new file mode 100644 index 00000000..b2ffd19a --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/BloodMagicRecipeWrapper.java @@ -0,0 +1,20 @@ +package WayofTime.bloodmagic.compat.jei; + +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraftforge.fluids.FluidStack; + +import java.util.Collections; +import java.util.List; + +public abstract class BloodMagicRecipeWrapper implements IRecipeWrapper { + + @Override + public List getFluidInputs() { + return Collections.emptyList(); + } + + @Override + public List getFluidOutputs() { + return Collections.emptyList(); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/CompatibilityJustEnoughItems.java b/src/main/java/WayofTime/bloodmagic/compat/jei/CompatibilityJustEnoughItems.java new file mode 100644 index 00000000..ac7ec53a --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/CompatibilityJustEnoughItems.java @@ -0,0 +1,17 @@ +package WayofTime.bloodmagic.compat.jei; + +import WayofTime.bloodmagic.compat.ICompatibility; +import mezz.jei.api.JEIManager; + +public class CompatibilityJustEnoughItems implements ICompatibility { + + @Override + public void loadCompatibility() { + JEIManager.pluginRegistry.registerPlugin(new BloodMagicPlugin()); + } + + @Override + public String getModId() { + return "JEI"; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java new file mode 100644 index 00000000..2a230ef3 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeCategory.java @@ -0,0 +1,52 @@ +package WayofTime.bloodmagic.compat.jei.altar; + +import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.util.helper.TextHelper; +import mezz.jei.api.JEIManager; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IGuiFluidTanks; +import mezz.jei.api.gui.IGuiItemStacks; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraft.util.ResourceLocation; + +import javax.annotation.Nonnull; + +public class AltarRecipeCategory implements IRecipeCategory { + + private static final int INPUT_SLOT = 0; + private static final int OUTPUT_SLOT = 1; + + @Nonnull + private final IDrawable background = JEIManager.guiHelper.createDrawable(new ResourceLocation(Constants.Mod.DOMAIN + "gui/jei/altar.png"), 3, 4, 155, 65); + @Nonnull + private final String localizedName = TextHelper.localize("jei.BloodMagic.recipe.altar"); + + @Nonnull + @Override + public String getTitle() { + return localizedName; + } + + @Nonnull + @Override + public IDrawable getBackground() { + return background; + } + + @Override + public void init(@Nonnull IGuiItemStacks guiItemStacks, @Nonnull IGuiFluidTanks guiFluidTanks) { + guiItemStacks.init(INPUT_SLOT, 31, 0); + guiItemStacks.init(OUTPUT_SLOT, 125, 30); + } + + @Override + @SuppressWarnings("unchecked") + public void setRecipe(@Nonnull IGuiItemStacks guiItemStacks, @Nonnull IGuiFluidTanks guiFluidTanks, @Nonnull IRecipeWrapper recipeWrapper) { + if (recipeWrapper instanceof AltarRecipeJEI) { + AltarRecipeJEI altarRecipeWrapper = (AltarRecipeJEI) recipeWrapper; + guiItemStacks.set(INPUT_SLOT, altarRecipeWrapper.getInputs()); + guiItemStacks.set(OUTPUT_SLOT, altarRecipeWrapper.getOutputs()); + } + } +} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeHandler.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeHandler.java new file mode 100644 index 00000000..3ae06b9a --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeHandler.java @@ -0,0 +1,33 @@ +package WayofTime.bloodmagic.compat.jei.altar; + +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeHandler; +import mezz.jei.api.recipe.IRecipeWrapper; + +import javax.annotation.Nonnull; + +public class AltarRecipeHandler implements IRecipeHandler { + + @Nonnull + @Override + public Class getRecipeClass() { + return AltarRecipeJEI.class; + } + + @Nonnull + @Override + public Class getRecipeCategoryClass() { + return AltarRecipeCategory.class; + } + + @Nonnull + @Override + public IRecipeWrapper getRecipeWrapper(@Nonnull AltarRecipeJEI recipe) { + return recipe; + } + + @Override + public boolean isRecipeValid(@Nonnull AltarRecipeJEI recipe) { + return recipe.getInputs().size() > 0 && recipe.getOutputs().size() > 0; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java new file mode 100644 index 00000000..6502b2bc --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeJEI.java @@ -0,0 +1,46 @@ +package WayofTime.bloodmagic.compat.jei.altar; + +import WayofTime.bloodmagic.compat.jei.BloodMagicRecipeWrapper; +import WayofTime.bloodmagic.util.helper.TextHelper; +import com.google.common.base.Strings; +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; + +import javax.annotation.Nonnull; +import java.awt.*; +import java.util.Collections; +import java.util.List; + +public class AltarRecipeJEI extends BloodMagicRecipeWrapper { + + @Nonnull + private final ItemStack input; + + @Nonnull + private final ItemStack output; + + private final String[] infoString; + + public AltarRecipeJEI(@Nonnull ItemStack input, @Nonnull ItemStack output, int tier, int requiredLP) { + this.input = input; + this.output = output; + + this.infoString = new String[]{ TextHelper.localize("jei.BloodMagic.recipe.requiredTier", tier), TextHelper.localize("jei.BloodMagic.recipe.requiredLP", requiredLP) }; + } + + @Override + public List getInputs() { + return Collections.singletonList(input); + } + + @Override + public List getOutputs() { + return Collections.singletonList(output); + } + + @Override + public void drawInfo(@Nonnull Minecraft minecraft) { + minecraft.fontRendererObj.drawString(infoString[0], 90 - minecraft.fontRendererObj.getStringWidth(infoString[0]) / 2, 0, Color.gray.getRGB()); + minecraft.fontRendererObj.drawString(infoString[1], 90 - minecraft.fontRendererObj.getStringWidth(infoString[1]) / 2, 10, Color.gray.getRGB()); + } +} diff --git a/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeMaker.java b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeMaker.java new file mode 100644 index 00000000..f5b97161 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/compat/jei/altar/AltarRecipeMaker.java @@ -0,0 +1,32 @@ +package WayofTime.bloodmagic.compat.jei.altar; + +import WayofTime.bloodmagic.api.altar.AltarRecipe; +import WayofTime.bloodmagic.api.registry.AltarRecipeRegistry; +import net.minecraft.item.ItemStack; + +import javax.annotation.Nonnull; +import java.util.*; + +public class AltarRecipeMaker { + + @Nonnull + public static List getAltarRecipes() { + Map altarMap = AltarRecipeRegistry.getRecipes(); + + ArrayList recipes = new ArrayList(); + + for (Map.Entry itemStackAltarRecipeEntry : altarMap.entrySet()) { + if (itemStackAltarRecipeEntry.getValue().getOutput() != null) { // Make sure output is not null. If it is, the recipe is for a filling orb, and we don't want that. + ItemStack input = itemStackAltarRecipeEntry.getKey(); + ItemStack output = itemStackAltarRecipeEntry.getValue().getOutput(); + int requiredTier = itemStackAltarRecipeEntry.getValue().getMinTier().toInt(); + int requiredLP = itemStackAltarRecipeEntry.getValue().getSyphon(); + + AltarRecipeJEI recipe = new AltarRecipeJEI(input, output, requiredTier, requiredLP); + recipes.add(recipe); + } + } + + return recipes; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModCompatibility.java b/src/main/java/WayofTime/bloodmagic/registry/ModCompatibility.java new file mode 100644 index 00000000..8962f7a9 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/registry/ModCompatibility.java @@ -0,0 +1,21 @@ +package WayofTime.bloodmagic.registry; + +import WayofTime.bloodmagic.compat.ICompatibility; +import WayofTime.bloodmagic.compat.jei.CompatibilityJustEnoughItems; +import net.minecraftforge.fml.common.Loader; + +import java.util.ArrayList; + +public class ModCompatibility { + + private static ArrayList compatibilities = new ArrayList(); + + public static void registerModCompat() { + compatibilities.add(new CompatibilityJustEnoughItems()); + + for (ICompatibility compat : compatibilities) { + if (Loader.isModLoaded(compat.getModId())) + compat.loadCompatibility(); + } + } +} diff --git a/src/main/resources/assets/bloodmagic/lang/en_US.lang b/src/main/resources/assets/bloodmagic/lang/en_US.lang index 238c4e69..0a10c33d 100644 --- a/src/main/resources/assets/bloodmagic/lang/en_US.lang +++ b/src/main/resources/assets/bloodmagic/lang/en_US.lang @@ -109,4 +109,9 @@ tooltip.BloodMagic.pack.stored=Stored: %d LP tooltip.BloodMagic.activationCrystal.weak=Activates low-level rituals tooltip.BloodMagic.activationCrystal.awakened=Activates more powerful rituals -tooltip.BloodMagic.activationCrystal.creative=Creative Only - Activates any ritual \ No newline at end of file +tooltip.BloodMagic.activationCrystal.creative=Creative Only - Activates any ritual + +# JustEnoughItems +jei.BloodMagic.recipe.altar=Blood Altar +jei.BloodMagic.recipe.requiredLP=LP: %d +jei.BloodMagic.recipe.requiredTier=Tier: %d