diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 1129601a3..bf2fb7dd7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -126,7 +126,7 @@ public final class ActuallyAdditionsAPI{ * @param outputTwoChance The chance of the second output (0 won't occur at all, 100 will all the time) */ public static void addCrusherRecipe(ItemStack input, ItemStack outputOne, ItemStack outputTwo, int outputTwoChance){ - CRUSHER_RECIPES.add(new CrusherRecipe(input, outputOne, outputTwo, outputTwoChance)); + CRUSHER_RECIPES.add(new CrusherRecipe(input, outputOne, outputTwo == null ? ItemStack.EMPTY : outputTwo, outputTwoChance)); } /** diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/misc/IDisableableItem.java b/src/main/java/de/ellpeck/actuallyadditions/api/misc/IDisableableItem.java new file mode 100644 index 000000000..36f8ffbc2 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/api/misc/IDisableableItem.java @@ -0,0 +1,12 @@ +package de.ellpeck.actuallyadditions.api.misc; + +public interface IDisableableItem { + + /** + * Represents an item that can be disabled in the configuration of the mod. + * If this returns true, assume the item is not registered with the game, but may still be instantiated. + * @return If the item has not been registered with the Forge Registry. + */ + public boolean isDisabled(); + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index e2230ca4e..3ac45f49b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -129,6 +129,8 @@ public class ActuallyAdditions{ InitBooklet.postInit(); proxy.postInit(event); + ConfigurationHandler.redefineConfigs(); + ModUtil.LOGGER.info("PostInitialization Finished."); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/EntryButton.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/EntryButton.java index 948ffef4d..c0e2af11d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/EntryButton.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/button/EntryButton.java @@ -44,7 +44,7 @@ public class EntryButton extends GuiButton{ this.mouseDragged(minecraft, mouseX, mouseY); int textOffsetX = 0; - if(StackUtil.isValid(this.stackToRender)){ + if(StackUtil.isValid(this.stackToRender == null ? ItemStack.EMPTY : this.stackToRender)){ GlStateManager.pushMatrix(); AssetUtil.renderStackToGui(this.stackToRender, this.x-4, this.y, 0.725F); GlStateManager.popMatrix(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java index 178efb3ba..66b272996 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/chapter/BookletChapter.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.mod.booklet.chapter; import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; import de.ellpeck.actuallyadditions.api.booklet.IBookletPage; +import de.ellpeck.actuallyadditions.api.misc.IDisableableItem; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.item.ItemStack; @@ -38,6 +39,7 @@ public class BookletChapter implements IBookletChapter{ this.identifier = identifier; this.entry = entry; this.displayStack = displayStack; + if(displayStack.getItem() instanceof IDisableableItem && ((IDisableableItem) displayStack.getItem()).isDisabled()) displayStack = ItemStack.EMPTY; this.priority = priority; this.color = TextFormatting.RESET; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java index ddfc46988..662e9d585 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java @@ -16,6 +16,7 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.Util; +import de.ellpeck.actuallyadditions.mod.util.crafting.BlankRecipe; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.Ingredient; @@ -128,8 +129,13 @@ public class PageCrafting extends BookletPage{ Ingredient[] ings = new Ingredient[9]; int width = 3; int height = 3; - - if(recipe instanceof ShapedRecipes){ + + if(recipe instanceof BlankRecipe){ + this.recipeTypeLocKey = "tooltip."+ModUtil.MOD_ID+".disabled"; + gui.addOrModifyItemRenderer(recipe.getRecipeOutput(), startX+100, startY+25, 1F, false); + return; + } + else if(recipe instanceof ShapedRecipes){ ShapedRecipes shaped = (ShapedRecipes)recipe; width = shaped.recipeWidth; height = shaped.recipeHeight; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java index 402140e9b..50bb97e67 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/config/ConfigurationHandler.java @@ -33,7 +33,7 @@ public class ConfigurationHandler{ redefineConfigs(); } - private static void redefineConfigs(){ + public static void redefineConfigs(){ ConfigValues.defineConfigValues(config); if(config.hasChanged()){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java index 789a7334f..d29e9c1bb 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/creative/CreativeTab.java @@ -10,6 +10,7 @@ package de.ellpeck.actuallyadditions.mod.creative; +import de.ellpeck.actuallyadditions.api.misc.IDisableableItem; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.items.InitItems; @@ -349,7 +350,7 @@ public class CreativeTab extends CreativeTabs{ } public void add(Item item){ - if(item != null){ + if(item != null && (!(item instanceof IDisableableItem) || (item instanceof IDisableableItem && !((IDisableableItem) item).isDisabled()))){ item.getSubItems(INSTANCE, this.list); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java index 253588a73..1fc76e5a8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemArmorAA.java @@ -10,20 +10,24 @@ package de.ellpeck.actuallyadditions.mod.items.base; +import de.ellpeck.actuallyadditions.api.misc.IDisableableItem; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.config.ConfigurationHandler; import de.ellpeck.actuallyadditions.mod.inventory.ContainerEnergizer; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; -public class ItemArmorAA extends ItemArmor{ +public class ItemArmorAA extends ItemArmor implements IDisableableItem{ private final ItemStack repairItem; private final String name; private final EnumRarity rarity; - + private final boolean disabled; + public ItemArmorAA(String name, ArmorMaterial material, int type, ItemStack repairItem){ this(name, material, type, repairItem, EnumRarity.RARE); } @@ -33,8 +37,8 @@ public class ItemArmorAA extends ItemArmor{ this.repairItem = repairItem; this.name = name; this.rarity = rarity; - - this.register(); + this.disabled = ConfigurationHandler.config.getBoolean("Disable: " + StringUtil.badTranslate(name), "Tool Control", false, "This will disable the " + StringUtil.badTranslate(name) +". It will not be registered."); + if(!disabled) this.register(); } private void register(){ @@ -64,4 +68,9 @@ public class ItemArmorAA extends ItemArmor{ public boolean getIsRepairable(ItemStack itemToRepair, ItemStack stack){ return StackUtil.isValid(this.repairItem) && ItemUtil.areItemsEqual(this.repairItem, stack, false); } + + @Override + public boolean isDisabled() { + return disabled; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java index 8bd797a4e..c8fdfaa7d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemHoeAA.java @@ -10,18 +10,22 @@ package de.ellpeck.actuallyadditions.mod.items.base; +import de.ellpeck.actuallyadditions.api.misc.IDisableableItem; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.config.ConfigurationHandler; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemHoe; import net.minecraft.item.ItemStack; -public class ItemHoeAA extends ItemHoe{ +public class ItemHoeAA extends ItemHoe implements IDisableableItem { private final String name; private final EnumRarity rarity; private final ItemStack repairItem; + private final boolean disabled; public ItemHoeAA(Item.ToolMaterial toolMat, ItemStack repairItem, String unlocalizedName, EnumRarity rarity){ super(toolMat); @@ -30,7 +34,8 @@ public class ItemHoeAA extends ItemHoe{ this.name = unlocalizedName; this.rarity = rarity; - this.register(); + this.disabled = ConfigurationHandler.config.getBoolean("Disable: " + StringUtil.badTranslate(name), "Tool Control", false, "This will disable the " + StringUtil.badTranslate(name) +". It will not be registered."); + if(!disabled) this.register(); } private void register(){ @@ -61,4 +66,9 @@ public class ItemHoeAA extends ItemHoe{ public boolean getIsRepairable(ItemStack itemToRepair, ItemStack stack){ return ItemUtil.areItemsEqual(this.repairItem, stack, false); } + + @Override + public boolean isDisabled() { + return disabled; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java index d10972379..fcac84c36 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemSwordAA.java @@ -10,18 +10,22 @@ package de.ellpeck.actuallyadditions.mod.items.base; +import de.ellpeck.actuallyadditions.api.misc.IDisableableItem; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.base.ItemBlockBase; +import de.ellpeck.actuallyadditions.mod.config.ConfigurationHandler; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; -public class ItemSwordAA extends ItemSword{ +public class ItemSwordAA extends ItemSword implements IDisableableItem { private final String name; private final EnumRarity rarity; private final ItemStack repairItem; + private final boolean disabled; public ItemSwordAA(ToolMaterial toolMat, ItemStack repairItem, String unlocalizedName, EnumRarity rarity){ super(toolMat); @@ -30,7 +34,8 @@ public class ItemSwordAA extends ItemSword{ this.name = unlocalizedName; this.rarity = rarity; - this.register(); + this.disabled = ConfigurationHandler.config.getBoolean("Disable: " + StringUtil.badTranslate(name), "Tool Control", false, "This will disable the " + StringUtil.badTranslate(name) +". It will not be registered."); + if(!disabled) this.register(); } private void register(){ @@ -65,4 +70,9 @@ public class ItemSwordAA extends ItemSword{ public EnumRarity getRarity(ItemStack stack){ return this.rarity; } + + @Override + public boolean isDisabled() { + return disabled; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java index 1dfa22cc5..686b6e202 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemToolAA.java @@ -10,9 +10,12 @@ package de.ellpeck.actuallyadditions.mod.items.base; +import de.ellpeck.actuallyadditions.api.misc.IDisableableItem; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.config.ConfigurationHandler; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.block.Block; import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; @@ -21,12 +24,13 @@ import net.minecraftforge.oredict.OreDictionary; import java.util.Set; -public class ItemToolAA extends ItemTool{ +public class ItemToolAA extends ItemTool implements IDisableableItem{ private final String name; private final EnumRarity rarity; private final ItemStack repairItem; private String repairOredict; + private final boolean disabled; public ItemToolAA(float attack, float speed, ToolMaterial toolMat, String repairItem, String unlocalizedName, EnumRarity rarity, Set effectiveStuff){ this(attack, speed, toolMat, (ItemStack)null, unlocalizedName, rarity, effectiveStuff); @@ -39,8 +43,8 @@ public class ItemToolAA extends ItemTool{ this.repairItem = repairItem; this.name = unlocalizedName; this.rarity = rarity; - - this.register(); + this.disabled = ConfigurationHandler.config.getBoolean("Disable: " + StringUtil.badTranslate(unlocalizedName), "Tool Control", false, "This will disable the " + StringUtil.badTranslate(unlocalizedName) +". It will not be registered."); + if(!disabled) this.register(); } private void register(){ @@ -82,4 +86,9 @@ public class ItemToolAA extends ItemTool{ } return false; } + + @Override + public boolean isDisabled() { + return disabled; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StackUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StackUtil.java index 8635a2c65..296f17123 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StackUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StackUtil.java @@ -10,6 +10,8 @@ package de.ellpeck.actuallyadditions.mod.util; +import de.ellpeck.actuallyadditions.api.misc.IDisableableItem; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; @@ -33,8 +35,10 @@ public final class StackUtil{ } } - public static boolean isValid(ItemStack stack){ - return stack != null && !stack.isEmpty(); + public static boolean isValid(ItemStack stack){//Stacks are nonnull. If we are making null stacks we're stupid anyway. + Item i = stack.getItem(); + if(i instanceof IDisableableItem) return !((IDisableableItem) i).isDisabled(); + return !stack.isEmpty(); } public static ItemStack getNull(){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java index 658d72ebf..ce53230be 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/StringUtil.java @@ -46,6 +46,11 @@ public final class StringUtil{ return net.minecraft.util.text.translation.I18n.translateToLocal(langKey); } + @SuppressWarnings("deprecation")//Configs why must you need to be translated. + public static String badTranslate(String someUnlocAAItemName) { + return net.minecraft.util.text.translation.I18n.translateToLocal("item.actuallyadditions."+someUnlocAAItemName+".name"); + } + @SideOnly(Side.CLIENT) public static void drawSplitString(FontRenderer renderer, String strg, int x, int y, int width, int color, boolean shadow){ List list = renderer.listFormattedStringToWidth(strg, width); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/crafting/BlankRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/crafting/BlankRecipe.java new file mode 100644 index 000000000..415d802d4 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/crafting/BlankRecipe.java @@ -0,0 +1,32 @@ +package de.ellpeck.actuallyadditions.mod.util.crafting; + +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.world.World; +import net.minecraftforge.registries.IForgeRegistryEntry; + + +public class BlankRecipe extends IForgeRegistryEntry.Impl implements IRecipe{ + + @Override + public boolean matches(InventoryCrafting inv, World worldIn) { + return false; + } + + @Override + public ItemStack getCraftingResult(InventoryCrafting inv) { + return ItemStack.EMPTY; + } + + @Override + public boolean canFit(int width, int height) { + return false; + } + + @Override + public ItemStack getRecipeOutput() { + return ItemStack.EMPTY; + } + +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/crafting/RecipeHelper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/crafting/RecipeHelper.java index d10a906f5..9ce8cbe87 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/crafting/RecipeHelper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/crafting/RecipeHelper.java @@ -1,5 +1,6 @@ package de.ellpeck.actuallyadditions.mod.util.crafting; +import de.ellpeck.actuallyadditions.api.misc.IDisableableItem; import de.ellpeck.actuallyadditions.mod.RegistryHandler; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraft.block.Block; @@ -37,6 +38,8 @@ public final class RecipeHelper{ * This adds the recipe to the list of crafting recipes. Cares about names. */ public static void addRecipe(String name, IRecipe rec){ + Item i = rec.getRecipeOutput().getItem(); + if(i instanceof IDisableableItem && ((IDisableableItem) i).isDisabled()) rec = new BlankRecipe(); if(rec.getRegistryName() == null){ RECIPE_LIST.add(rec.setRegistryName(new ResourceLocation(MODID, name))); } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index faacac858..979274eff 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -2,6 +2,7 @@ itemGroup.actuallyadditions=Actually Additions achievement.page.actuallyadditions=Actually Additions actuallyadditions.lolWutHowUDoDis.name=This is bugged. Throw it away. Please. +tooltip.actuallyadditions.disabled=Disabled Object #Fluids fluid.actuallyadditions.refinedcanolaoil=Refined Canola Oil