diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingPattern.java b/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingPattern.java index 4ce1f07ad..7e4371eb7 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingPattern.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingPattern.java @@ -85,7 +85,7 @@ public class CraftingPattern implements ICraftingPattern { @Override public boolean isOredicted() { - return true; + return ItemPattern.isOredicted(stack); } @Override diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 6964e6ae4..ba64db8e0 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -4,6 +4,7 @@ import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; import com.google.common.collect.Multimaps; import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.renderer.GlStateManager; @@ -13,6 +14,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fml.client.config.GuiCheckBox; import net.minecraftforge.fml.common.FMLCommonHandler; import refinedstorage.RefinedStorage; import refinedstorage.api.network.grid.IItemGridHandler; @@ -30,6 +32,7 @@ import refinedstorage.gui.sidebutton.*; import refinedstorage.integration.jei.IntegrationJEI; import refinedstorage.integration.jei.RefinedStorageJEIPlugin; import refinedstorage.network.*; +import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.grid.IGrid; import refinedstorage.tile.grid.TileGrid; @@ -54,6 +57,8 @@ public class GuiGrid extends GuiBase { private GuiTextField searchField; + private GuiCheckBox patternOredicted; + private ContainerGrid container; private IGrid grid; @@ -94,6 +99,10 @@ public class GuiGrid extends GuiBase { searchField.yPosition = sy; } + if (grid.getType() == EnumGridType.PATTERN) { + patternOredicted = addCheckBox(x + 64, y + 138, "Use oredict", TileGrid.PATTERN_OREDICTED.getValue()); // @TODO: I18N + } + if (grid.getType() != EnumGridType.FLUID) { addSideButton(new SideButtonGridViewType(grid)); } @@ -402,6 +411,15 @@ public class GuiGrid extends GuiBase { } } + @Override + protected void actionPerformed(GuiButton button) throws IOException { + super.actionPerformed(button); + + if (button == patternOredicted) { + TileDataManager.setParameter(TileGrid.PATTERN_OREDICTED, patternOredicted.isChecked()); + } + } + @Override protected void keyTyped(char character, int keyCode) throws IOException { if (checkHotbarKeys(keyCode)) { @@ -427,4 +445,10 @@ public class GuiGrid extends GuiBase { searchField.setFocused(TileGrid.isSearchBoxModeWithAutoselection(mode)); } } + + public void updatePatternOredicted(boolean oredicted) { + if (patternOredicted != null) { + patternOredicted.setIsChecked(oredicted); + } + } } diff --git a/src/main/java/refinedstorage/item/ItemPattern.java b/src/main/java/refinedstorage/item/ItemPattern.java index d44a1d8e3..abd685d02 100755 --- a/src/main/java/refinedstorage/item/ItemPattern.java +++ b/src/main/java/refinedstorage/item/ItemPattern.java @@ -29,6 +29,7 @@ import java.util.Set; public class ItemPattern extends ItemBase implements ICraftingPatternProvider { private static final String NBT_SLOT = "Slot_%d"; private static final String NBT_OUTPUTS = "Outputs"; + private static final String NBT_OREDICTED = "Oredicted"; public ItemPattern() { super("pattern"); @@ -52,6 +53,10 @@ public class ItemPattern extends ItemBase implements ICraftingPatternProvider { } combineItems(tooltip, true, Iterables.toArray(pattern.getOutputs(), ItemStack.class)); + + if (pattern.isOredicted()) { + tooltip.add(TextFormatting.BLUE + "Uses ore dictionary"); // @TODO: I18N + } } else { tooltip.add(TextFormatting.RED + I18n.format("misc.refinedstorage:pattern.invalid") + TextFormatting.RESET); @@ -78,6 +83,22 @@ public class ItemPattern extends ItemBase implements ICraftingPatternProvider { } } + public static void setOredicted(ItemStack pattern, boolean oredicted) { + if (!pattern.hasTagCompound()) { + pattern.setTagCompound(new NBTTagCompound()); + } + + pattern.getTagCompound().setBoolean(NBT_OREDICTED, oredicted); + } + + public static boolean isOredicted(ItemStack pattern) { + if (!pattern.hasTagCompound() || !pattern.getTagCompound().hasKey(NBT_OREDICTED)) { + return false; + } + + return pattern.getTagCompound().getBoolean(NBT_OREDICTED); + } + public static void setSlot(ItemStack pattern, int slot, ItemStack stack) { if (!pattern.hasTagCompound()) { pattern.setTagCompound(new NBTTagCompound()); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index aba7e3fe4..f12c8e81d 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -107,10 +107,28 @@ public class TileGrid extends TileNode implements IGrid { } }); + public static final TileDataParameter PATTERN_OREDICTED = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer() { + @Override + public Boolean getValue(TileGrid tile) { + return tile.patternOredicted; + } + }, new ITileDataConsumer() { + @Override + public void setValue(TileGrid tile, Boolean value) { + tile.patternOredicted = value; + tile.markDirty(); + } + }, parameter -> { + if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { + ((GuiGrid) Minecraft.getMinecraft().currentScreen).updatePatternOredicted(parameter.getValue()); + } + }); + public static final String NBT_VIEW_TYPE = "ViewType"; public static final String NBT_SORTING_DIRECTION = "SortingDirection"; public static final String NBT_SORTING_TYPE = "SortingType"; public static final String NBT_SEARCH_BOX_MODE = "SearchBoxMode"; + private static final String NBT_PATTERN_OREDICTED = "PatternOredicted"; public static final int SORTING_DIRECTION_ASCENDING = 0; public static final int SORTING_DIRECTION_DESCENDING = 1; @@ -152,11 +170,14 @@ public class TileGrid extends TileNode implements IGrid { private int sortingType = SORTING_TYPE_NAME; private int searchBoxMode = SEARCH_BOX_MODE_NORMAL; + private boolean patternOredicted = false; + public TileGrid() { dataManager.addWatchedParameter(VIEW_TYPE); dataManager.addWatchedParameter(SORTING_DIRECTION); dataManager.addWatchedParameter(SORTING_TYPE); dataManager.addWatchedParameter(SEARCH_BOX_MODE); + dataManager.addWatchedParameter(PATTERN_OREDICTED); } @Override @@ -308,6 +329,8 @@ public class TileGrid extends TileNode implements IGrid { ItemStack pattern = new ItemStack(RefinedStorageItems.PATTERN); + ItemPattern.setOredicted(pattern, patternOredicted); + for (int i = 0; i < 9; ++i) { ItemStack ingredient = matrix.getStackInSlot(i); @@ -461,6 +484,10 @@ public class TileGrid extends TileNode implements IGrid { if (tag.hasKey(NBT_SEARCH_BOX_MODE)) { searchBoxMode = tag.getInteger(NBT_SEARCH_BOX_MODE); } + + if (tag.hasKey(NBT_PATTERN_OREDICTED)) { + patternOredicted = tag.getBoolean(NBT_PATTERN_OREDICTED); + } } @Override @@ -475,6 +502,7 @@ public class TileGrid extends TileNode implements IGrid { tag.setInteger(NBT_SORTING_DIRECTION, sortingDirection); tag.setInteger(NBT_SORTING_TYPE, sortingType); tag.setInteger(NBT_SEARCH_BOX_MODE, searchBoxMode); + tag.setBoolean(NBT_PATTERN_OREDICTED, patternOredicted); return tag; } diff --git a/src/main/resources/assets/refinedstorage/textures/gui/processing_pattern_encoder.png b/src/main/resources/assets/refinedstorage/textures/gui/processing_pattern_encoder.png index f6fcdb0b5..7d30bc3a8 100755 Binary files a/src/main/resources/assets/refinedstorage/textures/gui/processing_pattern_encoder.png and b/src/main/resources/assets/refinedstorage/textures/gui/processing_pattern_encoder.png differ