diff --git a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java index 8cb8da462..ecb838390 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/ClientSetup.java @@ -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, "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)); @@ -186,6 +187,7 @@ public class ClientSetup { ScreenManager.registerFactory(RSContainers.DISK_MANIPULATOR, DiskManipulatorScreen::new); ScreenManager.registerFactory(RSContainers.CRAFTER, CrafterScreen::new); 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_FLUID_GRID); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RS.java b/src/main/java/com/raoulvdberge/refinedstorage/RS.java index d4a3f933d..b074e4bd5 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RS.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RS.java @@ -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.storage.StorageType; 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.FluidCraftingPreviewElement; 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.container.*; 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.PositionalTileContainerFactory; 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.recipe.UpgradeWithEnchantedBookRecipeSerializer; import com.raoulvdberge.refinedstorage.tile.*; +import com.raoulvdberge.refinedstorage.tile.craftingmonitor.CraftingMonitorTile; import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; import com.raoulvdberge.refinedstorage.tile.grid.GridTile; 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(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(CraftingMonitorNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new CraftingMonitorNetworkNode(world, pos))); API.instance().getGridManager().add(GridBlockGridFactory.ID, new GridBlockGridFactory()); 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(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()); LootFunctionManager.registerFunction(new StorageBlockLootFunctionSerializer()); @@ -211,6 +221,7 @@ public final class RS { e.getRegistry().register(new PortableGridBlock(PortableGridBlockItem.Type.CREATIVE)); e.getRegistry().register(new CrafterBlock()); e.getRegistry().register(new CrafterManagerBlock()); + e.getRegistry().register(new CraftingMonitorBlock()); } @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(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(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.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((windowId, inv, tile) -> new DiskManipulatorContainer(tile, inv.player, windowId))).setRegistryName(RS.ID, "disk_manipulator")); e.getRegistry().register(IForgeContainerType.create(new PositionalTileContainerFactory((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 CraftingMonitorContainerFactory()).setRegistryName(RS.ID, "crafting_monitor")); } @SubscribeEvent @@ -376,6 +389,7 @@ public final class RS { e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.DISK_MANIPULATOR)); e.getRegistry().register(BlockUtils.createBlockItemFor(RSBlocks.CRAFTER)); 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.CREATIVE)); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java index 07f2d667a..a420c101e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSBlocks.java @@ -82,6 +82,6 @@ public final class RSBlocks { public static final CrafterBlock CRAFTER = null; @ObjectHolder(RS.ID + ":crafter_manager") public static final CrafterManagerBlock CRAFTER_MANAGER = null; - - public static final BlockCraftingMonitor CRAFTING_MONITOR = null; + @ObjectHolder(RS.ID + ":crafting_monitor") + public static final CraftingMonitorBlock CRAFTING_MONITOR = null; } \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java b/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java index e956ce1be..857e40670 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSContainers.java @@ -49,7 +49,6 @@ public final class RSContainers { public static final ContainerType CRAFTER = null; @ObjectHolder(RS.ID + ":crafter_manager") public static final ContainerType CRAFTER_MANAGER = null; - - //@ObjectHolder(RS.ID + ":crafting_monitor") + @ObjectHolder(RS.ID + ":crafting_monitor") public static final ContainerType CRAFTING_MONITOR = null; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java index 5f62a9a47..57d781b8b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSOldConfig.java @@ -1,10 +1,6 @@ package com.raoulvdberge.refinedstorage; public class RSOldConfig { - //region Energy - public int craftingMonitorUsage; - //endregion - //region Wireless Crafting Monitor public boolean wirelessCraftingMonitorUsesEnergy; public int wirelessCraftingMonitorCapacity; @@ -18,16 +14,11 @@ public class RSOldConfig { //endregion //region Categories - private static final String ENERGY = "energy"; private static final String WIRELESS_CRAFTING_MONITOR = "wirelessCraftingMonitor"; private static final String AUTOCRAFTING = "autocrafting"; //endregion /*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 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"); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java b/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java index b9b2efdab..3af3c389a 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSTiles.java @@ -1,7 +1,7 @@ package com.raoulvdberge.refinedstorage; 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.portable.PortableGridTile; import net.minecraft.tileentity.TileEntityType; @@ -82,7 +82,6 @@ public class RSTiles { public static final TileEntityType CRAFTER = null; @ObjectHolder(RS.ID + ":crafter_manager") public static final TileEntityType CRAFTER_MANAGER = null; - - //@ObjectHolder(RS.ID + ":crafting_monitor") - public static final TileEntityType CRAFTING_MONITOR = null; + @ObjectHolder(RS.ID + ":crafting_monitor") + public static final TileEntityType CRAFTING_MONITOR = null; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElement.java b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElement.java index c8322b564..8a14df7c5 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElement.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElement.java @@ -2,6 +2,7 @@ package com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor; import com.raoulvdberge.refinedstorage.api.render.IElementDrawers; import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -24,7 +25,7 @@ public interface ICraftingMonitorElement { * * @return the id */ - String getId(); + ResourceLocation getId(); /** * @return the tooltip of this element, or null for no tooltip diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElementRegistry.java b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElementRegistry.java index 426e1dfa1..03760227a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElementRegistry.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/craftingmonitor/ICraftingMonitorElementRegistry.java @@ -1,6 +1,7 @@ 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 java.util.function.Function; @@ -15,7 +16,7 @@ public interface ICraftingMonitorElementRegistry { * @param id the id, as specified in {@link ICraftingMonitorElement#getId()} * @param factory the factory */ - void add(String id, Function factory); + void add(ResourceLocation id, Function factory); /** * Returns a factory from the registry. @@ -24,5 +25,5 @@ public interface ICraftingMonitorElementRegistry { * @return the factory, or null if no factory was found */ @Nullable - Function get(String id); + Function get(ResourceLocation id); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingRequestInfo.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingRequestInfo.java index 71fde9e3b..d2db8e839 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingRequestInfo.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingRequestInfo.java @@ -26,8 +26,8 @@ public class CraftingRequestInfo implements ICraftingRequestInfo { } else { fluid = FluidStack.loadFluidStackFromNBT(tag.getCompound(NBT_STACK)); - if (fluid == null) { - throw new CraftingTaskReadException("Extractor fluid stack is emty"); + if (fluid.isEmpty()) { + throw new CraftingTaskReadException("Extractor fluid stack is empty"); } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementList.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementList.java index 89bbb6417..f0f740500 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementList.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementList.java @@ -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.ICraftingMonitorElementList; +import net.minecraft.util.ResourceLocation; import java.util.*; public class CraftingMonitorElementList implements ICraftingMonitorElementList { private List elements = new LinkedList<>(); - private Map> currentLists = new LinkedHashMap<>(); + private Map> currentLists = new LinkedHashMap<>(); @Override public void directAdd(ICraftingMonitorElement element) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementRegistry.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementRegistry.java index 7182632d2..e5fe55f89 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementRegistry.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementRegistry.java @@ -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.ICraftingMonitorElementRegistry; -import io.netty.buffer.ByteBuf; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; import javax.annotation.Nullable; import java.util.HashMap; @@ -10,16 +11,16 @@ import java.util.Map; import java.util.function.Function; public class CraftingMonitorElementRegistry implements ICraftingMonitorElementRegistry { - private Map> registry = new HashMap<>(); + private Map> registry = new HashMap<>(); @Override - public void add(String id, Function factory) { + public void add(ResourceLocation id, Function factory) { registry.put(id, factory); } @Nullable @Override - public Function get(String id) { + public Function get(ResourceLocation id) { return registry.get(id); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementError.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/ErrorCraftingMonitorElement.java similarity index 59% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementError.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/ErrorCraftingMonitorElement.java index 065bfb5d4..c2009973c 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementError.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/ErrorCraftingMonitorElement.java @@ -2,20 +2,22 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; 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.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.TextFormatting; import javax.annotation.Nullable; -public class CraftingMonitorElementError implements ICraftingMonitorElement { - public static final String ID = "error"; +public class ErrorCraftingMonitorElement implements ICraftingMonitorElement { + public static final ResourceLocation ID = new ResourceLocation("error"); private ICraftingMonitorElement base; private String message; - public CraftingMonitorElementError(ICraftingMonitorElement base, String message) { + public ErrorCraftingMonitorElement(ICraftingMonitorElement base, String message) { this.base = base; this.message = message; } @@ -35,21 +37,31 @@ public class CraftingMonitorElementError implements ICraftingMonitorElement { } @Override - public String getId() { + public ResourceLocation getId() { return ID; } @Override public void write(PacketBuffer buf) { - ByteBufUtil.writeUtf8(buf, base.getId()); - ByteBufUtil.writeUtf8(buf, message); + buf.writeResourceLocation(base.getId()); + buf.writeString(message); 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 public boolean merge(ICraftingMonitorElement element) { - return elementHashCode() == element.elementHashCode() && base.merge(((CraftingMonitorElementError) element).base); + return elementHashCode() == element.elementHashCode() && base.merge(((ErrorCraftingMonitorElement) element).base); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementFluidRender.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/FluidCraftingMonitorElement.java old mode 100755 new mode 100644 similarity index 79% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementFluidRender.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/FluidCraftingMonitorElement.java index b3bbc626e..14814478d --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementFluidRender.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/FluidCraftingMonitorElement.java @@ -1,6 +1,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor; import com.mojang.blaze3d.platform.GlStateManager; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; import com.raoulvdberge.refinedstorage.api.render.IElementDrawers; 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.resources.I18n; import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fluids.FluidStack; 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_MISSING = 0xFFF2DEDE; private static final int COLOR_SCHEDULED = 0xFFE8E5CA; 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 int stored; @@ -29,7 +31,7 @@ public class CraftingMonitorElementFluidRender implements ICraftingMonitorElemen private int scheduled; 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.stored = stored; this.missing = missing; @@ -92,7 +94,7 @@ public class CraftingMonitorElementFluidRender implements ICraftingMonitorElemen } @Override - public String getId() { + public ResourceLocation getId() { return ID; } @@ -112,14 +114,25 @@ public class CraftingMonitorElementFluidRender implements ICraftingMonitorElemen 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 public boolean merge(ICraftingMonitorElement element) { if (element.getId().equals(getId()) && elementHashCode() == element.elementHashCode()) { - this.stored += ((CraftingMonitorElementFluidRender) element).stored; - this.missing += ((CraftingMonitorElementFluidRender) element).missing; - this.processing += ((CraftingMonitorElementFluidRender) element).processing; - this.scheduled += ((CraftingMonitorElementFluidRender) element).scheduled; - this.crafting += ((CraftingMonitorElementFluidRender) element).crafting; + this.stored += ((FluidCraftingMonitorElement) element).stored; + this.missing += ((FluidCraftingMonitorElement) element).missing; + this.processing += ((FluidCraftingMonitorElement) element).processing; + this.scheduled += ((FluidCraftingMonitorElement) element).scheduled; + this.crafting += ((FluidCraftingMonitorElement) element).crafting; return true; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementItemRender.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/ItemCraftingMonitorElement.java old mode 100755 new mode 100644 similarity index 77% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementItemRender.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/ItemCraftingMonitorElement.java index 75a26a458..83654664e --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/CraftingMonitorElementItemRender.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/craftingmonitor/ItemCraftingMonitorElement.java @@ -1,26 +1,29 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor; import com.mojang.blaze3d.platform.GlStateManager; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; import com.raoulvdberge.refinedstorage.api.render.IElementDrawers; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.util.RenderUtils; +import com.raoulvdberge.refinedstorage.util.StackUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; 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_MISSING = 0xFFF2DEDE; private static final int COLOR_SCHEDULED = 0xFFE8E5CA; 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 int stored; @@ -29,7 +32,7 @@ public class CraftingMonitorElementItemRender implements ICraftingMonitorElement private int scheduled; 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.stored = stored; this.missing = missing; @@ -92,7 +95,7 @@ public class CraftingMonitorElementItemRender implements ICraftingMonitorElement } @Override - public String getId() { + public ResourceLocation getId() { return ID; } @@ -104,7 +107,7 @@ public class CraftingMonitorElementItemRender implements ICraftingMonitorElement @Override public void write(PacketBuffer buf) { - buf.writeItemStack(stack); + StackUtils.writeItemStack(buf, stack); buf.writeInt(stored); buf.writeInt(missing); buf.writeInt(processing); @@ -112,14 +115,25 @@ public class CraftingMonitorElementItemRender implements ICraftingMonitorElement 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 public boolean merge(ICraftingMonitorElement element) { if (element.getId().equals(getId()) && elementHashCode() == element.elementHashCode()) { - this.stored += ((CraftingMonitorElementItemRender) element).stored; - this.missing += ((CraftingMonitorElementItemRender) element).missing; - this.processing += ((CraftingMonitorElementItemRender) element).processing; - this.scheduled += ((CraftingMonitorElementItemRender) element).scheduled; - this.crafting += ((CraftingMonitorElementItemRender) element).crafting; + this.stored += ((ItemCraftingMonitorElement) element).stored; + this.missing += ((ItemCraftingMonitorElement) element).missing; + this.processing += ((ItemCraftingMonitorElement) element).processing; + this.scheduled += ((ItemCraftingMonitorElement) element).scheduled; + this.crafting += ((ItemCraftingMonitorElement) element).crafting; return true; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java index e6fbb90c2..cf1f3a664 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java @@ -14,9 +14,9 @@ import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IStackList; import com.raoulvdberge.refinedstorage.api.util.StackListEntry; import com.raoulvdberge.refinedstorage.apiimpl.API; -import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementError; -import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementFluidRender; -import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementItemRender; +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.FluidCraftingPreviewElement; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.ItemCraftingPreviewElement; 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) { FluidStack stack = FluidStack.loadFluidStackFromNBT(list.getCompound(i)); - if (stack == null) { + if (stack.isEmpty()) { throw new CraftingTaskReadException("Empty stack!"); } @@ -1082,16 +1082,16 @@ public class CraftingTask implements ICraftingTask { ICraftingMonitorElementList elements = API.instance().createCraftingMonitorElementList(); 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 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 (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) { for (StackListEntry 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) { for (StackListEntry 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) { - 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) { - 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) { - 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); @@ -1124,11 +1124,11 @@ public class CraftingTask implements ICraftingTask { elements.commit(); 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 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) { @@ -1138,18 +1138,18 @@ public class CraftingTask implements ICraftingTask { if (processing.getState() == ProcessingState.EXTRACTED_ALL) { for (StackListEntry 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) { for (StackListEntry 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) { - 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) { - 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) { - 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); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java index efdff68f2..ede30173e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java @@ -225,6 +225,6 @@ public class ItemGridHandler implements IItemGridHandler { 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); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CraftingMonitorNetworkNode.java old mode 100755 new mode 100644 similarity index 81% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCraftingMonitor.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CraftingMonitorNetworkNode.java index 9025ffd24..64914faf3 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CraftingMonitorNetworkNode.java @@ -4,8 +4,8 @@ import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; 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.TileCraftingMonitor; import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import net.minecraft.entity.player.PlayerEntity; @@ -13,6 +13,8 @@ import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.world.World; import javax.annotation.Nullable; @@ -21,7 +23,7 @@ import java.util.Collections; import java.util.Optional; 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"); private static final String NBT_TAB_SELECTED = "TabSelected"; @@ -30,13 +32,13 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting private Optional tabSelected = Optional.empty(); private int tabPage; - public NetworkNodeCraftingMonitor(World world, BlockPos pos) { + public CraftingMonitorNetworkNode(World world, BlockPos pos) { super(world, pos); } @Override public int getEnergyUsage() { - return RS.INSTANCE.config.craftingMonitorUsage; + return RS.SERVER_CONFIG.getCraftingMonitor().getUsage(); } @Override @@ -45,8 +47,8 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting } @Override - public String getGuiTitle() { - return "gui.refinedstorage:crafting_monitor"; + public ITextComponent getTitle() { + return new TranslationTextComponent("gui.refinedstorage.crafting_monitor"); } @Override @@ -58,7 +60,7 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting @Override public TileDataParameter getRedstoneModeParameter() { - return TileCraftingMonitor.REDSTONE_MODE; + return CraftingMonitorTile.REDSTONE_MODE; } @Override @@ -118,23 +120,23 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting @Override public Optional getTabSelected() { - return world.isRemote ? TileCraftingMonitor.TAB_SELECTED.getValue() : tabSelected; + return world.isRemote ? CraftingMonitorTile.TAB_SELECTED.getValue() : tabSelected; } @Override public int getTabPage() { - return world.isRemote ? TileCraftingMonitor.TAB_PAGE.getValue() : tabPage; + return world.isRemote ? CraftingMonitorTile.TAB_PAGE.getValue() : tabPage; } @Override public void onTabSelectionChanged(Optional tab) { - TileDataManager.setParameter(TileCraftingMonitor.TAB_SELECTED, tab); + TileDataManager.setParameter(CraftingMonitorTile.TAB_SELECTED, tab); } @Override public void onTabPageChanged(int page) { if (page >= 0) { - TileDataManager.setParameter(TileCraftingMonitor.TAB_PAGE, page); + TileDataManager.setParameter(CraftingMonitorTile.TAB_PAGE, page); } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/disk/factory/FluidStorageDiskFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/disk/factory/FluidStorageDiskFactory.java index 48107bd41..373529e0d 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/disk/factory/FluidStorageDiskFactory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/disk/factory/FluidStorageDiskFactory.java @@ -27,7 +27,7 @@ public class FluidStorageDiskFactory implements IStorageDiskFactory for (int i = 0; i < list.size(); ++i) { FluidStack stack = FluidStack.loadFluidStackFromNBT(list.getCompound(i)); - if (stack != null) { + if (!stack.isEmpty()) { disk.getRawStacks().put(stack.getRawFluid(), stack); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/tracker/FluidStorageTracker.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/tracker/FluidStorageTracker.java index 236d75ca5..4e7223a4e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/tracker/FluidStorageTracker.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/tracker/FluidStorageTracker.java @@ -42,7 +42,7 @@ public class FluidStorageTracker implements IStorageTracker { 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))); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCraftingMonitor.java deleted file mode 100755 index 542329343..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCraftingMonitor.java +++ /dev/null @@ -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; - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/CraftingMonitorBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/block/CraftingMonitorBlock.java new file mode 100644 index 000000000..aa6c9cb21 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/CraftingMonitorBlock.java @@ -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; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java index 8994a7b5e..90a460243 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/config/ServerConfig.java @@ -33,6 +33,7 @@ public class ServerConfig { private PortableGrid portableGrid; private Crafter crafter; private CrafterManager crafterManager; + private CraftingMonitor craftingMonitor; public ServerConfig() { upgrades = new Upgrades(); @@ -62,6 +63,7 @@ public class ServerConfig { portableGrid = new PortableGrid(); crafter = new Crafter(); crafterManager = new CrafterManager(); + craftingMonitor = new CraftingMonitor(); spec = builder.build(); } @@ -178,6 +180,10 @@ public class ServerConfig { return crafterManager; } + public CraftingMonitor getCraftingMonitor() { + return craftingMonitor; + } + public class Controller { private final ForgeConfigSpec.BooleanValue useEnergy; private final ForgeConfigSpec.IntValue capacity; @@ -837,4 +843,20 @@ public class ServerConfig { 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(); + } + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/CraftingMonitorContainer.java b/src/main/java/com/raoulvdberge/refinedstorage/container/CraftingMonitorContainer.java index c80c3a2b0..7be6aa1ef 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/CraftingMonitorContainer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/CraftingMonitorContainer.java @@ -1,12 +1,15 @@ package com.raoulvdberge.refinedstorage.container; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RSContainers; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager; 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.TileCraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.inventory.container.Slot; import net.minecraft.item.ItemStack; @@ -16,7 +19,7 @@ public class CraftingMonitorContainer extends BaseContainer implements ICrafting private ICraftingMonitor craftingMonitor; 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); this.craftingMonitor = craftingMonitor; @@ -91,6 +94,6 @@ public class CraftingMonitorContainer extends BaseContainer implements ICrafting @Override public void onChanged() { - // TODO RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(craftingMonitor), (ServerPlayerEntity) getPlayer()); + RS.NETWORK_HANDLER.sendTo((ServerPlayerEntity) getPlayer(), new CraftingMonitorUpdateMessage(craftingMonitor)); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/factory/CrafterManagerContainerFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/container/factory/CrafterManagerContainerFactory.java index 870e26900..f4edd130e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/factory/CrafterManagerContainerFactory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/factory/CrafterManagerContainerFactory.java @@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.container.factory; import com.raoulvdberge.refinedstorage.container.CrafterManagerContainer; import com.raoulvdberge.refinedstorage.screen.EmptyScreenInfoProvider; import com.raoulvdberge.refinedstorage.tile.CrafterManagerTile; +import com.raoulvdberge.refinedstorage.util.PacketBufferUtils; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.network.PacketBuffer; import net.minecraft.util.math.BlockPos; @@ -21,7 +22,7 @@ public class CrafterManagerContainerFactory implements IContainerFactory { + @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 + ); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/factory/CraftingMonitorContainerProvider.java b/src/main/java/com/raoulvdberge/refinedstorage/container/factory/CraftingMonitorContainerProvider.java new file mode 100644 index 000000000..4cb964b49 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/factory/CraftingMonitorContainerProvider.java @@ -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); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/inventory/fluid/FilterIconFluidInventory.java b/src/main/java/com/raoulvdberge/refinedstorage/inventory/fluid/FilterIconFluidInventory.java index c32680f1a..50ba3599b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/inventory/fluid/FilterIconFluidInventory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/inventory/fluid/FilterIconFluidInventory.java @@ -18,7 +18,7 @@ public class FilterIconFluidInventory extends FluidInventory { }); FluidStack icon = FilterItem.getFluidIcon(stack); - if (icon != null) { + if (!icon.isEmpty()) { setFluid(0, icon); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/inventory/item/FilterItemHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/inventory/item/FilterItemHandler.java index 473f38998..06fac7180 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/inventory/item/FilterItemHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/inventory/item/FilterItemHandler.java @@ -78,7 +78,7 @@ public class FilterItemHandler extends BaseItemHandler { ItemStack icon = FilterItem.getIcon(filter); FluidStack fluidIcon = FilterItem.getFluidIcon(filter); - if (icon.isEmpty() && fluidIcon == null) { + if (icon.isEmpty() && fluidIcon.isEmpty()) { this.filters.addAll(filters); } else { tabs.add(new GridTab(filters, FilterItem.getName(filter), icon, fluidIcon)); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/FilterItem.java b/src/main/java/com/raoulvdberge/refinedstorage/item/FilterItem.java index 8f4cfca9c..a73526461 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/FilterItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/FilterItem.java @@ -172,9 +172,9 @@ public class FilterItem extends Item { } } - @Nullable + @Nonnull 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) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/ClientProxy.java b/src/main/java/com/raoulvdberge/refinedstorage/network/ClientProxy.java index 82fb9a69a..e97c9671c 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/ClientProxy.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/ClientProxy.java @@ -1,7 +1,10 @@ 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.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.CraftingSettingsScreen; import net.minecraft.client.Minecraft; @@ -26,4 +29,8 @@ public class ClientProxy { ((CraftingSettingsScreen) screen).close(); } } + + public static void onReceivedCraftingMonitorUpdateMessage(CraftingMonitorUpdateMessage message) { + BaseScreen.executeLater(CraftingMonitorScreen.class, craftingMonitor -> craftingMonitor.setTasks(message.getTasks())); + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorCancel.java.off b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorCancel.java.off deleted file mode 100644 index 3dfc0ec97..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorCancel.java.off +++ /dev/null @@ -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 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); - } - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java index c57e7f04b..f6d46f707 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java @@ -1,6 +1,8 @@ package com.raoulvdberge.refinedstorage.network; 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.StorageDiskSizeResponseMessage; 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++, GridCraftingStartRequestMessage.class, GridCraftingStartRequestMessage::encode, GridCraftingStartRequestMessage::decode, GridCraftingStartRequestMessage::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) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/craftingmonitor/CraftingMonitorCancelMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/craftingmonitor/CraftingMonitorCancelMessage.java new file mode 100644 index 000000000..5a12e1543 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/craftingmonitor/CraftingMonitorCancelMessage.java @@ -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 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); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorElements.java.off b/src/main/java/com/raoulvdberge/refinedstorage/network/craftingmonitor/CraftingMonitorUpdateMessage.java similarity index 53% rename from src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorElements.java.off rename to src/main/java/com/raoulvdberge/refinedstorage/network/craftingmonitor/CraftingMonitorUpdateMessage.java index 5e68dec24..fae963885 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorElements.java.off +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/craftingmonitor/CraftingMonitorUpdateMessage.java @@ -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.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.network.grid.IGridTab; import com.raoulvdberge.refinedstorage.apiimpl.API; -import com.raoulvdberge.refinedstorage.gui.GuiBase; -import com.raoulvdberge.refinedstorage.gui.GuiCraftingMonitor; +import com.raoulvdberge.refinedstorage.network.ClientProxy; +import com.raoulvdberge.refinedstorage.screen.CraftingMonitorScreen; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor; -import io.netty.buffer.ByteBuf; -import net.minecraftforge.fml.common.network.ByteBufUtils; -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 net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.network.NetworkEvent; import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.function.Function; +import java.util.function.Supplier; -public class MessageCraftingMonitorElements implements IMessage, IMessageHandler { +public class CraftingMonitorUpdateMessage { private ICraftingMonitor craftingMonitor; private List tasks = new ArrayList<>(); - public MessageCraftingMonitorElements() { - } - - public MessageCraftingMonitorElements(ICraftingMonitor craftingMonitor) { + public CraftingMonitorUpdateMessage(ICraftingMonitor craftingMonitor) { this.craftingMonitor = craftingMonitor; } - @Override - public void fromBytes(ByteBuf buf) { + public CraftingMonitorUpdateMessage(List tasks) { + this.tasks = tasks; + } + + public List getTasks() { + return tasks; + } + + public static CraftingMonitorUpdateMessage decode(PacketBuffer buf) { int size = buf.readInt(); + List tasks = new ArrayList<>(); + for (int i = 0; i < size; ++i) { - UUID id = UUID.fromString(ByteBufUtils.readUTF8String(buf)); + UUID id = buf.readUniqueId(); ICraftingRequestInfo requested = null; try { - requested = API.instance().createCraftingRequestInfo(ByteBufUtils.readTag(buf)); + requested = API.instance().createCraftingRequestInfo(buf.readCompoundTag()); } catch (CraftingTaskReadException e) { e.printStackTrace(); } @@ -55,24 +59,25 @@ public class MessageCraftingMonitorElements implements IMessage, IMessageHandler int elementCount = buf.readInt(); for (int j = 0; j < elementCount; ++j) { - Function factory = API.instance().getCraftingMonitorElementRegistry().get(ByteBufUtils.readUTF8String(buf)); + Function factory = API.instance().getCraftingMonitorElementRegistry().get(buf.readResourceLocation()); if (factory != null) { 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 void toBytes(ByteBuf buf) { - buf.writeInt(craftingMonitor.getTasks().size()); + public static void encode(CraftingMonitorUpdateMessage message, PacketBuffer buf) { + buf.writeInt(message.craftingMonitor.getTasks().size()); - for (ICraftingTask task : craftingMonitor.getTasks()) { - ByteBufUtils.writeUTF8String(buf, task.getId().toString()); - ByteBufUtils.writeTag(buf, task.getRequested().writeToNbt()); + for (ICraftingTask task : message.craftingMonitor.getTasks()) { + buf.writeUniqueId(task.getId()); + buf.writeCompoundTag(task.getRequested().writeToNbt()); buf.writeInt(task.getQuantity()); buf.writeLong(task.getExecutionStarted()); buf.writeInt(task.getCompletionPercentage()); @@ -82,17 +87,15 @@ public class MessageCraftingMonitorElements implements IMessage, IMessageHandler buf.writeInt(elements.size()); for (ICraftingMonitorElement element : elements) { - ByteBufUtils.writeUTF8String(buf, element.getId()); + buf.writeResourceLocation(element.getId()); element.write(buf); } } } - @Override - public IMessage onMessage(MessageCraftingMonitorElements message, MessageContext ctx) { - GuiBase.executeLater(GuiCraftingMonitor.class, craftingMonitor -> craftingMonitor.setTasks(message.tasks)); - - return null; + public static void handle(CraftingMonitorUpdateMessage message, Supplier ctx) { + ctx.get().enqueueWork(() -> ClientProxy.onReceivedCraftingMonitorUpdateMessage(message)); + ctx.get().setPacketHandled(true); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingPreviewResponseMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingPreviewResponseMessage.java index 3041114ac..c99ee6653 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingPreviewResponseMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingPreviewResponseMessage.java @@ -72,7 +72,6 @@ public class GridCraftingPreviewResponseMessage { public static void handle(GridCraftingPreviewResponseMessage message, Supplier ctx) { ctx.get().enqueueWork(() -> ClientProxy.onReceivedCraftingPreviewResponseMessage(message)); - ctx.get().setPacketHandled(true); } } \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 50bac196f..1ab3dfd7a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -7,15 +7,6 @@ public class ProxyCommon { 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(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/CraftingMonitorScreen.java similarity index 81% rename from src/main/java/com/raoulvdberge/refinedstorage/screen/GuiCraftingMonitor.java rename to src/main/java/com/raoulvdberge/refinedstorage/screen/CraftingMonitorScreen.java index a31b93b12..8ec83d578 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/CraftingMonitorScreen.java @@ -13,6 +13,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.render.CraftingMonitorElementDrawers; import com.raoulvdberge.refinedstorage.apiimpl.render.ElementDrawers; 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.TabListWidget; 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.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; import net.minecraftforge.fluids.FluidStack; import javax.annotation.Nullable; @@ -32,8 +34,8 @@ import java.util.List; import java.util.Optional; import java.util.UUID; -public class GuiCraftingMonitor extends BaseScreen { - public static class CraftingMonitorTask implements IGridTab { +public class CraftingMonitorScreen extends BaseScreen { + public static class Task implements IGridTab { private UUID id; private ICraftingRequestInfo requested; private int qty; @@ -41,7 +43,7 @@ public class GuiCraftingMonitor extends BaseScreen { private int completionPercentage; private List elements; - public CraftingMonitorTask(UUID id, ICraftingRequestInfo requested, int qty, long executionStarted, int completionPercentage, List elements) { + public Task(UUID id, ICraftingRequestInfo requested, int qty, long executionStarted, int completionPercentage, List elements) { this.id = id; this.requested = requested; this.qty = qty; @@ -64,7 +66,7 @@ public class GuiCraftingMonitor extends BaseScreen { int minutes = (totalSecs % 3600) / 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("%d%%", completionPercentage)); @@ -102,10 +104,10 @@ public class GuiCraftingMonitor extends BaseScreen { private IElementDrawers drawers = new CraftingMonitorElementDrawers(this, font, ITEM_WIDTH, ITEM_HEIGHT); - public GuiCraftingMonitor(CraftingMonitorContainer container, ICraftingMonitor craftingMonitor, PlayerInventory inventory) { - super(container, 254, 201, inventory, null); + public CraftingMonitorScreen(CraftingMonitorContainer container, PlayerInventory inventory, ITextComponent title) { + 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, () -> { IGridTab tab = getCurrentTab(); @@ -116,11 +118,10 @@ public class GuiCraftingMonitor extends BaseScreen { return tasks.indexOf(tab); }, ICraftingMonitor.TABS_PER_PAGE); - this.tabs.addListener(new TabListWidget.ITabListListener() { @Override 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); } @@ -130,6 +131,8 @@ public class GuiCraftingMonitor extends BaseScreen { craftingMonitor.onTabPageChanged(page); } }); + + this.scrollbar = new ScrollbarWidget(this, 235, 20, 12, 149); } public void setTasks(List tasks) { @@ -147,28 +150,32 @@ public class GuiCraftingMonitor extends BaseScreen { return Collections.emptyList(); } - return ((CraftingMonitorTask) tab).elements; + return ((Task) tab).elements; } @Override public void onPostInit(int x, int y) { this.tabs.init(xSize); - this.scrollbar = new ScrollbarWidget(this, 235, 20, 12, 149); - if (craftingMonitor.getRedstoneModeParameter() != null) { addSideButton(new RedstoneModeSideButton(this, craftingMonitor.getRedstoneModeParameter())); } 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 cancelAllButtonWidth = 14 + font.getStringWidth(cancelAll); 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 -> { + if (!tasks.isEmpty()) { + RS.NETWORK_HANDLER.sendToServer(new CraftingMonitorCancelMessage(null)); + } }); } @@ -223,7 +230,7 @@ public class GuiCraftingMonitor extends BaseScreen { @Nullable 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 @@ -236,12 +243,14 @@ public class GuiCraftingMonitor extends BaseScreen { blit(x, y, 0, 0, xSize, ySize); + scrollbar.render(); + tabs.drawForeground(x, y - tabs.getHeight(), mouseX, mouseY, craftingMonitor.isActive()); } @Override 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; @@ -280,26 +289,33 @@ public class GuiCraftingMonitor extends BaseScreen { tabs.drawTooltip(font, mouseX, mouseY); } - /* TODO @Override - protected void actionPerformed(GuiButton button) throws IOException { - super.actionPerformed(button); - - 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)) { + public boolean mouseClicked(double mouseX, double mouseY, int clickedButton) { + if (tabs.mouseClicked()) { 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); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/TileCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/CraftingMonitorTile.java old mode 100755 new mode 100644 similarity index 67% rename from src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/TileCraftingMonitor.java rename to src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/CraftingMonitorTile.java index d14e49923..080328f1a --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/TileCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/CraftingMonitorTile.java @@ -1,7 +1,7 @@ package com.raoulvdberge.refinedstorage.tile.craftingmonitor; 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.data.TileDataParameter; import net.minecraft.network.datasync.DataSerializers; @@ -12,8 +12,8 @@ import javax.annotation.Nonnull; import java.util.Optional; import java.util.UUID; -public class TileCraftingMonitor extends NetworkNodeTile { - public static final TileDataParameter, TileCraftingMonitor> TAB_SELECTED = new TileDataParameter<>(DataSerializers.OPTIONAL_UNIQUE_ID, Optional.empty(), t -> t.getNode().getTabSelected(), (t, v) -> { +public class CraftingMonitorTile extends NetworkNodeTile { + public static final TileDataParameter, 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())) { t.getNode().setTabSelected(Optional.empty()); } else { @@ -22,14 +22,14 @@ public class TileCraftingMonitor extends NetworkNodeTile TAB_PAGE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getTabPage(), (t, v) -> { + public static final TileDataParameter TAB_PAGE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getTabPage(), (t, v) -> { if (v >= 0) { t.getNode().setTabPage(v); t.getNode().markDirty(); } }); - public TileCraftingMonitor() { + public CraftingMonitorTile() { super(RSTiles.CRAFTING_MONITOR); dataManager.addWatchedParameter(TAB_SELECTED); @@ -38,7 +38,7 @@ public class TileCraftingMonitor extends NetworkNodeTile