From 89b6f5f2d483249fe084c43df2b58dd27dd71004 Mon Sep 17 00:00:00 2001 From: IIpragmaII <124467668+IIpragmaII@users.noreply.github.com> Date: Tue, 21 Feb 2023 20:37:12 +0100 Subject: [PATCH 01/11] Improved performance for export nodes (#1) * updated gradle * works, but more early returns should be implemented * remove executor from list of already satisfied * creates request class to track count of items to extract * match ItemStackMatchers in HashMap * use item to match in hash map * group items of all chests before checking needed items from request batch * created base class item map for request and provider batch * moved classes * removed unused methods * switched back to simulating insert before really doing it * fixed typo Co-authored-by: Korbinian Wierer <54685226+VasurTrekkson@users.noreply.github.com> * reverted whitespace changes --------- Co-authored-by: Korbinian Wierer <54685226+VasurTrekkson@users.noreply.github.com> --- .gitignore | 1 + gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../storagenetwork/api/IConnectableLink.java | 7 ++ .../storagenetwork/api/IItemStackMatcher.java | 2 + .../block/main/NetworkModule.java | 20 +++++ .../storagenetwork/block/main/TileMain.java | 73 +++++++++---------- .../CapabilityConnectableAutoIO.java | 5 ++ .../capability/CapabilityConnectableLink.java | 52 +++++++++++++ .../capability/handler/ItemStackMatcher.java | 8 +- .../lothrazar/storagenetwork/util/Batch.java | 20 +++++ .../storagenetwork/util/Request.java | 53 ++++++++++++++ .../storagenetwork/util/RequestBatch.java | 26 +++++++ .../storagenetwork/util/StackProvider.java | 21 ++++++ .../util/StackProviderBatch.java | 4 + 15 files changed, 253 insertions(+), 43 deletions(-) create mode 100644 src/main/java/com/lothrazar/storagenetwork/util/Batch.java create mode 100644 src/main/java/com/lothrazar/storagenetwork/util/Request.java create mode 100644 src/main/java/com/lothrazar/storagenetwork/util/RequestBatch.java create mode 100644 src/main/java/com/lothrazar/storagenetwork/util/StackProvider.java create mode 100644 src/main/java/com/lothrazar/storagenetwork/util/StackProviderBatch.java diff --git a/.gitignore b/.gitignore index 9ae68be8..6523ddf5 100755 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ crash-reports/ *.lnk *.jks secret.properties +.vscode diff --git a/gradle.properties b/gradle.properties index 9489fe54..c6c1cc7b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ org.gradle.daemon=false # as needed run/server.properties : online-mode=false # implementation fg.deobf("curse.maven:simple-storage-network-268495:3163007") curse_id=268495 -mod_version=1.6.2 +mod_version=1.7.0 mc_version=1.18.2 forge_version=40.1.54 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 41dfb879..ae04661e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/com/lothrazar/storagenetwork/api/IConnectableLink.java b/src/main/java/com/lothrazar/storagenetwork/api/IConnectableLink.java index 10ce6db6..f3466640 100644 --- a/src/main/java/com/lothrazar/storagenetwork/api/IConnectableLink.java +++ b/src/main/java/com/lothrazar/storagenetwork/api/IConnectableLink.java @@ -1,6 +1,9 @@ package com.lothrazar.storagenetwork.api; import java.util.List; + +import com.lothrazar.storagenetwork.util.StackProviderBatch; + import net.minecraft.world.item.ItemStack; /** @@ -80,4 +83,8 @@ public interface IConnectableLink { void setPriority(int value); void setFilter(int value, ItemStack copy); + + public ItemStack extractFromSlot(int slot, int amount, boolean simulate); + + void addToStackProviderBatch(StackProviderBatch availableItems); } diff --git a/src/main/java/com/lothrazar/storagenetwork/api/IItemStackMatcher.java b/src/main/java/com/lothrazar/storagenetwork/api/IItemStackMatcher.java index 9ff13714..d406e05e 100644 --- a/src/main/java/com/lothrazar/storagenetwork/api/IItemStackMatcher.java +++ b/src/main/java/com/lothrazar/storagenetwork/api/IItemStackMatcher.java @@ -23,4 +23,6 @@ public interface IItemStackMatcher { * @return */ boolean match(ItemStack stack); + + boolean match(IItemStackMatcher matcher); } diff --git a/src/main/java/com/lothrazar/storagenetwork/block/main/NetworkModule.java b/src/main/java/com/lothrazar/storagenetwork/block/main/NetworkModule.java index 877e5181..58d9e2b9 100644 --- a/src/main/java/com/lothrazar/storagenetwork/block/main/NetworkModule.java +++ b/src/main/java/com/lothrazar/storagenetwork/block/main/NetworkModule.java @@ -21,10 +21,14 @@ import com.lothrazar.storagenetwork.api.IItemStackMatcher; import com.lothrazar.storagenetwork.capability.handler.ItemStackMatcher; import com.lothrazar.storagenetwork.registry.StorageNetworkCapabilities; +import com.lothrazar.storagenetwork.util.StackProviderBatch; +import com.lothrazar.storagenetwork.util.RequestBatch; +import com.lothrazar.storagenetwork.util.StackProvider; import com.lothrazar.storagenetwork.util.UtilInventory; import com.lothrazar.storagenetwork.util.UtilTileEntity; import net.minecraft.core.Direction; import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; @@ -302,6 +306,22 @@ public ItemStack request(ItemStackMatcher matcher, int size, boolean simulate) { return ItemHandlerHelper.copyStackWithSize(usedMatcher.getStack(), alreadyTransferred); } + public void executeRequestBatch(RequestBatch batch) { + StackProviderBatch availableItems = new StackProviderBatch(); + for (IConnectableLink storage : getSortedConnectableStorage()) { + storage.addToStackProviderBatch(availableItems); + } + + for (Item item : batch.keySet()) { + List availableStacks = availableItems.get(item); + if (availableStacks != null) { + for (StackProvider provider : availableStacks) { + batch.extractStacks(provider.getStorage(), provider.getSlot(), item); + } + } + } + } + /** * TODO: move or refactor? */ diff --git a/src/main/java/com/lothrazar/storagenetwork/block/main/TileMain.java b/src/main/java/com/lothrazar/storagenetwork/block/main/TileMain.java index a5d75b61..5471b46f 100644 --- a/src/main/java/com/lothrazar/storagenetwork/block/main/TileMain.java +++ b/src/main/java/com/lothrazar/storagenetwork/block/main/TileMain.java @@ -1,6 +1,7 @@ package com.lothrazar.storagenetwork.block.main; import java.util.Set; + import com.lothrazar.storagenetwork.StorageNetworkMod; import com.lothrazar.storagenetwork.api.DimPos; import com.lothrazar.storagenetwork.api.EnumStorageDirection; @@ -10,6 +11,8 @@ import com.lothrazar.storagenetwork.capability.handler.ItemStackMatcher; import com.lothrazar.storagenetwork.registry.SsnRegistry; import com.lothrazar.storagenetwork.registry.StorageNetworkCapabilities; +import com.lothrazar.storagenetwork.util.Request; +import com.lothrazar.storagenetwork.util.RequestBatch; import com.lothrazar.storagenetwork.util.UtilInventory; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; @@ -68,6 +71,10 @@ public ItemStack request(ItemStackMatcher matcher, int size, boolean simulate) { return result; } + public void executeRequestBatch(RequestBatch batch) { + nw.executeRequestBatch(batch); + } + private DimPos getDimPos() { return new DimPos(level, worldPosition); } @@ -178,12 +185,15 @@ private void updateProcess() { */ private void updateExports() { Set conSet = nw.getConnectables(); + RequestBatch requestBatch = new RequestBatch(); + for (IConnectable connectable : conSet) { if (connectable == null || connectable.getPos() == null) { - // StorageNetwork.log("null connectable or pos : updateExports() "); + // StorageNetwork.log("null connectable or pos : updateExports() "); continue; } - IConnectableItemAutoIO storage = connectable.getPos().getCapability(StorageNetworkCapabilities.CONNECTABLE_AUTO_IO, null); + IConnectableItemAutoIO storage = connectable.getPos() + .getCapability(StorageNetworkCapabilities.CONNECTABLE_AUTO_IO, null); if (storage == null) { continue; } @@ -199,7 +209,7 @@ private void updateExports() { if (storage.needsRedstone()) { boolean power = level.hasNeighborSignal(connectable.getPos().getBlockPos()); if (power == false) { - // StorageNetwork.log(power + " Export pow here ; needs yes skip me"); + // StorageNetwork.log(power + " Export pow here ; needs yes skip me"); continue; } } @@ -207,58 +217,41 @@ private void updateExports() { if (matcher.getStack().isEmpty()) { continue; } - //default amt to request. can be overriden by other upgrades - int amtToRequest = storage.getTransferRate(); - //check operations upgrade for export + + Request request = new Request(storage); + // default amt to request. can be overriden by other upgrades + // check operations upgrade for export boolean stockMode = storage.isStockMode(); if (stockMode) { StorageNetworkMod.log("stockMode == TRUE ; updateExports: attempt " + matcher.getStack()); - //STOCK upgrade means + // STOCK upgrade means try { - BlockEntity tileEntity = level.getBlockEntity(connectable.getPos().getBlockPos().relative(storage.facingInventory())); - IItemHandler targetInventory = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null).orElse(null); - //request with false to see how many even exist in there. - int stillNeeds = UtilInventory.containsAtLeastHowManyNeeded(targetInventory, matcher.getStack(), matcher.getStack().getCount()); + BlockEntity tileEntity = level + .getBlockEntity(connectable.getPos().getBlockPos().relative(storage.facingInventory())); + IItemHandler targetInventory = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, null) + .orElse(null); + // request with false to see how many even exist in there. + int stillNeeds = UtilInventory.containsAtLeastHowManyNeeded(targetInventory, matcher.getStack(), + matcher.getStack().getCount()); if (stillNeeds == 0) { - //they dont need any more, they have the stock they need + // they dont need any more, they have the stock they need StorageNetworkMod.log("stockMode continnue; canc"); continue; } - amtToRequest = Math.min(stillNeeds, amtToRequest); - StorageNetworkMod.log("updateExports stock mode edited value: amtToRequest = " + amtToRequest); - } - catch (Throwable e) { + request.setCount(Math.min(stillNeeds, request.getCount())); + StorageNetworkMod.log("updateExports stock mode edited value: amtToRequest = " + request.getCount()); + } catch (Throwable e) { StorageNetworkMod.LOGGER.error("Error thrown from a connected block" + e); } } - if (matcher.getStack().isEmpty() || amtToRequest == 0) { - //either the thing is empty or we are requesting none - continue; - } - ItemStack requestedStack = this.request((ItemStackMatcher) matcher, amtToRequest, true); - if (requestedStack.isEmpty()) { - continue; - } - // StorageNetwork.log("updateExports: found requestedStack = " + requestedStack); - // The stack is available in the network, let's simulate inserting it into the storage - ItemStack insertedSim = storage.insertStack(requestedStack, true); - // Determine the amount of items moved in the stack - if (!insertedSim.isEmpty()) { - int movedItems = requestedStack.getCount() - insertedSim.getCount(); - if (movedItems <= 0) { - continue; - } - requestedStack.setCount(movedItems); - } - // Alright, some items got moved in the simulation. Let's do it for real this time. - ItemStack realExtractedStack = request(new ItemStackMatcher(requestedStack, false, true), requestedStack.getCount(), false); - if (realExtractedStack.isEmpty()) { + if (matcher.getStack().isEmpty() || request.getCount() == 0) { + // either the thing is empty or we are requesting none continue; } - storage.insertStack(realExtractedStack, false); - break; + requestBatch.put(matcher.getStack().getItem(), request); } } + executeRequestBatch(requestBatch); } public static void clientTick(Level level, BlockPos blockPos, BlockState blockState, TileMain tile) {} diff --git a/src/main/java/com/lothrazar/storagenetwork/capability/CapabilityConnectableAutoIO.java b/src/main/java/com/lothrazar/storagenetwork/capability/CapabilityConnectableAutoIO.java index bebf8741..1ddd2fc5 100644 --- a/src/main/java/com/lothrazar/storagenetwork/capability/CapabilityConnectableAutoIO.java +++ b/src/main/java/com/lothrazar/storagenetwork/capability/CapabilityConnectableAutoIO.java @@ -364,4 +364,9 @@ public Direction facingInventory() { public UpgradesItemStackHandler getUpgrades() { return upgrades; } + + public void extractFromSlot(int slot){ + + } + } diff --git a/src/main/java/com/lothrazar/storagenetwork/capability/CapabilityConnectableLink.java b/src/main/java/com/lothrazar/storagenetwork/capability/CapabilityConnectableLink.java index 1faec806..c1939fca 100644 --- a/src/main/java/com/lothrazar/storagenetwork/capability/CapabilityConnectableLink.java +++ b/src/main/java/com/lothrazar/storagenetwork/capability/CapabilityConnectableLink.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; + import com.lothrazar.storagenetwork.StorageNetworkMod; import com.lothrazar.storagenetwork.api.DimPos; import com.lothrazar.storagenetwork.api.EnumStorageDirection; @@ -11,6 +12,9 @@ import com.lothrazar.storagenetwork.api.IItemStackMatcher; import com.lothrazar.storagenetwork.capability.handler.FilterItemStackHandler; import com.lothrazar.storagenetwork.registry.StorageNetworkCapabilities; +import com.lothrazar.storagenetwork.util.StackProvider; +import com.lothrazar.storagenetwork.util.StackProviderBatch; + import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.item.ItemStack; @@ -264,4 +268,52 @@ public void deserializeNBT(CompoundTag nbt) { } } } + + public ItemStack extractFromSlot(int slot, int amount, boolean simulate) { + DimPos inventoryPos = connectable.getPos().offset(inventoryFace); + // Test whether the connected block has the IItemHandler capability + IItemHandler itemHandler = inventoryPos.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, + inventoryFace.getOpposite()); + if (itemHandler == null) { + return ItemStack.EMPTY; + } + return itemHandler.extractItem(slot, amount, simulate); + } + + public void addToStackProviderBatch(StackProviderBatch availableItems) { + // If this storage is configured to only export from the network, do not + // extract from the storage, but abort immediately. + if (filterDirection == EnumStorageDirection.IN) { + return; + } + if (inventoryFace == null) { + return; + } + DimPos inventoryPos = connectable.getPos().offset(inventoryFace); + // Test whether the connected block has the IItemHandler capability + IItemHandler itemHandler = inventoryPos.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, + inventoryFace.getOpposite()); + if (itemHandler == null) { + return; + } + // if (itemHandler instanceof ExchangeItemStackHandler) { + // StorageNetwork.log("cannot loop back a network extract into + // ExchangeItemStackHandler"); + // return ItemStack.EMPTY; + // } + for (int slot = 0; slot < itemHandler.getSlots(); slot++) { + // force simulate: allow them to not let me see the stack, also dont extract + // since it might steal/dupe + ItemStack stack = itemHandler.extractItem(slot, 1, true); + if (stack == null || stack.isEmpty()) { + continue; + } + // Ignore stacks that are filtered + if (filters.isStackFiltered(stack)) { + continue; + } + StackProvider provider = new StackProvider(this, slot); + availableItems.put(stack.getItem(), provider); + } + } } diff --git a/src/main/java/com/lothrazar/storagenetwork/capability/handler/ItemStackMatcher.java b/src/main/java/com/lothrazar/storagenetwork/capability/handler/ItemStackMatcher.java index 6ca762dd..873ff7e5 100644 --- a/src/main/java/com/lothrazar/storagenetwork/capability/handler/ItemStackMatcher.java +++ b/src/main/java/com/lothrazar/storagenetwork/capability/handler/ItemStackMatcher.java @@ -20,7 +20,8 @@ public ItemStackMatcher(ItemStack stack, boolean ore, boolean nbt) { this.nbt = nbt; } - private ItemStackMatcher() {} + private ItemStackMatcher() { + } public void readFromNBT(CompoundTag compound) { CompoundTag c = (CompoundTag) compound.get("stack"); @@ -84,4 +85,9 @@ public boolean match(ItemStack stackIn) { } return stackIn.getItem() == stack.getItem(); } + + public boolean match(IItemStackMatcher matcher) { + ItemStack stack = matcher.getStack(); + return match(stack); + } } diff --git a/src/main/java/com/lothrazar/storagenetwork/util/Batch.java b/src/main/java/com/lothrazar/storagenetwork/util/Batch.java new file mode 100644 index 00000000..5d8efa4f --- /dev/null +++ b/src/main/java/com/lothrazar/storagenetwork/util/Batch.java @@ -0,0 +1,20 @@ +package com.lothrazar.storagenetwork.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import net.minecraft.world.item.Item; + +public class Batch extends HashMap> { + public List put(Item item, K object) { + if (containsKey(item)) { + List matchingList = super.get(item); + matchingList.add(object); + return matchingList; + } + List newList = new ArrayList(); + newList.add(object); + return super.put(item, newList); + } +} diff --git a/src/main/java/com/lothrazar/storagenetwork/util/Request.java b/src/main/java/com/lothrazar/storagenetwork/util/Request.java new file mode 100644 index 00000000..03ea4e87 --- /dev/null +++ b/src/main/java/com/lothrazar/storagenetwork/util/Request.java @@ -0,0 +1,53 @@ +package com.lothrazar.storagenetwork.util; + +import com.lothrazar.storagenetwork.api.IConnectableItemAutoIO; +import com.lothrazar.storagenetwork.api.IConnectableLink; + +import net.minecraft.world.item.ItemStack; + +public class Request { + private Integer count = 0; + private IConnectableItemAutoIO storage; + + public Request(IConnectableItemAutoIO storage) { + this.count = storage.getTransferRate(); + this.storage = storage; + } + + public void setCount(Integer count) { + this.count = count; + } + + public Integer getCount() { + return count; + } + + public Boolean insertStack(IConnectableLink providerStorage, int slot) { + ItemStack simulatedExtractedStack = providerStorage.extractFromSlot(slot, getCount(), true); + + if (simulatedExtractedStack.isEmpty()) { + return false; + } + + int movedItems = 0; + ItemStack simulatedInsertedStack = storage.insertStack(simulatedExtractedStack, true); + if (simulatedInsertedStack.isEmpty()) { + movedItems = getCount(); + setCount(0); + } else { + movedItems = simulatedExtractedStack.getCount() - simulatedInsertedStack.getCount(); + setCount(movedItems); + } + + // real extraction + + ItemStack realExtractedStack = providerStorage.extractFromSlot(slot, movedItems, false); + storage.insertStack(realExtractedStack, false); + + // Determine the amount of items moved in the stack + if (getCount() == 0) { + return true; + } + return false; + } +} diff --git a/src/main/java/com/lothrazar/storagenetwork/util/RequestBatch.java b/src/main/java/com/lothrazar/storagenetwork/util/RequestBatch.java new file mode 100644 index 00000000..978582bd --- /dev/null +++ b/src/main/java/com/lothrazar/storagenetwork/util/RequestBatch.java @@ -0,0 +1,26 @@ +package com.lothrazar.storagenetwork.util; + +import java.util.ArrayList; +import java.util.List; + +import com.lothrazar.storagenetwork.api.IConnectableLink; + +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +public class RequestBatch extends Batch { + public void extractStacks(IConnectableLink providerStorage, Integer slot, Item item) { + List requests = get(item); + List remainingRequests = new ArrayList(); + for (Request request : requests) { + if (!request.insertStack(providerStorage, slot)) { + remainingRequests.add(request); + } + ItemStack stack = providerStorage.extractFromSlot(slot, 1, true); + if (stack.isEmpty()) { + return; + } + } + put(item, remainingRequests); + } +} diff --git a/src/main/java/com/lothrazar/storagenetwork/util/StackProvider.java b/src/main/java/com/lothrazar/storagenetwork/util/StackProvider.java new file mode 100644 index 00000000..dc58734f --- /dev/null +++ b/src/main/java/com/lothrazar/storagenetwork/util/StackProvider.java @@ -0,0 +1,21 @@ +package com.lothrazar.storagenetwork.util; + +import com.lothrazar.storagenetwork.api.IConnectableLink; + +public class StackProvider { + IConnectableLink storage; + int slot; + + public StackProvider(IConnectableLink storage, int slot) { + this.storage = storage; + this.slot = slot; + } + + public IConnectableLink getStorage() { + return storage; + } + + public int getSlot() { + return slot; + } +} diff --git a/src/main/java/com/lothrazar/storagenetwork/util/StackProviderBatch.java b/src/main/java/com/lothrazar/storagenetwork/util/StackProviderBatch.java new file mode 100644 index 00000000..ad03cf08 --- /dev/null +++ b/src/main/java/com/lothrazar/storagenetwork/util/StackProviderBatch.java @@ -0,0 +1,4 @@ +package com.lothrazar.storagenetwork.util; + +public class StackProviderBatch extends Batch { +} From baeeb5dd30d7a6137ed079403d06094310e5c3fa Mon Sep 17 00:00:00 2001 From: Korbinian Wierer <54685226+VasurTrekkson@users.noreply.github.com> Date: Tue, 21 Feb 2023 21:38:36 +0100 Subject: [PATCH 02/11] PrioritySort (#2) --- .../storagenetwork/block/main/TileMain.java | 1 + .../storagenetwork/util/Request.java | 4 ++ .../storagenetwork/util/RequestBatch.java | 37 +++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/src/main/java/com/lothrazar/storagenetwork/block/main/TileMain.java b/src/main/java/com/lothrazar/storagenetwork/block/main/TileMain.java index 5471b46f..b683db9e 100644 --- a/src/main/java/com/lothrazar/storagenetwork/block/main/TileMain.java +++ b/src/main/java/com/lothrazar/storagenetwork/block/main/TileMain.java @@ -72,6 +72,7 @@ public ItemStack request(ItemStackMatcher matcher, int size, boolean simulate) { } public void executeRequestBatch(RequestBatch batch) { + batch.sort(); nw.executeRequestBatch(batch); } diff --git a/src/main/java/com/lothrazar/storagenetwork/util/Request.java b/src/main/java/com/lothrazar/storagenetwork/util/Request.java index 03ea4e87..6d6ffb81 100644 --- a/src/main/java/com/lothrazar/storagenetwork/util/Request.java +++ b/src/main/java/com/lothrazar/storagenetwork/util/Request.java @@ -22,6 +22,10 @@ public Integer getCount() { return count; } + public int getPriority() { + return storage.getPriority(); + } + public Boolean insertStack(IConnectableLink providerStorage, int slot) { ItemStack simulatedExtractedStack = providerStorage.extractFromSlot(slot, getCount(), true); diff --git a/src/main/java/com/lothrazar/storagenetwork/util/RequestBatch.java b/src/main/java/com/lothrazar/storagenetwork/util/RequestBatch.java index 978582bd..a650b8dc 100644 --- a/src/main/java/com/lothrazar/storagenetwork/util/RequestBatch.java +++ b/src/main/java/com/lothrazar/storagenetwork/util/RequestBatch.java @@ -1,6 +1,7 @@ package com.lothrazar.storagenetwork.util; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import com.lothrazar.storagenetwork.api.IConnectableLink; @@ -23,4 +24,40 @@ public void extractStacks(IConnectableLink providerStorage, Integer slot, Item i } put(item, remainingRequests); } + + public void sort() { + Collection> requests = this.values(); + for(List requestList : requests) { + quickSort(requestList, 0, requestList.size() - 1); + } + } + + private void quickSort(List requestList, int start, int end) { + if (start < end) { + int partitionInd = partition(requestList, start, end); + quickSort(requestList, start, partitionInd - 1); + quickSort(requestList, partitionInd + 1, end); + } + } + + private int partition(List requestList, int start, int end) { + int pivot = requestList.get(end).getPriority(); + int i = (start - 1); + for (int j = start; j < end; j++) { + if (requestList.get(j).getPriority() <= pivot) { + i++; + + Request highTemp = requestList.get(i); + Request lowTemp = requestList.get(j); + requestList.set(i, lowTemp); + requestList.set(j, highTemp); + } + } + Request swapTemp = requestList.get(i + 1); + Request temp = requestList.get(end); + requestList.set(i + 1, temp); + requestList.set(end, swapTemp); + + return i + 1; + } } From c4f808eed31cc14b8fb9fc51f603f0e7fcff9d8b Mon Sep 17 00:00:00 2001 From: Olivier Demers Date: Wed, 8 Mar 2023 15:25:10 -0500 Subject: [PATCH 03/11] Fixed recipes not showing when pressing the JEI recipe key --- .../storagenetwork/block/inventory/ScreenNetworkInventory.java | 2 +- .../storagenetwork/block/request/ScreenNetworkTable.java | 2 +- .../storagenetwork/item/remote/ScreenNetworkCraftingRemote.java | 2 +- .../storagenetwork/item/remote/ScreenNetworkRemote.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/lothrazar/storagenetwork/block/inventory/ScreenNetworkInventory.java b/src/main/java/com/lothrazar/storagenetwork/block/inventory/ScreenNetworkInventory.java index b574d9be..ce69b735 100644 --- a/src/main/java/com/lothrazar/storagenetwork/block/inventory/ScreenNetworkInventory.java +++ b/src/main/java/com/lothrazar/storagenetwork/block/inventory/ScreenNetworkInventory.java @@ -195,7 +195,7 @@ public boolean keyPressed(int keyCode, int scanCode, int b) { } return true; } - else if (network.stackUnderMouse.isEmpty()) { + else if (!network.stackUnderMouse.isEmpty()) { try { JeiHooks.testJeiKeybind(mouseKey, network.stackUnderMouse); } diff --git a/src/main/java/com/lothrazar/storagenetwork/block/request/ScreenNetworkTable.java b/src/main/java/com/lothrazar/storagenetwork/block/request/ScreenNetworkTable.java index 33eac251..789b9f85 100644 --- a/src/main/java/com/lothrazar/storagenetwork/block/request/ScreenNetworkTable.java +++ b/src/main/java/com/lothrazar/storagenetwork/block/request/ScreenNetworkTable.java @@ -205,7 +205,7 @@ public boolean keyPressed(int keyCode, int scanCode, int b) { } return true; } - else if (network.stackUnderMouse.isEmpty()) { + else if (!network.stackUnderMouse.isEmpty()) { try { JeiHooks.testJeiKeybind(mouseKey, network.stackUnderMouse); } diff --git a/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkCraftingRemote.java b/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkCraftingRemote.java index ce62ed7d..61eb9245 100644 --- a/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkCraftingRemote.java +++ b/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkCraftingRemote.java @@ -201,7 +201,7 @@ public boolean keyPressed(int keyCode, int scanCode, int b) { network.searchBar.keyPressed(keyCode, scanCode, b); return true; } - else if (network.stackUnderMouse.isEmpty()) { + else if (!network.stackUnderMouse.isEmpty()) { try { JeiHooks.testJeiKeybind(mouseKey, network.stackUnderMouse); } diff --git a/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkRemote.java b/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkRemote.java index 011b633c..1d590079 100644 --- a/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkRemote.java +++ b/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkRemote.java @@ -177,7 +177,7 @@ public boolean keyPressed(int keyCode, int scanCode, int b) { network.searchBar.keyPressed(keyCode, scanCode, b); return true; } - else if (network.stackUnderMouse.isEmpty()) { + else if (!network.stackUnderMouse.isEmpty()) { try { JeiHooks.testJeiKeybind(mouseKey, network.stackUnderMouse); } From 31a3e41fcee3bf687f3d5c57e6862796bdea3e82 Mon Sep 17 00:00:00 2001 From: Olivier Demers Date: Wed, 8 Mar 2023 15:28:19 -0500 Subject: [PATCH 04/11] Fix for JEI 10.x Showing recipes will only work with default keybinds: u for usages, r for recipes --- build.gradle | 7 +++-- gradle.properties | 2 +- .../storagenetwork/jei/JeiHooks.java | 28 +++++++++++-------- .../storagenetwork/jei/JeiPlugin.java | 7 +++++ 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index bb195099..972c5349 100755 --- a/build.gradle +++ b/build.gradle @@ -73,8 +73,11 @@ dependencies { // that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied. // The userdev artifact is a special name and will get all sorts of transformations applied to it. minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}" - - implementation fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}") + + compileOnly(fg.deobf("mezz.jei:jei-${mc_version}-common-api:${jei_version}")) + compileOnly(fg.deobf("mezz.jei:jei-${mc_version}-forge-api:${jei_version}")) + runtimeOnly(fg.deobf("mezz.jei:jei-${mc_version}-forge:${jei_version}")) + implementation fg.deobf("top.theillusivec4.curios:curios-forge:${mc_version}-${curios_version}") compileOnly fg.deobf("vazkii.patchouli:Patchouli:${mc_version}-${patchouli_version}:api") diff --git a/gradle.properties b/gradle.properties index 9489fe54..6db8e570 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ forge_version=40.1.54 # optional dependencies -jei_version=9.7.0.209 +jei_version=10.2.1.1002 patchouli_version=71.1 curios_version=5.0.7.1 diff --git a/src/main/java/com/lothrazar/storagenetwork/jei/JeiHooks.java b/src/main/java/com/lothrazar/storagenetwork/jei/JeiHooks.java index 021b1695..9c32f08e 100644 --- a/src/main/java/com/lothrazar/storagenetwork/jei/JeiHooks.java +++ b/src/main/java/com/lothrazar/storagenetwork/jei/JeiHooks.java @@ -4,13 +4,16 @@ import com.mojang.blaze3d.platform.InputConstants; import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.recipe.RecipeIngredientRole; -import mezz.jei.config.KeyBindings; +import mezz.jei.api.runtime.IJeiRuntime; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraftforge.client.extensions.IForgeKeyMapping; import net.minecraftforge.fml.ModList; public class JeiHooks { + private static IJeiRuntime jeiRuntime; + private static boolean isJeiLoaded() { return ModList.get().isLoaded("jei"); } @@ -22,11 +25,15 @@ public static String getFilterText() { } } catch (Exception e) { - StorageNetworkMod.LOGGER.info(" mezz.jei.Internal not found " + e); + StorageNetworkMod.LOGGER.info(" runtime not found " + e); } return ""; } + public static void setJeiRuntime(IJeiRuntime jeiRuntime) { + JeiHooks.jeiRuntime = jeiRuntime; + } + /** * so if JEI is not loaded, this will be called but then its an empty FN * @@ -39,16 +46,16 @@ public static void setFilterText(String s) { } } catch (Exception e) { - StorageNetworkMod.LOGGER.info(" mezz.jei.Internal not found " + e); + StorageNetworkMod.LOGGER.info(" runtime not found " + e); } } private static void setJeiTextInternal(String s) { - mezz.jei.Internal.getRuntime().getIngredientFilter().setFilterText(s); + jeiRuntime.getIngredientFilter().setFilterText(s); } private static String getJeiTextInternal() { - return mezz.jei.Internal.getRuntime().getIngredientFilter().getFilterText(); + return jeiRuntime.getIngredientFilter().getFilterText(); } public static void testJeiKeybind(InputConstants.Key keyCode, ItemStack stackUnderMouse) { @@ -58,14 +65,13 @@ public static void testJeiKeybind(InputConstants.Key keyCode, ItemStack stackUnd if (stackUnderMouse.is(Items.AIR)) { return; } - final boolean showRecipe = KeyBindings.showRecipe.get(0).isActiveAndMatches(keyCode) - || KeyBindings.showRecipe.get(1).isActiveAndMatches(keyCode); - final boolean showUses = KeyBindings.showUses.get(0).isActiveAndMatches(keyCode) - || KeyBindings.showUses.get(1).isActiveAndMatches(keyCode); + + final boolean showRecipe = InputConstants.KEY_R == keyCode.getValue(); + final boolean showUses = InputConstants.KEY_U == keyCode.getValue(); if (showRecipe || showUses) { RecipeIngredientRole mode = showRecipe ? RecipeIngredientRole.OUTPUT : RecipeIngredientRole.INPUT; - var focus = mezz.jei.Internal.getRuntime().getJeiHelpers().getFocusFactory().createFocus(mode, VanillaTypes.ITEM_STACK, stackUnderMouse); - mezz.jei.Internal.getRuntime().getRecipesGui().show(focus); + var focus = jeiRuntime.getJeiHelpers().getFocusFactory().createFocus(mode, VanillaTypes.ITEM_STACK, stackUnderMouse); + jeiRuntime.getRecipesGui().show(focus); } } } diff --git a/src/main/java/com/lothrazar/storagenetwork/jei/JeiPlugin.java b/src/main/java/com/lothrazar/storagenetwork/jei/JeiPlugin.java index 2a77e39b..74a98bb9 100644 --- a/src/main/java/com/lothrazar/storagenetwork/jei/JeiPlugin.java +++ b/src/main/java/com/lothrazar/storagenetwork/jei/JeiPlugin.java @@ -5,6 +5,7 @@ import com.lothrazar.storagenetwork.item.remote.ContainerNetworkCraftingRemote; import mezz.jei.api.IModPlugin; import mezz.jei.api.registration.IRecipeTransferRegistration; +import mezz.jei.api.runtime.IJeiRuntime; import net.minecraft.resources.ResourceLocation; @mezz.jei.api.JeiPlugin @@ -20,4 +21,10 @@ public void registerRecipeTransferHandlers(IRecipeTransferRegistration registrat registration.addUniversalRecipeTransferHandler(new RequestRecipeTransferHandler<>(ContainerNetworkCraftingTable.class)); registration.addUniversalRecipeTransferHandler(new RequestRecipeTransferHandler<>(ContainerNetworkCraftingRemote.class)); } + + @Override + public void onRuntimeAvailable(IJeiRuntime jeiRuntime) { + IModPlugin.super.onRuntimeAvailable(jeiRuntime); + JeiHooks.setJeiRuntime(jeiRuntime); + } } From f4fd6e0906b066b344ca1331c928903cf03bd476 Mon Sep 17 00:00:00 2001 From: Olivier Demers Date: Wed, 8 Mar 2023 15:30:55 -0500 Subject: [PATCH 05/11] Revert "Fix for JEI 10.x" creating other branch --- build.gradle | 7 ++--- gradle.properties | 2 +- .../storagenetwork/jei/JeiHooks.java | 28 ++++++++----------- .../storagenetwork/jei/JeiPlugin.java | 7 ----- 4 files changed, 14 insertions(+), 30 deletions(-) diff --git a/build.gradle b/build.gradle index 972c5349..bb195099 100755 --- a/build.gradle +++ b/build.gradle @@ -73,11 +73,8 @@ dependencies { // that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied. // The userdev artifact is a special name and will get all sorts of transformations applied to it. minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}" - - compileOnly(fg.deobf("mezz.jei:jei-${mc_version}-common-api:${jei_version}")) - compileOnly(fg.deobf("mezz.jei:jei-${mc_version}-forge-api:${jei_version}")) - runtimeOnly(fg.deobf("mezz.jei:jei-${mc_version}-forge:${jei_version}")) - + + implementation fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}") implementation fg.deobf("top.theillusivec4.curios:curios-forge:${mc_version}-${curios_version}") compileOnly fg.deobf("vazkii.patchouli:Patchouli:${mc_version}-${patchouli_version}:api") diff --git a/gradle.properties b/gradle.properties index 6db8e570..9489fe54 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ forge_version=40.1.54 # optional dependencies -jei_version=10.2.1.1002 +jei_version=9.7.0.209 patchouli_version=71.1 curios_version=5.0.7.1 diff --git a/src/main/java/com/lothrazar/storagenetwork/jei/JeiHooks.java b/src/main/java/com/lothrazar/storagenetwork/jei/JeiHooks.java index 9c32f08e..021b1695 100644 --- a/src/main/java/com/lothrazar/storagenetwork/jei/JeiHooks.java +++ b/src/main/java/com/lothrazar/storagenetwork/jei/JeiHooks.java @@ -4,16 +4,13 @@ import com.mojang.blaze3d.platform.InputConstants; import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.recipe.RecipeIngredientRole; -import mezz.jei.api.runtime.IJeiRuntime; +import mezz.jei.config.KeyBindings; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -import net.minecraftforge.client.extensions.IForgeKeyMapping; import net.minecraftforge.fml.ModList; public class JeiHooks { - private static IJeiRuntime jeiRuntime; - private static boolean isJeiLoaded() { return ModList.get().isLoaded("jei"); } @@ -25,15 +22,11 @@ public static String getFilterText() { } } catch (Exception e) { - StorageNetworkMod.LOGGER.info(" runtime not found " + e); + StorageNetworkMod.LOGGER.info(" mezz.jei.Internal not found " + e); } return ""; } - public static void setJeiRuntime(IJeiRuntime jeiRuntime) { - JeiHooks.jeiRuntime = jeiRuntime; - } - /** * so if JEI is not loaded, this will be called but then its an empty FN * @@ -46,16 +39,16 @@ public static void setFilterText(String s) { } } catch (Exception e) { - StorageNetworkMod.LOGGER.info(" runtime not found " + e); + StorageNetworkMod.LOGGER.info(" mezz.jei.Internal not found " + e); } } private static void setJeiTextInternal(String s) { - jeiRuntime.getIngredientFilter().setFilterText(s); + mezz.jei.Internal.getRuntime().getIngredientFilter().setFilterText(s); } private static String getJeiTextInternal() { - return jeiRuntime.getIngredientFilter().getFilterText(); + return mezz.jei.Internal.getRuntime().getIngredientFilter().getFilterText(); } public static void testJeiKeybind(InputConstants.Key keyCode, ItemStack stackUnderMouse) { @@ -65,13 +58,14 @@ public static void testJeiKeybind(InputConstants.Key keyCode, ItemStack stackUnd if (stackUnderMouse.is(Items.AIR)) { return; } - - final boolean showRecipe = InputConstants.KEY_R == keyCode.getValue(); - final boolean showUses = InputConstants.KEY_U == keyCode.getValue(); + final boolean showRecipe = KeyBindings.showRecipe.get(0).isActiveAndMatches(keyCode) + || KeyBindings.showRecipe.get(1).isActiveAndMatches(keyCode); + final boolean showUses = KeyBindings.showUses.get(0).isActiveAndMatches(keyCode) + || KeyBindings.showUses.get(1).isActiveAndMatches(keyCode); if (showRecipe || showUses) { RecipeIngredientRole mode = showRecipe ? RecipeIngredientRole.OUTPUT : RecipeIngredientRole.INPUT; - var focus = jeiRuntime.getJeiHelpers().getFocusFactory().createFocus(mode, VanillaTypes.ITEM_STACK, stackUnderMouse); - jeiRuntime.getRecipesGui().show(focus); + var focus = mezz.jei.Internal.getRuntime().getJeiHelpers().getFocusFactory().createFocus(mode, VanillaTypes.ITEM_STACK, stackUnderMouse); + mezz.jei.Internal.getRuntime().getRecipesGui().show(focus); } } } diff --git a/src/main/java/com/lothrazar/storagenetwork/jei/JeiPlugin.java b/src/main/java/com/lothrazar/storagenetwork/jei/JeiPlugin.java index 74a98bb9..2a77e39b 100644 --- a/src/main/java/com/lothrazar/storagenetwork/jei/JeiPlugin.java +++ b/src/main/java/com/lothrazar/storagenetwork/jei/JeiPlugin.java @@ -5,7 +5,6 @@ import com.lothrazar.storagenetwork.item.remote.ContainerNetworkCraftingRemote; import mezz.jei.api.IModPlugin; import mezz.jei.api.registration.IRecipeTransferRegistration; -import mezz.jei.api.runtime.IJeiRuntime; import net.minecraft.resources.ResourceLocation; @mezz.jei.api.JeiPlugin @@ -21,10 +20,4 @@ public void registerRecipeTransferHandlers(IRecipeTransferRegistration registrat registration.addUniversalRecipeTransferHandler(new RequestRecipeTransferHandler<>(ContainerNetworkCraftingTable.class)); registration.addUniversalRecipeTransferHandler(new RequestRecipeTransferHandler<>(ContainerNetworkCraftingRemote.class)); } - - @Override - public void onRuntimeAvailable(IJeiRuntime jeiRuntime) { - IModPlugin.super.onRuntimeAvailable(jeiRuntime); - JeiHooks.setJeiRuntime(jeiRuntime); - } } From c1a047f95bf501a83ae559679a91a984d218eff4 Mon Sep 17 00:00:00 2001 From: DanielN Date: Tue, 14 Mar 2023 11:06:47 +0100 Subject: [PATCH 06/11] fix priority german translation --- src/main/resources/assets/storagenetwork/lang/de_de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/assets/storagenetwork/lang/de_de.json b/src/main/resources/assets/storagenetwork/lang/de_de.json index d1e1dd34..5ab5f742 100644 --- a/src/main/resources/assets/storagenetwork/lang/de_de.json +++ b/src/main/resources/assets/storagenetwork/lang/de_de.json @@ -44,7 +44,7 @@ "gui.storagenetwork.sort": "Sortierrichtung", "gui.storagenetwork.priority.up": "Priorität herabstufen (kleiner geht vor)", - "gui.storagenetwork.priority.down": "Priorität erhöhen (größer geht vor)", + "gui.storagenetwork.priority.down": "Priorität erhöhen (kleiner geht vor)", "gui.storagenetwork.req.tooltip_name": "Nach Name sortieren", "gui.storagenetwork.req.tooltip_mod": "Nach Mod sortieren", From b4feafc9170a2145f68a47502f6db1519dc82e77 Mon Sep 17 00:00:00 2001 From: Eugene <59817721+SKZGx@users.noreply.github.com> Date: Thu, 27 Apr 2023 19:56:25 +0300 Subject: [PATCH 07/11] Create uk_ua.json --- .../assets/storagenetwork/lang/uk_ua.json | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 src/main/resources/assets/storagenetwork/lang/uk_ua.json diff --git a/src/main/resources/assets/storagenetwork/lang/uk_ua.json b/src/main/resources/assets/storagenetwork/lang/uk_ua.json new file mode 100644 index 00000000..205b08b3 --- /dev/null +++ b/src/main/resources/assets/storagenetwork/lang/uk_ua.json @@ -0,0 +1,146 @@ +{ + "itemGroup.storagenetwork": "Проста мережа зберігання", + "item.storagenetwork.network_book": "Керівництво по мережам", + "storagenetwork.network_book.landing_text": "Проста мережа сховищ керуватиме всіма вашими запасами. Дивіться $(l:gs_setup)Початок роботи$(/l). ", + "block.storagenetwork.kabel": "Кабель", + "block.storagenetwork.kabel.guide": "Основний мережевий кабель підключається лише до мережевих блоків.", + "block.storagenetwork.storage_kabel": "Мережевий кабель", + "block.storagenetwork.storage_kabel.guide": "Кожен мережевий кабель підключає лише один інвентар до мережі. Це основна точка з'єднання для інвентарю у вашій мережі, без керування пріоритетом або автоматизацією. Перегляньте покращення до $(l:filter_kabel)версії з фільтром$(/l), для більшої автоматизації. ", + "block.storagenetwork.export_kabel": "Експорт кабель", + "block.storagenetwork.export_kabel.guide": "Підключені до інвентарю, вони експортують предмети з мережі до цільового інвентарю. Має пріоритетні налаштування порядку сортування серед інших експортних кабелів, а також опціональний контроль редстоуну. Приймає покращення. ", + "block.storagenetwork.import_kabel": "Імпорт кабель", + "block.storagenetwork.import_kabel.guide": "Вони постійно імпортують з підключеного інвентарю в мережу. Оновіть до $(l:import_filter_kabel)версії з фільтром$(/l) для більшої автоматизації", + "block.storagenetwork.import_filter_kabel": "Імпорт кабель з фільтром", + "block.storagenetwork.import_filter_kabel.guide": "Вони постійно імпортують з підключеного інвентарю в мережу. Їх можна налаштувати за допомогою покращень, фільтра предметів, і редстоуну на екрані керування. Фільтр ''білий список'' означає, що пропускатимуться лише ті предмети, які відповідають фільтру, а режим ''чорний список'' означає, що можна витягувати все, але ігнорувати те, що є у списку. Імпорт фільтра витирає і замінює його вмістом інвентарю", + "block.storagenetwork.filter_kabel": "Мережевий кабель з фільтром", + "block.storagenetwork.filter_kabel.guide": "Кожен мережевий кабель підключає лише один інвентар до мережі. Має пріоритетні налаштування порядку сортування серед інших експортних кабелів і приймає покращення. ", + "page.storagenetwork.gs_chunks": "Чанки", + "page.storagenetwork.gs_setup": "Налаштування мережі", + "page.storagenetwork.gs_priority": "Пріоритет", + "storagenetwork.guide.getstarted": "Почнімо", + "storagenetwork.guide.upgrades": "Покращення", + "storagenetwork.guide.upgrades.desc": "Покращення використовуються у слотах $(l:export_kabel)експортного кабелю$(/l) та $(l:import_filter_kabel)Фільтрованого імпортного кабелю$(/l)", + "storagenetwork.guide.remotes": "Пульти", + "storagenetwork.guide.remotes.desc": "Використовуйте ваш новий пульт на $(l:master)корені$(/l), щоб налаштувати його прив'язку до мережі. Кожен пульт прив'язано до кореня мережі з точним (x,y,z,d) розташуванням, і він може отримати доступ до мережевого інвентарю, доки кореневий вузол не зломано і не завантажено. Вони бездротові з необмеженим радіусом дії. ", + "storagenetwork.guide.blocks": "Блоки", + "storagenetwork.guide.blocks.desc": "Всі мережеві блоки нормально підключаються до будь-якого мережевого кабелю або блоку і забезпечують різний доступ або функції мережі. ", + "storagenetwork.guide.cables": "Кабелі", + "storagenetwork.guide.cables.desc": "Кабелі з'єднують блоки та вузли у мережу. Дійсна мережа повинна мати рівно один $(l:master)корінь$(/l). Тоді вам знадобиться принаймні один інвентар зі $(l:storage_kabel)з'єднувальним кабелем$(/l)", + "storagenetwork.guide.getstarted.desc": "Різні сторінки керівництва", + "page.storagenetwork.gs_setup.left": "Короткий посібник з початку роботи з Simple Storage. Після того, як ви зберете деякі інгредієнти, кілька $(l:kabel)мережевих кабелів$(/l) і $(l:master)корінь$(/l). Ваша мережа буде запущена, як тільки ці компоненти буде розміщено у вашому світі. $(l:storage_kabel)Мережевий кабель$(/l) з'єднає скриню або інший інвентар з вашою мережею. Щоб отримати доступ, перегляньте $(l:inventory_remote)пульти$(/l) або $(l:request)столи$(/l). ", + "page.storagenetwork.gs_setup.right": "Спробуйте скористатися функцією закладок", + "page.storagenetwork.gs_priority.left": "Кабелі сортуються за пріорітетом. Якщо не передбачено інтерфейсу, наприклад, $(l:storage_kabel)мереживих кабелів$(/l), його значення дорівнює нулю. Коли користувач виконує запит на вставлення/вилучення до мережі, він намагатиметься використати вузли з найменшим пріоритетом, доки запит не буде виконано. Для автоматизації імпорту/експорту обробляються всі кабелі, а пріоритет визначає порядок кожного разу, по одній стаковій дії на тік для кожного кабелю. ", + "page.storagenetwork.gs_priority.right": "$(li)Відсортуйте кабелі за пріоритетом, щоб найнижчі номери були першими$(li)Рівні числа разом$(li)приклад: [-2, -2, 0, 0, 1, 2, 4]$(li)По черзі використовуйте вузли в такому порядку. ", + "page.storagenetwork.gs_chunks.left": "Будь-яка мережа працює у світі, лише якщо її $(l:master)корінь$(/l) знаходиться у завантаженому чанку. Кінцеві кабелі мережі, такі як $(l:storage_kabel)мережевий кабель$(/l), можуть перебувати у іншому чанку, ніж короень мережі, і можуть бути окремо від'єднані залежно від їхнього чанку. Ви можете мати декілька мереж на один чанк, світ або вимір. ", + "page.storagenetwork.gs_chunks.right": "$(li)Приклад розподілу: У мережі може бути 20 з'єднувальних кабелів, але 5 з них перебувають у нерозвантаженому блоці. Мережеві екрани/пульти все одно відкриватимуться, оскільки завантажено кореневий блок, а вміст цих вивантажених кабелів не буде видно.$(li)Віддалений приклад: Я будую свою мережу зберігання далеко від $(t:Які завжи провантажені)спавн чанків$(/t), на віддаленій океанській базі. Коли я йду в Незер, чанки в звичайному світі з блоком кореня вивантажуються, тому мої $(l:inventory_remote)пульти$(/l) не можуть під'єднатися.", + "block.storagenetwork.master": "Корінь мережі", + "block.storagenetwork.master.tooltip": "Тільки один на мережу", + "block.storagenetwork.master.guide": "Основне ядро мережі. Лише ОДИН на мережу, розміщення більшої кількості призведе до поломки одного з них і може спричинити проблеми з підключенням до мережі пультів і кабелів. Переміщення кореневого вузла на нове місце призведе до розриву мережі, переривання імпорту, експорту та роботи пультів. Кілька мереж у світі та вимірі - це нормально, якщо вони не з'єднані одна з одною", + "block.storagenetwork.request": "Стіл створення", + "block.storagenetwork.request.guide": "Перегляд інвентарю мережі з повним доступом до прокрутки, вилучення та додавання предметів. Користувацька сітка створення, яка витягує інгредієнти з мережі. Дивіться $(l:crafting_remote)віддалену версію тут$(/l) ", + "block.storagenetwork.request.tooltip": "Доступ до предметів з сіткою створення", + "block.storagenetwork.inventory": "Інвентар зберігання", + "block.storagenetwork.inventory.guide": "Переглядає мережевий інвентар з повним доступом до прокрутки, вилучення та додавання елементів. Дивіться $(l:inventory_remote)віддалену версію тут$(/l) ", + "block.storagenetwork.inventory.tooltip": "Доступ до предметів без сітки створення", + "block.storagenetwork.exchange": "Інтерфейс обміну мережі", + "block.storagenetwork.exchange.guide": "Цей блок відкриває мережу і діє як контролер для інших систем автоматизації або рішень для зберігання. Наприклад, звичайна воронка, розміщена на інтерфейсі обміну в мережі, буде вставляти предмети у відповідні мережеві слоти, як зазвичай, подібно до $(l:import_kabel)імпорт кабелю$(/l). Воронка нижче дозволить експортувати довільні предмети. Спробуйте це з іншими модами на сховища! ", + "block.storagenetwork.exchange.tooltip": "Кінцева точка мережі для інвертарних підключень", + "block.storagenetwork.collector": "Інтерфейс збору", + "block.storagenetwork.collector.guide": "Цей блок відкриває мережу і діє як контролер лише для вставки для інших систем автоматизації або рішень для зберігання. Наприклад, звичайна воронка, розміщена на інтерфейсі обміну, буде вставляти предмети у дійсні мережеві слоти, як зазвичай, подібно до $(l:import_kabel)імпорт кабелю$(/l). Не дозволяє вилучати предмети. Спробуйте це з іншими модами на сховища! ", + "block.storagenetwork.collector.tooltip": "Зібрані речі переміщуються в мережу", + "item.storagenetwork.speed_upgrade": "Покращення швидкості", + "item.storagenetwork.speed_upgrade.guide": "Це покращення може бути розміщена в кабелях. Збільшує швидкість імпорту, який зазвичай не відбувається кожен тік. Внаслідок зменшення затримки між операціями. Призведе до ігнорування будь-яких покращень повільності, якщо вони обидва присутні. ", + "item.storagenetwork.speed_upgrade.tooltip": "Збільшує швидкість імпорту/експорту", + "item.storagenetwork.operation_upgrade": "Покращення операцій", + "item.storagenetwork.operation_upgrade.tooltip": "Обробляє кількість елементів у фільтрі; може перевизначати інші покращення", + "item.storagenetwork.operation_upgrade.guide": "Якщо фільтр знаходиться у кабелі з увімкненим режимом ''Білий список'', він намагатиметься імпортувати або експортувати точну кількість елементів, задану у фільтрі, і ігноруватиме покращення стаку і запасу. Наприклад, фільтр, у якому дозволено 7 каменів і 3 ґрунту, експортуватиме саме стільки за цикл, а не 4 за замовчуванням. ", + "item.storagenetwork.stack_upgrade": "Покращення стаку", + "item.storagenetwork.stack_upgrade.tooltip": "Збільшує розмір стаку завдання", + "item.storagenetwork.stack_upgrade.guide": "Це покращення можна встановити на кабелі імпорту або експорту. Дозволяє витягувати повний стак до 64 щоразу, коли кабель працює, замість 4", + "item.storagenetwork.single_upgrade": "Покращення одиниць", + "item.storagenetwork.single_upgrade.tooltip": "Встановлює розмір стаку на 1", + "item.storagenetwork.single_upgrade.guide": "Це покращення може бути застосовано до кабелів імпорту або експорту. Зменшує його до витягування по одному кожного разу, коли працює кабель, замість 4. Замінить покращення стаку, якщо обидва присутні.", + "item.storagenetwork.slow_upgrade": "Покращення повільності", + "item.storagenetwork.slow_upgrade.tooltip": "Зменшує швидкість імпорту/експорту ", + "item.storagenetwork.slow_upgrade.guide": "Це оновлення можна розмістити в кабелях імпорту або експорту. Збільшує час між операціями, що сповільнює загальний процес. ", + "item.storagenetwork.stock_upgrade": "Покращення запасу", + "item.storagenetwork.stock_upgrade.tooltip": "Зберігає постійний запас предметів у прикріпленому інвентарі", + "item.storagenetwork.stock_upgrade.guide": "Якщо це експортний кабель, то для кожного унікального предмета у фільтрі він буде експортуватись лише доти, доки цільовий запас не стане меншим за розмір стака фільтра, щоб заповнити його до цільового розміру з фільтра. І навпаки, кабелі імпорту з покращенням запасів будуть підтримувати постійний запас у пов'язаній скрині, зменшуючи його і зупиняючись на розмірах стака фільтра. ", + "item.storagenetwork.builder_remote": "Пульт мережі", + "item.storagenetwork.builder_remote.tooltip": "Прив'яжіть до мережі та блоку для створення", + "item.storagenetwork.builder_remote.guide": "Цей пульт прив'язується як звичайний, але не має екрана. Замість цього він шукає блок, на який ви натиснули, і намагається створити його копію, використовуючи відповідний предмет у мережі.", + "item.storagenetwork.builder_remote.blockstate": "Блоку не вибрано", + "item.storagenetwork.inventory_remote": "Пульт зберігання", + "item.storagenetwork.inventory_remote.tooltip": "Використайте на корені мережі для бездротового зв'язку", + "item.storagenetwork.inventory_remote.guide": "Повний віддалений доступ до мережі, не обмежений діапазоном або виміром. Подібний до $(l:inventory)інвентарю зберігання$(/l). Також можна відкрити гарячою клавішою.", + "item.storagenetwork.crafting_remote": "Пульт створення", + "item.storagenetwork.crafting_remote.tooltip": "Використайте на корені мережі для бездротового зв'язку", + "item.storagenetwork.crafting_remote.guide": "Повний віддалений доступ до мережі, не обмежений діапазоном або виміром. Має в собі сітку створення. Подібний до $(l:request)столу створення$(/l). Також можна відкрити гарячою клавішою.", + "item.storagenetwork.picker_remote": "Пульт вибору", + "item.storagenetwork.picker_remote.tooltip": "Якщо натиснути на блок він витягне відповідні блоки з мережі", + "item.storagenetwork.picker_remote.guide": "Цей пульт прив'язується як звичайний, але не має екрана. Замість цього торкніться цим предметом блока. Буде запитано або 1, або повний стак цього блоку, залежно від того, чи ви присідаєте. ", + "item.storagenetwork.collector_remote": "Пульт збору", + "item.storagenetwork.collector_remote.tooltip": "Зібрані речі переміщуються в мережу", + "item.storagenetwork.collector_remote.guide": "Підключіть його до мережі, як зазвичай. Цей пульт працює будь-де у вашому інвентарі (включно з curios, але не зі скринею Енду), його не потрібно тримати в руці або на гарячій панелі. Коли ви візьмете будь-який предмет, він вставить його у мережу, якщо це можливо.", + "block.storagenetwork.recipe.invalid": "Транзакція дійсна:", + "block.storagenetwork.recipe.invalidleft": "Встановити вхід ліворуч", + "block.storagenetwork.recipe.invalidright": "Встановити вихід праворуч", + "block.storagenetwork.recipe.valid": "Транзакція дійсна", + "item.remote.found": "Предмет знайдено, видобуваю...", + "item.remote.notfound.item": "Предмет не знайдений в мережі", + "item.remote.notfound": "Мережа не знайдена, переконайтесь, що чанк завантажений", + "item.remote.notconnected": "Пульт не під'єднано, спочатку прив'яжіть його до кореня мережі", + "item.remote.connected": "Віддалене підключення до мережі", + "item.remote.outofrange": "Поза діапазоном", + "item.remote.notloaded": "Чанк не завантажено", + "gui.storagenetwork.refresh": "Оновити транзакції обробки, щоб якщо вона застрягла в очікуванні результату, це перемикне її назад у режим рецепта для збору інгредієнтів", + "gui.storagenetwork.checkbox.meta": "Мета", + "gui.storagenetwork.checkbox.ore": "OreDict", + "gui.storagenetwork.checkbox.nbt": "NBT", + "gui.storagenetwork.import": "Імпортувати вміст як фільтр", + "gui.storagenetwork.allowlist": "Білий список", + "gui.storagenetwork.ignorelist": "Чорний список", + "gui.storagenetwork.redstone.false": "Завжди увімкнено", + "gui.storagenetwork.redstone.true": "Потребує редстоун", + "gui.storagenetwork.sort": "Напрям сортування", + "gui.storagenetwork.priority.up": "Знизити пріоритет", + "gui.storagenetwork.priority.down": "Підвищити пріоритет", + "gui.storagenetwork.req.tooltip_name": "Сортувати за іменем", + "gui.storagenetwork.req.tooltip_mod": "Сортувати за модом", + "gui.storagenetwork.req.tooltip_amount": "Сортувати за кількістю", + "gui.storagenetwork.shift": "Утримуйте Shift для додаткової інформації", + "gui.storagenetwork.fil.tooltip_in": "Тільки ввід", + "gui.storagenetwork.fil.tooltip_out": "Тільки вивід", + "gui.storagenetwork.fil.tooltip_both": "Ввід та вивід", + "gui.storagenetwork.fil.tooltip_mod": "Префікс @: Пошук по моду", + "gui.storagenetwork.fil.tooltip_tooltip": "Префікс #: Пошук по підказці", + "gui.storagenetwork.fil.tooltip_tags": "Префікс $: Пошук по теґу", + "gui.storagenetwork.fil.tooltip_clear": "Очистити текст ПКМ'ом", + "gui.storagenetwork.autofocus.tooltip.true": "Автофокус панелі пошуку", + "gui.storagenetwork.autofocus.tooltip.false": "Без авто-фокусу", + "gui.storagenetwork.tooltip_clear": "Очистити пошук", + "gui.storagenetwork.fil.tooltip_jei_on": "JEI пошук ввімкнено", + "gui.storagenetwork.fil.tooltip_jei_off": "Пошук JEI вимкнено", + "block.storagenetwork.kabel.tooltip": "Основний кабель мережі", + "block.storagenetwork.storage_kabel.tooltip": "Використовується для підключення інвентарю до мережі", + "block.storagenetwork.export_kabel.tooltip": "Експортує предмети з мережі до приєднаного інвентарю", + "block.storagenetwork.import_kabel.tooltip": "Імпортує всі предмети з прикріпленого інвентарю в мережу", + "block.storagenetwork.filter_kabel.tooltip": "З'єднання інвентарів з опціями фільтрації", + "block.storagenetwork.import_filter_kabel.tooltip": "Імпортує предмети з опціями фільтрації", + "tooltip.storagenetwork.kabel_P": "Може автоматизувати прості операції з обробки", + "block.storagenetwork.controller": "Контролер", + "block.storagenetwork.controller.tooltip": "Керування всіма процесорними кабелями в мережі", + "chat.main.emptyslots": "Потенційні порожні слоти: ", + "chat.main.connectables": "З’єднання: ", + "key.storagenetwork.remote": "Пульт в Curios", + "gui.storagenetwork.operate.tooltip": "Операції вимкнено, якщо логічна перевірка не спрацювала", + "gui.storagenetwork.operate.tooltip.more": "Кількість елементів має бути більшою за значення", + "gui.storagenetwork.operate.tooltip.less": "Кількість елементів має бути меншою за значення", + "processing.buttons.toggle.true": "Завжди активний", + "processing.buttons.toggle.false": "Опрацьовувати тільки запитуваний номер", + "processing.buttons.minus": "Збільшити запит", + "processing.buttons.plus": "Зменшити запит", + "processing.empty.ingredients": "Пустий інгрідієнт", + "gui.storagenetwork.processing.recipe": "Інгредієнти для кожного циклу будуть надсилатися так, ніби вони надходять з цього блоку", + "gui.storagenetwork.processing.extract": "При витягуванні результатів обробки вони будуть взяті ніби з боку цього блоку" +} From df55b0e626cc08aaa8a05aafe5cc459bfdbca31a Mon Sep 17 00:00:00 2001 From: Eugene <59817721+SKZGx@users.noreply.github.com> Date: Thu, 4 May 2023 15:15:28 +0300 Subject: [PATCH 08/11] Update uk_ua.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replacement word "стак" by "стос". This was done to unify it with the main game because the developers agreed on this word. --- .../assets/storagenetwork/lang/uk_ua.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/resources/assets/storagenetwork/lang/uk_ua.json b/src/main/resources/assets/storagenetwork/lang/uk_ua.json index 205b08b3..c6bac4a6 100644 --- a/src/main/resources/assets/storagenetwork/lang/uk_ua.json +++ b/src/main/resources/assets/storagenetwork/lang/uk_ua.json @@ -29,7 +29,7 @@ "storagenetwork.guide.getstarted.desc": "Різні сторінки керівництва", "page.storagenetwork.gs_setup.left": "Короткий посібник з початку роботи з Simple Storage. Після того, як ви зберете деякі інгредієнти, кілька $(l:kabel)мережевих кабелів$(/l) і $(l:master)корінь$(/l). Ваша мережа буде запущена, як тільки ці компоненти буде розміщено у вашому світі. $(l:storage_kabel)Мережевий кабель$(/l) з'єднає скриню або інший інвентар з вашою мережею. Щоб отримати доступ, перегляньте $(l:inventory_remote)пульти$(/l) або $(l:request)столи$(/l). ", "page.storagenetwork.gs_setup.right": "Спробуйте скористатися функцією закладок", - "page.storagenetwork.gs_priority.left": "Кабелі сортуються за пріорітетом. Якщо не передбачено інтерфейсу, наприклад, $(l:storage_kabel)мереживих кабелів$(/l), його значення дорівнює нулю. Коли користувач виконує запит на вставлення/вилучення до мережі, він намагатиметься використати вузли з найменшим пріоритетом, доки запит не буде виконано. Для автоматизації імпорту/експорту обробляються всі кабелі, а пріоритет визначає порядок кожного разу, по одній стаковій дії на тік для кожного кабелю. ", + "page.storagenetwork.gs_priority.left": "Кабелі сортуються за пріорітетом. Якщо не передбачено інтерфейсу, наприклад, $(l:storage_kabel)мереживих кабелів$(/l), його значення дорівнює нулю. Коли користувач виконує запит на вставлення/вилучення до мережі, він намагатиметься використати вузли з найменшим пріоритетом, доки запит не буде виконано. Для автоматизації імпорту/експорту обробляються всі кабелі, а пріоритет визначає порядок кожного разу, по одній стосовій дії на тік для кожного кабелю. ", "page.storagenetwork.gs_priority.right": "$(li)Відсортуйте кабелі за пріоритетом, щоб найнижчі номери були першими$(li)Рівні числа разом$(li)приклад: [-2, -2, 0, 0, 1, 2, 4]$(li)По черзі використовуйте вузли в такому порядку. ", "page.storagenetwork.gs_chunks.left": "Будь-яка мережа працює у світі, лише якщо її $(l:master)корінь$(/l) знаходиться у завантаженому чанку. Кінцеві кабелі мережі, такі як $(l:storage_kabel)мережевий кабель$(/l), можуть перебувати у іншому чанку, ніж короень мережі, і можуть бути окремо від'єднані залежно від їхнього чанку. Ви можете мати декілька мереж на один чанк, світ або вимір. ", "page.storagenetwork.gs_chunks.right": "$(li)Приклад розподілу: У мережі може бути 20 з'єднувальних кабелів, але 5 з них перебувають у нерозвантаженому блоці. Мережеві екрани/пульти все одно відкриватимуться, оскільки завантажено кореневий блок, а вміст цих вивантажених кабелів не буде видно.$(li)Віддалений приклад: Я будую свою мережу зберігання далеко від $(t:Які завжи провантажені)спавн чанків$(/t), на віддаленій океанській базі. Коли я йду в Незер, чанки в звичайному світі з блоком кореня вивантажуються, тому мої $(l:inventory_remote)пульти$(/l) не можуть під'єднатися.", @@ -53,19 +53,19 @@ "item.storagenetwork.speed_upgrade.tooltip": "Збільшує швидкість імпорту/експорту", "item.storagenetwork.operation_upgrade": "Покращення операцій", "item.storagenetwork.operation_upgrade.tooltip": "Обробляє кількість елементів у фільтрі; може перевизначати інші покращення", - "item.storagenetwork.operation_upgrade.guide": "Якщо фільтр знаходиться у кабелі з увімкненим режимом ''Білий список'', він намагатиметься імпортувати або експортувати точну кількість елементів, задану у фільтрі, і ігноруватиме покращення стаку і запасу. Наприклад, фільтр, у якому дозволено 7 каменів і 3 ґрунту, експортуватиме саме стільки за цикл, а не 4 за замовчуванням. ", - "item.storagenetwork.stack_upgrade": "Покращення стаку", - "item.storagenetwork.stack_upgrade.tooltip": "Збільшує розмір стаку завдання", - "item.storagenetwork.stack_upgrade.guide": "Це покращення можна встановити на кабелі імпорту або експорту. Дозволяє витягувати повний стак до 64 щоразу, коли кабель працює, замість 4", + "item.storagenetwork.operation_upgrade.guide": "Якщо фільтр знаходиться у кабелі з увімкненим режимом ''Білий список'', він намагатиметься імпортувати або експортувати точну кількість елементів, задану у фільтрі, і ігноруватиме покращення стоса і запасу. Наприклад, фільтр, у якому дозволено 7 каменів і 3 ґрунту, експортуватиме саме стільки за цикл, а не 4 за замовчуванням. ", + "item.storagenetwork.stack_upgrade": "Покращення стосу", + "item.storagenetwork.stack_upgrade.tooltip": "Збільшує розмір стоса завдання", + "item.storagenetwork.stack_upgrade.guide": "Це покращення можна встановити на кабелі імпорту або експорту. Дозволяє витягувати повний стос до 64 щоразу, коли кабель працює, замість 4", "item.storagenetwork.single_upgrade": "Покращення одиниць", - "item.storagenetwork.single_upgrade.tooltip": "Встановлює розмір стаку на 1", - "item.storagenetwork.single_upgrade.guide": "Це покращення може бути застосовано до кабелів імпорту або експорту. Зменшує його до витягування по одному кожного разу, коли працює кабель, замість 4. Замінить покращення стаку, якщо обидва присутні.", + "item.storagenetwork.single_upgrade.tooltip": "Встановлює розмір стоса на 1", + "item.storagenetwork.single_upgrade.guide": "Це покращення може бути застосовано до кабелів імпорту або експорту. Зменшує його до витягування по одному кожного разу, коли працює кабель, замість 4. Замінить покращення стоса, якщо обидва присутні.", "item.storagenetwork.slow_upgrade": "Покращення повільності", "item.storagenetwork.slow_upgrade.tooltip": "Зменшує швидкість імпорту/експорту ", "item.storagenetwork.slow_upgrade.guide": "Це оновлення можна розмістити в кабелях імпорту або експорту. Збільшує час між операціями, що сповільнює загальний процес. ", "item.storagenetwork.stock_upgrade": "Покращення запасу", "item.storagenetwork.stock_upgrade.tooltip": "Зберігає постійний запас предметів у прикріпленому інвентарі", - "item.storagenetwork.stock_upgrade.guide": "Якщо це експортний кабель, то для кожного унікального предмета у фільтрі він буде експортуватись лише доти, доки цільовий запас не стане меншим за розмір стака фільтра, щоб заповнити його до цільового розміру з фільтра. І навпаки, кабелі імпорту з покращенням запасів будуть підтримувати постійний запас у пов'язаній скрині, зменшуючи його і зупиняючись на розмірах стака фільтра. ", + "item.storagenetwork.stock_upgrade.guide": "Якщо це експортний кабель, то для кожного унікального предмета у фільтрі він буде експортуватись лише доти, доки цільовий запас не стане меншим за розмір стоса фільтра, щоб заповнити його до цільового розміру з фільтра. І навпаки, кабелі імпорту з покращенням запасів будуть підтримувати постійний запас у пов'язаній скрині, зменшуючи його і зупиняючись на розмірах стоса фільтра. ", "item.storagenetwork.builder_remote": "Пульт мережі", "item.storagenetwork.builder_remote.tooltip": "Прив'яжіть до мережі та блоку для створення", "item.storagenetwork.builder_remote.guide": "Цей пульт прив'язується як звичайний, але не має екрана. Замість цього він шукає блок, на який ви натиснули, і намагається створити його копію, використовуючи відповідний предмет у мережі.", @@ -78,7 +78,7 @@ "item.storagenetwork.crafting_remote.guide": "Повний віддалений доступ до мережі, не обмежений діапазоном або виміром. Має в собі сітку створення. Подібний до $(l:request)столу створення$(/l). Також можна відкрити гарячою клавішою.", "item.storagenetwork.picker_remote": "Пульт вибору", "item.storagenetwork.picker_remote.tooltip": "Якщо натиснути на блок він витягне відповідні блоки з мережі", - "item.storagenetwork.picker_remote.guide": "Цей пульт прив'язується як звичайний, але не має екрана. Замість цього торкніться цим предметом блока. Буде запитано або 1, або повний стак цього блоку, залежно від того, чи ви присідаєте. ", + "item.storagenetwork.picker_remote.guide": "Цей пульт прив'язується як звичайний, але не має екрана. Замість цього торкніться цим предметом блока. Буде запитано або 1, або повний стос цього блоку, залежно від того, чи ви присідаєте. ", "item.storagenetwork.collector_remote": "Пульт збору", "item.storagenetwork.collector_remote.tooltip": "Зібрані речі переміщуються в мережу", "item.storagenetwork.collector_remote.guide": "Підключіть його до мережі, як зазвичай. Цей пульт працює будь-де у вашому інвентарі (включно з curios, але не зі скринею Енду), його не потрібно тримати в руці або на гарячій панелі. Коли ви візьмете будь-який предмет, він вставить його у мережу, якщо це можливо.", From 3ce4a2a0efa44837dc1ae337ead12e8a0b2c62ad Mon Sep 17 00:00:00 2001 From: lothrazar Date: Sun, 11 Jun 2023 17:55:06 -0700 Subject: [PATCH 09/11] bump forge and jei deps --- gradle.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index c6c1cc7b..95dea44c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,14 +9,14 @@ curse_id=268495 mod_version=1.7.0 mc_version=1.18.2 -forge_version=40.1.54 +forge_version=40.2.9 # optional dependencies - -jei_version=9.7.0.209 +jei_version=9.7.1.255 patchouli_version=71.1 curios_version=5.0.7.1 + # folder to copy the build output jar dist_folder=c:/temp From 3bf9f8d73b2f1ce71a0c9f086e9fa9cb11b58bfb Mon Sep 17 00:00:00 2001 From: lothrazar Date: Sun, 11 Jun 2023 18:30:56 -0700 Subject: [PATCH 10/11] add jei version warning --- src/main/resources/META-INF/mods.toml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index b488c287..8a07a093 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -43,7 +43,7 @@ Storage Network to connect inventories to search and craft # Does this dependency have to exist - if not, ordering below must be specified mandatory=true #mandatory # The version range of the dependency - versionRange="[39.0.55,)" #mandatory + versionRange="[40,)" #mandatory # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory ordering="NONE" # Side this dependency is applied on - BOTH, CLIENT or SERVER @@ -52,6 +52,12 @@ Storage Network to connect inventories to search and craft [[dependencies.storagenetwork]] modId="minecraft" mandatory=true - versionRange="[1.18.1,)" + versionRange="[1.18.2,)" + ordering="NONE" + side="BOTH" +[[dependencies.storagenetwork]] + modId="jei" + mandatory=false + versionRange="[9.7,10)" ordering="NONE" side="BOTH" \ No newline at end of file From ce584d729d3fdb5bdf7c9868b638d61b2cdf1dfd Mon Sep 17 00:00:00 2001 From: lothrazar Date: Sun, 11 Jun 2023 19:35:16 -0700 Subject: [PATCH 11/11] changelog 1.7.0 --- scripts/release.sh | 2 +- update.json | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/scripts/release.sh b/scripts/release.sh index ce40ac07..6ce083db 100644 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -1,3 +1,3 @@ #!/bin/bash -./gradlew cleanJar build signJar copyJar +./gradlew cleanJar build signJar diff --git a/update.json b/update.json index e7c28c2b..8c4affab 100644 --- a/update.json +++ b/update.json @@ -2,7 +2,7 @@ "homepage": "https://www.curseforge.com/minecraft/mc-mods/simple-storage-network", "promos": { "1.18.1-latest": "1.6.0", - "1.18.2-latest": "1.6.2" + "1.18.2-latest": "1.7.0" }, "1.18.2": { "1.4.1": "First port to 1.17.1 ", @@ -14,6 +14,12 @@ "1.5.4": "Fix error when placing some network blocks. Updated minimum forge to 39.0.55. Developed on jei-1.18.1:9.2.1.69 so similar versions are probably fine too. Fix both remotes not syncing Sort/JEI and other settings on open/close #416 ", "1.6.0": "[tested on forge=39.0.75; jei=9.2.1.69] Added new items Singleton Upgrade and Slowness Upgrade. Ported two items Stock Upgrade and Operation upgrade from mc1.12.2. Changed some of the default recipes to consume less redstone and quartz (see the upgrades). Removed config 'enableAutoSearchFocus', instead Auto-Focus toggle button added in GUI right-side. Fix #416 remotes not saving options settings. Fixed Network Collector Remote Void Items #414. Crafting remote no longer saves crafting grid data, drops 3x3 on close (Fixes #434 and other isses). This allows a new feature where the Crafting Remote can go into the ender chest or Curios slot and be opened by the key binding (i default). Fix #254 Import Cables stuck on not importable items. ", "1.6.1": "Port to MC 1.18.2 by MrBysco, forge 40.0.15 and jei 9.5.0.132. Added safety checks and workarounds and a config to catch when the screen size and GUI Scale gets too small and crashes seem to come from JEI (illegal negative numbers exceptions guiTop >= 0 check)", - "1.6.2": "Fixed item-routing cache feature, meaning as items get inserted (by player or cable) it tries to group them together with previous items in the same container when possible (still same logic as 1.12.2 version). Refactor and clean up how cables connect on placement. Fix the visuals and the selection bounding box for cables sometimes not matching. Updated to latest dependencies: forge=40.1.54 jei=9.7.0.209 curios=5.0.7.1 Remove/fix slot overlap patch for remotes on very small resolutions. Fix java.lang.StackOverflowError connecting a Link Cable to a Network Exchange Interface #445 (these blocks now connect as blockstate=cable not =inventory). Optimize/remove redundant connection retries when blocks are placed. " + "1.6.2": "Fixed item-routing cache feature, meaning as items get inserted (by player or cable) it tries to group them together with previous items in the same container when possible (still same logic as 1.12.2 version). Refactor and clean up how cables connect on placement. Fix the visuals and the selection bounding box for cables sometimes not matching. Updated to latest dependencies: forge=40.1.54 jei=9.7.0.209 curios=5.0.7.1 Remove/fix slot overlap patch for remotes on very small resolutions. Fix java.lang.StackOverflowError connecting a Link Cable to a Network Exchange Interface #445 (these blocks now connect as blockstate=cable not =inventory). Optimize/remove redundant connection retries when blocks are placed. ", + + + "1.7.0":"Added version warning, Does not work with any JEI versions in the 10.X series, only with 9.7.X (for example 9.7.1.255 or 9.7.2.281). Community Pull Request Contributions: Merge pull request #492 from IIpragmaII/trunk/1.18 @IIpragmaII @VasurTrekkson Improved performance for export node. fix priority german translation @lightlike . Fixed recipes not showing when pressing the JEI recipe key @Demerso. Create uk_ua.json @SKZGx . " + + + } }