Added crafting pattern render handler for controlling whether to display the output. Fixes #1820
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package com.raoulvdberge.refinedstorage.api;
|
package com.raoulvdberge.refinedstorage.api;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternRenderHandler;
|
||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementList;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementList;
|
||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementRegistry;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementRegistry;
|
||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElementRegistry;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElementRegistry;
|
||||||
@@ -29,6 +30,7 @@ import net.minecraft.world.World;
|
|||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a Refined Storage API implementation.
|
* Represents a Refined Storage API implementation.
|
||||||
@@ -166,6 +168,16 @@ public interface IRSAPI {
|
|||||||
@Nonnull
|
@Nonnull
|
||||||
IOneSixMigrationHelper getOneSixMigrationHelper();
|
IOneSixMigrationHelper getOneSixMigrationHelper();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param renderHandler the render handler to add
|
||||||
|
*/
|
||||||
|
void addPatternRenderHandler(ICraftingPatternRenderHandler renderHandler);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return a list of pattern render handlers
|
||||||
|
*/
|
||||||
|
List<ICraftingPatternRenderHandler> getPatternRenderHandlers();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Opens a wireless grid for the given player.
|
* Opens a wireless grid for the given player.
|
||||||
*
|
*
|
||||||
|
@@ -0,0 +1,18 @@
|
|||||||
|
package com.raoulvdberge.refinedstorage.api.autocrafting;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the behavior of pattern rendering.
|
||||||
|
* One can add this interface through {@link com.raoulvdberge.refinedstorage.api.IRSAPI#addPatternRenderHandler(ICraftingPatternRenderHandler)}.
|
||||||
|
*/
|
||||||
|
public interface ICraftingPatternRenderHandler {
|
||||||
|
/**
|
||||||
|
* Returns true if the pattern can render its output.
|
||||||
|
* As soon as one {@link ICraftingPatternRenderHandler} returns true for this method, it will render the output.
|
||||||
|
*
|
||||||
|
* @param pattern the pattern
|
||||||
|
* @return true if this pattern can render its output, false otherwise
|
||||||
|
*/
|
||||||
|
boolean canRenderOutput(ItemStack pattern);
|
||||||
|
}
|
@@ -4,6 +4,7 @@ import com.raoulvdberge.refinedstorage.RS;
|
|||||||
import com.raoulvdberge.refinedstorage.RSGui;
|
import com.raoulvdberge.refinedstorage.RSGui;
|
||||||
import com.raoulvdberge.refinedstorage.api.IRSAPI;
|
import com.raoulvdberge.refinedstorage.api.IRSAPI;
|
||||||
import com.raoulvdberge.refinedstorage.api.RSAPIInject;
|
import com.raoulvdberge.refinedstorage.api.RSAPIInject;
|
||||||
|
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternRenderHandler;
|
||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementList;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementList;
|
||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementRegistry;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementRegistry;
|
||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElementRegistry;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElementRegistry;
|
||||||
@@ -54,6 +55,8 @@ import net.minecraftforge.fml.common.discovery.ASMDataTable;
|
|||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class API implements IRSAPI {
|
public class API implements IRSAPI {
|
||||||
@@ -71,6 +74,7 @@ public class API implements IRSAPI {
|
|||||||
private IStorageDiskRegistry storageDiskRegistry = new StorageDiskRegistry();
|
private IStorageDiskRegistry storageDiskRegistry = new StorageDiskRegistry();
|
||||||
private IStorageDiskSync storageDiskSync = new StorageDiskSync();
|
private IStorageDiskSync storageDiskSync = new StorageDiskSync();
|
||||||
private IOneSixMigrationHelper oneSixMigrationHelper = new OneSixMigrationHelper();
|
private IOneSixMigrationHelper oneSixMigrationHelper = new OneSixMigrationHelper();
|
||||||
|
private List<ICraftingPatternRenderHandler> patternRenderHandlers = new LinkedList<>();
|
||||||
|
|
||||||
public static IRSAPI instance() {
|
public static IRSAPI instance() {
|
||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
@@ -239,10 +243,21 @@ public class API implements IRSAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nonnull
|
||||||
public IOneSixMigrationHelper getOneSixMigrationHelper() {
|
public IOneSixMigrationHelper getOneSixMigrationHelper() {
|
||||||
return oneSixMigrationHelper;
|
return oneSixMigrationHelper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addPatternRenderHandler(ICraftingPatternRenderHandler renderHandler) {
|
||||||
|
patternRenderHandlers.add(renderHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ICraftingPatternRenderHandler> getPatternRenderHandlers() {
|
||||||
|
return patternRenderHandlers;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void openWirelessGrid(EntityPlayer player, EnumHand hand, int networkDimension, int id) {
|
public void openWirelessGrid(EntityPlayer player, EnumHand hand, int networkDimension, int id) {
|
||||||
player.openGui(RS.INSTANCE, RSGui.WIRELESS_GRID, player.getEntityWorld(), hand.ordinal(), networkDimension, id);
|
player.openGui(RS.INSTANCE, RSGui.WIRELESS_GRID, player.getEntityWorld(), hand.ordinal(), networkDimension, id);
|
||||||
|
@@ -28,6 +28,10 @@ import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.StorageDiskFactoryIt
|
|||||||
import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper;
|
import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper;
|
||||||
import com.raoulvdberge.refinedstorage.block.BlockBase;
|
import com.raoulvdberge.refinedstorage.block.BlockBase;
|
||||||
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
|
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
|
||||||
|
import com.raoulvdberge.refinedstorage.container.ContainerCrafter;
|
||||||
|
import com.raoulvdberge.refinedstorage.container.ContainerCrafterManager;
|
||||||
|
import com.raoulvdberge.refinedstorage.container.slot.SlotCrafterManager;
|
||||||
|
import com.raoulvdberge.refinedstorage.gui.GuiBase;
|
||||||
import com.raoulvdberge.refinedstorage.gui.GuiHandler;
|
import com.raoulvdberge.refinedstorage.gui.GuiHandler;
|
||||||
import com.raoulvdberge.refinedstorage.integration.craftingtweaks.IntegrationCraftingTweaks;
|
import com.raoulvdberge.refinedstorage.integration.craftingtweaks.IntegrationCraftingTweaks;
|
||||||
import com.raoulvdberge.refinedstorage.integration.forgeenergy.ReaderWriterHandlerForgeEnergy;
|
import com.raoulvdberge.refinedstorage.integration.forgeenergy.ReaderWriterHandlerForgeEnergy;
|
||||||
@@ -47,9 +51,12 @@ import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid;
|
|||||||
import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid;
|
import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid;
|
||||||
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.enchantment.Enchantment;
|
import net.minecraft.enchantment.Enchantment;
|
||||||
import net.minecraft.enchantment.EnchantmentData;
|
import net.minecraft.enchantment.EnchantmentData;
|
||||||
import net.minecraft.init.Items;
|
import net.minecraft.init.Items;
|
||||||
|
import net.minecraft.inventory.Container;
|
||||||
|
import net.minecraft.inventory.Slot;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemEnchantedBook;
|
import net.minecraft.item.ItemEnchantedBook;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
@@ -104,6 +111,34 @@ public class ProxyCommon {
|
|||||||
API.instance().getCraftingPreviewElementRegistry().add(CraftingPreviewElementFluidStack.ID, CraftingPreviewElementFluidStack::fromByteBuf);
|
API.instance().getCraftingPreviewElementRegistry().add(CraftingPreviewElementFluidStack.ID, CraftingPreviewElementFluidStack::fromByteBuf);
|
||||||
API.instance().getCraftingPreviewElementRegistry().add(CraftingPreviewElementError.ID, CraftingPreviewElementError::fromByteBuf);
|
API.instance().getCraftingPreviewElementRegistry().add(CraftingPreviewElementError.ID, CraftingPreviewElementError::fromByteBuf);
|
||||||
|
|
||||||
|
API.instance().addPatternRenderHandler(pattern -> GuiBase.isShiftKeyDown());
|
||||||
|
API.instance().addPatternRenderHandler(pattern -> {
|
||||||
|
Container container = Minecraft.getMinecraft().player.openContainer;
|
||||||
|
|
||||||
|
if (container instanceof ContainerCrafterManager) {
|
||||||
|
for (Slot slot : container.inventorySlots) {
|
||||||
|
if (slot instanceof SlotCrafterManager && slot.getStack() == pattern) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
API.instance().addPatternRenderHandler(pattern -> {
|
||||||
|
Container container = Minecraft.getMinecraft().player.openContainer;
|
||||||
|
|
||||||
|
if (container instanceof ContainerCrafter) {
|
||||||
|
for (int i = 0; i < 9; ++i) {
|
||||||
|
if (container.getSlot(i).getStack() == pattern) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerItems.ID, ReaderWriterHandlerItems::new);
|
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerItems.ID, ReaderWriterHandlerItems::new);
|
||||||
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerFluids.ID, ReaderWriterHandlerFluids::new);
|
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerFluids.ID, ReaderWriterHandlerFluids::new);
|
||||||
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerRedstone.ID, tag -> new ReaderWriterHandlerRedstone());
|
API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerRedstone.ID, tag -> new ReaderWriterHandlerRedstone());
|
||||||
|
@@ -1,10 +1,8 @@
|
|||||||
package com.raoulvdberge.refinedstorage.render;
|
package com.raoulvdberge.refinedstorage.render;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternRenderHandler;
|
||||||
|
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingPattern;
|
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingPattern;
|
||||||
import com.raoulvdberge.refinedstorage.container.ContainerCrafter;
|
|
||||||
import com.raoulvdberge.refinedstorage.container.ContainerCrafterManager;
|
|
||||||
import com.raoulvdberge.refinedstorage.container.slot.SlotCrafterManager;
|
|
||||||
import com.raoulvdberge.refinedstorage.gui.GuiBase;
|
|
||||||
import com.raoulvdberge.refinedstorage.item.ItemPattern;
|
import com.raoulvdberge.refinedstorage.item.ItemPattern;
|
||||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
@@ -15,8 +13,6 @@ import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
|
|||||||
import net.minecraft.client.renderer.block.model.ItemOverrideList;
|
import net.minecraft.client.renderer.block.model.ItemOverrideList;
|
||||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.inventory.Container;
|
|
||||||
import net.minecraft.inventory.Slot;
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
@@ -89,21 +85,9 @@ public class BakedModelPattern implements IBakedModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean canDisplayPatternOutput(ItemStack patternStack, CraftingPattern pattern) {
|
public static boolean canDisplayPatternOutput(ItemStack patternStack, CraftingPattern pattern) {
|
||||||
return (GuiBase.isShiftKeyDown() || isPatternInDisplaySlot(patternStack)) && pattern.isValid() && pattern.getOutputs().size() == 1;
|
if (pattern.isValid() && pattern.getOutputs().size() == 1) {
|
||||||
}
|
for (ICraftingPatternRenderHandler renderHandler : API.instance().getPatternRenderHandlers()) {
|
||||||
|
if (renderHandler.canRenderOutput(patternStack)) {
|
||||||
public static boolean isPatternInDisplaySlot(ItemStack stack) {
|
|
||||||
Container container = Minecraft.getMinecraft().player.openContainer;
|
|
||||||
|
|
||||||
if (container instanceof ContainerCrafterManager) {
|
|
||||||
for (Slot slot : container.inventorySlots) {
|
|
||||||
if (slot instanceof SlotCrafterManager && slot.getStack() == stack) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (container instanceof ContainerCrafter) {
|
|
||||||
for (int i = 0; i < 9; ++i) {
|
|
||||||
if (container.getSlot(i).getStack() == stack) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user