Solderer removal.

- Removed Solderer.
- Added cutting tool.
- Renamed "Printed Processors" to "Cut Processors"
- Made autocrafting reuse reusable items like the cutting tool.
This commit is contained in:
raoulvdberge
2018-06-28 14:56:15 +02:00
parent f546177ddc
commit fea620c48d
128 changed files with 759 additions and 2712 deletions

View File

@@ -9,6 +9,9 @@ NOTE: Worlds that used Refined Storage 1.5.x are fully compatible with Refined S
- Removed blocking mode in autocrafting (raoulvdberge)
- Removed the Wrench (raoulvdberge)
- Removed "void excess items or fluids" functionality on storages (raoulvdberge)
- Removed the Solderer (raoulvdberge)
- Added the Cutting Tool (raoulvdberge)
- Renamed "Printed Processors" to "Cut Processors" (raoulvdberge)
- Rewrote autocrafting (raoulvdberge)
- Rewrote network energy storage (samtrion)
- Autocrafting tasks that take longer than 5 seconds to CALCULATE (NOT execute) are automatically stopped to avoid server strain (raoulvdberge)
@@ -38,7 +41,6 @@ NOTE: Worlds that used Refined Storage 1.5.x are fully compatible with Refined S
- The Crafting Monitor now splits its tasks over tabs (raoulvdberge)
- Made all IO blocks have a blacklist instead of a whitelist by default (raoulvdberge)
- An empty blacklist now means: accept any item. An empty whitelist now means: don't accept any item (an empty whitelist USED to mean: accept any item) (raoulvdberge)
- Any mod can now add JSON Solderer recipes without requiring the API, by putting the JSONs in their assets directory in a "solderer_recipes" directory (raoulvdberge)
- The Importer now skips over empty slots (raoulvdberge)
- The Exporter now round-robins over every configured item or fluid to export instead of exporting them all at once (raoulvdberge)
- Updated Russian translation (kellixon)

View File

@@ -12,7 +12,6 @@ public final class RSBlocks {
public static final BlockExporter EXPORTER = new BlockExporter();
public static final BlockDetector DETECTOR = new BlockDetector();
public static final BlockMachineCasing MACHINE_CASING = new BlockMachineCasing();
public static final BlockSolderer SOLDERER = new BlockSolderer();
public static final BlockDestructor DESTRUCTOR = new BlockDestructor();
public static final BlockConstructor CONSTRUCTOR = new BlockConstructor();
public static final BlockStorage STORAGE = new BlockStorage();

View File

@@ -36,7 +36,6 @@ public class RSConfig {
public int interfaceUsage;
public int fluidInterfaceUsage;
public int relayUsage;
public int soldererUsage;
public int storageUsage;
public int fluidStorageUsage;
public int wirelessTransmitterUsage;
@@ -103,7 +102,6 @@ public class RSConfig {
//region Upgrades
public int rangeUpgradeUsage;
public int speedUpgradeUsage;
public float soldererSpeedIncreasePerSpeedUpgrade;
public int craftingUpgradeUsage;
public int stackUpgradeUsage;
public int interdimensionalUpgradeUsage;
@@ -180,7 +178,6 @@ public class RSConfig {
interfaceUsage = config.getInt("interface", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Interfaces");
fluidInterfaceUsage = config.getInt("fluidInterface", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Fluid Interfaces");
relayUsage = config.getInt("relay", ENERGY, 1, 0, Integer.MAX_VALUE, "The energy used by Relays");
soldererUsage = config.getInt("solderer", ENERGY, 3, 0, Integer.MAX_VALUE, "The energy used by Solderers");
storageUsage = config.getInt("storage", ENERGY, 1, 0, Integer.MAX_VALUE, "The energy used by Storage Blocks");
fluidStorageUsage = config.getInt("fluidStorage", ENERGY, 1, 0, Integer.MAX_VALUE, "The energy used by Fluid Storage Blocks");
wirelessTransmitterUsage = config.getInt("wirelessTransmitter", ENERGY, 8, 0, Integer.MAX_VALUE, "The energy used by Wireless Transmitters");
@@ -247,7 +244,6 @@ public class RSConfig {
//region Upgrades
rangeUpgradeUsage = config.getInt("range", UPGRADES, 8, 0, Integer.MAX_VALUE, "The additional energy used per Range Upgrade");
speedUpgradeUsage = config.getInt("speed", UPGRADES, 2, 0, Integer.MAX_VALUE, "The additional energy used per Speed Upgrade");
soldererSpeedIncreasePerSpeedUpgrade = config.getFloat("soldererSpeedIncreasePerSpeedUpgrade", UPGRADES, 22.5F, 0F, 25F, "The speed increase percentage in the Solderer per Speed Upgrade");
craftingUpgradeUsage = config.getInt("crafting", UPGRADES, 5, 0, Integer.MAX_VALUE, "The additional energy used per Crafting Upgrade");
stackUpgradeUsage = config.getInt("stack", UPGRADES, 12, 0, Integer.MAX_VALUE, "The additional energy used per Stack Upgrade");
interdimensionalUpgradeUsage = config.getInt("interdimensional", UPGRADES, 1000, 0, Integer.MAX_VALUE, "The additional energy used by the Interdimensional Upgrade");

View File

@@ -7,7 +7,6 @@ public final class RSGui {
public static final int IMPORTER = 3;
public static final int EXPORTER = 4;
public static final int DETECTOR = 5;
public static final int SOLDERER = 6;
public static final int DESTRUCTOR = 7;
public static final int CONSTRUCTOR = 8;
public static final int STORAGE = 9;

View File

@@ -20,4 +20,5 @@ public final class RSItems {
public static final ItemFluidStorageDisk FLUID_STORAGE_DISK = new ItemFluidStorageDisk();
public static final ItemFluidStoragePart FLUID_STORAGE_PART = new ItemFluidStoragePart();
public static final ItemSecurityCard SECURITY_CARD = new ItemSecurityCard();
public static final ItemCuttingTool CUTTING_TOOL = new ItemCuttingTool();
}

View File

@@ -13,7 +13,6 @@ import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeManager;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeRegistry;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandlerRegistry;
import com.raoulvdberge.refinedstorage.api.solderer.ISoldererRegistry;
import com.raoulvdberge.refinedstorage.api.storage.StorageType;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskManager;
@@ -67,12 +66,6 @@ public interface IRSAPI {
*/
INetworkNodeManager getNetworkNodeManager(World world);
/**
* @return the solderer registry
*/
@Nonnull
ISoldererRegistry getSoldererRegistry();
/**
* @return the crafting task registry
*/

View File

@@ -1,42 +0,0 @@
package com.raoulvdberge.refinedstorage.api.solderer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import javax.annotation.Nonnull;
/**
* Represents a recipe in the solderer.
*/
public interface ISoldererRecipe {
/**
* @return the name of this solderer recipe
*/
ResourceLocation getName();
/**
* @param row the row in the solderer that we want the stack for (between 0 - 2)
* @return possible stack(s) for the given row, or empty list for no stack
*/
@Nonnull
NonNullList<ItemStack> getRow(int row);
/**
* @return the stack that this recipe gives back
*/
@Nonnull
ItemStack getResult();
/**
* @return the duration in ticks that this recipe takes to give the result back
*/
int getDuration();
/**
* @return whether this recipe can be used to calculate the EMC value of the resulting item in the ProjectE mod
*/
default boolean isProjectERecipe() {
return true;
}
}

View File

@@ -1,33 +0,0 @@
package com.raoulvdberge.refinedstorage.api.solderer;
import net.minecraftforge.items.IItemHandler;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
/**
* The recipe registry of the solderer.
*/
public interface ISoldererRegistry {
/**
* Adds a recipe to the registry.
*
* @param recipe the recipe to add
*/
void addRecipe(@Nonnull ISoldererRecipe recipe);
/**
* Returns a solderer recipe from the rows.
*
* @param ingredients an item handler, where slots 0 - 2 are the ingredient rows
* @return the recipe, or null if no recipe was found
*/
@Nullable
ISoldererRecipe getRecipe(@Nonnull IItemHandler ingredients);
/**
* @return a list with all the solderer recipes
*/
List<ISoldererRecipe> getRecipes();
}

View File

@@ -17,7 +17,6 @@ import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeRegistry;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandlerRegistry;
import com.raoulvdberge.refinedstorage.api.solderer.ISoldererRegistry;
import com.raoulvdberge.refinedstorage.api.storage.StorageType;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskManager;
@@ -37,7 +36,6 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeRegistry;
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.wireless.WirelessGridRegistry;
import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterChannel;
import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerRegistry;
import com.raoulvdberge.refinedstorage.apiimpl.solderer.SoldererRegistry;
import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.*;
import com.raoulvdberge.refinedstorage.apiimpl.util.*;
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
@@ -65,7 +63,6 @@ public class API implements IRSAPI {
private IComparer comparer = new Comparer();
private IQuantityFormatter quantityFormatter = new QuantityFormatter();
private INetworkNodeRegistry networkNodeRegistry = new NetworkNodeRegistry();
private ISoldererRegistry soldererRegistry = new SoldererRegistry();
private ICraftingTaskRegistry craftingTaskRegistry = new CraftingTaskRegistry();
private ICraftingMonitorElementRegistry craftingMonitorElementRegistry = new CraftingMonitorElementRegistry();
private ICraftingPreviewElementRegistry craftingPreviewElementRegistry = new CraftingPreviewElementRegistry();
@@ -138,12 +135,6 @@ public class API implements IRSAPI {
return instance;
}
@Override
@Nonnull
public ISoldererRegistry getSoldererRegistry() {
return soldererRegistry;
}
@Override
@Nonnull
public ICraftingTaskRegistry getCraftingTaskRegistry() {

View File

@@ -10,6 +10,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTaskError;
import com.raoulvdberge.refinedstorage.api.network.INetwork;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.api.util.IStackList;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementColor;
@@ -31,6 +32,7 @@ import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.items.ItemHandlerHelper;
import org.apache.commons.lang3.tuple.Pair;
import javax.annotation.Nullable;
@@ -188,8 +190,10 @@ public class CraftingTask implements ICraftingTask {
took.add(possibleInput);
ItemStack fromSelf = results.get(possibleInput);
ItemStack fromNetwork = mutatedStorage.get(possibleInput);
int flags = getFlags(possibleInput);
ItemStack fromSelf = results.get(possibleInput, flags);
ItemStack fromNetwork = mutatedStorage.get(possibleInput, flags);
int remaining = possibleInput.getCount();
@@ -199,11 +203,13 @@ public class CraftingTask implements ICraftingTask {
itemsToExtract.add(possibleInput, toTake);
results.remove(possibleInput, toTake);
results.remove(fromSelf, toTake);
remaining -= toTake;
fromSelf = results.get(possibleInput);
took.set(took.size() - 1, ItemHandlerHelper.copyStackWithSize(fromSelf, possibleInput.getCount()));
fromSelf = results.get(possibleInput, flags);
} else if (fromNetwork != null) {
int toTake = Math.min(remaining, fromNetwork.getCount());
@@ -211,11 +217,13 @@ public class CraftingTask implements ICraftingTask {
itemsToExtract.add(possibleInput, toTake);
mutatedStorage.remove(possibleInput, toTake);
mutatedStorage.remove(fromNetwork, toTake);
remaining -= toTake;
fromNetwork = mutatedStorage.get(possibleInput);
took.set(took.size() - 1, ItemHandlerHelper.copyStackWithSize(fromNetwork, possibleInput.getCount()));
fromNetwork = mutatedStorage.get(possibleInput, flags);
} else {
ICraftingPattern subPattern = network.getCraftingManager().getPattern(possibleInput);
@@ -231,12 +239,12 @@ public class CraftingTask implements ICraftingTask {
this.steps.add(result.getLeft());
fromSelf = results.get(possibleInput);
fromSelf = results.get(possibleInput, flags);
if (fromSelf == null) {
throw new IllegalStateException("Recursive calculation didn't yield anything");
}
fromNetwork = mutatedStorage.get(possibleInput);
fromNetwork = mutatedStorage.get(possibleInput, flags);
subPatternChain.cycle();
}
@@ -586,4 +594,12 @@ public class CraftingTask implements ICraftingTask {
throw new CraftingTaskReadException("Crafting pattern container doesn't exist anymore");
}
}
public static int getFlags(ItemStack stack) {
if (stack.getItem().isDamageable()) {
return IComparer.COMPARE_NBT;
}
return IComparer.COMPARE_NBT | IComparer.COMPARE_DAMAGE;
}
}

View File

@@ -2,6 +2,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.extractor;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.CraftingTaskReadException;
import com.raoulvdberge.refinedstorage.api.network.INetwork;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.CraftingTask;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
@@ -68,7 +69,7 @@ public class CraftingExtractor {
if (status.get(i) != CraftingExtractorItemStatus.EXTRACTED) {
ItemStack stack = items.get(i);
ItemStack inNetwork = network.extractItem(stack, stack.getCount(), true);
ItemStack inNetwork = network.extractItem(stack, stack.getCount(), CraftingTask.getFlags(stack), true);
CraftingExtractorItemStatus previousStatus = status.get(i);
@@ -108,7 +109,7 @@ public class CraftingExtractor {
public void extractOne(@Nullable IItemHandler processingInventory) {
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(), false);
ItemStack extracted = network.extractItem(items.get(i), items.get(i).getCount(), CraftingTask.getFlags(items.get(i)), false);
if (extracted == null) {
throw new IllegalStateException("Did not extract anything while available");
}

View File

@@ -1,221 +0,0 @@
package com.raoulvdberge.refinedstorage.apiimpl.network.node;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.network.INetwork;
import com.raoulvdberge.refinedstorage.api.solderer.ISoldererRecipe;
import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerListenerNetworkNode;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerProxy;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerUpgrade;
import com.raoulvdberge.refinedstorage.item.ItemUpgrade;
import com.raoulvdberge.refinedstorage.util.StackUtils;
import com.raoulvdberge.refinedstorage.util.WorldUtils;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import javax.annotation.Nonnull;
public class NetworkNodeSolderer extends NetworkNode {
public static final String ID = "solderer";
public static final String NBT_WORKING = "Working";
private static final String NBT_PROGRESS = "Progress";
private ItemHandlerBase ingredients = new ItemHandlerBase(3, new ItemHandlerListenerNetworkNode(this)) {
@Override
@Nonnull
public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) {
for (ISoldererRecipe recipe : API.instance().getSoldererRegistry().getRecipes()) {
for (ItemStack possibility : recipe.getRow(slot)) {
if (API.instance().getComparer().isEqual(possibility, stack, IComparer.COMPARE_NBT | IComparer.COMPARE_DAMAGE)) {
return super.insertItem(slot, stack, simulate);
}
}
}
return stack;
}
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
recipe = API.instance().getSoldererRegistry().getRecipe(ingredients);
}
};
private ItemHandlerBase result = new ItemHandlerBase(1, new ItemHandlerListenerNetworkNode(this)) {
@Override
@Nonnull
public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) {
return stack;
}
};
private ItemHandlerProxy items = new ItemHandlerProxy(ingredients, result);
private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, new ItemHandlerListenerNetworkNode(this), ItemUpgrade.TYPE_SPEED);
private boolean wasWorking;
private boolean working;
private ISoldererRecipe recipe;
private int progress;
public NetworkNodeSolderer(World world, BlockPos pos) {
super(world, pos);
}
@Override
public int getEnergyUsage() {
return RS.INSTANCE.config.soldererUsage + upgrades.getEnergyUsage();
}
@Override
public void update() {
super.update();
if (wasWorking != working) {
wasWorking = working;
markDirty();
WorldUtils.updateBlock(world, pos);
}
if (network == null || !canUpdate()) {
return;
}
if (working) {
if (recipe == null) {
working = false;
progress = 0;
markDirty();
} else if ((result.getStackInSlot(0).isEmpty() || API.instance().getComparer().isEqualNoQuantity(recipe.getResult(), result.getStackInSlot(0))) && result.getStackInSlot(0).getCount() + recipe.getResult().getCount() <= result.getStackInSlot(0).getMaxStackSize()) {
progress++;
if (progress >= getDuration()) {
ItemStack resultSlot = result.getStackInSlot(0);
if (resultSlot.isEmpty()) {
result.setStackInSlot(0, recipe.getResult().copy());
} else {
resultSlot.grow(recipe.getResult().getCount());
}
for (int i = 0; i < 3; ++i) {
ItemStack ingredientSlot = ingredients.getStackInSlot(i);
if (!ingredientSlot.isEmpty()) {
ingredientSlot.shrink(recipe.getRow(i).get(0).getCount());
}
}
recipe = API.instance().getSoldererRegistry().getRecipe(ingredients);
progress = 0;
}
markDirty();
}
} else if (recipe != null) {
working = true;
markDirty();
}
}
@Override
public void onConnectedStateChange(INetwork network, boolean state) {
super.onConnectedStateChange(network, state);
if (!state) {
recipe = null;
progress = 0;
working = false;
} else {
recipe = API.instance().getSoldererRegistry().getRecipe(ingredients);
}
}
@Override
public void read(NBTTagCompound tag) {
super.read(tag);
StackUtils.readItems(ingredients, 0, tag);
StackUtils.readItems(upgrades, 1, tag);
StackUtils.readItems(result, 2, tag);
recipe = API.instance().getSoldererRegistry().getRecipe(ingredients);
if (tag.hasKey(NBT_WORKING)) {
working = tag.getBoolean(NBT_WORKING);
wasWorking = working;
}
if (tag.hasKey(NBT_PROGRESS)) {
progress = tag.getInteger(NBT_PROGRESS);
}
}
@Override
public String getId() {
return ID;
}
@Override
public NBTTagCompound write(NBTTagCompound tag) {
super.write(tag);
StackUtils.writeItems(ingredients, 0, tag);
StackUtils.writeItems(upgrades, 1, tag);
StackUtils.writeItems(result, 2, tag);
tag.setBoolean(NBT_WORKING, working);
tag.setInteger(NBT_PROGRESS, progress);
return tag;
}
public ItemHandlerBase getIngredients() {
return ingredients;
}
public ItemHandlerBase getResult() {
return result;
}
public ItemHandlerProxy getItems() {
return items;
}
public IItemHandler getUpgrades() {
return upgrades;
}
public boolean isWorking() {
return working;
}
public int getProgress() {
return progress;
}
public int getDuration() {
if (recipe == null) {
return 0;
}
return (int) ((float) recipe.getDuration() - ((float) recipe.getDuration() / 100F * ((float) upgrades.getUpgradeCount(ItemUpgrade.TYPE_SPEED) * RS.INSTANCE.config.soldererSpeedIncreasePerSpeedUpgrade)));
}
@Override
public IItemHandler getDrops() {
return new CombinedInvWrapper(ingredients, result, upgrades);
}
}

View File

@@ -1,79 +0,0 @@
package com.raoulvdberge.refinedstorage.apiimpl.solderer;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSyntaxException;
import com.raoulvdberge.refinedstorage.api.solderer.ISoldererRecipe;
import com.raoulvdberge.refinedstorage.util.StackUtils;
import net.minecraft.item.ItemStack;
import net.minecraft.util.JsonUtils;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.crafting.CraftingHelper;
import net.minecraftforge.common.crafting.JsonContext;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;
public class SoldererRecipeFactory {
private final ResourceLocation name;
private JsonObject json;
public SoldererRecipeFactory(ResourceLocation name, JsonObject json) {
this.name = name;
this.json = json;
}
public ISoldererRecipe create(JsonContext context) {
JsonArray rowsArray = JsonUtils.getJsonArray(json, "rows");
if (rowsArray.size() != 3) {
throw new JsonSyntaxException("Expected 3 rows, got " + rowsArray.size() + " rows");
}
List<NonNullList<ItemStack>> rows = new ArrayList<>(3);
for (JsonElement element : rowsArray) {
if (element.isJsonNull()) {
rows.add(StackUtils.emptyNonNullList());
} else {
rows.add(NonNullList.from(ItemStack.EMPTY, CraftingHelper.getIngredient(element, context).getMatchingStacks()));
}
}
final ItemStack result = CraftingHelper.getItemStack(JsonUtils.getJsonObject(json, "result"), context);
final int duration = JsonUtils.getInt(json, "duration");
final boolean projectERecipe = JsonUtils.getBoolean(json, "projecte", true);
return new ISoldererRecipe() {
@Override
public ResourceLocation getName() {
return name;
}
@Nonnull
@Override
public NonNullList<ItemStack> getRow(int row) {
return rows.get(row);
}
@Nonnull
@Override
public ItemStack getResult() {
return result;
}
@Override
public int getDuration() {
return duration;
}
@Override
public boolean isProjectERecipe() {
return projectERecipe;
}
};
}
}

View File

@@ -1,61 +0,0 @@
package com.raoulvdberge.refinedstorage.apiimpl.solderer;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import net.minecraft.util.JsonUtils;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.crafting.CraftingHelper;
import net.minecraftforge.common.crafting.JsonContext;
import net.minecraftforge.fml.common.FMLLog;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.ModContainer;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
public class SoldererRecipeLoader {
private static Gson GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
public static void load() {
for (ModContainer container : Loader.instance().getActiveModList()) {
JsonContext context = new JsonContext(container.getModId());
CraftingHelper.findFiles(container, "assets/" + container.getModId() + "/solderer_recipes", root -> true, (root, file) -> {
String relative = root.relativize(file).toString();
if (!"json".equals(FilenameUtils.getExtension(file.toString()))) {
return true;
}
String name = FilenameUtils.removeExtension(relative).replaceAll("\\\\", "/");
ResourceLocation key = new ResourceLocation(container.getModId(), name);
BufferedReader reader = null;
try {
reader = Files.newBufferedReader(file);
API.instance().getSoldererRegistry().addRecipe(new SoldererRecipeFactory(key, JsonUtils.fromJson(GSON, reader, JsonObject.class)).create(context));
} catch (JsonParseException e) {
FMLLog.log.error("Parsing error while reading JSON solderer recipe {}", key);
return false;
} catch (IOException e) {
FMLLog.log.error("Couldn't read JSON solderer recipe {}", key);
return false;
} finally {
IOUtils.closeQuietly(reader);
}
return true;
}, false, false);
}
}
}

View File

@@ -1,62 +0,0 @@
package com.raoulvdberge.refinedstorage.apiimpl.solderer;
import com.raoulvdberge.refinedstorage.api.solderer.ISoldererRecipe;
import com.raoulvdberge.refinedstorage.api.solderer.ISoldererRegistry;
import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.items.IItemHandler;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.LinkedList;
import java.util.List;
public class SoldererRegistry implements ISoldererRegistry {
private List<ISoldererRecipe> recipes = new LinkedList<>();
@Override
public void addRecipe(@Nonnull ISoldererRecipe recipe) {
recipes.add(recipe);
}
@Override
@Nullable
public ISoldererRecipe getRecipe(@Nonnull IItemHandler ingredients) {
for (ISoldererRecipe recipe : recipes) {
int rowsFound = 0;
for (int i = 0; i < 3; ++i) {
NonNullList<ItemStack> possibilities = recipe.getRow(i);
if (possibilities.isEmpty() && ingredients.getStackInSlot(i).isEmpty()) {
rowsFound++;
continue;
}
for (ItemStack possibility : possibilities) {
if (API.instance().getComparer().isEqual(possibility, ingredients.getStackInSlot(i), IComparer.COMPARE_NBT | IComparer.COMPARE_DAMAGE)) {
if (ingredients.getStackInSlot(i).getCount() >= possibility.getCount()) {
rowsFound++;
break;
}
}
}
}
if (rowsFound == 3) {
return recipe;
}
}
return null;
}
@Override
public List<ISoldererRecipe> getRecipes() {
return recipes;
}
}

View File

@@ -1,90 +0,0 @@
package com.raoulvdberge.refinedstorage.block;
import com.raoulvdberge.refinedstorage.RSGui;
import com.raoulvdberge.refinedstorage.tile.TileSolderer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.Random;
public class BlockSolderer extends BlockNode {
public BlockSolderer() {
super("solderer");
}
@Override
public TileEntity createTileEntity(World world, IBlockState state) {
return new TileSolderer();
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
if (!world.isRemote) {
tryOpenNetworkGui(RSGui.SOLDERER, player, world, pos, side);
}
return true;
}
@Override
@SideOnly(Side.CLIENT)
public void randomDisplayTick(IBlockState state, World world, BlockPos pos, Random rand) {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileSolderer && ((TileSolderer) tile).isWorking()) {
EnumFacing direction = getActualState(state, world, pos).getValue(getDirection().getProperty());
double x = 0;
double y = (double) pos.getY() + 0.6D + rand.nextDouble() / 32F;
double z = 0;
if (direction == EnumFacing.NORTH) {
x = (double) pos.getX() + 0.4D;
z = (double) pos.getZ() + 0.4D;
} else if (direction == EnumFacing.EAST) {
x = (double) pos.getX() + 0.6D;
z = (double) pos.getZ() + 0.4D;
} else if (direction == EnumFacing.SOUTH) {
x = (double) pos.getX() + 0.6D;
z = (double) pos.getZ() + 0.6D;
} else if (direction == EnumFacing.WEST) {
x = (double) pos.getX() + 0.4D;
z = (double) pos.getZ() + 0.6D;
}
int particles = rand.nextInt(5);
for (int i = 0; i < 1 + particles; ++i) {
world.spawnParticle(
EnumParticleTypes.SMOKE_NORMAL,
x + (rand.nextDouble() / 16F * (rand.nextBoolean() ? 1 : -1)),
y,
z + (rand.nextDouble() / 16F * (rand.nextBoolean() ? 1 : -1)),
0.0D,
0.0D,
0.0D
);
}
}
}
@Override
@SuppressWarnings("deprecation")
public boolean isOpaqueCube(IBlockState state) {
return false;
}
@Override
@SuppressWarnings("deprecation")
public boolean isFullCube(IBlockState state) {
return false;
}
}

View File

@@ -1,67 +0,0 @@
package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.RSItems;
import com.raoulvdberge.refinedstorage.container.slot.SlotOutput;
import com.raoulvdberge.refinedstorage.tile.TileSolderer;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
public class ContainerSolderer extends ContainerBase {
public ContainerSolderer(TileSolderer solderer, EntityPlayer player) {
super(solderer, player);
int x = 44;
int y = 20;
for (int i = 0; i < 3; ++i) {
addSlotToContainer(new SlotItemHandler(solderer.getNode().getIngredients(), i, x, y));
y += 18;
}
addSlotToContainer(new SlotOutput(solderer.getNode().getResult(), 0, 127, 38));
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(solderer.getNode().getUpgrades(), i, 187, 6 + (i * 18)));
}
addPlayerInventory(8, 89);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
ItemStack stack = ItemStack.EMPTY;
Slot slot = getSlot(index);
if (slot.getHasStack()) {
stack = slot.getStack();
if (index < 4) {
if (!mergeItemStack(stack, 4 + 4, inventorySlots.size(), false)) {
return ItemStack.EMPTY;
}
} else if (index < 4 + 4) {
if (!mergeItemStack(stack, 4 + 4, inventorySlots.size(), false)) {
return ItemStack.EMPTY;
}
} else {
if (stack.getItem() != RSItems.UPGRADE || !mergeItemStack(stack, 4, 4 + 4, false)) {
if (!mergeItemStack(stack, 0, 3, false)) { // 0 - 3 because we can't shift click to output slot
return ItemStack.EMPTY;
}
}
}
if (stack.getCount() == 0) {
slot.putStack(ItemStack.EMPTY);
} else {
slot.onSlotChanged();
}
}
return stack;
}
}

View File

@@ -37,8 +37,6 @@ public class GuiHandler implements IGuiHandler {
return new ContainerExporter((TileExporter) tile, player);
case RSGui.DETECTOR:
return new ContainerDetector((TileDetector) tile, player);
case RSGui.SOLDERER:
return new ContainerSolderer((TileSolderer) tile, player);
case RSGui.DESTRUCTOR:
return new ContainerDestructor((TileDestructor) tile, player);
case RSGui.CONSTRUCTOR:
@@ -115,8 +113,6 @@ public class GuiHandler implements IGuiHandler {
return new GuiExporter((ContainerExporter) getContainer(ID, player, tile));
case RSGui.DETECTOR:
return new GuiDetector((ContainerDetector) getContainer(ID, player, tile));
case RSGui.SOLDERER:
return new GuiSolderer((ContainerSolderer) getContainer(ID, player, tile));
case RSGui.DESTRUCTOR:
return new GuiDestructor((ContainerDestructor) getContainer(ID, player, tile));
case RSGui.CONSTRUCTOR:

View File

@@ -1,48 +0,0 @@
package com.raoulvdberge.refinedstorage.gui;
import com.raoulvdberge.refinedstorage.container.ContainerSolderer;
import com.raoulvdberge.refinedstorage.gui.control.SideButtonRedstoneMode;
import com.raoulvdberge.refinedstorage.tile.TileSolderer;
public class GuiSolderer extends GuiBase {
public GuiSolderer(ContainerSolderer container) {
super(container, 211, 171);
}
@Override
public void init(int x, int y) {
addSideButton(new SideButtonRedstoneMode(this, TileSolderer.REDSTONE_MODE));
}
@Override
public void update(int x, int y) {
}
@Override
public void drawBackground(int x, int y, int mouseX, int mouseY) {
bindTexture("gui/solderer.png");
drawTexture(x, y, 0, 0, screenWidth, screenHeight);
if (TileSolderer.WORKING.getValue()) {
drawTexture(x + 83, y + 38 - 1, 212, 0, getProgressScaled(22), 15);
}
}
@Override
public void drawForeground(int mouseX, int mouseY) {
drawString(7, 7, t("gui.refinedstorage:solderer"));
drawString(7, 77, t("container.inventory"));
}
private int getProgressScaled(int scale) {
float progress = TileSolderer.PROGRESS.getValue();
float duration = TileSolderer.DURATION.getValue();
if (progress > duration) {
return scale;
}
return (int) (progress / duration * (float) scale);
}
}

View File

@@ -1,14 +1,9 @@
package com.raoulvdberge.refinedstorage.integration.jei;
import com.raoulvdberge.refinedstorage.RSBlocks;
import com.raoulvdberge.refinedstorage.container.ContainerSolderer;
import com.raoulvdberge.refinedstorage.gui.GuiSolderer;
import mezz.jei.api.IJeiRuntime;
import mezz.jei.api.IModPlugin;
import mezz.jei.api.IModRegistry;
import mezz.jei.api.JEIPlugin;
import mezz.jei.api.recipe.IRecipeCategoryRegistration;
import net.minecraft.item.ItemStack;
@JEIPlugin
public class RSJEIPlugin implements IModPlugin {
@@ -21,22 +16,8 @@ public class RSJEIPlugin implements IModPlugin {
INSTANCE = this;
registry.getRecipeTransferRegistry().addUniversalRecipeTransferHandler(new RecipeTransferHandlerGrid());
registry.getRecipeTransferRegistry().addRecipeTransferHandler(ContainerSolderer.class, RecipeCategorySolderer.ID, 0, 3, 8, 36);
registry.handleRecipes(RecipeWrapperSolderer.class, recipe -> recipe, RecipeCategorySolderer.ID);
registry.addRecipes(RecipeMakerSolderer.getRecipes(registry.getJeiHelpers().getGuiHelper()), RecipeCategorySolderer.ID);
registry.addRecipeCatalyst(new ItemStack(RSBlocks.SOLDERER), RecipeCategorySolderer.ID);
registry.addAdvancedGuiHandlers(new GuiHandlerGrid());
registry.addRecipeClickArea(GuiSolderer.class, 80, 36, 22, 15, RecipeCategorySolderer.ID);
}
@Override
public void registerCategories(IRecipeCategoryRegistration registry) {
registry.addRecipeCategories(new RecipeCategorySolderer(registry.getJeiHelpers().getGuiHelper()));
}
@Override

View File

@@ -1,65 +0,0 @@
package com.raoulvdberge.refinedstorage.integration.jei;
import mezz.jei.api.IGuiHelper;
import mezz.jei.api.gui.IDrawable;
import mezz.jei.api.gui.IGuiItemStackGroup;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.ingredients.IIngredients;
import mezz.jei.api.recipe.IRecipeCategory;
import net.minecraft.client.resources.I18n;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import javax.annotation.Nonnull;
public class RecipeCategorySolderer implements IRecipeCategory<RecipeWrapperSolderer> {
public static final String ID = "refinedstorage.solderer";
private IDrawable background;
public RecipeCategorySolderer(IGuiHelper helper) {
this.background = helper.createDrawable(new ResourceLocation("refinedstorage", "textures/gui/solderer.png"), 43, 19, 101, 54);
}
@Override
public String getUid() {
return ID;
}
@Override
public String getTitle() {
return I18n.format("gui.refinedstorage:solderer");
}
@Override
public String getModName() {
return I18n.format("itemGroup.refinedstorage");
}
@Override
public IDrawable getBackground() {
return background;
}
@Override
public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull RecipeWrapperSolderer recipeWrapper, @Nonnull IIngredients ingredients) {
IGuiItemStackGroup group = recipeLayout.getItemStacks();
int x = 0;
int y = 0;
for (int i = 0; i < 3; ++i) {
group.init(i, true, x, y);
y += 18;
}
group.init(3, false, 83, 18);
for (int i = 0; i < 3; ++i) {
group.set(i, ingredients.getInputs(ItemStack.class).get(i));
}
group.set(3, ingredients.getOutputs(ItemStack.class).get(0));
}
}

View File

@@ -1,29 +0,0 @@
package com.raoulvdberge.refinedstorage.integration.jei;
import com.raoulvdberge.refinedstorage.api.solderer.ISoldererRecipe;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import mezz.jei.api.IGuiHelper;
import net.minecraft.item.ItemStack;
import java.util.ArrayList;
import java.util.List;
public final class RecipeMakerSolderer {
public static List<RecipeWrapperSolderer> getRecipes(IGuiHelper guiHelper) {
List<RecipeWrapperSolderer> recipes = new ArrayList<>();
for (ISoldererRecipe recipe : API.instance().getSoldererRegistry().getRecipes()) {
List<List<ItemStack>> inputs = new ArrayList<>();
inputs.add(recipe.getRow(0));
inputs.add(recipe.getRow(1));
inputs.add(recipe.getRow(2));
ItemStack output = recipe.getResult();
recipes.add(new RecipeWrapperSolderer(guiHelper, recipe.getDuration(), inputs, output));
}
return recipes;
}
}

View File

@@ -1,47 +0,0 @@
package com.raoulvdberge.refinedstorage.integration.jei;
import mezz.jei.api.IGuiHelper;
import mezz.jei.api.gui.IDrawableAnimated;
import mezz.jei.api.ingredients.IIngredients;
import mezz.jei.api.recipe.IRecipeWrapper;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import java.util.List;
public class RecipeWrapperSolderer implements IRecipeWrapper {
private IDrawableAnimated progress;
private List<List<ItemStack>> inputs;
private ItemStack output;
public RecipeWrapperSolderer(IGuiHelper guiHelper, int duration, List<List<ItemStack>> inputs, ItemStack output) {
this.progress = guiHelper.createAnimatedDrawable(
guiHelper.createDrawable(
new ResourceLocation("refinedstorage", "textures/gui/solderer.png"),
212,
0,
22,
15
),
duration,
IDrawableAnimated.StartDirection.LEFT,
false
);
this.inputs = inputs;
this.output = output;
}
@Override
public void getIngredients(IIngredients ingredients) {
ingredients.setInputLists(ItemStack.class, inputs);
ingredients.setOutput(ItemStack.class, output);
}
@Override
public void drawInfo(Minecraft minecraft, int recipeWidth, int recipeHeight, int mouseX, int mouseY) {
progress.draw(minecraft, 40, 18);
}
}

View File

@@ -0,0 +1,36 @@
package com.raoulvdberge.refinedstorage.item;
import net.minecraft.item.ItemStack;
public class ItemCuttingTool extends ItemBase {
public ItemCuttingTool() {
super("cutting_tool");
setMaxDamage(50);
setMaxStackSize(1);
}
@Override
public boolean isRepairable() {
return false;
}
@Override
public ItemStack getContainerItem(ItemStack stack) {
ItemStack copy = stack.copy();
copy.setItemDamage(stack.getItemDamage() + 1);
return copy;
}
@Override
public boolean hasContainerItem(ItemStack stack) {
return true;
}
@Override
public String getUnlocalizedName(ItemStack stack) {
return getUnlocalizedName();
}
}

View File

@@ -5,13 +5,13 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
public class ItemProcessor extends ItemBase {
public static final int TYPE_PRINTED_BASIC = 0;
public static final int TYPE_PRINTED_IMPROVED = 1;
public static final int TYPE_PRINTED_ADVANCED = 2;
public static final int TYPE_CUT_BASIC = 0;
public static final int TYPE_CUT_IMPROVED = 1;
public static final int TYPE_CUT_ADVANCED = 2;
public static final int TYPE_BASIC = 3;
public static final int TYPE_IMPROVED = 4;
public static final int TYPE_ADVANCED = 5;
public static final int TYPE_PRINTED_SILICON = 6;
public static final int TYPE_CUT_SILICON = 6;
public ItemProcessor() {
super("processor");

View File

@@ -167,13 +167,13 @@ public class ProxyClient extends ProxyCommon {
ModelLoader.setCustomModelResourceLocation(RSItems.FLUID_STORAGE_PART, ItemFluidStoragePart.TYPE_1024K, new ModelResourceLocation("refinedstorage:1024k_fluid_storage_part", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.FLUID_STORAGE_PART, ItemFluidStoragePart.TYPE_4096K, new ModelResourceLocation("refinedstorage:4096k_fluid_storage_part", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.PROCESSOR, ItemProcessor.TYPE_PRINTED_BASIC, new ModelResourceLocation("refinedstorage:basic_printed_processor", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.PROCESSOR, ItemProcessor.TYPE_PRINTED_IMPROVED, new ModelResourceLocation("refinedstorage:improved_printed_processor", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.PROCESSOR, ItemProcessor.TYPE_PRINTED_ADVANCED, new ModelResourceLocation("refinedstorage:advanced_printed_processor", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.PROCESSOR, ItemProcessor.TYPE_CUT_BASIC, new ModelResourceLocation("refinedstorage:cut_basic_processor", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.PROCESSOR, ItemProcessor.TYPE_CUT_IMPROVED, new ModelResourceLocation("refinedstorage:cut_improved_processor", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.PROCESSOR, ItemProcessor.TYPE_CUT_ADVANCED, new ModelResourceLocation("refinedstorage:cut_advanced_processor", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.PROCESSOR, ItemProcessor.TYPE_BASIC, new ModelResourceLocation("refinedstorage:basic_processor", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.PROCESSOR, ItemProcessor.TYPE_IMPROVED, new ModelResourceLocation("refinedstorage:improved_processor", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.PROCESSOR, ItemProcessor.TYPE_ADVANCED, new ModelResourceLocation("refinedstorage:advanced_processor", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.PROCESSOR, ItemProcessor.TYPE_PRINTED_SILICON, new ModelResourceLocation("refinedstorage:printed_silicon", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.PROCESSOR, ItemProcessor.TYPE_CUT_SILICON, new ModelResourceLocation("refinedstorage:cut_silicon", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.SILICON, 0, new ModelResourceLocation("refinedstorage:silicon", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.QUARTZ_ENRICHED_IRON, 0, new ModelResourceLocation("refinedstorage:quartz_enriched_iron", "inventory"));
@@ -189,6 +189,7 @@ public class ProxyClient extends ProxyCommon {
ModelLoader.setCustomModelResourceLocation(RSItems.FILTER, 0, new ModelResourceLocation("refinedstorage:filter", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.NETWORK_CARD, 0, new ModelResourceLocation("refinedstorage:network_card", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.SECURITY_CARD, 0, new ModelResourceLocation("refinedstorage:security_card", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.CUTTING_TOOL, 0, new ModelResourceLocation("refinedstorage:cutting_tool", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.UPGRADE, 0, new ModelResourceLocation("refinedstorage:upgrade", "inventory"));
ModelLoader.setCustomModelResourceLocation(RSItems.UPGRADE, ItemUpgrade.TYPE_RANGE, new ModelResourceLocation("refinedstorage:range_upgrade", "inventory"));
@@ -207,7 +208,6 @@ public class ProxyClient extends ProxyCommon {
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.EXPORTER), 0, new ModelResourceLocation("refinedstorage:exporter", "inventory"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.IMPORTER), 0, new ModelResourceLocation("refinedstorage:importer", "inventory"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.EXTERNAL_STORAGE), 0, new ModelResourceLocation("refinedstorage:external_storage", "inventory"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.SOLDERER), 0, new ModelResourceLocation("refinedstorage:solderer", "inventory"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.INTERFACE), 0, new ModelResourceLocation("refinedstorage:interface", "inventory"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.FLUID_INTERFACE), 0, new ModelResourceLocation("refinedstorage:fluid_interface", "inventory"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RSBlocks.STORAGE), ItemStorageType.TYPE_1K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=1k"));

View File

@@ -1,7 +1,5 @@
package com.raoulvdberge.refinedstorage.proxy;
import com.google.gson.JsonObject;
import com.google.gson.JsonSyntaxException;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.RSBlocks;
import com.raoulvdberge.refinedstorage.RSItems;
@@ -23,7 +21,6 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode;
import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerFluids;
import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerItems;
import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerRedstone;
import com.raoulvdberge.refinedstorage.apiimpl.solderer.SoldererRecipeLoader;
import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.StorageDiskFactoryFluid;
import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.StorageDiskFactoryItem;
import com.raoulvdberge.refinedstorage.apiimpl.storage.externalstorage.ExternalStorageProviderFluid;
@@ -43,6 +40,7 @@ import com.raoulvdberge.refinedstorage.integration.funkylocomotion.MoveFactoryRe
import com.raoulvdberge.refinedstorage.integration.inventorysorter.IntegrationInventorySorter;
import com.raoulvdberge.refinedstorage.integration.oc.DriverNetwork;
import com.raoulvdberge.refinedstorage.integration.oc.IntegrationOC;
import com.raoulvdberge.refinedstorage.item.ItemProcessor;
import com.raoulvdberge.refinedstorage.network.*;
import com.raoulvdberge.refinedstorage.tile.*;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor;
@@ -55,22 +53,14 @@ import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid;
import com.raoulvdberge.refinedstorage.util.StackUtils;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentData;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Items;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemEnchantedBook;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.JsonUtils;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.crafting.CraftingHelper;
import net.minecraftforge.common.crafting.IIngredientFactory;
import net.minecraftforge.common.crafting.JsonContext;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.event.entity.player.PlayerEvent;
import net.minecraftforge.event.world.WorldEvent;
@@ -84,7 +74,6 @@ import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.oredict.OreDictionary;
import javax.annotation.Nonnull;
import java.util.LinkedList;
import java.util.List;
@@ -202,7 +191,6 @@ public class ProxyCommon {
registerTile(TileImporter.class, "importer");
registerTile(TileExporter.class, "exporter");
registerTile(TileDetector.class, "detector");
registerTile(TileSolderer.class, "solderer");
registerTile(TileDestructor.class, "destructor");
registerTile(TileConstructor.class, "constructor");
registerTile(TileStorage.class, "storage");
@@ -234,7 +222,6 @@ public class ProxyCommon {
registerBlock(RSBlocks.DISK_DRIVE);
registerBlock(RSBlocks.STORAGE);
registerBlock(RSBlocks.FLUID_STORAGE);
registerBlock(RSBlocks.SOLDERER);
registerBlock(RSBlocks.CABLE);
registerBlock(RSBlocks.IMPORTER);
registerBlock(RSBlocks.EXPORTER);
@@ -256,6 +243,7 @@ public class ProxyCommon {
registerBlock(RSBlocks.CRAFTER_MANAGER);
registerItem(RSItems.QUARTZ_ENRICHED_IRON);
registerItem(RSItems.CUTTING_TOOL);
registerItem(RSItems.STORAGE_DISK);
registerItem(RSItems.FLUID_STORAGE_DISK);
registerItem(RSItems.STORAGE_HOUSING);
@@ -279,31 +267,16 @@ public class ProxyCommon {
public void init(FMLInitializationEvent e) {
OreDictionary.registerOre("itemSilicon", RSItems.SILICON);
GameRegistry.addSmelting(Items.QUARTZ, new ItemStack(RSItems.SILICON), 0.5f);
GameRegistry.addSmelting(Items.QUARTZ, new ItemStack(RSItems.SILICON), 0.5F);
GameRegistry.addSmelting(new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_CUT_BASIC), new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC), 0.5F);
GameRegistry.addSmelting(new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_CUT_IMPROVED), new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED), 0.5F);
GameRegistry.addSmelting(new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_CUT_ADVANCED), new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED), 0.5F);
WirelessGrid.ID = API.instance().getWirelessGridRegistry().add(new WirelessGridFactoryWirelessGrid());
WirelessFluidGrid.ID = API.instance().getWirelessGridRegistry().add(new WirelessGridFactoryWirelessFluidGrid());
PortableGrid.ID = API.instance().getWirelessGridRegistry().add(new WirelessGridFactoryPortableGrid());
CraftingHelper.register(new ResourceLocation(RS.ID + ":enchanted_book"), new IIngredientFactory() {
@Nonnull
@Override
public Ingredient parse(JsonContext context, JsonObject json) {
String id = JsonUtils.getString(json, "id");
int level = JsonUtils.getInt(json, "level", 1);
Enchantment enchantment = Enchantment.getEnchantmentByLocation(id);
if (enchantment == null) {
throw new JsonSyntaxException("Couldn't find enchantment with id '" + id + "'");
}
return Ingredient.fromStacks(ItemEnchantedBook.getEnchantedItemStack(new EnchantmentData(enchantment, level)));
}
});
SoldererRecipeLoader.load();
if (IntegrationOC.isLoaded()) {
DriverNetwork.register();
}
@@ -357,7 +330,18 @@ public class ProxyCommon {
OneSixMigrationHelper.removalHook();
for (RegistryEvent.MissingMappings.Mapping<Item> missing : e.getMappings()) {
if (missing.key.getResourceDomain().equals(RS.ID) && missing.key.getResourcePath().equals("wrench")) {
if (missing.key.getResourceDomain().equals(RS.ID) && (missing.key.getResourcePath().equals("wrench") || missing.key.getResourcePath().equals("solderer"))) {
missing.ignore();
}
}
}
@SubscribeEvent
public void fixBlockMappings(RegistryEvent.MissingMappings<Block> e) {
OneSixMigrationHelper.removalHook();
for (RegistryEvent.MissingMappings.Mapping<Block> missing : e.getMappings()) {
if (missing.key.getResourceDomain().equals(RS.ID) && missing.key.getResourcePath().equals("solderer")) {
missing.ignore();
}
}

View File

@@ -0,0 +1,30 @@
package com.raoulvdberge.refinedstorage.recipe;
import com.google.gson.JsonObject;
import com.google.gson.JsonSyntaxException;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentData;
import net.minecraft.item.ItemEnchantedBook;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.util.JsonUtils;
import net.minecraftforge.common.crafting.IIngredientFactory;
import net.minecraftforge.common.crafting.JsonContext;
import javax.annotation.Nonnull;
public class IngredientFactoryEnchantedBook implements IIngredientFactory {
@Nonnull
@Override
public Ingredient parse(JsonContext context, JsonObject json) {
String id = JsonUtils.getString(json, "id");
int level = JsonUtils.getInt(json, "level", 1);
Enchantment enchantment = Enchantment.getEnchantmentByLocation(id);
if (enchantment == null) {
throw new JsonSyntaxException("Couldn't find enchantment with id '" + id + "'");
}
return Ingredient.fromStacks(ItemEnchantedBook.getEnchantedItemStack(new EnchantmentData(enchantment, level)));
}
}

View File

@@ -1,82 +0,0 @@
package com.raoulvdberge.refinedstorage.tile;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeSolderer;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.CapabilityItemHandler;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class TileSolderer extends TileNode<NetworkNodeSolderer> {
public static final TileDataParameter<Integer, TileSolderer> DURATION = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getDuration());
public static final TileDataParameter<Integer, TileSolderer> PROGRESS = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getProgress());
public static final TileDataParameter<Boolean, TileSolderer> WORKING = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().isWorking());
private boolean working;
public TileSolderer() {
dataManager.addWatchedParameter(DURATION);
dataManager.addWatchedParameter(PROGRESS);
dataManager.addWatchedParameter(WORKING);
}
@Override
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(getNode().getItems());
}
return super.getCapability(capability, facing);
}
@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
@Override
public NBTTagCompound writeUpdate(NBTTagCompound tag) {
super.writeUpdate(tag);
tag.setBoolean(NetworkNodeSolderer.NBT_WORKING, getNode().isWorking());
return tag;
}
@Override
public void readUpdate(NBTTagCompound tag) {
super.readUpdate(tag);
if (tag.hasKey(NetworkNodeSolderer.NBT_WORKING)) {
working = tag.getBoolean(NetworkNodeSolderer.NBT_WORKING);
}
}
public boolean isWorking() {
return working;
}
@Override
protected boolean canCauseRenderUpdate(NBTTagCompound tag) {
EnumFacing receivedDirection = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION));
return receivedDirection != getDirection();
}
@Override
@Nonnull
public NetworkNodeSolderer createNode(World world, BlockPos pos) {
return new NetworkNodeSolderer(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeSolderer.ID;
}
}

View File

@@ -10,7 +10,7 @@
"translate": "advancements.refinedstorage:autocrafting.description"
}
},
"parent": "refinedstorage:soldering",
"parent": "refinedstorage:cutting",
"criteria": {
"grid_in_inventory": {
"trigger": "minecraft:inventory_changed",

View File

@@ -10,7 +10,7 @@
"translate": "advancements.refinedstorage:better_than_a_barrel.description"
}
},
"parent": "refinedstorage:soldering",
"parent": "refinedstorage:cutting",
"criteria": {
"grid_in_inventory": {
"trigger": "minecraft:inventory_changed",

View File

@@ -12,7 +12,7 @@
},
"parent": "refinedstorage:connecting",
"criteria": {
"solderer_in_inventory": {
"relay_in_inventory": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [

View File

@@ -12,7 +12,7 @@
},
"parent": "refinedstorage:root",
"criteria": {
"solderer_in_inventory": {
"cable_in_inventory": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [

View File

@@ -1,23 +1,23 @@
{
"display": {
"icon": {
"item": "refinedstorage:solderer"
"item": "refinedstorage:cutting_tool"
},
"title": {
"translate": "advancements.refinedstorage:soldering"
"translate": "advancements.refinedstorage:cutting"
},
"description": {
"translate": "advancements.refinedstorage:soldering.description"
"translate": "advancements.refinedstorage:cutting.description"
}
},
"parent": "refinedstorage:root",
"criteria": {
"solderer_in_inventory": {
"cutting_tool_in_inventory": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "refinedstorage:solderer"
"item": "refinedstorage:cutting_tool"
}
]
}

View File

@@ -10,7 +10,7 @@
"translate": "advancements.refinedstorage:detecting.description"
}
},
"parent": "refinedstorage:soldering",
"parent": "refinedstorage:cutting",
"criteria": {
"disk_drive_in_inventory": {
"trigger": "minecraft:inventory_changed",

View File

@@ -10,7 +10,7 @@
"translate": "advancements.refinedstorage:drives.description"
}
},
"parent": "refinedstorage:soldering",
"parent": "refinedstorage:cutting",
"criteria": {
"disk_drive_in_inventory": {
"trigger": "minecraft:inventory_changed",

View File

@@ -10,7 +10,7 @@
"translate": "advancements.refinedstorage:exporting.description"
}
},
"parent": "refinedstorage:soldering",
"parent": "refinedstorage:cutting",
"criteria": {
"disk_drive_in_inventory": {
"trigger": "minecraft:inventory_changed",

View File

@@ -10,7 +10,7 @@
"translate": "advancements.refinedstorage:importing.description"
}
},
"parent": "refinedstorage:soldering",
"parent": "refinedstorage:cutting",
"criteria": {
"disk_drive_in_inventory": {
"trigger": "minecraft:inventory_changed",

View File

@@ -10,7 +10,7 @@
"translate": "advancements.refinedstorage:interface_to_the_world.description"
}
},
"parent": "refinedstorage:soldering",
"parent": "refinedstorage:cutting",
"criteria": {
"disk_drive_in_inventory": {
"trigger": "minecraft:inventory_changed",

View File

@@ -10,7 +10,7 @@
"translate": "advancements.refinedstorage:more_than_just_storage.description"
}
},
"parent": "refinedstorage:soldering",
"parent": "refinedstorage:cutting",
"criteria": {
"grid_in_inventory": {
"trigger": "minecraft:inventory_changed",

View File

@@ -10,7 +10,7 @@
"translate": "advancements.refinedstorage:security.description"
}
},
"parent": "refinedstorage:soldering",
"parent": "refinedstorage:cutting",
"criteria": {
"disk_drive_in_inventory": {
"trigger": "minecraft:inventory_changed",

View File

@@ -10,7 +10,7 @@
"translate": "advancements.refinedstorage:storing_externally.description"
}
},
"parent": "refinedstorage:soldering",
"parent": "refinedstorage:cutting",
"criteria": {
"disk_drive_in_inventory": {
"trigger": "minecraft:inventory_changed",

View File

@@ -11,7 +11,7 @@
"translate": "advancements.refinedstorage:upgrading.description"
}
},
"parent": "refinedstorage:soldering",
"parent": "refinedstorage:cutting",
"criteria": {
"disk_drive_in_inventory": {
"trigger": "minecraft:inventory_changed",

View File

@@ -10,7 +10,7 @@
"translate": "advancements.refinedstorage:wireless.description"
}
},
"parent": "refinedstorage:soldering",
"parent": "refinedstorage:cutting",
"criteria": {
"disk_drive_in_inventory": {
"trigger": "minecraft:inventory_changed",

View File

@@ -1,37 +0,0 @@
{
"forge_marker": 1,
"defaults": {
"model": "refinedstorage:solderer",
"textures": {
"particle": "refinedstorage:blocks/solderer_top",
"side": "refinedstorage:blocks/solderer_side",
"top": "refinedstorage:blocks/solderer_top",
"bottom": "refinedstorage:blocks/solderer_bottom",
"middle": "refinedstorage:blocks/solderer_middle",
"roof": "refinedstorage:blocks/solderer_roof",
"elements": "refinedstorage:blocks/solderer_elements"
},
"uvlock": false
},
"variants": {
"inventory": [
{
"transform": "forge:default-block"
}
],
"direction": {
"north": {
"y": 0
},
"east": {
"y": 90
},
"south": {
"y": 180
},
"west": {
"y": 270
}
}
}
}

View File

@@ -13,7 +13,6 @@ gui.refinedstorage:external_storage=Externer Speicher
gui.refinedstorage:importer=Eingabe
gui.refinedstorage:exporter=Ausgabe
gui.refinedstorage:detector=Melder
gui.refinedstorage:solderer=Lötstation
gui.refinedstorage:destructor=Destruktionseinheit
gui.refinedstorage:constructor=Konstruktionseinheit
gui.refinedstorage:relay=Relais
@@ -146,10 +145,6 @@ block.refinedstorage:importer.name=Eingabe
block.refinedstorage:exporter.name=Ausgabe
block.refinedstorage:detector.name=Melder
block.refinedstorage:machine_casing.name=Gehäuse
block.refinedstorage:solderer.name=Lötstation
block.refinedstorage:solderer.tooltip.0=Muss neben %s
block.refinedstorage:solderer.tooltip.1=platziert oder mit
block.refinedstorage:solderer.tooltip.2=%s verbunden werden.
block.refinedstorage:destructor.name=Destruktionseinheit
block.refinedstorage:constructor.name=Konstruktionseinheit
block.refinedstorage:storage.0.name=1k Speicher
@@ -194,13 +189,9 @@ item.refinedstorage:quartz_enriched_iron.name=mit Quartz angereichertes Eisen
item.refinedstorage:core.0.name=Konstruktions Kern
item.refinedstorage:core.1.name=Destruktions Kern
item.refinedstorage:silicon.name=Silikon
item.refinedstorage:processor.0.name=einfacher Prozessorkern
item.refinedstorage:processor.1.name=verbesserter Prozessorkern
item.refinedstorage:processor.2.name=fortschrittlicher Prozessorkern
item.refinedstorage:processor.3.name=einfacher Prozessor
item.refinedstorage:processor.4.name=verbesserter Prozessor
item.refinedstorage:processor.5.name=fortschrittlicher Prozessor
item.refinedstorage:processor.6.name=Silikonbasis
item.refinedstorage:storage_part.0.name=1k Speicherkern
item.refinedstorage:storage_part.1.name=4k Speicherkern
item.refinedstorage:storage_part.2.name=16k Speicherkern

View File

@@ -17,7 +17,6 @@ gui.refinedstorage:external_storage=External Storage
gui.refinedstorage:importer=Importer
gui.refinedstorage:exporter=Exporter
gui.refinedstorage:detector=Detector
gui.refinedstorage:solderer=Solderer
gui.refinedstorage:destructor=Destructor
gui.refinedstorage:constructor=Constructor
gui.refinedstorage:relay=Relay
@@ -207,7 +206,6 @@ block.refinedstorage:importer.name=Importer
block.refinedstorage:exporter.name=Exporter
block.refinedstorage:detector.name=Detector
block.refinedstorage:machine_casing.name=Machine Casing
block.refinedstorage:solderer.name=Solderer
block.refinedstorage:destructor.name=Destructor
block.refinedstorage:constructor.name=Constructor
block.refinedstorage:storage.0.name=1k Storage Block
@@ -261,13 +259,13 @@ item.refinedstorage:quartz_enriched_iron.name=Quartz Enriched Iron
item.refinedstorage:core.0.name=Construction Core
item.refinedstorage:core.1.name=Destruction Core
item.refinedstorage:silicon.name=Silicon
item.refinedstorage:processor.0.name=Printed Basic Processor
item.refinedstorage:processor.1.name=Printed Improved Processor
item.refinedstorage:processor.2.name=Printed Advanced Processor
item.refinedstorage:processor.0.name=Cut Basic Processor
item.refinedstorage:processor.1.name=Cut Improved Processor
item.refinedstorage:processor.2.name=Cut Advanced Processor
item.refinedstorage:processor.3.name=Basic Processor
item.refinedstorage:processor.4.name=Improved Processor
item.refinedstorage:processor.5.name=Advanced Processor
item.refinedstorage:processor.6.name=Printed Silicon
item.refinedstorage:processor.6.name=Cut Silicon
item.refinedstorage:storage_part.0.name=1k Storage Part
item.refinedstorage:storage_part.1.name=4k Storage Part
item.refinedstorage:storage_part.2.name=16k Storage Part
@@ -289,9 +287,10 @@ item.refinedstorage:upgrade.8.name=Fortune Upgrade
item.refinedstorage:upgrade.9.name=Fortune Upgrade
item.refinedstorage:storage_housing.name=Storage Housing
item.refinedstorage:filter.name=Filter
item.refinedstorage:network_card.name=Network Card
item.refinedstorage:network_card.name=Network Card2
item.refinedstorage:security_card.name=Security Card
item.refinedstorage:security_card.owner=Bound to: %s
item.refinedstorage:cutting_tool.name=Cutting Tool
commands.refinedstorage.createdisk.usage=/createdisk <player> <item> <metadata> <id>
commands.refinedstorage.createdisk.error.notADisk=The given disk item is not a disk.
@@ -303,8 +302,8 @@ advancements.refinedstorage:connecting=Connecting
advancements.refinedstorage:connecting.description=You can place all the devices next to each other to connect them up, or, use Cable
advancements.refinedstorage:conditional_connecting=Conditional connecting
advancements.refinedstorage:conditional_connecting.description=Craft a Relay to control if a network signal can pass with redstone
advancements.refinedstorage:soldering=Soldering
advancements.refinedstorage:soldering.description=Craft a Solderer and connect it to a Controller to make the various Refined Storage components
advancements.refinedstorage:cutting=Cutting
advancements.refinedstorage:cutting.description=Cut resources up in cut processors
advancements.refinedstorage:drives=Drives
advancements.refinedstorage:drives.description=Craft a Disk Drive to be able to store your disks
advancements.refinedstorage:manipulating_disks=Manipulating disks

View File

@@ -17,7 +17,6 @@ gui.refinedstorage:external_storage=Almacén Externo
gui.refinedstorage:importer=Importador
gui.refinedstorage:exporter=Exportador
gui.refinedstorage:detector=Detector
gui.refinedstorage:solderer=Soldador
gui.refinedstorage:destructor=Destructor
gui.refinedstorage:constructor=Constructor
gui.refinedstorage:relay=Relé
@@ -201,7 +200,6 @@ block.refinedstorage:importer.name=Importador
block.refinedstorage:exporter.name=Exportador
block.refinedstorage:detector.name=Detector
block.refinedstorage:machine_casing.name=Estructura de maquina
block.refinedstorage:solderer.name=Soldador
block.refinedstorage:destructor.name=Destructor
block.refinedstorage:constructor.name=Constructor
block.refinedstorage:storage.0.name=Bloque de Memoria de 1k
@@ -254,13 +252,9 @@ item.refinedstorage:quartz_enriched_iron.name=Hierro Enriquecido con Cuarzo
item.refinedstorage:core.0.name=Núcleo de Construcción
item.refinedstorage:core.1.name=Núcleo de Destrucción
item.refinedstorage:silicon.name=Silicio
item.refinedstorage:processor.0.name=Procesador Básico Impreso
item.refinedstorage:processor.1.name=Procesador Mejorado Impreso
item.refinedstorage:processor.2.name=Procesador Avanzado Impreso
item.refinedstorage:processor.3.name=Procesador Básico
item.refinedstorage:processor.4.name=Procesador Mejorado
item.refinedstorage:processor.5.name=Procesador Avanzado
item.refinedstorage:processor.6.name=Oblea Grabada
item.refinedstorage:storage_part.0.name=Parte de Memoria de 1k
item.refinedstorage:storage_part.1.name=Parte de Memoria de 4k
item.refinedstorage:storage_part.2.name=Parte de Memoria de 16k
@@ -291,8 +285,6 @@ advancements.refinedstorage:connecting=conectándose
advancements.refinedstorage:connecting.description=Puedes poner todos los dispositivos juntos para conectarlos, o, usa Cable
advancements.refinedstorage:conditional_connecting=Conexión condicional
advancements.refinedstorage:conditional_connecting.description=Haz un relé para controlar si señal de red pasa con redstone
advancements.refinedstorage:soldering=Soldando
advancements.refinedstorage:soldering.description=Haz un Soldador y conéctalo a la red para hacer diferentes componentes más avanzados
advancements.refinedstorage:drives=Almacén
advancements.refinedstorage:drives.description=Haz un Almacén de Discos para almacenar tus discos
advancements.refinedstorage:manipulating_disks=Manipulando discos

View File

@@ -16,7 +16,6 @@ gui.refinedstorage:external_storage=Stockage externe
gui.refinedstorage:importer=Importeur
gui.refinedstorage:exporter=Exporteur
gui.refinedstorage:detector=Detecteur
gui.refinedstorage:solderer=Soudeur
gui.refinedstorage:destructor=Destructeur
gui.refinedstorage:constructor=Constructeur
gui.refinedstorage:relay=Relais
@@ -178,7 +177,6 @@ block.refinedstorage:importer.name=Importeur
block.refinedstorage:exporter.name=Exporteur
block.refinedstorage:detector.name=Detecteur
block.refinedstorage:machine_casing.name=Boitier de machine
block.refinedstorage:solderer.name=Soudeur
block.refinedstorage:destructor.name=Destructeur
block.refinedstorage:constructor.name=Constructeur
block.refinedstorage:storage.0.name=Bloc de stockage 1k
@@ -231,13 +229,9 @@ item.refinedstorage:quartz_enriched_iron.name=Quartz enrichi au fer
item.refinedstorage:core.0.name=Coeur de construction
item.refinedstorage:core.1.name=Coeur de destruction
item.refinedstorage:silicon.name=Silicone
item.refinedstorage:processor.0.name=Processeur basique imprimé
item.refinedstorage:processor.1.name=Processeur amélioré imprimé
item.refinedstorage:processor.2.name=Processeur avancé imprimé
item.refinedstorage:processor.3.name=Processeur basique
item.refinedstorage:processor.4.name=Processeur amélioré
item.refinedstorage:processor.5.name=Processeur avancé
item.refinedstorage:processor.6.name=Silicone imprimé
item.refinedstorage:storage_part.0.name=Pièce de stockage 1k
item.refinedstorage:storage_part.1.name=Pièce de stockage 4k
item.refinedstorage:storage_part.2.name=Pièce de stockage 16k
@@ -266,8 +260,6 @@ advancements.refinedstorage:connecting=En cours de connexion
advancements.refinedstorage:connecting.description=Vous pouvez placer chaque appareil côte à côte pour les connecter ensemble, ou utiliser un cable.
advancements.refinedstorage:conditional_connecting=Connexion conditionnelle
advancements.refinedstorage:conditional_connecting.description=Crafter un relais pour controller si le signal du réseau peut passer avec un signal de redstone
advancements.refinedstorage:soldering=Soudure
advancements.refinedstorage:soldering.description=Crafter un soudeur et connectez-le au controlleur pour faire différents composants de Refined Storage
advancements.refinedstorage:drives=Lecteur de disques
advancements.refinedstorage:drives.description=Crafter un lecteur de disques pour pouvoir stocker vos disques
advancements.refinedstorage:manipulating_disks=Disque manipulateur
@@ -328,7 +320,7 @@ advancements.refinedstorage:speeding_it_up=Accélerer
advancements.refinedstorage:speeding_it_up.description=Augmenter la vitesse des appareils de Refined Storage avec des amélioration de vitesse
advancements.refinedstorage:stacks_at_a_time=Des stacks à la fois
advancements.refinedstorage:stacks_at_a_time.description=Transférez des stacks entier avec l'amélioration de stacks
advancements.refinedstorage:more_than_just_storage=Plus qu"un simple stockage
advancements.refinedstorage:more_than_just_storage=Plus qu'un simple stockage
advancements.refinedstorage:more_than_just_storage.description=Transférer des items, fluides, energie et redstone d'un lecteur vers un imprimeur
advancements.refinedstorage:detecting=Detection
advancements.refinedstorage:detecting.description=Detectez les items ou fluides dans le réseau avec un détecteur

View File

@@ -15,7 +15,6 @@ gui.refinedstorage:external_storage=외부 저장 포트
gui.refinedstorage:importer=입력 포트
gui.refinedstorage:exporter=출력 포트
gui.refinedstorage:detector=감지기
gui.refinedstorage:solderer=조립대
gui.refinedstorage:destructor=파괴기
gui.refinedstorage:constructor=설치기
gui.refinedstorage:relay=중계기
@@ -176,10 +175,6 @@ block.refinedstorage:importer.name=입력 포트
block.refinedstorage:exporter.name=출력 포트
block.refinedstorage:detector.name=감지기
block.refinedstorage:machine_casing.name=기계 케이싱
block.refinedstorage:solderer.name=조립대
block.refinedstorage:solderer.tooltip.0=%s에 연결되어야 합니다.
block.refinedstorage:solderer.tooltip.1=해당 블럭의 옆에 붙여놓거나
block.refinedstorage:solderer.tooltip.2=케이블로 연결하세요.
block.refinedstorage:destructor.name=파괴기
block.refinedstorage:constructor.name=설치기
block.refinedstorage:storage.0.name=1k 저장 공간
@@ -232,13 +227,9 @@ item.refinedstorage:quartz_enriched_iron.name=석영 강화 철
item.refinedstorage:core.0.name=형성 코어
item.refinedstorage:core.1.name=파괴 코어
item.refinedstorage:silicon.name=실리콘
item.refinedstorage:processor.0.name=인쇄된 기본 프로세서
item.refinedstorage:processor.1.name=인쇄된 강화 프로세서
item.refinedstorage:processor.2.name=인쇄된 고급 프로세서
item.refinedstorage:processor.3.name=기본 프로세서
item.refinedstorage:processor.4.name=강화 프로세서
item.refinedstorage:processor.5.name=고급 프로세서
item.refinedstorage:processor.6.name=인쇄된 실리콘
item.refinedstorage:storage_part.0.name=1k 저장 파트
item.refinedstorage:storage_part.1.name=4k 저장 파트
item.refinedstorage:storage_part.2.name=16k 저장 파트

View File

@@ -12,7 +12,6 @@ gui.refinedstorage:external_storage=Externe Opslag
gui.refinedstorage:importer=Importeur
gui.refinedstorage:exporter=Exporteur
gui.refinedstorage:detector=Detector
gui.refinedstorage:solderer=Soldeerder
gui.refinedstorage:destructor=Destructor
gui.refinedstorage:constructor=Constructor
gui.refinedstorage:relay=Relais
@@ -123,7 +122,6 @@ block.refinedstorage:importer.name=Importeur
block.refinedstorage:exporter.name=Exporteur
block.refinedstorage:detector.name=Detector
block.refinedstorage:machine_casing.name=Machine-omhulsel
block.refinedstorage:solderer.name=Soldeerder
block.refinedstorage:destructor.name=Destructor
block.refinedstorage:constructor.name=Constructor
block.refinedstorage:storage.0.name=1k Opslagblok
@@ -163,13 +161,9 @@ item.refinedstorage:quartz_enriched_iron.name=Quartz Verrijkte IJzerstaaf
item.refinedstorage:core.0.name=Constructiekern
item.refinedstorage:core.1.name=Destructiekern
item.refinedstorage:silicon.name=Siliconen
item.refinedstorage:processor.0.name=Gedrukte Basis Processor
item.refinedstorage:processor.1.name=Gedrukte Verbeterde Processor
item.refinedstorage:processor.2.name=Gedrukte Uitgebreide Processor
item.refinedstorage:processor.3.name=Basis Processor
item.refinedstorage:processor.4.name=Verbeterde Processor
item.refinedstorage:processor.5.name=Uitgebreide Processor
item.refinedstorage:processor.6.name=Gedrukte Siliconen
item.refinedstorage:storage_part.0.name=1k Opslagdeel
item.refinedstorage:storage_part.1.name=4k Opslagdeel
item.refinedstorage:storage_part.2.name=16k Opslagdeel

View File

@@ -16,7 +16,6 @@ gui.refinedstorage:external_storage=Armazenamento Externo
gui.refinedstorage:importer=Importador
gui.refinedstorage:exporter=Exportador
gui.refinedstorage:detector=Detector
gui.refinedstorage:solderer=Soldador
gui.refinedstorage:destructor=Destruidor
gui.refinedstorage:constructor=Construtor
gui.refinedstorage:relay=Retransmissor
@@ -179,7 +178,6 @@ block.refinedstorage:importer.name=Importador
block.refinedstorage:exporter.name=Exportador
block.refinedstorage:detector.name=Detector
block.refinedstorage:machine_casing.name=Gabinete de Máquina
block.refinedstorage:solderer.name=Soldador
block.refinedstorage:destructor.name=Destruidor
block.refinedstorage:constructor.name=Construtor
block.refinedstorage:storage.0.name=Bloco de Armazenamento 1k
@@ -232,13 +230,9 @@ item.refinedstorage:quartz_enriched_iron.name=Ferro Enriquecido com Quartzo
item.refinedstorage:core.0.name=Núcleo de Construção
item.refinedstorage:core.1.name=Núcleo de Destruição
item.refinedstorage:silicon.name=Silício
item.refinedstorage:processor.0.name=Processador Básico Impresso
item.refinedstorage:processor.1.name=Processador Melhorado Impresso
item.refinedstorage:processor.2.name=Processador Avançado Impresso
item.refinedstorage:processor.3.name=Processador Básico
item.refinedstorage:processor.4.name=Processador Melhorado
item.refinedstorage:processor.5.name=Processador Avançado
item.refinedstorage:processor.6.name=Silício Impresso
item.refinedstorage:storage_part.0.name=Parte de Armazenamento 1k
item.refinedstorage:storage_part.1.name=Parte de Armazenamento 4k
item.refinedstorage:storage_part.2.name=Parte de Armazenamento 16k
@@ -269,8 +263,6 @@ advancements.refinedstorage:connecting=Conectando!
advancements.refinedstorage:connecting.description=Você pode colocar todos os dispositivos próximos uns dos outros para conectá-los, ou pode usar os cabos.
advancements.refinedstorage:conditional_connecting=Conexão condicional!
advancements.refinedstorage:conditional_connecting.description=Fabrique um Retransmissor, você pode passar o sinal de rede usando sinal de redstone.
advancements.refinedstorage:soldering=Soldagem!
advancements.refinedstorage:soldering.description=Fabrique um Soldador e conecte-o a um controlador para fazer os vários componentes do Refined Storage.
advancements.refinedstorage:drives=Drives!
advancements.refinedstorage:drives.description=Fabrique uma Unidade de Disco para poder armazenar seus discos.
advancements.refinedstorage:manipulating_disks=Manipulando discos!

View File

@@ -17,7 +17,6 @@ gui.refinedstorage:external_storage=Внешнее хранилище
gui.refinedstorage:importer=Импортер
gui.refinedstorage:exporter=Экспортер
gui.refinedstorage:detector=Датчик
gui.refinedstorage:solderer=Паяльник
gui.refinedstorage:destructor=Разрушитель
gui.refinedstorage:constructor=Строитель
gui.refinedstorage:relay=Реле
@@ -202,7 +201,6 @@ block.refinedstorage:importer.name=Импортер
block.refinedstorage:exporter.name=Экспортер
block.refinedstorage:detector.name=Датчик
block.refinedstorage:machine_casing.name=Обшивка
block.refinedstorage:solderer.name=Паяльник
block.refinedstorage:destructor.name=Разрушитель
block.refinedstorage:constructor.name=Строитель
block.refinedstorage:storage.0.name=Блок хранения 1Кб
@@ -256,13 +254,9 @@ item.refinedstorage:quartz_enriched_iron.name=Кварцевое обогаще
item.refinedstorage:core.0.name=Ядро созидания
item.refinedstorage:core.1.name=Ядро разрушения
item.refinedstorage:silicon.name=Кремний
item.refinedstorage:processor.0.name=Печатный базовый процессор
item.refinedstorage:processor.1.name=Печатный улучшенный процессор
item.refinedstorage:processor.2.name=Печатный продвинутый процессор
item.refinedstorage:processor.3.name=Базовый процессор
item.refinedstorage:processor.4.name=Улучшенный процессор
item.refinedstorage:processor.5.name=Продвинутый процессор
item.refinedstorage:processor.6.name=Печатный кремний
item.refinedstorage:storage_part.0.name=Дискетная плата 1Кб
item.refinedstorage:storage_part.1.name=Дискетная плата 4Кб
item.refinedstorage:storage_part.2.name=Дискетная плата 16Кб
@@ -293,8 +287,6 @@ advancements.refinedstorage:connecting=Соединение
advancements.refinedstorage:connecting.description=Вы можете разместить все устройства рядом друг с другом, чтобы подключить их, или, используя кабель
advancements.refinedstorage:conditional_connecting=Условное подключение
advancements.refinedstorage:conditional_connecting.description=Изготовить реле для управления, если сигнал сети может пройти с редстоун
advancements.refinedstorage:soldering=Пайка
advancements.refinedstorage:soldering.description=Создайте паяльник и подключите его к контроллеру, чтобы сделать различные компоненты Refined Storage
advancements.refinedstorage:drives=Приводы
advancements.refinedstorage:drives.description=Создайте дисковый привод, чтобы иметь возможность хранить ваши диски
advancements.refinedstorage:manipulating_disks=Манипулирование дисками

View File

@@ -17,7 +17,6 @@ gui.refinedstorage:external_storage=外部存储总线
gui.refinedstorage:importer=输入总线
gui.refinedstorage:exporter=输出总线
gui.refinedstorage:detector=网络物品检测器
gui.refinedstorage:solderer=压印器
gui.refinedstorage:destructor=破坏面板
gui.refinedstorage:constructor=成型面板
gui.refinedstorage:relay=继电器
@@ -180,7 +179,6 @@ block.refinedstorage:importer.name=输入总线
block.refinedstorage:exporter.name=输出总线
block.refinedstorage:detector.name=标准发信器
block.refinedstorage:machine_casing.name=机器外壳
block.refinedstorage:solderer.name=压印器
block.refinedstorage:destructor.name=破坏面板
block.refinedstorage:constructor.name=成型面板
block.refinedstorage:storage.0.name=1k 存储方块
@@ -233,13 +231,9 @@ item.refinedstorage:quartz_enriched_iron.name=富石英铁
item.refinedstorage:core.0.name=成型核心
item.refinedstorage:core.1.name=破坏核心
item.refinedstorage:silicon.name=硅
item.refinedstorage:processor.0.name=基础处理器框架
item.refinedstorage:processor.1.name=进阶处理器框架
item.refinedstorage:processor.2.name=高级处理器框架
item.refinedstorage:processor.3.name=基础处理器
item.refinedstorage:processor.4.name=进阶处理器
item.refinedstorage:processor.5.name=高级处理器
item.refinedstorage:processor.6.name=硅板
item.refinedstorage:storage_part.0.name=1k 存储元件
item.refinedstorage:storage_part.1.name=4k 存储元件
item.refinedstorage:storage_part.2.name=16k 存储元件

View File

@@ -1,971 +0,0 @@
{
"__comment": "Model made by CyanideX",
"elements": [
{
"name": "Bottom",
"from": [
0.0,
0.0,
0.0
],
"to": [
16.0,
5.0,
16.0
],
"faces": {
"north": {
"texture": "#side",
"uv": [
0.0,
11.0,
16.0,
16.0
]
},
"east": {
"texture": "#side",
"uv": [
0.0,
11.0,
16.0,
16.0
]
},
"south": {
"texture": "#side",
"uv": [
0.0,
11.0,
16.0,
16.0
]
},
"west": {
"texture": "#side",
"uv": [
0.0,
11.0,
16.0,
16.0
]
},
"up": {
"texture": "#top",
"uv": [
0.0,
0.0,
16.0,
16.0
]
},
"down": {
"texture": "#bottom",
"uv": [
0.0,
0.0,
16.0,
16.0
]
}
}
},
{
"name": "Divider",
"from": [
1.0,
5.0,
1.0
],
"to": [
15.0,
6.0,
15.0
],
"faces": {
"north": {
"texture": "#side",
"uv": [
1.0,
10.0,
15.0,
11.0
]
},
"east": {
"texture": "#side",
"uv": [
1.0,
10.0,
15.0,
11.0
]
},
"south": {
"texture": "#side",
"uv": [
1.0,
10.0,
15.0,
11.0
]
},
"west": {
"texture": "#side",
"uv": [
1.0,
10.0,
15.0,
11.0
]
},
"up": {
"texture": "#middle",
"uv": [
2.0,
2.0,
14.0,
14.0
]
},
"down": {
"texture": "#middle",
"uv": [
2.0,
2.0,
14.0,
14.0
]
}
}
},
{
"name": "Middle",
"from": [
0.0,
6.0,
0.0
],
"to": [
16.0,
7.0,
16.0
],
"faces": {
"north": {
"texture": "#side",
"uv": [
0.0,
9.0,
16.0,
10.0
]
},
"east": {
"texture": "#side",
"uv": [
0.0,
9.0,
16.0,
10.0
]
},
"south": {
"texture": "#side",
"uv": [
0.0,
9.0,
16.0,
10.0
]
},
"west": {
"texture": "#side",
"uv": [
0.0,
9.0,
16.0,
10.0
]
},
"up": {
"texture": "#middle",
"uv": [
0.0,
0.0,
16.0,
16.0
]
},
"down": {
"texture": "#bottom",
"uv": [
0.0,
0.0,
16.0,
16.0
]
}
}
},
{
"name": "Top",
"from": [
0.0,
13.0,
0.0
],
"to": [
16.0,
16.0,
16.0
],
"faces": {
"north": {
"texture": "#side",
"uv": [
0.0,
0.0,
16.0,
3.0
]
},
"east": {
"texture": "#side",
"uv": [
0.0,
0.0,
16.0,
3.0
]
},
"south": {
"texture": "#side",
"uv": [
0.0,
0.0,
16.0,
3.0
]
},
"west": {
"texture": "#side",
"uv": [
0.0,
0.0,
16.0,
3.0
]
},
"up": {
"texture": "#top",
"uv": [
0.0,
0.0,
16.0,
16.0
]
},
"down": {
"texture": "#roof",
"uv": [
0.0,
0.0,
16.0,
16.0
]
}
}
},
{
"name": "Tray",
"from": [
4.0,
6.5,
4.0
],
"to": [
12.0,
7.5,
12.0
],
"faces": {
"north": {
"texture": "#side",
"uv": [
4.0,
8.0,
12.0,
9.0
]
},
"east": {
"texture": "#side",
"uv": [
4.0,
8.0,
12.0,
9.0
]
},
"south": {
"texture": "#side",
"uv": [
4.0,
8.0,
12.0,
9.0
]
},
"west": {
"texture": "#side",
"uv": [
4.0,
8.0,
12.0,
9.0
]
},
"up": {
"texture": "#elements",
"uv": [
6.0,
4.0,
14.0,
12.0
]
},
"down": {
"texture": "#elements",
"uv": [
6.0,
4.0,
14.0,
12.0
]
}
}
},
{
"name": "Pipe1",
"from": [
1.0,
7.0,
1.0
],
"to": [
2.0,
13.0,
2.0
],
"faces": {
"north": {
"texture": "#side",
"uv": [
1.0,
3.0,
2.0,
9.0
]
},
"east": {
"texture": "#side",
"uv": [
14.0,
3.0,
15.0,
9.0
]
},
"south": {
"texture": "#side",
"uv": [
1.0,
3.0,
2.0,
9.0
]
},
"west": {
"texture": "#side",
"uv": [
14.0,
3.0,
15.0,
9.0
]
},
"up": {
"texture": "#side",
"uv": [
0.0,
0.0,
1.0,
1.0
]
},
"down": {
"texture": "#side",
"uv": [
0.0,
0.0,
1.0,
1.0
]
}
}
},
{
"name": "Track1",
"from": [
2.0,
11.0,
2.0
],
"to": [
3.0,
13.0,
14.0
],
"faces": {
"north": {
"texture": "#side",
"uv": [
2.0,
3.0,
3.0,
5.0
]
},
"east": {
"texture": "#side",
"uv": [
2.0,
3.0,
14.0,
5.0
]
},
"south": {
"texture": "#side",
"uv": [
13.0,
3.0,
14.0,
5.0
]
},
"west": {
"texture": "#side",
"uv": [
2.0,
3.0,
14.0,
5.0
]
},
"up": {
"texture": "#elements",
"uv": [
2.0,
2.0,
3.0,
14.0
]
},
"down": {
"texture": "#elements",
"uv": [
3.0,
2.0,
2.0,
14.0
]
}
}
},
{
"name": "Track2",
"from": [
13.0,
11.0,
2.0
],
"to": [
14.0,
13.0,
14.0
],
"faces": {
"north": {
"texture": "#side",
"uv": [
2.0,
3.0,
3.0,
5.0
]
},
"east": {
"texture": "#side",
"uv": [
2.0,
3.0,
14.0,
5.0
]
},
"south": {
"texture": "#side",
"uv": [
14.0,
3.0,
13.0,
5.0
]
},
"west": {
"texture": "#side",
"uv": [
2.0,
3.0,
14.0,
5.0
]
},
"up": {
"texture": "#elements",
"uv": [
2.0,
2.0,
3.0,
14.0
]
},
"down": {
"texture": "#elements",
"uv": [
3.0,
2.0,
4.0,
14.0
]
}
}
},
{
"name": "Track3",
"from": [
3.0,
11.5,
6.0
],
"to": [
13.0,
12.5,
7.0
],
"faces": {
"north": {
"texture": "#side",
"uv": [
3.0,
1.0,
13.0,
2.0
]
},
"east": {
"texture": "#side",
"uv": [
1.0,
0.0,
2.0,
1.0
]
},
"south": {
"texture": "#side",
"uv": [
3.0,
1.0,
13.0,
2.0
]
},
"west": {
"texture": "#side",
"uv": [
1.0,
0.0,
2.0,
1.0
]
},
"up": {
"texture": "#side",
"uv": [
3.0,
1.0,
13.0,
2.0
]
},
"down": {
"texture": "#side",
"uv": [
3.0,
14.0,
13.0,
15.0
]
}
}
},
{
"name": "Pipe2",
"from": [
14.0,
7.0,
1.0
],
"to": [
15.0,
13.0,
2.0
],
"faces": {
"north": {
"texture": "#side",
"uv": [
1.0,
3.0,
2.0,
9.0
]
},
"east": {
"texture": "#side",
"uv": [
14.0,
3.0,
15.0,
9.0
]
},
"south": {
"texture": "#side",
"uv": [
1.0,
3.0,
2.0,
9.0
]
},
"west": {
"texture": "#side",
"uv": [
14.0,
3.0,
15.0,
9.0
]
},
"up": {
"texture": "#side",
"uv": [
0.0,
0.0,
1.0,
1.0
]
},
"down": {
"texture": "#side",
"uv": [
0.0,
0.0,
1.0,
1.0
]
}
}
},
{
"name": "Pipe3",
"from": [
14.0,
7.0,
14.0
],
"to": [
15.0,
13.0,
15.0
],
"faces": {
"north": {
"texture": "#side",
"uv": [
1.0,
3.0,
2.0,
9.0
]
},
"east": {
"texture": "#side",
"uv": [
14.0,
3.0,
15.0,
9.0
]
},
"south": {
"texture": "#side",
"uv": [
1.0,
3.0,
2.0,
9.0
]
},
"west": {
"texture": "#side",
"uv": [
14.0,
3.0,
15.0,
9.0
]
},
"up": {
"texture": "#side",
"uv": [
0.0,
0.0,
1.0,
1.0
]
},
"down": {
"texture": "#side",
"uv": [
0.0,
0.0,
1.0,
1.0
]
}
}
},
{
"name": "Pipe4",
"from": [
1.0,
7.0,
14.0
],
"to": [
2.0,
13.0,
15.0
],
"faces": {
"north": {
"texture": "#side",
"uv": [
1.0,
3.0,
2.0,
9.0
]
},
"east": {
"texture": "#side",
"uv": [
14.0,
3.0,
15.0,
9.0
]
},
"south": {
"texture": "#side",
"uv": [
1.0,
3.0,
2.0,
9.0
]
},
"west": {
"texture": "#side",
"uv": [
14.0,
3.0,
15.0,
9.0
]
},
"up": {
"texture": "#side",
"uv": [
0.0,
0.0,
1.0,
1.0
]
},
"down": {
"texture": "#side",
"uv": [
0.0,
0.0,
1.0,
1.0
]
}
}
},
{
"name": "Ring",
"from": [
6.0,
11.0,
5.5
],
"to": [
7.0,
13.0,
7.5
],
"faces": {
"north": {
"texture": "#side",
"uv": [
13.0,
5.0,
14.0,
7.0
]
},
"east": {
"texture": "#side",
"uv": [
12.0,
5.0,
14.0,
7.0
]
},
"south": {
"texture": "#side",
"uv": [
13.0,
5.0,
14.0,
7.0
]
},
"west": {
"texture": "#side",
"uv": [
12.0,
7.0,
14.0,
9.0
]
},
"up": {
"texture": "#side",
"uv": [
12.0,
6.0,
13.0,
8.0
]
},
"down": {
"texture": "#side",
"uv": [
12.0,
6.0,
13.0,
8.0
]
}
}
},
{
"name": "Solderer",
"from": [
6.0,
8.0,
6.0
],
"to": [
7.0,
11.0,
7.0
],
"faces": {
"north": {
"texture": "#side",
"uv": [
3.0,
5.0,
4.0,
9.0
]
},
"east": {
"texture": "#side",
"uv": [
2.0,
5.0,
3.0,
9.0
]
},
"south": {
"texture": "#side",
"uv": [
3.0,
5.0,
4.0,
9.0
]
},
"west": {
"texture": "#side",
"uv": [
2.0,
5.0,
3.0,
9.0
]
},
"up": {
"texture": "#side",
"uv": [
0.0,
0.0,
1.0,
1.0
]
},
"down": {
"texture": "#side",
"uv": [
3.0,
8.0,
4.0,
9.0
]
}
}
}
]
}

View File

@@ -1,6 +0,0 @@
{
"parent": "item/generated",
"textures": {
"layer0": "refinedstorage:items/advanced_printed_processor"
}
}

View File

@@ -1,6 +0,0 @@
{
"parent": "item/generated",
"textures": {
"layer0": "refinedstorage:items/basic_printed_processor"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "refinedstorage:items/cut_advanced_processor"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "refinedstorage:items/cut_basic_processor"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "refinedstorage:items/cut_improved_processor"
}
}

View File

@@ -1,6 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "refinedstorage:items/printed_silicon"
"layer0": "refinedstorage:items/cut_silicon"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "refinedstorage:items/cutting_tool"
}
}

View File

@@ -1,6 +0,0 @@
{
"parent": "item/generated",
"textures": {
"layer0": "refinedstorage:items/improved_printed_processor"
}
}

View File

@@ -0,0 +1,27 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"EPE",
"EME",
"ERE"
],
"key": {
"M": {
"item": "refinedstorage:machine_casing"
},
"R": {
"item": "minecraft:redstone"
},
"P": {
"item": "refinedstorage:fluid_storage_part",
"data": 2
},
"E": {
"item": "refinedstorage:quartz_enriched_iron"
}
},
"result": {
"item": "refinedstorage:fluid_storage",
"data": 2
}
}

View File

@@ -0,0 +1,27 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"EPE",
"EME",
"ERE"
],
"key": {
"M": {
"item": "refinedstorage:machine_casing"
},
"R": {
"item": "minecraft:redstone"
},
"P": {
"item": "refinedstorage:storage_part",
"data": 2
},
"E": {
"item": "refinedstorage:quartz_enriched_iron"
}
},
"result": {
"item": "refinedstorage:storage",
"data": 2
}
}

View File

@@ -0,0 +1,27 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"EPE",
"EME",
"ERE"
],
"key": {
"M": {
"item": "refinedstorage:machine_casing"
},
"R": {
"item": "minecraft:redstone"
},
"P": {
"item": "refinedstorage:storage_part",
"data": 0
},
"E": {
"item": "refinedstorage:quartz_enriched_iron"
}
},
"result": {
"item": "refinedstorage:storage",
"data": 0
}
}

View File

@@ -0,0 +1,27 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"EPE",
"EME",
"ERE"
],
"key": {
"M": {
"item": "refinedstorage:machine_casing"
},
"R": {
"item": "minecraft:redstone"
},
"P": {
"item": "refinedstorage:fluid_storage_part",
"data": 1
},
"E": {
"item": "refinedstorage:quartz_enriched_iron"
}
},
"result": {
"item": "refinedstorage:fluid_storage",
"data": 1
}
}

View File

@@ -0,0 +1,27 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"EPE",
"EME",
"ERE"
],
"key": {
"M": {
"item": "refinedstorage:machine_casing"
},
"R": {
"item": "minecraft:redstone"
},
"P": {
"item": "refinedstorage:fluid_storage_part",
"data": 3
},
"E": {
"item": "refinedstorage:quartz_enriched_iron"
}
},
"result": {
"item": "refinedstorage:fluid_storage",
"data": 3
}
}

View File

@@ -0,0 +1,27 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"EPE",
"EME",
"ERE"
],
"key": {
"M": {
"item": "refinedstorage:machine_casing"
},
"R": {
"item": "minecraft:redstone"
},
"P": {
"item": "refinedstorage:storage_part",
"data": 1
},
"E": {
"item": "refinedstorage:quartz_enriched_iron"
}
},
"result": {
"item": "refinedstorage:storage",
"data": 1
}
}

View File

@@ -0,0 +1,27 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"EPE",
"EME",
"ERE"
],
"key": {
"M": {
"item": "refinedstorage:machine_casing"
},
"R": {
"item": "minecraft:redstone"
},
"P": {
"item": "refinedstorage:fluid_storage_part",
"data": 0
},
"E": {
"item": "refinedstorage:quartz_enriched_iron"
}
},
"result": {
"item": "refinedstorage:fluid_storage",
"data": 0
}
}

View File

@@ -0,0 +1,27 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"EPE",
"EME",
"ERE"
],
"key": {
"M": {
"item": "refinedstorage:machine_casing"
},
"R": {
"item": "minecraft:redstone"
},
"P": {
"item": "refinedstorage:storage_part",
"data": 3
},
"E": {
"item": "refinedstorage:quartz_enriched_iron"
}
},
"result": {
"item": "refinedstorage:storage",
"data": 3
}
}

View File

@@ -33,5 +33,12 @@
"item": "refinedstorage:core",
"data": 1
}
},
{
"name": "cutting_tool",
"ingredient": {
"item": "refinedstorage:cutting_tool",
"data": 32767
}
}
]

View File

@@ -0,0 +1,5 @@
{
"ingredients": {
"enchanted_book": "com.raoulvdberge.refinedstorage.recipe.IngredientFactoryEnchantedBook"
}
}

View File

@@ -1,21 +1,20 @@
{
"result": {
"item": "refinedstorage:grid",
"data": 1
},
"duration": 500,
"rows": [
{
"type": "forge:ore_dict",
"ore": "workbench"
},
{
"item": "refinedstorage:processor",
"data": 5
},
"type": "forge:ore_shapeless",
"ingredients": [
{
"item": "refinedstorage:grid",
"data": 0
},
{
"item": "#advanced_processor"
},
{
"type": "forge:ore_dict",
"ore": "workbench"
}
]
],
"result": {
"item": "refinedstorage:grid",
"data": 1
}
}

View File

@@ -0,0 +1,28 @@
{
"type": "forge:ore_shaped",
"pattern": [
"EOE",
"CUC",
"EEE"
],
"key": {
"E": {
"item": "refinedstorage:quartz_enriched_iron"
},
"C": {
"type": "forge:ore_dict",
"ore": "workbench"
},
"O": {
"item": "#construction_core"
},
"U": {
"item": "refinedstorage:upgrade",
"data": 0
}
},
"result": {
"item": "refinedstorage:upgrade",
"data": 3
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "#cutting_tool"
},
{
"item": "minecraft:diamond"
}
],
"result": {
"item": "refinedstorage:processor",
"data": 2
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "#cutting_tool"
},
{
"item": "minecraft:iron_ingot"
}
],
"result": {
"item": "refinedstorage:processor",
"data": 0
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "#cutting_tool"
},
{
"item": "minecraft:gold_ingot"
}
],
"result": {
"item": "refinedstorage:processor",
"data": 1
}
}

View File

@@ -1,15 +1,16 @@
{
"result": {
"item": "refinedstorage:processor",
"data": 6
},
"duration": 90,
"rows": [
null,
"type": "forge:ore_shapeless",
"ingredients": [
{
"item": "#cutting_tool"
},
{
"type": "forge:ore_dict",
"ore": "itemSilicon"
},
null
]
}
],
"result": {
"item": "refinedstorage:processor",
"data": 6
}
}

View File

@@ -0,0 +1,20 @@
{
"type": "forge:ore_shaped",
"pattern": [
"E ",
" S ",
" S"
],
"key": {
"S": {
"type": "forge:ore_dict",
"ore": "stickWood"
},
"E": {
"item": "refinedstorage:quartz_enriched_iron"
}
},
"result": {
"item": "refinedstorage:cutting_tool"
}
}

View File

@@ -1,20 +1,19 @@
{
"result": {
"item": "refinedstorage:grid",
"data": 3
},
"duration": 500,
"rows": [
{
"item": "minecraft:bucket"
},
{
"item": "refinedstorage:processor",
"data": 5
},
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "refinedstorage:grid",
"data": 0
},
{
"item": "#advanced_processor"
},
{
"item": "minecraft:bucket"
}
]
],
"result": {
"item": "refinedstorage:grid",
"data": 3
}
}

View File

@@ -1,18 +1,17 @@
{
"result": {
"item": "refinedstorage:fluid_interface"
},
"duration": 200,
"rows": [
{
"item": "minecraft:bucket"
},
{
"type": "forge:ore_dict",
"ore": "dustRedstone"
},
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "refinedstorage:interface"
},
{
"item": "minecraft:redstone"
},
{
"item": "minecraft:bucket"
}
]
],
"result": {
"item": "refinedstorage:fluid_interface"
}
}

View File

@@ -0,0 +1,29 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"EFE",
"BUB",
"EEE"
],
"key": {
"E": {
"item": "refinedstorage:quartz_enriched_iron"
},
"F": {
"type": "refinedstorage:enchanted_book",
"id": "fortune",
"level": 1
},
"B": {
"item": "minecraft:bookshelf"
},
"U": {
"item": "refinedstorage:upgrade",
"data": 0
}
},
"result": {
"item": "refinedstorage:upgrade",
"data": 7
}
}

View File

@@ -0,0 +1,29 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"EFE",
"BUB",
"EEE"
],
"key": {
"E": {
"item": "refinedstorage:quartz_enriched_iron"
},
"F": {
"type": "refinedstorage:enchanted_book",
"id": "fortune",
"level": 2
},
"B": {
"item": "minecraft:bookshelf"
},
"U": {
"item": "refinedstorage:upgrade",
"data": 0
}
},
"result": {
"item": "refinedstorage:upgrade",
"data": 8
}
}

View File

@@ -0,0 +1,29 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"EFE",
"BUB",
"EEE"
],
"key": {
"E": {
"item": "refinedstorage:quartz_enriched_iron"
},
"F": {
"type": "refinedstorage:enchanted_book",
"id": "fortune",
"level": 3
},
"B": {
"item": "minecraft:bookshelf"
},
"U": {
"item": "refinedstorage:upgrade",
"data": 0
}
},
"result": {
"item": "refinedstorage:upgrade",
"data": 9
}
}

View File

@@ -0,0 +1,28 @@
{
"type": "forge:ore_shaped",
"pattern": [
"EPE",
"RUR",
"EEE"
],
"key": {
"E": {
"item": "refinedstorage:quartz_enriched_iron"
},
"P": {
"type": "forge:ore_dict",
"ore": "netherStar"
},
"R": {
"item": "minecraft:end_rod"
},
"U": {
"item": "refinedstorage:upgrade",
"data": 0
}
},
"result": {
"item": "refinedstorage:upgrade",
"data": 5
}
}

View File

@@ -0,0 +1,28 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"UIU",
"RMR",
"UEU"
],
"key": {
"I": {
"item": "refinedstorage:importer"
},
"E": {
"item": "refinedstorage:exporter"
},
"M": {
"item": "refinedstorage:machine_casing"
},
"R": {
"item": "minecraft:redstone"
},
"U": {
"item": "refinedstorage:quartz_enriched_iron"
}
},
"result": {
"item": "refinedstorage:interface"
}
}

View File

@@ -1,20 +1,19 @@
{
"result": {
"item": "refinedstorage:grid",
"data": 2
},
"duration": 500,
"rows": [
{
"item": "refinedstorage:pattern"
},
{
"item": "refinedstorage:processor",
"data": 5
},
"type": "minecraft:crafting_shapeless",
"ingredients": [
{
"item": "refinedstorage:grid",
"data": 0
},
{
"item": "#advanced_processor"
},
{
"item": "refinedstorage:pattern"
}
]
],
"result": {
"item": "refinedstorage:grid",
"data": 2
}
}

View File

@@ -1,21 +1,25 @@
{
"result": {
"item": "refinedstorage:upgrade",
"data": 1
},
"duration": 250,
"rows": [
{
"type": "forge:ore_shaped",
"pattern": [
"EPE",
"PUP",
"EEE"
],
"key": {
"E": {
"item": "refinedstorage:quartz_enriched_iron"
},
"P": {
"type": "forge:ore_dict",
"ore": "enderpearl"
},
{
"type": "forge:ore_dict",
"ore": "dustRedstone"
},
{
"U": {
"item": "refinedstorage:upgrade",
"data": 0
}
]
},
"result": {
"item": "refinedstorage:upgrade",
"data": 1
}
}

View File

@@ -0,0 +1,28 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"EFE",
"BUB",
"EEE"
],
"key": {
"E": {
"item": "refinedstorage:quartz_enriched_iron"
},
"F": {
"type": "refinedstorage:enchanted_book",
"id": "silk_touch"
},
"B": {
"item": "minecraft:bookshelf"
},
"U": {
"item": "refinedstorage:upgrade",
"data": 0
}
},
"result": {
"item": "refinedstorage:upgrade",
"data": 6
}
}

View File

@@ -2,18 +2,23 @@
"type": "minecraft:crafting_shaped",
"pattern": [
"ESE",
"E E",
"ESE"
"SUS",
"EEE"
],
"key": {
"E": {
"item": "refinedstorage:quartz_enriched_iron"
},
"S": {
"item": "minecraft:sticky_piston"
"item": "minecraft:sugar"
},
"U": {
"item": "refinedstorage:upgrade",
"data": 0
}
},
"result": {
"item": "refinedstorage:solderer"
"item": "refinedstorage:upgrade",
"data": 2
}
}

View File

@@ -1,20 +0,0 @@
{
"result": {
"item": "refinedstorage:fluid_storage",
"data": 2
},
"duration": 200,
"rows": [
{
"item": "refinedstorage:processor",
"data": 3
},
{
"item": "refinedstorage:fluid_storage_part",
"data": 2
},
{
"item": "refinedstorage:machine_casing"
}
]
}

View File

@@ -1,20 +0,0 @@
{
"result": {
"item": "refinedstorage:storage",
"data": 2
},
"duration": 200,
"rows": [
{
"item": "refinedstorage:processor",
"data": 3
},
{
"item": "refinedstorage:storage_part",
"data": 2
},
{
"item": "refinedstorage:machine_casing"
}
]
}

View File

@@ -1,20 +0,0 @@
{
"result": {
"item": "refinedstorage:storage",
"data": 0
},
"duration": 200,
"rows": [
{
"item": "refinedstorage:processor",
"data": 3
},
{
"item": "refinedstorage:storage_part",
"data": 0
},
{
"item": "refinedstorage:machine_casing"
}
]
}

View File

@@ -1,20 +0,0 @@
{
"result": {
"item": "refinedstorage:fluid_storage",
"data": 1
},
"duration": 200,
"rows": [
{
"item": "refinedstorage:processor",
"data": 3
},
{
"item": "refinedstorage:fluid_storage_part",
"data": 1
},
{
"item": "refinedstorage:machine_casing"
}
]
}

View File

@@ -1,20 +0,0 @@
{
"result": {
"item": "refinedstorage:fluid_storage",
"data": 3
},
"duration": 200,
"rows": [
{
"item": "refinedstorage:processor",
"data": 3
},
{
"item": "refinedstorage:fluid_storage_part",
"data": 3
},
{
"item": "refinedstorage:machine_casing"
}
]
}

View File

@@ -1,20 +0,0 @@
{
"result": {
"item": "refinedstorage:storage",
"data": 1
},
"duration": 200,
"rows": [
{
"item": "refinedstorage:processor",
"data": 3
},
{
"item": "refinedstorage:storage_part",
"data": 1
},
{
"item": "refinedstorage:machine_casing"
}
]
}

View File

@@ -1,20 +0,0 @@
{
"result": {
"item": "refinedstorage:fluid_storage",
"data": 0
},
"duration": 200,
"rows": [
{
"item": "refinedstorage:processor",
"data": 3
},
{
"item": "refinedstorage:fluid_storage_part",
"data": 0
},
{
"item": "refinedstorage:machine_casing"
}
]
}

View File

@@ -1,20 +0,0 @@
{
"result": {
"item": "refinedstorage:storage",
"data": 3
},
"duration": 200,
"rows": [
{
"item": "refinedstorage:processor",
"data": 3
},
{
"item": "refinedstorage:storage_part",
"data": 3
},
{
"item": "refinedstorage:machine_casing"
}
]
}

View File

@@ -1,21 +0,0 @@
{
"result": {
"item": "refinedstorage:processor",
"data": 5
},
"duration": 350,
"rows": [
{
"item": "refinedstorage:processor",
"data": 2
},
{
"type": "forge:ore_dict",
"ore": "dustRedstone"
},
{
"item": "refinedstorage:processor",
"data": 6
}
]
}

Some files were not shown because too many files have changed in this diff Show More