Processing tasks.

This commit is contained in:
raoulvdberge
2018-06-01 06:01:04 +02:00
parent 11482b8265
commit da1ea87131
21 changed files with 186 additions and 23 deletions

View File

@@ -100,7 +100,7 @@ public interface ICraftingManager {
/** /**
* Makes the network send a crafting monitor update to all players as soon as it can. * Makes the network send a crafting monitor update to all players as soon as it can.
*/ */
// TODO: rework system to be subscribed-based, per task // TODO: rework system to be subscribed-based
void markCraftingMonitorForUpdate(); void markCraftingMonitorForUpdate();
/** /**
@@ -108,7 +108,7 @@ public interface ICraftingManager {
* <p> * <p>
* WARNING: In most cases, you should just use {@link ICraftingManager#markCraftingMonitorForUpdate()}, if not, you can get high bandwidth usage. * WARNING: In most cases, you should just use {@link ICraftingManager#markCraftingMonitorForUpdate()}, if not, you can get high bandwidth usage.
*/ */
// TODO: rework system to be subscribed-based, per task // TODO: rework system to be subscribed-based
void sendCraftingMonitorUpdate(); void sendCraftingMonitorUpdate();
/** /**
@@ -116,6 +116,6 @@ public interface ICraftingManager {
* *
* @param player the player * @param player the player
*/ */
// TODO: rework system to be subscribed-based, per task // TODO: rework system to be subscribed-based
void sendCraftingMonitorUpdate(EntityPlayerMP player); void sendCraftingMonitorUpdate(EntityPlayerMP player);
} }

View File

@@ -20,13 +20,15 @@ public interface ICraftingPatternContainer {
int getSpeedUpgradeCount(); int getSpeedUpgradeCount();
/** /**
* @return the inventory that this container is connected to * @return the inventory that this container is connected to, or null if no inventory is present
*/ */
@Nullable
IItemHandler getConnectedInventory(); IItemHandler getConnectedInventory();
/** /**
* @return the tile that this container is connected to * @return the tile that this container is connected to, or null if no tile is present
*/ */
@Nullable
TileEntity getConnectedTile(); TileEntity getConnectedTile();
/** /**

View File

@@ -41,6 +41,14 @@ public interface ICraftingTask {
*/ */
ItemStack getRequested(); ItemStack getRequested();
/**
* Called when a stack is inserted into the system through {@link com.raoulvdberge.refinedstorage.api.network.INetwork#insertItemTracked(ItemStack, int)}.
*
* @param stack the stack
* @return the size remaining, decremented by the crafting task when it was relevant to it
*/
int onTrackedItemInserted(ItemStack stack, int size);
/** /**
* Writes this task to NBT. * Writes this task to NBT.
* *

View File

@@ -148,7 +148,13 @@ public class CraftingManager implements ICraftingManager {
@Override @Override
public void track(ItemStack stack, int size) { public void track(ItemStack stack, int size) {
// TODO for (ICraftingTask task : tasks) {
size = task.onTrackedItemInserted(stack, size);
if (size == 0) {
return;
}
}
} }
@Override @Override

View File

@@ -2,7 +2,10 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task;
import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.network.INetwork;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -28,6 +31,7 @@ public class CraftingExtractor {
return status; return status;
} }
// TODO: send crafting monitor update when this changes
public void updateStatus() { public void updateStatus() {
for (int i = 0; i < items.size(); ++i) { for (int i = 0; i < items.size(); ++i) {
if (status.get(i) != CraftingExtractorItemStatus.EXTRACTED) { if (status.get(i) != CraftingExtractorItemStatus.EXTRACTED) {
@@ -52,12 +56,13 @@ public class CraftingExtractor {
return !items.isEmpty() && status.stream().allMatch(s -> s == CraftingExtractorItemStatus.EXTRACTED); return !items.isEmpty() && status.stream().allMatch(s -> s == CraftingExtractorItemStatus.EXTRACTED);
} }
// TODO: send crafting monitor update when this changes
public void extractOne() { public void extractOne() {
for (int i = 0; i < items.size(); ++i) { for (int i = 0; i < items.size(); ++i) {
if (status.get(i) == CraftingExtractorItemStatus.AVAILABLE) { if (status.get(i) == CraftingExtractorItemStatus.AVAILABLE) {
ItemStack extracted = network.extractItem(items.get(i), items.get(i).getCount(), false); ItemStack extracted = network.extractItem(items.get(i), items.get(i).getCount(), false);
if (extracted == null) { if (extracted == null) {
throw new IllegalStateException("Did not extract anything"); throw new IllegalStateException("Did not extract anything while available");
} }
status.set(i, CraftingExtractorItemStatus.EXTRACTED); status.set(i, CraftingExtractorItemStatus.EXTRACTED);
@@ -66,4 +71,31 @@ public class CraftingExtractor {
} }
} }
} }
// TODO: send crafting monitor update when this changes
public void extractOneAndInsert(@Nullable IItemHandler dest) {
for (int i = 0; i < items.size(); ++i) {
if (status.get(i) == CraftingExtractorItemStatus.AVAILABLE) {
ItemStack extracted = network.extractItem(items.get(i), items.get(i).getCount(), true);
if (extracted == null) {
throw new IllegalStateException("Extraction simulation failed while available");
}
if (dest == null) {
status.set(i, CraftingExtractorItemStatus.MACHINE_NONE);
} else if (ItemHandlerHelper.insertItem(dest, extracted, false).isEmpty()) {
extracted = network.extractItem(items.get(i), items.get(i).getCount(), false);
if (extracted == null) {
throw new IllegalStateException("Did not extract anything while available");
}
status.set(i, CraftingExtractorItemStatus.EXTRACTED);
} else {
status.set(i, CraftingExtractorItemStatus.MACHINE_DOES_NOT_ACCEPT);
}
return;
}
}
}
} }

View File

@@ -3,5 +3,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task;
public enum CraftingExtractorItemStatus { public enum CraftingExtractorItemStatus {
AVAILABLE, AVAILABLE,
MISSING, MISSING,
EXTRACTED EXTRACTED,
MACHINE_NONE,
MACHINE_DOES_NOT_ACCEPT
} }

View File

@@ -14,6 +14,9 @@ import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.Craf
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementItemRender; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementItemRender;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementText; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementText;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementItemStack; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementItemStack;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.step.CraftingStep;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.step.CraftingStepCraft;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.step.CraftingStepProcess;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.NonNullList; import net.minecraft.util.NonNullList;
@@ -136,15 +139,17 @@ public class CraftingTask implements ICraftingTask {
for (ItemStack output : pattern.getOutputs()) { for (ItemStack output : pattern.getOutputs()) {
results.add(output); results.add(output);
} }
return new CraftingStepProcess(pattern, network, new ArrayList<>(itemsToExtract.getStacks()));
} else { } else {
results.add(pattern.getOutput(took)); results.add(pattern.getOutput(took));
for (ItemStack byproduct : pattern.getByproducts(took)) { for (ItemStack byproduct : pattern.getByproducts(took)) {
results.add(byproduct); results.add(byproduct);
} }
}
return new CraftingStepCraft(pattern, inserter, network, new ArrayList<>(itemsToExtract.getStacks()), took); return new CraftingStepCraft(pattern, inserter, network, new ArrayList<>(itemsToExtract.getStacks()), took);
}
} }
private int getQuantityPerCraft(ICraftingPattern pattern, ItemStack requested) { private int getQuantityPerCraft(ICraftingPattern pattern, ItemStack requested) {
@@ -201,6 +206,21 @@ public class CraftingTask implements ICraftingTask {
return requested; return requested;
} }
@Override
public int onTrackedItemInserted(ItemStack stack, int size) {
for (CraftingStep step : steps) {
if (step instanceof CraftingStepProcess) {
size = ((CraftingStepProcess) step).onTrackedItemInserted(stack, size);
if (size == 0) {
break;
}
}
}
return size;
}
@Override @Override
public NBTTagCompound writeToNBT(NBTTagCompound tag) { public NBTTagCompound writeToNBT(NBTTagCompound tag) {
return tag; return tag;
@@ -281,6 +301,40 @@ public class CraftingTask implements ICraftingTask {
elements.commit(); elements.commit();
} }
if (steps.stream().anyMatch(s -> s instanceof CraftingStepProcess && !s.isCompleted())) {
elements.directAdd(new CraftingMonitorElementText("gui.refinedstorage:crafting_monitor.items_processing", 16));
for (CraftingStep step : steps) {
if (step instanceof CraftingStepProcess && !step.isCompleted()) {
CraftingExtractor extractor = ((CraftingStepProcess) step).getExtractor();
for (int i = 0; i < extractor.getItems().size(); ++i) {
ItemStack item = extractor.getItems().get(i);
CraftingExtractorItemStatus status = extractor.getStatus().get(i);
ICraftingMonitorElement element = new CraftingMonitorElementItemRender(
-1,
item,
item.getCount(),
32
);
if (status == CraftingExtractorItemStatus.MISSING) {
element = new CraftingMonitorElementInfo(element, "gui.refinedstorage:crafting_monitor.waiting_for_items");
} else if (status == CraftingExtractorItemStatus.MACHINE_DOES_NOT_ACCEPT) {
element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.machine_does_not_accept");
} else if (status == CraftingExtractorItemStatus.MACHINE_NONE) {
element = new CraftingMonitorElementError(element, "gui.refinedstorage:crafting_monitor.machine_none");
}
elements.add(element);
}
}
}
elements.commit();
}
return elements.getElements(); return elements.getElements();
} }

View File

@@ -1,4 +1,4 @@
package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task; package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.step;
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern;

View File

@@ -1,7 +1,9 @@
package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task; package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.step;
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern;
import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.network.INetwork;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.CraftingExtractor;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.CraftingInserter;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList; import net.minecraft.util.NonNullList;

View File

@@ -0,0 +1,61 @@
package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.step;
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern;
import com.raoulvdberge.refinedstorage.api.network.INetwork;
import com.raoulvdberge.refinedstorage.api.util.IStackList;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.CraftingExtractor;
import net.minecraft.item.ItemStack;
import java.util.List;
public class CraftingStepProcess extends CraftingStep {
private CraftingExtractor extractor;
private IStackList<ItemStack> itemsToReceive = API.instance().createItemStackList();
public CraftingStepProcess(ICraftingPattern pattern, INetwork network, List<ItemStack> toExtract) {
super(pattern);
this.extractor = new CraftingExtractor(network, toExtract);
for (ItemStack output : pattern.getOutputs()) {
this.itemsToReceive.add(output);
}
}
@Override
public boolean canExecute() {
extractor.updateStatus();
return extractor.isAllAvailable();
}
public int onTrackedItemInserted(ItemStack stack, int size) {
if (!extractor.isAllExtracted()) {
return size;
}
ItemStack inList = itemsToReceive.get(stack);
if (inList == null) {
return size;
}
int toExtract = Math.min(size, inList.getCount());
itemsToReceive.remove(stack, toExtract);
return size - toExtract;
}
@Override
public boolean execute() {
if (!extractor.isAllExtracted()) {
extractor.extractOneAndInsert(pattern.getContainer().getConnectedInventory());
}
return itemsToReceive.isEmpty();
}
public CraftingExtractor getExtractor() {
return extractor;
}
}

View File

@@ -64,8 +64,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, new ItemHandlerListenerNetworkNode(this), ItemUpgrade.TYPE_SPEED); private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, new ItemHandlerListenerNetworkNode(this), ItemUpgrade.TYPE_SPEED);
// Used to prevent infinite recursion on getRootContainer() when // Used to prevent infinite recursion on getRootContainer() when there's eg. two crafters facing each other.
// there's eg. two crafters facing each other.
private boolean visited = false; private boolean visited = false;
@Nullable @Nullable
@@ -173,20 +172,24 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
} }
@Override @Override
@Nullable
public IItemHandler getConnectedInventory() { public IItemHandler getConnectedInventory() {
ICraftingPatternContainer proxy = getRootContainer(); ICraftingPatternContainer proxy = getRootContainer();
if (proxy == null) { if (proxy == null) {
return null; return null;
} }
return WorldUtils.getItemHandler(proxy.getFacingTile(), proxy.getDirection().getOpposite()); return WorldUtils.getItemHandler(proxy.getFacingTile(), proxy.getDirection().getOpposite());
} }
@Override @Override
@Nullable
public TileEntity getConnectedTile() { public TileEntity getConnectedTile() {
ICraftingPatternContainer proxy = getRootContainer(); ICraftingPatternContainer proxy = getRootContainer();
if (proxy == null) { if (proxy == null) {
return null; return null;
} }
return proxy.getFacingTile(); return proxy.getFacingTile();
} }

View File

@@ -24,6 +24,7 @@ import java.util.List;
public class BlockWirelessTransmitter extends BlockNode { public class BlockWirelessTransmitter extends BlockNode {
// From BlockTorch // From BlockTorch
// TODO: make consistent with shape
private static final AxisAlignedBB WIRELESS_TRANSMITTER_AABB = new AxisAlignedBB(0.4000000059604645D, 0.0D, 0.4000000059604645D, 0.6000000238418579D, 0.6000000238418579D, 0.6000000238418579D); private static final AxisAlignedBB WIRELESS_TRANSMITTER_AABB = new AxisAlignedBB(0.4000000059604645D, 0.0D, 0.4000000059604645D, 0.6000000238418579D, 0.6000000238418579D, 0.6000000238418579D);
public BlockWirelessTransmitter() { public BlockWirelessTransmitter() {

View File

@@ -25,7 +25,6 @@ gui.refinedstorage:crafting_monitor.items_crafting=Teil herstellen
gui.refinedstorage:crafting_monitor.items_processing=Teil verarbeiten gui.refinedstorage:crafting_monitor.items_processing=Teil verarbeiten
gui.refinedstorage:crafting_monitor.items_inserting=Teil einfügen gui.refinedstorage:crafting_monitor.items_inserting=Teil einfügen
gui.refinedstorage:crafting_monitor.items_missing=Teil fehlt gui.refinedstorage:crafting_monitor.items_missing=Teil fehlt
gui.refinedstorage:crafting_monitor.machine_in_use=Maschine in Gebrauch
gui.refinedstorage:crafting_monitor.machine_none=keine Maschine gefunden gui.refinedstorage:crafting_monitor.machine_none=keine Maschine gefunden
gui.refinedstorage:crafting_monitor.waiting_for_items=Warte auf Teile gui.refinedstorage:crafting_monitor.waiting_for_items=Warte auf Teile
gui.refinedstorage:wireless_transmitter=Funk-Sender gui.refinedstorage:wireless_transmitter=Funk-Sender

View File

@@ -30,7 +30,7 @@ gui.refinedstorage:crafting_monitor.items_crafting=Items crafting
gui.refinedstorage:crafting_monitor.items_processing=Items processing gui.refinedstorage:crafting_monitor.items_processing=Items processing
gui.refinedstorage:crafting_monitor.items_inserting=Items inserting gui.refinedstorage:crafting_monitor.items_inserting=Items inserting
gui.refinedstorage:crafting_monitor.items_missing=Items missing gui.refinedstorage:crafting_monitor.items_missing=Items missing
gui.refinedstorage:crafting_monitor.machine_in_use=Machine is in use gui.refinedstorage:crafting_monitor.machine_does_not_accept=Machine doesn't accept item
gui.refinedstorage:crafting_monitor.machine_none=No machine found gui.refinedstorage:crafting_monitor.machine_none=No machine found
gui.refinedstorage:crafting_monitor.waiting_for_items=Waiting for items gui.refinedstorage:crafting_monitor.waiting_for_items=Waiting for items
gui.refinedstorage:crafting_monitor.network_full=Network is full gui.refinedstorage:crafting_monitor.network_full=Network is full

View File

@@ -30,7 +30,6 @@ gui.refinedstorage:crafting_monitor.items_crafting=Fabrica Objetos
gui.refinedstorage:crafting_monitor.items_processing=Procesamiento de objetos gui.refinedstorage:crafting_monitor.items_processing=Procesamiento de objetos
gui.refinedstorage:crafting_monitor.items_inserting=Inserta Objetos gui.refinedstorage:crafting_monitor.items_inserting=Inserta Objetos
gui.refinedstorage:crafting_monitor.items_missing=Faltan objetos gui.refinedstorage:crafting_monitor.items_missing=Faltan objetos
gui.refinedstorage:crafting_monitor.machine_in_use=Maquina en uso
gui.refinedstorage:crafting_monitor.machine_none=Maquina no Hallada gui.refinedstorage:crafting_monitor.machine_none=Maquina no Hallada
gui.refinedstorage:crafting_monitor.waiting_for_items=Esperando Objetos gui.refinedstorage:crafting_monitor.waiting_for_items=Esperando Objetos
gui.refinedstorage:wireless_transmitter=Emisor inalámbrico gui.refinedstorage:wireless_transmitter=Emisor inalámbrico

View File

@@ -29,7 +29,6 @@ gui.refinedstorage:crafting_monitor.items_crafting=Items en craft
gui.refinedstorage:crafting_monitor.items_processing=Items en traitement gui.refinedstorage:crafting_monitor.items_processing=Items en traitement
gui.refinedstorage:crafting_monitor.items_inserting=Insertion d'items gui.refinedstorage:crafting_monitor.items_inserting=Insertion d'items
gui.refinedstorage:crafting_monitor.items_missing=Items manquants gui.refinedstorage:crafting_monitor.items_missing=Items manquants
gui.refinedstorage:crafting_monitor.machine_in_use=Machine en cours d'utilisation
gui.refinedstorage:crafting_monitor.machine_none=Pas de machine disponible gui.refinedstorage:crafting_monitor.machine_none=Pas de machine disponible
gui.refinedstorage:crafting_monitor.waiting_for_items=En attente d'items gui.refinedstorage:crafting_monitor.waiting_for_items=En attente d'items
gui.refinedstorage:wireless_transmitter=Emetteur sans-fil gui.refinedstorage:wireless_transmitter=Emetteur sans-fil

View File

@@ -28,7 +28,6 @@ gui.refinedstorage:crafting_monitor.items_crafting=제작할 아이템
gui.refinedstorage:crafting_monitor.items_processing=가공할 아이템 gui.refinedstorage:crafting_monitor.items_processing=가공할 아이템
gui.refinedstorage:crafting_monitor.items_inserting=삽입할 아이템 gui.refinedstorage:crafting_monitor.items_inserting=삽입할 아이템
gui.refinedstorage:crafting_monitor.items_missing=부족한 아이템 gui.refinedstorage:crafting_monitor.items_missing=부족한 아이템
gui.refinedstorage:crafting_monitor.machine_in_use=기계가 이미 사용 중임
gui.refinedstorage:crafting_monitor.machine_none=기계를 찾을 수 없음 gui.refinedstorage:crafting_monitor.machine_none=기계를 찾을 수 없음
gui.refinedstorage:crafting_monitor.waiting_for_items=아이템을 기다리는 중 gui.refinedstorage:crafting_monitor.waiting_for_items=아이템을 기다리는 중
gui.refinedstorage:wireless_transmitter=무선 송신기 gui.refinedstorage:wireless_transmitter=무선 송신기

View File

@@ -22,7 +22,6 @@ gui.refinedstorage:crafting_monitor=Crafting Monitor
gui.refinedstorage:crafting_monitor.missing_items=Ontbrekende items gui.refinedstorage:crafting_monitor.missing_items=Ontbrekende items
gui.refinedstorage:crafting_monitor.items_crafting=Items aan het craften gui.refinedstorage:crafting_monitor.items_crafting=Items aan het craften
gui.refinedstorage:crafting_monitor.items_processing=Items aan het verwerken gui.refinedstorage:crafting_monitor.items_processing=Items aan het verwerken
gui.refinedstorage:crafting_monitor.machine_in_use=Wachten op machine die gebruikt wordt door een andere crafting taak
gui.refinedstorage:crafting_monitor.machine_none=Geen machine gevonden gui.refinedstorage:crafting_monitor.machine_none=Geen machine gevonden
gui.refinedstorage:wireless_transmitter=Draadloze Zender gui.refinedstorage:wireless_transmitter=Draadloze Zender
gui.refinedstorage:wireless_transmitter.distance=%d blokken gui.refinedstorage:wireless_transmitter.distance=%d blokken

View File

@@ -29,7 +29,6 @@ gui.refinedstorage:crafting_monitor.items_crafting=Fabricando itens
gui.refinedstorage:crafting_monitor.items_processing=Processando itens gui.refinedstorage:crafting_monitor.items_processing=Processando itens
gui.refinedstorage:crafting_monitor.items_inserting=Inserindo itens gui.refinedstorage:crafting_monitor.items_inserting=Inserindo itens
gui.refinedstorage:crafting_monitor.items_missing=Ausência de itens gui.refinedstorage:crafting_monitor.items_missing=Ausência de itens
gui.refinedstorage:crafting_monitor.machine_in_use=A máquina está em uso
gui.refinedstorage:crafting_monitor.machine_none=Nenhuma máquina encontrada gui.refinedstorage:crafting_monitor.machine_none=Nenhuma máquina encontrada
gui.refinedstorage:crafting_monitor.waiting_for_items=Esperando itens gui.refinedstorage:crafting_monitor.waiting_for_items=Esperando itens
gui.refinedstorage:wireless_transmitter=Transmissor Wireless gui.refinedstorage:wireless_transmitter=Transmissor Wireless

View File

@@ -30,7 +30,6 @@ gui.refinedstorage:crafting_monitor.items_crafting=Предметы с возм
gui.refinedstorage:crafting_monitor.items_processing=Предметы с возможностью обработки gui.refinedstorage:crafting_monitor.items_processing=Предметы с возможностью обработки
gui.refinedstorage:crafting_monitor.items_inserting=Вставка предметов gui.refinedstorage:crafting_monitor.items_inserting=Вставка предметов
gui.refinedstorage:crafting_monitor.items_missing=Отсутствуют предметы gui.refinedstorage:crafting_monitor.items_missing=Отсутствуют предметы
gui.refinedstorage:crafting_monitor.machine_in_use=Машина используется
gui.refinedstorage:crafting_monitor.machine_none=Машина не найдена gui.refinedstorage:crafting_monitor.machine_none=Машина не найдена
gui.refinedstorage:crafting_monitor.waiting_for_items=Ожидание предметов gui.refinedstorage:crafting_monitor.waiting_for_items=Ожидание предметов
gui.refinedstorage:wireless_transmitter=Передатчик gui.refinedstorage:wireless_transmitter=Передатчик

View File

@@ -30,7 +30,6 @@ gui.refinedstorage:crafting_monitor.items_crafting=正在合成
gui.refinedstorage:crafting_monitor.items_processing=正在处理 gui.refinedstorage:crafting_monitor.items_processing=正在处理
gui.refinedstorage:crafting_monitor.items_inserting=物品正在输入 gui.refinedstorage:crafting_monitor.items_inserting=物品正在输入
gui.refinedstorage:crafting_monitor.items_missing=物品丢失中 gui.refinedstorage:crafting_monitor.items_missing=物品丢失中
gui.refinedstorage:crafting_monitor.machine_in_use=该机器正在处理其他工作,请稍等
gui.refinedstorage:crafting_monitor.machine_none=找不到机器 gui.refinedstorage:crafting_monitor.machine_none=找不到机器
gui.refinedstorage:crafting_monitor.waiting_for_items=正在等待物品 gui.refinedstorage:crafting_monitor.waiting_for_items=正在等待物品
gui.refinedstorage:wireless_transmitter=无线访问点 gui.refinedstorage:wireless_transmitter=无线访问点