Re-add the Crafting Monitor

This commit is contained in:
raoulvdberge
2019-10-28 23:29:37 +01:00
parent ee0ab69f3d
commit ac379e8e60
49 changed files with 530 additions and 308 deletions

View File

@@ -110,6 +110,7 @@ public class ClientSetup {
)); ));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "crafter_manager"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/crafter_manager/cutouts/front_connected"))); bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "crafter_manager"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/crafter_manager/cutouts/front_connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "crafting_monitor"), (base, registry) -> new FullbrightBakedModel(base, new ResourceLocation(RS.ID, "block/crafting_monitor/cutouts/front_connected")));
bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern"), (base, registry) -> new PatternBakedModel(base)); bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "pattern"), (base, registry) -> new PatternBakedModel(base));
@@ -186,6 +187,7 @@ public class ClientSetup {
ScreenManager.registerFactory(RSContainers.DISK_MANIPULATOR, DiskManipulatorScreen::new); ScreenManager.registerFactory(RSContainers.DISK_MANIPULATOR, DiskManipulatorScreen::new);
ScreenManager.registerFactory(RSContainers.CRAFTER, CrafterScreen::new); ScreenManager.registerFactory(RSContainers.CRAFTER, CrafterScreen::new);
ScreenManager.registerFactory(RSContainers.CRAFTER_MANAGER, new CrafterManagerScreenFactory()); ScreenManager.registerFactory(RSContainers.CRAFTER_MANAGER, new CrafterManagerScreenFactory());
ScreenManager.registerFactory(RSContainers.CRAFTING_MONITOR, CraftingMonitorScreen::new);
ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_GRID); ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_GRID);
ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_FLUID_GRID); ClientRegistry.registerKeyBinding(RSKeyBindings.OPEN_WIRELESS_FLUID_GRID);

View File

@@ -5,6 +5,9 @@ import com.raoulvdberge.refinedstorage.api.network.grid.GridType;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
import com.raoulvdberge.refinedstorage.api.storage.StorageType; import com.raoulvdberge.refinedstorage.api.storage.StorageType;
import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.ErrorCraftingMonitorElement;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.FluidCraftingMonitorElement;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.ItemCraftingMonitorElement;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.ErrorCraftingPreviewElement; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.ErrorCraftingPreviewElement;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.FluidCraftingPreviewElement; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.FluidCraftingPreviewElement;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.ItemCraftingPreviewElement; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.ItemCraftingPreviewElement;
@@ -29,6 +32,7 @@ import com.raoulvdberge.refinedstorage.config.ClientConfig;
import com.raoulvdberge.refinedstorage.config.ServerConfig; import com.raoulvdberge.refinedstorage.config.ServerConfig;
import com.raoulvdberge.refinedstorage.container.*; import com.raoulvdberge.refinedstorage.container.*;
import com.raoulvdberge.refinedstorage.container.factory.CrafterManagerContainerFactory; import com.raoulvdberge.refinedstorage.container.factory.CrafterManagerContainerFactory;
import com.raoulvdberge.refinedstorage.container.factory.CraftingMonitorContainerFactory;
import com.raoulvdberge.refinedstorage.container.factory.GridContainerFactory; import com.raoulvdberge.refinedstorage.container.factory.GridContainerFactory;
import com.raoulvdberge.refinedstorage.container.factory.PositionalTileContainerFactory; import com.raoulvdberge.refinedstorage.container.factory.PositionalTileContainerFactory;
import com.raoulvdberge.refinedstorage.item.*; import com.raoulvdberge.refinedstorage.item.*;
@@ -40,6 +44,7 @@ import com.raoulvdberge.refinedstorage.loottable.StorageBlockLootFunctionSeriali
import com.raoulvdberge.refinedstorage.network.NetworkHandler; import com.raoulvdberge.refinedstorage.network.NetworkHandler;
import com.raoulvdberge.refinedstorage.recipe.UpgradeWithEnchantedBookRecipeSerializer; import com.raoulvdberge.refinedstorage.recipe.UpgradeWithEnchantedBookRecipeSerializer;
import com.raoulvdberge.refinedstorage.tile.*; import com.raoulvdberge.refinedstorage.tile.*;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.CraftingMonitorTile;
import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
import com.raoulvdberge.refinedstorage.tile.grid.GridTile; import com.raoulvdberge.refinedstorage.tile.grid.GridTile;
import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGridTile; import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGridTile;
@@ -139,6 +144,7 @@ public final class RS {
API.instance().getNetworkNodeRegistry().add(DiskManipulatorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new DiskManipulatorNetworkNode(world, pos))); API.instance().getNetworkNodeRegistry().add(DiskManipulatorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new DiskManipulatorNetworkNode(world, pos)));
API.instance().getNetworkNodeRegistry().add(CrafterNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new CrafterNetworkNode(world, pos))); API.instance().getNetworkNodeRegistry().add(CrafterNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new CrafterNetworkNode(world, pos)));
API.instance().getNetworkNodeRegistry().add(CrafterManagerNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new CrafterManagerNetworkNode(world, pos))); API.instance().getNetworkNodeRegistry().add(CrafterManagerNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new CrafterManagerNetworkNode(world, pos)));
API.instance().getNetworkNodeRegistry().add(CraftingMonitorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new CraftingMonitorNetworkNode(world, pos)));
API.instance().getGridManager().add(GridBlockGridFactory.ID, new GridBlockGridFactory()); API.instance().getGridManager().add(GridBlockGridFactory.ID, new GridBlockGridFactory());
API.instance().getGridManager().add(WirelessGridGridFactory.ID, new WirelessGridGridFactory()); API.instance().getGridManager().add(WirelessGridGridFactory.ID, new WirelessGridGridFactory());
@@ -153,6 +159,10 @@ public final class RS {
API.instance().getCraftingPreviewElementRegistry().add(FluidCraftingPreviewElement.ID, FluidCraftingPreviewElement::read); API.instance().getCraftingPreviewElementRegistry().add(FluidCraftingPreviewElement.ID, FluidCraftingPreviewElement::read);
API.instance().getCraftingPreviewElementRegistry().add(ErrorCraftingPreviewElement.ID, ErrorCraftingPreviewElement::read); API.instance().getCraftingPreviewElementRegistry().add(ErrorCraftingPreviewElement.ID, ErrorCraftingPreviewElement::read);
API.instance().getCraftingMonitorElementRegistry().add(ItemCraftingMonitorElement.ID, ItemCraftingMonitorElement::read);
API.instance().getCraftingMonitorElementRegistry().add(FluidCraftingMonitorElement.ID, FluidCraftingMonitorElement::read);
API.instance().getCraftingMonitorElementRegistry().add(ErrorCraftingMonitorElement.ID, ErrorCraftingMonitorElement::read);
API.instance().getCraftingTaskRegistry().add(CraftingTaskFactory.ID, new CraftingTaskFactory()); API.instance().getCraftingTaskRegistry().add(CraftingTaskFactory.ID, new CraftingTaskFactory());
LootFunctionManager.registerFunction(new StorageBlockLootFunctionSerializer()); LootFunctionManager.registerFunction(new StorageBlockLootFunctionSerializer());
@@ -211,6 +221,7 @@ public final class RS {
e.getRegistry().register(new PortableGridBlock(PortableGridBlockItem.Type.CREATIVE)); e.getRegistry().register(new PortableGridBlock(PortableGridBlockItem.Type.CREATIVE));
e.getRegistry().register(new CrafterBlock()); e.getRegistry().register(new CrafterBlock());
e.getRegistry().register(new CrafterManagerBlock()); e.getRegistry().register(new CrafterManagerBlock());
e.getRegistry().register(new CraftingMonitorBlock());
} }
@SubscribeEvent @SubscribeEvent
@@ -253,6 +264,7 @@ public final class RS {
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(DiskManipulatorTile::new, RSBlocks.DISK_MANIPULATOR).build(null).setRegistryName(RS.ID, "disk_manipulator"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(DiskManipulatorTile::new, RSBlocks.DISK_MANIPULATOR).build(null).setRegistryName(RS.ID, "disk_manipulator")));
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(CrafterTile::new, RSBlocks.CRAFTER).build(null).setRegistryName(RS.ID, "crafter"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(CrafterTile::new, RSBlocks.CRAFTER).build(null).setRegistryName(RS.ID, "crafter")));
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(CrafterManagerTile::new, RSBlocks.CRAFTER_MANAGER).build(null).setRegistryName(RS.ID, "crafter_manager"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(CrafterManagerTile::new, RSBlocks.CRAFTER_MANAGER).build(null).setRegistryName(RS.ID, "crafter_manager")));
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(CraftingMonitorTile::new, RSBlocks.CRAFTING_MONITOR).build(null).setRegistryName(RS.ID, "crafting_monitor")));
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new PortableGridTile(PortableGridBlockItem.Type.CREATIVE), RSBlocks.CREATIVE_PORTABLE_GRID).build(null).setRegistryName(RS.ID, "creative_portable_grid"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new PortableGridTile(PortableGridBlockItem.Type.CREATIVE), RSBlocks.CREATIVE_PORTABLE_GRID).build(null).setRegistryName(RS.ID, "creative_portable_grid")));
e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new PortableGridTile(PortableGridBlockItem.Type.NORMAL), RSBlocks.PORTABLE_GRID).build(null).setRegistryName(RS.ID, "portable_grid"))); e.getRegistry().register(registerTileDataParameters(TileEntityType.Builder.create(() -> new PortableGridTile(PortableGridBlockItem.Type.NORMAL), RSBlocks.PORTABLE_GRID).build(null).setRegistryName(RS.ID, "portable_grid")));
@@ -290,6 +302,7 @@ public final class RS {
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<DiskManipulatorContainer, DiskManipulatorTile>((windowId, inv, tile) -> new DiskManipulatorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "disk_manipulator")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<DiskManipulatorContainer, DiskManipulatorTile>((windowId, inv, tile) -> new DiskManipulatorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "disk_manipulator"));
e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<CrafterContainer, CrafterTile>((windowId, inv, tile) -> new CrafterContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "crafter")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory<CrafterContainer, CrafterTile>((windowId, inv, tile) -> new CrafterContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "crafter"));
e.getRegistry().register(IForgeContainerType.create(new CrafterManagerContainerFactory()).setRegistryName(RS.ID, "crafter_manager")); e.getRegistry().register(IForgeContainerType.create(new CrafterManagerContainerFactory()).setRegistryName(RS.ID, "crafter_manager"));
e.getRegistry().register(IForgeContainerType.create(new CraftingMonitorContainerFactory()).setRegistryName(RS.ID, "crafting_monitor"));
} }
@SubscribeEvent @SubscribeEvent
@@ -376,6 +389,7 @@ public final class RS {
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.DISK_MANIPULATOR)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.DISK_MANIPULATOR));
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CRAFTER)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CRAFTER));
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CRAFTER_MANAGER)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CRAFTER_MANAGER));
e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CRAFTING_MONITOR));
e.getRegistry().register(new WirelessGridItem(WirelessGridItem.Type.NORMAL)); e.getRegistry().register(new WirelessGridItem(WirelessGridItem.Type.NORMAL));
e.getRegistry().register(new WirelessGridItem(WirelessGridItem.Type.CREATIVE)); e.getRegistry().register(new WirelessGridItem(WirelessGridItem.Type.CREATIVE));

View File

@@ -82,6 +82,6 @@ public final class RSBlocks {
public static final CrafterBlock CRAFTER = null; public static final CrafterBlock CRAFTER = null;
@ObjectHolder(RS.ID + ":crafter_manager") @ObjectHolder(RS.ID + ":crafter_manager")
public static final CrafterManagerBlock CRAFTER_MANAGER = null; public static final CrafterManagerBlock CRAFTER_MANAGER = null;
@ObjectHolder(RS.ID + ":crafting_monitor")
public static final BlockCraftingMonitor CRAFTING_MONITOR = null; public static final CraftingMonitorBlock CRAFTING_MONITOR = null;
} }

View File

@@ -49,7 +49,6 @@ public final class RSContainers {
public static final ContainerType<CrafterContainer> CRAFTER = null; public static final ContainerType<CrafterContainer> CRAFTER = null;
@ObjectHolder(RS.ID + ":crafter_manager") @ObjectHolder(RS.ID + ":crafter_manager")
public static final ContainerType<CrafterManagerContainer> CRAFTER_MANAGER = null; public static final ContainerType<CrafterManagerContainer> CRAFTER_MANAGER = null;
@ObjectHolder(RS.ID + ":crafting_monitor")
//@ObjectHolder(RS.ID + ":crafting_monitor")
public static final ContainerType<CraftingMonitorContainer> CRAFTING_MONITOR = null; public static final ContainerType<CraftingMonitorContainer> CRAFTING_MONITOR = null;
} }

View File

@@ -1,10 +1,6 @@
package com.raoulvdberge.refinedstorage; package com.raoulvdberge.refinedstorage;
public class RSOldConfig { public class RSOldConfig {
//region Energy
public int craftingMonitorUsage;
//endregion
//region Wireless Crafting Monitor //region Wireless Crafting Monitor
public boolean wirelessCraftingMonitorUsesEnergy; public boolean wirelessCraftingMonitorUsesEnergy;
public int wirelessCraftingMonitorCapacity; public int wirelessCraftingMonitorCapacity;
@@ -18,16 +14,11 @@ public class RSOldConfig {
//endregion //endregion
//region Categories //region Categories
private static final String ENERGY = "energy";
private static final String WIRELESS_CRAFTING_MONITOR = "wirelessCraftingMonitor"; private static final String WIRELESS_CRAFTING_MONITOR = "wirelessCraftingMonitor";
private static final String AUTOCRAFTING = "autocrafting"; private static final String AUTOCRAFTING = "autocrafting";
//endregion //endregion
/*private void loadConfig() { /*private void loadConfig() {
//region Energy
craftingMonitorUsage = config.getInt("craftingMonitor", ENERGY, 2, 0, Integer.MAX_VALUE, "The energy used by Crafting Monitors");
//endregion
//region Wireless Crafting Monitor //region Wireless Crafting Monitor
wirelessCraftingMonitorUsesEnergy = config.getBoolean("usesEnergy", WIRELESS_CRAFTING_MONITOR, true, "Whether the Wireless Crafting Monitor uses energy"); wirelessCraftingMonitorUsesEnergy = config.getBoolean("usesEnergy", WIRELESS_CRAFTING_MONITOR, true, "Whether the Wireless Crafting Monitor uses energy");
wirelessCraftingMonitorCapacity = config.getInt("capacity", WIRELESS_CRAFTING_MONITOR, 3200, 0, Integer.MAX_VALUE, "The energy capacity of the Wireless Crafting Monitor"); wirelessCraftingMonitorCapacity = config.getInt("capacity", WIRELESS_CRAFTING_MONITOR, 3200, 0, Integer.MAX_VALUE, "The energy capacity of the Wireless Crafting Monitor");

View File

@@ -1,7 +1,7 @@
package com.raoulvdberge.refinedstorage; package com.raoulvdberge.refinedstorage;
import com.raoulvdberge.refinedstorage.tile.*; import com.raoulvdberge.refinedstorage.tile.*;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.CraftingMonitorTile;
import com.raoulvdberge.refinedstorage.tile.grid.GridTile; import com.raoulvdberge.refinedstorage.tile.grid.GridTile;
import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGridTile; import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGridTile;
import net.minecraft.tileentity.TileEntityType; import net.minecraft.tileentity.TileEntityType;
@@ -82,7 +82,6 @@ public class RSTiles {
public static final TileEntityType<CrafterTile> CRAFTER = null; public static final TileEntityType<CrafterTile> CRAFTER = null;
@ObjectHolder(RS.ID + ":crafter_manager") @ObjectHolder(RS.ID + ":crafter_manager")
public static final TileEntityType<CrafterManagerTile> CRAFTER_MANAGER = null; public static final TileEntityType<CrafterManagerTile> CRAFTER_MANAGER = null;
@ObjectHolder(RS.ID + ":crafting_monitor")
//@ObjectHolder(RS.ID + ":crafting_monitor") public static final TileEntityType<CraftingMonitorTile> CRAFTING_MONITOR = null;
public static final TileEntityType<TileCraftingMonitor> CRAFTING_MONITOR = null;
} }

View File

@@ -2,6 +2,7 @@ package com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor;
import com.raoulvdberge.refinedstorage.api.render.IElementDrawers; import com.raoulvdberge.refinedstorage.api.render.IElementDrawers;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@@ -24,7 +25,7 @@ public interface ICraftingMonitorElement {
* *
* @return the id * @return the id
*/ */
String getId(); ResourceLocation getId();
/** /**
* @return the tooltip of this element, or null for no tooltip * @return the tooltip of this element, or null for no tooltip

View File

@@ -1,6 +1,7 @@
package com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor; package com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor;
import io.netty.buffer.ByteBuf; import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ResourceLocation;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.function.Function; import java.util.function.Function;
@@ -15,7 +16,7 @@ public interface ICraftingMonitorElementRegistry {
* @param id the id, as specified in {@link ICraftingMonitorElement#getId()} * @param id the id, as specified in {@link ICraftingMonitorElement#getId()}
* @param factory the factory * @param factory the factory
*/ */
void add(String id, Function<ByteBuf, ICraftingMonitorElement> factory); void add(ResourceLocation id, Function<PacketBuffer, ICraftingMonitorElement> factory);
/** /**
* Returns a factory from the registry. * Returns a factory from the registry.
@@ -24,5 +25,5 @@ public interface ICraftingMonitorElementRegistry {
* @return the factory, or null if no factory was found * @return the factory, or null if no factory was found
*/ */
@Nullable @Nullable
Function<ByteBuf, ICraftingMonitorElement> get(String id); Function<PacketBuffer, ICraftingMonitorElement> get(ResourceLocation id);
} }

View File

@@ -26,8 +26,8 @@ public class CraftingRequestInfo implements ICraftingRequestInfo {
} else { } else {
fluid = FluidStack.loadFluidStackFromNBT(tag.getCompound(NBT_STACK)); fluid = FluidStack.loadFluidStackFromNBT(tag.getCompound(NBT_STACK));
if (fluid == null) { if (fluid.isEmpty()) {
throw new CraftingTaskReadException("Extractor fluid stack is emty"); throw new CraftingTaskReadException("Extractor fluid stack is empty");
} }
} }
} }

View File

@@ -2,12 +2,13 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor;
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementList; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementList;
import net.minecraft.util.ResourceLocation;
import java.util.*; import java.util.*;
public class CraftingMonitorElementList implements ICraftingMonitorElementList { public class CraftingMonitorElementList implements ICraftingMonitorElementList {
private List<ICraftingMonitorElement> elements = new LinkedList<>(); private List<ICraftingMonitorElement> elements = new LinkedList<>();
private Map<String, Map<Integer, ICraftingMonitorElement>> currentLists = new LinkedHashMap<>(); private Map<ResourceLocation, Map<Integer, ICraftingMonitorElement>> currentLists = new LinkedHashMap<>();
@Override @Override
public void directAdd(ICraftingMonitorElement element) { public void directAdd(ICraftingMonitorElement element) {

View File

@@ -2,7 +2,8 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor;
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementRegistry; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementRegistry;
import io.netty.buffer.ByteBuf; import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ResourceLocation;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.HashMap; import java.util.HashMap;
@@ -10,16 +11,16 @@ import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
public class CraftingMonitorElementRegistry implements ICraftingMonitorElementRegistry { public class CraftingMonitorElementRegistry implements ICraftingMonitorElementRegistry {
private Map<String, Function<ByteBuf, ICraftingMonitorElement>> registry = new HashMap<>(); private Map<ResourceLocation, Function<PacketBuffer, ICraftingMonitorElement>> registry = new HashMap<>();
@Override @Override
public void add(String id, Function<ByteBuf, ICraftingMonitorElement> factory) { public void add(ResourceLocation id, Function<PacketBuffer, ICraftingMonitorElement> factory) {
registry.put(id, factory); registry.put(id, factory);
} }
@Nullable @Nullable
@Override @Override
public Function<ByteBuf, ICraftingMonitorElement> get(String id) { public Function<PacketBuffer, ICraftingMonitorElement> get(ResourceLocation id) {
return registry.get(id); return registry.get(id);
} }
} }

View File

@@ -2,20 +2,22 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor;
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
import com.raoulvdberge.refinedstorage.api.render.IElementDrawers; import com.raoulvdberge.refinedstorage.api.render.IElementDrawers;
import io.netty.buffer.ByteBufUtil; import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.util.PacketBufferUtils;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TextFormatting;
import javax.annotation.Nullable; import javax.annotation.Nullable;
public class CraftingMonitorElementError implements ICraftingMonitorElement { public class ErrorCraftingMonitorElement implements ICraftingMonitorElement {
public static final String ID = "error"; public static final ResourceLocation ID = new ResourceLocation("error");
private ICraftingMonitorElement base; private ICraftingMonitorElement base;
private String message; private String message;
public CraftingMonitorElementError(ICraftingMonitorElement base, String message) { public ErrorCraftingMonitorElement(ICraftingMonitorElement base, String message) {
this.base = base; this.base = base;
this.message = message; this.message = message;
} }
@@ -35,21 +37,31 @@ public class CraftingMonitorElementError implements ICraftingMonitorElement {
} }
@Override @Override
public String getId() { public ResourceLocation getId() {
return ID; return ID;
} }
@Override @Override
public void write(PacketBuffer buf) { public void write(PacketBuffer buf) {
ByteBufUtil.writeUtf8(buf, base.getId()); buf.writeResourceLocation(base.getId());
ByteBufUtil.writeUtf8(buf, message); buf.writeString(message);
base.write(buf); base.write(buf);
} }
public static ErrorCraftingMonitorElement read(PacketBuffer buf) {
ResourceLocation id = buf.readResourceLocation();
String message = PacketBufferUtils.readString(buf);
return new ErrorCraftingMonitorElement(
API.instance().getCraftingMonitorElementRegistry().get(id).apply(buf),
message
);
}
@Override @Override
public boolean merge(ICraftingMonitorElement element) { public boolean merge(ICraftingMonitorElement element) {
return elementHashCode() == element.elementHashCode() && base.merge(((CraftingMonitorElementError) element).base); return elementHashCode() == element.elementHashCode() && base.merge(((ErrorCraftingMonitorElement) element).base);
} }
@Override @Override

View File

@@ -1,6 +1,7 @@
package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor; package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
import com.raoulvdberge.refinedstorage.api.render.IElementDrawers; import com.raoulvdberge.refinedstorage.api.render.IElementDrawers;
import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.API;
@@ -8,19 +9,20 @@ import com.raoulvdberge.refinedstorage.util.RenderUtils;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import javax.annotation.Nullable; import javax.annotation.Nullable;
public class CraftingMonitorElementFluidRender implements ICraftingMonitorElement { public class FluidCraftingMonitorElement implements ICraftingMonitorElement {
private static final int COLOR_PROCESSING = 0xFFD9EDF7; private static final int COLOR_PROCESSING = 0xFFD9EDF7;
private static final int COLOR_MISSING = 0xFFF2DEDE; private static final int COLOR_MISSING = 0xFFF2DEDE;
private static final int COLOR_SCHEDULED = 0xFFE8E5CA; private static final int COLOR_SCHEDULED = 0xFFE8E5CA;
private static final int COLOR_CRAFTING = 0xFFADDBC6; private static final int COLOR_CRAFTING = 0xFFADDBC6;
public static final String ID = "fluid_render"; public static final ResourceLocation ID = new ResourceLocation(RS.ID, "fluid");
private FluidStack stack; private FluidStack stack;
private int stored; private int stored;
@@ -29,7 +31,7 @@ public class CraftingMonitorElementFluidRender implements ICraftingMonitorElemen
private int scheduled; private int scheduled;
private int crafting; private int crafting;
public CraftingMonitorElementFluidRender(FluidStack stack, int stored, int missing, int processing, int scheduled, int crafting) { public FluidCraftingMonitorElement(FluidStack stack, int stored, int missing, int processing, int scheduled, int crafting) {
this.stack = stack; this.stack = stack;
this.stored = stored; this.stored = stored;
this.missing = missing; this.missing = missing;
@@ -92,7 +94,7 @@ public class CraftingMonitorElementFluidRender implements ICraftingMonitorElemen
} }
@Override @Override
public String getId() { public ResourceLocation getId() {
return ID; return ID;
} }
@@ -112,14 +114,25 @@ public class CraftingMonitorElementFluidRender implements ICraftingMonitorElemen
buf.writeInt(crafting); buf.writeInt(crafting);
} }
public static FluidCraftingMonitorElement read(PacketBuffer buf) {
return new FluidCraftingMonitorElement(
FluidStack.readFromPacket(buf),
buf.readInt(),
buf.readInt(),
buf.readInt(),
buf.readInt(),
buf.readInt()
);
}
@Override @Override
public boolean merge(ICraftingMonitorElement element) { public boolean merge(ICraftingMonitorElement element) {
if (element.getId().equals(getId()) && elementHashCode() == element.elementHashCode()) { if (element.getId().equals(getId()) && elementHashCode() == element.elementHashCode()) {
this.stored += ((CraftingMonitorElementFluidRender) element).stored; this.stored += ((FluidCraftingMonitorElement) element).stored;
this.missing += ((CraftingMonitorElementFluidRender) element).missing; this.missing += ((FluidCraftingMonitorElement) element).missing;
this.processing += ((CraftingMonitorElementFluidRender) element).processing; this.processing += ((FluidCraftingMonitorElement) element).processing;
this.scheduled += ((CraftingMonitorElementFluidRender) element).scheduled; this.scheduled += ((FluidCraftingMonitorElement) element).scheduled;
this.crafting += ((CraftingMonitorElementFluidRender) element).crafting; this.crafting += ((FluidCraftingMonitorElement) element).crafting;
return true; return true;
} }

View File

@@ -1,26 +1,29 @@
package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor; package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
import com.raoulvdberge.refinedstorage.api.render.IElementDrawers; import com.raoulvdberge.refinedstorage.api.render.IElementDrawers;
import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.util.RenderUtils; import com.raoulvdberge.refinedstorage.util.RenderUtils;
import com.raoulvdberge.refinedstorage.util.StackUtils;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import javax.annotation.Nullable; import javax.annotation.Nullable;
public class CraftingMonitorElementItemRender implements ICraftingMonitorElement { public class ItemCraftingMonitorElement implements ICraftingMonitorElement {
private static final int COLOR_PROCESSING = 0xFFD9EDF7; private static final int COLOR_PROCESSING = 0xFFD9EDF7;
private static final int COLOR_MISSING = 0xFFF2DEDE; private static final int COLOR_MISSING = 0xFFF2DEDE;
private static final int COLOR_SCHEDULED = 0xFFE8E5CA; private static final int COLOR_SCHEDULED = 0xFFE8E5CA;
private static final int COLOR_CRAFTING = 0xFFADDBC6; private static final int COLOR_CRAFTING = 0xFFADDBC6;
public static final String ID = "item_render"; public static final ResourceLocation ID = new ResourceLocation(RS.ID, "item");
private ItemStack stack; private ItemStack stack;
private int stored; private int stored;
@@ -29,7 +32,7 @@ public class CraftingMonitorElementItemRender implements ICraftingMonitorElement
private int scheduled; private int scheduled;
private int crafting; private int crafting;
public CraftingMonitorElementItemRender(ItemStack stack, int stored, int missing, int processing, int scheduled, int crafting) { public ItemCraftingMonitorElement(ItemStack stack, int stored, int missing, int processing, int scheduled, int crafting) {
this.stack = stack; this.stack = stack;
this.stored = stored; this.stored = stored;
this.missing = missing; this.missing = missing;
@@ -92,7 +95,7 @@ public class CraftingMonitorElementItemRender implements ICraftingMonitorElement
} }
@Override @Override
public String getId() { public ResourceLocation getId() {
return ID; return ID;
} }
@@ -104,7 +107,7 @@ public class CraftingMonitorElementItemRender implements ICraftingMonitorElement
@Override @Override
public void write(PacketBuffer buf) { public void write(PacketBuffer buf) {
buf.writeItemStack(stack); StackUtils.writeItemStack(buf, stack);
buf.writeInt(stored); buf.writeInt(stored);
buf.writeInt(missing); buf.writeInt(missing);
buf.writeInt(processing); buf.writeInt(processing);
@@ -112,14 +115,25 @@ public class CraftingMonitorElementItemRender implements ICraftingMonitorElement
buf.writeInt(crafting); buf.writeInt(crafting);
} }
public static ItemCraftingMonitorElement read(PacketBuffer buf) {
return new ItemCraftingMonitorElement(
StackUtils.readItemStack(buf),
buf.readInt(),
buf.readInt(),
buf.readInt(),
buf.readInt(),
buf.readInt()
);
}
@Override @Override
public boolean merge(ICraftingMonitorElement element) { public boolean merge(ICraftingMonitorElement element) {
if (element.getId().equals(getId()) && elementHashCode() == element.elementHashCode()) { if (element.getId().equals(getId()) && elementHashCode() == element.elementHashCode()) {
this.stored += ((CraftingMonitorElementItemRender) element).stored; this.stored += ((ItemCraftingMonitorElement) element).stored;
this.missing += ((CraftingMonitorElementItemRender) element).missing; this.missing += ((ItemCraftingMonitorElement) element).missing;
this.processing += ((CraftingMonitorElementItemRender) element).processing; this.processing += ((ItemCraftingMonitorElement) element).processing;
this.scheduled += ((CraftingMonitorElementItemRender) element).scheduled; this.scheduled += ((ItemCraftingMonitorElement) element).scheduled;
this.crafting += ((CraftingMonitorElementItemRender) element).crafting; this.crafting += ((ItemCraftingMonitorElement) element).crafting;
return true; return true;
} }

View File

@@ -14,9 +14,9 @@ import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.api.util.IStackList; import com.raoulvdberge.refinedstorage.api.util.IStackList;
import com.raoulvdberge.refinedstorage.api.util.StackListEntry; import com.raoulvdberge.refinedstorage.api.util.StackListEntry;
import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementError; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.ErrorCraftingMonitorElement;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementFluidRender; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.FluidCraftingMonitorElement;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementItemRender; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.ItemCraftingMonitorElement;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.FluidCraftingPreviewElement; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.FluidCraftingPreviewElement;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.ItemCraftingPreviewElement; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.ItemCraftingPreviewElement;
import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.FluidStorageDisk; import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.FluidStorageDisk;
@@ -219,7 +219,7 @@ public class CraftingTask implements ICraftingTask {
for (int i = 0; i < list.size(); ++i) { for (int i = 0; i < list.size(); ++i) {
FluidStack stack = FluidStack.loadFluidStackFromNBT(list.getCompound(i)); FluidStack stack = FluidStack.loadFluidStackFromNBT(list.getCompound(i));
if (stack == null) { if (stack.isEmpty()) {
throw new CraftingTaskReadException("Empty stack!"); throw new CraftingTaskReadException("Empty stack!");
} }
@@ -1082,16 +1082,16 @@ public class CraftingTask implements ICraftingTask {
ICraftingMonitorElementList elements = API.instance().createCraftingMonitorElementList(); ICraftingMonitorElementList elements = API.instance().createCraftingMonitorElementList();
for (ItemStack stack : this.internalStorage.getStacks()) { for (ItemStack stack : this.internalStorage.getStacks()) {
elements.add(new CraftingMonitorElementItemRender(stack, stack.getCount(), 0, 0, 0, 0)); elements.add(new ItemCraftingMonitorElement(stack, stack.getCount(), 0, 0, 0, 0));
} }
for (StackListEntry<ItemStack> missing : this.missing.getStacks()) { for (StackListEntry<ItemStack> missing : this.missing.getStacks()) {
elements.add(new CraftingMonitorElementItemRender(missing.getStack(), 0, missing.getStack().getCount(), 0, 0, 0)); elements.add(new ItemCraftingMonitorElement(missing.getStack(), 0, missing.getStack().getCount(), 0, 0, 0));
} }
for (Crafting crafting : this.crafting) { for (Crafting crafting : this.crafting) {
for (ItemStack receive : crafting.getPattern().getOutputs()) { for (ItemStack receive : crafting.getPattern().getOutputs()) {
elements.add(new CraftingMonitorElementItemRender(receive, 0, 0, 0, 0, receive.getCount())); elements.add(new ItemCraftingMonitorElement(receive, 0, 0, 0, 0, receive.getCount()));
} }
} }
@@ -1102,18 +1102,18 @@ public class CraftingTask implements ICraftingTask {
if (processing.getState() == ProcessingState.EXTRACTED_ALL) { if (processing.getState() == ProcessingState.EXTRACTED_ALL) {
for (StackListEntry<ItemStack> put : processing.getItemsToPut().getStacks()) { for (StackListEntry<ItemStack> put : processing.getItemsToPut().getStacks()) {
elements.add(new CraftingMonitorElementItemRender(put.getStack(), 0, 0, put.getStack().getCount(), 0, 0)); elements.add(new ItemCraftingMonitorElement(put.getStack(), 0, 0, put.getStack().getCount(), 0, 0));
} }
} else if (processing.getState() == ProcessingState.READY || processing.getState() == ProcessingState.MACHINE_DOES_NOT_ACCEPT || processing.getState() == ProcessingState.MACHINE_NONE || processing.getState() == ProcessingState.LOCKED) { } else if (processing.getState() == ProcessingState.READY || processing.getState() == ProcessingState.MACHINE_DOES_NOT_ACCEPT || processing.getState() == ProcessingState.MACHINE_NONE || processing.getState() == ProcessingState.LOCKED) {
for (StackListEntry<ItemStack> receive : processing.getItemsToReceive().getStacks()) { for (StackListEntry<ItemStack> receive : processing.getItemsToReceive().getStacks()) {
ICraftingMonitorElement element = new CraftingMonitorElementItemRender(receive.getStack(), 0, 0, 0, receive.getStack().getCount(), 0); ICraftingMonitorElement element = new ItemCraftingMonitorElement(receive.getStack(), 0, 0, 0, receive.getStack().getCount(), 0);
if (processing.getState() == ProcessingState.MACHINE_DOES_NOT_ACCEPT) { if (processing.getState() == ProcessingState.MACHINE_DOES_NOT_ACCEPT) {
element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.machine_does_not_accept_item"); element = new ErrorCraftingMonitorElement(element, "gui.refinedstorage:crafting_monitor.machine_does_not_accept_item");
} else if (processing.getState() == ProcessingState.MACHINE_NONE) { } else if (processing.getState() == ProcessingState.MACHINE_NONE) {
element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.machine_none"); element = new ErrorCraftingMonitorElement(element, "gui.refinedstorage:crafting_monitor.machine_none");
} else if (processing.getState() == ProcessingState.LOCKED) { } else if (processing.getState() == ProcessingState.LOCKED) {
element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.crafter_is_locked"); element = new ErrorCraftingMonitorElement(element, "gui.refinedstorage:crafting_monitor.crafter_is_locked");
} }
elements.add(element); elements.add(element);
@@ -1124,11 +1124,11 @@ public class CraftingTask implements ICraftingTask {
elements.commit(); elements.commit();
for (FluidStack stack : this.internalFluidStorage.getStacks()) { for (FluidStack stack : this.internalFluidStorage.getStacks()) {
elements.add(new CraftingMonitorElementFluidRender(stack, stack.getAmount(), 0, 0, 0, 0)); elements.add(new FluidCraftingMonitorElement(stack, stack.getAmount(), 0, 0, 0, 0));
} }
for (StackListEntry<FluidStack> missing : this.missingFluids.getStacks()) { for (StackListEntry<FluidStack> missing : this.missingFluids.getStacks()) {
elements.add(new CraftingMonitorElementFluidRender(missing.getStack(), 0, missing.getStack().getAmount(), 0, 0, 0)); elements.add(new FluidCraftingMonitorElement(missing.getStack(), 0, missing.getStack().getAmount(), 0, 0, 0));
} }
for (Processing processing : this.processing) { for (Processing processing : this.processing) {
@@ -1138,18 +1138,18 @@ public class CraftingTask implements ICraftingTask {
if (processing.getState() == ProcessingState.EXTRACTED_ALL) { if (processing.getState() == ProcessingState.EXTRACTED_ALL) {
for (StackListEntry<FluidStack> put : processing.getFluidsToPut().getStacks()) { for (StackListEntry<FluidStack> put : processing.getFluidsToPut().getStacks()) {
elements.add(new CraftingMonitorElementFluidRender(put.getStack(), 0, 0, put.getStack().getAmount(), 0, 0)); elements.add(new FluidCraftingMonitorElement(put.getStack(), 0, 0, put.getStack().getAmount(), 0, 0));
} }
} else if (processing.getState() == ProcessingState.READY || processing.getState() == ProcessingState.MACHINE_DOES_NOT_ACCEPT || processing.getState() == ProcessingState.MACHINE_NONE) { } else if (processing.getState() == ProcessingState.READY || processing.getState() == ProcessingState.MACHINE_DOES_NOT_ACCEPT || processing.getState() == ProcessingState.MACHINE_NONE) {
for (StackListEntry<FluidStack> receive : processing.getFluidsToReceive().getStacks()) { for (StackListEntry<FluidStack> receive : processing.getFluidsToReceive().getStacks()) {
ICraftingMonitorElement element = new CraftingMonitorElementFluidRender(receive.getStack(), 0, 0, 0, receive.getStack().getAmount(), 0); ICraftingMonitorElement element = new FluidCraftingMonitorElement(receive.getStack(), 0, 0, 0, receive.getStack().getAmount(), 0);
if (processing.getState() == ProcessingState.MACHINE_DOES_NOT_ACCEPT) { if (processing.getState() == ProcessingState.MACHINE_DOES_NOT_ACCEPT) {
element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.machine_does_not_accept_fluid"); element = new ErrorCraftingMonitorElement(element, "gui.refinedstorage:crafting_monitor.machine_does_not_accept_fluid");
} else if (processing.getState() == ProcessingState.MACHINE_NONE) { } else if (processing.getState() == ProcessingState.MACHINE_NONE) {
element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.machine_none"); element = new ErrorCraftingMonitorElement(element, "gui.refinedstorage:crafting_monitor.machine_none");
} else if (processing.getState() == ProcessingState.LOCKED) { } else if (processing.getState() == ProcessingState.LOCKED) {
element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.crafter_is_locked"); element = new ErrorCraftingMonitorElement(element, "gui.refinedstorage:crafting_monitor.crafter_is_locked");
} }
elements.add(element); elements.add(element);

View File

@@ -225,6 +225,6 @@ public class ItemGridHandler implements IItemGridHandler {
network.getCraftingManager().cancel(id); network.getCraftingManager().cancel(id);
network.getNetworkItemManager().drainEnergy(player, id == null ? RS.INSTANCE.config.wirelessCraftingMonitorCancelAllUsage : RS.INSTANCE.config.wirelessCraftingMonitorCancelUsage); // TODO network.getNetworkItemManager().drainEnergy(player, id == null ? RS.INSTANCE.config.wirelessCraftingMonitorCancelAllUsage : RS.INSTANCE.config.wirelessCraftingMonitorCancelUsage);
} }
} }

View File

@@ -4,8 +4,8 @@ import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.block.NetworkNodeBlock; import com.raoulvdberge.refinedstorage.block.NetworkNodeBlock;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.CraftingMonitorTile;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor;
import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
@@ -13,6 +13,8 @@ import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World; import net.minecraft.world.World;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -21,7 +23,7 @@ import java.util.Collections;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
public class NetworkNodeCraftingMonitor extends NetworkNode implements ICraftingMonitor { public class CraftingMonitorNetworkNode extends NetworkNode implements ICraftingMonitor {
public static final ResourceLocation ID = new ResourceLocation(RS.ID, "crafting_monitor"); public static final ResourceLocation ID = new ResourceLocation(RS.ID, "crafting_monitor");
private static final String NBT_TAB_SELECTED = "TabSelected"; private static final String NBT_TAB_SELECTED = "TabSelected";
@@ -30,13 +32,13 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting
private Optional<UUID> tabSelected = Optional.empty(); private Optional<UUID> tabSelected = Optional.empty();
private int tabPage; private int tabPage;
public NetworkNodeCraftingMonitor(World world, BlockPos pos) { public CraftingMonitorNetworkNode(World world, BlockPos pos) {
super(world, pos); super(world, pos);
} }
@Override @Override
public int getEnergyUsage() { public int getEnergyUsage() {
return RS.INSTANCE.config.craftingMonitorUsage; return RS.SERVER_CONFIG.getCraftingMonitor().getUsage();
} }
@Override @Override
@@ -45,8 +47,8 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting
} }
@Override @Override
public String getGuiTitle() { public ITextComponent getTitle() {
return "gui.refinedstorage:crafting_monitor"; return new TranslationTextComponent("gui.refinedstorage.crafting_monitor");
} }
@Override @Override
@@ -58,7 +60,7 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting
@Override @Override
public TileDataParameter<Integer, ?> getRedstoneModeParameter() { public TileDataParameter<Integer, ?> getRedstoneModeParameter() {
return TileCraftingMonitor.REDSTONE_MODE; return CraftingMonitorTile.REDSTONE_MODE;
} }
@Override @Override
@@ -118,23 +120,23 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting
@Override @Override
public Optional<UUID> getTabSelected() { public Optional<UUID> getTabSelected() {
return world.isRemote ? TileCraftingMonitor.TAB_SELECTED.getValue() : tabSelected; return world.isRemote ? CraftingMonitorTile.TAB_SELECTED.getValue() : tabSelected;
} }
@Override @Override
public int getTabPage() { public int getTabPage() {
return world.isRemote ? TileCraftingMonitor.TAB_PAGE.getValue() : tabPage; return world.isRemote ? CraftingMonitorTile.TAB_PAGE.getValue() : tabPage;
} }
@Override @Override
public void onTabSelectionChanged(Optional<UUID> tab) { public void onTabSelectionChanged(Optional<UUID> tab) {
TileDataManager.setParameter(TileCraftingMonitor.TAB_SELECTED, tab); TileDataManager.setParameter(CraftingMonitorTile.TAB_SELECTED, tab);
} }
@Override @Override
public void onTabPageChanged(int page) { public void onTabPageChanged(int page) {
if (page >= 0) { if (page >= 0) {
TileDataManager.setParameter(TileCraftingMonitor.TAB_PAGE, page); TileDataManager.setParameter(CraftingMonitorTile.TAB_PAGE, page);
} }
} }
} }

View File

@@ -27,7 +27,7 @@ public class FluidStorageDiskFactory implements IStorageDiskFactory<FluidStack>
for (int i = 0; i < list.size(); ++i) { for (int i = 0; i < list.size(); ++i) {
FluidStack stack = FluidStack.loadFluidStackFromNBT(list.getCompound(i)); FluidStack stack = FluidStack.loadFluidStackFromNBT(list.getCompound(i));
if (stack != null) { if (!stack.isEmpty()) {
disk.getRawStacks().put(stack.getRawFluid(), stack); disk.getRawStacks().put(stack.getRawFluid(), stack);
} }
} }

View File

@@ -42,7 +42,7 @@ public class FluidStorageTracker implements IStorageTracker<FluidStack> {
FluidStack stack = FluidStack.loadFluidStackFromNBT(tag.getCompound(NBT_STACK)); FluidStack stack = FluidStack.loadFluidStackFromNBT(tag.getCompound(NBT_STACK));
if (stack != null) { if (!stack.isEmpty()) {
changes.put(new Key(stack), new StorageTrackerEntry(tag.getLong(NBT_TIME), tag.getString(NBT_NAME))); changes.put(new Key(stack), new StorageTrackerEntry(tag.getLong(NBT_TIME), tag.getString(NBT_NAME)));
} }
} }

View File

@@ -1,37 +0,0 @@
package com.raoulvdberge.refinedstorage.block;
public class BlockCraftingMonitor extends NetworkNodeBlock {
public BlockCraftingMonitor(Properties props) {
super(props);
}
/*
@Override
@OnlyIn(Dist.CLIENT)
public void registerModels(IModelRegistration modelRegistration) {
modelRegistration.setModel(this, 0, new ModelResourceLocation(info.getId(), "inventory"));
modelRegistration.addBakedModelOverride(info.getId(), base -> new BakedModelFullbright(base, RS.ID + ":blocks/crafting_monitor/cutouts/front_connected"));
}
@Override
public BlockRenderLayer getRenderLayer() {
return BlockRenderLayer.CUTOUT;
}
@Override
@Nullable
public BlockDirection getDirection() {
return BlockDirection.HORIZONTAL;
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, BlockState state, PlayerEntity player, EnumHand hand, Direction side, float hitX, float hitY, float hitZ) {
return openNetworkGui(RSGui.CRAFTING_MONITOR, player, world, pos, side, Permission.MODIFY, Permission.AUTOCRAFTING);
}
*/
@Override
public boolean hasConnectedState() {
return true;
}
}

View File

@@ -0,0 +1,66 @@
package com.raoulvdberge.refinedstorage.block;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.container.factory.CraftingMonitorContainerProvider;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.CraftingMonitorTile;
import com.raoulvdberge.refinedstorage.util.BlockUtils;
import com.raoulvdberge.refinedstorage.util.NetworkUtils;
import net.minecraft.block.BlockState;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.World;
import net.minecraftforge.fml.network.NetworkHooks;
import javax.annotation.Nullable;
public class CraftingMonitorBlock extends NetworkNodeBlock {
public CraftingMonitorBlock() {
super(BlockUtils.DEFAULT_ROCK_PROPERTIES);
this.setRegistryName(RS.ID, "crafting_monitor");
}
@Override
public BlockRenderLayer getRenderLayer() {
return BlockRenderLayer.CUTOUT;
}
@Override
public BlockDirection getDirection() {
return BlockDirection.HORIZONTAL;
}
@Nullable
@Override
public TileEntity createTileEntity(BlockState state, IBlockReader world) {
return new CraftingMonitorTile();
}
@Override
@SuppressWarnings("deprecation")
public boolean onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) {
if (!world.isRemote) {
CraftingMonitorTile tile = (CraftingMonitorTile) world.getTileEntity(pos);
return NetworkUtils.attempt(world, pos, hit.getFace(), player, () -> NetworkHooks.openGui(
(ServerPlayerEntity) player,
new CraftingMonitorContainerProvider(tile.getNode(), tile),
pos
), Permission.MODIFY, Permission.AUTOCRAFTING);
}
return true;
}
@Override
public boolean hasConnectedState() {
return true;
}
}

View File

@@ -33,6 +33,7 @@ public class ServerConfig {
private PortableGrid portableGrid; private PortableGrid portableGrid;
private Crafter crafter; private Crafter crafter;
private CrafterManager crafterManager; private CrafterManager crafterManager;
private CraftingMonitor craftingMonitor;
public ServerConfig() { public ServerConfig() {
upgrades = new Upgrades(); upgrades = new Upgrades();
@@ -62,6 +63,7 @@ public class ServerConfig {
portableGrid = new PortableGrid(); portableGrid = new PortableGrid();
crafter = new Crafter(); crafter = new Crafter();
crafterManager = new CrafterManager(); crafterManager = new CrafterManager();
craftingMonitor = new CraftingMonitor();
spec = builder.build(); spec = builder.build();
} }
@@ -178,6 +180,10 @@ public class ServerConfig {
return crafterManager; return crafterManager;
} }
public CraftingMonitor getCraftingMonitor() {
return craftingMonitor;
}
public class Controller { public class Controller {
private final ForgeConfigSpec.BooleanValue useEnergy; private final ForgeConfigSpec.BooleanValue useEnergy;
private final ForgeConfigSpec.IntValue capacity; private final ForgeConfigSpec.IntValue capacity;
@@ -837,4 +843,20 @@ public class ServerConfig {
return usage.get(); return usage.get();
} }
} }
public class CraftingMonitor {
private final ForgeConfigSpec.IntValue usage;
public CraftingMonitor() {
builder.push("craftingMonitor");
usage = builder.comment("The energy used by the Crafting Monitor").defineInRange("usage", 8, 0, Integer.MAX_VALUE);
builder.pop();
}
public int getUsage() {
return usage.get();
}
}
} }

View File

@@ -1,12 +1,15 @@
package com.raoulvdberge.refinedstorage.container; package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.RSContainers; import com.raoulvdberge.refinedstorage.RSContainers;
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager;
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorListener; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorListener;
import com.raoulvdberge.refinedstorage.network.craftingmonitor.CraftingMonitorUpdateMessage;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.CraftingMonitorTile;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.inventory.container.Slot; import net.minecraft.inventory.container.Slot;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@@ -16,7 +19,7 @@ public class CraftingMonitorContainer extends BaseContainer implements ICrafting
private ICraftingMonitor craftingMonitor; private ICraftingMonitor craftingMonitor;
private boolean addedListener; private boolean addedListener;
public CraftingMonitorContainer(ICraftingMonitor craftingMonitor, @Nullable TileCraftingMonitor craftingMonitorTile, PlayerEntity player, int windowId) { public CraftingMonitorContainer(ICraftingMonitor craftingMonitor, @Nullable CraftingMonitorTile craftingMonitorTile, PlayerEntity player, int windowId) {
super(RSContainers.CRAFTING_MONITOR, craftingMonitorTile, player, windowId); super(RSContainers.CRAFTING_MONITOR, craftingMonitorTile, player, windowId);
this.craftingMonitor = craftingMonitor; this.craftingMonitor = craftingMonitor;
@@ -91,6 +94,6 @@ public class CraftingMonitorContainer extends BaseContainer implements ICrafting
@Override @Override
public void onChanged() { public void onChanged() {
// TODO RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(craftingMonitor), (ServerPlayerEntity) getPlayer()); RS.NETWORK_HANDLER.sendTo((ServerPlayerEntity) getPlayer(), new CraftingMonitorUpdateMessage(craftingMonitor));
} }
} }

View File

@@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.container.factory;
import com.raoulvdberge.refinedstorage.container.CrafterManagerContainer; import com.raoulvdberge.refinedstorage.container.CrafterManagerContainer;
import com.raoulvdberge.refinedstorage.screen.EmptyScreenInfoProvider; import com.raoulvdberge.refinedstorage.screen.EmptyScreenInfoProvider;
import com.raoulvdberge.refinedstorage.tile.CrafterManagerTile; import com.raoulvdberge.refinedstorage.tile.CrafterManagerTile;
import com.raoulvdberge.refinedstorage.util.PacketBufferUtils;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.network.PacketBuffer; import net.minecraft.network.PacketBuffer;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@@ -21,7 +22,7 @@ public class CrafterManagerContainerFactory implements IContainerFactory<Crafter
int size = buf.readInt(); int size = buf.readInt();
for (int i = 0; i < size; ++i) { for (int i = 0; i < size; ++i) {
data.put(buf.readString(), buf.readInt()); data.put(PacketBufferUtils.readString(buf), buf.readInt());
} }
CrafterManagerContainer container = new CrafterManagerContainer((CrafterManagerTile) inv.player.world.getTileEntity(pos), inv.player, windowId); CrafterManagerContainer container = new CrafterManagerContainer((CrafterManagerTile) inv.player.world.getTileEntity(pos), inv.player, windowId);

View File

@@ -0,0 +1,24 @@
package com.raoulvdberge.refinedstorage.container.factory;
import com.raoulvdberge.refinedstorage.container.CraftingMonitorContainer;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.CraftingMonitorTile;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.network.IContainerFactory;
public class CraftingMonitorContainerFactory implements IContainerFactory<CraftingMonitorContainer> {
@Override
public CraftingMonitorContainer create(int windowId, PlayerInventory inv, PacketBuffer data) {
BlockPos pos = data.readBlockPos();
CraftingMonitorTile tile = (CraftingMonitorTile) inv.player.world.getTileEntity(pos);
return new CraftingMonitorContainer(
tile.getNode(),
tile,
inv.player,
windowId
);
}
}

View File

@@ -0,0 +1,34 @@
package com.raoulvdberge.refinedstorage.container.factory;
import com.raoulvdberge.refinedstorage.container.CraftingMonitorContainer;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.CraftingMonitorTile;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.util.text.ITextComponent;
import javax.annotation.Nullable;
public class CraftingMonitorContainerProvider implements INamedContainerProvider {
private ICraftingMonitor craftingMonitor;
@Nullable
private CraftingMonitorTile tile;
public CraftingMonitorContainerProvider(ICraftingMonitor craftingMonitor, @Nullable CraftingMonitorTile tile) {
this.craftingMonitor = craftingMonitor;
this.tile = tile;
}
@Override
public ITextComponent getDisplayName() {
return craftingMonitor.getTitle();
}
@Nullable
@Override
public Container createMenu(int windowId, PlayerInventory playerInventory, PlayerEntity playerEntity) {
return new CraftingMonitorContainer(craftingMonitor, tile, playerEntity, windowId);
}
}

View File

@@ -18,7 +18,7 @@ public class FilterIconFluidInventory extends FluidInventory {
}); });
FluidStack icon = FilterItem.getFluidIcon(stack); FluidStack icon = FilterItem.getFluidIcon(stack);
if (icon != null) { if (!icon.isEmpty()) {
setFluid(0, icon); setFluid(0, icon);
} }
} }

View File

@@ -78,7 +78,7 @@ public class FilterItemHandler extends BaseItemHandler {
ItemStack icon = FilterItem.getIcon(filter); ItemStack icon = FilterItem.getIcon(filter);
FluidStack fluidIcon = FilterItem.getFluidIcon(filter); FluidStack fluidIcon = FilterItem.getFluidIcon(filter);
if (icon.isEmpty() && fluidIcon == null) { if (icon.isEmpty() && fluidIcon.isEmpty()) {
this.filters.addAll(filters); this.filters.addAll(filters);
} else { } else {
tabs.add(new GridTab(filters, FilterItem.getName(filter), icon, fluidIcon)); tabs.add(new GridTab(filters, FilterItem.getName(filter), icon, fluidIcon));

View File

@@ -172,9 +172,9 @@ public class FilterItem extends Item {
} }
} }
@Nullable @Nonnull
public static FluidStack getFluidIcon(ItemStack stack) { public static FluidStack getFluidIcon(ItemStack stack) {
return stack.hasTag() && stack.getTag().contains(NBT_FLUID_ICON) ? FluidStack.loadFluidStackFromNBT(stack.getTag().getCompound(NBT_FLUID_ICON)) : null; return stack.hasTag() && stack.getTag().contains(NBT_FLUID_ICON) ? FluidStack.loadFluidStackFromNBT(stack.getTag().getCompound(NBT_FLUID_ICON)) : FluidStack.EMPTY;
} }
public static int getType(ItemStack stack) { public static int getType(ItemStack stack) {

View File

@@ -1,7 +1,10 @@
package com.raoulvdberge.refinedstorage.network; package com.raoulvdberge.refinedstorage.network;
import com.raoulvdberge.refinedstorage.network.craftingmonitor.CraftingMonitorUpdateMessage;
import com.raoulvdberge.refinedstorage.network.grid.GridCraftingPreviewResponseMessage; import com.raoulvdberge.refinedstorage.network.grid.GridCraftingPreviewResponseMessage;
import com.raoulvdberge.refinedstorage.network.grid.GridCraftingStartResponseMessage; import com.raoulvdberge.refinedstorage.network.grid.GridCraftingStartResponseMessage;
import com.raoulvdberge.refinedstorage.screen.BaseScreen;
import com.raoulvdberge.refinedstorage.screen.CraftingMonitorScreen;
import com.raoulvdberge.refinedstorage.screen.grid.CraftingPreviewScreen; import com.raoulvdberge.refinedstorage.screen.grid.CraftingPreviewScreen;
import com.raoulvdberge.refinedstorage.screen.grid.CraftingSettingsScreen; import com.raoulvdberge.refinedstorage.screen.grid.CraftingSettingsScreen;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@@ -26,4 +29,8 @@ public class ClientProxy {
((CraftingSettingsScreen) screen).close(); ((CraftingSettingsScreen) screen).close();
} }
} }
public static void onReceivedCraftingMonitorUpdateMessage(CraftingMonitorUpdateMessage message) {
BaseScreen.executeLater(CraftingMonitorScreen.class, craftingMonitor -> craftingMonitor.setTasks(message.getTasks()));
}
} }

View File

@@ -1,43 +0,0 @@
package com.raoulvdberge.refinedstorage.network;
import com.raoulvdberge.refinedstorage.container.CraftingMonitorContainer;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraftforge.fml.common.network.ByteBufUtils;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import java.util.UUID;
public class MessageCraftingMonitorCancel extends MessageHandlerPlayerToServer<MessageCraftingMonitorCancel> implements IMessage {
private UUID taskId;
public MessageCraftingMonitorCancel() {
}
public MessageCraftingMonitorCancel(UUID taskId) {
this.taskId = taskId;
}
@Override
public void fromBytes(ByteBuf buf) {
if (buf.readBoolean()) {
taskId = UUID.fromString(ByteBufUtils.readUTF8String(buf));
}
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeBoolean(taskId != null);
if (taskId != null) {
ByteBufUtils.writeUTF8String(buf, taskId.toString());
}
}
@Override
public void handle(MessageCraftingMonitorCancel message, ServerPlayerEntity player) {
if (player.openContainer instanceof ContainerCraftingMonitor) {
((ContainerCraftingMonitor) player.openContainer).getCraftingMonitor().onCancelled(player, message.taskId);
}
}
}

View File

@@ -1,6 +1,8 @@
package com.raoulvdberge.refinedstorage.network; package com.raoulvdberge.refinedstorage.network;
import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.network.craftingmonitor.CraftingMonitorCancelMessage;
import com.raoulvdberge.refinedstorage.network.craftingmonitor.CraftingMonitorUpdateMessage;
import com.raoulvdberge.refinedstorage.network.disk.StorageDiskSizeRequestMessage; import com.raoulvdberge.refinedstorage.network.disk.StorageDiskSizeRequestMessage;
import com.raoulvdberge.refinedstorage.network.disk.StorageDiskSizeResponseMessage; import com.raoulvdberge.refinedstorage.network.disk.StorageDiskSizeResponseMessage;
import com.raoulvdberge.refinedstorage.network.grid.*; import com.raoulvdberge.refinedstorage.network.grid.*;
@@ -58,6 +60,8 @@ public class NetworkHandler {
handler.registerMessage(id++, GridCraftingPreviewResponseMessage.class, GridCraftingPreviewResponseMessage::encode, GridCraftingPreviewResponseMessage::decode, GridCraftingPreviewResponseMessage::handle); handler.registerMessage(id++, GridCraftingPreviewResponseMessage.class, GridCraftingPreviewResponseMessage::encode, GridCraftingPreviewResponseMessage::decode, GridCraftingPreviewResponseMessage::handle);
handler.registerMessage(id++, GridCraftingStartRequestMessage.class, GridCraftingStartRequestMessage::encode, GridCraftingStartRequestMessage::decode, GridCraftingStartRequestMessage::handle); handler.registerMessage(id++, GridCraftingStartRequestMessage.class, GridCraftingStartRequestMessage::encode, GridCraftingStartRequestMessage::decode, GridCraftingStartRequestMessage::handle);
handler.registerMessage(id++, GridCraftingStartResponseMessage.class, GridCraftingStartResponseMessage::encode, GridCraftingStartResponseMessage::decode, GridCraftingStartResponseMessage::handle); handler.registerMessage(id++, GridCraftingStartResponseMessage.class, GridCraftingStartResponseMessage::encode, GridCraftingStartResponseMessage::decode, GridCraftingStartResponseMessage::handle);
handler.registerMessage(id++, CraftingMonitorUpdateMessage.class, CraftingMonitorUpdateMessage::encode, CraftingMonitorUpdateMessage::decode, CraftingMonitorUpdateMessage::handle);
handler.registerMessage(id++, CraftingMonitorCancelMessage.class, CraftingMonitorCancelMessage::encode, CraftingMonitorCancelMessage::decode, CraftingMonitorCancelMessage::handle);
} }
public void sendToServer(Object message) { public void sendToServer(Object message) {

View File

@@ -0,0 +1,45 @@
package com.raoulvdberge.refinedstorage.network.craftingmonitor;
import com.raoulvdberge.refinedstorage.container.CraftingMonitorContainer;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.fml.network.NetworkEvent;
import javax.annotation.Nullable;
import java.util.UUID;
import java.util.function.Supplier;
public class CraftingMonitorCancelMessage {
@Nullable
private UUID taskId;
public CraftingMonitorCancelMessage(@Nullable UUID taskId) {
this.taskId = taskId;
}
public static CraftingMonitorCancelMessage decode(PacketBuffer buf) {
return new CraftingMonitorCancelMessage(buf.readBoolean() ? buf.readUniqueId() : null);
}
public static void encode(CraftingMonitorCancelMessage message, PacketBuffer buf) {
buf.writeBoolean(message.taskId != null);
if (message.taskId != null) {
buf.writeUniqueId(message.taskId);
}
}
public static void handle(CraftingMonitorCancelMessage message, Supplier<NetworkEvent.Context> ctx) {
ServerPlayerEntity player = ctx.get().getSender();
if (player != null) {
ctx.get().enqueueWork(() -> {
if (player.openContainer instanceof CraftingMonitorContainer) {
((CraftingMonitorContainer) player.openContainer).getCraftingMonitor().onCancelled(player, message.taskId);
}
});
}
ctx.get().setPacketHandled(true);
}
}

View File

@@ -1,4 +1,4 @@
package com.raoulvdberge.refinedstorage.network; package com.raoulvdberge.refinedstorage.network.craftingmonitor;
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.CraftingTaskReadException; import com.raoulvdberge.refinedstorage.api.autocrafting.task.CraftingTaskReadException;
@@ -6,42 +6,46 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingRequestInf
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.api.network.grid.IGridTab; import com.raoulvdberge.refinedstorage.api.network.grid.IGridTab;
import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.gui.GuiBase; import com.raoulvdberge.refinedstorage.network.ClientProxy;
import com.raoulvdberge.refinedstorage.gui.GuiCraftingMonitor; import com.raoulvdberge.refinedstorage.screen.CraftingMonitorScreen;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
import io.netty.buffer.ByteBuf; import net.minecraft.network.PacketBuffer;
import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.fml.network.NetworkEvent;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier;
public class MessageCraftingMonitorElements implements IMessage, IMessageHandler<MessageCraftingMonitorElements, IMessage> { public class CraftingMonitorUpdateMessage {
private ICraftingMonitor craftingMonitor; private ICraftingMonitor craftingMonitor;
private List<IGridTab> tasks = new ArrayList<>(); private List<IGridTab> tasks = new ArrayList<>();
public MessageCraftingMonitorElements() { public CraftingMonitorUpdateMessage(ICraftingMonitor craftingMonitor) {
}
public MessageCraftingMonitorElements(ICraftingMonitor craftingMonitor) {
this.craftingMonitor = craftingMonitor; this.craftingMonitor = craftingMonitor;
} }
@Override public CraftingMonitorUpdateMessage(List<IGridTab> tasks) {
public void fromBytes(ByteBuf buf) { this.tasks = tasks;
}
public List<IGridTab> getTasks() {
return tasks;
}
public static CraftingMonitorUpdateMessage decode(PacketBuffer buf) {
int size = buf.readInt(); int size = buf.readInt();
List<IGridTab> tasks = new ArrayList<>();
for (int i = 0; i < size; ++i) { for (int i = 0; i < size; ++i) {
UUID id = UUID.fromString(ByteBufUtils.readUTF8String(buf)); UUID id = buf.readUniqueId();
ICraftingRequestInfo requested = null; ICraftingRequestInfo requested = null;
try { try {
requested = API.instance().createCraftingRequestInfo(ByteBufUtils.readTag(buf)); requested = API.instance().createCraftingRequestInfo(buf.readCompoundTag());
} catch (CraftingTaskReadException e) { } catch (CraftingTaskReadException e) {
e.printStackTrace(); e.printStackTrace();
} }
@@ -55,24 +59,25 @@ public class MessageCraftingMonitorElements implements IMessage, IMessageHandler
int elementCount = buf.readInt(); int elementCount = buf.readInt();
for (int j = 0; j < elementCount; ++j) { for (int j = 0; j < elementCount; ++j) {
Function<ByteBuf, ICraftingMonitorElement> factory = API.instance().getCraftingMonitorElementRegistry().get(ByteBufUtils.readUTF8String(buf)); Function<PacketBuffer, ICraftingMonitorElement> factory = API.instance().getCraftingMonitorElementRegistry().get(buf.readResourceLocation());
if (factory != null) { if (factory != null) {
elements.add(factory.apply(buf)); elements.add(factory.apply(buf));
} }
} }
tasks.add(new GuiCraftingMonitor.CraftingMonitorTask(id, requested, qty, executionStarted, percentage, elements)); tasks.add(new CraftingMonitorScreen.Task(id, requested, qty, executionStarted, percentage, elements));
} }
return new CraftingMonitorUpdateMessage(tasks);
} }
@Override public static void encode(CraftingMonitorUpdateMessage message, PacketBuffer buf) {
public void toBytes(ByteBuf buf) { buf.writeInt(message.craftingMonitor.getTasks().size());
buf.writeInt(craftingMonitor.getTasks().size());
for (ICraftingTask task : craftingMonitor.getTasks()) { for (ICraftingTask task : message.craftingMonitor.getTasks()) {
ByteBufUtils.writeUTF8String(buf, task.getId().toString()); buf.writeUniqueId(task.getId());
ByteBufUtils.writeTag(buf, task.getRequested().writeToNbt()); buf.writeCompoundTag(task.getRequested().writeToNbt());
buf.writeInt(task.getQuantity()); buf.writeInt(task.getQuantity());
buf.writeLong(task.getExecutionStarted()); buf.writeLong(task.getExecutionStarted());
buf.writeInt(task.getCompletionPercentage()); buf.writeInt(task.getCompletionPercentage());
@@ -82,17 +87,15 @@ public class MessageCraftingMonitorElements implements IMessage, IMessageHandler
buf.writeInt(elements.size()); buf.writeInt(elements.size());
for (ICraftingMonitorElement element : elements) { for (ICraftingMonitorElement element : elements) {
ByteBufUtils.writeUTF8String(buf, element.getId()); buf.writeResourceLocation(element.getId());
element.write(buf); element.write(buf);
} }
} }
} }
@Override public static void handle(CraftingMonitorUpdateMessage message, Supplier<NetworkEvent.Context> ctx) {
public IMessage onMessage(MessageCraftingMonitorElements message, MessageContext ctx) { ctx.get().enqueueWork(() -> ClientProxy.onReceivedCraftingMonitorUpdateMessage(message));
GuiBase.executeLater(GuiCraftingMonitor.class, craftingMonitor -> craftingMonitor.setTasks(message.tasks)); ctx.get().setPacketHandled(true);
return null;
} }
} }

View File

@@ -72,7 +72,6 @@ public class GridCraftingPreviewResponseMessage {
public static void handle(GridCraftingPreviewResponseMessage message, Supplier<NetworkEvent.Context> ctx) { public static void handle(GridCraftingPreviewResponseMessage message, Supplier<NetworkEvent.Context> ctx) {
ctx.get().enqueueWork(() -> ClientProxy.onReceivedCraftingPreviewResponseMessage(message)); ctx.get().enqueueWork(() -> ClientProxy.onReceivedCraftingPreviewResponseMessage(message));
ctx.get().setPacketHandled(true); ctx.get().setPacketHandled(true);
} }
} }

View File

@@ -7,15 +7,6 @@ public class ProxyCommon {
API.deliver(e.getAsmData()); API.deliver(e.getAsmData());
API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementItemRender.ID, buf -> new CraftingMonitorElementItemRender(StackUtils.readItemStack(buf), buf.readInt(), buf.readInt(), buf.readInt(), buf.readInt(), buf.readInt()));
API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementFluidRender.ID, buf -> new CraftingMonitorElementFluidRender(StackUtils.readFluidStack(buf), buf.readInt(), buf.readInt(), buf.readInt(), buf.readInt(), buf.readInt()));
API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementError.ID, buf -> {
String id = ByteBufUtils.readUTF8String(buf);
String message = ByteBufUtils.readUTF8String(buf);
return new CraftingMonitorElementError(API.instance().getCraftingMonitorElementRegistry().get(id).apply(buf), message);
});
IntegrationInventorySorter.register(); IntegrationInventorySorter.register();
} }

View File

@@ -13,6 +13,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.render.CraftingMonitorElementDrawers; import com.raoulvdberge.refinedstorage.apiimpl.render.CraftingMonitorElementDrawers;
import com.raoulvdberge.refinedstorage.apiimpl.render.ElementDrawers; import com.raoulvdberge.refinedstorage.apiimpl.render.ElementDrawers;
import com.raoulvdberge.refinedstorage.container.CraftingMonitorContainer; import com.raoulvdberge.refinedstorage.container.CraftingMonitorContainer;
import com.raoulvdberge.refinedstorage.network.craftingmonitor.CraftingMonitorCancelMessage;
import com.raoulvdberge.refinedstorage.screen.widget.ScrollbarWidget; import com.raoulvdberge.refinedstorage.screen.widget.ScrollbarWidget;
import com.raoulvdberge.refinedstorage.screen.widget.TabListWidget; import com.raoulvdberge.refinedstorage.screen.widget.TabListWidget;
import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.RedstoneModeSideButton; import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.RedstoneModeSideButton;
@@ -24,6 +25,7 @@ import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.PlayerInventory; import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -32,8 +34,8 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
public class GuiCraftingMonitor extends BaseScreen<CraftingMonitorContainer> { public class CraftingMonitorScreen extends BaseScreen<CraftingMonitorContainer> {
public static class CraftingMonitorTask implements IGridTab { public static class Task implements IGridTab {
private UUID id; private UUID id;
private ICraftingRequestInfo requested; private ICraftingRequestInfo requested;
private int qty; private int qty;
@@ -41,7 +43,7 @@ public class GuiCraftingMonitor extends BaseScreen<CraftingMonitorContainer> {
private int completionPercentage; private int completionPercentage;
private List<ICraftingMonitorElement> elements; private List<ICraftingMonitorElement> elements;
public CraftingMonitorTask(UUID id, ICraftingRequestInfo requested, int qty, long executionStarted, int completionPercentage, List<ICraftingMonitorElement> elements) { public Task(UUID id, ICraftingRequestInfo requested, int qty, long executionStarted, int completionPercentage, List<ICraftingMonitorElement> elements) {
this.id = id; this.id = id;
this.requested = requested; this.requested = requested;
this.qty = qty; this.qty = qty;
@@ -64,7 +66,7 @@ public class GuiCraftingMonitor extends BaseScreen<CraftingMonitorContainer> {
int minutes = (totalSecs % 3600) / 60; int minutes = (totalSecs % 3600) / 60;
int seconds = totalSecs % 60; int seconds = totalSecs % 60;
smallTextLines.add(I18n.format("gui.refinedstorage:crafting_monitor.tooltip.requested", requested.getFluid() != null ? API.instance().getQuantityFormatter().formatInBucketForm(qty) : API.instance().getQuantityFormatter().format(qty))); smallTextLines.add(I18n.format("gui.refinedstorage.crafting_monitor.tooltip.requested", requested.getFluid() != null ? API.instance().getQuantityFormatter().formatInBucketForm(qty) : API.instance().getQuantityFormatter().format(qty)));
smallTextLines.add(String.format("%02d:%02d", minutes, seconds)); smallTextLines.add(String.format("%02d:%02d", minutes, seconds));
smallTextLines.add(String.format("%d%%", completionPercentage)); smallTextLines.add(String.format("%d%%", completionPercentage));
@@ -102,10 +104,10 @@ public class GuiCraftingMonitor extends BaseScreen<CraftingMonitorContainer> {
private IElementDrawers drawers = new CraftingMonitorElementDrawers(this, font, ITEM_WIDTH, ITEM_HEIGHT); private IElementDrawers drawers = new CraftingMonitorElementDrawers(this, font, ITEM_WIDTH, ITEM_HEIGHT);
public GuiCraftingMonitor(CraftingMonitorContainer container, ICraftingMonitor craftingMonitor, PlayerInventory inventory) { public CraftingMonitorScreen(CraftingMonitorContainer container, PlayerInventory inventory, ITextComponent title) {
super(container, 254, 201, inventory, null); super(container, 254, 201, inventory, title);
this.craftingMonitor = craftingMonitor; this.craftingMonitor = container.getCraftingMonitor();
this.tabs = new TabListWidget(this, new ElementDrawers(this, font), () -> tasks, () -> (int) Math.floor((float) Math.max(0, tasks.size() - 1) / (float) ICraftingMonitor.TABS_PER_PAGE), craftingMonitor::getTabPage, () -> { this.tabs = new TabListWidget(this, new ElementDrawers(this, font), () -> tasks, () -> (int) Math.floor((float) Math.max(0, tasks.size() - 1) / (float) ICraftingMonitor.TABS_PER_PAGE), craftingMonitor::getTabPage, () -> {
IGridTab tab = getCurrentTab(); IGridTab tab = getCurrentTab();
@@ -116,11 +118,10 @@ public class GuiCraftingMonitor extends BaseScreen<CraftingMonitorContainer> {
return tasks.indexOf(tab); return tasks.indexOf(tab);
}, ICraftingMonitor.TABS_PER_PAGE); }, ICraftingMonitor.TABS_PER_PAGE);
this.tabs.addListener(new TabListWidget.ITabListListener() { this.tabs.addListener(new TabListWidget.ITabListListener() {
@Override @Override
public void onSelectionChanged(int tab) { public void onSelectionChanged(int tab) {
craftingMonitor.onTabSelectionChanged(Optional.of(((CraftingMonitorTask) tasks.get(tab)).id)); craftingMonitor.onTabSelectionChanged(Optional.of(((Task) tasks.get(tab)).id));
scrollbar.setOffset(0); scrollbar.setOffset(0);
} }
@@ -130,6 +131,8 @@ public class GuiCraftingMonitor extends BaseScreen<CraftingMonitorContainer> {
craftingMonitor.onTabPageChanged(page); craftingMonitor.onTabPageChanged(page);
} }
}); });
this.scrollbar = new ScrollbarWidget(this, 235, 20, 12, 149);
} }
public void setTasks(List<IGridTab> tasks) { public void setTasks(List<IGridTab> tasks) {
@@ -147,28 +150,32 @@ public class GuiCraftingMonitor extends BaseScreen<CraftingMonitorContainer> {
return Collections.emptyList(); return Collections.emptyList();
} }
return ((CraftingMonitorTask) tab).elements; return ((Task) tab).elements;
} }
@Override @Override
public void onPostInit(int x, int y) { public void onPostInit(int x, int y) {
this.tabs.init(xSize); this.tabs.init(xSize);
this.scrollbar = new ScrollbarWidget(this, 235, 20, 12, 149);
if (craftingMonitor.getRedstoneModeParameter() != null) { if (craftingMonitor.getRedstoneModeParameter() != null) {
addSideButton(new RedstoneModeSideButton(this, craftingMonitor.getRedstoneModeParameter())); addSideButton(new RedstoneModeSideButton(this, craftingMonitor.getRedstoneModeParameter()));
} }
String cancel = I18n.format("gui.cancel"); String cancel = I18n.format("gui.cancel");
String cancelAll = I18n.format("misc.refinedstorage:cancel_all"); String cancelAll = I18n.format("misc.refinedstorage.cancel_all");
int cancelButtonWidth = 14 + font.getStringWidth(cancel); int cancelButtonWidth = 14 + font.getStringWidth(cancel);
int cancelAllButtonWidth = 14 + font.getStringWidth(cancelAll); int cancelAllButtonWidth = 14 + font.getStringWidth(cancelAll);
this.cancelButton = addButton(x + 7, y + 201 - 20 - 7, cancelButtonWidth, 20, cancel, false, true, btn -> { this.cancelButton = addButton(x + 7, y + 201 - 20 - 7, cancelButtonWidth, 20, cancel, false, true, btn -> {
if (hasValidTabSelected()) {
RS.NETWORK_HANDLER.sendToServer(new CraftingMonitorCancelMessage(((Task) getCurrentTab()).id));
}
}); });
this.cancelAllButton = addButton(x + 7 + cancelButtonWidth + 4, y + 201 - 20 - 7, cancelAllButtonWidth, 20, cancelAll, false, true, btn -> { this.cancelAllButton = addButton(x + 7 + cancelButtonWidth + 4, y + 201 - 20 - 7, cancelAllButtonWidth, 20, cancelAll, false, true, btn -> {
if (!tasks.isEmpty()) {
RS.NETWORK_HANDLER.sendToServer(new CraftingMonitorCancelMessage(null));
}
}); });
} }
@@ -223,7 +230,7 @@ public class GuiCraftingMonitor extends BaseScreen<CraftingMonitorContainer> {
@Nullable @Nullable
private IGridTab getTabById(UUID id) { private IGridTab getTabById(UUID id) {
return tasks.stream().filter(t -> ((CraftingMonitorTask) t).id.equals(id)).findFirst().orElse(null); return tasks.stream().filter(t -> ((Task) t).id.equals(id)).findFirst().orElse(null);
} }
@Override @Override
@@ -236,12 +243,14 @@ public class GuiCraftingMonitor extends BaseScreen<CraftingMonitorContainer> {
blit(x, y, 0, 0, xSize, ySize); blit(x, y, 0, 0, xSize, ySize);
scrollbar.render();
tabs.drawForeground(x, y - tabs.getHeight(), mouseX, mouseY, craftingMonitor.isActive()); tabs.drawForeground(x, y - tabs.getHeight(), mouseX, mouseY, craftingMonitor.isActive());
} }
@Override @Override
public void renderForeground(int mouseX, int mouseY) { public void renderForeground(int mouseX, int mouseY) {
renderString(7, 7, I18n.format(craftingMonitor.getGuiTitle())); renderString(7, 7, title.getFormattedText());
int item = scrollbar != null ? scrollbar.getOffset() * 3 : 0; int item = scrollbar != null ? scrollbar.getOffset() * 3 : 0;
@@ -280,26 +289,33 @@ public class GuiCraftingMonitor extends BaseScreen<CraftingMonitorContainer> {
tabs.drawTooltip(font, mouseX, mouseY); tabs.drawTooltip(font, mouseX, mouseY);
} }
/* TODO
@Override @Override
protected void actionPerformed(GuiButton button) throws IOException { public boolean mouseClicked(double mouseX, double mouseY, int clickedButton) {
super.actionPerformed(button); if (tabs.mouseClicked()) {
tabs.actionPerformed(button);
if (button == cancelButton && hasValidTabSelected()) {
RS.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(((CraftingMonitorTask) getCurrentTab()).id));
} else if (button == cancelAllButton && tasks.size() > 0) {
RS.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(null));
}
}*/
@Override
public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) {
if (super.mouseClicked(mouseX, mouseY, mouseButton)) {
return true; return true;
} }
return this.tabs.mouseClicked(); if (scrollbar.mouseClicked(mouseX, mouseY, clickedButton)) {
return true;
}
return super.mouseClicked(mouseX, mouseY, clickedButton);
}
@Override
public void mouseMoved(double mx, double my) {
scrollbar.mouseMoved(mx, my);
super.mouseMoved(mx, my);
}
@Override
public boolean mouseReleased(double mx, double my, int button) {
return scrollbar.mouseReleased(mx, my, button) || super.mouseReleased(mx, my, button);
}
@Override
public boolean mouseScrolled(double x, double y, double delta) {
return this.scrollbar.mouseScrolled(x, y, delta) || super.mouseScrolled(x, y, delta);
} }
} }

View File

@@ -1,7 +1,7 @@
package com.raoulvdberge.refinedstorage.tile.craftingmonitor; package com.raoulvdberge.refinedstorage.tile.craftingmonitor;
import com.raoulvdberge.refinedstorage.RSTiles; import com.raoulvdberge.refinedstorage.RSTiles;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCraftingMonitor; import com.raoulvdberge.refinedstorage.apiimpl.network.node.CraftingMonitorNetworkNode;
import com.raoulvdberge.refinedstorage.tile.NetworkNodeTile; import com.raoulvdberge.refinedstorage.tile.NetworkNodeTile;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.network.datasync.DataSerializers; import net.minecraft.network.datasync.DataSerializers;
@@ -12,8 +12,8 @@ import javax.annotation.Nonnull;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
public class TileCraftingMonitor extends NetworkNodeTile<NetworkNodeCraftingMonitor> { public class CraftingMonitorTile extends NetworkNodeTile<CraftingMonitorNetworkNode> {
public static final TileDataParameter<Optional<UUID>, TileCraftingMonitor> TAB_SELECTED = new TileDataParameter<>(DataSerializers.OPTIONAL_UNIQUE_ID, Optional.empty(), t -> t.getNode().getTabSelected(), (t, v) -> { public static final TileDataParameter<Optional<UUID>, CraftingMonitorTile> TAB_SELECTED = new TileDataParameter<>(DataSerializers.OPTIONAL_UNIQUE_ID, Optional.empty(), t -> t.getNode().getTabSelected(), (t, v) -> {
if (v.isPresent() && t.getNode().getTabSelected().isPresent() && v.get().equals(t.getNode().getTabSelected().get())) { if (v.isPresent() && t.getNode().getTabSelected().isPresent() && v.get().equals(t.getNode().getTabSelected().get())) {
t.getNode().setTabSelected(Optional.empty()); t.getNode().setTabSelected(Optional.empty());
} else { } else {
@@ -22,14 +22,14 @@ public class TileCraftingMonitor extends NetworkNodeTile<NetworkNodeCraftingMoni
t.getNode().markDirty(); t.getNode().markDirty();
}); });
public static final TileDataParameter<Integer, TileCraftingMonitor> TAB_PAGE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getTabPage(), (t, v) -> { public static final TileDataParameter<Integer, CraftingMonitorTile> TAB_PAGE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getTabPage(), (t, v) -> {
if (v >= 0) { if (v >= 0) {
t.getNode().setTabPage(v); t.getNode().setTabPage(v);
t.getNode().markDirty(); t.getNode().markDirty();
} }
}); });
public TileCraftingMonitor() { public CraftingMonitorTile() {
super(RSTiles.CRAFTING_MONITOR); super(RSTiles.CRAFTING_MONITOR);
dataManager.addWatchedParameter(TAB_SELECTED); dataManager.addWatchedParameter(TAB_SELECTED);
@@ -38,7 +38,7 @@ public class TileCraftingMonitor extends NetworkNodeTile<NetworkNodeCraftingMoni
@Override @Override
@Nonnull @Nonnull
public NetworkNodeCraftingMonitor createNode(World world, BlockPos pos) { public CraftingMonitorNetworkNode createNode(World world, BlockPos pos) {
return new NetworkNodeCraftingMonitor(world, pos); return new CraftingMonitorNetworkNode(world, pos);
} }
} }

View File

@@ -5,6 +5,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.util.text.ITextComponent;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Collection; import java.util.Collection;
@@ -14,7 +15,7 @@ import java.util.UUID;
public interface ICraftingMonitor { public interface ICraftingMonitor {
int TABS_PER_PAGE = 7; int TABS_PER_PAGE = 7;
String getGuiTitle(); ITextComponent getTitle();
void onCancelled(ServerPlayerEntity player, @Nullable UUID id); void onCancelled(ServerPlayerEntity player, @Nullable UUID id);

View File

@@ -9,6 +9,8 @@ import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TranslationTextComponent;
import net.minecraft.world.World; import net.minecraft.world.World;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -34,8 +36,8 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
} }
@Override @Override
public String getGuiTitle() { public ITextComponent getTitle() {
return "gui.refinedstorage:wireless_crafting_monitor"; return new TranslationTextComponent("gui.refinedstorage.wireless_crafting_monitor");
} }
@Override @Override

View File

@@ -106,7 +106,7 @@ public final class StackUtils {
StorageTrackerEntry entry = null; StorageTrackerEntry entry = null;
if (buf.readBoolean()) { if (buf.readBoolean()) {
entry = new StorageTrackerEntry(buf.readLong(), buf.readString()); entry = new StorageTrackerEntry(buf.readLong(), PacketBufferUtils.readString(buf));
} }
return new ItemGridStack(id, stack, craftable, entry); return new ItemGridStack(id, stack, craftable, entry);
@@ -135,7 +135,7 @@ public final class StackUtils {
StorageTrackerEntry entry = null; StorageTrackerEntry entry = null;
if (buf.readBoolean()) { if (buf.readBoolean()) {
entry = new StorageTrackerEntry(buf.readLong(), buf.readString()); entry = new StorageTrackerEntry(buf.readLong(), PacketBufferUtils.readString(buf));
} }
return new FluidGridStack(id, stack, entry, craftable); return new FluidGridStack(id, stack, entry, craftable);

View File

@@ -1,47 +1,36 @@
{ {
"forge_marker": 1,
"defaults": {
"model": "refinedstorage:cube_north_cutout",
"textures": {
"particle": "refinedstorage:blocks/crafting_monitor/front",
"north": "refinedstorage:blocks/crafting_monitor/front",
"east": "refinedstorage:blocks/crafting_monitor/left",
"south": "refinedstorage:blocks/crafting_monitor/back",
"west": "refinedstorage:blocks/crafting_monitor/right",
"up": "refinedstorage:blocks/crafting_monitor/top",
"down": "refinedstorage:blocks/bottom",
"cutout": "refinedstorage:blocks/crafting_monitor/cutouts/front_disconnected"
}
},
"variants": { "variants": {
"inventory": [ "connected=true,direction=north": {
{ "model": "refinedstorage:block/crafting_monitor_connected",
"transform": "forge:default-block", "y": 0
"y": 0
}
],
"connected": {
"true": {
"textures": {
"cutout": "refinedstorage:blocks/crafting_monitor/cutouts/front_connected"
}
},
"false": {
}
}, },
"direction": { "connected=true,direction=east": {
"north": { "model": "refinedstorage:block/crafting_monitor_connected",
"y": 0 "y": 90
}, },
"east": { "connected=true,direction=south": {
"y": 90 "model": "refinedstorage:block/crafting_monitor_connected",
}, "y": 180
"south": { },
"y": 180 "connected=true,direction=west": {
}, "model": "refinedstorage:block/crafting_monitor_connected",
"west": { "y": 270
"y": 270 },
} "connected=false,direction=north": {
"model": "refinedstorage:block/crafting_monitor_disconnected",
"y": 0
},
"connected=false,direction=east": {
"model": "refinedstorage:block/crafting_monitor_disconnected",
"y": 90
},
"connected=false,direction=south": {
"model": "refinedstorage:block/crafting_monitor_disconnected",
"y": 180
},
"connected=false,direction=west": {
"model": "refinedstorage:block/crafting_monitor_disconnected",
"y": 270
} }
} }
} }

View File

@@ -32,7 +32,7 @@
"gui.refinedstorage.relay": "Relay", "gui.refinedstorage.relay": "Relay",
"gui.refinedstorage.interface.import": "Interface Import", "gui.refinedstorage.interface.import": "Interface Import",
"gui.refinedstorage.interface.export": "Interface Export", "gui.refinedstorage.interface.export": "Interface Export",
"gui.refinedstorage:crafting_monitor": "Crafting Monitor", "gui.refinedstorage.crafting_monitor": "Crafting Monitor",
"gui.refinedstorage:wireless_crafting_monitor": "Wireless Crafting Monitor", "gui.refinedstorage:wireless_crafting_monitor": "Wireless Crafting Monitor",
"gui.refinedstorage:crafting_monitor.tooltip.requested": "%d requested", "gui.refinedstorage:crafting_monitor.tooltip.requested": "%d requested",
"gui.refinedstorage:crafting_monitor.stored": "Stored: %d", "gui.refinedstorage:crafting_monitor.stored": "Stored: %d",
@@ -107,7 +107,7 @@
"misc.refinedstorage.start": "Start", "misc.refinedstorage.start": "Start",
"misc.refinedstorage.clear": "Clear", "misc.refinedstorage.clear": "Clear",
"misc.refinedstorage.set": "Set", "misc.refinedstorage.set": "Set",
"misc.refinedstorage:cancel_all": "Cancel All", "misc.refinedstorage.cancel_all": "Cancel All",
"misc.refinedstorage.priority": "Priority", "misc.refinedstorage.priority": "Priority",
"misc.refinedstorage.exact": "Exact", "misc.refinedstorage.exact": "Exact",
"misc.refinedstorage.processing": "Processing", "misc.refinedstorage.processing": "Processing",
@@ -202,7 +202,7 @@
"block.refinedstorage.creative_storage_block": "Creative Storage Block", "block.refinedstorage.creative_storage_block": "Creative Storage Block",
"block.refinedstorage.relay": "Relay", "block.refinedstorage.relay": "Relay",
"block.refinedstorage.interface": "Interface", "block.refinedstorage.interface": "Interface",
"block.refinedstorage:crafting_monitor": "Crafting Monitor", "block.refinedstorage.crafting_monitor": "Crafting Monitor",
"block.refinedstorage.wireless_transmitter": "Wireless Transmitter", "block.refinedstorage.wireless_transmitter": "Wireless Transmitter",
"block.refinedstorage.wireless_transmitter.tooltip": "Must be placed on %s.", "block.refinedstorage.wireless_transmitter.tooltip": "Must be placed on %s.",
"block.refinedstorage.crafter": "Crafter", "block.refinedstorage.crafter": "Crafter",

View File

@@ -0,0 +1,12 @@
{
"parent": "refinedstorage:block/cube_north_cutout",
"textures": {
"particle": "refinedstorage:block/crafting_monitor/front",
"north": "refinedstorage:block/crafting_monitor/front",
"east": "refinedstorage:block/crafting_monitor/left",
"south": "refinedstorage:block/crafting_monitor/back",
"west": "refinedstorage:block/crafting_monitor/right",
"up": "refinedstorage:block/crafting_monitor/top",
"down": "refinedstorage:block/bottom"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "refinedstorage:block/crafting_monitor",
"textures": {
"cutout": "refinedstorage:block/crafting_monitor/cutouts/front_connected"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "refinedstorage:block/crafting_monitor",
"textures": {
"cutout": "refinedstorage:block/crafting_monitor/cutouts/front_disconnected"
}
}

View File

@@ -0,0 +1,3 @@
{
"parent": "refinedstorage:block/crafting_monitor_disconnected"
}

View File

@@ -0,0 +1,19 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "refinedstorage:crafting_monitor"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View File

@@ -7,14 +7,13 @@
], ],
"key": { "key": {
"P": { "P": {
"item": "#improved_processor" "item": "refinedstorage:improved_processor"
}, },
"A": { "A": {
"item": "refinedstorage:pattern" "item": "refinedstorage:pattern"
}, },
"G": { "G": {
"type": "forge:ore_dict", "tag": "forge:glass"
"ore": "blockGlass"
}, },
"E": { "E": {
"item": "refinedstorage:quartz_enriched_iron" "item": "refinedstorage:quartz_enriched_iron"