This commit is contained in:
Shadows_of_Fire 2018-07-27 21:40:36 -04:00
parent 7c7e87bea4
commit 32716bfca9
5 changed files with 93 additions and 24 deletions

View file

@ -19,18 +19,13 @@ import net.minecraft.util.math.BlockPos;
* Changes an item's color by changing its metadata. * Changes an item's color by changing its metadata.
* Much like dye and wool, 0 is white and 15 is black and it will cycle around. * Much like dye and wool, 0 is white and 15 is black and it will cycle around.
*/ */
public class ColorLensChangerByDyeMeta implements IColorLensChanger{ public class ColorLensChangerByDyeMeta implements IColorLensChanger {
@Override @Override
public ItemStack modifyItem(ItemStack stack, IBlockState hitBlockState, BlockPos hitBlock, IAtomicReconstructor tile){ public ItemStack modifyItem(ItemStack stack, IBlockState hitBlockState, BlockPos hitBlock, IAtomicReconstructor tile) {
ItemStack newStack = stack.copy(); ItemStack newStack = stack.copy();
int meta = newStack.getItemDamage(); int meta = newStack.getItemDamage();
if(meta >= 15){ newStack.setItemDamage((meta + 1) % 16);
newStack.setItemDamage(0);
}
else{
newStack.setItemDamage(meta+1);
}
return newStack; return newStack;
} }
} }

View file

@ -54,7 +54,9 @@ public enum ConfigBoolValues{
LASER_RELAY_LOSS("Laser Relay Energy Loss", ConfigCategories.MACHINE_VALUES, true, "If Energy Laser Relays should have energy loss"), LASER_RELAY_LOSS("Laser Relay Energy Loss", ConfigCategories.MACHINE_VALUES, true, "If Energy Laser Relays should have energy loss"),
SUPER_DUPER_HARD_MODE("Super Duper Hard Recipes", ConfigCategories.OTHER, false, "Turn this on to make recipes for items from the mod really hard. (This is a joke feature poking fun at the whole FTB Infinity Expert Mode style of playing. You shouldn't really turn this on as it makes the mod completely unplayable.)"), SUPER_DUPER_HARD_MODE("Super Duper Hard Recipes", ConfigCategories.OTHER, false, "Turn this on to make recipes for items from the mod really hard. (This is a joke feature poking fun at the whole FTB Infinity Expert Mode style of playing. You shouldn't really turn this on as it makes the mod completely unplayable.)"),
MOST_BLAND_PERSON_EVER("No Colored Item Names", ConfigCategories.OTHER, false, "If you want to be really boring and lame, you can turn on this setting to disable colored names on Actually Additions items. Because why would you want things to look pretty anyways, right?"); MOST_BLAND_PERSON_EVER("No Colored Item Names", ConfigCategories.OTHER, false, "If you want to be really boring and lame, you can turn on this setting to disable colored names on Actually Additions items. Because why would you want things to look pretty anyways, right?"),
COLOR_LENS_USES_OREDICT("Color Lens Oredict", ConfigCategories.OTHER, false, "If true, the Lens of Color will attempt to pull from the oredict instead of only using vanilla dyes.");
public final String name; public final String name;
public final String category; public final String category;

View file

@ -90,16 +90,13 @@ public class LensColor extends Lens{
private ItemStack tryConvert(ItemStack stack, IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){ private ItemStack tryConvert(ItemStack stack, IBlockState hitState, BlockPos hitBlock, IAtomicReconstructor tile){
if(StackUtil.isValid(stack)){ if(StackUtil.isValid(stack)){
Item item = stack.getItem(); Item item = stack.getItem();
if(item != null){
for(Map.Entry<Item, IColorLensChanger> changer : ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_COLOR_CHANGERS.entrySet()){ for(Map.Entry<Item, IColorLensChanger> changer : ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_COLOR_CHANGERS.entrySet()){
if(item == changer.getKey()){ if(item == changer.getKey()){
return changer.getValue().modifyItem(stack, hitState, hitBlock, tile); return changer.getValue().modifyItem(stack, hitState, hitBlock, tile);
}
} }
} }
} }
return ItemStack.EMPTY;
return ItemStack.EMPTY.copy();
} }
@Override @Override

View file

@ -21,9 +21,11 @@ import de.ellpeck.actuallyadditions.api.recipe.ColorLensChangerByDyeMeta;
import de.ellpeck.actuallyadditions.api.recipe.IColorLensChanger; import de.ellpeck.actuallyadditions.api.recipe.IColorLensChanger;
import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe;
import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks;
import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues;
import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.InitItems;
import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals; import de.ellpeck.actuallyadditions.mod.items.metalists.TheCrystals;
import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems;
import de.ellpeck.actuallyadditions.mod.recipe.ColorLensRotator;
import de.ellpeck.actuallyadditions.mod.recipe.EnchBookConversion; import de.ellpeck.actuallyadditions.mod.recipe.EnchBookConversion;
import de.ellpeck.actuallyadditions.mod.util.RecipeUtil; import de.ellpeck.actuallyadditions.mod.util.RecipeUtil;
import net.minecraft.block.Block; import net.minecraft.block.Block;
@ -32,8 +34,10 @@ import net.minecraft.init.Items;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient; import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.NonNullList;
import net.minecraftforge.oredict.OreDictionary;
public final class LensRecipeHandler{ public final class LensRecipeHandler {
public static final ArrayList<LensConversionRecipe> MAIN_PAGE_RECIPES = new ArrayList<LensConversionRecipe>(); public static final ArrayList<LensConversionRecipe> MAIN_PAGE_RECIPES = new ArrayList<LensConversionRecipe>();
public static LensConversionRecipe recipeColorLens; public static LensConversionRecipe recipeColorLens;
@ -50,7 +54,7 @@ public final class LensRecipeHandler{
public static LensConversionRecipe recipeFluidLaser; public static LensConversionRecipe recipeFluidLaser;
public static EnchBookConversion recipeEnchBook; public static EnchBookConversion recipeEnchBook;
public static void init(){ public static void init() {
//Crystal Blocks //Crystal Blocks
ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(fromBlock(Blocks.REDSTONE_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.REDSTONE.ordinal()), 400); ActuallyAdditionsAPI.addReconstructorLensConversionRecipe(fromBlock(Blocks.REDSTONE_BLOCK), new ItemStack(InitBlocks.blockCrystal, 1, TheCrystals.REDSTONE.ordinal()), 400);
MAIN_PAGE_RECIPES.add(RecipeUtil.lastReconstructorRecipe()); MAIN_PAGE_RECIPES.add(RecipeUtil.lastReconstructorRecipe());
@ -116,7 +120,11 @@ public final class LensRecipeHandler{
ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES.add(recipeEnchBook = new EnchBookConversion()); ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES.add(recipeEnchBook = new EnchBookConversion());
IColorLensChanger changer = new ColorLensChangerByDyeMeta(); IColorLensChanger changer = new ColorLensChangerByDyeMeta();
ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Items.DYE, changer); if (ConfigBoolValues.COLOR_LENS_USES_OREDICT.isEnabled()) {
initOredictDyeRotator();
} else {
ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Items.DYE, changer);
}
ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Item.getItemFromBlock(Blocks.WOOL), changer); ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Item.getItemFromBlock(Blocks.WOOL), changer);
ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Item.getItemFromBlock(Blocks.STAINED_GLASS), changer); ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Item.getItemFromBlock(Blocks.STAINED_GLASS), changer);
ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Item.getItemFromBlock(Blocks.STAINED_GLASS_PANE), changer); ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(Item.getItemFromBlock(Blocks.STAINED_GLASS_PANE), changer);
@ -127,21 +135,35 @@ public final class LensRecipeHandler{
} }
@Deprecated //Use lens-checking method below. @Deprecated //Use lens-checking method below.
public static List<LensConversionRecipe> getRecipesFor(ItemStack input){ public static List<LensConversionRecipe> getRecipesFor(ItemStack input) {
List<LensConversionRecipe> possibleRecipes = new ArrayList<>(); List<LensConversionRecipe> possibleRecipes = new ArrayList<>();
for(LensConversionRecipe recipe : ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES) for (LensConversionRecipe recipe : ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES)
if(recipe.getInput().apply(input)) possibleRecipes.add(recipe); if (recipe.getInput().apply(input)) possibleRecipes.add(recipe);
return possibleRecipes; return possibleRecipes;
} }
@Nullable @Nullable
public static LensConversionRecipe findMatchingRecipe(ItemStack input, Lens lens){ public static LensConversionRecipe findMatchingRecipe(ItemStack input, Lens lens) {
for(LensConversionRecipe recipe : ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES) for (LensConversionRecipe recipe : ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES)
if(recipe.matches(input, lens)) return recipe; if (recipe.matches(input, lens)) return recipe;
return null; return null;
} }
private static Ingredient fromBlock(Block b) { private static Ingredient fromBlock(Block b) {
return Ingredient.fromItems(Item.getItemFromBlock(b)); return Ingredient.fromItems(Item.getItemFromBlock(b));
} }
private static void initOredictDyeRotator() {
List<ItemStack> stacks = NonNullList.withSize(16, ItemStack.EMPTY);
List<ItemStack> dyeItems = new ArrayList<>();
String[] dyes = { "White", "Orange", "Magenta", "LightBlue", "Yellow", "Lime", "Pink", "Gray", "LightGray", "Cyan", "Purple", "Blue", "Brown", "Green", "Red", "Black" };
for (int i = 0; i < dyes.length; i++) {
List<ItemStack> ores = OreDictionary.getOres("dye" + dyes[i]);
dyeItems.addAll(ores);
stacks.set(i, ores.get(ores.size() - 1));
}
ColorLensRotator rotator = new ColorLensRotator(stacks);
for (ItemStack s : dyeItems)
ActuallyAdditionsAPI.addReconstructorLensColorChangeItem(s.getItem(), rotator);
}
} }

View file

@ -0,0 +1,53 @@
package de.ellpeck.actuallyadditions.mod.recipe;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import de.ellpeck.actuallyadditions.api.internal.IAtomicReconstructor;
import de.ellpeck.actuallyadditions.api.recipe.IColorLensChanger;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.oredict.OreDictionary;
public class ColorLensRotator implements IColorLensChanger {
public static final Map<String, EnumDyeColor> STRING_TO_ENUM = new HashMap<>();
static {
String[] dyes = { "White", "Orange", "Magenta", "LightBlue", "Yellow", "Lime", "Pink", "Gray", "LightGray", "Cyan", "Purple", "Blue", "Brown", "Green", "Red", "Black" };
for (int i = 0; i < dyes.length; i++)
STRING_TO_ENUM.put("dye" + dyes[i], EnumDyeColor.byMetadata(i));
}
final List<ItemStack> rotations;
public ColorLensRotator(List<ItemStack> rotations) {
this.rotations = rotations;
}
@Override
public ItemStack modifyItem(ItemStack stack, IBlockState hitBlockState, BlockPos hitBlock, IAtomicReconstructor tile) {
int idx = -1;
for (int i : OreDictionary.getOreIDs(stack)) {
String s = OreDictionary.getOreName(i);
if (s.startsWith("dye")) {
EnumDyeColor color = STRING_TO_ENUM.get(s);
if (color != null) {
idx = color.getMetadata();
break;
}
}
}
if (idx == -1) return ItemStack.EMPTY;
ItemStack s = rotations.get((idx + 1) % rotations.size()).copy();
s.setCount(stack.getCount());
return s;
}
}