mirror of
https://github.com/GTNewHorizons/NotEnoughItems.git
synced 2026-11-15 17:54:50 +00:00
Compare commits
27
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a7683b885d | ||
|
|
fe4566901a | ||
|
|
de2b2ece69 | ||
|
|
d20a80a77c | ||
|
|
6cced8dea0 | ||
|
|
68b9453328 | ||
|
|
ae21012ea2 | ||
|
|
2b31129ef9 | ||
|
|
ba77a63545 | ||
|
|
8f7d698e7d | ||
|
|
72d44fd711 | ||
|
|
d735cc2a38 | ||
|
|
91e9b2a5ae | ||
|
|
96e4fe55e8 | ||
|
|
8717df0cbb | ||
|
|
d6a6551561 | ||
|
|
995ed24056 | ||
|
|
2917f2a4c9 | ||
|
|
5b2ff42d4f | ||
|
|
6f2782b06e | ||
|
|
f17bf6e8e2 | ||
|
|
10ee4d17ef | ||
|
|
f6acd768f3 | ||
|
|
8a5146b672 | ||
|
|
1632a90d15 | ||
|
|
269b16a8de | ||
|
|
1e93f719fe |
No files matched your search
@@ -0,0 +1,3 @@
|
||||
compileJava {
|
||||
options.encoding = "UTF-8"
|
||||
}
|
||||
+68
-49
@@ -1,4 +1,4 @@
|
||||
//version: 1644510936
|
||||
//version: 1652851397
|
||||
/*
|
||||
DO NOT CHANGE THIS FILE!
|
||||
|
||||
@@ -6,12 +6,11 @@ Also, you may replace this file at any time if there is an update available.
|
||||
Please check https://github.com/GTNewHorizons/ExampleMod1.7.10/blob/main/build.gradle for updates.
|
||||
*/
|
||||
|
||||
import org.gradle.internal.logging.text.StyledTextOutput
|
||||
import org.gradle.internal.logging.text.StyledTextOutputFactory
|
||||
import org.gradle.internal.logging.text.StyledTextOutput.Style
|
||||
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||
import org.gradle.internal.logging.text.StyledTextOutput.Style
|
||||
import org.gradle.internal.logging.text.StyledTextOutputFactory
|
||||
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
@@ -45,18 +44,21 @@ plugins {
|
||||
id 'eclipse'
|
||||
id 'scala'
|
||||
id 'maven-publish'
|
||||
id('org.jetbrains.kotlin.jvm') version ('1.6.10') apply false
|
||||
id('org.ajoberstar.grgit') version('4.1.1')
|
||||
id('com.github.johnrengelman.shadow') version('4.0.4')
|
||||
id('com.palantir.git-version') version('0.13.0') apply false
|
||||
id('de.undercouch.download') version('5.0.1')
|
||||
id 'org.jetbrains.kotlin.jvm' version '1.5.30' apply false
|
||||
id 'org.jetbrains.kotlin.kapt' version '1.5.30' apply false
|
||||
id 'com.google.devtools.ksp' version '1.5.30-1.0.0' apply false
|
||||
id 'org.ajoberstar.grgit' version '4.1.1'
|
||||
id 'com.github.johnrengelman.shadow' version '4.0.4'
|
||||
id 'com.palantir.git-version' version '0.13.0' apply false
|
||||
id 'de.undercouch.download' version '5.0.1'
|
||||
id 'com.github.gmazzo.buildconfig' version '3.0.3' apply false
|
||||
}
|
||||
|
||||
if (project.file('.git/HEAD').isFile()) {
|
||||
apply plugin: 'com.palantir.git-version'
|
||||
}
|
||||
|
||||
def out = services.get(StyledTextOutputFactory).create("an-output")
|
||||
def out = services.get(StyledTextOutputFactory).create('an-output')
|
||||
|
||||
apply plugin: 'forge'
|
||||
|
||||
@@ -102,6 +104,7 @@ checkPropertyExists("usesShadowedDependencies")
|
||||
checkPropertyExists("developmentEnvironmentUserName")
|
||||
|
||||
boolean noPublishedSources = project.findProperty("noPublishedSources") ? project.noPublishedSources.toBoolean() : false
|
||||
boolean usesMixinDebug = project.findProperty('usesMixinDebug') ?: project.usesMixins.toBoolean()
|
||||
|
||||
String javaSourceDir = "src/main/java/"
|
||||
String scalaSourceDir = "src/main/scala/"
|
||||
@@ -173,7 +176,7 @@ configurations.all {
|
||||
try {
|
||||
'git config core.fileMode false'.execute()
|
||||
}
|
||||
catch (Exception e) {
|
||||
catch (Exception ignored) {
|
||||
out.style(Style.Failure).println("git isn't installed at all")
|
||||
}
|
||||
|
||||
@@ -183,19 +186,21 @@ String versionOverride = System.getenv("VERSION") ?: null
|
||||
try {
|
||||
identifiedVersion = versionOverride == null ? gitVersion() : versionOverride
|
||||
}
|
||||
catch (Exception e) {
|
||||
catch (Exception ignored) {
|
||||
out.style(Style.Failure).text(
|
||||
'This mod must be version controlled by Git AND the repository must provide at least one tag,\n' +
|
||||
'or the VERSION override must be set! ').style(Style.SuccessHeader).text('(Do NOT download from GitHub using the ZIP option, instead\n' +
|
||||
'or the VERSION override must be set! ').style(Style.SuccessHeader).text('(Do NOT download from GitHub using the ZIP option, instead\n' +
|
||||
'clone the repository, see ').style(Style.Info).text('https://gtnh.miraheze.org/wiki/Development').style(Style.SuccessHeader).println(' for details.)'
|
||||
)
|
||||
versionOverride = 'NO-GIT-TAG-SET'
|
||||
identifiedVersion = versionOverride
|
||||
}
|
||||
version = minecraftVersion + '-' + identifiedVersion
|
||||
String modVersion = identifiedVersion
|
||||
ext {
|
||||
modVersion = identifiedVersion
|
||||
}
|
||||
|
||||
if( identifiedVersion.equals(versionOverride) ) {
|
||||
if(identifiedVersion == versionOverride) {
|
||||
out.style(Style.Failure).text('Override version to ').style(Style.Identifier).text(modVersion).style(Style.Failure).println('!\7')
|
||||
}
|
||||
|
||||
@@ -207,22 +212,25 @@ else {
|
||||
archivesBaseName = modId
|
||||
}
|
||||
|
||||
|
||||
def arguments = []
|
||||
def jvmArguments = []
|
||||
|
||||
if(usesMixins.toBoolean()) {
|
||||
if (usesMixins.toBoolean()) {
|
||||
arguments += [
|
||||
"--tweakClass org.spongepowered.asm.launch.MixinTweaker"
|
||||
]
|
||||
jvmArguments += [
|
||||
"-Dmixin.debug.countInjections=true", "-Dmixin.debug.verbose=true", "-Dmixin.debug.export=true"
|
||||
"--tweakClass org.spongepowered.asm.launch.MixinTweaker"
|
||||
]
|
||||
if (usesMixinDebug.toBoolean()) {
|
||||
jvmArguments += [
|
||||
"-Dmixin.debug.countInjections=true",
|
||||
"-Dmixin.debug.verbose=true",
|
||||
"-Dmixin.debug.export=true"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
minecraft {
|
||||
version = minecraftVersion + "-" + forgeVersion + "-" + minecraftVersion
|
||||
runDir = "run"
|
||||
version = minecraftVersion + '-' + forgeVersion + '-' + minecraftVersion
|
||||
runDir = 'run'
|
||||
|
||||
if (replaceGradleTokenInFile) {
|
||||
replaceIn replaceGradleTokenInFile
|
||||
@@ -255,8 +263,8 @@ minecraft {
|
||||
}
|
||||
}
|
||||
|
||||
if(file("addon.gradle").exists()) {
|
||||
apply from: "addon.gradle"
|
||||
if(file('addon.gradle').exists()) {
|
||||
apply from: 'addon.gradle'
|
||||
}
|
||||
|
||||
apply from: 'repositories.gradle'
|
||||
@@ -304,23 +312,28 @@ dependencies {
|
||||
|
||||
apply from: 'dependencies.gradle'
|
||||
|
||||
def mixingConfigRefMap = "mixins." + modId + ".refmap.json"
|
||||
def mixingConfigRefMap = 'mixins.' + modId + '.refmap.json'
|
||||
def refMap = "${tasks.compileJava.temporaryDir}" + File.separator + mixingConfigRefMap
|
||||
def mixinSrg = "${tasks.reobf.temporaryDir}" + File.separator + "mixins.srg"
|
||||
|
||||
task generateAssets {
|
||||
if(usesMixins.toBoolean()) {
|
||||
getFile("/src/main/resources/mixins." + modId + ".json").text = """{
|
||||
if (usesMixins.toBoolean()) {
|
||||
def mixinConfigFile = getFile("/src/main/resources/mixins." + modId + ".json");
|
||||
if (!mixinConfigFile.exists()) {
|
||||
mixinConfigFile.text = """{
|
||||
"required": true,
|
||||
"minVersion": "0.7.11",
|
||||
"package": "${modGroup}.${mixinsPackage}",
|
||||
"plugin": "${modGroup}.${mixinPlugin}",
|
||||
"refmap": "${mixingConfigRefMap}",
|
||||
"target": "@env(DEFAULT)",
|
||||
"compatibilityLevel": "JAVA_8"
|
||||
"compatibilityLevel": "JAVA_8",
|
||||
"mixins": [],
|
||||
"client": [],
|
||||
"server": []
|
||||
}
|
||||
|
||||
"""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -408,12 +421,11 @@ tasks.withType(JavaExec).configureEach {
|
||||
)
|
||||
}
|
||||
|
||||
processResources
|
||||
{
|
||||
processResources {
|
||||
// this will ensure that this task is redone when the versions change.
|
||||
inputs.property "version", project.version
|
||||
inputs.property "mcversion", project.minecraft.version
|
||||
|
||||
|
||||
// replace stuff in mcmod.info, nothing else
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
include 'mcmod.info'
|
||||
@@ -437,7 +449,7 @@ processResources
|
||||
|
||||
def getManifestAttributes() {
|
||||
def manifestAttributes = [:]
|
||||
if(containsMixinsAndOrCoreModOnly.toBoolean() == false && (usesMixins.toBoolean() || coreModClass)) {
|
||||
if(!containsMixinsAndOrCoreModOnly.toBoolean() && (usesMixins.toBoolean() || coreModClass)) {
|
||||
manifestAttributes += ["FMLCorePluginContainsFMLMod": true]
|
||||
}
|
||||
|
||||
@@ -453,14 +465,14 @@ def getManifestAttributes() {
|
||||
manifestAttributes += [
|
||||
"TweakClass" : "org.spongepowered.asm.launch.MixinTweaker",
|
||||
"MixinConfigs" : "mixins." + modId + ".json",
|
||||
"ForceLoadAsMod" : containsMixinsAndOrCoreModOnly.toBoolean() == false
|
||||
"ForceLoadAsMod" : !containsMixinsAndOrCoreModOnly.toBoolean()
|
||||
]
|
||||
}
|
||||
return manifestAttributes
|
||||
}
|
||||
|
||||
task sourcesJar(type: Jar) {
|
||||
from (sourceSets.main.allJava)
|
||||
from (sourceSets.main.allSource)
|
||||
from (file("$projectDir/LICENSE"))
|
||||
getArchiveClassifier().set('sources')
|
||||
}
|
||||
@@ -515,7 +527,7 @@ task devJar(type: Jar) {
|
||||
}
|
||||
|
||||
task apiJar(type: Jar) {
|
||||
from (sourceSets.main.allJava) {
|
||||
from (sourceSets.main.allSource) {
|
||||
include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") + '/**'
|
||||
}
|
||||
|
||||
@@ -540,12 +552,15 @@ artifacts {
|
||||
}
|
||||
}
|
||||
|
||||
// The gradle metadata includes all of the additional deps that we disabled from POM generation (including forgeBin with no groupID),
|
||||
// The gradle metadata includes all of the additional deps that we disabled from POM generation (including forgeBin with no groupID),
|
||||
// and isn't strictly needed with the POM so just disable it.
|
||||
tasks.withType(GenerateModuleMetadata) {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
// workaround variable hiding in pom processing
|
||||
def projectConfigs = project.configurations
|
||||
|
||||
publishing {
|
||||
publications {
|
||||
maven(MavenPublication) {
|
||||
@@ -554,7 +569,7 @@ publishing {
|
||||
artifact source: shadowJar, classifier: ""
|
||||
}
|
||||
if(!noPublishedSources) {
|
||||
artifact source: sourcesJar, classifier: "src"
|
||||
artifact source: sourcesJar, classifier: "sources"
|
||||
}
|
||||
artifact source: usesShadowedDependencies.toBoolean() ? shadowDevJar : devJar, classifier: "dev"
|
||||
if (apiPackage) {
|
||||
@@ -565,17 +580,21 @@ publishing {
|
||||
artifactId = System.getenv("ARTIFACT_ID") ?: project.name
|
||||
// Using the identified version, not project.version as it has the prepended 1.7.10
|
||||
version = System.getenv("RELEASE_VERSION") ?: identifiedVersion
|
||||
|
||||
// remove extra garbage from who knows where
|
||||
|
||||
// remove extra garbage from minecraft and minecraftDeps configuration
|
||||
pom.withXml {
|
||||
def badPomGroup = ['net.minecraft', 'com.google.code.findbugs', 'org.ow2.asm', 'com.typesafe.akka', 'com.typesafe', 'org.scala-lang',
|
||||
'org.scala-lang.plugins', 'net.sf.jopt-simple', 'lzma', 'com.mojang', 'org.apache.commons', 'org.apache.httpcomponents',
|
||||
'commons-logging', 'java3d', 'net.sf.trove4j', 'com.ibm.icu', 'com.paulscode', 'io.netty', 'com.google.guava',
|
||||
'commons-io', 'commons-codec', 'net.java.jinput', 'net.java.jutils', 'com.google.code.gson', 'org.apache.logging.log4j',
|
||||
'org.lwjgl.lwjgl', 'tv.twitch', '']
|
||||
def badArtifacts = [:].withDefault {[] as Set<String>}
|
||||
for (configuration in [projectConfigs.minecraft, projectConfigs.minecraftDeps]) {
|
||||
for (dependency in configuration.allDependencies) {
|
||||
badArtifacts[dependency.group == null ? "" : dependency.group] += dependency.name
|
||||
}
|
||||
}
|
||||
// example for specifying extra stuff to ignore
|
||||
// badArtifacts["org.example.group"] += "artifactName"
|
||||
|
||||
Node pomNode = asNode()
|
||||
pomNode.dependencies.'*'.findAll() {
|
||||
badPomGroup.contains(it.groupId.text())
|
||||
badArtifacts[it.groupId.text()].contains(it.artifactId.text())
|
||||
}.each() {
|
||||
it.parent().remove(it)
|
||||
}
|
||||
@@ -688,7 +707,7 @@ def deobf(String sourceURL, String fileName) {
|
||||
String bon2File = bon2Dir + "/BON2-2.5.0.jar"
|
||||
String obfFile = cacheDir + "modules-2/files-2.1/" + fileName + ".jar"
|
||||
String deobfFile = cacheDir + "modules-2/files-2.1/" + fileName + "-deobf.jar"
|
||||
|
||||
|
||||
if(file(deobfFile).exists()) {
|
||||
return files(deobfFile)
|
||||
}
|
||||
@@ -719,7 +738,7 @@ def deobf(String sourceURL, String fileName) {
|
||||
// Helper methods
|
||||
|
||||
def checkPropertyExists(String propertyName) {
|
||||
if (project.hasProperty(propertyName) == false) {
|
||||
if (!project.hasProperty(propertyName)) {
|
||||
throw new GradleException("This project requires a property \"" + propertyName + "\"! Please add it your \"gradle.properties\". You can find all properties and their description here: https://github.com/GTNewHorizons/ExampleMod1.7.10/blob/main/gradle.properties")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,33 +5,40 @@ import codechicken.lib.vec.Rectangle4i;
|
||||
import codechicken.nei.util.NBTJson;
|
||||
import codechicken.nei.recipe.StackInfo;
|
||||
import codechicken.nei.recipe.BookmarkRecipeId;
|
||||
import codechicken.nei.ItemPanel.ItemPanelSlot;
|
||||
import codechicken.nei.guihook.GuiContainerManager;
|
||||
import com.google.gson.JsonParser;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonSyntaxException;
|
||||
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import static codechicken.nei.NEIClientUtils.translate;
|
||||
import static codechicken.lib.gui.GuiDraw.getMousePosition;
|
||||
import static codechicken.lib.gui.GuiDraw.drawRect;
|
||||
|
||||
import java.awt.Point;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class BookmarkPanel extends ItemPanel
|
||||
public class BookmarkPanel extends PanelWidget
|
||||
{
|
||||
|
||||
protected File bookmarkFile;
|
||||
@@ -45,8 +52,8 @@ public class BookmarkPanel extends ItemPanel
|
||||
public Label namespaceLabel;
|
||||
|
||||
|
||||
protected ArrayList<BookmarkGrid> namespaces = new ArrayList<>();
|
||||
public int activeNamespaceIndex = 0;
|
||||
protected List<BookmarkGrid> namespaces = new ArrayList<>();
|
||||
protected int activeNamespaceIndex = 0;
|
||||
|
||||
|
||||
protected static class BookmarkStackMeta
|
||||
@@ -54,21 +61,165 @@ public class BookmarkPanel extends ItemPanel
|
||||
public int factor;
|
||||
public BookmarkRecipeId recipeId;
|
||||
public boolean ingredient = false;
|
||||
public boolean fluidDisplay = false;
|
||||
|
||||
|
||||
public BookmarkStackMeta(BookmarkRecipeId recipeId, int count, boolean ingredient)
|
||||
public BookmarkStackMeta(BookmarkRecipeId recipeId, int count, boolean ingredient, boolean fluidDisplay)
|
||||
{
|
||||
this.recipeId = recipeId;
|
||||
this.factor = count;
|
||||
this.ingredient = ingredient;
|
||||
this.fluidDisplay = fluidDisplay;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static enum BookmarkViewMode
|
||||
{
|
||||
DEFAULT, TODO_LIST
|
||||
}
|
||||
|
||||
protected static class BookmarkGrid extends ItemsGrid
|
||||
{
|
||||
|
||||
protected List<List<Integer>> gridMask;
|
||||
protected List<BookmarkStackMeta> metadata = new ArrayList<>();
|
||||
|
||||
protected BookmarkViewMode viewMode = BookmarkViewMode.DEFAULT;
|
||||
protected boolean[] todoSpaces;
|
||||
protected int todoItemsCount = 0;
|
||||
|
||||
public void setViewMode(BookmarkViewMode mode)
|
||||
{
|
||||
if (viewMode == mode) {
|
||||
return;
|
||||
}
|
||||
|
||||
viewMode = mode;
|
||||
|
||||
if (mode == BookmarkViewMode.DEFAULT) {
|
||||
sortIngredients(false);
|
||||
todoItemsCount = 0;
|
||||
gridMask = null;
|
||||
}
|
||||
|
||||
onGridChanged();
|
||||
}
|
||||
|
||||
public BookmarkViewMode getViewMode()
|
||||
{
|
||||
return viewMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNumPages()
|
||||
{
|
||||
if (gridMask != null) {
|
||||
return gridMask.size();
|
||||
}
|
||||
|
||||
return super.getNumPages();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<Integer> getMask()
|
||||
{
|
||||
if (gridMask != null) {
|
||||
return gridMask.size() > page? gridMask.get(page): new ArrayList<>();
|
||||
}
|
||||
|
||||
return super.getMask();
|
||||
}
|
||||
|
||||
private void sortIngredients(final boolean forward)
|
||||
{
|
||||
BookmarkStackMeta meta;
|
||||
int dir = forward? 1: -1;
|
||||
|
||||
for (int i = 0; i < realItems.size(); i++) {
|
||||
meta = metadata.get(i);
|
||||
|
||||
if (meta.recipeId != null && !meta.ingredient) {
|
||||
int shift = 0;
|
||||
|
||||
for (int j = i + 1; j < realItems.size(); j++) {
|
||||
if (meta.recipeId.equals(metadata.get(j).recipeId)) {
|
||||
if (i + shift + dir != j) {
|
||||
realItems.add(i + shift + Math.max(dir, 0), realItems.remove(j));
|
||||
metadata.add(i + shift + Math.max(dir, 0), metadata.remove(j));
|
||||
}
|
||||
shift++;
|
||||
}
|
||||
}
|
||||
|
||||
for (int j = i + shift - 1; j >= 0; j--) {
|
||||
if (meta.recipeId.equals(metadata.get(j).recipeId)) {
|
||||
if (i + shift + dir != j) {
|
||||
realItems.add(i + shift + Math.min(dir, 0), realItems.remove(j));
|
||||
metadata.add(i + shift + Math.min(dir, 0), metadata.remove(j));
|
||||
}
|
||||
shift--;
|
||||
}
|
||||
}
|
||||
|
||||
i += Math.max(0, shift);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void generateToDoSpaces()
|
||||
{
|
||||
todoItemsCount = 0;
|
||||
gridMask = new ArrayList<>();
|
||||
|
||||
if (rows * columns == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
BookmarkStackMeta meta;
|
||||
int size = size();
|
||||
int idx = 0;
|
||||
|
||||
while (idx < size) {
|
||||
ArrayList<Integer> pmask = new ArrayList<>();
|
||||
|
||||
for (int i = 0, perPage = rows * columns; i < perPage && idx < size; i++) {
|
||||
if (isInvalidSlot(i)) {
|
||||
pmask.add(null);
|
||||
} else {
|
||||
meta = getMetadata(idx);
|
||||
|
||||
if (idx > 0 && ((i % columns) == 0) == (meta.recipeId != null && meta.ingredient && meta.recipeId.equals(getRecipeId(idx - 1)))) {
|
||||
pmask.add(null);
|
||||
} else {
|
||||
pmask.add(idx++);
|
||||
|
||||
if ((i % columns) == 0) {
|
||||
todoItemsCount++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
gridMask.add(pmask);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void onGridChanged()
|
||||
{
|
||||
super.onGridChanged();
|
||||
|
||||
if (getViewMode() == BookmarkViewMode.TODO_LIST) {
|
||||
sortIngredients(true);
|
||||
generateToDoSpaces();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public int indexOf(ItemStack stackA, BookmarkRecipeId recipeId)
|
||||
{
|
||||
final boolean useNBT = NEIClientConfig.useNBTInBookmarks();
|
||||
@@ -92,18 +243,20 @@ public class BookmarkPanel extends ItemPanel
|
||||
{
|
||||
realItems.add(stackA);
|
||||
metadata.add(meta);
|
||||
onGridChanged();
|
||||
}
|
||||
|
||||
public void replaceItem(int idx, ItemStack stack)
|
||||
{
|
||||
realItems.set(idx, stack);
|
||||
onGridChanged();
|
||||
}
|
||||
|
||||
public void removeRecipe(int idx, boolean removeFullRecipe)
|
||||
{
|
||||
final BookmarkStackMeta meta = getMetadata(idx);
|
||||
|
||||
if (removeFullRecipe && meta.recipeId != null) {
|
||||
if (meta.recipeId != null && (removeFullRecipe || !meta.ingredient)) {
|
||||
removeRecipe(meta.recipeId);
|
||||
} else {
|
||||
removeItem(idx);
|
||||
@@ -118,7 +271,7 @@ public class BookmarkPanel extends ItemPanel
|
||||
for (int slotIndex = metadata.size() - 1; slotIndex >= 0; slotIndex--) {
|
||||
recipeIdB = getRecipeId(slotIndex);
|
||||
|
||||
if (recipeIdB != null && recipeIdA.equals(recipeIdB)) {
|
||||
if (recipeIdB != null && recipeIdB.equals(recipeIdA)) {
|
||||
removeItem(slotIndex);
|
||||
}
|
||||
|
||||
@@ -130,6 +283,7 @@ public class BookmarkPanel extends ItemPanel
|
||||
{
|
||||
realItems.remove(idx);
|
||||
metadata.remove(idx);
|
||||
onGridChanged();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -155,33 +309,64 @@ public class BookmarkPanel extends ItemPanel
|
||||
{
|
||||
realItems.add(dst, realItems.remove(src));
|
||||
metadata.add(dst, metadata.remove(src));
|
||||
onGridChanged();
|
||||
}
|
||||
|
||||
private boolean isPartOfFocusedRecipe(ItemPanelSlot focused, int myIdx)
|
||||
{
|
||||
return NEIClientUtils.shiftKey()
|
||||
&& focused != null
|
||||
&& LayoutManager.bookmarkPanel.sortedStackIndex == -1
|
||||
&& getRecipeId(focused.slotIndex) != null
|
||||
&& getRecipeId(myIdx) != null
|
||||
&& getRecipeId(focused.slotIndex).equals(getRecipeId(myIdx));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawItem(Rectangle4i rect, int idx, ItemPanelSlot focus)
|
||||
protected void drawSlotOutline(@Nullable ItemPanelSlot focus, int idx, Rectangle4i rect)
|
||||
{
|
||||
|
||||
if (LayoutManager.bookmarkPanel.sortedNamespaceIndex == LayoutManager.bookmarkPanel.activeNamespaceIndex && LayoutManager.bookmarkPanel.sortedStackIndex == idx) {
|
||||
drawRect(rect.x, rect.y, rect.w, rect.h, 0xee555555);//highlight
|
||||
} else {
|
||||
|
||||
if (focus != null) {
|
||||
|
||||
if (focus.slotIndex == idx) {
|
||||
drawRect(rect.x, rect.y, rect.w, rect.h, 0xee555555);//highlight
|
||||
} else if (
|
||||
LayoutManager.bookmarkPanel.sortedStackIndex == -1 && //disabled when sorting
|
||||
NEIClientUtils.shiftKey() && //show only with shift key
|
||||
getRecipeId(focus.slotIndex) != null && getRecipeId(idx) != null && getRecipeId(focus.slotIndex).equals(getRecipeId(idx))//is some recipeId
|
||||
) {
|
||||
drawRect(rect.x, rect.y, rect.w, rect.h, getMetadata(idx).ingredient? 0x88b3b300: 0x88009933);//highlight recipe
|
||||
}
|
||||
|
||||
} else if (focus != null) {
|
||||
BookmarkStackMeta meta = getMetadata(idx);
|
||||
if (isPartOfFocusedRecipe(focus, idx)) {
|
||||
drawRect(rect.x, rect.y, rect.w, rect.h, meta.ingredient? 0x88b3b300: 0x88009933);//highlight recipe
|
||||
} else if(focus.slotIndex == idx) {
|
||||
drawRect(rect.x, rect.y, rect.w, rect.h, 0xee555555);//highlight
|
||||
}
|
||||
|
||||
GuiContainerManager.drawItem(rect.x + 1, rect.y + 1, getItem(idx), true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawItem(Rectangle4i rect, int idx)
|
||||
{
|
||||
if (LayoutManager.bookmarkPanel.sortedNamespaceIndex != LayoutManager.bookmarkPanel.activeNamespaceIndex || LayoutManager.bookmarkPanel.sortedStackIndex != idx) {
|
||||
final ItemStack stack = getItem(idx);
|
||||
final BookmarkStackMeta meta = getMetadata(idx);
|
||||
|
||||
GuiContainerManager.drawItem(rect.x + 1, rect.y + 1, stack, true, meta.factor < 0 || meta.fluidDisplay? "": String.valueOf(stack.stackSize));
|
||||
|
||||
if (meta.recipeId != null && !meta.ingredient && NEIClientConfig.showRecipeMarker()) {
|
||||
drawRecipeMarker(rect.x, rect.y, GuiContainerManager.getFontRenderer(stack));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void drawRecipeMarker(int offsetX, int offsetY, FontRenderer fontRenderer )
|
||||
{
|
||||
final float scaleFactor = fontRenderer.getUnicodeFlag() ? 0.85f : 0.5f;
|
||||
final float inverseScaleFactor = 1.0f / scaleFactor;
|
||||
|
||||
GuiContainerManager.enable2DRender();
|
||||
GL11.glScaled(scaleFactor, scaleFactor, scaleFactor);
|
||||
|
||||
final int X = (int) ( ( (float) offsetX + 1.0f) * inverseScaleFactor );
|
||||
final int Y = (int) ( ( (float) offsetY + 1.0f) * inverseScaleFactor );
|
||||
fontRenderer.drawStringWithShadow("R", X, Y, 0xA0A0A0);
|
||||
|
||||
GL11.glScaled(inverseScaleFactor, inverseScaleFactor, inverseScaleFactor);
|
||||
GuiContainerManager.enable3DRender();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -192,6 +377,7 @@ public class BookmarkPanel extends ItemPanel
|
||||
grid = new BookmarkGrid();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
super.init();
|
||||
@@ -242,9 +428,16 @@ public class BookmarkPanel extends ItemPanel
|
||||
@Override
|
||||
public String getLabelText()
|
||||
{
|
||||
return super.getLabelText() + " [" + grid.size() + "]";
|
||||
int size = grid.size();
|
||||
|
||||
if (((BookmarkGrid) grid).getViewMode() == BookmarkViewMode.TODO_LIST) {
|
||||
size = ((BookmarkGrid) grid).todoItemsCount;
|
||||
}
|
||||
|
||||
return String.format("(%d/%d) [%d]", getPage(), Math.max(1, getNumPages()), size);
|
||||
}
|
||||
|
||||
|
||||
public void addOrRemoveItem(ItemStack stackA)
|
||||
{
|
||||
addOrRemoveItem(stackA, "", null);
|
||||
@@ -267,7 +460,7 @@ public class BookmarkPanel extends ItemPanel
|
||||
final ItemStack normalizedA = StackInfo.loadFromNBT(nbTagA);
|
||||
BookmarkRecipeId recipeId = null;
|
||||
|
||||
if (NEIClientConfig.saveCurrentRecipeInBookmarksEnabled() && handlerName != "" && ingredients != null && ingredients.size() > 0) {
|
||||
if (NEIClientConfig.saveCurrentRecipeInBookmarksEnabled() && handlerName != "" && ingredients != null && !ingredients.isEmpty()) {
|
||||
recipeId = new BookmarkRecipeId(handlerName, ingredients);
|
||||
}
|
||||
|
||||
@@ -277,13 +470,13 @@ public class BookmarkPanel extends ItemPanel
|
||||
BGrid.removeRecipe(idx, addFullRecipe);
|
||||
} else {
|
||||
|
||||
if (addFullRecipe && handlerName != "" && ingredients != null) {
|
||||
if (addFullRecipe && handlerName != "" && ingredients != null && !ingredients.isEmpty()) {
|
||||
final Map<NBTTagCompound, Integer> unique = new HashMap<>();
|
||||
final ArrayList<NBTTagCompound> sorted = new ArrayList<>();
|
||||
|
||||
BGrid.removeRecipe(recipeId);
|
||||
|
||||
for (PositionedStack stack : ingredients) {
|
||||
for (PositionedStack stack : ingredients) {
|
||||
final NBTTagCompound nbTag = StackInfo.itemStackToNBT(stack.item, saveStackSize);
|
||||
|
||||
if (unique.get(nbTag) == null) {
|
||||
@@ -295,16 +488,15 @@ public class BookmarkPanel extends ItemPanel
|
||||
|
||||
}
|
||||
|
||||
for (NBTTagCompound nbTag : sorted) {
|
||||
for (NBTTagCompound nbTag : sorted) {
|
||||
nbTag.setInteger("Count", nbTag.getInteger("Count") * unique.get(nbTag));
|
||||
BGrid.addItem(StackInfo.loadFromNBT(nbTag), new BookmarkStackMeta(recipeId, nbTag.getInteger("Count"), true));
|
||||
BGrid.addItem(StackInfo.loadFromNBT(nbTag), new BookmarkStackMeta(recipeId, (saveStackSize ? 1: -1) * nbTag.getInteger("Count"), true, nbTag.hasKey("gtFluidName")));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
BGrid.addItem(normalizedA, new BookmarkStackMeta(recipeId, nbTagA.getInteger("Count"), false));
|
||||
BGrid.addItem(normalizedA, new BookmarkStackMeta(recipeId, (saveStackSize ? 1: -1) * nbTagA.getInteger("Count"), false, nbTagA.hasKey("gtFluidName")));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -315,12 +507,8 @@ public class BookmarkPanel extends ItemPanel
|
||||
public BookmarkRecipeId getBookmarkRecipeId(ItemStack stackA)
|
||||
{
|
||||
|
||||
final Point mousePos = getMousePosition();
|
||||
final ItemPanelSlot slot = getSlotMouseOver(mousePos.x, mousePos.y);
|
||||
|
||||
if (slot != null && StackInfo.equalItemAndNBT(slot.item, stackA, true)) {
|
||||
return ((BookmarkGrid) grid).getRecipeId(slot.slotIndex);
|
||||
}
|
||||
BookmarkRecipeId mouseOverRecipeId = getBookmarkMouseOverRecipeId(stackA);
|
||||
if (mouseOverRecipeId != null) return mouseOverRecipeId;
|
||||
|
||||
BookmarkRecipeId recipeId = ((BookmarkGrid) grid).findRecipeId(stackA);
|
||||
|
||||
@@ -336,6 +524,25 @@ public class BookmarkPanel extends ItemPanel
|
||||
return recipeId;
|
||||
}
|
||||
|
||||
public BookmarkRecipeId getBookmarkMouseOverRecipeId(ItemStack stackA)
|
||||
{
|
||||
final Point mousePos = getMousePosition();
|
||||
final ItemPanelSlot slot = getSlotMouseOver(mousePos.x, mousePos.y);
|
||||
|
||||
if (slot != null) {
|
||||
if (stackA == null || StackInfo.equalItemAndNBT(slot.item, stackA, true)) {
|
||||
return ((BookmarkGrid) grid).getRecipeId(slot.slotIndex);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public BookmarkRecipeId getBookmarkMouseOverRecipeId()
|
||||
{
|
||||
return getBookmarkMouseOverRecipeId(null);
|
||||
}
|
||||
|
||||
protected String getNamespaceLabelText(boolean shortFormat)
|
||||
{
|
||||
String activePage = String.valueOf(activeNamespaceIndex + 1);
|
||||
@@ -458,9 +665,10 @@ public class BookmarkPanel extends ItemPanel
|
||||
for (int grpIdx = 0; grpIdx < namespaces.size() - 1; grpIdx++) {
|
||||
final BookmarkGrid grid = namespaces.get(grpIdx);
|
||||
|
||||
if (grpIdx > 0) {
|
||||
strings.add("");//namespace separator; ignore first namespace
|
||||
}
|
||||
JsonObject settings = new JsonObject();
|
||||
settings.add("viewmode", new JsonPrimitive(grid.getViewMode().toString()));
|
||||
settings.add("active", new JsonPrimitive(activeNamespaceIndex == grpIdx));
|
||||
strings.add("; " + NBTJson.toJson(settings));
|
||||
|
||||
for (int idx = 0; idx < grid.size(); idx++) {
|
||||
|
||||
@@ -491,7 +699,7 @@ public class BookmarkPanel extends ItemPanel
|
||||
}
|
||||
|
||||
try (FileOutputStream output = new FileOutputStream(bookmarkFile)) {
|
||||
IOUtils.writeLines(strings, "\n", output, "UTF-8");
|
||||
IOUtils.writeLines(strings, "\n", output, StandardCharsets.UTF_8);
|
||||
} catch (IOException e) {
|
||||
NEIClientConfig.logger.error("Filed to save bookmarks list to file {}", bookmarkFile, e);
|
||||
}
|
||||
@@ -512,9 +720,9 @@ public class BookmarkPanel extends ItemPanel
|
||||
}
|
||||
|
||||
List<String> itemStrings;
|
||||
try (FileReader reader = new FileReader(bookmarkFile)) {
|
||||
try (FileInputStream reader = new FileInputStream(bookmarkFile)) {
|
||||
NEIClientConfig.logger.info("Loading bookmarks from file {}", bookmarkFile);
|
||||
itemStrings = IOUtils.readLines(reader);
|
||||
itemStrings = IOUtils.readLines(reader, StandardCharsets.UTF_8);
|
||||
} catch (IOException e) {
|
||||
NEIClientConfig.logger.error("Failed to load bookmarks from file {}", bookmarkFile, e);
|
||||
return;
|
||||
@@ -522,19 +730,34 @@ public class BookmarkPanel extends ItemPanel
|
||||
|
||||
namespaces.clear();
|
||||
namespaces.add(new BookmarkGrid());
|
||||
activeNamespaceIndex = 0;
|
||||
activeNamespaceIndex = -1;
|
||||
|
||||
final JsonParser parser = new JsonParser();
|
||||
int namespaceIndex = 0;
|
||||
|
||||
for (String itemStr: itemStrings) {
|
||||
|
||||
try {
|
||||
|
||||
if (itemStr.isEmpty()) {
|
||||
itemStr = "; {}";
|
||||
}
|
||||
|
||||
if (namespaces.get(activeNamespaceIndex).size() > 0) {
|
||||
if (itemStr.startsWith("; ")) {
|
||||
JsonObject settings = parser.parse(itemStr.substring(2)).getAsJsonObject();
|
||||
|
||||
if (namespaces.get(namespaceIndex).size() > 0) {
|
||||
//do not create empty namespaces
|
||||
namespaces.add(new BookmarkGrid());
|
||||
activeNamespaceIndex++;
|
||||
namespaceIndex++;
|
||||
}
|
||||
|
||||
if (settings.get("viewmode") != null) {
|
||||
namespaces.get(namespaceIndex).setViewMode(BookmarkViewMode.valueOf(settings.get("viewmode").getAsString()));
|
||||
}
|
||||
|
||||
if (settings.get("active") != null && settings.get("active").getAsBoolean()) {
|
||||
activeNamespaceIndex = namespaceIndex;
|
||||
}
|
||||
|
||||
continue;
|
||||
@@ -558,10 +781,11 @@ public class BookmarkPanel extends ItemPanel
|
||||
|
||||
|
||||
if (itemStack != null) {
|
||||
namespaces.get(activeNamespaceIndex).addItem(itemStack, new BookmarkStackMeta(
|
||||
namespaces.get(namespaceIndex).addItem(itemStack, new BookmarkStackMeta(
|
||||
recipeId,
|
||||
jsonObject.has("factor")? jsonObject.get("factor").getAsInt(): 1,
|
||||
jsonObject.has("ingredient")? jsonObject.get("ingredient").getAsBoolean(): false
|
||||
jsonObject.has("factor")? jsonObject.get("factor").getAsInt(): 0,
|
||||
jsonObject.has("ingredient")? jsonObject.get("ingredient").getAsBoolean(): false,
|
||||
itemStackNBT.hasKey("gtFluidName")
|
||||
));
|
||||
} else {
|
||||
NEIClientConfig.logger.warn("Failed to load bookmarked ItemStack from json string, the item no longer exists:\n{}", itemStr);
|
||||
@@ -572,8 +796,8 @@ public class BookmarkPanel extends ItemPanel
|
||||
}
|
||||
}
|
||||
|
||||
if (namespaces.get(activeNamespaceIndex).size() == 0) {
|
||||
activeNamespaceIndex = Math.max(activeNamespaceIndex - 1, 0);
|
||||
if (activeNamespaceIndex == -1) {
|
||||
activeNamespaceIndex = namespaceIndex;
|
||||
}
|
||||
|
||||
grid = namespaces.get(activeNamespaceIndex);
|
||||
@@ -585,19 +809,38 @@ public class BookmarkPanel extends ItemPanel
|
||||
{
|
||||
loadBookmarksIfNeeded();
|
||||
super.resize(gui);
|
||||
}
|
||||
|
||||
final int buttonHeight = 16;
|
||||
final int buttonWidth = 16;
|
||||
|
||||
final int buttonTop = gui.height - buttonHeight - 2;
|
||||
final int leftBorder = LayoutManager.bookmarksButton.x + LayoutManager.bookmarksButton.w + 2;
|
||||
@Override
|
||||
protected int resizeHeader(GuiContainer gui)
|
||||
{
|
||||
final LayoutStyleMinecraft layout = (LayoutStyleMinecraft) LayoutManager.getLayoutStyle();
|
||||
final int rows = (int) Math.ceil((double) layout.buttonCount / layout.numButtons);
|
||||
final int diff = rows * BookmarkGrid.SLOT_SIZE + getMarginTop(gui) - y;
|
||||
|
||||
if (diff > 0) {
|
||||
y += diff;
|
||||
h -= diff;
|
||||
}
|
||||
|
||||
return super.resizeHeader(gui);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int resizeFooter(GuiContainer gui)
|
||||
{
|
||||
final int BUTTON_SIZE = 16;
|
||||
|
||||
final ButtonCycled button = LayoutManager.bookmarksButton;
|
||||
final int leftBorder = y + h > button.y? button.x + button.w + 2: x;
|
||||
final int rightBorder = x + w;
|
||||
final int center = leftBorder + (rightBorder - leftBorder) / 2;
|
||||
final int center = leftBorder + Math.max(0, (rightBorder - leftBorder) / 2);
|
||||
int labelWidth = 2;
|
||||
|
||||
namespacePrev.h = namespaceNext.h = buttonHeight;
|
||||
namespacePrev.w = namespaceNext.w = buttonWidth;
|
||||
namespacePrev.y = namespaceNext.y = buttonTop;
|
||||
namespacePrev.h = namespaceNext.h = BUTTON_SIZE;
|
||||
namespacePrev.w = namespaceNext.w = BUTTON_SIZE;
|
||||
namespacePrev.y = namespaceNext.y = y + h - BUTTON_SIZE;
|
||||
|
||||
|
||||
if (rightBorder - leftBorder >= 70) {
|
||||
@@ -608,12 +851,13 @@ public class BookmarkPanel extends ItemPanel
|
||||
namespaceLabel.text = getNamespaceLabelText(true);
|
||||
}
|
||||
|
||||
namespaceLabel.y = buttonTop + 5;
|
||||
namespaceLabel.y = namespacePrev.y + 5;
|
||||
namespaceLabel.x = center;
|
||||
|
||||
namespacePrev.x = center - labelWidth / 2 - 2 - namespacePrev.w;
|
||||
namespaceNext.x = center + labelWidth / 2 + 2;
|
||||
|
||||
return BUTTON_SIZE + 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -621,38 +865,62 @@ public class BookmarkPanel extends ItemPanel
|
||||
{
|
||||
super.setVisible();
|
||||
|
||||
LayoutManager.addWidget(namespacePrev);
|
||||
LayoutManager.addWidget(namespaceNext);
|
||||
LayoutManager.addWidget(namespaceLabel);
|
||||
if (grid.getPerPage() > 0) {
|
||||
LayoutManager.addWidget(namespacePrev);
|
||||
LayoutManager.addWidget(namespaceNext);
|
||||
LayoutManager.addWidget(namespaceLabel);
|
||||
}
|
||||
}
|
||||
|
||||
protected String getPositioningSettingName()
|
||||
{
|
||||
return "world.panels.bookmarks";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMarginLeft(GuiContainer gui)
|
||||
{
|
||||
return 5;
|
||||
return PADDING;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMarginTop(GuiContainer gui)
|
||||
{
|
||||
LayoutStyleMinecraft layout = (LayoutStyleMinecraft)LayoutManager.getLayoutStyle();
|
||||
return 2 + (((int)Math.ceil((double)layout.buttonCount / layout.numButtons)) * 18);
|
||||
return PADDING;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWidth(GuiContainer gui)
|
||||
{
|
||||
return LayoutManager.getLeftSize(gui) - ((gui.xSize + gui.width) / 2 + 3) - 16;
|
||||
return gui.width - (gui.xSize + gui.width) / 2 - PADDING * 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHeight(GuiContainer gui)
|
||||
{
|
||||
// - 19 = 22 + 1 -> input in bottom
|
||||
return gui.height - getMarginTop(gui) - 23;
|
||||
return gui.height - getMarginTop(gui) - PADDING;
|
||||
}
|
||||
|
||||
|
||||
protected ItemStack getDraggedStackWithQuantity(int mouseDownSlot)
|
||||
{
|
||||
final ItemStack stack = grid.getItem(mouseDownSlot);
|
||||
|
||||
if (stack == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final BookmarkStackMeta meta = ((BookmarkGrid) grid).getMetadata(mouseDownSlot);
|
||||
int amount = stack.stackSize;
|
||||
|
||||
if (meta.factor < 0 && !meta.fluidDisplay) {
|
||||
amount = NEIClientConfig.getItemQuantity();
|
||||
|
||||
if (amount == 0) {
|
||||
amount = stack.getMaxStackSize();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return NEIServerUtils.copyStack(stack, amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseDragged(int mousex, int mousey, int button, long heldTime)
|
||||
{
|
||||
@@ -666,36 +934,59 @@ public class BookmarkPanel extends ItemPanel
|
||||
if (stack != null && (mouseOverSlot == null || mouseOverSlot.slotIndex != mouseDownSlot || heldTime > 250)) {
|
||||
sortedNamespaceIndex = activeNamespaceIndex;
|
||||
sortedStackIndex = mouseDownSlot;
|
||||
grid.onGridChanged();
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if (mouseOverSlot == null && sortedNamespaceIndex != activeNamespaceIndex) {
|
||||
mouseOverSlot = getNextSlot(mousex, mousey);
|
||||
}
|
||||
|
||||
if (mouseOverSlot != null) {
|
||||
|
||||
if (sortedNamespaceIndex != activeNamespaceIndex) {
|
||||
BookmarkGrid BGrid = namespaces.get(sortedNamespaceIndex);
|
||||
BookmarkStackMeta meta = BGrid.getMetadata(sortedStackIndex);
|
||||
ItemStack stack = BGrid.getItem(sortedStackIndex);
|
||||
BGrid.removeItem(sortedStackIndex);
|
||||
|
||||
((BookmarkGrid) grid).addItem(stack, meta);
|
||||
|
||||
sortedNamespaceIndex = activeNamespaceIndex;
|
||||
sortedStackIndex = grid.size() - 1;
|
||||
if (sortedNamespaceIndex != activeNamespaceIndex) {
|
||||
final BookmarkGrid hoverGrid = namespaces.get(activeNamespaceIndex);
|
||||
final BookmarkGrid sortedGrid = namespaces.get(sortedNamespaceIndex);
|
||||
|
||||
if (mouseOverSlot == null) {
|
||||
mouseOverSlot = getNextSlot(mousex, mousey, hoverGrid.getViewMode() == BookmarkViewMode.TODO_LIST);
|
||||
}
|
||||
|
||||
if (mouseOverSlot.slotIndex != sortedStackIndex) {
|
||||
((BookmarkGrid) grid).moveItem(sortedStackIndex, mouseOverSlot.slotIndex);
|
||||
sortedStackIndex = mouseOverSlot.slotIndex;
|
||||
if (mouseOverSlot != null) {
|
||||
final ItemStack stack = sortedGrid.getItem(sortedStackIndex);
|
||||
final BookmarkStackMeta meta = sortedGrid.getMetadata(sortedStackIndex);
|
||||
|
||||
sortedGrid.removeItem(sortedStackIndex);
|
||||
hoverGrid.addItem(stack, meta);
|
||||
|
||||
sortedNamespaceIndex = activeNamespaceIndex;
|
||||
sortedStackIndex = hoverGrid.indexOf(stack, meta.recipeId);
|
||||
}
|
||||
|
||||
|
||||
} else if (mouseOverSlot == null || mouseOverSlot.slotIndex != sortedStackIndex) {
|
||||
final BookmarkGrid sortedGrid = namespaces.get(sortedNamespaceIndex);
|
||||
|
||||
if (mouseOverSlot != null && sortedGrid.getViewMode() == BookmarkViewMode.DEFAULT) {
|
||||
sortedGrid.moveItem(sortedStackIndex, mouseOverSlot.slotIndex);
|
||||
sortedStackIndex = mouseOverSlot.slotIndex;
|
||||
} else if (sortedGrid.getViewMode() == BookmarkViewMode.TODO_LIST) {
|
||||
final ItemStack stack = sortedGrid.getItem(sortedStackIndex);
|
||||
final BookmarkStackMeta meta = sortedGrid.getMetadata(sortedStackIndex);
|
||||
final boolean isIngredient = sortedStackIndex > 0 && meta.recipeId != null && meta.ingredient && meta.recipeId.equals(sortedGrid.getRecipeId(sortedStackIndex - 1));
|
||||
|
||||
if (!isIngredient) {
|
||||
mouseOverSlot = getSlotMouseOver(grid.marginLeft + grid.paddingLeft, mousey);
|
||||
|
||||
if (mouseOverSlot != null && sortedStackIndex != mouseOverSlot.slotIndex) {
|
||||
sortedGrid.moveItem(sortedStackIndex, mouseOverSlot.slotIndex);
|
||||
sortedStackIndex = sortedGrid.indexOf(stack, meta.recipeId);
|
||||
}
|
||||
|
||||
} else if (mouseOverSlot != null && meta.recipeId != null && sortedGrid.getMetadata(mouseOverSlot.slotIndex).ingredient && meta.recipeId.equals(sortedGrid.getRecipeId(mouseOverSlot.slotIndex))) {
|
||||
sortedGrid.moveItem(sortedStackIndex, mouseOverSlot.slotIndex);
|
||||
sortedStackIndex = sortedGrid.indexOf(stack, meta.recipeId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -703,22 +994,21 @@ public class BookmarkPanel extends ItemPanel
|
||||
super.mouseDragged(mousex, mousey, button, heldTime);
|
||||
}
|
||||
|
||||
private ItemPanelSlot getNextSlot(int mousex, int mousey)
|
||||
private ItemPanelSlot getNextSlot(int mousex, int mousey, boolean line)
|
||||
{
|
||||
int idx = grid.getPage() * grid.getPerPage() - grid.getPerPage();
|
||||
int gSize = grid.size();
|
||||
final List<Integer> mask = grid.getMask();
|
||||
final int columns = grid.getColumns();
|
||||
final int perPage = grid.getRows() * columns;
|
||||
|
||||
for (int i = 0; i < grid.getRows() * grid.getColumns() && idx <= gSize; i++) {
|
||||
for (int i = mask.size(); i < perPage; i++) {
|
||||
if (!grid.isInvalidSlot(i) && (!line || (i % columns) == 0)) {
|
||||
|
||||
if (!grid.isInvalidSlot(i)) {
|
||||
|
||||
if (idx == gSize && grid.getSlotRect(i).contains(mousex, mousey)) {
|
||||
return new ItemPanelSlot(idx, null);
|
||||
if (grid.getSlotRect(i).contains(mousex, mousey)) {
|
||||
return new ItemPanelSlot(grid.size() - 1, null);
|
||||
}
|
||||
|
||||
idx++;
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -738,11 +1028,35 @@ public class BookmarkPanel extends ItemPanel
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ItemStack getDraggedStackWithQuantity(int mouseDownSlot)
|
||||
public boolean handleClickExt(int mousex, int mousey, int button)
|
||||
{
|
||||
ItemStack stack = grid.getItem(mouseDownSlot);
|
||||
|
||||
return stack != null? stack.copy(): null;
|
||||
if (new Rectangle4i(pagePrev.x + pagePrev.w, pagePrev.y, pageNext.x - (pagePrev.x + pagePrev.w), pagePrev.h).contains(mousex, mousey)) {
|
||||
final BookmarkGrid BGrid = (BookmarkGrid)grid;
|
||||
|
||||
if (BGrid.getViewMode() == BookmarkViewMode.DEFAULT) {
|
||||
BGrid.setViewMode(BookmarkViewMode.TODO_LIST);
|
||||
} else {
|
||||
BGrid.setViewMode(BookmarkViewMode.DEFAULT);
|
||||
}
|
||||
|
||||
saveBookmarks();
|
||||
return true;
|
||||
} else {
|
||||
return super.handleClickExt(mousex, mousey, button);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> handleTooltip(int mx, int my, List<String> tooltip)
|
||||
{
|
||||
|
||||
if (new Rectangle4i(pagePrev.x + pagePrev.w, pagePrev.y, pageNext.x - (pagePrev.x + pagePrev.w), pagePrev.h).contains(mx, my)) {
|
||||
tooltip.add(translate("bookmark.viewmode.toggle.tip"));
|
||||
}
|
||||
|
||||
return super.handleTooltip(mx, my, tooltip);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -753,6 +1067,7 @@ public class BookmarkPanel extends ItemPanel
|
||||
sortedNamespaceIndex = -1;
|
||||
sortedStackIndex = -1;
|
||||
mouseDownSlot = -1;
|
||||
grid.onGridChanged(); /* make sure grid redraws the new item */
|
||||
saveBookmarks();
|
||||
} else {
|
||||
super.mouseUp(mousex, mousey, button);
|
||||
@@ -771,6 +1086,7 @@ public class BookmarkPanel extends ItemPanel
|
||||
nextNamespace();
|
||||
}
|
||||
|
||||
saveBookmarks();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -784,7 +1100,6 @@ public class BookmarkPanel extends ItemPanel
|
||||
if (slot != null) {
|
||||
final BookmarkGrid BGrid = (BookmarkGrid)grid;
|
||||
final BookmarkRecipeId recipeId = BGrid.getRecipeId(slot.slotIndex);
|
||||
final BookmarkStackMeta meta = BGrid.getMetadata(slot.slotIndex);
|
||||
final boolean addFullRecipe = NEIClientUtils.shiftKey();
|
||||
|
||||
if (addFullRecipe) {
|
||||
@@ -793,22 +1108,17 @@ public class BookmarkPanel extends ItemPanel
|
||||
for (int slotIndex = grid.size() - 1; slotIndex >= 0; slotIndex--) {
|
||||
iMeta = BGrid.getMetadata(slotIndex);
|
||||
|
||||
if (iMeta.recipeId != null && iMeta.recipeId.equals(recipeId)) {
|
||||
NBTTagCompound nbTag = StackInfo.itemStackToNBT(BGrid.getItem(slotIndex), true);
|
||||
nbTag.setInteger("Count", Math.max(nbTag.getInteger("Count") + iMeta.factor * shift, iMeta.factor));
|
||||
BGrid.replaceItem(slotIndex, StackInfo.loadFromNBT(nbTag));
|
||||
if (iMeta.recipeId != null && iMeta.recipeId.equals(recipeId) && slotIndex != slot.slotIndex) {
|
||||
shiftStackSize(slotIndex, shift);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
NBTTagCompound nbTag = StackInfo.itemStackToNBT(slot.item, true);
|
||||
nbTag.setInteger("Count", Math.max(nbTag.getInteger("Count") + meta.factor * shift, meta.factor));
|
||||
BGrid.replaceItem(slot.slotIndex, StackInfo.loadFromNBT(nbTag));
|
||||
shiftStackSize(slot.slotIndex, shift);
|
||||
|
||||
saveBookmarks();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -817,4 +1127,21 @@ public class BookmarkPanel extends ItemPanel
|
||||
return super.onMouseWheel(shift, mousex, mousey);
|
||||
}
|
||||
|
||||
protected void shiftStackSize(int slotIndex, int shift)
|
||||
{
|
||||
final BookmarkGrid BGrid = (BookmarkGrid)grid;
|
||||
final NBTTagCompound nbTag = StackInfo.itemStackToNBT(BGrid.getItem(slotIndex), true);
|
||||
final BookmarkStackMeta meta = BGrid.getMetadata(slotIndex);
|
||||
final int factor = Math.abs(meta.factor);
|
||||
|
||||
if (nbTag.getInteger("Count") == factor && meta.factor < 0 && shift > 0) {
|
||||
meta.factor = factor;
|
||||
} else {
|
||||
meta.factor = nbTag.getInteger("Count") == factor && shift < 0? -1 * factor: factor;
|
||||
nbTag.setInteger("Count", Math.max(nbTag.getInteger("Count") + factor * shift, factor));
|
||||
BGrid.replaceItem(slotIndex, StackInfo.loadFromNBT(nbTag));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -299,6 +299,10 @@ public class ClientHandler
|
||||
lastworld = null;
|
||||
else if (gui instanceof GuiSelectWorld)
|
||||
NEIClientConfig.reloadSaves();
|
||||
else if(gui == null) {
|
||||
/* prevent WorldClient reference being held in the Gui */
|
||||
NEIController.manager = null;
|
||||
}
|
||||
}
|
||||
lastGui = gui;
|
||||
}
|
||||
@@ -328,6 +332,8 @@ public class ClientHandler
|
||||
|
||||
if (!Minecraft.getMinecraft().isSingleplayer())//wait for server to initiate in singleplayer
|
||||
NEIClientConfig.loadWorld("remote/" + ClientUtils.getServerIP().replace(':', '~'));
|
||||
|
||||
ItemMobSpawner.clearEntityReferences(world);
|
||||
}
|
||||
|
||||
lastworld = world;
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package codechicken.nei;
|
||||
|
||||
import codechicken.lib.render.CCRenderState;
|
||||
import codechicken.lib.vec.Rectangle4i;
|
||||
import codechicken.nei.api.INEIGuiHandler;
|
||||
import codechicken.nei.api.TaggedInventoryArea;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
@@ -50,7 +52,21 @@ public class GuiExtendedCreativeInv extends GuiContainer implements INEIGuiHandl
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hideItemPanelSlot(GuiContainer gui, int x, int y, int w, int h) {
|
||||
return false;
|
||||
public boolean hideItemPanelSlot(GuiContainer gui, int x, int y, int w, int h)
|
||||
{
|
||||
return (new Rectangle4i(guiLeft - 15, guiTop + 18, 18, 18 * 4 + 4)).intersects(new Rectangle4i(x, y, w, h));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void handleMouseClick(Slot p_146984_1_, int p_146984_2_, int p_146984_3_, int p_146984_4_)
|
||||
{
|
||||
|
||||
//Hack for armor slots, because they are outside the container
|
||||
if (p_146984_1_ != null && p_146984_4_ == 4 && p_146984_1_.xDisplayPosition < 0) {
|
||||
p_146984_4_ = 0;
|
||||
}
|
||||
|
||||
super.handleMouseClick(p_146984_1_, p_146984_2_, p_146984_3_, p_146984_4_);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -96,6 +96,10 @@ public class ItemMobSpawner extends ItemBlock
|
||||
return e;
|
||||
}
|
||||
|
||||
public static void clearEntityReferences(World newWorld) {
|
||||
entityHashMap.values().removeIf(e -> e.worldObj != newWorld);
|
||||
}
|
||||
|
||||
private void setDefaultTag(ItemStack itemstack) {
|
||||
if (!IDtoNameMap.containsKey(itemstack.getItemDamage()))
|
||||
itemstack.setItemDamage(idPig);
|
||||
|
||||
@@ -1,39 +1,22 @@
|
||||
package codechicken.nei;
|
||||
|
||||
import codechicken.lib.vec.Rectangle4i;
|
||||
import codechicken.nei.api.GuiInfo;
|
||||
import codechicken.nei.api.INEIGuiHandler;
|
||||
import codechicken.nei.guihook.GuiContainerManager;
|
||||
import codechicken.nei.recipe.GuiCraftingRecipe;
|
||||
import codechicken.nei.recipe.GuiRecipe;
|
||||
import codechicken.nei.recipe.GuiUsageRecipe;
|
||||
import codechicken.nei.recipe.StackInfo;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.client.gui.inventory.GuiContainerCreative;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.IFluidContainerItem;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import static codechicken.lib.gui.GuiDraw.drawRect;
|
||||
import static codechicken.nei.LayoutManager.searchField;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class ItemPanel extends Widget
|
||||
public class ItemPanel extends PanelWidget
|
||||
{
|
||||
|
||||
public ItemStack draggedStack;
|
||||
public int mouseDownSlot = -1;
|
||||
|
||||
public Button pagePrev;
|
||||
public Button pageNext;
|
||||
public Label pageLabel;
|
||||
|
||||
|
||||
/**
|
||||
* Backwards compat :-/
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
@Deprecated
|
||||
private int itemsPerPage = 0;
|
||||
|
||||
@@ -42,8 +25,15 @@ public class ItemPanel extends Widget
|
||||
|
||||
@Deprecated
|
||||
public ArrayList<ItemStack> realItems = new ArrayList<>();
|
||||
|
||||
public ItemStack getStackMouseOver(int mousex, int mousey) {
|
||||
// *looks angrily at AppleCore*
|
||||
return super.getStackMouseOver(mousex, mousey);
|
||||
};
|
||||
|
||||
protected Pattern SPECIAL_REGEX_CHARS = Pattern.compile("[{}()\\[\\].+*?^$\\\\|]");
|
||||
public Button more;
|
||||
public Button less;
|
||||
public ItemQuantityField quantity;
|
||||
|
||||
public static class ItemPanelSlot
|
||||
{
|
||||
@@ -79,30 +69,26 @@ public class ItemPanel extends Widget
|
||||
if (newItems != null) {
|
||||
realItems = newItems;
|
||||
newItems = null;
|
||||
onGridChanged();
|
||||
}
|
||||
|
||||
super.refresh(gui);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawItem(Rectangle4i rect, int idx, ItemPanelSlot focus)
|
||||
{
|
||||
|
||||
if (PresetsWidget.inEditMode() && !PresetsWidget.isHidden(getItem(idx))) {
|
||||
drawRect(rect.x, rect.y, rect.w, rect.h, 0xee555555);
|
||||
protected void drawSlotOutline(@Nullable ItemPanelSlot focused, int slotIdx, Rectangle4i rect) {
|
||||
if (PresetsWidget.inEditMode()) {
|
||||
if(!PresetsWidget.isHidden(getItem(slotIdx)))
|
||||
drawRect(rect.x, rect.y, rect.w, rect.h, 0xee555555);
|
||||
} else {
|
||||
super.drawSlotOutline(focused, slotIdx, rect);
|
||||
}
|
||||
|
||||
super.drawItem(rect, idx, PresetsWidget.inEditMode()? null: focus);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
protected ItemsGrid grid = new ItemPanelGrid();
|
||||
|
||||
public ArrayList<ItemStack> getItems()
|
||||
public ItemPanel()
|
||||
{
|
||||
return grid.getItems();
|
||||
grid = new ItemPanelGrid();
|
||||
}
|
||||
|
||||
public static void updateItemList(ArrayList<ItemStack> newItems)
|
||||
@@ -111,149 +97,116 @@ public class ItemPanel extends Widget
|
||||
ItemPanels.itemPanel.realItems = newItems;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
super.init();
|
||||
|
||||
more = new Button("+")
|
||||
{
|
||||
@Override
|
||||
public boolean onButtonPress(boolean rightclick) {
|
||||
if (rightclick)
|
||||
return false;
|
||||
|
||||
int modifier = NEIClientUtils.controlKey() ? 64 : NEIClientUtils.shiftKey() ? 10 : 1;
|
||||
int quantity = NEIClientConfig.getItemQuantity() + modifier;
|
||||
|
||||
if (quantity < 0) {
|
||||
quantity = 0;
|
||||
}
|
||||
|
||||
ItemPanels.itemPanel.quantity.setText(Integer.toString(quantity));
|
||||
return true;
|
||||
}
|
||||
};
|
||||
less = new Button("-")
|
||||
{
|
||||
@Override
|
||||
public boolean onButtonPress(boolean rightclick) {
|
||||
if (rightclick)
|
||||
return false;
|
||||
|
||||
int modifier = NEIClientUtils.controlKey() ? -64 : NEIClientUtils.shiftKey() ? -10 : -1;
|
||||
int quantity = NEIClientConfig.getItemQuantity() + modifier;
|
||||
|
||||
if (quantity < 0) {
|
||||
quantity = 0;
|
||||
}
|
||||
|
||||
ItemPanels.itemPanel.quantity.setText(Integer.toString(quantity));
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
quantity = new ItemQuantityField("quantity");
|
||||
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void scroll(int i)
|
||||
{
|
||||
grid.shiftPage(i);
|
||||
}
|
||||
|
||||
public ItemsGrid getGrid()
|
||||
|
||||
public String getLabelText()
|
||||
{
|
||||
return grid;
|
||||
return String.format("(%d/%d)", getPage(), Math.max(1, getNumPages()));
|
||||
}
|
||||
|
||||
public void init() {
|
||||
pageLabel = new Label("(0/0)", true);
|
||||
|
||||
pagePrev = new Button("Prev")
|
||||
{
|
||||
public boolean onButtonPress(boolean rightclick) {
|
||||
if (!rightclick) {
|
||||
grid.shiftPage(-1);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRenderLabel() {
|
||||
return "<";
|
||||
}
|
||||
};
|
||||
pageNext = new Button("Next")
|
||||
{
|
||||
public boolean onButtonPress(boolean rightclick) {
|
||||
if (!rightclick) {
|
||||
grid.shiftPage(1);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRenderLabel() {
|
||||
return ">";
|
||||
}
|
||||
};
|
||||
|
||||
protected String getPositioningSettingName()
|
||||
{
|
||||
return "world.panels.items";
|
||||
}
|
||||
|
||||
public int getMarginLeft(GuiContainer gui)
|
||||
{
|
||||
if (gui instanceof GuiContainerCreative && NEIClientUtils.getGamemode() == 2) {
|
||||
//then activate creative+ first render creative gui and oly then creative+
|
||||
return (gui.width + 176) / 2 + 2;
|
||||
}
|
||||
|
||||
return (gui.width + gui.xSize) / 2 + 2;
|
||||
return (gui.width + gui.xSize) / 2 + PADDING;
|
||||
}
|
||||
|
||||
public int getMarginTop(GuiContainer gui)
|
||||
{
|
||||
return 2;
|
||||
return PADDING;
|
||||
}
|
||||
|
||||
public int getWidth(GuiContainer gui)
|
||||
{
|
||||
return LayoutManager.getSideWidth(gui) - getMarginLeft(gui);
|
||||
return gui.width - (gui.xSize + gui.width) / 2 - PADDING * 2;
|
||||
}
|
||||
|
||||
public int getHeight(GuiContainer gui)
|
||||
{
|
||||
// - 19 = 2 + 16 + 1 -> input in bottom
|
||||
return gui.height - getMarginTop(gui) - 19;
|
||||
return gui.height - getMarginTop(gui) - PADDING;
|
||||
}
|
||||
|
||||
public String getLabelText()
|
||||
protected int resizeFooter(GuiContainer gui)
|
||||
{
|
||||
return "(" + getPage() + "/" + Math.max(1, getNumPages()) + ")";
|
||||
}
|
||||
|
||||
public void resize(GuiContainer gui)
|
||||
{
|
||||
final int marginLeft = getMarginLeft(gui);
|
||||
final int marginTop = getMarginTop(gui);
|
||||
final int width = getWidth(gui);
|
||||
final int height = getHeight(gui);
|
||||
final int buttonHeight = 16;
|
||||
final int buttonWidth = 16;
|
||||
|
||||
pagePrev.w = pageNext.w = buttonWidth;
|
||||
pagePrev.h = pageNext.h = buttonHeight;
|
||||
pagePrev.y = pageNext.y = marginTop;
|
||||
|
||||
pagePrev.x = marginLeft;
|
||||
pageNext.x = marginLeft + width - buttonWidth;
|
||||
|
||||
pageLabel.x = marginLeft + width / 2;
|
||||
pageLabel.y = marginTop + 5;
|
||||
pageLabel.text = getLabelText();
|
||||
|
||||
|
||||
y = marginTop + buttonHeight + 2;
|
||||
x = marginLeft;
|
||||
w = width;
|
||||
h = height - buttonHeight - 2;
|
||||
|
||||
grid.setGridSize(x, y, w, h);
|
||||
grid.refresh(gui);
|
||||
|
||||
final int BUTTON_SIZE = 16;
|
||||
|
||||
more.w = less.w = BUTTON_SIZE;
|
||||
more.h = less.h = quantity.h = BUTTON_SIZE;
|
||||
|
||||
less.x = x;
|
||||
more.x = x + w - BUTTON_SIZE;
|
||||
more.y = less.y = quantity.y = y + h - BUTTON_SIZE;
|
||||
|
||||
quantity.x = x + BUTTON_SIZE + 2;
|
||||
quantity.w = more.x - quantity.x - 2;
|
||||
|
||||
return BUTTON_SIZE + 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVisible()
|
||||
{
|
||||
LayoutManager.addWidget(pagePrev);
|
||||
LayoutManager.addWidget(pageNext);
|
||||
LayoutManager.addWidget(pageLabel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(int mousex, int mousey)
|
||||
{
|
||||
grid.draw(mousex, mousey);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postDraw(int mousex, int mousey) {
|
||||
if (draggedStack != null) {
|
||||
GuiContainerManager.drawItems.zLevel += 100;
|
||||
GuiContainerManager.drawItem(mousex - 8, mousey - 8, draggedStack, true);
|
||||
GuiContainerManager.drawItems.zLevel -= 100;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseDragged(int mousex, int mousey, int button, long heldTime) {
|
||||
if (mouseDownSlot >= 0 && draggedStack == null && NEIClientUtils.getHeldItem() == null &&
|
||||
NEIClientConfig.hasSMPCounterPart() && !GuiInfo.hasCustomSlots(NEIClientUtils.getGuiContainer())) {
|
||||
ItemPanelSlot mouseOverSlot = getSlotMouseOver(mousex, mousey);
|
||||
|
||||
if (mouseOverSlot == null || mouseOverSlot.slotIndex != mouseDownSlot || heldTime > 500) {
|
||||
draggedStack = getDraggedStackWithQuantity(mouseDownSlot);
|
||||
mouseDownSlot = -1;
|
||||
}
|
||||
|
||||
super.setVisible();
|
||||
|
||||
if (grid.getPerPage() > 0) {
|
||||
LayoutManager.addWidget(more);
|
||||
LayoutManager.addWidget(less);
|
||||
LayoutManager.addWidget(quantity);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected ItemStack getDraggedStackWithQuantity(int mouseDownSlot)
|
||||
@@ -273,288 +226,4 @@ public class ItemPanel extends Widget
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleClick(int mousex, int mousey, int button)
|
||||
{
|
||||
|
||||
if (handleClickExt(mousex, mousey, button))
|
||||
return true;
|
||||
|
||||
if (NEIClientUtils.getHeldItem() != null) {
|
||||
|
||||
if (!grid.contains(mousex, mousey)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (NEIClientConfig.canPerformAction("delete") && NEIClientConfig.canPerformAction("item"))
|
||||
if (button == 1)
|
||||
NEIClientUtils.decreaseSlotStack(-999);
|
||||
else
|
||||
NEIClientUtils.deleteHeldItem();
|
||||
else
|
||||
NEIClientUtils.dropHeldItem();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
ItemPanelSlot hoverSlot = getSlotMouseOver(mousex, mousey);
|
||||
if (hoverSlot != null) {
|
||||
|
||||
if (button == 2) {
|
||||
|
||||
if (hoverSlot.item != null) {
|
||||
draggedStack = getDraggedStackWithQuantity(hoverSlot.slotIndex);
|
||||
}
|
||||
|
||||
} else {
|
||||
mouseDownSlot = hoverSlot.slotIndex;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleClickExt(int mouseX, int mouseY, int button)
|
||||
{
|
||||
if (ItemPanels.itemPanel.draggedStack != null) {
|
||||
return ItemPanels.itemPanel.handleDraggedClick(mouseX, mouseY, button);
|
||||
}
|
||||
|
||||
if (ItemPanels.bookmarkPanel.draggedStack != null) {
|
||||
return ItemPanels.bookmarkPanel.handleDraggedClick(mouseX, mouseY, button);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected boolean handleDraggedClick(int mouseX, int mouseY, int button)
|
||||
{
|
||||
if (draggedStack == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (handleFillFluidContainerClick(mouseX, mouseY, button)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (handleSearchInputClick(mouseX, mouseY, button)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (handleGUIContainerClick(mouseX, mouseY, button)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (handleCheatItemClick(mouseX, mouseY, button)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
final GuiContainer gui = NEIClientUtils.getGuiContainer();
|
||||
if (mouseX < gui.guiLeft || mouseY < gui.guiTop || mouseX >= gui.guiLeft + gui.xSize || mouseY >= gui.guiTop + gui.ySize) {
|
||||
draggedStack = null;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected boolean handleFillFluidContainerClick(int mouseX, int mouseY, int button)
|
||||
{
|
||||
|
||||
if (button == 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ItemPanelSlot mouseOverSlot = ItemPanels.itemPanel.getSlotMouseOver(mouseX, mouseY);
|
||||
|
||||
if (mouseOverSlot == null) {
|
||||
mouseOverSlot = ItemPanels.bookmarkPanel.getSlotMouseOver(mouseX, mouseY);
|
||||
}
|
||||
|
||||
if (mouseOverSlot != null && draggedStack.getItem() instanceof IFluidContainerItem) {
|
||||
FluidStack fluidStack = StackInfo.getFluid(mouseOverSlot.item);
|
||||
|
||||
if (fluidStack != null) {
|
||||
final int stackSize = draggedStack.stackSize;
|
||||
|
||||
fluidStack = fluidStack.copy();
|
||||
|
||||
if (fluidStack.amount == 0) {
|
||||
fluidStack.amount = 1000;
|
||||
}
|
||||
|
||||
if (mouseOverSlot.item.stackSize > 1) {
|
||||
fluidStack.amount *= mouseOverSlot.item.stackSize;
|
||||
}
|
||||
|
||||
draggedStack.stackSize = 1;
|
||||
((IFluidContainerItem) draggedStack.getItem()).fill(draggedStack, fluidStack, true);
|
||||
draggedStack.stackSize = stackSize;
|
||||
|
||||
if (button == 1 && ((IFluidContainerItem) draggedStack.getItem()).getFluid(draggedStack) != null) {
|
||||
ItemPanels.bookmarkPanel.addOrRemoveItem(draggedStack.copy());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected boolean handleGUIContainerClick(int mouseX, int mouseY, int button)
|
||||
{
|
||||
final GuiContainer gui = NEIClientUtils.getGuiContainer();
|
||||
boolean handled = false;
|
||||
|
||||
try {
|
||||
GuiInfo.readLock.lock();
|
||||
for (INEIGuiHandler handler : GuiInfo.guiHandlers) {
|
||||
if (handler.handleDragNDrop(gui, mouseX, mouseY, draggedStack, button)) {
|
||||
handled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
GuiInfo.readLock.unlock();
|
||||
}
|
||||
|
||||
if (draggedStack.stackSize == 0) {
|
||||
draggedStack = null;
|
||||
}
|
||||
|
||||
return handled;
|
||||
}
|
||||
|
||||
protected boolean handleCheatItemClick(int mouseX, int mouseY, int button)
|
||||
{
|
||||
final GuiContainer gui = NEIClientUtils.getGuiContainer();
|
||||
final Slot overSlot = gui.getSlotAtPosition(mouseX, mouseY);
|
||||
|
||||
if (overSlot != null && overSlot.isItemValid(draggedStack)) {
|
||||
|
||||
if (NEIClientConfig.canCheatItem(draggedStack)) {
|
||||
int contents = overSlot.getHasStack() ? overSlot.getStack().stackSize : 0;
|
||||
final int add = button == 0 ? draggedStack.stackSize : 1;
|
||||
|
||||
if (overSlot.getHasStack() && !NEIServerUtils.areStacksSameType(draggedStack, overSlot.getStack())) {
|
||||
contents = 0;
|
||||
}
|
||||
|
||||
final int total = Math.min(contents + add, Math.min(overSlot.getSlotStackLimit(), draggedStack.getMaxStackSize()));
|
||||
|
||||
if (total > contents) {
|
||||
NEIClientUtils.setSlotContents(overSlot.slotNumber, NEIServerUtils.copyStack(draggedStack, total), true);
|
||||
NEICPH.sendGiveItem(NEIServerUtils.copyStack(draggedStack, total), false, false);
|
||||
draggedStack.stackSize -= total - contents;
|
||||
}
|
||||
|
||||
if (draggedStack.stackSize == 0) {
|
||||
draggedStack = null;
|
||||
}
|
||||
|
||||
} else {
|
||||
draggedStack = null;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected boolean handleSearchInputClick(int mouseX, int mouseY, int button)
|
||||
{
|
||||
|
||||
if (searchField.contains(mouseX, mouseY)) {
|
||||
final FluidStack fluidStack = StackInfo.getFluid(draggedStack);
|
||||
|
||||
if (fluidStack != null) {
|
||||
searchField.setText(SPECIAL_REGEX_CHARS.matcher(fluidStack.getLocalizedName()).replaceAll("\\\\$0"));
|
||||
} else {
|
||||
searchField.setText(SPECIAL_REGEX_CHARS.matcher(draggedStack.getDisplayName()).replaceAll("\\\\$0"));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseUp(int mousex, int mousey, int button) {
|
||||
ItemPanelSlot hoverSlot = getSlotMouseOver(mousex, mousey);
|
||||
|
||||
if (hoverSlot != null && hoverSlot.slotIndex == mouseDownSlot && draggedStack == null) {
|
||||
ItemStack item = hoverSlot.item;
|
||||
|
||||
if (NEIController.manager.window instanceof GuiRecipe || !NEIClientConfig.canCheatItem(item)) {
|
||||
|
||||
if (button == 0)
|
||||
GuiCraftingRecipe.openRecipeGui("item", item);
|
||||
else if (button == 1)
|
||||
GuiUsageRecipe.openRecipeGui("item", item);
|
||||
|
||||
mouseDownSlot = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
NEIClientUtils.cheatItem(getDraggedStackWithQuantity(hoverSlot.slotIndex), button, -1);
|
||||
}
|
||||
|
||||
mouseDownSlot = -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMouseWheel(int i, int mousex, int mousey) {
|
||||
if (!contains(mousex, mousey))
|
||||
return false;
|
||||
|
||||
grid.shiftPage(-i);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyPress(int keyID, char keyChar) {
|
||||
|
||||
if (keyID == NEIClientConfig.getKeyBinding("gui.next")) {
|
||||
grid.shiftPage(1);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (keyID == NEIClientConfig.getKeyBinding("gui.prev")) {
|
||||
grid.shiftPage(-1);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackMouseOver(int mousex, int mousey) {
|
||||
ItemPanelSlot slot = getSlotMouseOver(mousex, mousey);
|
||||
return slot == null ? null : slot.item;
|
||||
}
|
||||
|
||||
public ItemPanelSlot getSlotMouseOver(int mousex, int mousey)
|
||||
{
|
||||
return grid.getSlotMouseOver(mousex, mousey);
|
||||
}
|
||||
|
||||
public int getPage() {
|
||||
return grid.page + 1;
|
||||
}
|
||||
|
||||
public int getNumPages() {
|
||||
return grid.numPages;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(int px, int py)
|
||||
{
|
||||
return grid.contains(px, py);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,10 +5,19 @@ import codechicken.nei.api.GuiInfo;
|
||||
import codechicken.nei.guihook.GuiContainerManager;
|
||||
import codechicken.nei.recipe.StackInfo;
|
||||
import codechicken.nei.ItemPanel.ItemPanelSlot;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.ScaledResolution;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.shader.Framebuffer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static codechicken.lib.gui.GuiDraw.drawRect;
|
||||
|
||||
@@ -22,20 +31,22 @@ public class ItemsGrid
|
||||
protected int marginLeft;
|
||||
protected int marginTop;
|
||||
|
||||
protected int paddingLeft;
|
||||
|
||||
protected ArrayList<ItemStack> realItems = new ArrayList<>();
|
||||
|
||||
protected int page;
|
||||
protected int perPage;
|
||||
|
||||
protected int firstIndex;
|
||||
protected int numPages;
|
||||
|
||||
protected int rows;
|
||||
protected int columns;
|
||||
|
||||
protected boolean[] validSlotMap;
|
||||
protected boolean[] invalidSlotMap;
|
||||
|
||||
@Nullable
|
||||
private Framebuffer framebuffer = null;
|
||||
protected boolean refreshBuffer = true;
|
||||
|
||||
public ArrayList<ItemStack> getItems()
|
||||
{
|
||||
return realItems;
|
||||
@@ -75,7 +86,11 @@ public class ItemsGrid
|
||||
|
||||
public int getNumPages()
|
||||
{
|
||||
return numPages;
|
||||
if (perPage > 0) {
|
||||
return (int) Math.ceil((float) realItems.size() / (float) perPage);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int getRows()
|
||||
@@ -90,32 +105,27 @@ public class ItemsGrid
|
||||
|
||||
public void setGridSize(int mleft, int mtop, int w, int h)
|
||||
{
|
||||
marginLeft = mleft;
|
||||
marginTop = mtop;
|
||||
|
||||
//I don't like this big condition
|
||||
if (marginLeft != mleft || marginTop != mtop || width != w || height != h) {
|
||||
width = Math.max(0, w);
|
||||
height = Math.max(0, h);
|
||||
|
||||
marginLeft = mleft;
|
||||
marginTop = mtop;
|
||||
|
||||
width = Math.max(0, w);
|
||||
height = Math.max(0, h);
|
||||
|
||||
columns = width / SLOT_SIZE;
|
||||
rows = height / SLOT_SIZE;
|
||||
}
|
||||
columns = width / SLOT_SIZE;
|
||||
rows = height / SLOT_SIZE;
|
||||
|
||||
paddingLeft = (width % SLOT_SIZE) / 2;
|
||||
}
|
||||
|
||||
public void shiftPage(int shift)
|
||||
{
|
||||
if (perPage == 0) {
|
||||
numPages = 0;
|
||||
page = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
numPages = (int) Math.ceil((float) realItems.size() / (float) perPage);
|
||||
|
||||
final int numPages = getNumPages();
|
||||
final int oldPage = page;
|
||||
page += shift;
|
||||
|
||||
if (page >= numPages) {
|
||||
@@ -127,6 +137,15 @@ public class ItemsGrid
|
||||
}
|
||||
|
||||
page = Math.max(0, Math.min(page, numPages - 1));
|
||||
|
||||
if (page != oldPage) {
|
||||
onGridChanged();
|
||||
}
|
||||
}
|
||||
|
||||
protected void onGridChanged()
|
||||
{
|
||||
refreshBuffer = true;
|
||||
}
|
||||
|
||||
public void refresh(GuiContainer gui)
|
||||
@@ -135,14 +154,22 @@ public class ItemsGrid
|
||||
shiftPage(0);
|
||||
}
|
||||
|
||||
private void updateGuiOverlapSlots(GuiContainer gui)
|
||||
protected void updateGuiOverlapSlots(GuiContainer gui)
|
||||
{
|
||||
final boolean[] oldSlotMap = invalidSlotMap;
|
||||
final int oldRows = rows;
|
||||
final int oldColumns = columns;
|
||||
|
||||
invalidSlotMap = new boolean[rows * columns];
|
||||
perPage = columns * rows;
|
||||
|
||||
checkGuiOverlap(gui, 0, columns - 2, 1);
|
||||
checkGuiOverlap(gui, columns - 1, 1, -1);
|
||||
|
||||
if (oldRows != rows || oldColumns != columns || !Arrays.equals(oldSlotMap, invalidSlotMap)) {
|
||||
onGridChanged();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void checkGuiOverlap(GuiContainer gui, int start, int end, int dir)
|
||||
@@ -154,7 +181,7 @@ public class ItemsGrid
|
||||
|
||||
for (int r = 0; r < rows; r++) {
|
||||
final int idx = columns * r + c;
|
||||
if (!slotValid(gui, r, c) && idx >= 0 && idx < invalidSlotMap.length && !invalidSlotMap[idx]) {
|
||||
if (GuiInfo.hideItemPanelSlot(gui, getSlotRect(r, c)) && idx >= 0 && idx < invalidSlotMap.length && !invalidSlotMap[idx]) {
|
||||
invalidSlotMap[idx] = true;
|
||||
validColumn = false;
|
||||
perPage--;
|
||||
@@ -166,22 +193,6 @@ public class ItemsGrid
|
||||
|
||||
}
|
||||
|
||||
private boolean slotValid(GuiContainer gui, int row, int column)
|
||||
{
|
||||
Rectangle4i rect = getSlotRect(row, column);
|
||||
|
||||
try {
|
||||
GuiInfo.readLock.lock();
|
||||
if (GuiInfo.guiHandlers.stream().anyMatch(handler -> handler.hideItemPanelSlot(gui, rect.x, rect.y, rect.w, rect.h))) {
|
||||
return false;
|
||||
}
|
||||
} finally {
|
||||
GuiInfo.readLock.unlock();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public Rectangle4i getSlotRect(int i)
|
||||
{
|
||||
return getSlotRect(i / columns, i % columns);
|
||||
@@ -189,12 +200,63 @@ public class ItemsGrid
|
||||
|
||||
public Rectangle4i getSlotRect(int row, int column)
|
||||
{
|
||||
return new Rectangle4i(marginLeft + (width % SLOT_SIZE) / 2 + column * SLOT_SIZE, marginTop + row * SLOT_SIZE, SLOT_SIZE, SLOT_SIZE);
|
||||
return new Rectangle4i(marginLeft + paddingLeft + column * SLOT_SIZE, marginTop + row * SLOT_SIZE, SLOT_SIZE, SLOT_SIZE);
|
||||
}
|
||||
|
||||
public boolean isInvalidSlot(int idx)
|
||||
public boolean isInvalidSlot(int index)
|
||||
{
|
||||
return invalidSlotMap[idx];
|
||||
return invalidSlotMap[index];
|
||||
}
|
||||
|
||||
protected List<Integer> getMask()
|
||||
{
|
||||
List<Integer> mask = new ArrayList<>();
|
||||
|
||||
int idx = page * perPage;
|
||||
for (int i = 0; i < rows * columns && idx < size(); i++) {
|
||||
mask.add(isInvalidSlot(i)? null: idx++);
|
||||
}
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
||||
private void drawSlotOutlines(int mousex, int mousey)
|
||||
{
|
||||
ItemPanelSlot focused = getSlotMouseOver(mousex, mousey);
|
||||
final List<Integer> mask = getMask();
|
||||
|
||||
for (int i = 0; i < mask.size(); i++) {
|
||||
if (mask.get(i) != null) {
|
||||
drawSlotOutline(focused, mask.get(i), getSlotRect(i));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void drawSlotOutline(@Nullable ItemPanelSlot focused, int slotIdx, Rectangle4i rect)
|
||||
{
|
||||
if (focused != null && focused.slotIndex == slotIdx) {
|
||||
drawRect(rect.x, rect.y, rect.w, rect.h, 0xee555555);//highlight
|
||||
}
|
||||
}
|
||||
|
||||
private void blitExistingBuffer()
|
||||
{
|
||||
Minecraft minecraft = Minecraft.getMinecraft();
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
OpenGlHelper.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
framebuffer.bindFramebufferTexture();
|
||||
GL11.glEnable(GL11.GL_TEXTURE_2D);
|
||||
ScaledResolution res = new ScaledResolution(minecraft, minecraft.displayWidth, minecraft.displayHeight);
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
tessellator.startDrawingQuads();
|
||||
tessellator.addVertexWithUV(0, res.getScaledHeight_double(), 0.0, 0, 0);
|
||||
tessellator.addVertexWithUV(res.getScaledWidth_double(), res.getScaledHeight_double(), 0.0, 1, 0);
|
||||
tessellator.addVertexWithUV(res.getScaledWidth_double(), 0, 0.0, 1, 1);
|
||||
tessellator.addVertexWithUV(0, 0, 0, 0, 1);
|
||||
tessellator.draw();
|
||||
OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ZERO);
|
||||
}
|
||||
|
||||
public void draw(int mousex, int mousey)
|
||||
@@ -203,30 +265,53 @@ public class ItemsGrid
|
||||
return;
|
||||
}
|
||||
|
||||
ItemPanelSlot slot = getSlotMouseOver(mousex, mousey);
|
||||
boolean shouldCache = NEIClientConfig.shouldCacheItemRendering() && !PresetsWidget.inEditMode();
|
||||
if (shouldCache) {
|
||||
Minecraft minecraft = Minecraft.getMinecraft();
|
||||
if (framebuffer == null) {
|
||||
framebuffer = new Framebuffer(minecraft.displayWidth, minecraft.displayHeight, true);
|
||||
framebuffer.framebufferColor[0] = 0.0F;
|
||||
framebuffer.framebufferColor[1] = 0.0F;
|
||||
framebuffer.framebufferColor[2] = 0.0F;
|
||||
}
|
||||
drawSlotOutlines(mousex, mousey);
|
||||
if (refreshBuffer) {
|
||||
framebuffer.createBindFramebuffer(minecraft.displayWidth, minecraft.displayHeight);
|
||||
framebuffer.framebufferClear();
|
||||
framebuffer.bindFramebuffer(false);
|
||||
/* Set up some rendering state needed for items to work correctly */
|
||||
GL11.glDisable(GL11.GL_BLEND);
|
||||
GL11.glDepthMask(true);
|
||||
OpenGlHelper.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
} else {
|
||||
blitExistingBuffer();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
drawSlotOutlines(mousex, mousey);
|
||||
}
|
||||
|
||||
GuiContainerManager.enableMatrixStackLogging();
|
||||
|
||||
int idx = page * perPage;
|
||||
for (int i = 0; i < rows * columns && idx < size(); i++) {
|
||||
|
||||
if (!invalidSlotMap[i]) {
|
||||
drawItem(getSlotRect(i), idx, slot);
|
||||
idx ++;
|
||||
final List<Integer> mask = getMask();
|
||||
for (int i = 0; i < mask.size(); i++) {
|
||||
if (mask.get(i) != null) {
|
||||
drawItem(getSlotRect(i), mask.get(i));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
GuiContainerManager.disableMatrixStackLogging();
|
||||
|
||||
if (refreshBuffer && shouldCache) {
|
||||
refreshBuffer = false;
|
||||
Minecraft.getMinecraft().getFramebuffer().bindFramebuffer(false);
|
||||
blitExistingBuffer();
|
||||
}
|
||||
}
|
||||
|
||||
protected void drawItem(Rectangle4i rect, int idx, ItemPanelSlot focus)
|
||||
protected void drawItem(Rectangle4i rect, int idx)
|
||||
{
|
||||
|
||||
if (focus != null && focus.slotIndex == idx) {
|
||||
drawRect(rect.x, rect.y, rect.w, rect.h, 0xee555555);//highlight
|
||||
}
|
||||
|
||||
GuiContainerManager.drawItem(rect.x + 1, rect.y + 1, getItem(idx));
|
||||
}
|
||||
|
||||
@@ -237,35 +322,37 @@ public class ItemsGrid
|
||||
}
|
||||
|
||||
final int overRow = (int) ((mousey - marginTop) / SLOT_SIZE);
|
||||
final int overColumn = (int) ((mousex - marginLeft - (width % SLOT_SIZE) / 2) / SLOT_SIZE);
|
||||
final int overColumn = (int) ((mousex - marginLeft - paddingLeft) / SLOT_SIZE);
|
||||
final int slt = columns * overRow + overColumn;
|
||||
int idx = page * perPage + slt;
|
||||
|
||||
if (overRow >= rows || overColumn >= columns) {
|
||||
return null;
|
||||
}
|
||||
|
||||
for (int i = 0; i < slt; i++) {
|
||||
if (invalidSlotMap[i]) {
|
||||
idx--;
|
||||
}
|
||||
final List<Integer> mask = getMask();
|
||||
|
||||
if (mask.size() > slt && mask.get(slt) != null) {
|
||||
final int idx = mask.get(slt);
|
||||
final ItemStack stack = getItem(idx).copy();
|
||||
|
||||
return new ItemPanelSlot(idx, stack);
|
||||
}
|
||||
|
||||
return idx < size()? new ItemPanelSlot(idx, realItems.get(idx)): null;
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean contains(int px, int py)
|
||||
{
|
||||
|
||||
if (!(new Rectangle4i(marginLeft, marginTop, width, height)).contains(px, py)) {
|
||||
if (!(new Rectangle4i(marginLeft + paddingLeft, marginTop, columns * SLOT_SIZE, height)).contains(px, py)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
final int r = (int) ((py - marginTop) / SLOT_SIZE);
|
||||
final int c = (int) ((px - marginLeft - (width % SLOT_SIZE) / 2) / SLOT_SIZE);
|
||||
final int c = (int) ((px - marginLeft - paddingLeft) / SLOT_SIZE);
|
||||
final int slt = columns * r + c;
|
||||
|
||||
return r >= rows || c >= columns || !invalidSlotMap[slt];
|
||||
return r >= rows || c >= columns || !isInvalidSlot(slt);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -37,7 +37,6 @@ import static codechicken.lib.gui.GuiDraw.drawRect;
|
||||
import static codechicken.lib.gui.GuiDraw.drawTexturedModalRect;
|
||||
import static codechicken.nei.NEIClientConfig.canPerformAction;
|
||||
import static codechicken.nei.NEIClientConfig.disabledActions;
|
||||
import static codechicken.nei.NEIClientConfig.getItemQuantity;
|
||||
import static codechicken.nei.NEIClientConfig.getKeyBinding;
|
||||
import static codechicken.nei.NEIClientConfig.getOptionList;
|
||||
import static codechicken.nei.NEIClientConfig.getSearchExpression;
|
||||
@@ -49,7 +48,6 @@ import static codechicken.nei.NEIClientConfig.isHidden;
|
||||
import static codechicken.nei.NEIClientConfig.showIDs;
|
||||
import static codechicken.nei.NEIClientConfig.toggleBooleanSetting;
|
||||
import static codechicken.nei.NEIClientConfig.world;
|
||||
import static codechicken.nei.NEIClientUtils.controlKey;
|
||||
import static codechicken.nei.NEIClientUtils.cycleGamemode;
|
||||
import static codechicken.nei.NEIClientUtils.decreaseSlotStack;
|
||||
import static codechicken.nei.NEIClientUtils.deleteEverything;
|
||||
@@ -77,11 +75,11 @@ public class LayoutManager implements IContainerInputHandler, IContainerTooltipH
|
||||
/**
|
||||
* Sorted bottom first
|
||||
*/
|
||||
private static TreeSet<Widget> drawWidgets;
|
||||
private static TreeSet<Widget> drawWidgets = new TreeSet<>(new WidgetZOrder(false));
|
||||
/**
|
||||
* Sorted top first
|
||||
*/
|
||||
private static TreeSet<Widget> controlWidgets;
|
||||
private static TreeSet<Widget> controlWidgets = new TreeSet<>(new WidgetZOrder(true));
|
||||
|
||||
public static ItemPanel itemPanel;
|
||||
public static BookmarkPanel bookmarkPanel;
|
||||
@@ -92,8 +90,11 @@ public class LayoutManager implements IContainerInputHandler, IContainerTooltipH
|
||||
public static ButtonCycled options;
|
||||
public static ButtonCycled bookmarksButton;
|
||||
|
||||
@Deprecated
|
||||
public static Button more;
|
||||
@Deprecated
|
||||
public static Button less;
|
||||
@Deprecated
|
||||
public static ItemQuantityField quantity;
|
||||
|
||||
public static Button delete;
|
||||
@@ -142,9 +143,12 @@ public class LayoutManager implements IContainerInputHandler, IContainerTooltipH
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static int getSideWidth(GuiContainer gui) {
|
||||
return gui.width - 3;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public static int getLeftSize(GuiContainer gui) {
|
||||
return getSideWidth(gui);
|
||||
}
|
||||
@@ -307,6 +311,7 @@ public class LayoutManager implements IContainerInputHandler, IContainerTooltipH
|
||||
|
||||
public static void layout(GuiContainer gui) {
|
||||
VisiblityData visiblity = new VisiblityData();
|
||||
|
||||
if (isHidden())
|
||||
visiblity.showNEI = false;
|
||||
|
||||
@@ -316,8 +321,15 @@ public class LayoutManager implements IContainerInputHandler, IContainerTooltipH
|
||||
if (gui.height - gui.ySize <= 40)
|
||||
visiblity.showSearchSection = false;
|
||||
|
||||
if (visiblity.showBookmarkPanel || gui.guiTop <= 20)
|
||||
visiblity.showSubsetDropdown = false;
|
||||
|
||||
if (!visiblity.showBookmarkPanel || gui.guiTop <= 20)
|
||||
visiblity.showPresetsDropdown = false;
|
||||
|
||||
if (gui.guiLeft - 4 < 76)
|
||||
visiblity.showWidgets = false;
|
||||
|
||||
try {
|
||||
GuiInfo.readLock.lock();
|
||||
GuiInfo.guiHandlers.forEach(handler -> handler.modifyVisiblity(gui, visiblity));
|
||||
@@ -413,43 +425,10 @@ public class LayoutManager implements IContainerInputHandler, IContainerTooltipH
|
||||
return translate("bookmark.toggle");
|
||||
}
|
||||
};
|
||||
more = new Button("+")
|
||||
{
|
||||
@Override
|
||||
public boolean onButtonPress(boolean rightclick) {
|
||||
if (rightclick)
|
||||
return false;
|
||||
|
||||
int modifier = controlKey() ? 64 : shiftKey() ? 10 : 1;
|
||||
|
||||
int quantity = getItemQuantity() + modifier;
|
||||
if (quantity < 0)
|
||||
quantity = 0;
|
||||
|
||||
LayoutManager.quantity.setText(Integer.toString(quantity));
|
||||
return true;
|
||||
}
|
||||
};
|
||||
less = new Button("-")
|
||||
{
|
||||
@Override
|
||||
public boolean onButtonPress(boolean rightclick) {
|
||||
if (rightclick)
|
||||
return false;
|
||||
|
||||
int modifier = controlKey() ? -64 : shiftKey() ? -10 : -1;
|
||||
|
||||
int quantity = getItemQuantity() + modifier;
|
||||
if (quantity < 0)
|
||||
quantity = 0;
|
||||
|
||||
LayoutManager.quantity.setText(Integer.toString(quantity));
|
||||
return true;
|
||||
}
|
||||
};
|
||||
quantity = new ItemQuantityField("quantity");
|
||||
|
||||
|
||||
more = ItemPanels.itemPanel.more;
|
||||
less = ItemPanels.itemPanel.less;
|
||||
quantity = ItemPanels.itemPanel.quantity;
|
||||
delete = new Button()
|
||||
{
|
||||
@Override
|
||||
@@ -681,16 +660,14 @@ public class LayoutManager implements IContainerInputHandler, IContainerTooltipH
|
||||
}
|
||||
|
||||
itemPanel.setVisible();
|
||||
|
||||
addWidget(more);
|
||||
addWidget(less);
|
||||
addWidget(quantity);
|
||||
}
|
||||
|
||||
if (visiblity.showBookmarkPanel) {
|
||||
addWidget(bookmarkPanel);
|
||||
bookmarkPanel.setVisible();
|
||||
}
|
||||
|
||||
if (visiblity.showPresetsDropdown) {
|
||||
addWidget(presetsPanel);
|
||||
}
|
||||
|
||||
@@ -717,7 +694,7 @@ public class LayoutManager implements IContainerInputHandler, IContainerTooltipH
|
||||
addWidget(delete);
|
||||
}
|
||||
|
||||
if (!visiblity.showBookmarkPanel) {
|
||||
if (visiblity.showSubsetDropdown) {
|
||||
// Bookmarks or Subset/dropdown
|
||||
addWidget(dropDown);
|
||||
}
|
||||
@@ -797,7 +774,7 @@ public class LayoutManager implements IContainerInputHandler, IContainerTooltipH
|
||||
@Override
|
||||
public void renderSlotOverlay(GuiContainer window, Slot slot) {
|
||||
ItemStack item = slot.getStack();
|
||||
if (world.nbt.getBoolean("searchinventories") && (item == null ? !getSearchExpression().equals("") : !ItemList.getItemListFilter().matches(item))) {
|
||||
if (world.nbt.getBoolean("searchinventories") && (item == null ? !getSearchExpression().equals("") : !((SearchField) searchField).getFilter().matches(item))) {
|
||||
GL11.glDisable(GL11.GL_LIGHTING);
|
||||
GL11.glTranslatef(0, 0, 150);
|
||||
drawRect(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, 0x80000000);
|
||||
|
||||
@@ -10,15 +10,13 @@ import static codechicken.nei.LayoutManager.bookmarkPanel;
|
||||
import static codechicken.nei.LayoutManager.bookmarksButton;
|
||||
import static codechicken.nei.LayoutManager.delete;
|
||||
import static codechicken.nei.LayoutManager.dropDown;
|
||||
import static codechicken.nei.LayoutManager.presetsPanel;
|
||||
import static codechicken.nei.LayoutManager.gamemode;
|
||||
import static codechicken.nei.LayoutManager.heal;
|
||||
import static codechicken.nei.LayoutManager.itemPanel;
|
||||
import static codechicken.nei.LayoutManager.itemPresenceOverlays;
|
||||
import static codechicken.nei.LayoutManager.less;
|
||||
import static codechicken.nei.LayoutManager.magnet;
|
||||
import static codechicken.nei.LayoutManager.more;
|
||||
import static codechicken.nei.LayoutManager.options;
|
||||
import static codechicken.nei.LayoutManager.quantity;
|
||||
import static codechicken.nei.LayoutManager.rain;
|
||||
import static codechicken.nei.LayoutManager.searchField;
|
||||
import static codechicken.nei.LayoutManager.timeButtons;
|
||||
@@ -118,16 +116,6 @@ public class LayoutStyleMinecraft extends LayoutStyle
|
||||
itemPanel.resize(gui);
|
||||
bookmarkPanel.resize(gui);
|
||||
|
||||
more.w = more.h = less.w = less.h = 16;
|
||||
less.x = itemPanel.pagePrev.x;
|
||||
more.x = gui.width - less.w - 2;
|
||||
more.y = less.y = gui.height - more.h - 2;
|
||||
|
||||
quantity.x = less.x + less.w + 2;
|
||||
quantity.y = less.y;
|
||||
quantity.w = more.x - quantity.x - 2;
|
||||
quantity.h = less.h;
|
||||
|
||||
options.x = isEnabled() ? 0 : 6;
|
||||
options.y = isEnabled() ? gui.height - 22 : gui.height - 28;
|
||||
options.w = 22;
|
||||
@@ -138,15 +126,20 @@ public class LayoutStyleMinecraft extends LayoutStyle
|
||||
bookmarksButton.w = 22;
|
||||
bookmarksButton.h = 22;
|
||||
|
||||
searchField.y = gui.height - searchField.h - 2;
|
||||
dropDown.h = 18;
|
||||
dropDown.w = 150;
|
||||
dropDown.y = 0;
|
||||
dropDown.x = (gui.width - gui.xSize) / 2 + gui.xSize - dropDown.w;
|
||||
|
||||
dropDown.x = Math.min(numButtons, buttonCount) * 20 + 3;
|
||||
dropDown.h = 20;
|
||||
dropDown.w = itemPanel.x - dropDown.x - 3;
|
||||
presetsPanel.h = 16;
|
||||
presetsPanel.w = 150;
|
||||
presetsPanel.y = 2;
|
||||
presetsPanel.x = (gui.width - gui.xSize) / 2 + gui.xSize - presetsPanel.w;
|
||||
|
||||
searchField.h = 20;
|
||||
searchField.w = 150;
|
||||
searchField.x = (gui.width - searchField.w) / 2;
|
||||
searchField.y = gui.height - searchField.h - 2;
|
||||
|
||||
if (!visiblity.showItemSection) {
|
||||
searchField.setFocus(false);
|
||||
@@ -155,8 +148,8 @@ public class LayoutStyleMinecraft extends LayoutStyle
|
||||
}
|
||||
|
||||
public void layoutButton(Button button) {
|
||||
button.x = 2 + (buttonCount % numButtons) * 20;
|
||||
button.y = (buttonCount / numButtons) * 18;
|
||||
button.x = 2 + (buttonCount % numButtons) * 19;
|
||||
button.y = 2 + (buttonCount / numButtons) * 18;
|
||||
|
||||
button.h = 17;
|
||||
button.w = button.contentWidth() + 6;
|
||||
|
||||
@@ -16,6 +16,7 @@ import codechicken.nei.config.ConfigSet;
|
||||
import codechicken.nei.config.GuiHighlightTips;
|
||||
import codechicken.nei.config.GuiNEIOptionList;
|
||||
import codechicken.nei.config.GuiOptionList;
|
||||
import codechicken.nei.config.GuiPanelSettings;
|
||||
import codechicken.nei.config.OptionCycled;
|
||||
import codechicken.nei.config.OptionGamemodes;
|
||||
import codechicken.nei.config.OptionList;
|
||||
@@ -33,6 +34,7 @@ import codechicken.obfuscator.ObfuscationRun;
|
||||
import com.google.common.base.Objects;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.World;
|
||||
@@ -154,6 +156,20 @@ public class NEIClientConfig {
|
||||
tag.getTag("world.highlight_tips.y").getIntValue(100);
|
||||
API.addOption(new OptionOpenGui("world.highlight_tips", GuiHighlightTips.class));
|
||||
|
||||
|
||||
tag.getTag("world.panels.bookmarks.left").getIntValue(0);
|
||||
tag.getTag("world.panels.bookmarks.right").getIntValue(0);
|
||||
tag.getTag("world.panels.bookmarks.top").getIntValue(0);
|
||||
tag.getTag("world.panels.bookmarks.bottom").getIntValue(0);
|
||||
|
||||
tag.getTag("world.panels.items.left").getIntValue(0);
|
||||
tag.getTag("world.panels.items.right").getIntValue(0);
|
||||
tag.getTag("world.panels.items.top").getIntValue(0);
|
||||
tag.getTag("world.panels.items.bottom").getIntValue(0);
|
||||
|
||||
API.addOption(new OptionOpenGui("world.panels", GuiPanelSettings.class));
|
||||
|
||||
|
||||
tag.getTag("inventory.profileRecipes").getBooleanValue(false);
|
||||
API.addOption(new OptionToggleButton("inventory.profileRecipes", true));
|
||||
|
||||
@@ -167,6 +183,9 @@ public class NEIClientConfig {
|
||||
return isMouseScrollTransferEnabled();
|
||||
}
|
||||
});
|
||||
|
||||
tag.getTag("inventory.cacheItemRendering").getBooleanValue(false);
|
||||
API.addOption(new OptionToggleButton("inventory.cacheItemRendering", true));
|
||||
|
||||
tag.getTag("itemLoadingTimeout").getIntValue(500);
|
||||
|
||||
@@ -207,6 +226,8 @@ public class NEIClientConfig {
|
||||
API.addOption(new OptionToggleButton("inventory.saveCurrentRecipeInBookmarksEnabled", true));
|
||||
tag.getTag("inventory.useNBTInBookmarks").setComment("Use NBT in Bookmarks").getBooleanValue(true);
|
||||
API.addOption(new OptionToggleButton("inventory.useNBTInBookmarks", true));
|
||||
tag.getTag("inventory.showRecipeMarker").setComment("Show Recipe Marker").getBooleanValue(false);
|
||||
API.addOption(new OptionToggleButton("inventory.showRecipeMarker", true));
|
||||
|
||||
tag.getTag("inventory.jei_style_tabs").setComment("Enable/disable JEI Style Tabs").getBooleanValue(true);
|
||||
API.addOption(new OptionToggleButtonBoubs("inventory.jei_style_tabs", true));
|
||||
@@ -219,6 +240,9 @@ public class NEIClientConfig {
|
||||
tag.getTag("inventory.creative_tab_style").setComment("Creative or JEI style tabs").getBooleanValue(false);
|
||||
API.addOption(new OptionToggleButton("inventory.creative_tab_style", true));
|
||||
|
||||
tag.getTag("inventory.ignore_potion_overlap").setComment("Ignore overlap with potion effect HUD").getBooleanValue(false);
|
||||
API.addOption(new OptionToggleButton("inventory.ignore_potion_overlap", true));
|
||||
|
||||
tag.getTag("tools.handler_load_from_config").setComment("ADVANCED: Load handlers from config").getBooleanValue(false);
|
||||
API.addOption(new OptionToggleButton("tools.handler_load_from_config", true) {
|
||||
@Override
|
||||
@@ -282,6 +306,7 @@ public class NEIClientConfig {
|
||||
API.addKeyBind("gui.hide", Keyboard.KEY_O);
|
||||
API.addKeyBind("gui.search", Keyboard.KEY_F);
|
||||
API.addKeyBind("gui.bookmark", Keyboard.KEY_A);
|
||||
API.addKeyBind("gui.overlay", Keyboard.KEY_S);
|
||||
API.addKeyBind("gui.hide_bookmarks", Keyboard.KEY_B);
|
||||
API.addKeyBind("world.chunkoverlay", Keyboard.KEY_F9);
|
||||
API.addKeyBind("world.moboverlay", Keyboard.KEY_F7);
|
||||
@@ -325,7 +350,7 @@ public class NEIClientConfig {
|
||||
setWorldDefaults();
|
||||
creativeInv = new ItemStack[54];
|
||||
LayoutManager.searchField.setText(getSearchExpression());
|
||||
LayoutManager.quantity.setText(Integer.toString(getItemQuantity()));
|
||||
ItemPanels.itemPanel.quantity.setText(Integer.toString(getItemQuantity()));
|
||||
SubsetWidget.loadHidden();
|
||||
|
||||
if (newWorld && Minecraft.getMinecraft().isSingleplayer())
|
||||
@@ -434,6 +459,9 @@ public class NEIClientConfig {
|
||||
public static boolean useNBTInBookmarks() {
|
||||
return getBooleanSetting("inventory.useNBTInBookmarks");
|
||||
}
|
||||
public static boolean showRecipeMarker() {
|
||||
return getBooleanSetting("inventory.showRecipeMarker");
|
||||
}
|
||||
public static boolean areJEIStyleTabsVisible() {
|
||||
return getBooleanSetting("inventory.jei_style_tabs");
|
||||
}
|
||||
@@ -446,6 +474,9 @@ public class NEIClientConfig {
|
||||
public static boolean useCreativeTabStyle() {
|
||||
return getBooleanSetting("inventory.creative_tab_style");
|
||||
}
|
||||
public static boolean ignorePotionOverlap() {
|
||||
return getBooleanSetting("inventory.ignore_potion_overlap");
|
||||
}
|
||||
public static boolean isEnabled() {
|
||||
return enabledOverride && getBooleanSetting("inventory.widgetsenabled");
|
||||
}
|
||||
@@ -529,6 +560,10 @@ public class NEIClientConfig {
|
||||
return !getBooleanSetting("inventory.invertMouseScrollTransfer");
|
||||
}
|
||||
|
||||
public static boolean shouldCacheItemRendering() {
|
||||
return getBooleanSetting("inventory.cacheItemRendering") && OpenGlHelper.framebufferSupported;
|
||||
}
|
||||
|
||||
public static boolean getMagnetMode() {
|
||||
return enabledActions.contains("magnet");
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import codechicken.nei.api.ItemInfo;
|
||||
import codechicken.nei.guihook.GuiContainerManager;
|
||||
import codechicken.nei.guihook.IContainerInputHandler;
|
||||
import codechicken.nei.guihook.IContainerSlotClickHandler;
|
||||
import codechicken.nei.recipe.GuiRecipe;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.client.gui.inventory.GuiContainerCreative;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
@@ -228,6 +229,11 @@ public class NEIController implements IContainerSlotClickHandler, IContainerInpu
|
||||
if (!NEIClientConfig.isEnabled() || GuiInfo.hasCustomSlots(gui) || !NEIClientConfig.isMouseScrollTransferEnabled())
|
||||
return false;
|
||||
|
||||
// slot in GuiRecipe does not contain actual stack
|
||||
// and scroll should be handled by GuiRecipe, not here
|
||||
if (gui instanceof GuiRecipe)
|
||||
return false;
|
||||
|
||||
Point mousePos = getMousePosition();
|
||||
Slot mouseover = manager.window.getSlotAtPosition(mousePos.x, mousePos.y);
|
||||
if (mouseover != null && mouseover.getHasStack()) {
|
||||
|
||||
@@ -115,7 +115,6 @@ public class NEIModContainer extends DummyModContainer
|
||||
public void postInit(FMLPostInitializationEvent event) {
|
||||
if (CommonUtils.isClient()) {
|
||||
GuiRecipeTab.loadHandlerInfo();
|
||||
RecipeCatalysts.loadCatalystInfo();
|
||||
ClientHandler.postInit();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package codechicken.nei;
|
||||
|
||||
import codechicken.lib.vec.Rectangle4i;
|
||||
import codechicken.nei.api.INEIGuiAdapter;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.EntityPlayerSP;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.client.renderer.InventoryEffectRenderer;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* Inspired by InventoryEffectRendererGuiHandler.java in JEI
|
||||
*/
|
||||
public class NEIPotionGuiHandler extends INEIGuiAdapter {
|
||||
@Override
|
||||
public boolean hideItemPanelSlot(GuiContainer guiContainer, int slotX, int slotY, int slotW, int slotH) {
|
||||
if (NEIClientConfig.ignorePotionOverlap()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(guiContainer instanceof InventoryEffectRenderer) {
|
||||
int x = guiContainer.guiLeft - 124;
|
||||
int y = guiContainer.guiTop;
|
||||
Minecraft minecraft = guiContainer.mc;
|
||||
if (minecraft == null) {
|
||||
return false;
|
||||
}
|
||||
EntityPlayerSP player = minecraft.thePlayer;
|
||||
if (player == null) {
|
||||
return false;
|
||||
}
|
||||
Collection<PotionEffect> activePotionEffects = player.getActivePotionEffects();
|
||||
if (activePotionEffects.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
int height = 33;
|
||||
if (activePotionEffects.size() > 5) {
|
||||
height = 132 / (activePotionEffects.size() - 1);
|
||||
}
|
||||
Rectangle4i slotRect = new Rectangle4i(slotX, slotY, slotW, slotH);
|
||||
for (PotionEffect potioneffect : activePotionEffects) {
|
||||
Rectangle4i box = new Rectangle4i(x, y, 140, 32);
|
||||
if(box.intersects(slotRect))
|
||||
return true;
|
||||
y += height;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,377 @@
|
||||
package codechicken.nei;
|
||||
|
||||
import codechicken.nei.api.GuiInfo;
|
||||
import codechicken.nei.api.INEIGuiHandler;
|
||||
import codechicken.nei.guihook.GuiContainerManager;
|
||||
import codechicken.nei.recipe.GuiCraftingRecipe;
|
||||
import codechicken.nei.recipe.GuiRecipe;
|
||||
import codechicken.nei.recipe.GuiUsageRecipe;
|
||||
import codechicken.lib.vec.Rectangle4i;
|
||||
import codechicken.nei.ItemPanel.ItemPanelSlot;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public abstract class PanelWidget extends Widget
|
||||
{
|
||||
protected static final int PADDING = 2;
|
||||
|
||||
public ItemStack draggedStack;
|
||||
public int mouseDownSlot = -1;
|
||||
|
||||
public Button pagePrev;
|
||||
public Button pageNext;
|
||||
public Label pageLabel;
|
||||
|
||||
protected ItemsGrid grid;
|
||||
|
||||
public ArrayList<ItemStack> getItems()
|
||||
{
|
||||
return grid.getItems();
|
||||
}
|
||||
|
||||
public ItemsGrid getGrid()
|
||||
{
|
||||
return grid;
|
||||
}
|
||||
|
||||
public void init() {
|
||||
pageLabel = new Label("0/0", true);
|
||||
|
||||
pagePrev = new Button("Prev")
|
||||
{
|
||||
public boolean onButtonPress(boolean rightclick) {
|
||||
if (!rightclick) {
|
||||
grid.shiftPage(-1);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRenderLabel() {
|
||||
return "<";
|
||||
}
|
||||
};
|
||||
pageNext = new Button("Next")
|
||||
{
|
||||
public boolean onButtonPress(boolean rightclick) {
|
||||
if (!rightclick) {
|
||||
grid.shiftPage(1);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRenderLabel() {
|
||||
return ">";
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
public abstract String getLabelText();
|
||||
|
||||
protected abstract String getPositioningSettingName();
|
||||
|
||||
public abstract int getMarginLeft(GuiContainer gui);
|
||||
|
||||
public abstract int getMarginTop(GuiContainer gui);
|
||||
|
||||
public abstract int getWidth(GuiContainer gui);
|
||||
|
||||
public abstract int getHeight(GuiContainer gui);
|
||||
|
||||
public void resize(GuiContainer gui)
|
||||
{
|
||||
final Rectangle4i margin = new Rectangle4i(getMarginLeft(gui), getMarginTop(gui), getWidth(gui), getHeight(gui));
|
||||
|
||||
|
||||
final int minWidth = 5 * ItemsGrid.SLOT_SIZE;
|
||||
final int minHeight = 9 * ItemsGrid.SLOT_SIZE;
|
||||
|
||||
final String settingName = getPositioningSettingName();
|
||||
int paddingLeft = (int)Math.ceil(margin.w * NEIClientConfig.getSetting(settingName + ".left").getIntValue() / 100000.0);
|
||||
int paddingTop = (int)Math.ceil(margin.h * NEIClientConfig.getSetting(settingName + ".top").getIntValue() / 100000.0);
|
||||
int paddingRight = (int)Math.ceil(margin.w * NEIClientConfig.getSetting(settingName + ".right").getIntValue()/ 100000.0);
|
||||
int paddingBottom = (int)Math.ceil(margin.h * NEIClientConfig.getSetting(settingName + ".bottom").getIntValue() / 100000.0);
|
||||
|
||||
int deltaHeight = Math.min(0, margin.h - paddingTop - paddingBottom - minHeight) / 2;
|
||||
|
||||
paddingLeft = Math.min(paddingLeft, Math.max(0, margin.w - paddingRight - minWidth));
|
||||
paddingRight = Math.min(paddingRight, Math.max(0, margin.w - paddingLeft - minWidth));
|
||||
paddingTop = Math.min(margin.h - minHeight, Math.max(0, paddingTop + deltaHeight));
|
||||
paddingBottom = Math.min(margin.h - paddingTop - minHeight, Math.max(0, paddingBottom - deltaHeight));
|
||||
|
||||
x = margin.x + paddingLeft;
|
||||
y = margin.y + paddingTop;
|
||||
w = margin.w - paddingLeft - paddingRight;
|
||||
h = margin.h - paddingTop - paddingBottom;
|
||||
|
||||
final int header = resizeHeader(gui);
|
||||
final int footer = resizeFooter(gui);
|
||||
|
||||
grid.setGridSize(x, y + header, w, h - header - footer);
|
||||
grid.refresh(gui);
|
||||
}
|
||||
|
||||
protected int resizeHeader(GuiContainer gui)
|
||||
{
|
||||
final int BUTTON_SIZE = 16;
|
||||
int paddingLeft = 0;
|
||||
int paddingRight = 0;
|
||||
|
||||
while (paddingLeft < w && GuiInfo.hideItemPanelSlot(gui, new Rectangle4i(x + paddingLeft, y, ItemsGrid.SLOT_SIZE, ItemsGrid.SLOT_SIZE))) {
|
||||
paddingLeft += ItemsGrid.SLOT_SIZE;
|
||||
}
|
||||
|
||||
while (paddingRight < w && GuiInfo.hideItemPanelSlot(gui, new Rectangle4i(x + w - paddingRight - ItemsGrid.SLOT_SIZE, y, ItemsGrid.SLOT_SIZE, ItemsGrid.SLOT_SIZE))) {
|
||||
paddingRight += ItemsGrid.SLOT_SIZE;
|
||||
}
|
||||
|
||||
if (paddingLeft + paddingRight >= w) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
pagePrev.w = pageNext.w = BUTTON_SIZE;
|
||||
pagePrev.h = pageNext.h = BUTTON_SIZE;
|
||||
pagePrev.y = pageNext.y = y;
|
||||
|
||||
pagePrev.x = x + paddingLeft;
|
||||
pageNext.x = x + w - pageNext.w - paddingRight;
|
||||
|
||||
pageLabel.x = x + paddingLeft + (w - paddingLeft - paddingRight) / 2;
|
||||
pageLabel.y = y + 5;
|
||||
pageLabel.text = getLabelText();
|
||||
|
||||
return BUTTON_SIZE + 2;
|
||||
}
|
||||
|
||||
protected abstract int resizeFooter(GuiContainer gui);
|
||||
|
||||
public void setVisible()
|
||||
{
|
||||
if (grid.getPerPage() > 0) {
|
||||
LayoutManager.addWidget(pagePrev);
|
||||
LayoutManager.addWidget(pageNext);
|
||||
LayoutManager.addWidget(pageLabel);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(int mousex, int mousey)
|
||||
{
|
||||
grid.draw(mousex, mousey);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postDraw(int mousex, int mousey)
|
||||
{
|
||||
if (draggedStack != null) {
|
||||
GuiContainerManager.drawItems.zLevel += 100;
|
||||
GuiContainerManager.drawItem(mousex - 8, mousey - 8, draggedStack);
|
||||
GuiContainerManager.drawItems.zLevel -= 100;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseDragged(int mousex, int mousey, int button, long heldTime)
|
||||
{
|
||||
if (mouseDownSlot >= 0 && draggedStack == null && NEIClientUtils.getHeldItem() == null &&
|
||||
NEIClientConfig.hasSMPCounterPart() && !GuiInfo.hasCustomSlots(NEIClientUtils.getGuiContainer())) {
|
||||
ItemPanelSlot mouseOverSlot = getSlotMouseOver(mousex, mousey);
|
||||
|
||||
if (mouseOverSlot == null || mouseOverSlot.slotIndex != mouseDownSlot || heldTime > 500) {
|
||||
draggedStack = getDraggedStackWithQuantity(mouseDownSlot);
|
||||
mouseDownSlot = -1;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract ItemStack getDraggedStackWithQuantity(int mouseDownSlot);
|
||||
|
||||
@Override
|
||||
public boolean handleClick(int mousex, int mousey, int button)
|
||||
{
|
||||
|
||||
if (handleClickExt(mousex, mousey, button))
|
||||
return true;
|
||||
|
||||
if (NEIClientUtils.getHeldItem() != null) {
|
||||
|
||||
if (!grid.contains(mousex, mousey)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (NEIClientConfig.canPerformAction("delete") && NEIClientConfig.canPerformAction("item"))
|
||||
if (button == 1)
|
||||
NEIClientUtils.decreaseSlotStack(-999);
|
||||
else
|
||||
NEIClientUtils.deleteHeldItem();
|
||||
else
|
||||
NEIClientUtils.dropHeldItem();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
ItemPanelSlot hoverSlot = getSlotMouseOver(mousex, mousey);
|
||||
if (hoverSlot != null) {
|
||||
|
||||
if (button == 2) {
|
||||
|
||||
if (hoverSlot.item != null) {
|
||||
draggedStack = getDraggedStackWithQuantity(hoverSlot.slotIndex);
|
||||
}
|
||||
|
||||
} else {
|
||||
mouseDownSlot = hoverSlot.slotIndex;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleClickExt(int mouseX, int mouseY, int button)
|
||||
{
|
||||
if (ItemPanels.itemPanel.draggedStack != null) {
|
||||
return ItemPanels.itemPanel.handleDraggedClick(mouseX, mouseY, button);
|
||||
}
|
||||
|
||||
if (ItemPanels.bookmarkPanel.draggedStack != null) {
|
||||
return ItemPanels.bookmarkPanel.handleDraggedClick(mouseX, mouseY, button);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected boolean handleDraggedClick(int mouseX, int mouseY, int button)
|
||||
{
|
||||
if (draggedStack == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (handleGUIContainerClick(mouseX, mouseY, button)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
final GuiContainer gui = NEIClientUtils.getGuiContainer();
|
||||
if (mouseX < gui.guiLeft || mouseY < gui.guiTop || mouseX >= gui.guiLeft + gui.xSize || mouseY >= gui.guiTop + gui.ySize) {
|
||||
draggedStack = null;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected boolean handleGUIContainerClick(int mouseX, int mouseY, int button)
|
||||
{
|
||||
final GuiContainer gui = NEIClientUtils.getGuiContainer();
|
||||
boolean handled = false;
|
||||
|
||||
try {
|
||||
GuiInfo.readLock.lock();
|
||||
for (INEIGuiHandler handler : GuiInfo.guiHandlers) {
|
||||
if (handler.handleDragNDrop(gui, mouseX, mouseY, draggedStack, button)) {
|
||||
handled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
GuiInfo.readLock.unlock();
|
||||
}
|
||||
|
||||
if (draggedStack.stackSize == 0) {
|
||||
draggedStack = null;
|
||||
}
|
||||
|
||||
return handled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseUp(int mousex, int mousey, int button)
|
||||
{
|
||||
ItemPanelSlot hoverSlot = getSlotMouseOver(mousex, mousey);
|
||||
|
||||
if (hoverSlot != null && hoverSlot.slotIndex == mouseDownSlot && draggedStack == null) {
|
||||
ItemStack item = hoverSlot.item;
|
||||
|
||||
if (NEIController.manager.window instanceof GuiRecipe || !NEIClientConfig.canCheatItem(item)) {
|
||||
|
||||
if (button == 0) {
|
||||
GuiCraftingRecipe.openRecipeGui("item", item);
|
||||
} else if (button == 1) {
|
||||
GuiUsageRecipe.openRecipeGui("item", item);
|
||||
}
|
||||
|
||||
mouseDownSlot = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
NEIClientUtils.cheatItem(getDraggedStackWithQuantity(hoverSlot.slotIndex), button, -1);
|
||||
}
|
||||
|
||||
mouseDownSlot = -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMouseWheel(int i, int mousex, int mousey)
|
||||
{
|
||||
if (!contains(mousex, mousey))
|
||||
return false;
|
||||
|
||||
grid.shiftPage(-i);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean handleKeyPress(int keyID, char keyChar)
|
||||
{
|
||||
|
||||
if (keyID == NEIClientConfig.getKeyBinding("gui.next")) {
|
||||
grid.shiftPage(1);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (keyID == NEIClientConfig.getKeyBinding("gui.prev")) {
|
||||
grid.shiftPage(-1);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getStackMouseOver(int mousex, int mousey)
|
||||
{
|
||||
ItemPanelSlot slot = getSlotMouseOver(mousex, mousey);
|
||||
return slot == null ? null : slot.item;
|
||||
}
|
||||
|
||||
public ItemPanelSlot getSlotMouseOver(int mousex, int mousey)
|
||||
{
|
||||
return grid.getSlotMouseOver(mousex, mousey);
|
||||
}
|
||||
|
||||
public int getPage()
|
||||
{
|
||||
return grid.getPage();
|
||||
}
|
||||
|
||||
public int getNumPages()
|
||||
{
|
||||
return grid.getNumPages();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(int px, int py)
|
||||
{
|
||||
return grid.contains(px, py);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,11 +4,7 @@ import codechicken.core.CommonUtils;
|
||||
import codechicken.core.gui.GuiScrollSlot;
|
||||
import codechicken.lib.gui.GuiDraw;
|
||||
import codechicken.lib.vec.Rectangle4i;
|
||||
import codechicken.nei.ItemList.AllMultiItemFilter;
|
||||
import codechicken.nei.ItemList.EverythingItemFilter;
|
||||
import codechicken.nei.ItemPanel.ItemPanelSlot;
|
||||
import codechicken.nei.api.API;
|
||||
import codechicken.nei.api.ItemFilter.ItemFilterProvider;
|
||||
import codechicken.nei.api.ItemFilter;
|
||||
import codechicken.nei.recipe.GuiRecipe;
|
||||
import codechicken.nei.recipe.StackInfo;
|
||||
@@ -36,7 +32,7 @@ import org.apache.commons.io.IOUtils;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
import static codechicken.nei.NEIClientUtils.translate;
|
||||
|
||||
public class PresetsWidget extends Widget// implements ItemFilterProvider
|
||||
public class PresetsWidget extends Widget
|
||||
{
|
||||
|
||||
public static class PresetTag implements ItemFilter
|
||||
@@ -511,7 +507,7 @@ public class PresetsWidget extends Widget// implements ItemFilterProvider
|
||||
@Override
|
||||
public List<String> handleTooltip(int mx, int my, List<String> tooltip)
|
||||
{
|
||||
if (contains(mx, my)) {
|
||||
if (contains(mx, my) && listbox.getSelected().size() <= 1) {
|
||||
tooltip.add(translate("presets.label.tooltip"));
|
||||
}
|
||||
|
||||
@@ -631,17 +627,16 @@ public class PresetsWidget extends Widget// implements ItemFilterProvider
|
||||
public static boolean isHidden(final ItemStack item)
|
||||
{
|
||||
|
||||
if (edit != null || listbox.getSelected().isEmpty()) {
|
||||
if (edit != null) {
|
||||
|
||||
if (edit != null) {
|
||||
|
||||
if (mouseSelection != null && mouseSelection.items.contains(item)) {
|
||||
return mouseSelection.append != edit.whitelist;
|
||||
}
|
||||
|
||||
return !edit.matches(item);
|
||||
if (mouseSelection != null && mouseSelection.items.contains(item)) {
|
||||
return mouseSelection.append != edit.whitelist;
|
||||
}
|
||||
|
||||
return !edit.matches(item);
|
||||
}
|
||||
|
||||
if (!listbox.getSelected().isEmpty()) {
|
||||
final List<PresetTag> selected = listbox.getSelected();
|
||||
|
||||
for (int idx = 0; idx < selected.size(); idx++) {
|
||||
@@ -736,33 +731,21 @@ public class PresetsWidget extends Widget// implements ItemFilterProvider
|
||||
ItemList.updateFilter.restart();
|
||||
}
|
||||
|
||||
// public PresetsWidget()
|
||||
// {
|
||||
// API.addItemFilter(this);
|
||||
// }
|
||||
|
||||
@Override
|
||||
public void draw(int mx, int my)
|
||||
{
|
||||
final int panelHeight = 16;
|
||||
final int panelWidth = 153;
|
||||
|
||||
w = panelWidth;
|
||||
h = panelHeight;
|
||||
y = 2;
|
||||
x = ItemPanels.itemPanel.x - 4 - w;
|
||||
|
||||
if (edit != null) {
|
||||
|
||||
selectedState.x = x;
|
||||
selectedState.y = y;
|
||||
selectedState.w = selectedState.h = panelHeight;
|
||||
selectedState.w = selectedState.h = h;
|
||||
selectedState.draw(mx, my);
|
||||
|
||||
selectedDisplayName.y = y;
|
||||
selectedDisplayName.h = h;
|
||||
selectedDisplayName.x = selectedState.x + selectedState.w + 1;
|
||||
selectedDisplayName.w = w - panelHeight * 2 - 5;
|
||||
selectedDisplayName.w = w - h * 2 - 5;
|
||||
selectedDisplayName.draw(mx, my);
|
||||
|
||||
} else {
|
||||
@@ -772,7 +755,7 @@ public class PresetsWidget extends Widget// implements ItemFilterProvider
|
||||
selectedValue.text = size> 1? translate("presets.label.selected", size): (size == 1? selected.get(0).displayName: "");
|
||||
selectedValue.y = y;
|
||||
selectedValue.h = h;
|
||||
selectedValue.w = w - panelHeight - 4;
|
||||
selectedValue.w = w - h - 4;
|
||||
selectedValue.x = x;
|
||||
|
||||
selectedValue.draw(mx, my);
|
||||
@@ -780,7 +763,7 @@ public class PresetsWidget extends Widget// implements ItemFilterProvider
|
||||
|
||||
|
||||
dropdown.y = y;
|
||||
dropdown.w = dropdown.h = panelHeight;
|
||||
dropdown.w = dropdown.h = h;
|
||||
dropdown.x = x + w - dropdown.w;
|
||||
dropdown.state = edit != null || listbox.getNumSlots() == 0? 2: 0;
|
||||
dropdown.draw(mx, my);
|
||||
@@ -1018,6 +1001,11 @@ public class PresetsWidget extends Widget// implements ItemFilterProvider
|
||||
|
||||
public static boolean matches(ItemStack stack)
|
||||
{
|
||||
|
||||
if (edit != null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
final List<PresetTag> selected = listbox.getSelected();
|
||||
|
||||
for (int idx = 0; idx < selected.size(); idx++) {
|
||||
|
||||
@@ -217,6 +217,7 @@ public class SubsetWidget extends Button implements ItemFilterProvider, ItemsLoa
|
||||
for(SubsetTag tag : sorted)
|
||||
tag.cacheState();
|
||||
}
|
||||
|
||||
public void addFiltersWithItem(List<ItemFilter> filters, String itemSearch) {
|
||||
if(itemSearch == null) {
|
||||
addFilters(filters);
|
||||
@@ -229,6 +230,7 @@ public class SubsetWidget extends Button implements ItemFilterProvider, ItemsLoa
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void addFilters(List<ItemFilter> filters) {
|
||||
if(filter != null)
|
||||
filters.add(filter);
|
||||
|
||||
@@ -11,6 +11,14 @@ public class VisiblityData
|
||||
* Bookmark panel and associated buttons
|
||||
*/
|
||||
public boolean showBookmarkPanel = true;
|
||||
/**
|
||||
* Subset dropdown
|
||||
*/
|
||||
public boolean showSubsetDropdown = true;
|
||||
/**
|
||||
* Presets dropdown
|
||||
*/
|
||||
public boolean showPresetsDropdown = true;
|
||||
/**
|
||||
* Item and search section
|
||||
*/
|
||||
@@ -40,6 +48,6 @@ public class VisiblityData
|
||||
if(!showWidgets)
|
||||
showItemSection = showUtilityButtons = false;
|
||||
if(!showItemSection)
|
||||
showBookmarkPanel = showSearchSection = showItemPanel = false;
|
||||
showBookmarkPanel = showSubsetDropdown = showPresetsDropdown = showSearchSection = showItemPanel = false;
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,15 @@
|
||||
package codechicken.nei.api;
|
||||
|
||||
import codechicken.lib.vec.Rectangle4i;
|
||||
import codechicken.nei.NEIChestGuiHandler;
|
||||
import codechicken.nei.NEICreativeGuiHandler;
|
||||
import codechicken.nei.NEIDummySlotHandler;
|
||||
import codechicken.nei.NEIPotionGuiHandler;
|
||||
import codechicken.nei.recipe.GuiRecipeCatalyst;
|
||||
import codechicken.nei.recipe.SearchInputDropHandler;
|
||||
import codechicken.nei.recipe.FillFluidContainerHandler;
|
||||
import codechicken.nei.recipe.CheatItemHandler;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.client.gui.inventory.GuiContainerCreative;
|
||||
|
||||
@@ -25,6 +31,10 @@ public class GuiInfo {
|
||||
API.registerNEIGuiHandler(new NEIChestGuiHandler());
|
||||
API.registerNEIGuiHandler(new NEIDummySlotHandler());
|
||||
API.registerNEIGuiHandler(new GuiRecipeCatalyst(null));
|
||||
API.registerNEIGuiHandler(new SearchInputDropHandler());
|
||||
API.registerNEIGuiHandler(new FillFluidContainerHandler());
|
||||
API.registerNEIGuiHandler(new CheatItemHandler());
|
||||
API.registerNEIGuiHandler(new NEIPotionGuiHandler());
|
||||
customSlotGuis.add(GuiContainerCreative.class);
|
||||
}
|
||||
|
||||
@@ -40,4 +50,28 @@ public class GuiInfo {
|
||||
public static boolean hasCustomSlots(GuiContainer gui) {
|
||||
return customSlotGuis.contains(gui.getClass());
|
||||
}
|
||||
|
||||
public static boolean hideItemPanelSlot(GuiContainer gui, Rectangle4i rect)
|
||||
{
|
||||
try {
|
||||
readLock.lock();
|
||||
if (guiHandlers.stream().anyMatch(handler -> handler.hideItemPanelSlot(gui, rect.x, rect.y, rect.w, rect.h))) {
|
||||
return true;
|
||||
}
|
||||
} finally {
|
||||
readLock.unlock();
|
||||
}
|
||||
|
||||
for (Object item : gui.buttonList) {
|
||||
GuiButton button = (GuiButton) item;
|
||||
|
||||
if ((new Rectangle4i(button.xPosition, button.yPosition, button.width, button.height)).intersects(rect)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,8 +1,13 @@
|
||||
package codechicken.nei.api;
|
||||
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
|
||||
public interface IGuiContainerOverlay
|
||||
{
|
||||
public GuiContainer getFirstScreen();
|
||||
GuiContainer getFirstScreen();
|
||||
|
||||
default GuiScreen getFirstScreenGeneral() {
|
||||
return getFirstScreen();
|
||||
}
|
||||
}
|
||||
@@ -58,6 +58,7 @@ import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* This is an internal class for storing information about items, to be accessed by the API
|
||||
@@ -82,8 +83,36 @@ public class ItemInfo
|
||||
|
||||
public static final HashMap<Item, String> itemOwners = new HashMap<>();
|
||||
|
||||
private static class ItemStackKey {
|
||||
public final ItemStack stack;
|
||||
public ItemStackKey(ItemStack stack) {
|
||||
this.stack = stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
if(this.stack == null)
|
||||
return 1;
|
||||
int hashCode = 1;
|
||||
hashCode = 31 * hashCode + stack.stackSize;
|
||||
hashCode = 31 * hashCode + Item.getIdFromItem(stack.getItem());
|
||||
hashCode = 31 * hashCode + stack.getItemDamage();
|
||||
hashCode = 31 * hashCode + (!stack.hasTagCompound() ? 0 : stack.getTagCompound().hashCode());
|
||||
return hashCode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if(o == this)
|
||||
return true;
|
||||
if(!(o instanceof ItemStackKey))
|
||||
return false;
|
||||
return ItemStack.areItemStacksEqual(this.stack, ((ItemStackKey)o).stack);
|
||||
}
|
||||
}
|
||||
|
||||
//lookup optimisation
|
||||
public static final HashMap<ItemStack, String> itemSearchNames = new HashMap<>();
|
||||
public static final ConcurrentHashMap<ItemStackKey, String> itemSearchNames = new ConcurrentHashMap<>();
|
||||
|
||||
public static boolean isHidden(ItemStack stack) {
|
||||
return hiddenItems.contains(stack);
|
||||
@@ -129,7 +158,18 @@ public class ItemInfo
|
||||
}
|
||||
|
||||
private static void addSearchOptimisation() {
|
||||
ItemList.loadCallbacks.add(itemSearchNames::clear);
|
||||
ItemList.loadCallbacks.add(ItemInfo::populateSearchMap);
|
||||
}
|
||||
|
||||
private static void populateSearchMap() {
|
||||
/* Create a snapshot of the current keys in the cache */
|
||||
HashSet<ItemStackKey> oldItems = new HashSet<>(itemSearchNames.keySet());
|
||||
for(ItemStack stack : ItemList.items) {
|
||||
/* Populate each entry and remove it from the snapshot */
|
||||
getSearchName(stack);
|
||||
oldItems.remove(new ItemStackKey(stack));
|
||||
}
|
||||
itemSearchNames.keySet().removeAll(oldItems);
|
||||
}
|
||||
|
||||
private static void addHiddenItemFilter() {
|
||||
@@ -517,11 +557,8 @@ public class ItemInfo
|
||||
}
|
||||
|
||||
public static String getSearchName(ItemStack stack) {
|
||||
String s = itemSearchNames.get(stack);
|
||||
if(s == null) {
|
||||
s = EnumChatFormatting.getTextWithoutFormattingCodes(GuiContainerManager.concatenatedDisplayName(stack, true).toLowerCase());
|
||||
itemSearchNames.put(stack, s);
|
||||
}
|
||||
return s;
|
||||
return itemSearchNames.computeIfAbsent(new ItemStackKey(stack), key ->
|
||||
EnumChatFormatting.getTextWithoutFormattingCodes(GuiContainerManager.concatenatedDisplayName(key.stack, true).toLowerCase())
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,317 @@
|
||||
package codechicken.nei.config;
|
||||
|
||||
import codechicken.core.gui.GuiScreenWidget;
|
||||
import codechicken.lib.render.CCRenderState;
|
||||
import codechicken.lib.vec.Rectangle4i;
|
||||
import codechicken.nei.ItemPanels;
|
||||
import codechicken.nei.ItemsGrid;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import codechicken.nei.guihook.GuiContainerManager;
|
||||
|
||||
import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
|
||||
import java.awt.Point;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static codechicken.lib.gui.GuiDraw.getMousePosition;
|
||||
|
||||
public class GuiPanelSettings extends GuiScreenWidget
|
||||
{
|
||||
private final Option opt;
|
||||
|
||||
private PanelPlaceholder bookmarksPanel;
|
||||
private PanelPlaceholder itemsPanel;
|
||||
|
||||
protected static class PanelResizeButton
|
||||
{
|
||||
private int x;
|
||||
private int y;
|
||||
private int w;
|
||||
private int h;
|
||||
|
||||
public PanelResizeButton(int w, int h)
|
||||
{
|
||||
this.w = w;
|
||||
this.h = h;
|
||||
}
|
||||
|
||||
public void draw(int mousex, int mousey)
|
||||
{
|
||||
drawRect(x, y, x + w, y + h, 0xbbaaaaaa);
|
||||
drawRect(x + 2, y + 2, x + w - 2, y + h - 2, contains(mousex, mousey)? 0xFF000000: 0xbb000000);
|
||||
}
|
||||
|
||||
public boolean contains(int pointX, int pointY)
|
||||
{
|
||||
return (new Rectangle4i(x, y, w, h)).contains(pointX, pointY);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected static class PanelPlaceholder
|
||||
{
|
||||
protected static int PANEL_SIZE = 16;
|
||||
|
||||
private final Option opt;
|
||||
private final String name;
|
||||
private Rectangle4i margin;
|
||||
private Point dragDown;
|
||||
private String dragDir;
|
||||
private int x = 0;
|
||||
private int y = 0;
|
||||
private int w = 0;
|
||||
private int h = 0;
|
||||
|
||||
private PanelResizeButton leftButton = new PanelResizeButton(PANEL_SIZE, PANEL_SIZE * 2);
|
||||
private PanelResizeButton topButton = new PanelResizeButton(PANEL_SIZE * 2, PANEL_SIZE);
|
||||
private PanelResizeButton rightButton = new PanelResizeButton(PANEL_SIZE, PANEL_SIZE * 2);
|
||||
private PanelResizeButton bottomButton = new PanelResizeButton(PANEL_SIZE * 2, PANEL_SIZE);
|
||||
|
||||
public PanelPlaceholder(Option opt, String name)
|
||||
{
|
||||
this.opt = opt;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public void resize(Rectangle4i margin)
|
||||
{
|
||||
this.margin = margin;
|
||||
int[] padding = getPaddings();
|
||||
|
||||
x = margin.x + padding[0];
|
||||
y = margin.y + padding[1];
|
||||
w = margin.w - padding[2] - padding[0];
|
||||
h = margin.h - padding[3] - padding[1];
|
||||
|
||||
leftButton.x = x;
|
||||
leftButton.y = y + h / 2 - PANEL_SIZE;
|
||||
|
||||
rightButton.x = x + w - PANEL_SIZE;
|
||||
rightButton.y = y + h / 2 - PANEL_SIZE;
|
||||
|
||||
topButton.x = x + w / 2 - PANEL_SIZE;
|
||||
topButton.y = y;
|
||||
|
||||
bottomButton.x = x + w / 2 - PANEL_SIZE;
|
||||
bottomButton.y = y + h - PANEL_SIZE;
|
||||
}
|
||||
|
||||
public void draw(int mousex, int mousey)
|
||||
{
|
||||
drawRect(x, y, x + w, y + PANEL_SIZE, 0xbbaaaaaa); //top-panel
|
||||
drawRect(x, y + h - PANEL_SIZE, x + w, y + h, 0xbbaaaaaa); //bottom-panel
|
||||
|
||||
drawRect(x, y, x + 2, y + h, 0xbbaaaaaa); //border left
|
||||
drawRect(x + w, y, x + w - 2, y + h, 0xbbaaaaaa); //border right
|
||||
|
||||
drawRect(x, y, x + w, y + 2, 0xbbaaaaaa); //border top
|
||||
drawRect(x, y + h, x + w, y + h - 2, 0xbbaaaaaa); //border bottom
|
||||
|
||||
drawItems();
|
||||
|
||||
leftButton.draw(mousex, mousey);
|
||||
rightButton.draw(mousex, mousey);
|
||||
topButton.draw(mousex, mousey);
|
||||
bottomButton.draw(mousex, mousey);
|
||||
}
|
||||
|
||||
protected int[] getPaddings()
|
||||
{
|
||||
final int minWidth = 5 * ItemsGrid.SLOT_SIZE;
|
||||
final int minHeight = 9 * ItemsGrid.SLOT_SIZE;
|
||||
|
||||
int paddingLeft = (int)Math.ceil(margin.w * opt.renderTag(name + ".left").getIntValue() / 100000.0);
|
||||
int paddingTop = (int)Math.ceil(margin.h * opt.renderTag(name + ".top").getIntValue() / 100000.0);
|
||||
int paddingRight = (int)Math.ceil(margin.w * opt.renderTag(name + ".right").getIntValue() / 100000.0);
|
||||
int paddingBottom = (int)Math.ceil(margin.h * opt.renderTag(name + ".bottom").getIntValue() / 100000.0);
|
||||
|
||||
if (dragDir != null) {
|
||||
final Point mouse = getMousePosition();
|
||||
Point drag = new Point(mouse.x - dragDown.x, mouse.y - dragDown.y);
|
||||
|
||||
if (dragDir == "left") {
|
||||
paddingLeft = Math.min(Math.max(0, margin.w - paddingRight - minWidth), Math.max(0, paddingLeft + drag.x));
|
||||
} else if (dragDir == "right") {
|
||||
paddingRight = Math.min(Math.max(0, margin.w - paddingLeft - minWidth), Math.max(0, paddingRight - drag.x));
|
||||
} else if (dragDir == "top") {
|
||||
paddingTop = Math.min(Math.max(0, margin.h - paddingBottom - minHeight), Math.max(0, paddingTop + drag.y));
|
||||
} else if (dragDir == "bottom") {
|
||||
paddingBottom = Math.min(Math.max(0, margin.h - paddingTop - minHeight), Math.max(0, paddingBottom - drag.y));
|
||||
} else if (dragDir == "move") {
|
||||
int width = margin.w - paddingRight - paddingLeft;
|
||||
int height = margin.h - paddingTop - paddingBottom;
|
||||
|
||||
paddingLeft = Math.min(Math.max(0, margin.w - width), Math.max(0, paddingLeft + drag.x));
|
||||
paddingTop = Math.min(Math.max(0, margin.h - height), Math.max(0, paddingTop + drag.y));
|
||||
|
||||
paddingRight = margin.w - paddingLeft - width;
|
||||
paddingBottom = margin.h - paddingTop - height;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int deltaHeight = Math.min(0, margin.h - paddingTop - paddingBottom - minHeight) / 2;
|
||||
|
||||
paddingLeft = Math.min(paddingLeft, Math.max(0, margin.w - paddingRight - minWidth));
|
||||
paddingRight = Math.min(paddingRight, Math.max(0, margin.w - paddingLeft - minWidth));
|
||||
paddingTop = Math.min(margin.h - minHeight, Math.max(0, paddingTop + deltaHeight));
|
||||
paddingBottom = Math.min(margin.h - paddingTop - minHeight, Math.max(0, paddingBottom - deltaHeight));
|
||||
|
||||
|
||||
return new int[]{ paddingLeft, paddingTop, paddingRight, paddingBottom };
|
||||
}
|
||||
|
||||
protected void drawItems()
|
||||
{
|
||||
final int columns = w / ItemsGrid.SLOT_SIZE;
|
||||
final int rows = (h - (PANEL_SIZE + 2) * 2) / ItemsGrid.SLOT_SIZE;
|
||||
final int paddingLeft = (w % ItemsGrid.SLOT_SIZE) / 2;
|
||||
final ArrayList<ItemStack> items = ItemPanels.itemPanel.getItems();
|
||||
|
||||
for (int r = 0; r < rows; r ++) {
|
||||
for (int c = 0; c < columns; c++) {
|
||||
|
||||
GuiContainerManager.drawItem(
|
||||
x + paddingLeft + ItemsGrid.SLOT_SIZE * c + 1,
|
||||
y + PANEL_SIZE + 2 + ItemsGrid.SLOT_SIZE * r + 1,
|
||||
items.get((r * columns + c) % items.size())
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public boolean contains(int pointX, int pointY)
|
||||
{
|
||||
return (new Rectangle4i(x, y, w, h)).contains(pointX, pointY);
|
||||
}
|
||||
|
||||
protected void mouseClicked(int x, int y, int button)
|
||||
{
|
||||
|
||||
if (contains(x, y)) {
|
||||
dragDown = getMousePosition();
|
||||
|
||||
if (leftButton.contains(x, y)) {
|
||||
dragDir = "left";
|
||||
} else if (rightButton.contains(x, y)) {
|
||||
dragDir = "right";
|
||||
} else if (topButton.contains(x, y)) {
|
||||
dragDir = "top";
|
||||
} else if (bottomButton.contains(x, y)) {
|
||||
dragDir = "bottom";
|
||||
} else {
|
||||
dragDir = "move";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
protected void mouseMovedOrUp(int x, int y, int button)
|
||||
{
|
||||
|
||||
if (button == 0 && dragDown != null) {
|
||||
int[] padding = getPaddings();
|
||||
|
||||
opt.renderTag(name + ".left").setIntValue(padding[0] * 100000 / margin.w);
|
||||
opt.renderTag(name + ".top").setIntValue(padding[1] * 100000 / margin.h);
|
||||
opt.renderTag(name + ".right").setIntValue(padding[2] * 100000 / margin.w);
|
||||
opt.renderTag(name + ".bottom").setIntValue(padding[3] * 100000 / margin.h);
|
||||
|
||||
dragDir = null;
|
||||
dragDown = null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public GuiPanelSettings(Option opt) {
|
||||
super(176, 198);
|
||||
this.opt = opt;
|
||||
|
||||
bookmarksPanel = new PanelPlaceholder(opt, opt.name + ".bookmarks");
|
||||
itemsPanel = new PanelPlaceholder(opt, opt.name + ".items");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doesGuiPauseGame()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyTyped(char c, int keycode)
|
||||
{
|
||||
|
||||
if (keycode == Keyboard.KEY_ESCAPE || keycode == Keyboard.KEY_BACK) {
|
||||
Minecraft.getMinecraft().displayGuiScreen(opt.slot.getGui());
|
||||
return;
|
||||
}
|
||||
|
||||
super.keyTyped(c, keycode);
|
||||
}
|
||||
|
||||
|
||||
protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) {
|
||||
GL11.glColor4f(1, 1, 1, 1);
|
||||
CCRenderState.changeTexture("nei:textures/gui/inv.png");
|
||||
|
||||
int x = guiLeft;
|
||||
int y = guiTop - 4;
|
||||
|
||||
drawTexturedModalRect(x - 23, y, 0, 0, 199, 204);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawScreen(int mousex, int mousey, float f)
|
||||
{
|
||||
|
||||
drawGuiContainerBackgroundLayer(f, mousex, mousey);
|
||||
drawDefaultBackground();
|
||||
|
||||
RenderHelper.enableGUIStandardItemLighting();
|
||||
GL11.glPushMatrix();
|
||||
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
|
||||
|
||||
bookmarksPanel.resize(getBookmarkDefaultSize());
|
||||
itemsPanel.resize(getItemsDefaultSize());
|
||||
|
||||
bookmarksPanel.draw(mousex, mousey);
|
||||
itemsPanel.draw(mousex, mousey);
|
||||
|
||||
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
|
||||
GL11.glPopMatrix();
|
||||
RenderHelper.enableStandardItemLighting();
|
||||
}
|
||||
|
||||
private Rectangle4i getBookmarkDefaultSize()
|
||||
{
|
||||
return new Rectangle4i(2, 2, guiLeft - 4, height - 4);
|
||||
}
|
||||
|
||||
protected Rectangle4i getItemsDefaultSize()
|
||||
{
|
||||
return new Rectangle4i(guiLeft + xSize + 2, 2, width - (guiLeft + xSize + 4), height - 4);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void mouseClicked(int x, int y, int button)
|
||||
{
|
||||
bookmarksPanel.mouseClicked(x, y, button);
|
||||
itemsPanel.mouseClicked(x, y, button);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void mouseMovedOrUp(int x, int y, int button)
|
||||
{
|
||||
bookmarksPanel.mouseMovedOrUp(x, y, button);
|
||||
itemsPanel.mouseMovedOrUp(x, y, button);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,17 +2,26 @@ package codechicken.nei.config;
|
||||
|
||||
import codechicken.core.CommonUtils;
|
||||
import codechicken.nei.NEIClientConfig;
|
||||
import codechicken.nei.NEIServerUtils;
|
||||
import codechicken.nei.recipe.CatalystInfo;
|
||||
import codechicken.nei.recipe.GuiRecipeTab;
|
||||
import codechicken.nei.recipe.HandlerInfo;
|
||||
import codechicken.nei.recipe.RecipeCatalysts;
|
||||
import cpw.mods.fml.common.FMLLog;
|
||||
import cpw.mods.fml.common.Loader;
|
||||
import cpw.mods.fml.common.event.FMLInterModComms;
|
||||
import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class IMCHandler {
|
||||
private static final Set<String> processedCatalystSenders = new HashSet<>();
|
||||
private IMCHandler() {}
|
||||
|
||||
public static void processIMC(List<FMLInterModComms.IMCMessage> messages) {
|
||||
@@ -20,10 +29,19 @@ public class IMCHandler {
|
||||
String type = message.key;
|
||||
if (type == null || type.isEmpty()) continue;
|
||||
if (CommonUtils.isClient()) {
|
||||
if (type.equals("registerHandlerInfo")) {
|
||||
handleRegisterHandlerInfo(message);
|
||||
} else if (type.equals("removeHandlerInfo")) {
|
||||
handleRemoveHandlerInfo(message);
|
||||
switch (type) {
|
||||
case "registerHandlerInfo":
|
||||
handleRegisterHandlerInfo(message);
|
||||
break;
|
||||
case "removeHandlerInfo":
|
||||
handleRemoveHandlerInfo(message);
|
||||
break;
|
||||
case "registerCatalystInfo":
|
||||
handleRegisterCatalystInfo(message);
|
||||
break;
|
||||
case "removeCatalystInfo":
|
||||
handleRemoveCatalystInfo(message);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,6 +109,72 @@ public class IMCHandler {
|
||||
GuiRecipeTab.handlerRemoverFromIMC.add(handler);
|
||||
}
|
||||
|
||||
private static void handleRegisterCatalystInfo(IMCMessage message) {
|
||||
if (!message.isNBTMessage()) {
|
||||
logInvalidMessage(message, "NBT");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!processedCatalystSenders.contains(message.getSender())) {
|
||||
NEIClientConfig.logger.info("Processing registerCatalystInfo from " + message.getSender());
|
||||
processedCatalystSenders.add(message.getSender());
|
||||
}
|
||||
final NBTTagCompound tag = message.getNBTValue();
|
||||
final String handlerID = tag.getString("handlerID");
|
||||
if (handlerID.isEmpty()) {
|
||||
NEIClientConfig.logger.warn("Missing handlerID for registerCatalystInfo!");
|
||||
return;
|
||||
}
|
||||
final String itemName = tag.getString("itemName");
|
||||
final String nbtInfo = tag.hasKey("nbtInfo") ? tag.getString("nbtInfo") : null;
|
||||
if (itemName.isEmpty()) {
|
||||
NEIClientConfig.logger.warn(String.format("Missing itemName for registerCatalystInfo in `%s`!", handlerID));
|
||||
return;
|
||||
}
|
||||
final ItemStack itemStack = NEIServerUtils.getModdedItem(itemName, nbtInfo);
|
||||
if (itemStack == null) {
|
||||
NEIClientConfig.logger.warn(String.format("Cannot find item `%s`!", itemName));
|
||||
return;
|
||||
}
|
||||
final int priority = tag.getInteger("priority");
|
||||
|
||||
RecipeCatalysts.addOrPut(RecipeCatalysts.catalystsAdderFromIMC, handlerID, new CatalystInfo(itemStack, priority));
|
||||
NEIClientConfig.logger.info(String.format("Added catalyst `%s` to handler %s", itemStack.getDisplayName(), handlerID));
|
||||
}
|
||||
|
||||
private static void handleRemoveCatalystInfo(IMCMessage message) {
|
||||
if (!message.isNBTMessage()) {
|
||||
logInvalidMessage(message, "NBT");
|
||||
return;
|
||||
}
|
||||
|
||||
NEIClientConfig.logger.info("Processing removeCatalystInfo from " + message.getSender());
|
||||
final NBTTagCompound tag = message.getNBTValue();
|
||||
final String handlerID = tag.getString("handlerID");
|
||||
if (handlerID.isEmpty()) {
|
||||
NEIClientConfig.logger.warn("Missing handlerID for registerCatalystInfo!");
|
||||
return;
|
||||
}
|
||||
final String itemName = tag.getString("itemName");
|
||||
final String nbtInfo = tag.hasKey("nbtInfo") ? tag.getString("nbtInfo") : null;
|
||||
if (itemName.isEmpty()) {
|
||||
NEIClientConfig.logger.warn(String.format("Missing itemName for registerCatalystInfo in `%s`!", handlerID));
|
||||
return;
|
||||
}
|
||||
final ItemStack itemStack = NEIServerUtils.getModdedItem(itemName, nbtInfo);
|
||||
if (itemStack == null) {
|
||||
NEIClientConfig.logger.warn(String.format("Cannot find item `%s`!", itemName));
|
||||
return;
|
||||
}
|
||||
|
||||
if (RecipeCatalysts.catalystsRemoverFromIMC.containsKey(handlerID)) {
|
||||
RecipeCatalysts.catalystsRemoverFromIMC.get(handlerID).add(itemStack);
|
||||
} else {
|
||||
RecipeCatalysts.catalystsRemoverFromIMC.put(handlerID, new ArrayList<>(Collections.singletonList(itemStack)));
|
||||
}
|
||||
NEIClientConfig.logger.info(String.format("Removed catalyst `%s` from handler %s", itemStack.getDisplayName(), handlerID));
|
||||
}
|
||||
|
||||
|
||||
private static void logInvalidMessage(FMLInterModComms.IMCMessage message, String type) {
|
||||
FMLLog.bigWarning(String.format("Received invalid IMC '%s' from %s. Not a %s Message.", message.key, message.getSender(), type));
|
||||
|
||||
@@ -4,8 +4,6 @@ import codechicken.nei.Image;
|
||||
import codechicken.nei.LayoutManager;
|
||||
import codechicken.nei.drawable.DrawableBuilder;
|
||||
import codechicken.nei.drawable.DrawableResource;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import java.awt.Rectangle;
|
||||
|
||||
public class OptionToggleButtonBoubs extends OptionButton {
|
||||
|
||||
@@ -14,6 +14,7 @@ import net.minecraft.util.EnumChatFormatting;
|
||||
import org.lwjgl.input.Keyboard;
|
||||
import org.lwjgl.input.Mouse;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
|
||||
import java.awt.Point;
|
||||
import java.io.PrintWriter;
|
||||
@@ -179,30 +180,47 @@ public class GuiContainerManager
|
||||
}
|
||||
|
||||
public static void drawItem(int i, int j, ItemStack itemstack) {
|
||||
drawItem(i, j, itemstack, getFontRenderer(itemstack));
|
||||
drawItem(i, j, itemstack, false);
|
||||
}
|
||||
|
||||
public static void drawItem(int i, int j, ItemStack itemstack, boolean smallAmount) {
|
||||
drawItem(i, j, itemstack, getFontRenderer(itemstack), smallAmount);
|
||||
drawItem(i, j, itemstack, smallAmount, null);
|
||||
}
|
||||
|
||||
public static void drawItem(int i, int j, ItemStack itemstack, boolean smallAmount, String stackSize) {
|
||||
drawItem(i, j, itemstack, getFontRenderer(itemstack), smallAmount, stackSize);
|
||||
}
|
||||
|
||||
public static void drawItem(int i, int j, ItemStack itemstack, FontRenderer fontRenderer) {
|
||||
drawItem(i, j, itemstack, fontRenderer, false);
|
||||
drawItem(i, j, itemstack, fontRenderer, false, null);
|
||||
}
|
||||
|
||||
private static int modelviewDepth = -1;
|
||||
private static final HashSet<String> stackTraces = new HashSet<>();
|
||||
|
||||
public static void drawItem(int i, int j, ItemStack itemstack, FontRenderer fontRenderer, boolean smallAmount) {
|
||||
public static void drawItem(int i, int j, ItemStack itemstack, FontRenderer fontRenderer, boolean smallAmount, String stackSize) {
|
||||
enable3DRender();
|
||||
//for lighting correction
|
||||
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
|
||||
|
||||
float zLevel = drawItems.zLevel += 100F;
|
||||
try {
|
||||
drawItems.renderItemAndEffectIntoGUI(fontRenderer, renderEngine, itemstack, i, j);
|
||||
|
||||
if (!smallAmount) {
|
||||
drawItems.renderItemOverlayIntoGUI(fontRenderer, renderEngine, itemstack, i, j);
|
||||
} else if (itemstack.stackSize > 1) {
|
||||
drawBigStackSize(i, j, itemstack.stackSize);
|
||||
if (stackSize == null) {
|
||||
stackSize = itemstack.stackSize > 1? String.valueOf(itemstack.stackSize): "";
|
||||
}
|
||||
|
||||
if (smallAmount) {
|
||||
|
||||
if (!stackSize.isEmpty()) {
|
||||
drawBigStackSize(i, j, stackSize);
|
||||
}
|
||||
|
||||
// stackSize = "". it needed for correct draw item with alpha and blend
|
||||
drawItems.renderItemOverlayIntoGUI(fontRenderer, renderEngine, itemstack, i, j, "");
|
||||
} else {
|
||||
drawItems.renderItemOverlayIntoGUI(fontRenderer, renderEngine, itemstack, i, j, stackSize);
|
||||
}
|
||||
|
||||
if (!checkMatrixStack())
|
||||
@@ -227,29 +245,27 @@ public class GuiContainerManager
|
||||
drawItems.renderItemIntoGUI(fontRenderer, renderEngine, new ItemStack(Blocks.fire), i, j);
|
||||
}
|
||||
|
||||
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
|
||||
enable2DRender();
|
||||
drawItems.zLevel = zLevel - 100;
|
||||
}
|
||||
|
||||
//copy from appeng.client.render.AppEngRenderItem
|
||||
protected static void drawBigStackSize(int offsetX, int offsetY, int amount)
|
||||
protected static void drawBigStackSize(int offsetX, int offsetY, String stackSize)
|
||||
{
|
||||
final float scaleFactor = fontRenderer.getUnicodeFlag() ? 0.85f : 0.5f;
|
||||
final float inverseScaleFactor = 1.0f / scaleFactor;
|
||||
final String stackSize = String.valueOf( amount );
|
||||
|
||||
GL11.glDisable(GL11.GL_LIGHTING);
|
||||
GL11.glDisable(GL11.GL_DEPTH_TEST);
|
||||
GL11.glPushMatrix();
|
||||
enable2DRender();
|
||||
GL11.glScaled(scaleFactor, scaleFactor, scaleFactor);
|
||||
|
||||
final int X = (int) ( ( (float) offsetX + 16.0f - fontRenderer.getStringWidth( stackSize ) * scaleFactor ) * inverseScaleFactor );
|
||||
final int Y = (int) ( ( (float) offsetY + 16.0f - 7.0f * scaleFactor ) * inverseScaleFactor );
|
||||
fontRenderer.drawStringWithShadow(stackSize, X, Y, 16777215);
|
||||
|
||||
GL11.glScaled(inverseScaleFactor, inverseScaleFactor, inverseScaleFactor);
|
||||
enable3DRender();
|
||||
|
||||
GL11.glPopMatrix();
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
GL11.glEnable(GL11.GL_DEPTH_TEST);
|
||||
}
|
||||
|
||||
public static void enableMatrixStackLogging() {
|
||||
|
||||
@@ -5,7 +5,6 @@ import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import codechicken.nei.util.NBTJson;
|
||||
import codechicken.nei.NEIClientConfig;
|
||||
import codechicken.nei.PositionedStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@@ -25,15 +24,24 @@ public class BookmarkRecipeId
|
||||
public List<NBTTagCompound> ingredients = new ArrayList<>();
|
||||
|
||||
|
||||
public BookmarkRecipeId(String handlerName, List<PositionedStack> stacks)
|
||||
public BookmarkRecipeId(String handlerName, List<?> stacks)
|
||||
{
|
||||
this.handlerName = handlerName;
|
||||
|
||||
for (PositionedStack pos : stacks) {
|
||||
final NBTTagCompound nbt = StackInfo.itemStackToNBT(getItemStackWithMinimumDamage(pos.items));
|
||||
if (nbt != null) {
|
||||
ingredients.add(nbt);
|
||||
for (Object pos : stacks) {
|
||||
|
||||
if (pos instanceof PositionedStack) {
|
||||
pos = getItemStackWithMinimumDamage(((PositionedStack) pos).items);
|
||||
}
|
||||
|
||||
if (pos instanceof ItemStack) {
|
||||
pos = StackInfo.itemStackToNBT((ItemStack) pos);
|
||||
}
|
||||
|
||||
if (pos instanceof NBTTagCompound) {
|
||||
ingredients.add((NBTTagCompound) pos);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -57,6 +65,11 @@ public class BookmarkRecipeId
|
||||
|
||||
}
|
||||
|
||||
public BookmarkRecipeId()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public boolean equalsIngredients(List<PositionedStack> stacks)
|
||||
{
|
||||
|
||||
@@ -70,7 +83,7 @@ public class BookmarkRecipeId
|
||||
final NBTTagCompound tagCompoundA = StackInfo.itemStackToNBT(getItemStackWithMinimumDamage(pStack.items));
|
||||
final NBTTagCompound tagCompoundB = ingredients.get(idx);
|
||||
|
||||
if (tagCompoundB == null || !tagCompoundA.equals(tagCompoundB)) {
|
||||
if (tagCompoundB == null || !tagCompoundB.equals(tagCompoundA)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -166,4 +179,9 @@ public class BookmarkRecipeId
|
||||
return false;
|
||||
}
|
||||
|
||||
public BookmarkRecipeId copy()
|
||||
{
|
||||
return new BookmarkRecipeId(handlerName, ingredients);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package codechicken.nei.recipe;
|
||||
|
||||
import codechicken.nei.NEICPH;
|
||||
import codechicken.nei.NEIClientConfig;
|
||||
import codechicken.nei.NEIClientUtils;
|
||||
import codechicken.nei.NEIServerUtils;
|
||||
import codechicken.nei.api.INEIGuiAdapter;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
|
||||
public class CheatItemHandler extends INEIGuiAdapter
|
||||
{
|
||||
|
||||
@Override
|
||||
public boolean handleDragNDrop(GuiContainer gui, int mouseX, int mouseY, ItemStack draggedStack, int button)
|
||||
{
|
||||
final Slot overSlot = gui.getSlotAtPosition(mouseX, mouseY);
|
||||
|
||||
if (overSlot != null && overSlot.isItemValid(draggedStack)) {
|
||||
|
||||
if (NEIClientConfig.canCheatItem(draggedStack)) {
|
||||
int contents = overSlot.getHasStack() ? overSlot.getStack().stackSize : 0;
|
||||
final int add = button == 0 ? draggedStack.stackSize : 1;
|
||||
|
||||
if (overSlot.getHasStack() && !NEIServerUtils.areStacksSameType(draggedStack, overSlot.getStack())) {
|
||||
contents = 0;
|
||||
}
|
||||
|
||||
final int total = Math.min(contents + add, Math.min(overSlot.getSlotStackLimit(), draggedStack.getMaxStackSize()));
|
||||
|
||||
if (total > contents) {
|
||||
NEIClientUtils.setSlotContents(overSlot.slotNumber, NEIServerUtils.copyStack(draggedStack, total), true);
|
||||
NEICPH.sendGiveItem(NEIServerUtils.copyStack(draggedStack, total), false, false);
|
||||
draggedStack.stackSize -= total - contents;
|
||||
}
|
||||
|
||||
} else {
|
||||
draggedStack.stackSize = 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
package codechicken.nei.recipe;
|
||||
|
||||
import codechicken.nei.ItemPanel.ItemPanelSlot;
|
||||
import codechicken.nei.ItemPanels;
|
||||
import codechicken.nei.api.INEIGuiAdapter;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.FluidContainerRegistry;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.IFluidContainerItem;
|
||||
|
||||
public class FillFluidContainerHandler extends INEIGuiAdapter
|
||||
{
|
||||
|
||||
@Override
|
||||
public boolean handleDragNDrop(GuiContainer gui, int mouseX, int mouseY, ItemStack draggedStack, int button)
|
||||
{
|
||||
|
||||
if (button == 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (draggedStack.getItem() instanceof IFluidContainerItem || FluidContainerRegistry.isContainer(draggedStack)) {
|
||||
ItemPanelSlot mouseOverSlot = ItemPanels.itemPanel.getSlotMouseOver(mouseX, mouseY);
|
||||
|
||||
if (mouseOverSlot == null) {
|
||||
mouseOverSlot = ItemPanels.bookmarkPanel.getSlotMouseOver(mouseX, mouseY);
|
||||
}
|
||||
|
||||
if (mouseOverSlot != null) {
|
||||
FluidStack fluidStack = StackInfo.getFluid(mouseOverSlot.item);
|
||||
|
||||
if (fluidStack != null) {
|
||||
ItemStack container = fillContainer(draggedStack, fluidStack);
|
||||
|
||||
if (container != null) {
|
||||
container.stackSize = draggedStack.stackSize;
|
||||
|
||||
if (ItemPanels.itemPanel.draggedStack != null) {
|
||||
ItemPanels.itemPanel.draggedStack = container;
|
||||
} else {
|
||||
ItemPanels.bookmarkPanel.draggedStack = container;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (button == 1 && StackInfo.getFluid(container != null? container: draggedStack) != null) {
|
||||
ItemPanels.bookmarkPanel.addOrRemoveItem((container != null? container: draggedStack).copy());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected ItemStack fillContainer(ItemStack draggedStack, FluidStack fluidStack)
|
||||
{
|
||||
fluidStack = fluidStack.copy();
|
||||
draggedStack = draggedStack.copy();
|
||||
draggedStack.stackSize = 1;
|
||||
|
||||
if (fluidStack.amount == 0) {
|
||||
fluidStack.amount = 1000;
|
||||
}
|
||||
|
||||
if (FluidContainerRegistry.isContainer(draggedStack)) {
|
||||
|
||||
if (FluidContainerRegistry.getContainerCapacity(draggedStack) > 0) {
|
||||
draggedStack = FluidContainerRegistry.drainFluidContainer(draggedStack);
|
||||
}
|
||||
|
||||
return FluidContainerRegistry.fillFluidContainer(fluidStack, draggedStack);
|
||||
} else if (draggedStack.getItem() instanceof IFluidContainerItem) {
|
||||
IFluidContainerItem item = (IFluidContainerItem) draggedStack.getItem();
|
||||
|
||||
if (item.getCapacity(draggedStack) > 0) {
|
||||
item.drain(draggedStack, item.getCapacity(draggedStack), true);
|
||||
}
|
||||
|
||||
if (item.fill(draggedStack, fluidStack, true) > 0) {
|
||||
return draggedStack;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,41 +2,57 @@ package codechicken.nei.recipe;
|
||||
|
||||
import codechicken.core.TaskProfiler;
|
||||
import codechicken.nei.ItemList;
|
||||
import codechicken.nei.ItemPanels;
|
||||
import codechicken.nei.NEIClientConfig;
|
||||
import codechicken.nei.NEIClientUtils;
|
||||
import codechicken.nei.PositionedStack;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import codechicken.nei.ItemPanels;
|
||||
import net.minecraft.util.ChatComponentTranslation;
|
||||
import net.minecraft.util.EnumChatFormatting;
|
||||
import net.minecraft.util.IChatComponent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class GuiCraftingRecipe extends GuiRecipe
|
||||
{
|
||||
public class GuiCraftingRecipe extends GuiRecipe {
|
||||
public static boolean openRecipeGui(String outputId, Object... results) {
|
||||
return openRecipeGui(outputId, false, results);
|
||||
}
|
||||
|
||||
|
||||
public static boolean openRecipeGui(String outputId, Boolean overlay, Object... results) {
|
||||
Minecraft mc = NEIClientUtils.mc();
|
||||
GuiScreen prevscreen = mc.currentScreen;// instanceof GuiContainer ? (GuiContainer) mc.currentScreen : null;
|
||||
|
||||
ArrayList<ICraftingHandler> handlers;
|
||||
TaskProfiler profiler = ProfilerRecipeHandler.getProfiler();
|
||||
profiler.start("recipe.concurrent.crafting");
|
||||
|
||||
|
||||
// Pre-find the fuels so we're not fighting over it
|
||||
FuelRecipeHandler.findFuelsOnceParallel();
|
||||
|
||||
try {
|
||||
handlers = serialCraftingHandlers.stream().map(h -> h.getRecipeHandler(outputId, results))
|
||||
.filter(h -> h.numRecipes() > 0)
|
||||
.collect(Collectors.toCollection(ArrayList::new));
|
||||
.filter(h -> h.numRecipes() > 0)
|
||||
.collect(Collectors.toCollection(ArrayList::new));
|
||||
|
||||
handlers.addAll(ItemList.forkJoinPool.submit(() -> craftinghandlers.parallelStream()
|
||||
.map(h -> h.getRecipeHandler(outputId, results))
|
||||
.filter(h -> h.numRecipes() > 0)
|
||||
.collect(Collectors.toCollection(ArrayList::new))).get());
|
||||
.map(h -> h.getRecipeHandler(outputId, results))
|
||||
.filter(h -> h.numRecipes() > 0)
|
||||
.collect(Collectors.toCollection(ArrayList::new))).get());
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
e.printStackTrace();
|
||||
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
|
||||
if (player != null) {
|
||||
IChatComponent chat = new ChatComponentTranslation("nei.chat.recipe.error");
|
||||
chat.getChatStyle().setColor(EnumChatFormatting.RED);
|
||||
player.addChatComponentMessage(chat);
|
||||
}
|
||||
return false;
|
||||
} finally {
|
||||
profiler.end();
|
||||
@@ -47,18 +63,49 @@ public class GuiCraftingRecipe extends GuiRecipe
|
||||
|
||||
handlers.sort(NEIClientConfig.HANDLER_COMPARATOR);
|
||||
|
||||
mc.displayGuiScreen(new GuiCraftingRecipe(prevscreen, handlers));
|
||||
|
||||
if (NEIClientConfig.saveCurrentRecipeInBookmarksEnabled() && !NEIClientUtils.shiftKey() && outputId.equals("item") && mc.currentScreen instanceof GuiRecipe) {
|
||||
GuiCraftingRecipe.openTargetRecipe((GuiRecipe)mc.currentScreen, (ItemStack)results[0]);
|
||||
BookmarkRecipeId recipeId = null;
|
||||
|
||||
if ("item".equals(outputId)) {
|
||||
recipeId = getRecipeId(prevscreen, (ItemStack) results[0]);
|
||||
}
|
||||
|
||||
GuiCraftingRecipe gui = new GuiCraftingRecipe(prevscreen, handlers, recipeId);
|
||||
|
||||
mc.displayGuiScreen(gui);
|
||||
|
||||
if (NEIClientConfig.saveCurrentRecipeInBookmarksEnabled())
|
||||
if (!NEIClientUtils.shiftKey() || overlay) {
|
||||
gui.openTargetRecipe(gui.recipeId);
|
||||
}
|
||||
|
||||
if (overlay) {
|
||||
if (!NEIClientConfig.saveCurrentRecipeInBookmarksEnabled() || gui.recipeId == null) {
|
||||
mc.displayGuiScreen(prevscreen);
|
||||
return false;
|
||||
}
|
||||
gui.overlayRecipe(gui.recipeId.position);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected static void openTargetRecipe(GuiRecipe currentScreen, ItemStack stackover)
|
||||
{
|
||||
currentScreen.openTargetRecipe(ItemPanels.bookmarkPanel.getBookmarkRecipeId(stackover));
|
||||
protected static BookmarkRecipeId getRecipeId(GuiScreen gui, ItemStack stackover) {
|
||||
|
||||
if (gui instanceof GuiRecipe) {
|
||||
final List<PositionedStack> ingredients = ((GuiRecipe) gui).getFocusedRecipeIngredients();
|
||||
final String handlerName = ((GuiRecipe) gui).getHandlerName();
|
||||
|
||||
if (ingredients != null && !ingredients.isEmpty()) {
|
||||
return new BookmarkRecipeId(handlerName, ingredients);
|
||||
}
|
||||
}
|
||||
|
||||
return ItemPanels.bookmarkPanel.getBookmarkRecipeId(stackover);
|
||||
}
|
||||
|
||||
private GuiCraftingRecipe(GuiScreen prevgui, ArrayList<ICraftingHandler> handlers, BookmarkRecipeId recipeId) {
|
||||
this(prevgui, handlers);
|
||||
this.recipeId = recipeId;
|
||||
}
|
||||
|
||||
private GuiCraftingRecipe(GuiScreen prevgui, ArrayList<ICraftingHandler> handlers) {
|
||||
@@ -68,10 +115,10 @@ public class GuiCraftingRecipe extends GuiRecipe
|
||||
|
||||
public static void registerRecipeHandler(ICraftingHandler handler) {
|
||||
final String handlerId = handler.getHandlerId();
|
||||
if(craftinghandlers.stream().anyMatch(h -> h.getHandlerId().equals(handlerId)) || serialCraftingHandlers.stream().anyMatch(h -> h.getHandlerId().equals(handlerId)))
|
||||
if (craftinghandlers.stream().anyMatch(h -> h.getHandlerId().equals(handlerId)) || serialCraftingHandlers.stream().anyMatch(h -> h.getHandlerId().equals(handlerId)))
|
||||
return;
|
||||
|
||||
if(NEIClientConfig.serialHandlers.contains(handlerId))
|
||||
if (NEIClientConfig.serialHandlers.contains(handlerId))
|
||||
serialCraftingHandlers.add(handler);
|
||||
else
|
||||
craftinghandlers.add(handler);
|
||||
|
||||
@@ -63,8 +63,10 @@ public abstract class GuiRecipe extends GuiContainer implements IGuiContainerOve
|
||||
|
||||
public int page;
|
||||
public int recipetype;
|
||||
public BookmarkRecipeId recipeId;
|
||||
public ContainerRecipe slotcontainer;
|
||||
public GuiContainer firstGui;
|
||||
public GuiScreen firstGuiGeneral;
|
||||
public GuiScreen prevGui;
|
||||
public GuiButton nextpage;
|
||||
public GuiButton prevpage;
|
||||
@@ -89,12 +91,15 @@ public abstract class GuiRecipe extends GuiContainer implements IGuiContainerOve
|
||||
slotcontainer = (ContainerRecipe) inventorySlots;
|
||||
|
||||
this.prevGui = prevgui;
|
||||
this.firstGuiGeneral = prevgui;
|
||||
if(prevgui instanceof GuiContainer)
|
||||
this.firstGui = (GuiContainer)prevgui;
|
||||
|
||||
if (prevgui instanceof IGuiContainerOverlay)
|
||||
if (prevgui instanceof IGuiContainerOverlay) {
|
||||
this.firstGui = ((IGuiContainerOverlay) prevgui).getFirstScreen();
|
||||
|
||||
this.firstGuiGeneral = ((IGuiContainerOverlay) prevgui).getFirstScreenGeneral();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -311,7 +316,7 @@ public abstract class GuiRecipe extends GuiContainer implements IGuiContainerOve
|
||||
public void keyTyped(char c, int i) {
|
||||
if (i == Keyboard.KEY_ESCAPE) //esc
|
||||
{
|
||||
mc.displayGuiScreen(firstGui);
|
||||
mc.displayGuiScreen(firstGuiGeneral);
|
||||
return;
|
||||
}
|
||||
if (GuiContainerManager.getManager(this).lastKeyTyped(i, c))
|
||||
@@ -324,7 +329,7 @@ public abstract class GuiRecipe extends GuiContainer implements IGuiContainerOve
|
||||
}
|
||||
|
||||
if (i == mc.gameSettings.keyBindInventory.getKeyCode())
|
||||
mc.displayGuiScreen(firstGui);
|
||||
mc.displayGuiScreen(firstGuiGeneral);
|
||||
else if (i == NEIClientConfig.getKeyBinding("gui.back"))
|
||||
mc.displayGuiScreen(prevGui);
|
||||
else if (i == NEIClientConfig.getKeyBinding("gui.prev_machine"))
|
||||
@@ -441,16 +446,19 @@ public abstract class GuiRecipe extends GuiContainer implements IGuiContainerOve
|
||||
setRecipePage(--recipetype);
|
||||
}
|
||||
|
||||
private void overlayRecipe(int recipe) {
|
||||
protected void overlayRecipe(int recipe) {
|
||||
if (handler == null || !handler.hasOverlay(firstGui, firstGui.inventorySlots, recipe)) {
|
||||
mc.displayGuiScreen(firstGui);
|
||||
return;
|
||||
}
|
||||
final IRecipeOverlayRenderer renderer = handler.getOverlayRenderer(firstGui, recipe);
|
||||
final IOverlayHandler overlayHandler = handler.getOverlayHandler(firstGui, recipe);
|
||||
final boolean shift = NEIClientUtils.shiftKey();
|
||||
|
||||
if (handler != null && (renderer == null || shift)) {
|
||||
mc.displayGuiScreen(firstGui);
|
||||
mc.displayGuiScreen(firstGui);
|
||||
if (renderer == null || shift) {
|
||||
overlayHandler.overlayRecipe(firstGui, currenthandlers.get(recipetype), recipe, shift);
|
||||
} else if (renderer != null) {
|
||||
mc.displayGuiScreen(firstGui);
|
||||
} else {
|
||||
LayoutManager.overlayRenderer = renderer;
|
||||
}
|
||||
}
|
||||
@@ -644,6 +652,11 @@ public abstract class GuiRecipe extends GuiContainer implements IGuiContainerOve
|
||||
return firstGui;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GuiScreen getFirstScreenGeneral() {
|
||||
return firstGuiGeneral;
|
||||
}
|
||||
|
||||
public boolean isMouseOver(PositionedStack stack, int recipe) {
|
||||
Slot stackSlot = slotcontainer.getSlotWithStack(stack, getRecipePosition(recipe).x, getRecipePosition(recipe).y);
|
||||
Point mousepos = GuiDraw.getMousePosition();
|
||||
|
||||
@@ -6,6 +6,10 @@ import codechicken.nei.NEIClientConfig;
|
||||
import codechicken.nei.NEIClientUtils;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.ChatComponentTranslation;
|
||||
import net.minecraft.util.EnumChatFormatting;
|
||||
import net.minecraft.util.IChatComponent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
@@ -35,6 +39,12 @@ public class GuiUsageRecipe extends GuiRecipe
|
||||
.collect(Collectors.toCollection(ArrayList::new))).get());
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
e.printStackTrace();
|
||||
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
|
||||
if (player != null) {
|
||||
IChatComponent chat = new ChatComponentTranslation("nei.chat.recipe.error");
|
||||
chat.getChatStyle().setColor(EnumChatFormatting.RED);
|
||||
player.addChatComponentMessage(chat);
|
||||
}
|
||||
return false;
|
||||
} finally {
|
||||
profiler.end();
|
||||
@@ -45,10 +55,29 @@ public class GuiUsageRecipe extends GuiRecipe
|
||||
|
||||
handlers.sort(NEIClientConfig.HANDLER_COMPARATOR);
|
||||
|
||||
mc.displayGuiScreen(new GuiUsageRecipe(prevscreen, handlers));
|
||||
BookmarkRecipeId recipeId = null;
|
||||
|
||||
if (prevscreen instanceof GuiRecipe && ((GuiRecipe) prevscreen).recipeId != null) {
|
||||
recipeId = (((GuiRecipe) prevscreen).recipeId).copy();
|
||||
}
|
||||
|
||||
GuiUsageRecipe gui = new GuiUsageRecipe(prevscreen, handlers, recipeId);
|
||||
|
||||
mc.displayGuiScreen(gui);
|
||||
|
||||
if (!NEIClientUtils.shiftKey()) {
|
||||
gui.openTargetRecipe(recipeId);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private GuiUsageRecipe(GuiContainer prevgui, ArrayList<IUsageHandler> handlers, BookmarkRecipeId recipeId)
|
||||
{
|
||||
this(prevgui, handlers);
|
||||
this.recipeId = recipeId;
|
||||
}
|
||||
|
||||
private GuiUsageRecipe(GuiContainer prevgui, ArrayList<IUsageHandler> handlers) {
|
||||
super(prevgui);
|
||||
currenthandlers = handlers;
|
||||
|
||||
@@ -29,6 +29,8 @@ import java.util.Map;
|
||||
public class RecipeCatalysts {
|
||||
private static final Map<String, CatalystInfoList> catalystsAdderFromAPI = new HashMap<>();
|
||||
private static final Map<String, List<ItemStack>> catalystsRemoverFromAPI = new HashMap<>();
|
||||
public static final Map<String, CatalystInfoList> catalystsAdderFromIMC = new HashMap<>();
|
||||
public static final Map<String, List<ItemStack>> catalystsRemoverFromIMC = new HashMap<>();
|
||||
private static final Map<String, CatalystInfoList> recipeCatalystMap = new HashMap<>();
|
||||
private static Map<String, List<PositionedStack>> positionedRecipeCatalystMap = new HashMap<>();
|
||||
private static final List<String> forceClassNameList = new ArrayList<>();
|
||||
@@ -161,6 +163,7 @@ public class RecipeCatalysts {
|
||||
// todo
|
||||
final String minVersion = record.get("minVersion");
|
||||
final String maxVersion = record.get("maxVersion");
|
||||
//
|
||||
final boolean forceClassName = Boolean.parseBoolean(record.get("forceClassName"));
|
||||
|
||||
if (requiresMod && !Loader.isModLoaded(modId)) continue;
|
||||
@@ -209,6 +212,13 @@ public class RecipeCatalysts {
|
||||
}
|
||||
}
|
||||
|
||||
for (Map.Entry<String, CatalystInfoList> entry : catalystsAdderFromIMC.entrySet()) {
|
||||
String handlerID = entry.getKey();
|
||||
for (CatalystInfo catalyst : entry.getValue()) {
|
||||
addOrPut(recipeCatalystMap, handlerID, catalyst);
|
||||
}
|
||||
}
|
||||
|
||||
for (Map.Entry<String, List<ItemStack>> entry : catalystsRemoverFromAPI.entrySet()) {
|
||||
String handlerID = entry.getKey();
|
||||
if (recipeCatalystMap.containsKey(handlerID)) {
|
||||
@@ -217,6 +227,14 @@ public class RecipeCatalysts {
|
||||
}
|
||||
}
|
||||
|
||||
for (Map.Entry<String, List<ItemStack>> entry : catalystsRemoverFromIMC.entrySet()) {
|
||||
String handlerID = entry.getKey();
|
||||
if (recipeCatalystMap.containsKey(handlerID)) {
|
||||
CatalystInfoList catalysts = recipeCatalystMap.get(handlerID);
|
||||
entry.getValue().forEach(catalysts::remove);
|
||||
}
|
||||
}
|
||||
|
||||
updatePosition(getHeight(), true);
|
||||
}
|
||||
|
||||
@@ -234,7 +252,7 @@ public class RecipeCatalysts {
|
||||
handler.getHandlerId());
|
||||
}
|
||||
|
||||
private static void addOrPut(Map<String, CatalystInfoList> map, String handlerID, CatalystInfo catalyst) {
|
||||
public static void addOrPut(Map<String, CatalystInfoList> map, String handlerID, CatalystInfo catalyst) {
|
||||
if (map.containsKey(handlerID)) {
|
||||
map.get(handlerID).add(catalyst);
|
||||
} else {
|
||||
|
||||
@@ -1,29 +1,27 @@
|
||||
package codechicken.nei.recipe;
|
||||
|
||||
import codechicken.nei.ItemPanels;
|
||||
import codechicken.nei.LayoutManager;
|
||||
import codechicken.nei.NEIClientConfig;
|
||||
import codechicken.nei.NEIClientUtils;
|
||||
import codechicken.nei.PositionedStack;
|
||||
import codechicken.nei.guihook.GuiContainerManager;
|
||||
import codechicken.nei.guihook.IContainerInputHandler;
|
||||
import codechicken.nei.PositionedStack;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class RecipeItemInputHandler implements IContainerInputHandler
|
||||
{
|
||||
public class RecipeItemInputHandler implements IContainerInputHandler {
|
||||
@Override
|
||||
public boolean lastKeyTyped(GuiContainer gui, char keyChar, int keyCode)
|
||||
{
|
||||
public boolean lastKeyTyped(GuiContainer gui, char keyChar, int keyCode) {
|
||||
ItemStack stackover = GuiContainerManager.getStackMouseOver(gui);
|
||||
if(stackover == null)
|
||||
return false;
|
||||
if (stackover == null) return false;
|
||||
|
||||
if(keyCode == NEIClientConfig.getKeyBinding("gui.recipe"))
|
||||
if (keyCode == NEIClientConfig.getKeyBinding("gui.recipe"))
|
||||
return GuiCraftingRecipe.openRecipeGui("item", stackover.copy());
|
||||
|
||||
if(keyCode == NEIClientConfig.getKeyBinding("gui.usage"))
|
||||
if (keyCode == NEIClientConfig.getKeyBinding("gui.usage"))
|
||||
return GuiUsageRecipe.openRecipeGui("item", stackover.copy());
|
||||
|
||||
if (keyCode == NEIClientConfig.getKeyBinding("gui.bookmark")) {
|
||||
@@ -39,68 +37,68 @@ public class RecipeItemInputHandler implements IContainerInputHandler
|
||||
ItemPanels.bookmarkPanel.addOrRemoveItem(stackover.copy(), handlerName, ingredients);
|
||||
}
|
||||
|
||||
if (keyCode == NEIClientConfig.getKeyBinding("gui.overlay")) {
|
||||
if (NEIClientUtils.controlKey()) {
|
||||
LayoutManager.overlayRenderer = null;
|
||||
return true;
|
||||
}
|
||||
if (!NEIClientConfig.saveCurrentRecipeInBookmarksEnabled()) return false;
|
||||
final BookmarkRecipeId mouseOverRecipeId = ItemPanels.bookmarkPanel.getBookmarkMouseOverRecipeId();
|
||||
if (mouseOverRecipeId == null || mouseOverRecipeId.ingredients == null || mouseOverRecipeId.ingredients.isEmpty())
|
||||
return false;
|
||||
return GuiCraftingRecipe.openRecipeGui("item", true, stackover.copy());
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseClicked(GuiContainer gui, int mousex, int mousey, int button)
|
||||
{
|
||||
public boolean mouseClicked(GuiContainer gui, int mousex, int mousey, int button) {
|
||||
ItemStack stackover = GuiContainerManager.getStackMouseOver(gui);
|
||||
|
||||
if(stackover == null)
|
||||
return false;
|
||||
if (stackover == null) return false;
|
||||
|
||||
if (!(gui instanceof GuiRecipe))
|
||||
return false;
|
||||
if (!(gui instanceof GuiRecipe)) return false;
|
||||
|
||||
//disabled open recipe gui if hold shift (player have move recipe)
|
||||
if (button == 0 && ItemPanels.bookmarkPanel.getStackMouseOver(mousex, mousey) != null && NEIClientUtils.shiftKey()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(button == 0)
|
||||
return GuiCraftingRecipe.openRecipeGui("item", stackover.copy());
|
||||
if (button == 0) return GuiCraftingRecipe.openRecipeGui("item", stackover.copy());
|
||||
|
||||
if(button == 1)
|
||||
return GuiUsageRecipe.openRecipeGui("item", stackover.copy());
|
||||
if (button == 1) return GuiUsageRecipe.openRecipeGui("item", stackover.copy());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onKeyTyped(GuiContainer gui, char keyChar, int keyID)
|
||||
{
|
||||
public void onKeyTyped(GuiContainer gui, char keyChar, int keyID) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMouseClicked(GuiContainer gui, int mousex, int mousey, int button)
|
||||
{
|
||||
public void onMouseClicked(GuiContainer gui, int mousex, int mousey, int button) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMouseUp(GuiContainer gui, int mousex, int mousey, int button)
|
||||
{
|
||||
public void onMouseUp(GuiContainer gui, int mousex, int mousey, int button) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyTyped(GuiContainer gui, char keyChar, int keyID)
|
||||
{
|
||||
public boolean keyTyped(GuiContainer gui, char keyChar, int keyID) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled)
|
||||
{
|
||||
public boolean mouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled)
|
||||
{
|
||||
public void onMouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMouseDragged(GuiContainer gui, int mousex, int mousey, int button, long heldTime)
|
||||
{
|
||||
public void onMouseDragged(GuiContainer gui, int mousex, int mousey, int button, long heldTime) {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package codechicken.nei.recipe;
|
||||
|
||||
import codechicken.nei.api.INEIGuiAdapter;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraft.util.EnumChatFormatting;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
import static codechicken.nei.LayoutManager.searchField;
|
||||
|
||||
public class SearchInputDropHandler extends INEIGuiAdapter
|
||||
{
|
||||
|
||||
protected static final Pattern SPECIAL_REGEX_CHARS = Pattern.compile("[{}()\\[\\].+*?^$\\\\|]");
|
||||
|
||||
@Override
|
||||
public boolean handleDragNDrop(GuiContainer gui, int mouseX, int mouseY, ItemStack draggedStack, int button)
|
||||
{
|
||||
|
||||
if (searchField.contains(mouseX, mouseY)) {
|
||||
final FluidStack fluidStack = StackInfo.getFluid(draggedStack);
|
||||
|
||||
if (fluidStack != null) {
|
||||
searchField.setText(formattingText(fluidStack.getLocalizedName()));
|
||||
} else {
|
||||
searchField.setText(formattingText(draggedStack.getDisplayName()));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected String formattingText(String displayName)
|
||||
{
|
||||
return SPECIAL_REGEX_CHARS.matcher(EnumChatFormatting.getTextWithoutFormattingCodes(displayName)).replaceAll("\\\\$0");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,8 +1,9 @@
|
||||
handler,itemName,nbtInfo,modId,modRequired,excludedModId,priority,minVersion,maxVersion,forceClassName,itemNotes
|
||||
crafting,minecraft:crafting_table,,minecraft,FALSE,,100,,,,
|
||||
smelting,minecraft:furnace,,minecraft,FALSE,,100,,,,
|
||||
codechicken.nei.recipe.BrewingRecipeHandler,minecraft:brewing_stand,,minecraft,FALSE,,100,,,,
|
||||
codechicken.nei.recipe.FuelRecipeHandler,minecraft:furnace,,minecraft,FALSE,,100,,,,
|
||||
crafting,minecraft:crafting_table,,minecraft,FALSE,terrafirmacraftplus,100,,,,
|
||||
smelting,minecraft:furnace,,minecraft,FALSE,terrafirmacraftplus,100,,,,
|
||||
codechicken.nei.recipe.BrewingRecipeHandler,minecraft:brewing_stand,,minecraft,FALSE,terrafirmacraftplus,100,,,,
|
||||
codechicken.nei.recipe.FuelRecipeHandler,minecraft:furnace,,minecraft,FALSE,terrafirmacraftplus,100,,,,
|
||||
crafting,terrafirmacraftplus:Workbench,,terrafirmacraftplus,TRUE,,100,,,,TFC workbench
|
||||
advsolar.client.nei.MTRecipeHandler,AdvancedSolarPanel:BlockMolecularTransformer,,AdvancedSolarPanel,TRUE,,,,,,
|
||||
crafting,appliedenergistics2:item.ItemMultiPart:360,,appliedenergistics2,TRUE,,,,,,
|
||||
appeng.integration.modules.NEIHelpers.NEIGrinderRecipeHandler,appliedenergistics2:tile.BlockGrinder,,appliedenergistics2,TRUE,dreamcraft,,,,,
|
||||
@@ -79,8 +80,8 @@ net.bdew.gendustry.nei.ReplicatorHandler,gendustry:Replicator,,gendustry,TRUE,,,
|
||||
net.bdew.gendustry.nei.SamplerHandler,gendustry:Sampler,,gendustry,TRUE,,,,,,
|
||||
net.bdew.gendustry.nei.TransposerHandler,gendustry:Transposer,,gendustry,TRUE,,,,,,
|
||||
smelting,IC2:blockMachine:1,,IC2,TRUE,,,,,,
|
||||
smelting,IC2:blockMachine:2,,IC2,TRUE,,,,,,
|
||||
smelting,IC2:blockMachine:13,,IC2,TRUE,,,,,,
|
||||
smelting,IC2:blockMachine:2,,IC2,TRUE,dreamcraft,,,,,
|
||||
smelting,IC2:blockMachine:13,,IC2,TRUE,dreamcraft,,,,,
|
||||
ic2.neiIntegration.core.recipehandler.BlastFurnaceRecipeHandler,IC2:blockMachine3:1,,IC2,TRUE,,,,,,
|
||||
ic2.neiIntegration.core.recipehandler.BlockCutterRecipeHandler,IC2:blockMachine3:2,,IC2,TRUE,,,,,,
|
||||
ic2.neiIntegration.core.recipehandler.CentrifugeRecipeHandler,IC2:blockMachine2:3,,IC2,TRUE,,,,,,
|
||||
@@ -243,27 +244,170 @@ vazkii.botania.client.integration.nei.recipe.RecipeHandlerManaPool,Botania:pool:
|
||||
vazkii.botania.client.integration.nei.recipe.RecipeHandlerElvenTrade,Botania:alfheimPortal,,Botania,TRUE,,,,,,
|
||||
vazkii.botania.client.integration.nei.recipe.RecipeHandlerBrewery,Botania:brewery,,Botania,TRUE,,,,,,
|
||||
vazkii.botania.client.integration.nei.recipe.RecipeHandlerPureDaisy,Botania:specialFlower,"{type:puredaisy}",Botania,TRUE,,,,,,"todo: when I look up usage or crafting for flower, other flowers also show up."
|
||||
net.dries007.tfcnei.recipeHandlers.AnvilRecipeHandler,terrafirmacraftplus:Anvil,,terrafirmacraftplus,TRUE,,,,,,All TFC catalysts listed below are automatically converted from handlers.csv and untested. Feel free to make changes and submit PRs.
|
||||
ieArcFurnace,ImmersiveEngineering:metalMultiblock:8,,ImmersiveEngineering,TRUE,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIShaderBagHandler,ImmersiveEngineering:shaderBag,,ImmersiveEngineering,TRUE,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIBlueprintHandler,ImmersiveEngineering:woodenDevice:5,,ImmersiveEngineering,TRUE,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEICokeOvenHandler,ImmersiveEngineering:stoneDecoration:1,,ImmersiveEngineering,TRUE,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIBlastFurnaceHandler,ImmersiveEngineering:stoneDecoration:2,,ImmersiveEngineering,TRUE,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIBlastFurnaceHandler,ImmersiveEngineering:stoneDecoration:6,,ImmersiveEngineering,TRUE,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEISqueezerHandler,ImmersiveEngineering:metalMultiblock:2,,ImmersiveEngineering,TRUE,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIFermenterHandler,ImmersiveEngineering:metalMultiblock:3,,ImmersiveEngineering,TRUE,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIRefineryHandler,ImmersiveEngineering:metalMultiblock:4,,ImmersiveEngineering,TRUE,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIMetalPressHandler,ImmersiveEngineering:metalMultiblock:13,,ImmersiveEngineering,TRUE,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEICrusherHandler,ImmersiveEngineering:metalMultiblock:5,,ImmersiveEngineering,TRUE,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.CrystallizerNEI,advancedRocketry:crystallizer,,advancedRocketry,TRUE,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.PrecisionAssemberNEI,advancedRocketry:precisionassemblingmachine,,advancedRocketry,TRUE,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.CuttingMachineNEI,advancedRocketry:tile.cuttingMachine,,advancedRocketry,TRUE,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.BlastFurnaceNEI,advancedRocketry:tile.electricArcFurnace,,advancedRocketry,TRUE,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.ElectrolyserNEI,advancedRocketry:tile.electrolyser,,advancedRocketry,TRUE,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.LatheNEI,advancedRocketry:tile.lathe,,advancedRocketry,TRUE,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.ChemicalReactorNEI,advancedRocketry:tile.chemreactor,,advancedRocketry,TRUE,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.PlatePresserNEI,advancedRocketry:tile.blockHandPress,,advancedRocketry,TRUE,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.RollingMachineNEI,advancedRocketry:tile.rollingMachine,,advancedRocketry,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AnvilRecipeHandler,terrafirmacraftplus:Anvil:1,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AnvilRecipeHandler,terrafirmacraftplus:Anvil:2,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AnvilRecipeHandler,terrafirmacraftplus:Anvil:3,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AnvilRecipeHandler,terrafirmacraftplus:Anvil:4,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AnvilRecipeHandler,terrafirmacraftplus:Anvil:5,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AnvilRecipeHandler,terrafirmacraftplus:Anvil:6,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AnvilRecipeHandler,terrafirmacraftplus:Anvil:7,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AnvilRecipeHandler,terrafirmacraftplus:Anvil2,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AnvilRecipeHandler,terrafirmacraftplus:Anvil2:1,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AnvilRecipeHandler,terrafirmacraftplus:Anvil2:2,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.QuernRecipeHandler,terrafirmacraftplus:item.Quern,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.QuernRecipeHandler,terrafirmacraftplus:Quern,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KilnRecipeHandler,,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:1,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:2,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:3,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:4,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:5,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:6,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:7,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:8,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:9,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:10,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:11,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:12,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:13,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:14,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:15,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:16,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:17,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:18,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:19,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:20,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:21,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:22,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:23,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:24,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:25,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:26,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:27,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:28,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:29,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:30,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:31,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.LoomRecipeHandler,terrafirmacraftplus:Loom:32,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:1,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:2,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:3,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:4,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:5,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:6,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:7,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:9,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:10,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:11,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:12,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:13,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:14,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:15,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:16,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:17,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:18,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:19,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LooseRock:20,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.Clay,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.Clay:1,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.Straw,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.CottonCloth,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.WoolCloth,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.LinenCloth,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.SilkCloth,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.BurlapCloth,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.TFC Leather,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.Hide,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.Hide:1,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.Hide:2,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.Wolf Fur,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.Wolf Fur:1,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.Wolf Fur:2,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.Fur,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.Fur:1,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.Fur:2,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.Bear Fur,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.Bear Fur:1,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KnappingRecipeHandler,terrafirmacraftplus:item.Bear Fur:2,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.ClothingRecipeHandler,terrafirmacraftplus:item.Bone Needle Thread,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.ClothingRecipeHandler,terrafirmacraftplus:item.Iron Needle Thread,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:1,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:2,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:3,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:4,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:5,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:6,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:7,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:8,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:9,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:10,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:11,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:12,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:13,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:14,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:15,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:16,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:17,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:18,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:19,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:20,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:21,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:22,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:23,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:24,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:25,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:26,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:27,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:28,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:29,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:30,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:31,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Barrel:32,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,terrafirmacraftplus:Vessel:1,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.HeatRecipeHandler,terrafirmacraftplus:Firepit,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.HeatRecipeHandler,terrafirmacraftplus:Grill,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.HeatRecipeHandler,terrafirmacraftplus:Forge,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.HeatRecipeHandler,terrafirmacraftplus:Crucible,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AlloyRecipeHandler,terrafirmacraftplus:Firepit,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AlloyRecipeHandler,terrafirmacraftplus:item.Small Vessel:1,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AlloyRecipeHandler,terrafirmacraftplus:Crucible,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.HeatRecipeHandler,terrafirmacraftplus:Firepit,,terrafirmacraftplus,TRUE,,,,,,TFC end
|
||||
net.dries007.tfcnei.recipeHandlers.AlloyRecipeHandler,terrafirmacraftplus:EarlyBloomery,,terrafirmacraftplus,TRUE,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AlloyRecipeHandler,terrafirmacraftplus:Bloomery,,terrafirmacraftplus,TRUE,,,,,,TFC End
|
||||
minechem.nei.DecomposerNEIRecipeHandler,minechem:tile.chemicalDecomposer,,minechem,TRUE,,,,,,
|
||||
minechem.nei.SynthesisNEIRecipeHandler,minechem:tile.chemicalSynthesizer,,minechem,TRUE,,,,,,
|
||||
exter.fodc.nei.ODCRecipeHandler,fodc:oreConverter,,fodc,TRUE,,,,,,
|
||||
exter.fodc.nei.ODCRecipeHandler,fodc:oreConvTable,,fodc,TRUE,,,,,,
|
||||
exter.fodc.nei.ODCRecipeHandler,fodc:oreAutoconverter,,fodc,TRUE,,,,,,
|
||||
cofh.thermalexpansion.plugins.nei.handlers.RecipeHandlerCharger,ThermalExpansion:Machine:10,,ThermalExpansion,TRUE,,,,,,this and below are not working well
|
||||
cofh.thermalexpansion.plugins.nei.handlers.RecipeHandlerCharger,ThermalExpansion:Machine:10,,ThermalExpansion,TRUE,,,,,,"this and below are not working well, ReSiever mod fixes it"
|
||||
cofh.thermalexpansion.plugins.nei.handlers.RecipeHandlerCrucible,ThermalExpansion:Machine:4,,ThermalExpansion,TRUE,,,,,,
|
||||
crafting,ThermalExpansion:Workbench:1,,ThermalExpansion,TRUE,,,,,,
|
||||
crafting,ThermalExpansion:Workbench:2,,ThermalExpansion,TRUE,,,,,,
|
||||
crafting,ThermalExpansion:Workbench:3,,ThermalExpansion,TRUE,,,,,,
|
||||
crafting,ThermalExpansion:Workbench:4,,ThermalExpansion,TRUE,,,,,,
|
||||
smelting,ThermalExpansion:Machine:0,,ThermalExpansion,TRUE,,,,,,
|
||||
cofh.thermalexpansion.plugins.nei.handlers.RecipeHandlerFurnace,ThermalExpansion:Machine,,ThermalExpansion,TRUE,,,,,,
|
||||
cofh.thermalexpansion.plugins.nei.handlers.RecipeHandlerInsolator,ThermalExpansion:Machine:11,,ThermalExpansion,TRUE,,,,,,
|
||||
cofh.thermalexpansion.plugins.nei.handlers.RecipeHandlerPulverizer,ThermalExpansion:Machine:1,,ThermalExpansion,TRUE,,,,,,
|
||||
cofh.thermalexpansion.plugins.nei.handlers.RecipeHandlerSawmill,ThermalExpansion:Machine:2,,ThermalExpansion,TRUE,,,,,,
|
||||
@@ -312,7 +456,7 @@ mekanism.client.nei.PurificationChamberRecipeHandler,Mekanism:MachineBlock:7,"{r
|
||||
mekanism.client.nei.RotaryCondensentratorRecipeHandler,Mekanism:MachineBlock2:0,,Mekanism,TRUE,,,,,,
|
||||
mekanism.client.nei.SolarNeutronRecipeHandler,Mekanism:MachineBlock3:1,,Mekanism,TRUE,,,,,,
|
||||
mekanism.client.nei.ThermalEvaporationRecipeHandler,Mekanism:BasicBlock:14,,Mekanism,TRUE,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerHammer,exnihilo:hammer_wood,,exnihilo,TRUE,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerHammer,exnihilo:hammer_wood,,exnihilo,TRUE,,,,,,"Ex Nihilo does not really work out of the box, use the ReSiever mod to fix this"
|
||||
exnihilo.compatibility.nei.RecipeHandlerHammer,exnihilo:hammer_stone,,exnihilo,TRUE,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerHammer,exnihilo:hammer_iron,,exnihilo,TRUE,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerHammer,exnihilo:hammer_gold,,exnihilo,TRUE,,,,,,
|
||||
@@ -323,19 +467,19 @@ exnihilo.compatibility.nei.RecipeHandlerSieve,exnihilo:sifting_table:2,,exnihilo
|
||||
exnihilo.compatibility.nei.RecipeHandlerSieve,exnihilo:sifting_table:3,,exnihilo,TRUE,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerSieve,exnihilo:sifting_table:4,,exnihilo,TRUE,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerSieve,exnihilo:sifting_table:5,,exnihilo,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.AlloySmelterRecipeHandler,gregtech_addon:machine:56,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.AssemblerRecipeHandler,gregtech_addon:machine:60,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.BenderRecipeHandler,gregtech_addon:machine:59,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.BlastRecipeHandler,gregtech_addon:machine:29,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.BronzeBlastRecipeHandler,gregtech_addon:machine:136,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.CannerRecipeHandler,gregtech_addon:machine:57,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.CentrifugeRecipeHandler,gregtech_addon:machine:62,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.ChemicalRecipeHandler,gregtech_addon:machine:41,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.CutterRecipeHandler,gregtech_addon:machine:113,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.DistillationRecipeHandler,gregtech_addon:machine:44,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.ElectrolyzerRecipeHandler,gregtech_addon:machine:25,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.ExtruderRecipeHandler,gregtech_addon:machine:115,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.FusionRecipeHandler,gregtech_addon:machine:80,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.Alloy,gregtech_addon:machine:56,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.Assembler,gregtech_addon:machine:60,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.Bender,gregtech_addon:machine:59,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.Blast,gregtech_addon:machine:29,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.BronzeBlast,gregtech_addon:machine:136,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.Canner,gregtech_addon:machine:57,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.centrifuge,gregtech_addon:machine:62,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.chemicalreactor,gregtech_addon:machine:41,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.Cutter,gregtech_addon:machine:113,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.Distillation,gregtech_addon:machine:44,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.electrolyzer,gregtech_addon:machine:25,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.extruder,gregtech_addon:machine:115,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.fusion,gregtech_addon:machine:80,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.thermal_generator,gregtech_addon:machine:35,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.diesel_generator,gregtech_addon:machine:33,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.gas_turbine,gregtech_addon:machine:34,,gregtech_addon,TRUE,,,,,,
|
||||
@@ -344,12 +488,12 @@ gregtech.semifluid_generator,gregtech_addon:machine:36,,gregtech_addon,TRUE,,,,,
|
||||
gregtech.plasma_generator,gregtech_addon:machine:37,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.plasma_generator,gregtech_addon:machine:117,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.magic_generator,gregtech_addon:machine:42,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.GrinderRecipeHandler,gregtech_addon:machine:28,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.ImplosionRecipeHandler,gregtech_addon:machine:31,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.LatheRecipeHandler,gregtech_addon:machine:111,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.SawmillRecipeHandler,gregtech_addon:machine:32,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.VacuumFreezerRecipeHandler,gregtech_addon:machine:38,,gregtech_addon,TRUE,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.WiremillRecipeHandler,gregtech_addon:machine:55,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.Grinder,gregtech_addon:machine:28,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.Implosion,gregtech_addon:machine:31,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.Lathe,gregtech_addon:machine:111,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.Sawmill,gregtech_addon:machine:32,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.VacuumFreezer,gregtech_addon:machine:38,,gregtech_addon,TRUE,,,,,,
|
||||
gregtech.Wiremill,gregtech_addon:machine:55,,gregtech_addon,TRUE,,,,,,
|
||||
wanion.biggercraftingtables.nei.BigShapedRecipeHandler,biggercraftingtables:BiggerCraftingTables,,biggercraftingtables,TRUE,,,,,,this and below are not tested
|
||||
wanion.biggercraftingtables.nei.BigShapedRecipeHandler,biggercraftingtables:AutoBiggerCraftingTables,,biggercraftingtables,TRUE,,,,,,
|
||||
wanion.biggercraftingtables.nei.BigShapelessRecipeHandler,biggercraftingtables:BiggerCraftingTables,,biggercraftingtables,TRUE,,,,,,
|
||||
@@ -363,6 +507,8 @@ crafting,LogisticsPipes:logisticsSolidBlock:3,,LogisticsPipes,TRUE,,,,,,
|
||||
crafting,LogisticsPipes:logisticsSolidBlock:4,,LogisticsPipes,TRUE,,,,,,
|
||||
crafting,DraconicEvolution:draconiumChest,,DraconicEvolution,TRUE,,-50,,,,
|
||||
smelting,DraconicEvolution:draconiumChest,,DraconicEvolution,TRUE,,-50,,,,
|
||||
smelting,ProjRed|Expansion:projectred.expansion.machine1,,ProjRed|Expansion,TRUE,,,,,,
|
||||
crafting,ProjRed|Expansion:projectred.expansion.machine2:10,,ProjRed|Expansion,TRUE,,,,,,
|
||||
crafting,ProjRed|Expansion:projectred.expansion.machine2:11,,ProjRed|Expansion,TRUE,,,,,,
|
||||
crafting,TwilightForest:tile.TFUncraftingTable,,TwilightForest,TRUE,,,,,,
|
||||
com.teammetallurgy.metallurgy.nei.CrusherHandler,Metallurgy:crusher,,Metallurgy,TRUE,,,,,,
|
||||
@@ -383,306 +529,311 @@ nc.crafting.nei.RecyclerRecipeHandler,NuclearCraft:recyclerIdle,,NuclearCraft,TR
|
||||
nc.crafting.nei.NuclearWorkspaceRecipeHandler,NuclearCraft:nuclearWorkspace,,NuclearCraft,TRUE,,,,,,
|
||||
ganymedes01.etfuturum.NEI_EtFuturum_Config$NEI_Recipes_Smoker,etfuturum:smoker,,etfuturum,TRUE,,,,,,not working well
|
||||
ganymedes01.etfuturum.NEI_EtFuturum_Config$NEI_Recipes_BlastFurnace,etfuturum:blast_furnace,,etfuturum,TRUE,,,,,,not working well
|
||||
crafting,gregtech:gt.metaitem.01:32744,,gregtech,TRUE,,,,,,"GT5 start: for readability, keep all GTNH-related catalysts below"
|
||||
gt.recipe.primitiveblastfurnace,gregtech:gt.blockmachines:140,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.primitiveblastfurnace,gregtech:gt.blockmachines:108,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:103,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:104,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.macerator,gregtech:gt.blockmachines:106,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.macerator,gregtech:gt.blockmachines:107,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.extractor,gregtech:gt.blockmachines:109,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.extractor,gregtech:gt.blockmachines:110,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.hammer,gregtech:gt.blockmachines:112,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.hammer,gregtech:gt.blockmachines:113,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.compressor,gregtech:gt.blockmachines:115,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.compressor,gregtech:gt.blockmachines:116,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.alloysmelter,gregtech:gt.blockmachines:118,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.alloysmelter,gregtech:gt.blockmachines:119,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.alloysmelter,gregtech:gt.blockmachines:201,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.alloysmelter,gregtech:gt.blockmachines:202,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.alloysmelter,gregtech:gt.blockmachines:203,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.alloysmelter,gregtech:gt.blockmachines:204,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.alloysmelter,gregtech:gt.blockmachines:205,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.assembler,gregtech:gt.blockmachines:211,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.assembler,gregtech:gt.blockmachines:212,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.assembler,gregtech:gt.blockmachines:213,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.assembler,gregtech:gt.blockmachines:214,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.assembler,gregtech:gt.blockmachines:215,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.metalbender,gregtech:gt.blockmachines:221,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.metalbender,gregtech:gt.blockmachines:222,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.metalbender,gregtech:gt.blockmachines:223,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.metalbender,gregtech:gt.blockmachines:224,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.metalbender,gregtech:gt.blockmachines:225,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.canner,gregtech:gt.blockmachines:231,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.canner,gregtech:gt.blockmachines:232,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.canner,gregtech:gt.blockmachines:233,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.canner,gregtech:gt.blockmachines:234,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.canner,gregtech:gt.blockmachines:235,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.compressor,gregtech:gt.blockmachines:241,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.compressor,gregtech:gt.blockmachines:242,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.compressor,gregtech:gt.blockmachines:243,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.compressor,gregtech:gt.blockmachines:244,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.compressor,gregtech:gt.blockmachines:245,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.cuttingsaw,gregtech:gt.blockmachines:251,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.cuttingsaw,gregtech:gt.blockmachines:252,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.cuttingsaw,gregtech:gt.blockmachines:253,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.cuttingsaw,gregtech:gt.blockmachines:254,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.cuttingsaw,gregtech:gt.blockmachines:255,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:261,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:262,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:263,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:264,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:265,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.extractor,gregtech:gt.blockmachines:271,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.extractor,gregtech:gt.blockmachines:272,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.extractor,gregtech:gt.blockmachines:273,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.extractor,gregtech:gt.blockmachines:274,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.extractor,gregtech:gt.blockmachines:275,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.extruder,gregtech:gt.blockmachines:281,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.extruder,gregtech:gt.blockmachines:282,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.extruder,gregtech:gt.blockmachines:283,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.extruder,gregtech:gt.blockmachines:284,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.extruder,gregtech:gt.blockmachines:285,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.lathe,gregtech:gt.blockmachines:291,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.lathe,gregtech:gt.blockmachines:292,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.lathe,gregtech:gt.blockmachines:293,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.lathe,gregtech:gt.blockmachines:294,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.lathe,gregtech:gt.blockmachines:295,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.macerator,gregtech:gt.blockmachines:301,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.macerator,gregtech:gt.blockmachines:302,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.macerator,gregtech:gt.blockmachines:303,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.macerator,gregtech:gt.blockmachines:304,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.macerator,gregtech:gt.blockmachines:305,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:311,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:312,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:313,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:314,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:315,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:321,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:322,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:323,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:324,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:325,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:326,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:327,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:328,,gregtech,TRUE,,,,,,
|
||||
ic2.recycler,gregtech:gt.blockmachines:331,,gregtech,TRUE,,,,,,
|
||||
ic2.recycler,gregtech:gt.blockmachines:332,,gregtech,TRUE,,,,,,
|
||||
ic2.recycler,gregtech:gt.blockmachines:333,,gregtech,TRUE,,,,,,
|
||||
ic2.recycler,gregtech:gt.blockmachines:334,,gregtech,TRUE,,,,,,
|
||||
ic2.recycler,gregtech:gt.blockmachines:335,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.scanner,gregtech:gt.blockmachines:341,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.scanner,gregtech:gt.blockmachines:342,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.scanner,gregtech:gt.blockmachines:343,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.scanner,gregtech:gt.blockmachines:344,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.scanner,gregtech:gt.blockmachines:345,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.wiremill,gregtech:gt.blockmachines:351,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.wiremill,gregtech:gt.blockmachines:352,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.wiremill,gregtech:gt.blockmachines:353,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.wiremill,gregtech:gt.blockmachines:354,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.wiremill,gregtech:gt.blockmachines:355,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.centrifuge,gregtech:gt.blockmachines:361,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.centrifuge,gregtech:gt.blockmachines:362,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.centrifuge,gregtech:gt.blockmachines:363,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.centrifuge,gregtech:gt.blockmachines:364,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.centrifuge,gregtech:gt.blockmachines:365,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.electrolyzer,gregtech:gt.blockmachines:371,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.electrolyzer,gregtech:gt.blockmachines:372,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.electrolyzer,gregtech:gt.blockmachines:373,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.electrolyzer,gregtech:gt.blockmachines:374,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.electrolyzer,gregtech:gt.blockmachines:375,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.thermalcentrifuge,gregtech:gt.blockmachines:381,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.thermalcentrifuge,gregtech:gt.blockmachines:382,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.thermalcentrifuge,gregtech:gt.blockmachines:383,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.thermalcentrifuge,gregtech:gt.blockmachines:384,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.thermalcentrifuge,gregtech:gt.blockmachines:385,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.orewasher,gregtech:gt.blockmachines:391,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.orewasher,gregtech:gt.blockmachines:392,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.orewasher,gregtech:gt.blockmachines:393,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.orewasher,gregtech:gt.blockmachines:394,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.orewasher,gregtech:gt.blockmachines:395,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:401,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:402,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:403,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:404,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:405,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:406,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:407,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:408,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:411,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:412,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:413,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:414,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:415,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:416,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:417,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:418,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.chemicalreactor,gregtech:gt.blockmachines:421,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.chemicalreactor,gregtech:gt.blockmachines:422,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.chemicalreactor,gregtech:gt.blockmachines:423,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.chemicalreactor,gregtech:gt.blockmachines:424,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.chemicalreactor,gregtech:gt.blockmachines:425,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidcanner,gregtech:gt.blockmachines:431,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidcanner,gregtech:gt.blockmachines:432,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidcanner,gregtech:gt.blockmachines:433,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidcanner,gregtech:gt.blockmachines:434,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidcanner,gregtech:gt.blockmachines:435,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.rockbreaker,gregtech:gt.blockmachines:441,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.rockbreaker,gregtech:gt.blockmachines:442,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.rockbreaker,gregtech:gt.blockmachines:443,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.rockbreaker,gregtech:gt.blockmachines:444,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.rockbreaker,gregtech:gt.blockmachines:445,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.massfab,gregtech:gt.blockmachines:461,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.massfab,gregtech:gt.blockmachines:462,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.massfab,gregtech:gt.blockmachines:463,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.massfab,gregtech:gt.blockmachines:464,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.massfab,gregtech:gt.blockmachines:465,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.uuamplifier,gregtech:gt.blockmachines:471,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.uuamplifier,gregtech:gt.blockmachines:472,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.uuamplifier,gregtech:gt.blockmachines:473,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.uuamplifier,gregtech:gt.blockmachines:474,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.uuamplifier,gregtech:gt.blockmachines:475,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.replicator,gregtech:gt.blockmachines:481,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.replicator,gregtech:gt.blockmachines:482,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.replicator,gregtech:gt.blockmachines:483,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.replicator,gregtech:gt.blockmachines:484,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.replicator,gregtech:gt.blockmachines:485,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.brewer,gregtech:gt.blockmachines:491,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.brewer,gregtech:gt.blockmachines:492,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.brewer,gregtech:gt.blockmachines:493,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.brewer,gregtech:gt.blockmachines:494,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.brewer,gregtech:gt.blockmachines:495,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fermenter,gregtech:gt.blockmachines:501,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fermenter,gregtech:gt.blockmachines:502,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fermenter,gregtech:gt.blockmachines:503,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fermenter,gregtech:gt.blockmachines:504,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fermenter,gregtech:gt.blockmachines:505,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidextractor,gregtech:gt.blockmachines:511,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidextractor,gregtech:gt.blockmachines:512,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidextractor,gregtech:gt.blockmachines:513,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidextractor,gregtech:gt.blockmachines:514,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidextractor,gregtech:gt.blockmachines:515,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidsolidifier,gregtech:gt.blockmachines:521,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidsolidifier,gregtech:gt.blockmachines:522,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidsolidifier,gregtech:gt.blockmachines:523,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidsolidifier,gregtech:gt.blockmachines:524,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidsolidifier,gregtech:gt.blockmachines:525,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.distillery,gregtech:gt.blockmachines:531,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.distillery,gregtech:gt.blockmachines:532,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.distillery,gregtech:gt.blockmachines:533,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.distillery,gregtech:gt.blockmachines:534,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.distillery,gregtech:gt.blockmachines:535,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.chemicalbath,gregtech:gt.blockmachines:541,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.chemicalbath,gregtech:gt.blockmachines:542,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.chemicalbath,gregtech:gt.blockmachines:543,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.chemicalbath,gregtech:gt.blockmachines:544,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.chemicalbath,gregtech:gt.blockmachines:545,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.polarizer,gregtech:gt.blockmachines:551,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.polarizer,gregtech:gt.blockmachines:552,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.polarizer,gregtech:gt.blockmachines:553,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.polarizer,gregtech:gt.blockmachines:554,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.polarizer,gregtech:gt.blockmachines:555,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.electromagneticseparator,gregtech:gt.blockmachines:561,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.electromagneticseparator,gregtech:gt.blockmachines:562,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.electromagneticseparator,gregtech:gt.blockmachines:563,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.electromagneticseparator,gregtech:gt.blockmachines:564,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.electromagneticseparator,gregtech:gt.blockmachines:565,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.autoclave,gregtech:gt.blockmachines:571,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.autoclave,gregtech:gt.blockmachines:572,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.autoclave,gregtech:gt.blockmachines:573,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.autoclave,gregtech:gt.blockmachines:574,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.autoclave,gregtech:gt.blockmachines:575,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:581,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:582,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:583,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:584,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:585,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.laserengraver,gregtech:gt.blockmachines:591,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.laserengraver,gregtech:gt.blockmachines:592,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.laserengraver,gregtech:gt.blockmachines:593,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.laserengraver,gregtech:gt.blockmachines:594,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.laserengraver,gregtech:gt.blockmachines:595,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.press,gregtech:gt.blockmachines:601,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.press,gregtech:gt.blockmachines:602,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.press,gregtech:gt.blockmachines:603,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.press,gregtech:gt.blockmachines:604,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.press,gregtech:gt.blockmachines:605,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.hammer,gregtech:gt.blockmachines:611,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.hammer,gregtech:gt.blockmachines:612,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.hammer,gregtech:gt.blockmachines:613,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.hammer,gregtech:gt.blockmachines:614,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.hammer,gregtech:gt.blockmachines:615,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidheater,gregtech:gt.blockmachines:621,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidheater,gregtech:gt.blockmachines:622,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidheater,gregtech:gt.blockmachines:623,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidheater,gregtech:gt.blockmachines:624,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidheater,gregtech:gt.blockmachines:625,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.slicer,gregtech:gt.blockmachines:631,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.slicer,gregtech:gt.blockmachines:632,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.slicer,gregtech:gt.blockmachines:633,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.slicer,gregtech:gt.blockmachines:634,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.slicer,gregtech:gt.blockmachines:635,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.sifter,gregtech:gt.blockmachines:641,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.sifter,gregtech:gt.blockmachines:642,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.sifter,gregtech:gt.blockmachines:643,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.sifter,gregtech:gt.blockmachines:644,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.sifter,gregtech:gt.blockmachines:645,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.arcfurnace,gregtech:gt.blockmachines:651,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.arcfurnace,gregtech:gt.blockmachines:652,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.arcfurnace,gregtech:gt.blockmachines:653,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.arcfurnace,gregtech:gt.blockmachines:654,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.arcfurnace,gregtech:gt.blockmachines:655,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.plasmaarcfurnace,gregtech:gt.blockmachines:661,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.plasmaarcfurnace,gregtech:gt.blockmachines:662,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.plasmaarcfurnace,gregtech:gt.blockmachines:663,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.plasmaarcfurnace,gregtech:gt.blockmachines:664,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.plasmaarcfurnace,gregtech:gt.blockmachines:665,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:671,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:672,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:673,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:674,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:675,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.blastfurnace,gregtech:gt.blockmachines:1000,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.implosioncompressor,gregtech:gt.blockmachines:1001,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.vacuumfreezer,gregtech:gt.blockmachines:1002,,gregtech,TRUE,,,,,,
|
||||
smelting,gregtech:gt.blockmachines:1003,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.dieselgeneratorfuel,gregtech:gt.blockmachines:1110,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.dieselgeneratorfuel,gregtech:gt.blockmachines:1111,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.dieselgeneratorfuel,gregtech:gt.blockmachines:1112,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.gasturbinefuel,gregtech:gt.blockmachines:1115,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.gasturbinefuel,gregtech:gt.blockmachines:1116,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.gasturbinefuel,gregtech:gt.blockmachines:1117,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidnaquadahreactor,gregtech:gt.blockmachines:1190,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidnaquadahreactor,gregtech:gt.blockmachines:1191,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidnaquadahreactor,gregtech:gt.blockmachines:1192,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidnaquadahreactor,gregtech:gt.blockmachines:1188,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fluidnaquadahreactor,gregtech:gt.blockmachines:1189,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.magicfuels,gregtech:gt.blockmachines:1123,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.magicfuels,gregtech:gt.blockmachines:1124,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.magicfuels,gregtech:gt.blockmachines:1125,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fusionreactor,gregtech:gt.blockmachines:1193,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fusionreactor,gregtech:gt.blockmachines:1194,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fusionreactor,gregtech:gt.blockmachines:1195,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.plasmageneratorfuels,gregtech:gt.blockmachines:1196,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.plasmageneratorfuels,gregtech:gt.blockmachines:1197,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.plasmageneratorfuels,gregtech:gt.blockmachines:1198,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.distillationtower,gregtech:gt.blockmachines:1126,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.gasturbinefuel,gregtech:gt.blockmachines:1151,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.plasmageneratorfuels,gregtech:gt.blockmachines:1153,,gregtech,TRUE,,-10,,,,
|
||||
gt.recipe.pyro,gregtech:gt.blockmachines:1159,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.craker,gregtech:gt.blockmachines:1160,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.fakeAssemblylineProcess,gregtech:gt.blockmachines:1170,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.dieselgeneratorfuel,gregtech:gt.blockmachines:1171,,gregtech,TRUE,,-5,,,,
|
||||
gt.recipe.extremedieselgeneratorfuel,gregtech:gt.blockmachines:2105,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1180,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1181,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1182,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1183,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1184,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1185,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1186,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1187,,gregtech,TRUE,,,,,,
|
||||
gt.recipe.largechemicalreactor,gregtech:gt.blockmachines:1169,,gregtech,TRUE,,,,,,
|
||||
connor135246.campfirebackport.client.compat.nei.NEICampfireRecipeHandler,campfirebackport:campfire,,campfirebackport,TRUE,,,,,,
|
||||
connor135246.campfirebackport.client.compat.nei.NEICampfireRecipeHandler,campfirebackport:soul_campfire,,campfirebackport,TRUE,,,,,,
|
||||
connor135246.campfirebackport.client.compat.nei.NEICampfireStateChangerHandler,campfirebackport:campfire,,campfirebackport,TRUE,,,,,,
|
||||
connor135246.campfirebackport.client.compat.nei.NEICampfireStateChangerHandler,campfirebackport:soul_campfire,,campfirebackport,TRUE,,,,,,
|
||||
smelting,Natura:NetherFurnace,,Natura,TRUE,,,,,,
|
||||
crafting,gregtech:gt.metaitem.01:32744,,gregtech,TRUE,gregapi_post,,,,,"GT5 start: for readability, keep all GTNH-related catalysts below"
|
||||
gt.recipe.primitiveblastfurnace,gregtech:gt.blockmachines:140,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.primitiveblastfurnace,gregtech:gt.blockmachines:108,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:103,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:104,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.macerator,gregtech:gt.blockmachines:106,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.macerator,gregtech:gt.blockmachines:107,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.extractor,gregtech:gt.blockmachines:109,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.extractor,gregtech:gt.blockmachines:110,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.hammer,gregtech:gt.blockmachines:112,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.hammer,gregtech:gt.blockmachines:113,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.compressor,gregtech:gt.blockmachines:115,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.compressor,gregtech:gt.blockmachines:116,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.alloysmelter,gregtech:gt.blockmachines:118,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.alloysmelter,gregtech:gt.blockmachines:119,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.alloysmelter,gregtech:gt.blockmachines:201,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.alloysmelter,gregtech:gt.blockmachines:202,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.alloysmelter,gregtech:gt.blockmachines:203,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.alloysmelter,gregtech:gt.blockmachines:204,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.alloysmelter,gregtech:gt.blockmachines:205,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.assembler,gregtech:gt.blockmachines:211,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.assembler,gregtech:gt.blockmachines:212,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.assembler,gregtech:gt.blockmachines:213,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.assembler,gregtech:gt.blockmachines:214,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.assembler,gregtech:gt.blockmachines:215,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.metalbender,gregtech:gt.blockmachines:221,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.metalbender,gregtech:gt.blockmachines:222,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.metalbender,gregtech:gt.blockmachines:223,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.metalbender,gregtech:gt.blockmachines:224,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.metalbender,gregtech:gt.blockmachines:225,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.canner,gregtech:gt.blockmachines:231,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.canner,gregtech:gt.blockmachines:232,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.canner,gregtech:gt.blockmachines:233,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.canner,gregtech:gt.blockmachines:234,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.canner,gregtech:gt.blockmachines:235,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.compressor,gregtech:gt.blockmachines:241,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.compressor,gregtech:gt.blockmachines:242,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.compressor,gregtech:gt.blockmachines:243,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.compressor,gregtech:gt.blockmachines:244,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.compressor,gregtech:gt.blockmachines:245,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.cuttingsaw,gregtech:gt.blockmachines:251,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.cuttingsaw,gregtech:gt.blockmachines:252,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.cuttingsaw,gregtech:gt.blockmachines:253,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.cuttingsaw,gregtech:gt.blockmachines:254,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.cuttingsaw,gregtech:gt.blockmachines:255,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:261,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:262,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:263,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:264,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:265,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.extractor,gregtech:gt.blockmachines:271,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.extractor,gregtech:gt.blockmachines:272,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.extractor,gregtech:gt.blockmachines:273,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.extractor,gregtech:gt.blockmachines:274,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.extractor,gregtech:gt.blockmachines:275,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.extruder,gregtech:gt.blockmachines:281,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.extruder,gregtech:gt.blockmachines:282,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.extruder,gregtech:gt.blockmachines:283,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.extruder,gregtech:gt.blockmachines:284,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.extruder,gregtech:gt.blockmachines:285,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.lathe,gregtech:gt.blockmachines:291,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.lathe,gregtech:gt.blockmachines:292,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.lathe,gregtech:gt.blockmachines:293,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.lathe,gregtech:gt.blockmachines:294,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.lathe,gregtech:gt.blockmachines:295,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.macerator,gregtech:gt.blockmachines:301,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.macerator,gregtech:gt.blockmachines:302,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.macerator,gregtech:gt.blockmachines:303,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.macerator,gregtech:gt.blockmachines:304,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.macerator,gregtech:gt.blockmachines:305,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:311,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:312,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:313,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:314,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:315,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:321,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:322,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:323,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:324,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:325,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:326,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:327,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.printer,gregtech:gt.blockmachines:328,,gregtech,TRUE,gregapi_post,,,,,
|
||||
ic2.recycler,gregtech:gt.blockmachines:331,,gregtech,TRUE,gregapi_post,,,,,
|
||||
ic2.recycler,gregtech:gt.blockmachines:332,,gregtech,TRUE,gregapi_post,,,,,
|
||||
ic2.recycler,gregtech:gt.blockmachines:333,,gregtech,TRUE,gregapi_post,,,,,
|
||||
ic2.recycler,gregtech:gt.blockmachines:334,,gregtech,TRUE,gregapi_post,,,,,
|
||||
ic2.recycler,gregtech:gt.blockmachines:335,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.scanner,gregtech:gt.blockmachines:341,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.scanner,gregtech:gt.blockmachines:342,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.scanner,gregtech:gt.blockmachines:343,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.scanner,gregtech:gt.blockmachines:344,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.scanner,gregtech:gt.blockmachines:345,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.wiremill,gregtech:gt.blockmachines:351,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.wiremill,gregtech:gt.blockmachines:352,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.wiremill,gregtech:gt.blockmachines:353,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.wiremill,gregtech:gt.blockmachines:354,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.wiremill,gregtech:gt.blockmachines:355,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.centrifuge,gregtech:gt.blockmachines:361,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.centrifuge,gregtech:gt.blockmachines:362,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.centrifuge,gregtech:gt.blockmachines:363,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.centrifuge,gregtech:gt.blockmachines:364,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.centrifuge,gregtech:gt.blockmachines:365,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.electrolyzer,gregtech:gt.blockmachines:371,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.electrolyzer,gregtech:gt.blockmachines:372,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.electrolyzer,gregtech:gt.blockmachines:373,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.electrolyzer,gregtech:gt.blockmachines:374,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.electrolyzer,gregtech:gt.blockmachines:375,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.thermalcentrifuge,gregtech:gt.blockmachines:381,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.thermalcentrifuge,gregtech:gt.blockmachines:382,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.thermalcentrifuge,gregtech:gt.blockmachines:383,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.thermalcentrifuge,gregtech:gt.blockmachines:384,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.thermalcentrifuge,gregtech:gt.blockmachines:385,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.orewasher,gregtech:gt.blockmachines:391,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.orewasher,gregtech:gt.blockmachines:392,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.orewasher,gregtech:gt.blockmachines:393,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.orewasher,gregtech:gt.blockmachines:394,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.orewasher,gregtech:gt.blockmachines:395,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:401,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:402,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:403,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:404,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:405,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:406,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:407,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.packager,gregtech:gt.blockmachines:408,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:411,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:412,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:413,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:414,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:415,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:416,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:417,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.unpackager,gregtech:gt.blockmachines:418,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.chemicalreactor,gregtech:gt.blockmachines:421,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.chemicalreactor,gregtech:gt.blockmachines:422,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.chemicalreactor,gregtech:gt.blockmachines:423,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.chemicalreactor,gregtech:gt.blockmachines:424,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.chemicalreactor,gregtech:gt.blockmachines:425,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidcanner,gregtech:gt.blockmachines:431,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidcanner,gregtech:gt.blockmachines:432,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidcanner,gregtech:gt.blockmachines:433,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidcanner,gregtech:gt.blockmachines:434,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidcanner,gregtech:gt.blockmachines:435,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.rockbreaker,gregtech:gt.blockmachines:441,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.rockbreaker,gregtech:gt.blockmachines:442,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.rockbreaker,gregtech:gt.blockmachines:443,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.rockbreaker,gregtech:gt.blockmachines:444,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.rockbreaker,gregtech:gt.blockmachines:445,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.massfab,gregtech:gt.blockmachines:461,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.massfab,gregtech:gt.blockmachines:462,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.massfab,gregtech:gt.blockmachines:463,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.massfab,gregtech:gt.blockmachines:464,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.massfab,gregtech:gt.blockmachines:465,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.uuamplifier,gregtech:gt.blockmachines:471,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.uuamplifier,gregtech:gt.blockmachines:472,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.uuamplifier,gregtech:gt.blockmachines:473,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.uuamplifier,gregtech:gt.blockmachines:474,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.uuamplifier,gregtech:gt.blockmachines:475,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.replicator,gregtech:gt.blockmachines:481,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.replicator,gregtech:gt.blockmachines:482,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.replicator,gregtech:gt.blockmachines:483,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.replicator,gregtech:gt.blockmachines:484,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.replicator,gregtech:gt.blockmachines:485,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.brewer,gregtech:gt.blockmachines:491,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.brewer,gregtech:gt.blockmachines:492,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.brewer,gregtech:gt.blockmachines:493,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.brewer,gregtech:gt.blockmachines:494,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.brewer,gregtech:gt.blockmachines:495,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fermenter,gregtech:gt.blockmachines:501,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fermenter,gregtech:gt.blockmachines:502,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fermenter,gregtech:gt.blockmachines:503,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fermenter,gregtech:gt.blockmachines:504,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fermenter,gregtech:gt.blockmachines:505,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidextractor,gregtech:gt.blockmachines:511,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidextractor,gregtech:gt.blockmachines:512,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidextractor,gregtech:gt.blockmachines:513,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidextractor,gregtech:gt.blockmachines:514,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidextractor,gregtech:gt.blockmachines:515,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidsolidifier,gregtech:gt.blockmachines:521,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidsolidifier,gregtech:gt.blockmachines:522,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidsolidifier,gregtech:gt.blockmachines:523,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidsolidifier,gregtech:gt.blockmachines:524,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidsolidifier,gregtech:gt.blockmachines:525,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.distillery,gregtech:gt.blockmachines:531,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.distillery,gregtech:gt.blockmachines:532,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.distillery,gregtech:gt.blockmachines:533,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.distillery,gregtech:gt.blockmachines:534,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.distillery,gregtech:gt.blockmachines:535,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.chemicalbath,gregtech:gt.blockmachines:541,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.chemicalbath,gregtech:gt.blockmachines:542,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.chemicalbath,gregtech:gt.blockmachines:543,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.chemicalbath,gregtech:gt.blockmachines:544,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.chemicalbath,gregtech:gt.blockmachines:545,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.polarizer,gregtech:gt.blockmachines:551,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.polarizer,gregtech:gt.blockmachines:552,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.polarizer,gregtech:gt.blockmachines:553,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.polarizer,gregtech:gt.blockmachines:554,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.polarizer,gregtech:gt.blockmachines:555,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.electromagneticseparator,gregtech:gt.blockmachines:561,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.electromagneticseparator,gregtech:gt.blockmachines:562,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.electromagneticseparator,gregtech:gt.blockmachines:563,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.electromagneticseparator,gregtech:gt.blockmachines:564,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.electromagneticseparator,gregtech:gt.blockmachines:565,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.autoclave,gregtech:gt.blockmachines:571,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.autoclave,gregtech:gt.blockmachines:572,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.autoclave,gregtech:gt.blockmachines:573,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.autoclave,gregtech:gt.blockmachines:574,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.autoclave,gregtech:gt.blockmachines:575,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:581,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:582,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:583,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:584,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:585,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.laserengraver,gregtech:gt.blockmachines:591,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.laserengraver,gregtech:gt.blockmachines:592,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.laserengraver,gregtech:gt.blockmachines:593,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.laserengraver,gregtech:gt.blockmachines:594,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.laserengraver,gregtech:gt.blockmachines:595,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.press,gregtech:gt.blockmachines:601,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.press,gregtech:gt.blockmachines:602,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.press,gregtech:gt.blockmachines:603,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.press,gregtech:gt.blockmachines:604,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.press,gregtech:gt.blockmachines:605,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.hammer,gregtech:gt.blockmachines:611,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.hammer,gregtech:gt.blockmachines:612,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.hammer,gregtech:gt.blockmachines:613,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.hammer,gregtech:gt.blockmachines:614,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.hammer,gregtech:gt.blockmachines:615,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidheater,gregtech:gt.blockmachines:621,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidheater,gregtech:gt.blockmachines:622,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidheater,gregtech:gt.blockmachines:623,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidheater,gregtech:gt.blockmachines:624,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidheater,gregtech:gt.blockmachines:625,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.slicer,gregtech:gt.blockmachines:631,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.slicer,gregtech:gt.blockmachines:632,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.slicer,gregtech:gt.blockmachines:633,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.slicer,gregtech:gt.blockmachines:634,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.slicer,gregtech:gt.blockmachines:635,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.sifter,gregtech:gt.blockmachines:641,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.sifter,gregtech:gt.blockmachines:642,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.sifter,gregtech:gt.blockmachines:643,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.sifter,gregtech:gt.blockmachines:644,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.sifter,gregtech:gt.blockmachines:645,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.arcfurnace,gregtech:gt.blockmachines:651,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.arcfurnace,gregtech:gt.blockmachines:652,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.arcfurnace,gregtech:gt.blockmachines:653,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.arcfurnace,gregtech:gt.blockmachines:654,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.arcfurnace,gregtech:gt.blockmachines:655,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.plasmaarcfurnace,gregtech:gt.blockmachines:661,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.plasmaarcfurnace,gregtech:gt.blockmachines:662,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.plasmaarcfurnace,gregtech:gt.blockmachines:663,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.plasmaarcfurnace,gregtech:gt.blockmachines:664,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.plasmaarcfurnace,gregtech:gt.blockmachines:665,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:671,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:672,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:673,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:674,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:675,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.blastfurnace,gregtech:gt.blockmachines:1000,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.implosioncompressor,gregtech:gt.blockmachines:1001,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.vacuumfreezer,gregtech:gt.blockmachines:1002,,gregtech,TRUE,gregapi_post,,,,,
|
||||
smelting,gregtech:gt.blockmachines:1003,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.dieselgeneratorfuel,gregtech:gt.blockmachines:1110,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.dieselgeneratorfuel,gregtech:gt.blockmachines:1111,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.dieselgeneratorfuel,gregtech:gt.blockmachines:1112,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.gasturbinefuel,gregtech:gt.blockmachines:1115,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.gasturbinefuel,gregtech:gt.blockmachines:1116,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.gasturbinefuel,gregtech:gt.blockmachines:1117,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidnaquadahreactor,gregtech:gt.blockmachines:1190,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidnaquadahreactor,gregtech:gt.blockmachines:1191,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidnaquadahreactor,gregtech:gt.blockmachines:1192,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidnaquadahreactor,gregtech:gt.blockmachines:1188,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fluidnaquadahreactor,gregtech:gt.blockmachines:1189,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.magicfuels,gregtech:gt.blockmachines:1123,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.magicfuels,gregtech:gt.blockmachines:1124,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.magicfuels,gregtech:gt.blockmachines:1125,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fusionreactor,gregtech:gt.blockmachines:1193,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fusionreactor,gregtech:gt.blockmachines:1194,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fusionreactor,gregtech:gt.blockmachines:1195,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.plasmageneratorfuels,gregtech:gt.blockmachines:1196,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.plasmageneratorfuels,gregtech:gt.blockmachines:1197,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.plasmageneratorfuels,gregtech:gt.blockmachines:1198,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.distillationtower,gregtech:gt.blockmachines:1126,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.gasturbinefuel,gregtech:gt.blockmachines:1151,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.plasmageneratorfuels,gregtech:gt.blockmachines:1153,,gregtech,TRUE,gregapi_post,-10,,,,
|
||||
gt.recipe.pyro,gregtech:gt.blockmachines:1159,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.craker,gregtech:gt.blockmachines:1160,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.fakeAssemblylineProcess,gregtech:gt.blockmachines:1170,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.dieselgeneratorfuel,gregtech:gt.blockmachines:1171,,gregtech,TRUE,gregapi_post,-5,,,,
|
||||
gt.recipe.extremedieselgeneratorfuel,gregtech:gt.blockmachines:2105,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1180,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1181,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1182,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1183,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1184,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1185,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1186,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.circuitassembler,gregtech:gt.blockmachines:1187,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.largechemicalreactor,gregtech:gt.blockmachines:1169,,gregtech,TRUE,gregapi_post,,,,,
|
||||
gt.recipe.plasmageneratorfuels,gregtech:gt.blockmachines:10752,,dreamcraft,TRUE,,,,,,
|
||||
gt.recipe.plasmageneratorfuels,gregtech:gt.blockmachines:10753,,dreamcraft,TRUE,,,,,,
|
||||
gt.recipe.alloysmelter,gregtech:gt.blockmachines:10760,,dreamcraft,TRUE,,,,,,
|
||||
@@ -1033,14 +1184,6 @@ gtpp.recipe.chemicaldehydrator,gregtech:gt.blockmachines:814,,miscutils,TRUE,,,,
|
||||
gtpp.recipe.chemicaldehydrator,gregtech:gt.blockmachines:815,,miscutils,TRUE,,,,,,
|
||||
gtpp.recipe.chemicaldehydrator,gregtech:gt.blockmachines:816,,miscutils,TRUE,,,,,,
|
||||
gtpp.recipe.chemicaldehydrator,gregtech:gt.blockmachines:995,,miscutils,TRUE,,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:851,,miscutils,TRUE,,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:852,,miscutils,TRUE,,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:853,,miscutils,TRUE,,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:854,,miscutils,TRUE,,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:855,,miscutils,TRUE,,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:856,,miscutils,TRUE,,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:857,,miscutils,TRUE,,,,,,
|
||||
gt.recipe.mixer,gregtech:gt.blockmachines:858,,miscutils,TRUE,,,,,,
|
||||
gt.recipe.fusionreactor,gregtech:gt.blockmachines:965,,miscutils,TRUE,,,,,,
|
||||
gtpp.recipe.alloyblastsmelter,gregtech:gt.blockmachines:810,,miscutils,TRUE,,,,,,
|
||||
gtpp.recipe.rocketenginefuel,gregtech:gt.blockmachines:793,,miscutils,TRUE,,,,,,
|
||||
@@ -1072,9 +1215,9 @@ gtpp.recipe.simplewasher,gregtech:gt.blockmachines:31018,,miscutils,TRUE,,,,,,
|
||||
gtpp.recipe.simplewasher,gregtech:gt.blockmachines:31019,,miscutils,TRUE,,,,,,
|
||||
gtpp.recipe.simplewasher,gregtech:gt.blockmachines:31020,,miscutils,TRUE,,,,,,
|
||||
gtpp.recipe.vacfurnace,gregtech:gt.blockmachines:995,,miscutils,TRUE,,,,,,
|
||||
gtPlusPlus.nei.GT_NEI_FlotationCell,gregtech:gt.blockmachines:31028,,miscutils,TRUE,,,,,,
|
||||
gtPlusPlus.nei.GT_NEI_FluidReactor,gregtech:gt.blockmachines:998,,miscutils,TRUE,,,,,,
|
||||
gtPlusPlus.nei.GT_NEI_MillingMachine,gregtech:gt.blockmachines:31027,,miscutils,TRUE,,,,,,
|
||||
gtpp.recipe.flotationcell,gregtech:gt.blockmachines:31028,,miscutils,TRUE,,,,,,
|
||||
gtpp.recipe.fluidchemicaleactor,gregtech:gt.blockmachines:998,,miscutils,TRUE,,,,,,
|
||||
gtpp.recipe.oremill,gregtech:gt.blockmachines:31027,,miscutils,TRUE,,,,,,
|
||||
team.chisel.compat.nei.RecipeHandlerChisel,gregtech:gt.blockmachines:31066,,miscutils,TRUE,,,,,,
|
||||
team.chisel.compat.nei.RecipeHandlerChisel,gregtech:gt.blockmachines:31067,,miscutils,TRUE,,,,,,
|
||||
team.chisel.compat.nei.RecipeHandlerChisel,gregtech:gt.blockmachines:31068,,miscutils,TRUE,,,,,,
|
||||
@@ -1111,4 +1254,64 @@ gg.recipe.naquadah_fuel_refine_factory,gregtech:gt.blockmachines:16999,,GoodGene
|
||||
gt.recipe.researchStation,gregtech:gt.blockmachines:15331,,tectech,TRUE,,,,,,
|
||||
gt.recipe.em_scanner,tectech:item.em.definitionScanStorage,,tectech,TRUE,,,,,,no recipe? don't know
|
||||
gt.recipe.gasturbinefuel,gregtech:gt.blockmachines:13101,,kekztech,TRUE,,,,,,
|
||||
gt.recipe.gasturbinefuel,gregtech:gt.blockmachines:13102,,kekztech,TRUE,,,,,,
|
||||
gt.recipe.gasturbinefuel,gregtech:gt.blockmachines:13102,,kekztech,TRUE,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerSieve,exastris:sieve_automatic,,exastris,TRUE,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerHammer,exastris:hammer_thaumium,,exastris,TRUE,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerHammer,exastris:hammer_rf,,exastris,TRUE,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerHammer,exastris:manaHammer,,exastris,TRUE,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerSieve,excompressum:manaSieve,,excompressum,TRUE,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerSieve,excompressum:autoSieve,,excompressum,TRUE,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerHammer,excompressum:chickenStick,,excompressum,TRUE,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerHammer,excompressum:oreSmasher,,excompressum,TRUE,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerHammer,excompressum:autoHammer,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerHeavySieve,excompressum:heavySieve,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerHeavySieve,excompressum:heavySieve:1,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerHeavySieve,excompressum:heavySieve:2,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerHeavySieve,excompressum:heavySieve:3,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerHeavySieve,excompressum:heavySieve:4,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerHeavySieve,excompressum:heavySieve:5,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerHeavySieve,excompressum:autoHeavySieve,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerCompressedHammer,excompressum:compressedHammerWood,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerCompressedHammer,excompressum:compressedHammerStone,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerCompressedHammer,excompressum:compressedHammerGold,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerCompressedHammer,excompressum:compressedHammerIron,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerCompressedHammer,excompressum:compressedHammerDiamond,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerCompressedHammer,excompressum:autoCompressedHammer,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerComposting,exnihilo:barrel,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerComposting,exnihilo:barrel:1,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerComposting,exnihilo:barrel:2,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerComposting,exnihilo:barrel:3,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerComposting,exnihilo:barrel:4,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerComposting,exnihilo:barrel:5,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerComposting,exnihilo:barrel_stone,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerComposting,exastris:barrel_thaumium,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerBarrelProcess,exnihilo:barrel,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerBarrelProcess,exnihilo:barrel:1,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerBarrelProcess,exnihilo:barrel:2,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerBarrelProcess,exnihilo:barrel:3,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerBarrelProcess,exnihilo:barrel:4,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerBarrelProcess,exnihilo:barrel:5,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerBarrelProcess,exnihilo:barrel_stone,,excompressum,TRUE,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerBarrelProcess,exastris:barrel_thaumium,,excompressum,TRUE,,,,,,
|
||||
crafting,rftools:crafterBlock1,,rftools,TRUE,,,,,,
|
||||
crafting,rftools:crafterBlock2,,rftools,TRUE,,,,,,
|
||||
crafting,rftools:crafterBlock3,,rftools,TRUE,,,,,,
|
||||
crafting,StevesCarts:CartModule:87,,StevesCarts,TRUE,,,,,,
|
||||
crafting,StevesCarts:CartModule:92,,StevesCarts,TRUE,,,,,,
|
||||
smelting,StevesCarts:CartModule:91,,StevesCarts,TRUE,,,,,,
|
||||
smelting,StevesCarts:CartModule:93,,StevesCarts,TRUE,,,,,,
|
||||
com.djgiannuzz.thaumcraftneiplugin.nei.recipehandler.ArcaneShapedRecipeHandler,thaumicenergistics:thaumicenergistics.block.arcane.assembler,,thaumicenergistics,TRUE,,,,,,
|
||||
com.djgiannuzz.thaumcraftneiplugin.nei.recipehandler.ArcaneShapelessRecipeHandler,thaumicenergistics:thaumicenergistics.block.arcane.assembler,,thaumicenergistics,TRUE,,,,,,
|
||||
ru.timeconqueror.tcneiadditions.nei.arcaneworkbench.ArcaneCraftingShapedHandler,thaumicenergistics:thaumicenergistics.block.arcane.assembler,,thaumicenergistics,TRUE,,,,,,
|
||||
com.djgiannuzz.thaumcraftneiplugin.nei.recipehandler.ArcaneShapedRecipeHandler,thaumicenergistics:part.base:5,,thaumicenergistics,TRUE,,,,,,
|
||||
com.djgiannuzz.thaumcraftneiplugin.nei.recipehandler.ArcaneShapelessRecipeHandler,thaumicenergistics:part.base:6,,thaumicenergistics,TRUE,,,,,,
|
||||
ru.timeconqueror.tcneiadditions.nei.arcaneworkbench.ArcaneCraftingShapedHandler,thaumicenergistics:part.base:7,,thaumicenergistics,TRUE,,,,,,
|
||||
crafting,BiblioCraft:BiblioWorkbench,,BiblioCraft,TRUE,,,,,,
|
||||
crafting,BiblioCraft:BiblioWorkbench:1,,BiblioCraft,TRUE,,,,,,
|
||||
crafting,BiblioCraft:BiblioWorkbench:2,,BiblioCraft,TRUE,,,,,,
|
||||
crafting,BiblioCraft:BiblioWorkbench:3,,BiblioCraft,TRUE,,,,,,
|
||||
crafting,BiblioCraft:BiblioWorkbench:4,,BiblioCraft,TRUE,,,,,,
|
||||
crafting,BiblioCraft:BiblioWorkbench:5,,BiblioCraft,TRUE,,,,,,
|
||||
crafting,BiblioCraft:BiblioWorkbench:6,,BiblioCraft,TRUE,,,,,,
|
||||
crafting,ComputerCraft:CC-TurtleExpanded,{leftUpgrade:2},ComputerCraft,TRUE,,,,,,
|
||||
crafting,ComputerCraft:CC-TurtleAdvanced,{leftUpgrade:2},ComputerCraft,TRUE,,,,,,
|
||||
|
@@ -369,16 +369,27 @@ NEIArcFurnaceHandlerHeating,Immersive Engineering,,,ImmersiveEngineering,TRUE,,,
|
||||
NEIArcFurnaceHandlerMelting,Immersive Engineering,terrafirmacraftplus:item.Molten Glass,,ImmersiveEngineering,TRUE,,,65,166,5,,,,,,
|
||||
NEIArcFurnaceHandlerWelding,Immersive Engineering,terrafirmacraftplus:item.Bismuth Double Ingot,,ImmersiveEngineering,TRUE,,,65,166,5,,,,,,
|
||||
NEIArcFurnaceHandlerElectrolysis,Immersive Engineering,teloaddon:Alumina,,ImmersiveEngineering,TRUE,,,65,166,5,,,,,,
|
||||
NEIArcFurnaceHandlerCarrot Ingot,Immersive Engineering,minecraft:carrot,,ImmersiveEngineering,TRUE,,,65,166,5,,,,,,
|
||||
NEIArcFurnaceHandlerExtraction,Immersive Engineering,minecraft:glowstone_dust,,ImmersiveEngineering,TRUE,,,65,166,5,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIShaderBagHandler,Immersive Engineering,ImmersiveEngineering:shaderBag,,ImmersiveEngineering,TRUE,,,65,166,5,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIBlueprintHandler,Immersive Engineering,ImmersiveEngineering:blueprint,,ImmersiveEngineering,TRUE,,,65,166,5,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIBlueprintHandler,Immersive Engineering,ImmersiveEngineering:woodenDevice:5,,ImmersiveEngineering,TRUE,,,65,166,5,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEICokeOvenHandler,Immersive Engineering,ImmersiveEngineering:stoneDecoration:1,,ImmersiveEngineering,TRUE,,,71,166,5,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIBlastFurnaceHandler,Immersive Engineering,ImmersiveEngineering:stoneDecoration:2,,ImmersiveEngineering,TRUE,,,71,166,5,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEISqueezerHandler,Immersive Engineering,ImmersiveEngineering:metalMultiblock:2,,ImmersiveEngineering,TRUE,,,71,166,5,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIFermenterHandler,Immersive Engineering,ImmersiveEngineering:metalMultiblock:3,,ImmersiveEngineering,TRUE,,,71,166,5,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIRefineryHandler,Immersive Engineering,ImmersiveEngineering:metalDevice2:5,,ImmersiveEngineering,TRUE,,,65,166,5,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIRefineryHandler,Immersive Engineering,ImmersiveEngineering:metalMultiblock:4,,ImmersiveEngineering,TRUE,,,65,166,5,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIBottlingMachineHandler,Immersive Engineering,minecraft:glass_bottle,,ImmersiveEngineering,TRUE,,,65,166,5,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIMetalPressHandler,Immersive Engineering,ImmersiveEngineering:mold,,ImmersiveEngineering,TRUE,,,65,166,5,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEICrusherHandler,Immersive Engineering,minecraft:hopper,,ImmersiveEngineering,TRUE,,,71,166,5,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEIMetalPressHandler,Immersive Engineering,ImmersiveEngineering:metalMultiblock:13,,ImmersiveEngineering,TRUE,,,65,166,5,,,,,,
|
||||
blusunrize.immersiveengineering.client.nei.NEICrusherHandler,Immersive Engineering,ImmersiveEngineering:metalMultiblock:5,,ImmersiveEngineering,TRUE,,,71,166,5,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.CrystallizerNEI,Advanced Rocketry,advancedRocketry:crystallizer,,advancedRocketry,TRUE,,,65,166,5,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.PrecisionAssemberNEI,Advanced Rocketry,advancedRocketry:precisionassemblingmachine,,advancedRocketry,TRUE,,,96,166,5,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.CuttingMachineNEI,Advanced Rocketry,advancedRocketry:tile.cuttingMachine,,advancedRocketry,TRUE,,,96,166,5,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.BlastFurnaceNEI,Advanced Rocketry,advancedRocketry:tile.electricArcFurnace,,advancedRocketry,TRUE,,,96,166,5,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.ElectrolyserNEI,Advanced Rocketry,advancedRocketry:tile.electrolyser,,advancedRocketry,TRUE,,,96,166,5,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.LatheNEI,Advanced Rocketry,advancedRocketry:tile.lathe,,advancedRocketry,TRUE,,,96,166,5,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.ChemicalReactorNEI,Advanced Rocketry,advancedRocketry:tile.chemreactor,,advancedRocketry,TRUE,,,96,166,5,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.PlatePresserNEI,Advanced Rocketry,advancedRocketry:tile.blockHandPress,,advancedRocketry,TRUE,,,65,166,5,,,,,,
|
||||
zmaster587.advancedRocketry.integration.nei.RollingMachineNEI,Advanced Rocketry,advancedRocketry:tile.rollingMachine,,advancedRocketry,TRUE,,,96,166,5,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AnvilRecipeHandler,TerraFirmaCraft+,terrafirmacraftplus:Anvil,,terrafirmacraftplus,TRUE,,10,138,208,2,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.QuernRecipeHandler,TerraFirmaCraft+,terrafirmacraftplus:item.Quern,,terrafirmacraftplus,TRUE,,,65,166,5,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.KilnRecipeHandler,TerraFirmaCraft+,,,terrafirmacraftplus,TRUE,,,65,166,5,terrafirmacraftneiplugin:textures/gui/pitkiln.png,47,38,14,14,
|
||||
@@ -388,6 +399,9 @@ net.dries007.tfcnei.recipeHandlers.ClothingRecipeHandler,TerraFirmaCraft+,terraf
|
||||
net.dries007.tfcnei.recipeHandlers.BarrelRecipeHandler,TerraFirmaCraft+,terrafirmacraftplus:Barrel,,terrafirmacraftplus,TRUE,,,65,166,5,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.AlloyRecipeHandler,TerraFirmaCraft+,terrafirmacraftplus:Crucible,,terrafirmacraftplus,TRUE,,,65,166,5,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.HeatRecipeHandler,TerraFirmaCraft+,terrafirmacraftplus:Firepit,,terrafirmacraftplus,TRUE,,,65,166,5,,,,,,
|
||||
net.dries007.tfcnei.recipeHandlers.PressRecipeHandler,TerraFirmaCraft+,terrafirmacraftplus:StoneHopper,,terrafirmacraftplus,TRUE,,,65,166,5,,,,,,
|
||||
letiu.modbase.integration.nei.ShapelessHandler,Pistronics 2,minecraft:crafting_table,,Pistronics2,TRUE,,,65,166,5,,,,,,
|
||||
letiu.modbase.integration.nei.ShapedHandler,Pistronics 2,minecraft:crafting_table,,Pistronics2,TRUE,,,65,166,5,,,,,,
|
||||
minechem.nei.ChemicalBucketNEIRecipeHandler,Minecraft,minecraft:crafting_table,,minechem,TRUE,,,65,166,5,,,,,,
|
||||
minechem.nei.DecomposerNEIRecipeHandler,Minechem,minechem:tile.chemicalDecomposer,,minechem,TRUE,,,131,166,2,,,,,,
|
||||
minechem.nei.SynthesisNEIRecipeHandler,Minechem,minechem:tile.chemicalSynthesizer,,minechem,TRUE,,,65,166,5,,,,,,
|
||||
@@ -424,26 +438,31 @@ mekanism.client.nei.SolarNeutronRecipeHandler,Mekanism,Mekanism:MachineBlock3:1,
|
||||
mekanism.client.nei.ThermalEvaporationRecipeHandler,Mekanism,Mekanism:BasicBlock:14,,Mekanism,TRUE,,,62,,5,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerHammer,Ex Nihilo,exnihilo:hammer_iron,,exnihilo,TRUE,,,58,,5,,,,,,
|
||||
exnihilo.compatibility.nei.RecipeHandlerSieve,Ex Nihilo,exnihilo:sifting_table,,exnihilo,TRUE,,,130,,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.AlloySmelterRecipeHandler,GregTech-Addon,gregtech_addon:machine:56,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.AssemblerRecipeHandler,GregTech-Addon,gregtech_addon:machine:60,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.BenderRecipeHandler,GregTech-Addon,gregtech_addon:machine:59,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.BlastRecipeHandler,GregTech-Addon,gregtech_addon:machine:29,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.BronzeBlastRecipeHandler,GregTech-Addon,gregtech_addon:machine:136,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.CannerRecipeHandler,GregTech-Addon,gregtech_addon:machine:57,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.CentrifugeRecipeHandler,GregTech-Addon,gregtech_addon:machine:62,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.ChemicalRecipeHandler,GregTech-Addon,gregtech_addon:machine:41,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.CutterRecipeHandler,GregTech-Addon,gregtech_addon:machine:113,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.DistillationRecipeHandler,GregTech-Addon,gregtech_addon:machine:44,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.ElectrolyzerRecipeHandler,GregTech-Addon,gregtech_addon:machine:25,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.ExtruderRecipeHandler,GregTech-Addon,gregtech_addon:machine:115,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.FusionRecipeHandler,GregTech-Addon,gregtech_addon:machine:80,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.GeneratorHandler,GregTech-Addon,,,gregtech_addon,TRUE,,15,145,166,2,nei:textures/nei_tabbed_sprites.png,80,0,14,14,
|
||||
gregtechmod.mistaqur.nei.handlers.GrinderRecipeHandler,GregTech-Addon,gregtech_addon:machine:28,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.ImplosionRecipeHandler,GregTech-Addon,gregtech_addon:machine:31,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.LatheRecipeHandler,GregTech-Addon,gregtech_addon:machine:111,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.SawmillRecipeHandler,GregTech-Addon,gregtech_addon:machine:32,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.VacuumFreezerRecipeHandler,GregTech-Addon,gregtech_addon:machine:38,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtechmod.mistaqur.nei.handlers.WiremillRecipeHandler,GregTech-Addon,gregtech_addon:machine:55,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.Alloy,GregTech-Addon,gregtech_addon:machine:56,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.Assembler,GregTech-Addon,gregtech_addon:machine:60,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.Bender,GregTech-Addon,gregtech_addon:machine:59,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.Blast,GregTech-Addon,gregtech_addon:machine:29,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.BronzeBlast,GregTech-Addon,gregtech_addon:machine:136,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.Canner,GregTech-Addon,gregtech_addon:machine:57,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.centrifuge,GregTech-Addon,gregtech_addon:machine:62,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.chemicalreactor,GregTech-Addon,gregtech_addon:machine:41,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.Cutter,GregTech-Addon,gregtech_addon:machine:113,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.Distillation,GregTech-Addon,gregtech_addon:machine:44,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.electrolyzer,GregTech-Addon,gregtech_addon:machine:25,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.extruder,GregTech-Addon,gregtech_addon:machine:115,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.fusion,GregTech-Addon,gregtech_addon:machine:80,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.thermal_generator,GregTech-Addon,gregtech_addon:machine:35,,gregtech_addon,TRUE,,15,145,166,2,,80,0,14,14,
|
||||
gregtech.diesel_generator,GregTech-Addon,gregtech_addon:machine:33,,gregtech_addon,TRUE,,15,145,166,2,,80,0,14,14,
|
||||
gregtech.gas_turbine,GregTech-Addon,gregtech_addon:machine:108,,gregtech_addon,TRUE,,15,145,166,2,,80,0,14,14,
|
||||
gregtech.semifluid_generator,GregTech-Addon,gregtech_addon:machine:36,,gregtech_addon,TRUE,,15,145,166,2,,80,0,14,14,
|
||||
gregtech.plasma_generator,GregTech-Addon,gregtech_addon:machine:37,,gregtech_addon,TRUE,,15,145,166,2,,80,0,14,14,
|
||||
gregtech.magic_generator,GregTech-Addon,gregtech_addon:machine:42,,gregtech_addon,TRUE,,15,145,166,2,,80,0,14,14,
|
||||
gregtech.Grinder,GregTech-Addon,gregtech_addon:machine:28,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.Implosion,GregTech-Addon,gregtech_addon:machine:31,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.Lathe,GregTech-Addon,gregtech_addon:machine:111,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.Sawmill,GregTech-Addon,gregtech_addon:machine:32,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.VacuumFreezer,GregTech-Addon,gregtech_addon:machine:38,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
gregtech.Wiremill,GregTech-Addon,gregtech_addon:machine:55,,gregtech_addon,TRUE,,15,145,166,2,,,,,,
|
||||
cofh.thermaldynamics.plugins.nei.RecipeHandlerCover,Thermal Dynamics,ThermalDynamics:cover,"{Block:""minecraft:glass"",Meta:0b}",ThermalDynamics,TRUE,,,65,166,5,,,,,,
|
||||
neresources.nei.NEIAdvSeedHandler,Not Enough Resources,minecraft:wheat,,neresources,TRUE,,,65,166,5,,,,,,
|
||||
neresources.nei.NEIDungeonHandler,Not Enough Resources,minecraft:chest,,neresources,TRUE,,,130,166,2,,,,,,
|
||||
@@ -473,4 +492,12 @@ nc.crafting.nei.HeliumExtractorRecipeHandler,NuclearCraft,NuclearCraft:heliumExt
|
||||
nc.crafting.nei.RecyclerRecipeHandler,NuclearCraft,NuclearCraft:recyclerIdle,,NuclearCraft,TRUE,,,65,166,5,,,,,,
|
||||
nc.crafting.nei.NuclearWorkspaceRecipeHandler,NuclearCraft,NuclearCraft:nuclearWorkspace,,NuclearCraft,TRUE,,,130,,2,,,,,,
|
||||
ganymedes01.etfuturum.NEI_EtFuturum_Config$NEI_Recipes_Smoker,EtFuturum Requiem,etfuturum:lit_smoker,,etfuturum,TRUE,,,65,166,5,,,,,,
|
||||
ganymedes01.etfuturum.NEI_EtFuturum_Config$NEI_Recipes_BlastFurnace,EtFuturum Requiem,etfuturum:lit_blast_furnace,,etfuturum,TRUE,,,65,166,5,,,,,,
|
||||
ganymedes01.etfuturum.NEI_EtFuturum_Config$NEI_Recipes_BlastFurnace,EtFuturum Requiem,etfuturum:lit_blast_furnace,,etfuturum,TRUE,,,65,166,5,,,,,,
|
||||
connor135246.campfirebackport.client.compat.nei.NEICampfireRecipeHandler,Campfire Backport,campfirebackport:campfire,,campfirebackport,TRUE,,,65,166,5,,,,,,
|
||||
connor135246.campfirebackport.client.compat.nei.NEICampfireStateChangerHandler,Campfire Backport,campfirebackport:campfire_base,,campfirebackport,TRUE,,,65,166,5,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerHeavySieve,Ex Compressum,excompressum:heavySieve,,excompressum,TRUE,,,130,166,5,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerBarrelProcess,Ex Compressum,exnihilo:barrel,,excompressum,TRUE,,,58,166,10,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerComposting,Ex Compressum,exnihilo:barrel,,excompressum,TRUE,,,130,166,5,,,,,,
|
||||
net.blay09.mods.excompressum.compat.nei.RecipeHandlerCompressedHammer,Ex Compressum,excompressum:compressedHammerIron,,excompressum,TRUE,,,58,166,10,,,,,,
|
||||
com.InfinityRaider.AgriCraft.compatibility.NEI.NEICropMutationHandler,AgriCraft,AgriCraft:cropsItem,,AgriCraft,TRUE,,,85,166,5,,,,,,
|
||||
com.InfinityRaider.AgriCraft.compatibility.NEI.NEICropProductHandler,AgriCraft,minecraft:farmland,,AgriCraft,TRUE,,,85,166,5,,,,,,
|
||||
|
@@ -8,6 +8,7 @@ nei.key.ctrl.mac=CMD
|
||||
|
||||
nei.bookmark.toggle=Bookmarks
|
||||
nei.bookmark.toggle.tip=Toggle visibility of the Bookmark Panel
|
||||
nei.bookmark.viewmode.toggle.tip=Toggle Bookmark View Mode
|
||||
|
||||
nei.enchant=Enchant
|
||||
nei.enchant.level=Level
|
||||
@@ -66,6 +67,7 @@ nei.chat.rain.on=Rain turned on
|
||||
nei.chat.rain.off=Rain turned off
|
||||
nei.chat.time=Day %d. %d:00
|
||||
nei.chat.give.noitem=No such item.
|
||||
nei.chat.recipe.error=There was error during loading recipe. Please check log for details.
|
||||
|
||||
nei.options=NEI Options
|
||||
nei.options.back=Back
|
||||
@@ -94,6 +96,7 @@ nei.options.keys.gui.prev_machine=Prev Machine
|
||||
nei.options.keys.gui.search=Focus Search Bar
|
||||
nei.options.keys.gui.bookmark=Add Bookmark
|
||||
nei.options.keys.gui.hide_bookmarks=Toggle Bookmark Panel Visibility
|
||||
nei.options.keys.gui.overlay=Overlay Recipe
|
||||
nei.options.keys.world=World
|
||||
nei.options.keys.world.chunkoverlay=Chunk Boundary Overlay
|
||||
nei.options.keys.world.moboverlay=Mob Spawn Overlay
|
||||
@@ -132,9 +135,15 @@ nei.options.inventory.saveCurrentRecipeInBookmarksEnabled.false=Disabled
|
||||
nei.options.inventory.useNBTInBookmarks=Use NBT in Bookmarks
|
||||
nei.options.inventory.useNBTInBookmarks.true=Yes
|
||||
nei.options.inventory.useNBTInBookmarks.false=No
|
||||
nei.options.inventory.showRecipeMarker=Show Recipe Marker
|
||||
nei.options.inventory.showRecipeMarker.true=Yes
|
||||
nei.options.inventory.showRecipeMarker.false=No
|
||||
nei.options.inventory.creative_tab_style=Creative or JEI tab style
|
||||
nei.options.inventory.creative_tab_style.true=Creative
|
||||
nei.options.inventory.creative_tab_style.false=JEI
|
||||
nei.options.inventory.ignore_potion_overlap=Ignore overlap with potion effect HUD
|
||||
nei.options.inventory.ignore_potion_overlap.true=Yes
|
||||
nei.options.inventory.ignore_potion_overlap.false=No
|
||||
nei.options.inventory.widgetsenabled.true=NEI Enabled
|
||||
nei.options.inventory.widgetsenabled.false=NEI Disabled
|
||||
nei.options.inventory.cheatmode.0=Recipe Mode
|
||||
@@ -174,6 +183,9 @@ nei.options.inventory.disableMouseScrollTransfer.false=False
|
||||
nei.options.inventory.invertMouseScrollTransfer=Invert Mouse Wheel Transfer Direction
|
||||
nei.options.inventory.invertMouseScrollTransfer.true=True
|
||||
nei.options.inventory.invertMouseScrollTransfer.false=False
|
||||
nei.options.inventory.cacheItemRendering=Cache Item Rendering
|
||||
nei.options.inventory.cacheItemRendering.true=True
|
||||
nei.options.inventory.cacheItemRendering.false=False
|
||||
|
||||
nei.options.command=Commands
|
||||
nei.options.command.creative=Gamemode
|
||||
@@ -192,6 +204,8 @@ nei.options.world.highlight_tips.hide=Hidden
|
||||
nei.options.world.highlight_tips.show=Shown
|
||||
nei.options.world.highlight_tips.sample=Sample
|
||||
|
||||
nei.options.world.panels=Panels Settings
|
||||
|
||||
nei.options.tools=Tools
|
||||
nei.options.tools.handler_load_from_config=Load handlers from Config
|
||||
nei.options.tools.handler_load_from_config.true=Config
|
||||
|
||||
@@ -174,14 +174,14 @@ nei.recipe.fuel.processed=Обработано: %s
|
||||
nei.recipe.fuel.produced=Произведено: %s
|
||||
nei.recipe.firework=Фейерверки
|
||||
nei.recipe.firework.tooltip0=Красители добавляют цвета на звёздочку
|
||||
nei.recipe.firework.tooltip1=Recolouring adds fade colours to the charge
|
||||
nei.recipe.firework.tooltip2=Multiple charges can be spawned from one rocket
|
||||
nei.recipe.firework.tooltip1=Перекрашивание добавляет исчезающие цвета к заряду
|
||||
nei.recipe.firework.tooltip2=Одна ракета может выпустить несколько зарядов
|
||||
nei.recipe.brewing=Зельеварение
|
||||
nei.recipe.profiler.crafting=Профилирование создания
|
||||
nei.recipe.profiler.usage=Использование профилирования
|
||||
|
||||
nei.itemsort.minecraft=Minecraft
|
||||
nei.itemsort.minecraft.tip=Сортирует предметы сначало из оригинального Minecraft
|
||||
nei.itemsort.minecraft.tip=Сортирует предметы сначала из оригинального Minecraft
|
||||
nei.itemsort.mod=По модификации
|
||||
nei.itemsort.mod.tip=Группирует предметы в один мод, на основе имени мода
|
||||
nei.itemsort.id=ID предмета
|
||||
@@ -215,4 +215,4 @@ nei.subsets.Items.Tools.Shovels=Лопаты
|
||||
nei.subsets.Items.Weapons=Оружие
|
||||
nei.subsets.Items.Weapons.Ranged=Дальнего боя
|
||||
nei.subsets.Items.Weapons.Swords=Мечи
|
||||
nei.subsets.Mod=Модификации
|
||||
nei.subsets.Mod=Модификации
|
||||
@@ -66,6 +66,7 @@ nei.chat.rain.on=开启雨雪
|
||||
nei.chat.rain.off=关闭雨雪
|
||||
nei.chat.time=白天 %d. %d:00
|
||||
nei.chat.give.noitem=没有此物品
|
||||
nei.chat.recipe.error=加载合成表过程中出现错误.请查看log文件获取详细信息.
|
||||
|
||||
nei.options=NEI选项
|
||||
nei.options.back=后退
|
||||
@@ -77,7 +78,7 @@ nei.options.wbutton.tip.0=使用全局设置
|
||||
nei.options.wbutton.tip.1=覆写全局设置
|
||||
|
||||
nei.options.keys=按键绑定
|
||||
nei.options.keys.showenchant=显示附魔
|
||||
nei.options.keys.showenchant=显示附魔值
|
||||
nei.options.keys.gui=物品栏
|
||||
nei.options.keys.gui.recipe=查看合成
|
||||
nei.options.keys.gui.usage=查看用途
|
||||
@@ -94,6 +95,7 @@ nei.options.keys.gui.prev_machine=上一机器
|
||||
nei.options.keys.gui.search=跳转到搜索框
|
||||
nei.options.keys.gui.bookmark=添加书签
|
||||
nei.options.keys.gui.hide_bookmarks=显示/隐藏书签页
|
||||
nei.options.keys.gui.overlay=提取合成表至合成栏/工作台
|
||||
nei.options.keys.world=世界
|
||||
nei.options.keys.world.chunkoverlay=区块(chunks)边界显示
|
||||
nei.options.keys.world.moboverlay=刷怪区域显示
|
||||
@@ -111,6 +113,9 @@ nei.options.inventory=物品栏
|
||||
nei.options.inventory.worldSpecificBookmarks=书签存储位置
|
||||
nei.options.inventory.worldSpecificBookmarks.true=存档内
|
||||
nei.options.inventory.worldSpecificBookmarks.false=全局
|
||||
nei.options.inventory.worldSpecificPresets=预设存储位置
|
||||
nei.options.inventory.worldSpecificPresets.true=存档内
|
||||
nei.options.inventory.worldSpecificPresets.false=全局
|
||||
nei.options.inventory.bookmarksEnabled=显示/隐藏书签页
|
||||
nei.options.inventory.bookmarksEnabled.true=显示
|
||||
nei.options.inventory.bookmarksEnabled.false=隐藏
|
||||
@@ -129,6 +134,9 @@ nei.options.inventory.saveCurrentRecipeInBookmarksEnabled.false=禁用
|
||||
nei.options.inventory.useNBTInBookmarks=在书签中启用NBT
|
||||
nei.options.inventory.useNBTInBookmarks.true=是
|
||||
nei.options.inventory.useNBTInBookmarks.false=否
|
||||
nei.options.inventory.showRecipeMarker=在书签栏显示合成产物标记
|
||||
nei.options.inventory.showRecipeMarker.true=是
|
||||
nei.options.inventory.showRecipeMarker.false=否
|
||||
nei.options.inventory.creative_tab_style=创造模式/JEI标签页
|
||||
nei.options.inventory.creative_tab_style.true=创造模式
|
||||
nei.options.inventory.creative_tab_style.false=JEI
|
||||
@@ -171,6 +179,9 @@ nei.options.inventory.disableMouseScrollTransfer.false=关闭
|
||||
nei.options.inventory.invertMouseScrollTransfer=反转鼠标滚轮方向
|
||||
nei.options.inventory.invertMouseScrollTransfer.true=开启
|
||||
nei.options.inventory.invertMouseScrollTransfer.false=关闭
|
||||
nei.options.inventory.cacheItemRendering=缓存物品渲染
|
||||
nei.options.inventory.cacheItemRendering.true=开启
|
||||
nei.options.inventory.cacheItemRendering.false=关闭
|
||||
|
||||
nei.options.command=指令
|
||||
nei.options.command.creative=游戏模式
|
||||
@@ -189,10 +200,15 @@ nei.options.world.highlight_tips.hide=隐藏
|
||||
nei.options.world.highlight_tips.show=显示
|
||||
nei.options.world.highlight_tips.sample=样本
|
||||
|
||||
nei.options.world.panels=面板布局
|
||||
|
||||
nei.options.tools=工具
|
||||
nei.options.tools.handler_load_from_config=从Config加载预设(handler)
|
||||
nei.options.tools.handler_load_from_config=从Config加载handler(加工所使用的机器类别)
|
||||
nei.options.tools.handler_load_from_config.true=Config
|
||||
nei.options.tools.handler_load_from_config.false=JAR
|
||||
nei.options.tools.catalyst_load_from_config=从Config加载catalysts(加工所使用的具体机器等)
|
||||
nei.options.tools.catalyst_load_from_config.true=Config
|
||||
nei.options.tools.catalyst_load_from_config.false=JAR
|
||||
nei.options.tools.dump=数据存储
|
||||
nei.options.tools.dump.dump=存储
|
||||
nei.options.tools.dump.dumped=%s ID已保存到.minecraft/%s
|
||||
@@ -228,8 +244,12 @@ nei.recipe.shaped=有序合成
|
||||
nei.recipe.shapeless=无序合成
|
||||
nei.recipe.furnace=烧制
|
||||
nei.recipe.fuel=燃料
|
||||
nei.recipe.fuel.smeltCount=可冶炼%s个物品
|
||||
# Deprecated
|
||||
nei.recipe.fuel.required=需要%s个
|
||||
# Deprecated
|
||||
nei.recipe.fuel.processed=可烧制%s个
|
||||
# Deprecated
|
||||
nei.recipe.fuel.produced=可制作%s个
|
||||
nei.recipe.firework=烟花
|
||||
nei.recipe.firework.tooltip0=添加多种染料可增加烟火之星的颜色
|
||||
@@ -275,3 +295,12 @@ nei.subsets.Items.Weapons=武器
|
||||
nei.subsets.Items.Weapons.Ranged=远程
|
||||
nei.subsets.Items.Weapons.Swords=剑
|
||||
nei.subsets.Mod=Mod
|
||||
|
||||
nei.presets.blacklist.label=黑
|
||||
nei.presets.blacklist.tooltip=黑名单
|
||||
nei.presets.whitelist.label=白
|
||||
nei.presets.whitelist.tooltip=白名单
|
||||
nei.presets.textfield.tooltip.1=Enter - 保存
|
||||
nei.presets.textfield.tooltip.2=Esc - 取消
|
||||
nei.presets.label.tooltip=双击编辑
|
||||
nei.presets.label.selected=%s 预设
|
||||
Reference in new issue
Block a user