From 50879c21470224e4d87c26fff6cb0f50e7b4916f Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Wed, 4 Jan 2023 17:23:39 +0100 Subject: [PATCH] feat: implement RequestGridCache --- .../api/networking/IControllerCache.java | 5 ++ .../events/MENetworkRequestableChange.java | 5 ++ .../core/sync/packets/PacketCraftRequest.java | 7 +- .../appeng/me/cache/ControllerGridCache.java | 9 +++ .../appeng/me/cache/RequestGridCache.java | 73 +++++++++++++++---- 5 files changed, 82 insertions(+), 17 deletions(-) create mode 100644 src/api/java/appeng/api/networking/events/MENetworkRequestableChange.java diff --git a/src/api/java/appeng/api/networking/IControllerCache.java b/src/api/java/appeng/api/networking/IControllerCache.java index c7a525e8..4049c6d2 100644 --- a/src/api/java/appeng/api/networking/IControllerCache.java +++ b/src/api/java/appeng/api/networking/IControllerCache.java @@ -1,5 +1,8 @@ package appeng.api.networking; +import appeng.api.config.Actionable; +import appeng.api.storage.data.IAEItemStack; + public interface IControllerCache extends IGridCache { boolean requiresChannels(); @@ -11,5 +14,7 @@ public interface IControllerCache extends IGridCache { boolean hasController(); IGridHost getController(); + + boolean requestCrafting(IAEItemStack stack, Actionable actionable); } diff --git a/src/api/java/appeng/api/networking/events/MENetworkRequestableChange.java b/src/api/java/appeng/api/networking/events/MENetworkRequestableChange.java new file mode 100644 index 00000000..13c7bae0 --- /dev/null +++ b/src/api/java/appeng/api/networking/events/MENetworkRequestableChange.java @@ -0,0 +1,5 @@ +package appeng.api.networking.events; + +public class MENetworkRequestableChange extends MENetworkEvent { + +} diff --git a/src/main/java/appeng/core/sync/packets/PacketCraftRequest.java b/src/main/java/appeng/core/sync/packets/PacketCraftRequest.java index 23e1efd4..67a27d6a 100644 --- a/src/main/java/appeng/core/sync/packets/PacketCraftRequest.java +++ b/src/main/java/appeng/core/sync/packets/PacketCraftRequest.java @@ -20,6 +20,8 @@ package appeng.core.sync.packets; import java.util.concurrent.Future; +import appeng.api.config.Actionable; +import appeng.api.networking.IControllerCache; import appeng.api.networking.IGrid; import appeng.api.networking.IGridHost; import appeng.api.networking.IGridNode; @@ -85,13 +87,12 @@ public class PacketCraftRequest extends AppEngPacket { cca.getItemToCraft().setStackSize(this.amount); final ContainerOpenContext context = cca.getOpenContext(); - if (context == null) return; IRequestGrid rg = g.getCache(IRequestGrid.class); + IControllerCache cgc = g.getCache(IControllerCache.class); IAEItemStack leftover = rg.requestItems(cca.getItemToCraft()); - if (leftover == null) { - final TileEntity te = context.getTile(); + if (leftover == null || cgc.requestCrafting(leftover, Actionable.MODULATE)) { cca.closeGui(); return; } diff --git a/src/main/java/appeng/me/cache/ControllerGridCache.java b/src/main/java/appeng/me/cache/ControllerGridCache.java index 1510f246..16839b5a 100644 --- a/src/main/java/appeng/me/cache/ControllerGridCache.java +++ b/src/main/java/appeng/me/cache/ControllerGridCache.java @@ -3,11 +3,13 @@ package appeng.me.cache; import java.util.HashSet; import java.util.Set; +import appeng.api.config.Actionable; import appeng.api.networking.IControllerCache; import appeng.api.networking.IGrid; import appeng.api.networking.IGridHost; import appeng.api.networking.IGridNode; import appeng.api.networking.IGridStorage; +import appeng.api.storage.data.IAEItemStack; import appeng.core.AEConfig; import appeng.core.features.AEFeature; import appeng.tile.legacy.TileLegacyController; @@ -86,5 +88,12 @@ public class ControllerGridCache implements IControllerCache { } return null; } + + @Override + public boolean requestCrafting(IAEItemStack stack, Actionable actionable) { + //ICraftingGrid craftingGrid = grid.getCache(ICraftingGrid.class); + //return craftingGrid.getCpus().isEmpty() && this.hasController(); + return false; // TODO: implement legacy crafting + } } diff --git a/src/main/java/appeng/me/cache/RequestGridCache.java b/src/main/java/appeng/me/cache/RequestGridCache.java index 01f165bf..5b540273 100644 --- a/src/main/java/appeng/me/cache/RequestGridCache.java +++ b/src/main/java/appeng/me/cache/RequestGridCache.java @@ -9,14 +9,13 @@ import java.util.Set; import appeng.api.config.AccessRestriction; import appeng.api.config.Actionable; -import appeng.api.networking.IControllerCache; import appeng.api.networking.IGrid; import appeng.api.networking.IGridHost; import appeng.api.networking.IGridNode; import appeng.api.networking.IGridStorage; -import appeng.api.networking.crafting.ICraftingGrid; import appeng.api.networking.events.MENetworkEventSubscribe; import appeng.api.networking.events.MENetworkPostCacheConstruction; +import appeng.api.networking.events.MENetworkRequestableChange; import appeng.api.networking.request.IRequestGrid; import appeng.api.networking.request.IRequestProvider; import appeng.api.networking.security.BaseActionSource; @@ -26,14 +25,12 @@ import appeng.api.storage.IMEInventoryHandler; import appeng.api.storage.StorageChannel; import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IItemList; -import appeng.util.item.AEItemStack; public class RequestGridCache implements IRequestGrid, IMEInventoryHandler, ICellProvider { private IGrid grid; private IStorageGrid storageGrid; - private IControllerCache controllerGrid; - private Map> requestable = new HashMap<>(); + private Map requestable = new HashMap<>(); private Set requestProviders = new HashSet<>(); public RequestGridCache(IGrid grid) { @@ -49,6 +46,7 @@ public class RequestGridCache implements IRequestGrid, IMEInventoryHandler stacks = provider.getRequestableItems(); + for (IAEItemStack stack : stacks) { + if (requestable.containsKey(stack)) { + Requestable r = requestable.get(stack); + r.addProvider(provider); + r.increaseAmount(stack.getStackSize()); + } else { + Requestable r = new Requestable(stack.getStackSize()); + r.addProvider(provider); + requestable.put(stack, r); + } + } + } + } + @Override public Set getRequestableItems() { Set list = new HashSet<>(); - for(AEItemStack stack : requestable.keySet()) { + for(IAEItemStack stack : requestable.keySet()) { list.add(stack.copy()); } return list; @@ -85,8 +107,16 @@ public class RequestGridCache implements IRequestGrid, IMEInventoryHandler getAvailableItems(IItemList out) { - Set items = requestable.keySet(); + Set items = requestable.keySet(); for (IAEItemStack s : items) { IAEItemStack stack = s.copy(); stack.reset(); - stack.setCountRequestable(1); // TODO: use a value, that makes sense + Requestable r = requestable.get(s); + stack.setCountRequestable(r.amount); out.add(stack); } return out; @@ -149,7 +180,6 @@ public class RequestGridCache implements IRequestGrid, IMEInventoryHandler providers; + public long amount; + + public Requestable(long amount) { + this.providers = new HashSet<>(); + this.amount = amount; + } + + public void addProvider(IRequestProvider provider) { + this.providers.add(provider); + } + + public void increaseAmount(long amount) { + this.amount += amount; + } + } }