diff options
author | Raven Szewczyk <git@eigenraven.me> | 2024-05-25 14:09:28 +0100 |
---|---|---|
committer | Raven Szewczyk <git@eigenraven.me> | 2024-05-25 14:09:28 +0100 |
commit | a7e6e9fa443440063e2a0b9b7b017852d4e023ee (patch) | |
tree | 35a05b74d32420c6be83810ebafec8d88092d9a3 | |
parent | 13d47567b6b1103647e5a819e601b426911bb89d (diff) | |
parent | 84481c22d7d4e0834de97a150d257ce6e85ad690 (diff) | |
download | GT5-Unofficial-a7e6e9fa443440063e2a0b9b7b017852d4e023ee.tar.gz GT5-Unofficial-a7e6e9fa443440063e2a0b9b7b017852d4e023ee.tar.bz2 GT5-Unofficial-a7e6e9fa443440063e2a0b9b7b017852d4e023ee.zip |
Merge in GoodGenerator with history
git-subtree-dir: goodgen
git-subtree-mainline: 13d47567b6b1103647e5a819e601b426911bb89d
git-subtree-split: 84481c22d7d4e0834de97a150d257ce6e85ad690
394 files changed, 24719 insertions, 0 deletions
diff --git a/goodgen/.editorconfig b/goodgen/.editorconfig new file mode 100644 index 0000000000..6effbc91a8 --- /dev/null +++ b/goodgen/.editorconfig @@ -0,0 +1,19 @@ +# This is the universal Text Editor Configuration +# for all GTNewHorizons projects +# See: https://editorconfig.org/ + +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{bat,ini}] +end_of_line = crlf + +[*.{dtd,json,info,mcmeta,md,sh,svg,xml,xsd,xsl,yaml,yml}] +indent_size = 2 diff --git a/goodgen/.git-blame-ignore-revs b/goodgen/.git-blame-ignore-revs new file mode 100644 index 0000000000..1a3b96f428 --- /dev/null +++ b/goodgen/.git-blame-ignore-revs @@ -0,0 +1,2 @@ +# Ignore spotlessApply reformat +b846f1dc3a502d157ecf871e2a4a1ff49915f871 diff --git a/goodgen/.gitattributes b/goodgen/.gitattributes new file mode 100644 index 0000000000..fd2792b6cb --- /dev/null +++ b/goodgen/.gitattributes @@ -0,0 +1,44 @@ +* text eol=lf + +*.[jJ][aA][rR] binary + +*.[pP][nN][gG] binary +*.[jJ][pP][gG] binary +*.[jJ][pP][eE][gG] binary +*.[gG][iI][fF] binary +*.[tT][iI][fF] binary +*.[tT][iI][fF][fF] binary +*.[iI][cC][oO] binary +*.[sS][vV][gG] text +*.[eE][pP][sS] binary +*.[xX][cC][fF] binary + +*.[kK][aA][rR] binary +*.[mM]4[aA] binary +*.[mM][iI][dD] binary +*.[mM][iI][dD][iI] binary +*.[mM][pP]3 binary +*.[oO][gG][gG] binary +*.[rR][aA] binary + +*.7[zZ] binary +*.[gG][zZ] binary +*.[tT][aA][rR] binary +*.[tT][gG][zZ] binary +*.[zZ][iI][pP] binary + +*.[tT][cC][nN] binary +*.[sS][oO] binary +*.[dD][lL][lL] binary +*.[dD][yY][lL][iI][bB] binary +*.[pP][sS][dD] binary +*.[tT][tT][fF] binary +*.[oO][tT][fF] binary + +*.[pP][aA][tT][cC][hH] -text + +*.[bB][aA][tT] text eol=crlf +*.[cC][mM][dD] text eol=crlf +*.[pP][sS]1 text eol=crlf + +*[aA][uU][tT][oO][gG][eE][nN][eE][rR][aA][tT][eE][dD]* binary diff --git a/goodgen/.github/workflows/build-and-test.yml b/goodgen/.github/workflows/build-and-test.yml new file mode 100644 index 0000000000..d33f352e71 --- /dev/null +++ b/goodgen/.github/workflows/build-and-test.yml @@ -0,0 +1,15 @@ + +name: Build and test + +on: + pull_request: + branches: [ master, main ] + push: + branches: [ master, main ] + +jobs: + build-and-test: + uses: GTNewHorizons/GTNH-Actions-Workflows/.github/workflows/build-and-test.yml@master + secrets: inherit + with: + timeout: 150 diff --git a/goodgen/.github/workflows/release-tags.yml b/goodgen/.github/workflows/release-tags.yml new file mode 100644 index 0000000000..e4c0be6b0d --- /dev/null +++ b/goodgen/.github/workflows/release-tags.yml @@ -0,0 +1,14 @@ + +name: Release tagged build + +on: + push: + tags: [ '*' ] + +permissions: + contents: write + +jobs: + release-tags: + uses: GTNewHorizons/GTNH-Actions-Workflows/.github/workflows/release-tags.yml@master + secrets: inherit diff --git a/goodgen/.gitignore b/goodgen/.gitignore new file mode 100644 index 0000000000..5e80e0ae57 --- /dev/null +++ b/goodgen/.gitignore @@ -0,0 +1,38 @@ +.gradle +.settings +/.idea/ +/.vscode/ +/run/ +/build/ +/eclipse/ +.classpath +.project +/bin/ +/config/ +/crash-reports/ +/logs/ +options.txt +/saves/ +usernamecache.json +banned-ips.json +banned-players.json +eula.txt +ops.json +server.properties +servers.dat +usercache.json +whitelist.json +/out/ +*.iml +*.ipr +*.iws +src/main/resources/mixins.*([!.]).json +*.bat +*.DS_Store +!gradlew.bat +.factorypath +addon.local.gradle +addon.local.gradle.kts +addon.late.local.gradle +addon.late.local.gradle.kts +layout.json diff --git a/goodgen/CODEOWNERS b/goodgen/CODEOWNERS new file mode 100644 index 0000000000..a6b5f68cd0 --- /dev/null +++ b/goodgen/CODEOWNERS @@ -0,0 +1,3 @@ +# Any Github changes require admin approval +/.github/** @GTNewHorizons/admin + diff --git a/goodgen/LICENSE b/goodgen/LICENSE new file mode 100644 index 0000000000..50820cfca8 --- /dev/null +++ b/goodgen/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 GlodBlock + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/goodgen/README.md b/goodgen/README.md new file mode 100644 index 0000000000..a55bc1474c --- /dev/null +++ b/goodgen/README.md @@ -0,0 +1,3 @@ +# GoodGenerator + +Add some muiltblock generators for GTNH diff --git a/goodgen/build.gradle b/goodgen/build.gradle new file mode 100644 index 0000000000..e57a16f9f1 --- /dev/null +++ b/goodgen/build.gradle @@ -0,0 +1,5 @@ +//version: 1707058017 + +plugins { + id 'com.gtnewhorizons.gtnhconvention' +} diff --git a/goodgen/dependencies.gradle b/goodgen/dependencies.gradle new file mode 100644 index 0000000000..849c64887c --- /dev/null +++ b/goodgen/dependencies.gradle @@ -0,0 +1,12 @@ +// Add your dependencies here + +dependencies { + api('com.github.GTNewHorizons:GT5-Unofficial:5.09.46.23:dev') + api('com.github.GTNewHorizons:bartworks:0.10.11:dev') + implementation('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev') + implementation('com.github.GTNewHorizons:GTplusplus:1.12.10:dev') + + compileOnly('com.github.GTNewHorizons:ThaumicEnergistics:1.6.10-GTNH:dev') {transitive = false} + + runtimeOnly('com.github.GTNewHorizons:Baubles:1.0.4:dev') +} diff --git a/goodgen/gradle.properties b/goodgen/gradle.properties new file mode 100644 index 0000000000..120378917c --- /dev/null +++ b/goodgen/gradle.properties @@ -0,0 +1,189 @@ +# ExampleMod tag to use as Blowdryer (Spotless, etc.) settings version, leave empty to disable. +# LOCAL to test local config updates. +gtnh.settings.blowdryerTag = 0.2.2 + +# Human-readable mod name, available for mcmod.info population. +modName = Good Generator + +# Case-sensitive identifier string, available for mcmod.info population and used for automatic mixin JSON generation. +# Conventionally lowercase. +modId = GoodGenerator + +# Root package of the mod, used to find various classes in other properties, +# mcmod.info substitution, enabling assertions in run tasks, etc. +modGroup = goodgenerator + +# Whether to use modGroup as the maven publishing group. +# Due to a history of using JitPack, the default is com.github.GTNewHorizons for all mods. +useModGroupForPublishing = false + +# Updates your build.gradle and settings.gradle automatically whenever an update is available. +autoUpdateBuildScript = false + +# Version of Minecraft to target +minecraftVersion = 1.7.10 + +# Version of Minecraft Forge to target +forgeVersion = 10.13.4.1614 + +# Specify an MCP channel for dependency deobfuscation and the deobfParams task. +channel = stable + +# Specify an MCP mappings version for dependency deobfuscation and the deobfParams task. +mappingsVersion = 12 + +# Defines other MCP mappings for dependency deobfuscation. +remoteMappings = https\://raw.githubusercontent.com/MinecraftForge/FML/1.7.10/conf/ + +# Select a default username for testing your mod. You can always override this per-run by running +# `./gradlew runClient --username=AnotherPlayer`, or configuring this command in your IDE. +developmentEnvironmentUserName = Developer + +# Enables using modern Java syntax (up to version 17) via Jabel, while still targeting JVM 8. +# See https://github.com/bsideup/jabel for details on how this works. +enableModernJavaSyntax = true + +# Enables injecting missing generics into the decompiled source code for a better coding experience. +# Turns most publicly visible List, Map, etc. into proper List<E>, Map<K, V> types. +enableGenericInjection = false + +# Generate a class with a String field for the mod version named as defined below. +# If generateGradleTokenClass is empty or not missing, no such class will be generated. +# If gradleTokenVersion is empty or missing, the field will not be present in the class. +generateGradleTokenClass = goodgenerator.Tags + +# Name of the token containing the project's current version to generate/replace. +gradleTokenVersion = VERSION + +# [DEPRECATED] Mod ID replacement token. +gradleTokenModId = + +# [DEPRECATED] Mod name replacement token. +gradleTokenModName = + +# [DEPRECATED] +# Multiple source files can be defined here by providing a comma-separated list: Class1.java,Class2.java,Class3.java +# public static final String VERSION = "GRADLETOKEN_VERSION"; +# The string's content will be replaced with your mod's version when compiled. You should use this to specify your mod's +# version in @Mod([...], version = VERSION, [...]). +# Leave these properties empty to skip individual token replacements. +replaceGradleTokenInFile = + +# In case your mod provides an API for other mods to implement you may declare its package here. Otherwise, you can +# leave this property empty. +# Example value: (apiPackage = api) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.api +apiPackage = + +# Specify the configuration file for Forge's access transformers here. It must be placed into /src/main/resources/META-INF/ +# There can be multiple files in a space-separated list. +# Example value: mymodid_at.cfg nei_at.cfg +accessTransformersFile = + +# Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled! +usesMixins = false + +# Adds some debug arguments like verbose output and class export. +usesMixinDebug = false + +# Specify the location of your implementation of IMixinConfigPlugin. Leave it empty otherwise. +mixinPlugin = + +# Specify the package that contains all of your Mixins. You may only place Mixins in this package or the build will fail! +mixinsPackage = + +# Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin! +# This parameter is for legacy compatibility only +# Example value: (coreModClass = asm.FMLPlugin) + (modGroup = com.myname.mymodid) -> com.myname.mymodid.asm.FMLPlugin +coreModClass = + +# If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod ( = some class +# that is annotated with @Mod) you want this to be true. When in doubt: leave it on false! +containsMixinsAndOrCoreModOnly = false + +# Enables Mixins even if this mod doesn't use them, useful if one of the dependencies uses mixins. +forceEnableMixins = false + +# If enabled, you may use 'shadowCompile' for dependencies. They will be integrated into your jar. It is your +# responsibility to check the license and request permission for distribution if required. +usesShadowedDependencies = false + +# If disabled, won't remove unused classes from shadowed dependencies. Some libraries use reflection to access +# their own classes, making the minimization unreliable. +minimizeShadowedDependencies = true + +# If disabled, won't rename the shadowed classes. +relocateShadowedDependencies = true + +# Adds the GTNH maven, CurseMaven, Modrinth, and some more well-known 1.7.10 repositories. +includeWellKnownRepositories = true + +# Change these to your Maven coordinates if you want to publish to a custom Maven repository instead of the default GTNH Maven. +# Authenticate with the MAVEN_USER and MAVEN_PASSWORD environment variables. +# If you need a more complex setup disable maven publishing here and add a publishing repository to addon.gradle. +usesMavenPublishing = true + +# Maven repository to publish the mod to. +# mavenPublishUrl = https\://nexus.gtnewhorizons.com/repository/releases/ + +# Publishing to Modrinth requires you to set the MODRINTH_TOKEN environment variable to your current Modrinth API token. +# +# The project's ID on Modrinth. Can be either the slug or the ID. +# Leave this empty if you don't want to publish to Modrinth. +modrinthProjectId = + +# The project's relations on Modrinth. You can use this to refer to other projects on Modrinth. +# Syntax: scope1-type1:name1;scope2-type2:name2;... +# Where scope can be one of [required, optional, incompatible, embedded], +# type can be one of [project, version], +# and the name is the Modrinth project or version slug/id of the other mod. +# Example: required-project:fplib;optional-project:gasstation;incompatible-project:gregtech +# Note: GTNH Mixins is automatically set as a required dependency if usesMixins = true +modrinthRelations = + +# Publishing to CurseForge requires you to set the CURSEFORGE_TOKEN environment variable to one of your CurseForge API tokens. +# +# The project's numeric ID on CurseForge. You can find this in the About Project box. +# Leave this empty if you don't want to publish on CurseForge. +curseForgeProjectId = + +# The project's relations on CurseForge. You can use this to refer to other projects on CurseForge. +# Syntax: type1:name1;type2:name2;... +# Where type can be one of [requiredDependency, embeddedLibrary, optionalDependency, tool, incompatible], +# and the name is the CurseForge project slug of the other mod. +# Example: requiredDependency:railcraft;embeddedLibrary:cofhlib;incompatible:buildcraft +# Note: UniMixins is automatically set as a required dependency if usesMixins = true. +curseForgeRelations = + +# Optional parameter to customize the produced artifacts. Use this to preserve artifact naming when migrating older +# projects. New projects should not use this parameter. +# customArchiveBaseName = + +# Optional parameter to have the build automatically fail if an illegal version is used. +# This can be useful if you e.g. only want to allow versions in the form of '1.1.xxx'. +# The check is ONLY performed if the version is a git tag. +# Note: the specified string must be escaped, so e.g. 1\\.1\\.\\d+ instead of 1\.1\.\d+ +# versionPattern = + +# Uncomment to prevent the source code from being published. +# noPublishedSources = true + +# Uncomment this to disable Spotless checks. +# This should only be uncommented to keep it easier to sync with upstream/other forks. +# That is, if there is no other active fork/upstream, NEVER change this. +# disableSpotless = true + +# Uncomment this to disable Checkstyle checks (currently wildcard import check). +# disableCheckstyle = true + +# Override the IDEA build type. Valid values are: "" (leave blank, do not override), "idea" (force use native IDEA build), "gradle" +# (force use delegated build). +# This is meant to be set in $HOME/.gradle/gradle.properties. +# e.g. add "systemProp.org.gradle.project.ideaOverrideBuildType=idea" will override the build type to be native build. +# WARNING: If you do use this option, it will overwrite whatever you have in your existing projects. This might not be what you want! +# Usually there is no need to uncomment this here as other developers do not necessarily use the same build type as you. +# ideaOverrideBuildType = idea + +# Whether IDEA should run spotless checks when pressing the Build button. +# This is meant to be set in $HOME/.gradle/gradle.properties. +# ideaCheckSpotlessOnBuild = true + diff --git a/goodgen/gradle/wrapper/gradle-wrapper.jar b/goodgen/gradle/wrapper/gradle-wrapper.jar Binary files differnew file mode 100644 index 0000000000..e6441136f3 --- /dev/null +++ b/goodgen/gradle/wrapper/gradle-wrapper.jar diff --git a/goodgen/gradle/wrapper/gradle-wrapper.properties b/goodgen/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..b82aa23a4f --- /dev/null +++ b/goodgen/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/goodgen/gradlew b/goodgen/gradlew new file mode 100755 index 0000000000..1aa94a4269 --- /dev/null +++ b/goodgen/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/goodgen/gradlew.bat b/goodgen/gradlew.bat new file mode 100644 index 0000000000..25da30dbde --- /dev/null +++ b/goodgen/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/goodgen/repositories.gradle b/goodgen/repositories.gradle new file mode 100644 index 0000000000..c227b16ec2 --- /dev/null +++ b/goodgen/repositories.gradle @@ -0,0 +1,4 @@ +// Add any additional repositories for your dependencies here + +repositories { +} diff --git a/goodgen/settings.gradle b/goodgen/settings.gradle new file mode 100644 index 0000000000..94c2daf35c --- /dev/null +++ b/goodgen/settings.gradle @@ -0,0 +1,23 @@ + +pluginManagement { + repositories { + maven { + // RetroFuturaGradle + name "GTNH Maven" + url "https://nexus.gtnewhorizons.com/repository/public/" + mavenContent { + includeGroup("com.gtnewhorizons") + includeGroupByRegex("com\\.gtnewhorizons\\..+") + } + } + gradlePluginPortal() + mavenCentral() + mavenLocal() + } +} + +plugins { + id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.22' +} + + diff --git a/goodgen/src/main/java/goodgenerator/api/recipe/ComponentAssemblyLineFrontend.java b/goodgen/src/main/java/goodgenerator/api/recipe/ComponentAssemblyLineFrontend.java new file mode 100644 index 0000000000..b645c8e8f9 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/api/recipe/ComponentAssemblyLineFrontend.java @@ -0,0 +1,44 @@ +package goodgenerator.api.recipe; + +import java.util.Collections; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; + +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.common.gui.modularui.UIHelper; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class ComponentAssemblyLineFrontend extends RecipeMapFrontend { + + public ComponentAssemblyLineFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super(uiPropertiesBuilder, neiPropertiesBuilder); + } + + @Override + public List<Pos2d> getItemInputPositions(int itemInputCount) { + return UIHelper.getGridPositions(itemInputCount, 16, 8, 3); + } + + @Override + public List<Pos2d> getItemOutputPositions(int itemOutputCount) { + return Collections.singletonList(new Pos2d(142, 8)); + } + + @Override + public List<Pos2d> getFluidInputPositions(int fluidInputCount) { + + return UIHelper.getGridPositions(fluidInputCount, 88, 26, 4); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder, Pos2d windowOffset) {} +} diff --git a/goodgen/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerBackend.java b/goodgen/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerBackend.java new file mode 100644 index 0000000000..cdd3a4d57f --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerBackend.java @@ -0,0 +1,25 @@ +package goodgenerator.api.recipe; + +import javax.annotation.ParametersAreNonnullByDefault; + +import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; +import gregtech.api.recipe.maps.FuelBackend; +import gregtech.api.util.GT_Recipe; +import gregtech.api.util.MethodsReturnNonnullByDefault; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class ExtremeHeatExchangerBackend extends FuelBackend { + + public ExtremeHeatExchangerBackend(RecipeMapBackendPropertiesBuilder propertiesBuilder) { + super(propertiesBuilder); + } + + @Override + public GT_Recipe compileRecipe(GT_Recipe recipe) { + if (!(recipe instanceof ExtremeHeatExchangerRecipe)) { + throw new RuntimeException("Recipe must be instance of ExtremeHeatExchangerRecipe"); + } + return super.compileRecipe(recipe); + } +} diff --git a/goodgen/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerFrontend.java b/goodgen/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerFrontend.java new file mode 100644 index 0000000000..b933802fc2 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerFrontend.java @@ -0,0 +1,58 @@ +package goodgenerator.api.recipe; + +import java.util.Arrays; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizons.modularui.api.math.Pos2d; + +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.GT_Utility; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.nei.RecipeDisplayInfo; +import gregtech.nei.formatter.INEISpecialInfoFormatter; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class ExtremeHeatExchangerFrontend extends RecipeMapFrontend { + + public ExtremeHeatExchangerFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super(uiPropertiesBuilder, neiPropertiesBuilder.neiSpecialInfoFormatter(new EHESpecialValueFormatter())); + } + + @Override + public List<Pos2d> getFluidInputPositions(int fluidInputCount) { + return Arrays.asList(new Pos2d(26, 13), new Pos2d(26, 37)); + } + + @Override + public List<Pos2d> getFluidOutputPositions(int fluidOutputCount) { + return Arrays.asList(new Pos2d(128, 13), new Pos2d(128, 31), new Pos2d(128, 54)); + } + + private static class EHESpecialValueFormatter implements INEISpecialInfoFormatter { + + @Override + public List<String> format(RecipeDisplayInfo recipeInfo) { + FluidStack[] Inputs = recipeInfo.recipe.mFluidInputs; + FluidStack[] Outputs = recipeInfo.recipe.mFluidOutputs; + int threshold = recipeInfo.recipe.mSpecialValue; + return Arrays.asList( + StatCollector.translateToLocal("value.extreme_heat_exchanger.0") + " " + + GT_Utility.formatNumbers(Inputs[0].amount) + + " L/s", + StatCollector.translateToLocal("value.extreme_heat_exchanger.1"), + GT_Utility.formatNumbers(Outputs[0].amount / 160) + " L/s", + StatCollector.translateToLocal("value.extreme_heat_exchanger.2"), + GT_Utility.formatNumbers(Outputs[1].amount / 160) + " L/s", + StatCollector.translateToLocal("value.extreme_heat_exchanger.4") + " " + threshold + " L/s"); + } + } +} diff --git a/goodgen/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerRecipe.java b/goodgen/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerRecipe.java new file mode 100644 index 0000000000..4a32e882f8 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerRecipe.java @@ -0,0 +1,66 @@ +package goodgenerator.api.recipe; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.util.GT_Recipe; + +public class ExtremeHeatExchangerRecipe extends GT_Recipe { + + public ExtremeHeatExchangerRecipe(FluidStack[] input, FluidStack[] output, int special) { + super(false, null, null, null, null, input, output, 0, 0, special); + } + + public int getMaxHotFluidConsume() { + if (this.mFluidInputs != null) { + return this.mFluidInputs[0].amount; + } + return 0; + } + + public Fluid getNormalSteam() { + if (this.mFluidOutputs != null) { + return this.mFluidOutputs[0].getFluid(); + } + return null; + } + + public Fluid getHeatedSteam() { + if (this.mFluidOutputs != null) { + return this.mFluidOutputs[1].getFluid(); + } + return null; + } + + public Fluid getCooledFluid() { + if (this.mFluidOutputs != null) { + return this.mFluidOutputs[2].getFluid(); + } + return null; + } + + public int getEUt() { + if (getNormalSteam() != null) { + switch (getNormalSteam().getName()) { + case "steam": { + int tVal = this.mFluidInputs[1].amount * 4; + if (tVal < 0) tVal = -tVal; + return tVal; + } + case "ic2superheatedsteam": { + int tVal = this.mFluidInputs[1].amount * 8; + if (tVal < 0) tVal = -tVal; + return tVal; + } + case "supercriticalsteam": { + int tVal = this.mFluidInputs[1].amount * 800; + if (tVal < 0) tVal = -tVal; + return tVal; + } + default: + return 0; + } + } + return 0; + } +} diff --git a/goodgen/src/main/java/goodgenerator/api/recipe/GoodGeneratorRecipeMaps.java b/goodgen/src/main/java/goodgenerator/api/recipe/GoodGeneratorRecipeMaps.java new file mode 100644 index 0000000000..85e4ebca1d --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/api/recipe/GoodGeneratorRecipeMaps.java @@ -0,0 +1,78 @@ +package goodgenerator.api.recipe; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; + +import net.minecraft.util.StatCollector; + +import goodgenerator.client.GUI.GG_UITextures; +import gregtech.api.enums.GT_Values; +import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMapBackend; +import gregtech.api.recipe.RecipeMapBuilder; +import gregtech.api.util.GT_Utility; +import gregtech.nei.formatter.SimpleSpecialValueFormatter; + +public class GoodGeneratorRecipeMaps { + + public static final RecipeMap<RecipeMapBackend> naquadahReactorFuels = RecipeMapBuilder + .of("gg.recipe.naquadah_reactor") + .maxIO(0, 0, 1, 1) + .minInputs(0, 1) + .neiSpecialInfoFormatter(new SimpleSpecialValueFormatter("value.naquadah_reactor")) + .neiRecipeComparator(Comparator.comparing(recipe -> recipe.mSpecialValue)) + .dontUseProgressBar() + .addSpecialTexture(59, 20, 58, 42, GG_UITextures.PICTURE_NAQUADAH_REACTOR) + .build(); + public static final RecipeMap<RecipeMapBackend> naquadahFuelRefineFactoryRecipes = RecipeMapBuilder + .of("gg.recipe.naquadah_fuel_refine_factory") + .maxIO(6, 0, 2, 1) + .minInputs(0, 1) + .neiSpecialInfoFormatter(new SimpleSpecialValueFormatter("value.naquadah_fuel_refine_factory")) + .build(); + public static final RecipeMap<?> neutronActivatorRecipes = RecipeMapBuilder.of("gg.recipe.neutron_activator") + .maxIO(9, 9, 1, 1) + .dontUseProgressBar() + .addSpecialTexture(73, 22, 31, 21, GG_UITextures.PICTURE_NEUTRON_ACTIVATOR) + .neiSpecialInfoFormatter(recipeInfo -> { + int minNKE = recipeInfo.recipe.mSpecialValue % 10000; + int maxNKE = recipeInfo.recipe.mSpecialValue / 10000; + return Arrays.asList( + StatCollector.translateToLocal("value.neutron_activator.0"), + GT_Utility.formatNumbers(minNKE) + StatCollector.translateToLocal("value.neutron_activator.2"), + StatCollector.translateToLocal("value.neutron_activator.1"), + GT_Utility.formatNumbers(maxNKE) + StatCollector.translateToLocal("value.neutron_activator.2")); + }) + .build(); + public static final RecipeMap<ExtremeHeatExchangerBackend> extremeHeatExchangerFuels = RecipeMapBuilder + .of("gg.recipe.extreme_heat_exchanger", ExtremeHeatExchangerBackend::new) + .maxIO(0, 0, 2, 3) + .dontUseProgressBar() + .addSpecialTexture(47, 13, 78, 59, GG_UITextures.PICTURE_EXTREME_HEAT_EXCHANGER) + .frontend(ExtremeHeatExchangerFrontend::new) + .build(); + public static final RecipeMap<RecipeMapBackend> preciseAssemblerRecipes = RecipeMapBuilder + .of("gg.recipe.precise_assembler") + .maxIO(4, 1, 4, 0) + .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) + .progressBarPos(85, 30) + .neiTransferRect(80, 30, 35, 18) + .neiSpecialInfoFormatter(new SimpleSpecialValueFormatter("value.precise_assembler")) + .frontend(PreciseAssemblerFrontend::new) + .build(); + public static final RecipeMap<RecipeMapBackend> componentAssemblyLineRecipes = RecipeMapBuilder + .of("gg.recipe.componentassemblyline") + .maxIO(12, 1, 12, 0) + .neiTransferRect(70, 15, 18, 54) + .neiSpecialInfoFormatter( + recipeInfo -> Collections.singletonList( + StatCollector.translateToLocalFormatted( + "value.component_assembly_line", + GT_Values.VN[recipeInfo.recipe.mSpecialValue]))) + .dontUseProgressBar() + .addSpecialTexture(70, 11, 72, 40, GG_UITextures.PICTURE_COMPONENT_ASSLINE) + .frontend(ComponentAssemblyLineFrontend::new) + .build(); +} diff --git a/goodgen/src/main/java/goodgenerator/api/recipe/PreciseAssemblerFrontend.java b/goodgen/src/main/java/goodgenerator/api/recipe/PreciseAssemblerFrontend.java new file mode 100644 index 0000000000..2f4f0e308b --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/api/recipe/PreciseAssemblerFrontend.java @@ -0,0 +1,39 @@ +package goodgenerator.api.recipe; + +import java.util.Collections; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.gtnewhorizons.modularui.api.math.Pos2d; + +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.common.gui.modularui.UIHelper; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class PreciseAssemblerFrontend extends RecipeMapFrontend { + + public PreciseAssemblerFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super(uiPropertiesBuilder, neiPropertiesBuilder); + } + + @Override + public List<Pos2d> getItemInputPositions(int itemInputCount) { + return UIHelper.getGridPositions(itemInputCount, 8, 13, itemInputCount); + } + + @Override + public List<Pos2d> getItemOutputPositions(int itemOutputCount) { + return Collections.singletonList(new Pos2d(115, 30)); + } + + @Override + public List<Pos2d> getFluidInputPositions(int fluidInputCount) { + return UIHelper.getGridPositions(fluidInputCount, 8, 48, fluidInputCount); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/myFluids/BaseFluid.java b/goodgen/src/main/java/goodgenerator/blocks/myFluids/BaseFluid.java new file mode 100644 index 0000000000..47f73b186b --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/myFluids/BaseFluid.java @@ -0,0 +1,54 @@ +package goodgenerator.blocks.myFluids; + +import static goodgenerator.main.GoodGenerator.MOD_ID; + +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.BlockFluidClassic; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class BaseFluid extends BlockFluidClassic { + + @SideOnly(Side.CLIENT) + protected IIcon stillIcon; + + @SideOnly(Side.CLIENT) + protected IIcon flowingIcon; + + private String stillTexture; + private String flowingTexture; + + public BaseFluid(Fluid fluid, Material material) { + super(fluid, material); + } + + public void SetTexture(String fluidName) { + stillTexture = MOD_ID + ":fluids/" + fluidName + ".still"; + flowingTexture = MOD_ID + ":fluids/" + fluidName + ".flowing"; + } + + public static Fluid BuildFluid(String fluidName) { + Fluid tFluid = new Fluid(fluidName); + FluidRegistry.registerFluid(tFluid); + return tFluid; + } + + @SideOnly(Side.CLIENT) + @Override + public void registerBlockIcons(IIconRegister register) { + stillIcon = register.registerIcon(stillTexture); + flowingIcon = register.registerIcon(flowingTexture); + + super.getFluid().setIcons(stillIcon, flowingIcon); + } + + @Override + public IIcon getIcon(int side, int meta) { + return (side == 0 || side == 1) ? stillIcon : flowingIcon; + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/myFluids/FluidsBuilder.java b/goodgen/src/main/java/goodgenerator/blocks/myFluids/FluidsBuilder.java new file mode 100644 index 0000000000..de8cca2b43 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/myFluids/FluidsBuilder.java @@ -0,0 +1,203 @@ +package goodgenerator.blocks.myFluids; + +import net.minecraft.block.material.Material; +import net.minecraftforge.fluids.Fluid; + +import cpw.mods.fml.common.registry.GameRegistry; +import goodgenerator.crossmod.nei.NEI_Config; + +public class FluidsBuilder { + + public FluidsBuilder() {} + + public static void Register() { + crackedNaquadahGas_Lightly(); + crackedNaquadahGas_Moderately(); + crackedNaquadahGas_Heavily(); + crackedLightNaquadahFuel_Lightly(); + crackedLightNaquadahFuel_Moderately(); + crackedLightNaquadahFuel_Heavily(); + crackedHeavyNaquadahFuel_Lightly(); + crackedHeavyNaquadahFuel_Moderately(); + crackedHeavyNaquadahFuel_Heavily(); + crackedNaquadahAsphalt_Lightly(); + crackedNaquadahAsphalt_Moderately(); + crackedNaquadahAsphalt_Heavily(); + combustionPromotor(); + coalTar(); + supercriticalSteam(); + } + + public static void crackedNaquadahGas_Lightly() { + Fluid tmp = BaseFluid.BuildFluid("lightlyCrackedNaquadahGas"); + tmp.setGaseous(true) + .setTemperature(800); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("lightlyCrackedNaquadahGas"); + tmp2.setBlockName("lightlyCrackedNaquadahGas"); + GameRegistry.registerBlock(tmp2, "lightlyCrackedNaquadahGas"); + NEI_Config.hide(tmp2); + } + + public static void crackedNaquadahGas_Moderately() { + Fluid tmp = BaseFluid.BuildFluid("moderatelyCrackedNaquadahGas"); + tmp.setGaseous(true) + .setTemperature(800); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("moderatelyCrackedNaquadahGas"); + tmp2.setBlockName("moderatelyCrackedNaquadahGas"); + GameRegistry.registerBlock(tmp2, "moderatelyCrackedNaquadahGas"); + NEI_Config.hide(tmp2); + } + + public static void crackedNaquadahGas_Heavily() { + Fluid tmp = BaseFluid.BuildFluid("heavilyCrackedNaquadahGas"); + tmp.setGaseous(true) + .setTemperature(800); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("heavilyCrackedNaquadahGas"); + tmp2.setBlockName("heavilyCrackedNaquadahGas"); + GameRegistry.registerBlock(tmp2, "heavilyCrackedNaquadahGas"); + NEI_Config.hide(tmp2); + } + + public static void crackedLightNaquadahFuel_Lightly() { + Fluid tmp = BaseFluid.BuildFluid("lightlyCrackedLightNaquadahFuel"); + tmp.setGaseous(false) + .setTemperature(1200); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("lightlyCrackedLightNaquadahFuel"); + tmp2.setBlockName("lightlyCrackedLightNaquadahFuel"); + GameRegistry.registerBlock(tmp2, "lightlyCrackedLightNaquadahFuel"); + NEI_Config.hide(tmp2); + } + + public static void crackedLightNaquadahFuel_Moderately() { + Fluid tmp = BaseFluid.BuildFluid("moderatelyCrackedLightNaquadahFuel"); + tmp.setGaseous(false) + .setTemperature(1200); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("moderatelyCrackedLightNaquadahFuel"); + tmp2.setBlockName("moderatelyCrackedLightNaquadahFuel"); + GameRegistry.registerBlock(tmp2, "moderatelyCrackedLightNaquadahFuel"); + NEI_Config.hide(tmp2); + } + + public static void crackedLightNaquadahFuel_Heavily() { + Fluid tmp = BaseFluid.BuildFluid("heavilyCrackedLightNaquadahFuel"); + tmp.setGaseous(false) + .setTemperature(1200); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("heavilyCrackedLightNaquadahFuel"); + tmp2.setBlockName("heavilyCrackedLightNaquadahFuel"); + GameRegistry.registerBlock(tmp2, "heavilyCrackedLightNaquadahFuel"); + NEI_Config.hide(tmp2); + } + + public static void crackedHeavyNaquadahFuel_Lightly() { + Fluid tmp = BaseFluid.BuildFluid("lightlyCrackedHeavyNaquadahFuel"); + tmp.setGaseous(false) + .setTemperature(1200); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("lightlyCrackedHeavyNaquadahFuel"); + tmp2.setBlockName("lightlyCrackedHeavyNaquadahFuel"); + GameRegistry.registerBlock(tmp2, "lightlyCrackedHeavyNaquadahFuel"); + NEI_Config.hide(tmp2); + } + + public static void crackedHeavyNaquadahFuel_Moderately() { + Fluid tmp = BaseFluid.BuildFluid("moderatelyCrackedHeavyNaquadahFuel"); + tmp.setGaseous(false) + .setTemperature(1200); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("moderatelyCrackedHeavyNaquadahFuel"); + tmp2.setBlockName("moderatelyCrackedHeavyNaquadahFuel"); + GameRegistry.registerBlock(tmp2, "moderatelyCrackedHeavyNaquadahFuel"); + NEI_Config.hide(tmp2); + } + + public static void crackedHeavyNaquadahFuel_Heavily() { + Fluid tmp = BaseFluid.BuildFluid("heavilyCrackedHeavyNaquadahFuel"); + tmp.setGaseous(false) + .setTemperature(1200); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("heavilyCrackedHeavyNaquadahFuel"); + tmp2.setBlockName("heavilyCrackedHeavyNaquadahFuel"); + GameRegistry.registerBlock(tmp2, "heavilyCrackedHeavyNaquadahFuel"); + NEI_Config.hide(tmp2); + } + + public static void crackedNaquadahAsphalt_Lightly() { + Fluid tmp = BaseFluid.BuildFluid("lightlyCrackedNaquadahAsphalt"); + tmp.setGaseous(false) + .setTemperature(1800) + .setDensity(20000) + .setViscosity(20000); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("lightlyCrackedNaquadahAsphalt"); + tmp2.setBlockName("lightlyCrackedNaquadahAsphalt"); + GameRegistry.registerBlock(tmp2, "lightlyCrackedNaquadahAsphalt"); + NEI_Config.hide(tmp2); + } + + public static void crackedNaquadahAsphalt_Moderately() { + Fluid tmp = BaseFluid.BuildFluid("moderatelyCrackedNaquadahAsphalt"); + tmp.setGaseous(false) + .setTemperature(1800) + .setDensity(20000) + .setViscosity(20000); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("moderatelyCrackedNaquadahAsphalt"); + tmp2.setBlockName("moderatelyCrackedNaquadahAsphalt"); + GameRegistry.registerBlock(tmp2, "moderatelyCrackedNaquadahAsphalt"); + NEI_Config.hide(tmp2); + } + + public static void crackedNaquadahAsphalt_Heavily() { + Fluid tmp = BaseFluid.BuildFluid("heavilyCrackedNaquadahAsphalt"); + tmp.setGaseous(false) + .setTemperature(1800) + .setDensity(20000) + .setViscosity(20000); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("heavilyCrackedNaquadahAsphalt"); + tmp2.setBlockName("heavilyCrackedNaquadahAsphalt"); + GameRegistry.registerBlock(tmp2, "heavilyCrackedNaquadahAsphalt"); + NEI_Config.hide(tmp2); + } + + public static void combustionPromotor() { + Fluid tmp = BaseFluid.BuildFluid("combustionPromotor"); + tmp.setGaseous(false) + .setTemperature(300); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("combustionPromotor"); + tmp2.setBlockName("combustionPromotor"); + GameRegistry.registerBlock(tmp2, "combustionPromotor"); + NEI_Config.hide(tmp2); + } + + public static void coalTar() { + Fluid tmp = BaseFluid.BuildFluid("fluid.coalTar"); + tmp.setGaseous(false) + .setTemperature(450) + .setUnlocalizedName("fluid.coalTar"); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("coalTar"); + tmp2.setBlockTextureName("coalTar"); + GameRegistry.registerBlock(tmp2, "coalTar"); + NEI_Config.hide(tmp2); + } + + public static void supercriticalSteam() { + Fluid tmp = BaseFluid.BuildFluid("supercriticalSteam"); + tmp.setGaseous(true) + .setTemperature(648) + .setUnlocalizedName("supercriticalSteam"); + BaseFluid tmp2 = new BaseFluid(tmp, Material.water); + tmp2.SetTexture("supercriticalSteam"); + tmp2.setBlockTextureName("supercriticalSteam"); + GameRegistry.registerBlock(tmp2, "supercriticalSteam"); + NEI_Config.hide(tmp2); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/regularBlock/Casing.java b/goodgen/src/main/java/goodgenerator/blocks/regularBlock/Casing.java new file mode 100644 index 0000000000..9e01d783d2 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/regularBlock/Casing.java @@ -0,0 +1,124 @@ +package goodgenerator.blocks.regularBlock; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import goodgenerator.main.GoodGenerator; +import gregtech.api.GregTech_API; + +public class Casing extends Block { + + @SideOnly(Side.CLIENT) + protected IIcon[] texture; + + String[] textureNames; + protected String name; + + public Casing(String name) { + super(Material.iron); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.setHarvestLevel("wrench", 2); + this.setCreativeTab(GoodGenerator.GG); + GregTech_API.registerMachineBlock(this, -1); + } + + public Casing(String name, String[] texture) { + super(Material.iron); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.textureNames = texture; + this.setHarvestLevel("wrench", 2); + this.setCreativeTab(GoodGenerator.GG); + GregTech_API.registerMachineBlock(this, -1); + } + + public Casing(String name, String[] texture, Material material) { + super(material); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.textureNames = texture; + this.setHarvestLevel("wrench", 2); + this.setCreativeTab(GoodGenerator.GG); + GregTech_API.registerMachineBlock(this, -1); + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return meta < this.texture.length ? this.texture[meta] : this.texture[0]; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + this.texture = new IIcon[this.textureNames.length]; + for (int i = 0; i < this.textureNames.length; i++) { + this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); + } + } + + @Override + @SideOnly(Side.CLIENT) + @SuppressWarnings("unchecked") + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < this.textureNames.length; i++) { + list.add(new ItemStack(item, 1, i)); + } + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public String getUnlocalizedName() { + return this.name; + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { + return false; + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return false; + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/regularBlock/ComplexTextureCasing.java b/goodgen/src/main/java/goodgenerator/blocks/regularBlock/ComplexTextureCasing.java new file mode 100644 index 0000000000..0a0169d0b4 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/regularBlock/ComplexTextureCasing.java @@ -0,0 +1,58 @@ +package goodgenerator.blocks.regularBlock; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ComplexTextureCasing extends Casing { + + @SideOnly(Side.CLIENT) + protected IIcon[] texture1, texture2; + String[] textureSide; + String[] textureTopAndDown; + + public ComplexTextureCasing(String name, String[] textureSide, String[] textureTopAndDown) { + super(name); + this.textureSide = textureSide; + this.textureTopAndDown = textureTopAndDown; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + if (side < 2) { + return meta < this.texture2.length ? this.texture2[meta] : this.texture2[0]; + } else { + return meta < this.texture1.length ? this.texture1[meta] : this.texture1[0]; + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + this.texture1 = new IIcon[this.textureSide.length]; + for (int i = 0; i < this.textureSide.length; i++) { + this.texture1[i] = par1IconRegister.registerIcon(this.textureSide[i]); + } + this.texture2 = new IIcon[this.textureTopAndDown.length]; + for (int i = 0; i < this.textureTopAndDown.length; i++) { + this.texture2[i] = par1IconRegister.registerIcon(this.textureTopAndDown[i]); + } + } + + @Override + @SideOnly(Side.CLIENT) + @SuppressWarnings("unchecked") + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < Math.max(this.textureSide.length, this.textureTopAndDown.length); i++) { + list.add(new ItemStack(item, 1, i)); + } + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/regularBlock/Frame.java b/goodgen/src/main/java/goodgenerator/blocks/regularBlock/Frame.java new file mode 100644 index 0000000000..b4acb03518 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/regularBlock/Frame.java @@ -0,0 +1,37 @@ +package goodgenerator.blocks.regularBlock; + +import net.minecraft.block.material.Material; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class Frame extends Casing { + + public Frame(String name, String[] texture) { + super(name, texture, Material.iron); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess worldClient, int xCoord, int yCoord, int zCoord, int aSide) { + if (worldClient.getBlock(xCoord, yCoord, zCoord) instanceof Frame) return false; + return super.shouldSideBeRendered(worldClient, xCoord, yCoord, zCoord, aSide); + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 1; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/regularBlock/ITextureBlock.java b/goodgen/src/main/java/goodgenerator/blocks/regularBlock/ITextureBlock.java new file mode 100644 index 0000000000..fae196a64b --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/regularBlock/ITextureBlock.java @@ -0,0 +1,18 @@ +package goodgenerator.blocks.regularBlock; + +import net.minecraft.block.Block; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; + +public interface ITextureBlock { + + default ITexture[] getTexture(Block aBlock, ForgeDirection side) { + return getTexture(aBlock, 0, side); + } + + ITexture[] getTexture(Block aBlock, ForgeDirection side, IBlockAccess aWorld, int xCoord, int yCoord, int zCoord); + + ITexture[] getTexture(Block aBlock, int aMeta, ForgeDirection side); +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/regularBlock/TEBlock.java b/goodgen/src/main/java/goodgenerator/blocks/regularBlock/TEBlock.java new file mode 100644 index 0000000000..6c13a9c680 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/regularBlock/TEBlock.java @@ -0,0 +1,207 @@ +package goodgenerator.blocks.regularBlock; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import goodgenerator.blocks.tileEntity.EssentiaHatch; +import goodgenerator.blocks.tileEntity.EssentiaOutputHatch; +import goodgenerator.blocks.tileEntity.EssentiaOutputHatch_ME; +import goodgenerator.main.GoodGenerator; +import gregtech.api.GregTech_API; +import gregtech.api.util.GT_Utility; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.IEssentiaContainerItem; + +public class TEBlock extends BlockContainer { + + @SideOnly(Side.CLIENT) + protected IIcon[] texture; + + String[] textureNames; + protected String name; + protected int index; + + public TEBlock(String name, String[] texture, CreativeTabs Tab) { + super(Material.iron); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.textureNames = texture; + this.setHarvestLevel("wrench", 2); + this.setCreativeTab(GoodGenerator.GG); + GregTech_API.registerMachineBlock(this, -1); + } + + public TEBlock(String name, String[] texture, int index) { + super(Material.iron); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.textureNames = texture; + this.setHarvestLevel("wrench", 2); + this.index = index; + this.setCreativeTab(GoodGenerator.GG); + GregTech_API.registerMachineBlock(this, -1); + } + + public TEBlock(String name, String[] texture, Material material) { + super(material); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.textureNames = texture; + this.setHarvestLevel("wrench", 2); + this.setCreativeTab(GoodGenerator.GG); + GregTech_API.registerMachineBlock(this, -1); + } + + public int getIndex() { + return this.index; + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return meta < this.texture.length ? this.texture[meta] : this.texture[0]; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + this.texture = new IIcon[this.textureNames.length]; + for (int i = 0; i < this.textureNames.length; i++) { + this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); + } + } + + @Override + @SideOnly(Side.CLIENT) + @SuppressWarnings("unchecked") + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < this.textureNames.length; i++) { + list.add(new ItemStack(item, 1, i)); + } + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); + } + aWorld.removeTileEntity(aX, aY, aZ); + } + + @Override + public String getUnlocalizedName() { + return this.name; + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { + return false; + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public TileEntity createTileEntity(World world, int meta) { + switch (index) { + case 1: + return new EssentiaHatch(); + case 2: + return new EssentiaOutputHatch(); + case 3: + return new EssentiaOutputHatch_ME(); + default: + return null; + } + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, + float par8, float par9) { + if (world.isRemote) { + return false; + } else { + TileEntity tile = world.getTileEntity(x, y, z); + if (index == 1) { + if (tile instanceof EssentiaHatch) { + ItemStack tItemStack = player.getHeldItem(); + if (tItemStack != null) { + Item tItem = tItemStack.getItem(); + if (tItem instanceof IEssentiaContainerItem + && ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()) != null + && ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()) + .size() > 0) { + Aspect tLocked = ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()) + .getAspects()[0]; + ((EssentiaHatch) tile).setLockedAspect(tLocked); + GT_Utility.sendChatToPlayer( + player, + String.format( + StatCollector.translateToLocal("essentiahatch.chat.0"), + tLocked.getLocalizedDescription())); + } + } else { + ((EssentiaHatch) tile).setLockedAspect(null); + GT_Utility.sendChatToPlayer(player, StatCollector.translateToLocal("essentiahatch.chat.1")); + } + world.markBlockForUpdate(x, y, z); + return true; + } else return false; + } else if (index == 2) { + if (tile instanceof EssentiaOutputHatch && player.isSneaking()) { + ItemStack tItemStack = player.getHeldItem(); + if (tItemStack == null) { + ((EssentiaOutputHatch) tile).clear(); + GT_Utility + .sendChatToPlayer(player, StatCollector.translateToLocal("essentiaoutputhatch.chat.0")); + } + return true; + } else return false; + } else return false; + } + } + + @Override + public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { + return null; + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java b/goodgen/src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java new file mode 100644 index 0000000000..986ab4e0c8 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java @@ -0,0 +1,103 @@ +package goodgenerator.blocks.regularBlock; + +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_LargeTurbineBase; +import goodgenerator.client.render.BlockRenderHandler; +import goodgenerator.main.GoodGenerator; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; + +public class TurbineCasing extends Casing implements ITextureBlock { + + public static IIconContainer[][] turbineShape = new IIconContainer[3][9]; + public IIconContainer base; + + static { + for (int i = 0; i < 3; i++) for (int j = 1; j <= 9; j++) + turbineShape[i][j - 1] = new Textures.BlockIcons.CustomIcon("icons/turbines/TURBINE_" + i + "" + j); + } + + public TurbineCasing(String name, String texture) { + super(name, new String[] { GoodGenerator.MOD_ID + ":" + texture }); + base = new Textures.BlockIcons.CustomIcon("icons/" + texture); + } + + private static int isTurbineControllerWithSide(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection side) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (!(tTileEntity instanceof IGregTechTileEntity)) return 0; + IGregTechTileEntity tTile = (IGregTechTileEntity) tTileEntity; + if (tTile.getMetaTileEntity() instanceof GT_MetaTileEntity_LargeTurbineBase && tTile.getFrontFacing() == side) { + if (tTile.isActive()) return 1; + return ((GT_MetaTileEntity_LargeTurbineBase) tTile.getMetaTileEntity()).hasTurbine() ? 2 : 3; + } + return 0; + } + + public ITexture[] getTurbineCasing(int iconIndex, boolean active, boolean hasTurbine) { + int states = active ? 0 : hasTurbine ? 1 : 2; + return new ITexture[] { TextureFactory.of(base), TextureFactory.of(turbineShape[states][iconIndex]) }; + } + + @Override + public ITexture[] getTexture(Block aBlock, ForgeDirection side, IBlockAccess aWorld, int xCoord, int yCoord, + int zCoord) { + final int ordinalSide = side.ordinal(); + int tInvertLeftRightMod = ordinalSide % 2 * 2 - 1; + switch (ordinalSide / 2) { + case 0: + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + if (i == 0 && j == 0) continue; + int tState; + if ((tState = isTurbineControllerWithSide(aWorld, xCoord + j, yCoord, zCoord + i, side)) != 0) { + return getTurbineCasing(4 - i * 3 - j, tState == 1, tState == 2); + } + } + } + break; + case 1: + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + if (i == 0 && j == 0) continue; + int tState; + if ((tState = isTurbineControllerWithSide(aWorld, xCoord + j, yCoord + i, zCoord, side)) != 0) { + return getTurbineCasing(4 + i * 3 - j * tInvertLeftRightMod, tState == 1, tState == 2); + } + } + } + break; + case 2: + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + if (i == 0 && j == 0) continue; + int tState; + if ((tState = isTurbineControllerWithSide(aWorld, xCoord, yCoord + i, zCoord + j, side)) != 0) { + return getTurbineCasing(4 + i * 3 + j * tInvertLeftRightMod, tState == 1, tState == 2); + } + } + } + break; + } + return getTexture(aBlock, side); + } + + @Override + public ITexture[] getTexture(Block aBlock, int aMeta, ForgeDirection side) { + return new ITexture[] { TextureFactory.of(base) }; + } + + @Override + public int getRenderType() { + if (BlockRenderHandler.INSTANCE == null) { + return super.getRenderType(); + } + return BlockRenderHandler.INSTANCE.mRenderID; + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java new file mode 100644 index 0000000000..618477d09c --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java @@ -0,0 +1,403 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.GT_HatchElement.*; +import static gregtech.api.enums.Textures.BlockIcons.*; + +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; +import goodgenerator.loader.Loaders; +import gregtech.api.GregTech_API; +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GT_StructureUtility; +import gregtech.api.util.GT_Utility; + +public class ComponentAssemblyLine extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase<ComponentAssemblyLine> + implements ISurvivalConstructable { + + private int casingTier; + protected static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition<ComponentAssemblyLine> STRUCTURE_DEFINITION = StructureDefinition + .<ComponentAssemblyLine>builder() + .addShape( + STRUCTURE_PIECE_MAIN, + new String[][] { + { " ", " III ", " HHI~IHH ", "HH III HH", "H H", "H H", "H JJJ H", + "H JJJ H", "H N N H", "HHHHHHHHH" }, + { " ", " ELHHHLE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA", + "AG HHH GA", "AG GA", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "HG C GH", "HG GH", "HG GH", + "HG HHH GH", "HG GH", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA", + "AG HHH GA", "AG GA", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "HG C GH", "HG GH", "HG GH", + "HG HHH GH", "HG GH", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA", + "AG HHH GA", "AG GA", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "HG C GH", "HG GH", "HG GH", + "HG HHH GH", "HG GH", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA", + "AG HHH GA", "AG GA", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A n n A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " ", " ELHHHLE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " ", " ", " HHHHHHH ", "HH HH", "H H", "H H", "H H", + "H H", "H KKK H", "HHHHHHHHH" } }) + .addElement( + 'A', + ofChain( + ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 5), + ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 13), + ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 14), + ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 15), + ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks2", 0))) + .addElement('H', ofBlock(GregTech_API.sBlockCasings8, 7)) + .addElement('C', ofBlock(GregTech_API.sBlockCasings2, 5)) + .addElement('D', ofBlock(GregTech_API.sBlockCasings2, 9)) + .addElement('G', ofBlock(GregTech_API.sBlockCasings9, 0)) + .addElement('E', ofBlock(GregTech_API.sBlockCasings9, 1)) + .addElement('F', ofBlock(GregTech_API.sBlockCasings4, 1)) + .addElement( + 'B', + ofBlocksTiered( + (block, meta) -> block == Loaders.componentAssemblylineCasing ? meta : -1, + IntStream.range(0, 14) + .mapToObj(i -> Pair.of(Loaders.componentAssemblylineCasing, i)) + .collect(Collectors.toList()), + -2, + (t, meta) -> t.casingTier = meta, + t -> t.casingTier)) + .addElement( + 'J', + GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class) + .atLeast(InputBus) + .dot(1) + .casingIndex(183) + .buildAndChain(GregTech_API.sBlockCasings8, 7)) + .addElement( + 'N', + GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class) + .atLeast(InputBus) + .dot(1) + .casingIndex(183) + .buildAndChain(GT_StructureUtility.ofFrame(Materials.TungstenSteel))) + .addElement( + 'K', + GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class) + .atLeast(OutputBus) + .dot(2) + .casingIndex(183) + .buildAndChain(GregTech_API.sBlockCasings8, 7)) + .addElement( + 'L', + GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class) + .atLeast(Energy, ExoticEnergy) + .dot(3) + .casingIndex(183) + .buildAndChain(GregTech_API.sBlockCasings8, 7)) + .addElement( + 'I', + GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class) + .atLeast(Maintenance) + .dot(4) + .casingIndex(183) + .buildAndChain(GregTech_API.sBlockCasings8, 7)) + .addElement( + 'M', + GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class) + .atLeast(InputHatch) + .dot(5) + .casingIndex(183) + .buildAndChain(GregTech_API.sBlockCasings8, 7)) + .addElement('n', GT_StructureUtility.ofFrame(Materials.TungstenSteel)) + .build(); + + public ComponentAssemblyLine(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public ComponentAssemblyLine(String aName) { + super(aName); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 4, 2, 0); + } + + @Override + public IStructureDefinition<ComponentAssemblyLine> getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("High-Capacity Component Assembler") + .addInfo("Controller block for the Component Assembly Line.") + .addInfo("Assembles basic components (motors, pumps, etc.) in large batches.") + .addInfo( + "The " + EnumChatFormatting.BOLD + + EnumChatFormatting.YELLOW + + "Component Assembly Line Casing " + + EnumChatFormatting.RESET + + EnumChatFormatting.GRAY + + "limits the recipes the machine can perform. See the NEI pages for details.") + .addInfo( + "Supports " + EnumChatFormatting.BLUE + + "Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " laser and multi-amp hatches!") + .addInfo("Supports overclocking beyond MAX!") + .addInfo(EnumChatFormatting.ITALIC + "Much more efficient than other competing brands!") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .beginStructureBlock(9, 10, 33, false) + .addStructureInfo("This structure is too complex! See schematic for details.") + .addOtherStructurePart("Borosilicate Glass", "Can be UV tier or higher") + .addInputBus("Start of conveyor belt", 1) + .addOutputBus("End of conveyor belt", 2) + .addEnergyHatch("Second-top layer", 3) + .addMaintenanceHatch("Around the controller", 4) + .addInputHatch("Bottom left and right corners", 5) + .toolTipFinisher( + EnumChatFormatting.AQUA + "MadMan310" + + EnumChatFormatting.GRAY + + " via " + + EnumChatFormatting.GREEN + + "Good Generator"); + + return tt; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new ComponentAssemblyLine(mName); + } + + /** + * Changes and adds new information to the default info data for the scanner. + */ + @Override + public String[] getInfoData() { + String[] origin = super.getInfoData(); + String[] ret = new String[origin.length + 1]; + System.arraycopy(origin, 0, ret, 0, origin.length); + ret[origin.length] = StatCollector.translateToLocal("scanner.info.CASS.tier") + + (casingTier >= 0 ? GT_Values.VN[casingTier + 1] : "None!"); + return ret; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(183), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(183), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(183) }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { + if (recipe.mSpecialValue > casingTier + 1) { + return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + }; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(getMaxInputEu()); + logic.setAvailableAmperage(1); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 4, 2, 0, realBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + casingTier = -2; + return checkPiece(STRUCTURE_PIECE_MAIN, 4, 2, 0); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + inputSeparation = !inputSeparation; + GT_Utility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ, ItemStack aTool) { + if (aPlayer.isSneaking()) { + batchMode = !batchMode; + if (batchMode) { + GT_Utility.sendChatToPlayer(aPlayer, "Batch recipes."); + } else { + GT_Utility.sendChatToPlayer(aPlayer, "Don't batch recipes."); + } + } + + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public RecipeMap<?> getRecipeMap() { + return GoodGeneratorRecipeMaps.componentAssemblyLineRecipes; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("casingTier", casingTier); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + casingTier = aNBT.getInteger("casingTier"); + if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) { + inputSeparation = aNBT.getBoolean("mSeparate"); + } + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java new file mode 100644 index 0000000000..ae3395ffb9 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java @@ -0,0 +1,225 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Textures.BlockIcons.*; +import static gregtech.api.util.GT_StructureUtility.*; +import static gregtech.api.util.GT_Utility.filterValidMTEs; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTech_API; +import gregtech.api.enums.GT_HatchElement; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_MultiInput; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Utility; + +public class CoolantTower extends GT_MetaTileEntity_TooltipMultiBlockBase_EM + implements IConstructable, ISurvivalConstructable { + + protected IStructureDefinition<CoolantTower> multiDefinition = null; + private final int CASING_INDEX = 1542; + + public CoolantTower(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public CoolantTower(String name) { + super(name); + } + + @Override + public IStructureDefinition<? extends GT_MetaTileEntity_MultiblockBase_EM> getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.<CoolantTower>builder() + .addShape( + mName, + transpose( + new String[][] { + { " ", " ", " BBB ", " B B ", " B B ", " B B ", + " B B ", " B B ", " BBB ", " ", " " }, + { " ", " ", " BBB ", " BBBBB ", " BB BB ", " BB BB ", + " BB BB ", " BBBBB ", " BBB ", " ", " " }, + { " ", " ", " ", " BBB ", " B B ", " B B ", + " B B ", " BBB ", " ", " ", " " }, + { " ", " ", " ", " BBB ", " B B ", " B B ", + " B B ", " BBB ", " ", " ", " " }, + { " ", " ", " ", " BBB ", " B B ", " B B ", + " B B ", " BBB ", " ", " ", " " }, + { " ", " ", " BBB ", " BBBBB ", " BB BB ", " BB BB ", + " BB BB ", " BBBBB ", " BBB ", " ", " " }, + { " ", " ", " BBB ", " B B ", " B B ", " B B ", + " B B ", " B B ", " BBB ", " ", " " }, + { " ", " ", " BBB ", " B B ", " B B ", " B B ", + " B B ", " B B ", " BBB ", " ", " " }, + { " ", " BBB ", " BBBBB ", " BB BB ", " BB BB ", " BB BB ", + " BB BB ", " BB BB ", " BBBBB ", " BBB ", " " }, + { " ", " BBB ", " B B ", " B B ", " B B ", " B B ", + " B B ", " B B ", " B B ", " BBB ", " " }, + { " ", " BBBBB ", " BB BB ", " BB BB ", " B B ", " B B ", + " B B ", " BB BB ", " BB BB ", " BBBBB ", " " }, + { " HH~HH ", " HBBBBBH ", " HB BH ", "HB BH", "HB BH", "HB BH", + "HB BH", "HB BH", " HB BH ", " HBBBBBH ", " HHHHH " }, + { " CCCCC ", " C C ", " C C ", "C C", "C C", "C C", + "C C", "C C", " C C ", " C C ", " CCCCC " }, })) + .addElement('B', ofBlockAnyMeta(GregTech_API.sBlockConcretes, 8)) + .addElement('C', ofFrame(Materials.TungstenCarbide)) + .addElement( + 'H', + buildHatchAdder(CoolantTower.class).atLeast(GT_HatchElement.InputHatch, GT_HatchElement.OutputHatch) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(ofBlockAnyMeta(GregTech_API.sBlockConcretes, 8))) + .build(); + } + return multiDefinition; + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mWrench = true; + mScrewdriver = true; + mSoftHammer = true; + mHardHammer = true; + mSolderingTool = true; + mCrowbar = true; + return structureCheck_EM(mName, 5, 11, 0); + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Coolant Tower") + .addInfo("Controller block for the Coolant Tower.") + .addInfo("Turn Steam back to Distilled Water.") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addController("Mid of the second layer.") + .addInputHatch("Input Hatch", 1) + .addOutputHatch("Output Hatch", 1) + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM(mName, 5, 11, 0, stackSize, hintsOnly); + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("CoolantTower.hint", 3); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new CoolantTower(mName); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aTick % 72000 == 0) { + mWrench = true; + mScrewdriver = true; + mSoftHammer = true; + mHardHammer = true; + mSolderingTool = true; + mCrowbar = true; + } + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + return true; + } + + @Override + protected @NotNull CheckRecipeResult checkProcessing_EM() { + this.mMaxProgresstime = 20; + int steam = 0; + + for (GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mInputHatches)) { + steam += maybeDrainHatch(tHatch); + } + addOutput(GT_ModHandler.getDistilledWater(steam / 160)); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + private int maybeDrainHatch(GT_MetaTileEntity_Hatch_Input tHatch) { + if (tHatch instanceof GT_MetaTileEntity_Hatch_MultiInput) { + int drained = 0; + for (FluidStack maybeSteam : ((GT_MetaTileEntity_Hatch_MultiInput) tHatch).getStoredFluid()) { + drained += maybeDrainSteam(tHatch, maybeSteam); + } + return drained; + } + return maybeDrainSteam(tHatch, tHatch.getFillableStack()); + } + + private int maybeDrainSteam(GT_MetaTileEntity_Hatch_Input tHatch, FluidStack maybeSteam) { + if (maybeSteam == null) return 0; + if (!GT_Utility.areFluidsEqual(maybeSteam, GT_ModHandler.getSteam(1))) return 0; + FluidStack defoSteam = tHatch.drain(ForgeDirection.UNKNOWN, maybeSteam, true); + return defoSteam.amount; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { casingTexturePages[12][6], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[12][6], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[12][6] }; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 5, 11, 0, elementBudget, env, false, true); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java new file mode 100644 index 0000000000..f9eab80f03 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java @@ -0,0 +1,244 @@ +package goodgenerator.blocks.tileEntity; + +import java.util.ArrayList; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +import goodgenerator.crossmod.thaumcraft.LargeEssentiaEnergyData; +import thaumcraft.api.ThaumcraftApiHelper; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.api.aspects.IAspectContainer; +import thaumcraft.api.aspects.IEssentiaTransport; + +public class EssentiaHatch extends TileEntity implements IAspectContainer, IEssentiaTransport { + + private Aspect mLocked; + private AspectList current = new AspectList(); + public int mState = 0; + + public void setLockedAspect(Aspect aAspect) { + this.mLocked = aAspect; + } + + @Override + public void readFromNBT(NBTTagCompound tagCompound) { + super.readFromNBT(tagCompound); + + this.mLocked = Aspect.getAspect(tagCompound.getString("mLocked")); + this.mState = tagCompound.getInteger("mState"); + current = new AspectList(); + NBTTagList tlist = tagCompound.getTagList("Aspects", 10); + for (int j = 0; j < tlist.tagCount(); ++j) { + NBTTagCompound rs = tlist.getCompoundTagAt(j); + if (rs.hasKey("key")) { + current.add(Aspect.getAspect(rs.getString("key")), rs.getInteger("amount")); + } + } + } + + @Override + public void writeToNBT(NBTTagCompound tagCompound) { + super.writeToNBT(tagCompound); + + tagCompound.setString("mLocked", this.mLocked == null ? "" : this.mLocked.getTag()); + tagCompound.setInteger("mState", mState); + NBTTagList tlist = new NBTTagList(); + Aspect[] aspectA = current.getAspects(); + for (Aspect aspect : aspectA) { + if (aspect != null) { + NBTTagCompound f = new NBTTagCompound(); + f.setString("key", aspect.getTag()); + f.setInteger("amount", current.getAmount(aspect)); + tlist.appendTag(f); + } + } + tagCompound.setTag("Aspects", tlist); + } + + public final Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + NBTTagCompound nbt = pkt.func_148857_g(); + readFromNBT(nbt); + } + + public void markDirty() { + super.markDirty(); + if (this.worldObj.isRemote) { + return; + } + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + } + + @Override + public void updateEntity() { + fillfrompipe(); + } + + public void fillfrompipe() { + if (getEssentiaAmount(null) >= 1000) return; + TileEntity[] te = new TileEntity[ForgeDirection.VALID_DIRECTIONS.length]; + for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) { + te[i] = ThaumcraftApiHelper.getConnectableTile( + this.worldObj, + this.xCoord, + this.yCoord, + this.zCoord, + ForgeDirection.VALID_DIRECTIONS[i]); + if (te[i] != null) { + IEssentiaTransport pipe = (IEssentiaTransport) te[i]; + if (!pipe.canOutputTo(ForgeDirection.VALID_DIRECTIONS[i])) { + continue; + } + if ((pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i].getOpposite()) != null) + && (pipe.getSuctionAmount(ForgeDirection.VALID_DIRECTIONS[i]) + < getSuctionAmount(ForgeDirection.VALID_DIRECTIONS[i]))) { + Aspect readyInput = pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i].getOpposite()); + int type = LargeEssentiaEnergyData.getAspectTypeIndex(readyInput); + if (type != -1 && (mState & (1 << type)) == 0) continue; + if (readyInput.equals(mLocked)) { + addToContainer(mLocked, pipe.takeEssentia(mLocked, 1, ForgeDirection.VALID_DIRECTIONS[i])); + } + if (mLocked == null) addToContainer( + pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i]), + pipe.takeEssentia( + pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i]), + 1, + ForgeDirection.VALID_DIRECTIONS[i])); + } + } + } + } + + @Override + public AspectList getAspects() { + return current; + } + + @Override + public void setAspects(AspectList aspectList) { + this.current.add(aspectList); + } + + @Override + public boolean doesContainerAccept(Aspect aspect) { + int type = LargeEssentiaEnergyData.getAspectTypeIndex(aspect); + if (type != -1 && (mState & (1 << type)) == 0) return false; + return (mLocked == null || mLocked.equals(aspect)) && getEssentiaAmount(null) <= 1000; + } + + @Override + public int addToContainer(Aspect aspect, int i) { + int type = LargeEssentiaEnergyData.getAspectTypeIndex(aspect); + if (type != -1 && (mState & (1 << type)) == 0) return i; + int ready = Math.min(1000 - getEssentiaAmount(null), i); + if ((mLocked == null || mLocked.equals(aspect)) && ready > 0) { + current.add(aspect, ready); + this.markDirty(); + return i - ready; + } + this.markDirty(); + return i; + } + + @Override + public boolean takeFromContainer(Aspect aspect, int i) { + return false; + } + + @Override + public boolean takeFromContainer(AspectList aspectList) { + return false; + } + + @Override + public boolean doesContainerContainAmount(Aspect aspect, int i) { + return current.aspects.containsKey(aspect) && i <= current.getAmount(aspect); + } + + @Override + public boolean doesContainerContain(AspectList aspectList) { + ArrayList<Boolean> ret = new ArrayList<Boolean>(); + for (Aspect a : aspectList.aspects.keySet()) ret.add(current.aspects.containsKey(a)); + return !ret.contains(false); + } + + @Override + public int containerContains(Aspect aspect) { + return current.aspects.containsKey(aspect) ? current.getAmount(aspect) : 0; + } + + @Override + public boolean isConnectable(ForgeDirection forgeDirection) { + return true; + } + + @Override + public boolean canInputFrom(ForgeDirection forgeDirection) { + return true; + } + + @Override + public boolean canOutputTo(ForgeDirection forgeDirection) { + return false; + } + + @Override + public void setSuction(Aspect aspect, int i) {} + + @Override + public Aspect getSuctionType(ForgeDirection forgeDirection) { + return this.mLocked; + } + + @Override + public int getSuctionAmount(ForgeDirection forgeDirection) { + return 256; + } + + @Override + public int takeEssentia(Aspect aspect, int i, ForgeDirection forgeDirection) { + return 0; + } + + @Override + public int addEssentia(Aspect aspect, int i, ForgeDirection forgeDirection) { + return i - addToContainer(aspect, i); + } + + @Override + public Aspect getEssentiaType(ForgeDirection forgeDirection) { + if (current == null || current.size() < 1) return null; + return current.getAspects()[0]; + } + + @Override + public int getEssentiaAmount(ForgeDirection forgeDirection) { + int ret = 0; + for (final Aspect A : current.aspects.keySet()) { + ret += current.getAmount(A); + } + return ret; + } + + @Override + public int getMinimumSuction() { + return Integer.MAX_VALUE; + } + + @Override + public boolean renderExtendedTube() { + return true; + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch.java new file mode 100644 index 0000000000..93cec4672c --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch.java @@ -0,0 +1,179 @@ +package goodgenerator.blocks.tileEntity; + +import java.util.Map; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.common.util.ForgeDirection; + +import thaumcraft.api.TileThaumcraft; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.api.aspects.IAspectContainer; +import thaumcraft.api.aspects.IEssentiaTransport; + +public class EssentiaOutputHatch extends TileThaumcraft implements IAspectContainer, IEssentiaTransport { + + public static final int CAPACITY = 256; + protected AspectList mAspects = new AspectList(); + + public void clear() { + this.mAspects.aspects.clear(); + } + + @Override + public void markDirty() { + super.markDirty(); + if (this.worldObj.isRemote) return; + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + } + + @Override + public void readFromNBT(NBTTagCompound nbttagcompound) { + super.readFromNBT(nbttagcompound); + this.mAspects.aspects.clear(); + NBTTagList tlist = nbttagcompound.getTagList("Aspects", 10); + for (int j = 0; j < tlist.tagCount(); ++j) { + NBTTagCompound rs = tlist.getCompoundTagAt(j); + if (rs.hasKey("key")) mAspects.add(Aspect.getAspect(rs.getString("key")), rs.getInteger("amount")); + } + } + + @Override + public void writeToNBT(NBTTagCompound nbttagcompound) { + super.writeToNBT(nbttagcompound); + Aspect[] aspectA = this.mAspects.getAspects(); + NBTTagList nbtTagList = new NBTTagList(); + for (Aspect aspect : aspectA) { + if (aspect != null) { + NBTTagCompound f = new NBTTagCompound(); + f.setString("key", aspect.getTag()); + f.setInteger("amount", this.mAspects.getAmount(aspect)); + nbtTagList.appendTag(f); + } + } + nbttagcompound.setTag("Aspects", nbtTagList); + } + + private int remainingCapacity() { + return CAPACITY - this.getEssentiaAmount(null); + } + + @Override + public AspectList getAspects() { + return this.mAspects; + } + + @Override + public void setAspects(AspectList aspectList) { + for (Map.Entry<Aspect, Integer> entry : aspectList.aspects.entrySet()) { + this.addEssentia(entry.getKey(), entry.getValue(), null); + } + } + + @Override + public boolean doesContainerAccept(Aspect var1) { + return true; + } + + @Override + public int addToContainer(Aspect aspect, int amount) { + int remaining = 0; + if (amount > this.remainingCapacity()) { + remaining = amount - this.remainingCapacity(); + this.mAspects.add(aspect, this.remainingCapacity()); + } else this.mAspects.add(aspect, amount); + this.markDirty(); + return remaining; + } + + @Override + public boolean takeFromContainer(Aspect aspect, int amount) { + if (this.mAspects != null && this.mAspects.getAmount(aspect) >= amount) { + this.mAspects.remove(aspect, amount); + this.markDirty(); + return true; + } else return false; + } + + @Override + public boolean takeFromContainer(AspectList aspects) { + return true; + } + + @Override + public boolean doesContainerContainAmount(Aspect aspect, int amount) { + return this.mAspects.getAmount(aspect) >= amount; + } + + @Override + public boolean doesContainerContain(AspectList aspectList) { + for (Map.Entry<Aspect, Integer> entry : aspectList.aspects.entrySet()) { + if (this.mAspects.getAmount(entry.getKey()) < entry.getValue()) return false; + } + return true; + } + + @Override + public int containerContains(Aspect aspect) { + return this.mAspects.getAmount(aspect); + } + + @Override + public boolean isConnectable(ForgeDirection var1) { + return true; + } + + @Override + public boolean canInputFrom(ForgeDirection var1) { + return false; + } + + @Override + public boolean canOutputTo(ForgeDirection var1) { + return true; + } + + @Override + public void setSuction(Aspect var1, int var2) {} + + @Override + public Aspect getSuctionType(ForgeDirection var1) { + return null; + } + + @Override + public int getSuctionAmount(ForgeDirection var1) { + return 0; + } + + @Override + public int takeEssentia(Aspect aspect, int amount, ForgeDirection var3) { + return this.takeFromContainer(aspect, amount) ? amount : 0; + } + + @Override + public int addEssentia(Aspect aspect, int amount, ForgeDirection direction) { + return amount - addToContainer(aspect, amount); + } + + @Override + public Aspect getEssentiaType(ForgeDirection var1) { + return this.mAspects.size() > 0 ? this.mAspects.getAspects()[0] : null; + } + + @Override + public int getEssentiaAmount(ForgeDirection var1) { + return this.mAspects.visSize(); + } + + @Override + public int getMinimumSuction() { + return 0; + } + + @Override + public boolean renderExtendedTube() { + return true; + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch_ME.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch_ME.java new file mode 100644 index 0000000000..b576b44e7f --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch_ME.java @@ -0,0 +1,150 @@ +package goodgenerator.blocks.tileEntity; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import appeng.api.config.Actionable; +import appeng.api.networking.GridFlags; +import appeng.api.networking.IGrid; +import appeng.api.networking.IGridNode; +import appeng.api.networking.security.IActionHost; +import appeng.api.networking.security.MachineSource; +import appeng.api.util.AECableType; +import appeng.api.util.DimensionalCoord; +import appeng.me.helpers.AENetworkProxy; +import appeng.me.helpers.IGridProxyable; +import appeng.tile.TileEvent; +import appeng.tile.events.TileEventType; +import goodgenerator.util.ItemRefer; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumicenergistics.api.grid.IEssentiaGrid; +import thaumicenergistics.api.grid.IMEEssentiaMonitor; + +public class EssentiaOutputHatch_ME extends EssentiaOutputHatch implements IActionHost, IGridProxyable { + + private AENetworkProxy gridProxy = null; + private IMEEssentiaMonitor monitor = null; + private MachineSource asMachineSource = new MachineSource(this); + + @Override + public void updateEntity() { + getProxy(); + super.updateEntity(); + } + + @Override + public void invalidate() { + super.invalidate(); + this.invalidateAE(); + } + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + this.onChunkUnloadAE(); + } + + @TileEvent(TileEventType.WORLD_NBT_READ) + public void readFromNBT_AENetwork(final NBTTagCompound data) { + AENetworkProxy gp = getProxy(); + if (gp != null) getProxy().readFromNBT(data); + } + + @TileEvent(TileEventType.WORLD_NBT_WRITE) + public void writeToNBT_AENetwork(final NBTTagCompound data) { + AENetworkProxy gp = getProxy(); + if (gp != null) gp.writeToNBT(data); + } + + void onChunkUnloadAE() { + AENetworkProxy gp = getProxy(); + if (gp != null) gp.onChunkUnload(); + } + + void invalidateAE() { + AENetworkProxy gp = getProxy(); + if (gp != null) gp.invalidate(); + } + + @Override + public IGridNode getGridNode(ForgeDirection forgeDirection) { + AENetworkProxy gp = getProxy(); + return gp != null ? gp.getNode() : null; + } + + @Override + public void gridChanged() {} + + @Override + public AECableType getCableConnectionType(ForgeDirection forgeDirection) { + return AECableType.SMART; + } + + @Override + public void securityBreak() {} + + @Override + public AENetworkProxy getProxy() { + if (gridProxy == null) { + gridProxy = new AENetworkProxy(this, "proxy", ItemRefer.Essentia_Output_Hatch_ME.get(1), true); + gridProxy.onReady(); + gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); + } + return this.gridProxy; + } + + @Override + public DimensionalCoord getLocation() { + return new DimensionalCoord(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + } + + @Override + public IGridNode getActionableNode() { + AENetworkProxy gp = getProxy(); + return gp != null ? gp.getNode() : null; + } + + @Override + public boolean takeFromContainer(AspectList aspects) { + return false; + } + + @Override + public boolean takeFromContainer(Aspect aspect, int amount) { + return false; + } + + @Override + public int addEssentia(Aspect aspect, int amount, ForgeDirection side) { + return this.addEssentia(aspect, amount, side, Actionable.MODULATE); + } + + public int addEssentia(Aspect aspect, int amount, ForgeDirection side, Actionable mode) { + long rejectedAmount = amount; + if (this.getEssentiaMonitor()) { + rejectedAmount = this.monitor.injectEssentia(aspect, amount, mode, this.getMachineSource(), true); + } + + long acceptedAmount = (long) amount - rejectedAmount; + return (int) acceptedAmount; + } + + protected boolean getEssentiaMonitor() { + IMEEssentiaMonitor essentiaMonitor = null; + IGrid grid = null; + IGridNode node = this.getProxy() + .getNode(); + + if (node != null) { + grid = node.getGrid(); + if (grid != null) essentiaMonitor = grid.getCache(IEssentiaGrid.class); + } + this.monitor = essentiaMonitor; + return (this.monitor != null); + } + + public MachineSource getMachineSource() { + return this.asMachineSource; + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java new file mode 100644 index 0000000000..af1fd82030 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java @@ -0,0 +1,416 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.GT_Values.V; +import static gregtech.api.enums.Textures.BlockIcons.*; +import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import goodgenerator.api.recipe.ExtremeHeatExchangerRecipe; +import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; +import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTech_API; +import gregtech.api.enums.GT_HatchElement; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; +import gregtech.api.multitileentity.multiblock.casing.Glasses; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Log; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Utility; +import gregtech.api.util.IGT_HatchAdder; + +public class ExtremeHeatExchanger extends GT_MetaTileEntity_TooltipMultiBlockBase_EM + implements IConstructable, ISurvivalConstructable { + + protected IStructureDefinition<ExtremeHeatExchanger> multiDefinition = null; + + public static double penalty_per_config = 0.015d; + protected int casingAmount = 0; + protected GT_MetaTileEntity_Hatch_Input mHotFluidHatch; + protected GT_MetaTileEntity_Hatch_Output mCooledFluidHatch; + private boolean transformed = false; + private String hotName; + private ExtremeHeatExchangerRecipe tRunningRecipe; + + public ExtremeHeatExchanger(String name) { + super(name); + } + + public ExtremeHeatExchanger(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + public IStructureDefinition<ExtremeHeatExchanger> getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.<ExtremeHeatExchanger>builder() + .addShape( + mName, + transpose( + new String[][] { + // spotless:off + { " CCC ", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", " CCC " }, + { " CCC ", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", " CCC " }, + { " CFC ", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", " CEC " }, + { " CCC ", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", " CCC " }, + { " CCC ", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", " CCC " }, + { " C~C ", "BBBBB", "BBBBB", "BBBBB", "BBBBB", "BBBBB", "BBBBB", "BBBBB", "BBBBB", "BBBBB", " CCC " }, + //spotless:on + })) + .addElement( + 'B', + ofChain( + buildHatchAdder(ExtremeHeatExchanger.class) + .atLeast(GT_HatchElement.InputHatch, GT_HatchElement.Maintenance) + .casingIndex(48) + .dot(1) + .build(), + onElementPass(x -> x.casingAmount++, ofBlock(GregTech_API.sBlockCasings4, 0)))) + .addElement( + 'T', + ofChain( + buildHatchAdder(ExtremeHeatExchanger.class) + .atLeast(GT_HatchElement.OutputHatch, GT_HatchElement.Maintenance) + .casingIndex(48) + .dot(2) + .build(), + onElementPass(x -> x.casingAmount++, ofBlock(GregTech_API.sBlockCasings4, 0)))) + .addElement('F', EHEHatches.HotInputHatch.newAny(48, 3)) + .addElement('E', EHEHatches.ColdOutputHatch.newAny(48, 4)) + .addElement( + 'C', + ofChain( + buildHatchAdder(ExtremeHeatExchanger.class).atLeast(GT_HatchElement.Maintenance) + .casingIndex(48) + .dot(5) + .build(), + onElementPass(x -> x.casingAmount++, ofBlock(GregTech_API.sBlockCasings4, 0)))) + .addElement('G', Glasses.chainAllGlasses()) + .addElement('P', ofBlock(GregTech_API.sBlockCasings2, 15)) + .addElement('W', ofBlock(Loaders.pressureResistantWalls, 0)) + .build(); + } + return multiDefinition; + } + + public boolean addHotFluidInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + mHotFluidHatch = (GT_MetaTileEntity_Hatch_Input) aMetaTileEntity; + return true; + } + return false; + } + + public boolean addColdFluidOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + mCooledFluidHatch = (GT_MetaTileEntity_Hatch_Output) aMetaTileEntity; + return true; + } + return false; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + transformed = aNBT.getBoolean("transformed"); + if (aNBT.hasKey("hotName", Constants.NBT.TAG_STRING)) { + String loadedHotName = aNBT.getString("hotName"); + Fluid hotFluid = FluidRegistry.getFluid(loadedHotName); + if (hotFluid != null) { + hotName = loadedHotName; + tRunningRecipe = (ExtremeHeatExchangerRecipe) GoodGeneratorRecipeMaps.extremeHeatExchangerFuels + .getBackend() + .findFuel(hotFluid); + } + } else { + hotName = null; + tRunningRecipe = null; + } + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setBoolean("transformed", transformed); + if (hotName != null) aNBT.setString("hotName", hotName); + super.saveNBTData(aNBT); + } + + @Override + public RecipeMap<?> getRecipeMap() { + return GoodGeneratorRecipeMaps.extremeHeatExchangerFuels; + } + + @Override + protected void clearHatches_EM() { + super.clearHatches_EM(); + mCooledFluidHatch = null; + mHotFluidHatch = null; + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.casingAmount = 0; + return structureCheck_EM(mName, 2, 5, 0) && mMaintenanceHatches.size() == 1 && casingAmount >= 25; + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Heat Exchanger/Plasma Heat Exchanger") + .addInfo("Controller block for the Extreme Heat Exchanger.") + .addInfo("Accept Hot fluid like lava, hot coolant or plasma.") + .addInfo("Output SC Steam/SH Steam/Steam.") + .addInfo("Check NEI for more info.") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addController("Front bottom") + .addOtherStructurePart("Input Hatch", "distilled water", 1) + .addOtherStructurePart("Output Hatch", "SC Steam/SH Steam/Steam", 2) + .addOtherStructurePart("Input Hatch", "Hot fluid or plasma", 3) + .addOtherStructurePart("Output Hatch", "Cold fluid", 4) + .addMaintenanceHatch("Any Casing", 1, 2, 5) + .addCasingInfoMin("Robust Tungstensteel Machine Casings", 25, false) + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public @NotNull CheckRecipeResult checkProcessing_EM() { + tRunningRecipe = null; + if (mHotFluidHatch.getFluid() == null) return CheckRecipeResultRegistry.SUCCESSFUL; + ExtremeHeatExchangerRecipe tRecipe = (ExtremeHeatExchangerRecipe) GoodGeneratorRecipeMaps.extremeHeatExchangerFuels + .getBackend() + .findFuel(mHotFluidHatch.getFluid()); + if (tRecipe == null) return CheckRecipeResultRegistry.NO_RECIPE; + tRunningRecipe = tRecipe; + this.hotName = mHotFluidHatch.getFluid() + .getFluid() + .getName(); + int tMaxConsume = tRecipe.getMaxHotFluidConsume(); + int transformed_threshold = tRecipe.mSpecialValue; + int tRealConsume = Math.min(tMaxConsume, mHotFluidHatch.getFluid().amount); + double penalty = 0.0d; + double efficiency = 1d; + int shs_reduction_per_config = 150; + + if (mInventory[1] != null && mInventory[1].getUnlocalizedName() + .startsWith("gt.integrated_circuit")) { + int circuit_config = mInventory[1].getItemDamage(); + if (circuit_config >= 1 && circuit_config <= 25) { + penalty = (circuit_config - 1) * penalty_per_config; + transformed_threshold -= (shs_reduction_per_config * (circuit_config - 1)); + } + } + efficiency -= penalty; + + if (transformed_threshold <= 0) transformed_threshold = 1; + + transformed = tRealConsume >= transformed_threshold; + + this.mMaxProgresstime = 20; + this.mEUt = (int) (tRecipe.getEUt() * efficiency * ((double) tRealConsume / (double) tMaxConsume)); + mHotFluidHatch.drain(tRealConsume, true); + mCooledFluidHatch.fill(new FluidStack(tRecipe.getCooledFluid(), tRealConsume), true); + this.mEfficiencyIncrease = 160; + + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + if (this.mEUt > 0 && tRunningRecipe != null) { + Fluid tReadySteam = transformed ? tRunningRecipe.getHeatedSteam() : tRunningRecipe.getNormalSteam(); + int waterAmount = (int) (this.mEUt / getUnitSteamPower(tReadySteam.getName())) / 160; + if (waterAmount < 0) return false; + if (depleteInput(GT_ModHandler.getDistilledWater(waterAmount))) { + addOutput(new FluidStack(tReadySteam, waterAmount * 160)); + } else { + GT_Log.exp.println(this.mName + " had no more Distilled water!"); + mHotFluidHatch.getBaseMetaTileEntity() + .doExplosion(V[8]); + return false; + } + } + return true; + } + + public double getUnitSteamPower(String steam) { + switch (steam) { + case "steam": + return 0.5; + case "ic2superheatedsteam": + return 1; + case "supercriticalsteam": + return 100; + default: + return -1; + } + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM(mName, 2, 5, 0, stackSize, hintsOnly); + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("ExtremeHeatExchanger.hint", 6); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new ExtremeHeatExchanger(mName); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public String[] getInfoData() { + int tThreshold = tRunningRecipe != null ? tRunningRecipe.mSpecialValue : 0; + return new String[] { + StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GT_Utility.formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GT_Utility.formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + mEfficiency / 100.0F + + EnumChatFormatting.RESET + + " %", + StatCollector.translateToLocal("scanner.info.XHE.0") + " " + + (transformed ? EnumChatFormatting.RED : EnumChatFormatting.YELLOW) + + GT_Utility.formatNumbers(this.mEUt) + + EnumChatFormatting.RESET + + " EU/t", + StatCollector.translateToLocal("scanner.info.XHE.1") + " " + + EnumChatFormatting.GREEN + + GT_Utility.formatNumbers(tThreshold) + + EnumChatFormatting.RESET + + " L/s" }; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { casingTexturePages[0][48], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][48], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][48] }; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 2, 5, 0, elementBudget, env, false, true); + } + + private enum EHEHatches implements IHatchElement<ExtremeHeatExchanger> { + + HotInputHatch(ExtremeHeatExchanger::addHotFluidInputToMachineList, GT_MetaTileEntity_Hatch_Input.class) { + + @Override + public long count(ExtremeHeatExchanger t) { + if (t.mHotFluidHatch == null) return 0; + return 1; + } + }, + ColdOutputHatch(ExtremeHeatExchanger::addColdFluidOutputToMachineList, GT_MetaTileEntity_Hatch_Output.class) { + + @Override + public long count(ExtremeHeatExchanger t) { + if (t.mCooledFluidHatch == null) return 0; + return 1; + } + }; + + private final List<Class<? extends IMetaTileEntity>> mteClasses; + private final IGT_HatchAdder<ExtremeHeatExchanger> adder; + + EHEHatches(IGT_HatchAdder<ExtremeHeatExchanger> adder, Class<? extends IMetaTileEntity>... mteClasses) { + this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); + this.adder = adder; + } + + @Override + public List<? extends Class<? extends IMetaTileEntity>> mteClasses() { + return mteClasses; + } + + public IGT_HatchAdder<? super ExtremeHeatExchanger> adder() { + return adder; + } + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/FuelRefineFactory.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/FuelRefineFactory.java new file mode 100644 index 0000000000..85c4bffbab --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/FuelRefineFactory.java @@ -0,0 +1,376 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureUtility; + +import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; +import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.enums.GT_HatchElement; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; +import gregtech.api.objects.GT_RenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_OverclockCalculator; +import gregtech.api.util.GT_Recipe; + +public class FuelRefineFactory extends GT_MetaTileEntity_TooltipMultiBlockBase_EM + implements IConstructable, ISurvivalConstructable { + + private IStructureDefinition<FuelRefineFactory> multiDefinition = null; + private int Tier = -1; + private int[] cnt = new int[] { 0, 0, 0, 0 }; + private static final Block[] coils = new Block[] { Loaders.FRF_Coil_1, Loaders.FRF_Coil_2, Loaders.FRF_Coil_3, + Loaders.FRF_Coil_4 }; + + public FuelRefineFactory(String name) { + super(name); + turnOffMaintenance(); + useLongPower = true; + } + + public FuelRefineFactory(int id, String name, String nameRegional) { + super(id, name, nameRegional); + turnOffMaintenance(); + useLongPower = true; + } + + @Override + public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) { + if (!hasMaintenanceChecks) turnOffMaintenance(); + } + + @Override + public boolean doRandomMaintenanceDamage() { + return true; + } + + @Override + public void construct(ItemStack itemStack, boolean hintsOnly) { + structureBuild_EM(mName, 7, 12, 1, itemStack, hintsOnly); + } + + @Override + public IStructureDefinition<FuelRefineFactory> getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.<FuelRefineFactory>builder() + .addShape( + mName, + transpose( + new String[][] { { " ", " CCC ", " " }, + { " XGX ", " CCFFFCC ", " XGX " }, + { " CC CC ", " CFFCCCFFC ", " CC CC " }, + { " C C ", " CFCC CCFC ", " C C " }, + { " C C ", " CFC CFC ", " C C " }, + { " C C ", " CFC CFC ", " C C " }, + { " X X ", "CFC CFC", " X X " }, + { " G G ", "CFC CFC", " G G " }, + { " X X ", "CFC CFC", " X X " }, + { " C C ", " CFC CFC ", " C C " }, + { " C C ", " CFC CFC ", " C C " }, + { " C C ", " CFCC CCFC ", " C C " }, + { " CC CC ", " CFFC~CFFC ", " CC CC " }, + { " XGX ", " CCFFFCC ", " XGX " }, + { " ", " CCC ", " " } })) + .addElement( + 'X', + buildHatchAdder(FuelRefineFactory.class) + .atLeast( + GT_HatchElement.Maintenance, + GT_HatchElement.InputHatch, + GT_HatchElement.InputBus, + GT_HatchElement.OutputHatch, + HatchElement.EnergyMulti.or(GT_HatchElement.Energy)) + .casingIndex(179) + .dot(1) + .buildAndChain(ofBlock(Loaders.FRF_Casings, 0))) + .addElement('C', ofBlock(Loaders.FRF_Casings, 0)) + .addElement('G', ofBlock(Loaders.fieldRestrictingGlass, 0)) + .addElement( + 'F', + ofChain( + onElementPass(x -> ++x.cnt[0], ofFieldCoil(0)), + onElementPass(x -> ++x.cnt[1], ofFieldCoil(1)), + onElementPass(x -> ++x.cnt[2], ofFieldCoil(2)), + onElementPass(x -> ++x.cnt[3], ofFieldCoil(3)))) + .build(); + } + return multiDefinition; + } + + public static <T> IStructureElement<T> ofFieldCoil(int aIndex) { + return new IStructureElement<T>() { + + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block block = world.getBlock(x, y, z); + return block.equals(coils[aIndex]); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, coils[getIndex(trigger)], 0); + return true; + } + + private int getIndex(ItemStack trigger) { + int s = trigger.stackSize; + if (s > 4 || s <= 0) s = 4; + return s - 1; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return world.setBlock(x, y, z, coils[getIndex(trigger)], 0, 3); + } + + @Override + public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + return BlocksToPlace.create(coils[getIndex(trigger)], 0); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + if (check(t, world, x, y, z)) return PlaceResult.SKIP; + return StructureUtility.survivalPlaceBlock( + coils[getIndex(trigger)], + 0, + world, + x, + y, + z, + env.getSource(), + env.getActor(), + env.getChatter()); + } + }; + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Naquadah Fuel Refinery") + .addInfo("Controller block for the Naquadah Fuel Refinery") + .addInfo("But at what cost?") + .addInfo("Produces naquadah fuels.") + .addInfo("Needs field restriction coils to control the fatal radiation.") + .addInfo("Use higher tier coils to unlock more fuel types and reduce the processing times.") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .beginStructureBlock(3, 15, 15, false) + .addInputHatch("The casings adjoin the field restriction glass.") + .addInputBus("The casings adjoin the field restriction glass.", 1) + .addOutputHatch("The casings adjoin the field restriction glass.", 1) + .addEnergyHatch("The casings adjoin the field restriction glass.", 1) + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.Tier = aNBT.getInteger("mTier"); + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mTier", this.Tier); + super.saveNBTData(aNBT); + } + + @Override + public String[] getStructureDescription(ItemStack itemStack) { + return DescTextLocalization.addText("FuelRefineFactory.hint", 8); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + cnt[0] = 0; + cnt[1] = 0; + cnt[2] = 0; + cnt[3] = 0; + return structureCheck_EM(mName, 7, 12, 1) && getTier() != -1; + } + + public int getTier() { + for (int i = 0; i < 4; i++) { + if (cnt[i] == 32) { + Tier = i + 1; + return i; + } + } + Tier = -1; + return -1; + } + + @Override + public RecipeMap<?> getRecipeMap() { + return GoodGeneratorRecipeMaps.naquadahFuelRefineFactoryRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { + if (recipe.mSpecialValue > Tier) { + return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @NotNull + @Override + protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { + int overclockAmount = Tier - recipe.mSpecialValue; + return super.createOverclockCalculator(recipe).limitOverclockCount(overclockAmount); + } + }.setOverclock(1, 1); // Set Overclock to be 2/2 + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(getMaxInputEu()); + logic.setAvailableAmperage(1); + } + + public final boolean addToFRFList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } else { + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { + return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); + } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { + return this.mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); + } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { + return this.mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity); + } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { + return this.mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); + } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti) { + return this.eEnergyMulti.add((GT_MetaTileEntity_Hatch_EnergyMulti) aMetaTileEntity); + } else { + return false; + } + } + } + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new FuelRefineFactory(this.mName); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack aStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return true; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public String[] getInfoData() { + String[] infoData = new String[super.getInfoData().length + 1]; + System.arraycopy(super.getInfoData(), 0, infoData, 0, super.getInfoData().length); + infoData[super.getInfoData().length] = StatCollector.translateToLocal("scanner.info.FRF") + " " + this.Tier; + return infoData; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + @SuppressWarnings("ALL") + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(179), + new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE), TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW) + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(179), + new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE), TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_GLOW) + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(179) }; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 7, 12, 1, elementBudget, env, false, true); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/DieselGenerator.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/DieselGenerator.java new file mode 100644 index 0000000000..4d54be44d1 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/DieselGenerator.java @@ -0,0 +1,214 @@ +package goodgenerator.blocks.tileEntity.GTMetaTileEntity; + +import static gregtech.api.enums.Textures.BlockIcons.*; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_SIDE_ACTIVE_GLOW; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.GT_Mod; +import gregtech.api.enums.ItemList; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Log; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_Utility; + +public class DieselGenerator extends GT_MetaTileEntity_BasicGenerator { + + public int mEfficiency; + + public DieselGenerator(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + new String[] { "Requires liquid Fuel", + "Causes " + (int) (GT_Mod.gregtechproxy.mPollutionBaseDieselGeneratorPerSecond * (1.1 - aTier * 0.1)) + + " Pollution per second" }); + mEfficiency = 100 - aTier * 10; + } + + public DieselGenerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + mEfficiency = 100 - aTier * 10; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new DieselGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap<?> getRecipeMap() { + return RecipeMaps.dieselFuels; + } + + @Override + public int getCapacity() { + return 16000; + } + + @Override + public int getEfficiency() { + return this.mEfficiency; + } + + @Override + public int getFuelValue(ItemStack aStack) { + if (GT_Utility.isStackInvalid(aStack) || getRecipeMap() == null) return 0; + long rValue = Math.max(GT_ModHandler.getFuelCanValue(aStack) * 6 / 5, super.getFuelValue(aStack)); + if (ItemList.Fuel_Can_Plastic_Filled.isStackEqual(aStack, false, true)) { + rValue = Math.max(rValue, GameRegistry.getFuelValue(aStack) * 3L); + } + if (rValue > Integer.MAX_VALUE) { + throw new ArithmeticException("Integer LOOPBACK!"); + } + return (int) rValue; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aTick % 100 == 0 && mFluid != null && mFluid.amount > this.getCapacity()) { + GT_Log.err.println( + "Dupe Abuse: " + aBaseMetaTileEntity.getOwnerName() + + " Coords: " + + aBaseMetaTileEntity.getXCoord() + + " " + + aBaseMetaTileEntity.getYCoord() + + " " + + aBaseMetaTileEntity.getZCoord()); + aBaseMetaTileEntity.setToFire(); + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public ITexture[] getFront(byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_FRONT), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_FRONT_GLOW) + .glow() + .build()), + OVERLAYS_ENERGY_OUT[this.mTier] }; + } + + @Override + public ITexture[] getBack(byte aColor) { + return new ITexture[] { super.getBack(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_BACK), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_BACK_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getBottom(byte aColor) { + return new ITexture[] { super.getBottom(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_BOTTOM), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_BOTTOM_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getTop(byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_TOP), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_TOP_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getSides(byte aColor) { + return new ITexture[] { super.getSides(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_SIDE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_SIDE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getFrontActive(byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_FRONT_ACTIVE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_FRONT_ACTIVE_GLOW) + .glow() + .build()), + OVERLAYS_ENERGY_OUT[this.mTier] }; + } + + @Override + public ITexture[] getBackActive(byte aColor) { + return new ITexture[] { super.getBackActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_BACK_ACTIVE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_BACK_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getBottomActive(byte aColor) { + return new ITexture[] { super.getBottomActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_BOTTOM_ACTIVE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_BOTTOM_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getTopActive(byte aColor) { + return new ITexture[] { super.getTopActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_TOP_ACTIVE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_TOP_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getSidesActive(byte aColor) { + return new ITexture[] { super.getSidesActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_SIDE_ACTIVE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_SIDE_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public int getPollution() { + return (int) (GT_Mod.gregtechproxy.mPollutionBaseDieselGeneratorPerSecond * (1.1 - mTier * 0.1)); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronAccelerator.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronAccelerator.java new file mode 100644 index 0000000000..730374db66 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronAccelerator.java @@ -0,0 +1,48 @@ +package goodgenerator.blocks.tileEntity.GTMetaTileEntity; + +import static gregtech.api.enums.GT_Values.V; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; + +public class NeutronAccelerator extends GT_MetaTileEntity_Hatch_Energy { + + public NeutronAccelerator(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public NeutronAccelerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public int getMaxEUConsume() { + return (int) (V[mTier] * 8 / 10); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new NeutronAccelerator(mName, mTier, this.getDescription(), mTextures); + } + + @Override + public String[] getDescription() { + return new String[] { "Input EU to Accelerate the Neutron!", "Max EU input: " + this.maxEUInput(), + "Max EU consumption: " + this.getMaxEUConsume(), + "Every EU can be transformed into 10~20 eV Neutron Kinetic Energy." }; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if (aBaseMetaTileEntity.getStoredEU() >= getMaxEUConsume() && aBaseMetaTileEntity.isAllowedToWork()) { + setEUVar(aBaseMetaTileEntity.getStoredEU() - getMaxEUConsume()); + aBaseMetaTileEntity.setActive(true); + } else { + aBaseMetaTileEntity.setActive(false); + } + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronSensor.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronSensor.java new file mode 100644 index 0000000000..86bcbeece9 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronSensor.java @@ -0,0 +1,277 @@ +package goodgenerator.blocks.tileEntity.GTMetaTileEntity; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import crazypants.enderio.Log; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GT_UIInfos; +import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Utility; +import gregtech.common.gui.modularui.widget.CoverCycleButtonWidget; + +public class NeutronSensor extends GT_MetaTileEntity_Hatch { + + private static final IIconContainer textureFont = new Textures.BlockIcons.CustomIcon("icons/NeutronSensorFont"); + private static final IIconContainer textureFont_Glow = new Textures.BlockIcons.CustomIcon( + "icons/NeutronSensorFont_GLOW"); + + protected int threshold = 0; + protected boolean inverted = false; + boolean isOn = false; + + public NeutronSensor(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 0, "Detect Neutron Kinetic Energy."); + } + + public NeutronSensor(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + return new String[] { "Can be installed in Neutron Activator.", + "Output Redstone Signal according to the Neutron Kinetic Energy.", + "Right click to open the GUI and setting." }; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + if (aNBT.hasKey("mBoxContext")) { + // Convert legacy settings + setThresholdFromString(aNBT.getString("mBoxContext")); + } else { + threshold = aNBT.getInteger("mThreshold"); + inverted = aNBT.getBoolean("mInverted"); + } + super.loadNBTData(aNBT); + } + + /** + * Used to convert legacy setting where the sensor would use a string like ">200keV" to set its threshold. This + * method updates the {@link #threshold} and {@link #inverted} fields based on the input string. The string is + * assumed to be in format "(operator)(value)[suffix](ev)", where: + * <ul> + * <li>(operator) is one of "<", ">", "<=", ">=", "==", or "!="</li> + * <li>(value) is a numeric value (sequence of decimal digits)</li> + * <li>(suffix) is "k", "K", "m", or "M" (optional)</li> + * <li>(ev) is the string "ev", case-insensitive.</li> + * </ul> + * Note that operators "==" and "!=" can not be converted exactly, as the new threshold supports only a binary + * comparison (less than, or greater than or equal). Thus "==" is interpreted in the same way as "<=", and "!=" as + * ">". This shouldn't be a big problem for real setups, because one should probably not be testing for strict + * equality here anyway. The possible reasonable conditions "==0eV" and "!=0eV" will continue working as before. + * + * @param text String to convert. + */ + private void setThresholdFromString(String text) { + Matcher matcher = Pattern.compile("^(<|>|<=|>=|==|!=)([0-9]*)(|k|m)(ev)$", Pattern.CASE_INSENSITIVE) + .matcher(text); + + if (!matcher.matches()) { + Log.error("Failed to parse Neutron Sensor setting: \"" + text + "\"!"); + return; + } + + String operator = matcher.group(1); + String value = matcher.group(2); + String suffix = matcher.group(3); + + int newThreshold = Integer.parseInt(value); + + switch (suffix) { + case "k": + case "K": + newThreshold *= 1000; + break; + case "m": + case "M": + newThreshold *= 1_000_000; + break; + } + + switch (operator) { + case "<": + threshold = newThreshold; + inverted = true; + break; + case ">": + threshold = newThreshold + 1; + inverted = false; + break; + case "<=": + threshold = newThreshold + 1; + inverted = true; + break; + case ">=": + threshold = newThreshold; + inverted = false; + break; + case "==": // Interpret as <= to keep "==0eV" working as before. + threshold = newThreshold + 1; + inverted = true; + break; + case "!=": // Interpret as > to keep "!=0eV" working as before. + threshold = newThreshold + 1; + inverted = false; + break; + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mThreshold", threshold); + aNBT.setBoolean("mInverted", inverted); + super.saveNBTData(aNBT); + } + + @Override + public void initDefaultModes(NBTTagCompound aNBT) { + getBaseMetaTileEntity().setActive(true); + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + /** + * Updates redstone output strength based on the eV of the multiblock. + * + * @param eV Amount of eV to compare. + */ + public void updateRedstoneOutput(int eV) { + isOn = (eV >= threshold) ^ inverted; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), TextureFactory.builder() + .addIcon(textureFont_Glow) + .glow() + .build() }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont) }; + } + + @Override + public boolean allowGeneralRedstoneOutput() { + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (isOn) { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) 15); + } + } else { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) 0); + } + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new NeutronSensor(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection Side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean useModularUI() { + return true; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + final String INVERTED = GT_Utility.trans("INVERTED", "Inverted"); + final String NORMAL = GT_Utility.trans("NORMAL", "Normal"); + + builder.widget( + new CoverCycleButtonWidget().setToggle(() -> inverted, (val) -> inverted = val) + .setTextureGetter( + (state) -> state == 1 ? GT_UITextures.OVERLAY_BUTTON_REDSTONE_ON + : GT_UITextures.OVERLAY_BUTTON_REDSTONE_OFF) + .addTooltip(0, NORMAL) + .addTooltip(1, INVERTED) + .setPos(10, 8)) + .widget( + new TextWidget().setStringSupplier(() -> inverted ? INVERTED : NORMAL) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setTextAlignment(Alignment.CenterLeft) + .setPos(28, 12)) + .widget( + new NumericWidget().setBounds(0, 1200000000) + .setGetter(() -> threshold) + .setSetter((value) -> threshold = (int) value) + .setScrollValues(1000, 1, 1_000_000) + .setTextColor(Color.WHITE.dark(1)) + .setTextAlignment(Alignment.CenterLeft) + .setFocusOnGuiOpen(true) + .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) + .setPos(10, 28) + .setSize(77, 12)) + .widget( + new TextWidget(StatCollector.translateToLocal("gui.NeutronSensor.4")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setTextAlignment(Alignment.CenterLeft) + .setPos(90, 30)); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/YOTTAHatch.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/YOTTAHatch.java new file mode 100644 index 0000000000..f905e82f8c --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/YOTTAHatch.java @@ -0,0 +1,470 @@ +package goodgenerator.blocks.tileEntity.GTMetaTileEntity; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; + +import appeng.api.config.AccessRestriction; +import appeng.api.config.Actionable; +import appeng.api.networking.GridFlags; +import appeng.api.networking.IGrid; +import appeng.api.networking.IGridNode; +import appeng.api.networking.events.MENetworkCellArrayUpdate; +import appeng.api.networking.events.MENetworkStorageEvent; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.networking.security.IActionHost; +import appeng.api.networking.storage.IStorageGrid; +import appeng.api.storage.ICellContainer; +import appeng.api.storage.IMEInventory; +import appeng.api.storage.IMEInventoryHandler; +import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IItemList; +import appeng.api.util.AECableType; +import appeng.api.util.DimensionalCoord; +import appeng.me.helpers.AENetworkProxy; +import appeng.me.helpers.IGridProxyable; +import goodgenerator.blocks.tileEntity.YottaFluidTank; +import goodgenerator.loader.Loaders; +import goodgenerator.util.StackUtils; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Utility; + +public class YOTTAHatch extends GT_MetaTileEntity_Hatch implements IGridProxyable, IActionHost, ICellContainer, + IMEInventory<IAEFluidStack>, IMEInventoryHandler<IAEFluidStack> { + + private static final IIconContainer textureFont = new Textures.BlockIcons.CustomIcon("icons/YOTTAHatch"); + + private YottaFluidTank host; + private AENetworkProxy gridProxy = null; + private int priority; + private byte tickRate = 20; + private FluidStack lastFluid = null; + private BigInteger lastAmt = BigInteger.ZERO; + private AccessRestriction readMode = AccessRestriction.READ_WRITE; + private final AccessRestriction[] AEModes = new AccessRestriction[] { AccessRestriction.NO_ACCESS, + AccessRestriction.READ, AccessRestriction.WRITE, AccessRestriction.READ_WRITE }; + + private static final BigInteger MAX_LONG_BIGINT = BigInteger.valueOf(Long.MAX_VALUE); + + public YOTTAHatch(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { "Special I/O port for AE2FC.", "Directly connected YOTTank with AE fluid storage system.", + "Use screwdriver to set storage priority", "Use soldering iron to set read/write mode" }); + } + + public YOTTAHatch(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + public void setTank(YottaFluidTank te) { + this.host = te; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mAEPriority", this.priority); + aNBT.setInteger("mAEMode", this.readMode.ordinal()); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.priority = aNBT.getInteger("mAEPriority"); + this.readMode = AEModes[aNBT.getInteger("mAEMode")]; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ, + ItemStack toolStack) { + if (aPlayer.isSneaking()) this.priority -= 10; + else this.priority += 10; + GT_Utility + .sendChatToPlayer(aPlayer, String.format(StatCollector.translateToLocal("yothatch.chat.0"), this.priority)); + } + + @Override + public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ, ItemStack toolStack) { + this.readMode = AEModes[(readMode.ordinal() + 1) % 4]; + GT_Utility + .sendChatToPlayer(aPlayer, String.format(StatCollector.translateToLocal("yothatch.chat.1"), this.readMode)); + return true; + } + + @Override + public IGridNode getGridNode(ForgeDirection forgeDirection) { + AENetworkProxy gp = getProxy(); + return gp != null ? gp.getNode() : null; + } + + @Override + public AECableType getCableConnectionType(ForgeDirection forgeDirection) { + return AECableType.SMART; + } + + @Override + public void securityBreak() {} + + @Override + public AENetworkProxy getProxy() { + if (gridProxy == null) { + gridProxy = new AENetworkProxy(this, "proxy", Loaders.YFH, true); + gridProxy.onReady(); + gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); + } + return this.gridProxy; + } + + @Override + public DimensionalCoord getLocation() { + IGregTechTileEntity gtm = this.getBaseMetaTileEntity(); + return new DimensionalCoord(gtm.getWorld(), gtm.getXCoord(), gtm.getYCoord(), gtm.getZCoord()); + } + + @Override + public IItemList<IAEFluidStack> getAvailableItems(IItemList<IAEFluidStack> out) { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return out; + if (host.mFluid == null || host.mStorageCurrent.signum() <= 0) return out; + long ready; + if (host.mStorageCurrent.compareTo(MAX_LONG_BIGINT) >= 0) { + ready = Long.MAX_VALUE; + } else ready = host.mStorageCurrent.longValue(); + out.add(StackUtils.createAEFluidStack(host.mFluid.getFluid(), ready)); + return out; + } + + @Override + public IAEFluidStack injectItems(IAEFluidStack input, Actionable type, BaseActionSource src) { + long amt = fill(null, input, false); + if (amt == input.getStackSize()) { + if (type.equals(Actionable.MODULATE)) fill(null, input, true); + return null; + } + return input; + } + + @Override + public IAEFluidStack extractItems(IAEFluidStack request, Actionable mode, BaseActionSource src) { + IAEFluidStack ready = drain(null, request, false); + if (ready != null) { + if (mode.equals(Actionable.MODULATE)) drain(null, ready, true); + return ready; + } else return null; + } + + @Override + public StorageChannel getChannel() { + return StorageChannel.FLUIDS; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + getProxy(); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (shouldTick(aTick)) { + if (isChanged()) { + IGridNode node = getGridNode(null); + if (node != null) { + IGrid grid = node.getGrid(); + if (grid != null) { + grid.postEvent(new MENetworkCellArrayUpdate()); + IStorageGrid storageGrid = grid.getCache(IStorageGrid.class); + if (storageGrid == null) { + node.getGrid() + .postEvent(new MENetworkStorageEvent(null, StorageChannel.FLUIDS)); + } else { + node.getGrid() + .postEvent( + new MENetworkStorageEvent(storageGrid.getFluidInventory(), StorageChannel.FLUIDS)); + } + node.getGrid() + .postEvent(new MENetworkCellArrayUpdate()); + } + } + faster(); + update(); + } else { + slower(); + } + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public int getCapacity() { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return 0; + if (host.mStorage.compareTo(YottaFluidTank.MAX_INT_BIGINT) >= 0) { + return Integer.MAX_VALUE; + } else return host.mStorage.intValue(); + } + + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return 0; + if (host.mLockedFluid != null && !host.mLockedFluid.isFluidEqual(resource)) return 0; + if (host.mFluid == null || host.mFluid.isFluidEqual(resource)) { + if (host.mFluid == null) { + host.mFluid = resource.copy(); + host.mFluid.amount = 1; + } + + if (host.addFluid(resource.amount, doFill)) { + return resource.amount; + } else { + final int returned; + if (host.getIsVoidExcessEnabled()) { + returned = resource.amount; + } else { + final BigInteger delta = host.mStorage.subtract(host.mStorageCurrent); + returned = delta.intValueExact(); + } + host.mStorageCurrent = host.mStorage; + return returned; + } + } + return 0; + } + + public long fill(@SuppressWarnings("unused") ForgeDirection from, IAEFluidStack resource, boolean doFill) { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return 0; + if (host.mLockedFluid != null && host.mLockedFluid.getFluid() != resource.getFluid()) return 0; + if (host.mFluid == null || host.mFluid.getFluid() == resource.getFluid()) { + if (host.mFluid == null) { + host.mFluid = resource.getFluidStack(); // makes a copy internally + host.mFluid.amount = 1; + } + + if (host.addFluid(resource.getStackSize(), doFill)) { + return resource.getStackSize(); + } else { + final long returned; + if (host.getIsVoidExcessEnabled()) { + returned = resource.getStackSize(); + } else { + final BigInteger delta = host.mStorage.subtract(host.mStorageCurrent); + returned = delta.longValueExact(); + } + host.mStorageCurrent = host.mStorage; + return returned; + } + } + return 0; + } + + @Override + public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return null; + if (host.mFluid == null || host.mFluid.getFluid() != resource.getFluid()) return null; + int ready; + if (host.mStorageCurrent.compareTo(YottaFluidTank.MAX_INT_BIGINT) >= 0) { + ready = Integer.MAX_VALUE; + } else ready = host.mStorageCurrent.intValue(); + ready = Math.min(ready, resource.amount); + if (doDrain) { + host.reduceFluid(ready); + } + return new FluidStack(resource.getFluid(), ready); + } + + public IAEFluidStack drain(@SuppressWarnings("unused") ForgeDirection from, IAEFluidStack resource, + boolean doDrain) { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return null; + if (host.mFluid == null || host.mFluid.getFluid() != resource.getFluid()) return null; + long ready; + if (host.mStorageCurrent.compareTo(MAX_LONG_BIGINT) > 0) { + ready = Long.MAX_VALUE; + } else ready = host.mStorageCurrent.longValue(); + ready = Math.min(ready, resource.getStackSize()); + if (doDrain) { + host.reduceFluid(ready); + } + IAEFluidStack copy = resource.copy(); + copy.setStackSize(ready); + return copy; + } + + @Override + public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return null; + if (host.mFluid == null) return null; + final FluidStack drainStack = host.mFluid.copy(); + drainStack.amount = maxDrain; + return this.drain(from, drainStack, doDrain); + } + + private static final FluidTankInfo[] EMPTY_TANK_INFO = new FluidTankInfo[] { new FluidTankInfo(null, 0) }; + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from) { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return EMPTY_TANK_INFO; + + return host.getTankInfo(from); + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return true; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), }; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new YOTTAHatch(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public IGridNode getActionableNode() { + AENetworkProxy gp = getProxy(); + return gp != null ? gp.getNode() : null; + } + + @Override + public AccessRestriction getAccess() { + return this.readMode; + } + + @Override + public boolean isPrioritized(IAEFluidStack input) { + return true; + } + + @Override + public boolean canAccept(IAEFluidStack input) { + FluidStack rInput = input.getFluidStack(); + return fill(null, rInput, false) > 0; + } + + @Override + @SuppressWarnings("rawtypes") + public List<IMEInventoryHandler> getCellArray(StorageChannel channel) { + List<IMEInventoryHandler> list = new ArrayList<>(); + if (channel == StorageChannel.FLUIDS) { + list.add(this); + } + return list; + } + + @Override + public int getPriority() { + return this.priority; + } + + @Override + public int getSlot() { + return 0; + } + + @Override + public boolean validForPass(int i) { + return true; + } + + @Override + public void blinkCell(int slot) {} + + @Override + public void saveChanges(IMEInventory cellInventory) { + // This is handled by host itself. + } + + private boolean isChanged() { + if (this.host == null) return false; + return !this.lastAmt.equals(this.host.mStorageCurrent) || this.lastFluid != this.host.mFluid; + } + + private void update() { + if (this.host == null) return; + this.lastAmt = this.host.mStorageCurrent; + this.lastFluid = this.host.mFluid; + } + + private void faster() { + if (this.tickRate > 15) { + this.tickRate -= 5; + } + } + + private void slower() { + if (this.tickRate < 100) { + this.tickRate += 5; + } + } + + private boolean shouldTick(long tick) { + if (this.host == null) return false; + return tick % this.tickRate == 0; + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaGenerator.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaGenerator.java new file mode 100644 index 0000000000..b590378922 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaGenerator.java @@ -0,0 +1,511 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; + +import java.util.ArrayList; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; + +import org.jetbrains.annotations.NotNull; + +import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoTunnel; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; +import goodgenerator.crossmod.thaumcraft.LargeEssentiaEnergyData; +import goodgenerator.items.MyMaterial; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import goodgenerator.util.ItemRefer; +import gregtech.api.enums.GT_HatchElement; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; +import gregtech.api.objects.GT_RenderedTexture; +import gregtech.api.objects.XSTR; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Utility; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.common.config.ConfigBlocks; + +public class LargeEssentiaGenerator extends GT_MetaTileEntity_TooltipMultiBlockBase_EM + implements IConstructable, ISurvivalConstructable { + + private IStructureDefinition<LargeEssentiaGenerator> multiDefinition = null; + protected int mStableValue = 0; + protected int mTierLimit = -1; + protected long mLeftEnergy; + private int mUpgrade = 1; + final XSTR R = new XSTR(); + protected ArrayList<EssentiaHatch> mEssentiaHatch = new ArrayList<>(); + + public LargeEssentiaGenerator(String name) { + super(name); + } + + public LargeEssentiaGenerator(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + public void construct(ItemStack itemStack, boolean hintsOnly) { + structureBuild_EM(mName, 4, 0, 4, itemStack, hintsOnly); + } + + @Override + protected void clearHatches_EM() { + super.clearHatches_EM(); + mEssentiaHatch.clear(); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mStableValue = 0; + return structureCheck_EM(mName, 4, 0, 4) && (mDynamoHatches.size() + eDynamoMulti.size()) == 1 + && checkHatchTier() + && checkNoLaser() + && updateEssentiaHatchState(); + } + + private boolean checkNoLaser() { + for (GT_MetaTileEntity_Hatch_DynamoMulti tHatch : eDynamoMulti) { + if (tHatch instanceof GT_MetaTileEntity_Hatch_DynamoTunnel) { + return false; + } + } + return true; + } + + public boolean checkHatchTier() { + for (GT_MetaTileEntity_Hatch_Input tHatch : mInputHatches) { + if (tHatch.mTier > mTierLimit) return false; + } + for (GT_MetaTileEntity_Hatch_Dynamo tHatch : mDynamoHatches) { + if (tHatch.mTier > mTierLimit) return false; + } + for (GT_MetaTileEntity_Hatch_DynamoMulti tHatch : eDynamoMulti) { + if (tHatch.mTier > mTierLimit) return false; + } + return true; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.mStableValue = aNBT.getInteger("mStableValue"); + this.mLeftEnergy = aNBT.getLong("mLeftEnergy"); + this.mUpgrade = aNBT.getInteger("mUpgrade"); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mStableValue", this.mStableValue); + aNBT.setLong("mLeftEnergy", this.mLeftEnergy); + aNBT.setInteger("mUpgrade", this.mUpgrade); + } + + public boolean updateEssentiaHatchState() { + for (EssentiaHatch hatch : mEssentiaHatch) { + hatch.mState = mUpgrade; + } + return true; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (this.getBaseMetaTileEntity() + .isServerSide()) { + ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); + if (tCurrentItem != null && tCurrentItem.getItem() + .equals( + ItemRefer.Essentia_Upgrade_Empty.get(1) + .getItem())) { + int tMeta = tCurrentItem.getItemDamage(); + if ((mUpgrade & (1 << tMeta)) == 0 && tMeta != 0) { + tCurrentItem.stackSize--; + mUpgrade = mUpgrade | (1 << tMeta); + GT_Utility.sendChatToPlayer( + aPlayer, + tCurrentItem.getDisplayName() + StatCollector.translateToLocal("largeessentiagenerator.chat")); + } + updateEssentiaHatchState(); + return true; + } + } + super.onRightclick(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public IStructureDefinition<LargeEssentiaGenerator> getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.<LargeEssentiaGenerator>builder() + .addShape( + mName, + transpose( + new String[][] { + { "A A", " ", " ", " ", " ~ ", " ", " ", + " ", "A A" }, + { "T C T", " CEC ", " CEEEC ", " CEEEEEC ", "CEEEEEEEC", " CEEEEEC ", " CEEEC ", + " CEC ", "T C T" }, + { "T TXT T", " TCXCT ", " TCCXCCT ", "TCCCXCCCT", "XXXXXXXXX", "TCCCXCCCT", " TCCXCCT ", + " TCXCT ", "T TXT T" } })) + .addElement('A', ofBlock(ConfigBlocks.blockCosmeticOpaque, 1)) + .addElement('T', ofBlock(ConfigBlocks.blockCosmeticSolid, 7)) + .addElement('C', ofBlock(Loaders.magicCasing, 0)) // + .addElement('E', ofChain(onElementPass(x -> { + ++x.mStableValue; + x.mTierLimit = Math.max(x.mTierLimit, 4); + }, ofBlock(Loaders.essentiaCell, 0)), onElementPass(x -> { + x.mStableValue += 2; + x.mTierLimit = Math.max(x.mTierLimit, 5); + }, ofBlock(Loaders.essentiaCell, 1)), onElementPass(x -> { + x.mStableValue += 5; + x.mTierLimit = Math.max(x.mTierLimit, 6); + }, ofBlock(Loaders.essentiaCell, 2)), onElementPass(x -> { + x.mStableValue += 10; + x.mTierLimit = Math.max(x.mTierLimit, 8); + }, ofBlock(Loaders.essentiaCell, 3)))) + .addElement( + 'X', + ofChain( + buildHatchAdder(LargeEssentiaGenerator.class) + .atLeast( + HatchElement.DynamoMulti.or(GT_HatchElement.Dynamo), + GT_HatchElement.Maintenance, + GT_HatchElement.InputHatch) + .casingIndex(1536) + .dot(1) + .build(), + ofBlock(Loaders.magicCasing, 0), + ofSpecificTileAdder( + LargeEssentiaGenerator::addEssentiaHatch, + EssentiaHatch.class, + Loaders.magicCasing, + 0))) + .build(); + } + return multiDefinition; + } + + public final boolean addEssentiaHatch(EssentiaHatch aTileEntity) { + return this.mEssentiaHatch.add(aTileEntity); + } + + @Override + public @NotNull CheckRecipeResult checkProcessing_EM() { + this.mEfficiency = 10000; + this.mMaxProgresstime = 1; + setEssentiaToEUVoltageAndAmp(getVoltageLimit(), getAmpLimit()); + return CheckRecipeResultRegistry.GENERATING; + } + + public int getVoltageLimit() { + long voltage = 0; + for (GT_MetaTileEntity_Hatch tHatch : this.eDynamoMulti) { + voltage += tHatch.maxEUOutput(); + } + for (GT_MetaTileEntity_Hatch tHatch : this.mDynamoHatches) { + voltage += tHatch.maxEUOutput(); + } + if (voltage > Integer.MAX_VALUE) voltage = Integer.MAX_VALUE; + return (int) voltage; + } + + public int getAmpLimit() { + long amp = 0; + for (GT_MetaTileEntity_Hatch tHatch : this.eDynamoMulti) { + amp += tHatch.maxAmperesOut(); + } + for (GT_MetaTileEntity_Hatch tHatch : this.mDynamoHatches) { + amp += tHatch.maxAmperesOut(); + } + if (amp > Integer.MAX_VALUE) amp = Integer.MAX_VALUE; + return (int) amp; + } + + public long getPerAspectEnergy(Aspect aspect) { + int type = LargeEssentiaEnergyData.getAspectTypeIndex(aspect); + if (!isValidEssentia(aspect)) return 0; + switch (type) { + case 0: + return normalEssentia(aspect); + case 1: + return airEssentia(aspect); + case 2: + return thermalEssentia(aspect); + case 3: + return unstableEssentia(aspect); + case 4: + return victusEssentia(aspect); + case 5: + return taintedEssentia(aspect); + case 6: + return mechanicEssentia(aspect); + case 7: + return spiritEssentia(aspect); + case 8: + return radiationEssentia(aspect); + case 9: + return electricEssentia(aspect); + default: + return 0; + } + } + + public long normalEssentia(Aspect aspect) { + return LargeEssentiaEnergyData.getAspectFuelValue(aspect); + } + + public long airEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 0; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 8; + if (depleteInput(Materials.LiquidAir.getFluid(ceoInput))) { + ceoOutput = 1.5D; + } else if (depleteInput(Materials.Air.getGas(ceoInput))) { + ceoOutput = 1.0D; + } + return (long) (baseValue * ceoOutput); + } + + public long thermalEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 0; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 2; + if (depleteInput(Materials.SuperCoolant.getFluid(ceoInput))) { + ceoOutput = 9.0D; + } else if (depleteInput(FluidRegistry.getFluidStack("cryotheum", ceoInput))) { + ceoOutput = 5.0D; + } else if (depleteInput(FluidRegistry.getFluidStack("ic2coolant", ceoInput))) { + ceoOutput = 1.5D; + } else if (depleteInput(Materials.Ice.getSolid(ceoInput))) { + ceoOutput = 1.2D; + } else if (depleteInput(FluidRegistry.getFluidStack("ic2distilledwater", ceoInput))) { + ceoOutput = 1.0D; + } else if (depleteInput(Materials.Water.getFluid(ceoInput))) { + ceoOutput = 0.5D; + } + + return (long) (baseValue * ceoOutput); + } + + public long unstableEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 0; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 4; + if (depleteInput(WerkstoffLoader.Xenon.getFluidOrGas(ceoInput))) { + ceoOutput = 4.0D; + } else if (depleteInput(WerkstoffLoader.Krypton.getFluidOrGas(ceoInput))) { + ceoOutput = 3.0D; + } else if (depleteInput(Materials.Argon.getFluid(ceoInput))) { + ceoOutput = 2.5D; + } else if (depleteInput(WerkstoffLoader.Neon.getFluidOrGas(ceoInput))) { + ceoOutput = 2.2D; + } else if (depleteInput(Materials.Helium.getFluid(ceoInput))) { + ceoOutput = 2.0D; + } else if (depleteInput(Materials.Nitrogen.getFluid(ceoInput))) { + ceoOutput = 1.0D; + } + return (long) (baseValue * ceoOutput); + } + + public long victusEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 1.0D; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 18; + if (depleteInput(FluidRegistry.getFluidStack("xpjuice", ceoInput))) { + ceoOutput = 2.0D; + } else if (depleteInput(FluidRegistry.getFluidStack("lifeessence", ceoInput))) { + ceoOutput = 6.0D; + } + return (long) (baseValue * ceoOutput); + } + + public long taintedEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 1.0D; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 3; + int chance = 2000; + if (depleteInput(FluidRegistry.getFluidStack("fluidpure", ceoInput))) { + ceoOutput = 60.0D; + chance = 0; + } else if (depleteInput(FluidRegistry.getFluidStack("fluiddeath", ceoInput))) { + ceoOutput = Math.pow(25000D / baseValue, 4); + chance = 4000; + } + + if (R.nextInt(10000) < chance) { + World world = getBaseMetaTileEntity().getWorld(); + int tX = R.nextInt(4); + int tZ = R.nextInt(4); + if (world.isAirBlock(tX, 0, tZ)) world.setBlock(tX, 0, tZ, ConfigBlocks.blockFluxGas, R.nextInt(8), 3); + } + + return (long) (baseValue * ceoOutput); + } + + public long mechanicEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 0; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 20; + if (depleteInput(Materials.Lubricant.getFluid(ceoInput))) { + ceoOutput = 1.0D; + } + return (long) (baseValue * ceoOutput); + } + + public long spiritEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 1.0D; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 2; + if (depleteInput(FluidRegistry.getFluidStack("witchery:fluidspirit", ceoInput))) { + ceoOutput = 10D * (1 + mStableValue / 100D); + } else if (depleteInput(FluidRegistry.getFluidStack("witchery:hollowtears", ceoInput))) { + ceoOutput = 15D * (1 + 100D / mStableValue); + } + return (long) (baseValue * ceoOutput); + } + + public long radiationEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 1.0D; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 6; + if (depleteInput(Materials.Caesium.getMolten(ceoInput))) { + ceoOutput = 2.0D; + } else if (depleteInput(Materials.Uranium235.getMolten(ceoInput))) { + ceoOutput = 3.0D; + } else if (depleteInput(Materials.Naquadah.getMolten(ceoInput))) { + ceoOutput = 4.0D; + } else if (depleteInput(MyMaterial.atomicSeparationCatalyst.getMolten(ceoInput))) { + ceoOutput = 16.0D; + } + return (long) (baseValue * ceoOutput); + } + + public long electricEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = Math.pow(3.0, GT_Utility.getTier(getVoltageLimit())); + return (long) (baseValue * ceoOutput); + } + + public void setEssentiaToEUVoltageAndAmp(long voltageLimit, long ampLimit) { + long EUt = mLeftEnergy; + long EUVoltage = voltageLimit, EUAmp = 1; + + for (EssentiaHatch hatch : this.mEssentiaHatch) { + AspectList aspects = hatch.getAspects(); + for (Aspect aspect : aspects.aspects.keySet()) { + if (!isValidEssentia(aspect)) continue; + while (EUt <= (voltageLimit * ampLimit) && aspects.getAmount(aspect) > 0) { + long addedEU = getPerAspectEnergy(aspect) * mStableValue / 25; + if (addedEU == 0) break; + EUt += addedEU; + aspects.reduce(aspect, 1); + if (aspects.getAmount(aspect) == 0) aspects.remove(aspect); + } + } + } + + if (EUt <= voltageLimit) { + EUVoltage = EUt; + EUAmp = 1; + mLeftEnergy = 0; + } else { + while (EUVoltage * (EUAmp + 1) <= EUt && EUAmp + 1 <= ampLimit) { + EUAmp++; + } + mLeftEnergy = EUt - (EUVoltage * EUAmp); + } + + this.mEUt = (int) EUVoltage; + this.eAmpereFlow = (int) EUAmp; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public String[] getStructureDescription(ItemStack itemStack) { + return DescTextLocalization.addText("LargeEssentiaGenerator.hint", 6); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new LargeEssentiaGenerator(this.mName); + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Essentia Generator") + .addInfo("Controller block for the Large Essentia Generator") + .addInfo("Maybe some Thaumaturges are upset by it. . .") + .addInfo("Transform Essentia into energy!") + .addInfo("The Diffusion Cell determines the highest hatch tier that the LEG can accept.") + .addInfo("Supports normal Dynamo Hatches or TecTech ones for up to 64A, but no Laser Hatches.") + .addInfo("You can find more information about this generator in the Thaumonomicon.") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addMaintenanceHatch("Hint block with dot 1", 1) + .addInputHatch("Hint block with dot 1", 1) + .addDynamoHatch("Hint block with dot 1", 1) + .addOtherStructurePart("Essentia Input Hatch", "Essentia Input", 1) + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + @SuppressWarnings("ALL") + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1536), + new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_DRAGONEGG), TextureFactory.builder() + .addIcon(Textures.BlockIcons.MACHINE_CASING_DRAGONEGG_GLOW) + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1536), + new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_DRAGONEGG) }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1536) }; + } + + public boolean isValidEssentia(Aspect aspect) { + int type = LargeEssentiaEnergyData.getAspectTypeIndex(aspect); + return type != -1 && (mUpgrade & (1 << type)) != 0; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 4, 0, 4, elementBudget, env, false, true); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaSmeltery.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaSmeltery.java new file mode 100644 index 0000000000..039bd76c51 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaSmeltery.java @@ -0,0 +1,558 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Mods.ThaumicBases; +import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; + +import java.util.ArrayList; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.enums.GT_HatchElement; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; +import gregtech.api.objects.XSTR; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.api.visnet.VisNetHandler; +import thaumcraft.common.config.ConfigBlocks; +import thaumcraft.common.lib.crafting.ThaumcraftCraftingManager; + +public class LargeEssentiaSmeltery extends GT_MetaTileEntity_TooltipMultiBlockBase_EM + implements IConstructable, ISurvivalConstructable { + + private static final IIconContainer textureFontOn = new Textures.BlockIcons.CustomIcon( + "icons/LargeEssentiaSmeltery_On"); + private static final IIconContainer textureFontOn_Glow = new Textures.BlockIcons.CustomIcon( + "icons/LargeEssentiaSmeltery_On_GLOW"); + private static final IIconContainer textureFontOff = new Textures.BlockIcons.CustomIcon( + "icons/LargeEssentiaSmeltery_Off"); + private static final IIconContainer textureFontOff_Glow = new Textures.BlockIcons.CustomIcon( + "icons/LargeEssentiaSmeltery_Off_GLOW"); + private static final String STRUCTURE_PIECE_FIRST = "first"; + private static final String STRUCTURE_PIECE_LATER = "later"; + private static final String STRUCTURE_PIECE_LAST = "last"; + private static final int CASING_INDEX = 1536; + private static final int MAX_STRUCTURE_LENGTH = 8; + private static final int DEFAULT_STRUCTURE_LENGTH = 3; + private static final int MAX_CONFIGURABLE_LENGTH = MAX_STRUCTURE_LENGTH - DEFAULT_STRUCTURE_LENGTH; + + private static final int RECIPE_DURATION = 32; + private static final int RECIPE_EUT = 480; + private static final float NODE_COST_MULTIPLIER = 1.15f; + + public AspectList mOutputAspects = new AspectList(); + protected int mCasing = 0; + protected double mParallel = 0; + protected int nodePower = 0; + protected int nodePurificationEfficiency = 0; + protected int nodeIncrease = 0; + + private IStructureDefinition<LargeEssentiaSmeltery> multiDefinition = null; + private ArrayList<EssentiaOutputHatch> mEssentiaOutputHatches = new ArrayList<>(); + private int pTier = 0; + private XSTR xstr = new XSTR(); + + public LargeEssentiaSmeltery(String name) { + super(name); + } + + public LargeEssentiaSmeltery(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + @Override + public void construct(ItemStack itemStack, boolean hintsOnly) { + structureBuild_EM(STRUCTURE_PIECE_FIRST, 2, 2, 0, itemStack, hintsOnly); + // default + structureBuild_EM(STRUCTURE_PIECE_LATER, 2, 2, -1, itemStack, hintsOnly); + structureBuild_EM(STRUCTURE_PIECE_LATER, 2, 2, -2, itemStack, hintsOnly); + int len = itemStack.stackSize; + if (len > MAX_CONFIGURABLE_LENGTH) len = MAX_CONFIGURABLE_LENGTH; + structureBuild_EM(STRUCTURE_PIECE_LAST, 2, 2, -len - 3, itemStack, hintsOnly); + while (len > 0) { + structureBuild_EM(STRUCTURE_PIECE_LATER, 2, 2, -len - 2, itemStack, hintsOnly); + len--; + } + } + + @Override + protected void clearHatches_EM() { + super.clearHatches_EM(); + mEssentiaOutputHatches.clear(); + } + + @Override + protected boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + this.mCasing = 0; + this.mParallel = 0; + this.pTier = 0; + this.nodePower = 0; + this.nodePurificationEfficiency = 0; + this.nodeIncrease = 0; + + if (!structureCheck_EM(STRUCTURE_PIECE_FIRST, 2, 2, 0)) return false; + if (!structureCheck_EM(STRUCTURE_PIECE_LATER, 2, 2, -1)) return false; + if (!structureCheck_EM(STRUCTURE_PIECE_LATER, 2, 2, -2)) return false; + int len = 2; + while (structureCheck_EM(STRUCTURE_PIECE_LATER, 2, 2, -len - 1)) len++; + if (len > MAX_STRUCTURE_LENGTH - 1 || len < DEFAULT_STRUCTURE_LENGTH) return false; + if (!structureCheck_EM(STRUCTURE_PIECE_LAST, 2, 2, -len - 1)) return false; + if (this.mCasing >= 24 && this.mMaintenanceHatches.size() == 1 + && this.mInputBusses.size() >= 1 + && this.mEssentiaOutputHatches.size() >= 1) { + this.mParallel = Math.floor(this.mParallel += 1 << this.pTier); + return true; + } + return false; + } + + @Override + public IStructureDefinition<? extends GT_MetaTileEntity_MultiblockBase_EM> getStructure_EM() { + if (this.multiDefinition == null) { + this.multiDefinition = StructureDefinition.<LargeEssentiaSmeltery>builder() + .addShape( + "first", + transpose(new String[][] { { " A " }, { " AAA " }, { "AA~AA" }, { " AAA " }, { " A " } })) + .addShape( + "later", + transpose(new String[][] { { " ABA " }, { "AECEA" }, { "D---D" }, { "AEFEA" }, { " AAA " } })) + .addShape( + "last", + transpose(new String[][] { { " A " }, { " AAA " }, { "AAAAA" }, { " AAA " }, { " A " } })) + .addElement('C', ofBlock(Loaders.essentiaFilterCasing, 0)) + .addElement('D', ofBlock(ConfigBlocks.blockCosmeticOpaque, 2)) + .addElement( + 'F', + ThaumicBases.isModLoaded() ? ofBlock(Block.getBlockFromName("thaumicbases:advAlchFurnace"), 0) + : ofBlock(ConfigBlocks.blockStoneDevice, 0)) + .addElement( + 'E', + ofChain( + onElementPass(x -> x.onEssentiaCellFound(0), ofBlock(Loaders.essentiaCell, 0)), + onElementPass(x -> x.onEssentiaCellFound(1), ofBlock(Loaders.essentiaCell, 1)), + onElementPass(x -> x.onEssentiaCellFound(2), ofBlock(Loaders.essentiaCell, 2)), + onElementPass(x -> x.onEssentiaCellFound(3), ofBlock(Loaders.essentiaCell, 3)))) + .addElement( + 'A', + ofChain( + buildHatchAdder(LargeEssentiaSmeltery.class) + .atLeast(GT_HatchElement.Maintenance, GT_HatchElement.Energy, GT_HatchElement.InputBus) + .casingIndex(CASING_INDEX) + .dot(1) + .build(), + ofSpecificTileAdder( + LargeEssentiaSmeltery::addEssentiaOutputHatchToMachineList, + EssentiaOutputHatch.class, + Loaders.essentiaOutputHatch, + 0), + onElementPass(LargeEssentiaSmeltery::onCasingFound, ofBlock(Loaders.magicCasing, 0)))) + .addElement('B', GT_HatchElement.Muffler.newAny(CASING_INDEX, 2)) + .build(); + } + return this.multiDefinition; + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Essentia Smeltery") + .addInfo("Controller block for the Large Essentia Smeltery") + .addInfo("Necessary evil.") + .addInfo("Advanced Essentia smelting technology.") + .addInfo("Max parallel dictated by structure size and Essentia Diffusion Cell tier") + .addInfo("Energy Hatch tier: HV+") + .addInfo("You can find more information about this machine in the Thaumonomicon.") + .addPollutionAmount(getPollutionPerSecond(null)) + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addController("Front center") + .addCasingInfo("Magic Casing", 24) + .addMaintenanceHatch("Hint block with dot 1") + .addInputBus("Hint block with dot 1") + .addInputHatch("Hint block with dot 1") + .addEnergyHatch("Hint block with dot 1") + .addOtherStructurePart("Essentia Output Hatch", "Hint block with dot 1") + .addMufflerHatch("Hint block with dot 2") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public String[] getStructureDescription(ItemStack itemStack) { + return DescTextLocalization.addText("LargeEssentiaSmeltery.hint", 8); + } + + @Override + public String[] getInfoData() { + String[] info = super.getInfoData(); + info[8] = "Node Power: " + EnumChatFormatting.RED + + this.nodePower + + EnumChatFormatting.RESET + + " Purification Efficiency: " + + EnumChatFormatting.AQUA + + this.nodePurificationEfficiency + + "%" + + EnumChatFormatting.RESET + + " Speed Up: " + + EnumChatFormatting.GRAY + + this.nodeIncrease + + "%" + + EnumChatFormatting.RESET; + return info; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), + TextureFactory.of(textureFontOn), TextureFactory.builder() + .addIcon(textureFontOn_Glow) + .glow() + .build() }; + else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), + TextureFactory.of(textureFontOff), TextureFactory.builder() + .addIcon(textureFontOff_Glow) + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; + } + + protected void onCasingFound() { + this.mCasing++; + } + + protected void onEssentiaCellFound(int tier) { + this.mParallel += (1 << tier) * 0.25f; + this.pTier = Math.max(this.pTier, tier); + } + + private boolean addEnergyHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { + if (((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity).mTier < 3) return false; + ((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); + } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti) { + ((GT_MetaTileEntity_Hatch_EnergyMulti) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.eEnergyMulti.add(((GT_MetaTileEntity_Hatch_EnergyMulti) aMetaTileEntity)); + } else { + return false; + } + } + } + + private boolean addEssentiaOutputHatchToMachineList(EssentiaOutputHatch aTileEntity) { + if (aTileEntity instanceof EssentiaOutputHatch) { + return this.mEssentiaOutputHatches.add((EssentiaOutputHatch) aTileEntity); + } + return false; + } + + @Override + protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (!this.isFullPower()) return; + super.runMachine(aBaseMetaTileEntity, aTick); + } + + @Override + public @NotNull CheckRecipeResult checkProcessing_EM() { + if (!isFullPower()) return SimpleCheckRecipeResult.ofFailure("node_too_small"); + + ArrayList<ItemStack> tInputList = getStoredInputs(); + + if (tInputList.size() == 0) return CheckRecipeResultRegistry.NO_RECIPE; + + int p = (int) this.mParallel; + for (int i = tInputList.size() - 1; i >= 0; i--) { + ItemStack itemStack = tInputList.get(i); + int stackSize = itemStack.stackSize; + int sur = p - stackSize; + + if (sur > 0) { + p -= stackSize; + this.mOutputAspects.add(getEssentia(itemStack, stackSize)); + if (!depleteInput(itemStack)) itemStack.stackSize = 0; + } else if (sur == 0) { + this.mOutputAspects.add(getEssentia(itemStack, stackSize)); + if (!depleteInput(itemStack)) itemStack.stackSize = 0; + break; + } else { + this.mOutputAspects.add(getEssentia(itemStack, p)); + itemStack.stackSize -= p; + break; + } + } + + this.mEfficiency = 10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000; + this.mEfficiencyIncrease = 10000; + + final World WORLD = this.getBaseMetaTileEntity() + .getWorld(); + int x = this.getBaseMetaTileEntity() + .getXCoord(); + int y = this.getBaseMetaTileEntity() + .getYCoord(); + int z = this.getBaseMetaTileEntity() + .getZCoord(); + + this.drainNodePower(WORLD, x, y, z); + this.nodePower -= expectedPower(); + + calculatePerfectOverclockedNessMulti( + RECIPE_EUT, + (int) Math.ceil(this.mOutputAspects.visSize() * RECIPE_DURATION * (1 - this.nodeIncrease * 0.005)), + 1, + Math.min(Integer.MAX_VALUE, getMaxInputEnergy_EM())); + + this.updateSlots(); + if (this.mEUt > 0) this.mEUt = -this.mEUt; + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + private AspectList getEssentia(ItemStack itemStack, int amount) { + AspectList aspectList = new AspectList(); + AspectList aspects = ThaumcraftCraftingManager.getObjectTags(itemStack); + aspects = ThaumcraftCraftingManager.getBonusTags(itemStack, aspects); + if (aspects != null && aspects.size() != 0 && aspects.getAspects()[0] != null) { + for (int i = 0; i < amount; i++) aspectList.add(aspects); + } else aspectList.add(Aspect.ENTROPY, amount); + return aspectList; + } + + private void fillEssentiaOutputHatch() { + for (EssentiaOutputHatch outputHatch : this.mEssentiaOutputHatches) { + for (Map.Entry<Aspect, Integer> entry : this.mOutputAspects.copy().aspects.entrySet()) { + Aspect aspect = entry.getKey(); + int amount = entry.getValue(); + this.mOutputAspects.remove(aspect, outputHatch.addEssentia(aspect, amount, null)); + } + } + this.mOutputAspects.aspects.clear(); + } + + private int expectedPower() { + return (int) (Math.pow(this.getMaxEnergyInputTier_EM(), 2) * NODE_COST_MULTIPLIER); + } + + private boolean isFullPower() { + return this.nodePower > expectedPower(); + } + + private void generateFluxGas(World world, int x, int y, int z) { + world.setBlock(x, y, z, ConfigBlocks.blockFluxGas, 8, 3); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setDouble("mParallel", this.mParallel); + aNBT.setDouble("nodePower", this.nodePower); + aNBT.setDouble("nodePurificationEfficiency", this.nodePurificationEfficiency); + aNBT.setDouble("nodeIncrease", this.nodeIncrease); + + Aspect[] aspectA = this.mOutputAspects.getAspects(); + NBTTagList nbtTagList = new NBTTagList(); + for (Aspect aspect : aspectA) { + if (aspect != null) { + NBTTagCompound f = new NBTTagCompound(); + f.setString("key", aspect.getTag()); + f.setInteger("amount", this.mOutputAspects.getAmount(aspect)); + nbtTagList.appendTag(f); + } + } + aNBT.setTag("Aspects", nbtTagList); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.mParallel = aNBT.getDouble("mParallel"); + this.nodePower = aNBT.getInteger("nodePower"); + this.nodePurificationEfficiency = aNBT.getInteger("nodePurificationEfficiency"); + this.nodeIncrease = aNBT.getInteger("nodeIncrease"); + + this.mOutputAspects.aspects.clear(); + NBTTagList tlist = aNBT.getTagList("Aspects", 10); + for (int j = 0; j < tlist.tagCount(); ++j) { + NBTTagCompound rs = tlist.getCompoundTagAt(j); + if (rs.hasKey("key")) + this.mOutputAspects.add(Aspect.getAspect(rs.getString("key")), rs.getInteger("amount")); + } + super.loadNBTData(aNBT); + } + + @Override + protected void addClassicOutputs_EM() { + super.addClassicOutputs_EM(); + fillEssentiaOutputHatch(); + } + + @Override + public void stopMachine() { + super.stopMachine(); + this.mOutputAspects.aspects.clear(); + } + + private void drainNodePower(World world, int x, int y, int z) { + int power = this.expectedPower(); + if (this.nodePower < power * 10) { + this.nodePower += VisNetHandler.drainVis(world, x, y, z, Aspect.WATER, power); + this.nodePower += VisNetHandler.drainVis(world, x, y, z, Aspect.FIRE, power); + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aTick % 5 == 0 && this.mMachine) { + final World WORLD = this.getBaseMetaTileEntity() + .getWorld(); + int x = this.getBaseMetaTileEntity() + .getXCoord(); + int y = this.getBaseMetaTileEntity() + .getYCoord(); + int z = this.getBaseMetaTileEntity() + .getZCoord(); + + this.drainNodePower(WORLD, x, y, z); + + this.nodePurificationEfficiency = Math.max(0, this.nodePurificationEfficiency - 1); + if (this.nodePurificationEfficiency < 100) { + this.nodePurificationEfficiency = (int) Math.min( + 100, + this.nodePurificationEfficiency + + Math.ceil(VisNetHandler.drainVis(WORLD, x, y, z, Aspect.ORDER, 200) * 0.05)); + } + + this.nodeIncrease = Math.min(100, VisNetHandler.drainVis(WORLD, x, y, z, Aspect.ENTROPY, 125)); + } + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + this.nodePurificationEfficiency = Math.max(0, this.nodePurificationEfficiency - 1); + if (xstr.nextInt(20) == 0) { + if (xstr.nextInt(100) < Math.max(100 - this.nodePurificationEfficiency, 0)) { + final World WORLD = this.getBaseMetaTileEntity() + .getWorld(); + GT_MetaTileEntity_Hatch_Muffler mufflerHatch = this.mMufflerHatches + .get(xstr.nextInt(this.mMufflerHatches.size())); + int x = mufflerHatch.getBaseMetaTileEntity() + .getXCoord(); + int y = mufflerHatch.getBaseMetaTileEntity() + .getYCoord(); + int z = mufflerHatch.getBaseMetaTileEntity() + .getZCoord(); + + ForgeDirection facing = mufflerHatch.getBaseMetaTileEntity() + .getFrontFacing(); + switch (facing) { + case SOUTH: + z += 1; + break; + case NORTH: + z -= 1; + break; + case WEST: + x -= 1; + break; + case EAST: + x += 1; + break; + default: + y += 1; + } + generateFluxGas(WORLD, x, y, z); + } + } + return super.onRunningTick(aStack); + } + + @Override + public boolean isCorrectMachinePart(ItemStack itemStack) { + return true; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return 22 * (100 - this.nodePurificationEfficiency); + } + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack itemStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack itemStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new LargeEssentiaSmeltery(this.mName); + } + + @Override + protected void maintenance_EM() { + super.maintenance_EM(); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int built = survivialBuildPiece(STRUCTURE_PIECE_FIRST, stackSize, 2, 2, 0, elementBudget, env, false, true); + if (built >= 0) return built; + int length = stackSize.stackSize + 2; + if (length > MAX_CONFIGURABLE_LENGTH) length = MAX_CONFIGURABLE_LENGTH + 2; + for (int i = 1; i <= length; i++) { + built = survivialBuildPiece(STRUCTURE_PIECE_LATER, stackSize, 2, 2, -i, elementBudget, env, false, true); + if (built >= 0) return built; + } + return survivialBuildPiece(STRUCTURE_PIECE_LAST, stackSize, 2, 2, -length - 1, elementBudget, env, false, true); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer1.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer1.java new file mode 100644 index 0000000000..cad1cb001c --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer1.java @@ -0,0 +1,170 @@ +package goodgenerator.blocks.tileEntity; + +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1_GLOW; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; + +import goodgenerator.blocks.tileEntity.base.LargeFusionComputer; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTech_API; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Utility; + +public class LargeFusionComputer1 extends LargeFusionComputer { + + private static final ITexture textureOverlay = TextureFactory.of( + TextureFactory.builder() + .addIcon(OVERLAY_FUSION1) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION1_GLOW) + .extFacing() + .glow() + .build()); + + public LargeFusionComputer1(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + public LargeFusionComputer1(String name) { + super(name); + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Fusion Reactor") + .addInfo("Millions of nuclear.") + .addInfo("Controller block for the Compact Fusion Reactor MK-I Prototype.") + .addInfo( + EnumChatFormatting.AQUA + GT_Utility.formatNumbers(getSingleHatchPower()) + + EnumChatFormatting.GRAY + + " EU/t and " + + EnumChatFormatting.AQUA + + GT_Utility.formatNumbers(capableStartupCanonical() / 32 / M) + + "M" + + EnumChatFormatting.GRAY + + " EU capacity per Energy Hatch") + .addInfo("If the recipe has a startup cost greater than the") + .addInfo("number of energy hatches * cap, you can't do it") + .addInfo( + "If the recipe requires a voltage tier over " + GT_Utility.getColoredTierNameFromTier((byte) tier()) + + EnumChatFormatting.GRAY + + " , you can't do it either") + .addInfo("Make sure the whole structure is built in the 3x3") + .addInfo("chunk area of the ring center (not controller).") + .addInfo("It can run 64x recipes at most.") + .addInfo( + "Support" + EnumChatFormatting.BLUE + + " Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " Energy/Laser Hatches!") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addCasingInfo("LuV Machine Casing", 1664) + .addCasingInfo("Ameliorated Superconduct Coil", 560) + .addCasingInfo("Naquadah Alloy Frame Boxes", 128) + .addCasingInfo("Rhodium-Plated Palladium Reinforced Borosilicate Glass Block", 63) + .addEnergyHatch("1-32, Hint block with dot 2", 2) + .addInputHatch("1-16, Hint block with dot 1", 1) + .addOutputHatch("1-16, Hint block with dot 1", 1) + .addStructureInfo("Supports Crafting Input Buffer") + .addStructureInfo( + "ALL Hatches must be " + GT_Utility.getColoredTierNameFromTier((byte) hatchTier()) + + EnumChatFormatting.GRAY + + " or better") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public int tier() { + return 6; + } + + @Override + public long capableStartupCanonical() { + return 160_000_000; + } + + @Override + public Block getCasingBlock() { + return GregTech_API.sBlockCasings1; + } + + @Override + public int getCasingMeta() { + return 6; + } + + @Override + public Block getCoilBlock() { + return Loaders.compactFusionCoil; + } + + @Override + public int getCoilMeta() { + return 0; + } + + @Override + public Block getGlassBlock() { + return ItemRegistry.bw_realglas; + } + + @Override + public int getGlassMeta() { + return 3; + } + + @Override + public int hatchTier() { + return 6; + } + + @Override + public Materials getFrameBox() { + return Materials.NaquadahAlloy; + } + + @Override + public int getMaxPara() { + return 64; + } + + @Override + public int extraPara(int startEnergy) { + return 1; + } + + @Override + public ITexture getTextureOverlay() { + return textureOverlay; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("LargeFusion1.hint", 9); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new LargeFusionComputer1(mName); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer2.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer2.java new file mode 100644 index 0000000000..7a72e7842f --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer2.java @@ -0,0 +1,171 @@ +package goodgenerator.blocks.tileEntity; + +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION2; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION2_GLOW; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; + +import goodgenerator.blocks.tileEntity.base.LargeFusionComputer; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTech_API; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Utility; + +public class LargeFusionComputer2 extends LargeFusionComputer { + + private static final ITexture textureOverlay = TextureFactory.of( + TextureFactory.builder() + .addIcon(OVERLAY_FUSION2) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION2_GLOW) + .extFacing() + .glow() + .build()); + + public LargeFusionComputer2(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + public LargeFusionComputer2(String name) { + super(name); + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Fusion Reactor") + .addInfo("Millions of nuclear.") + .addInfo("Controller block for the Compact Fusion Reactor MK-II.") + .addInfo( + EnumChatFormatting.AQUA + GT_Utility.formatNumbers(getSingleHatchPower()) + + EnumChatFormatting.GRAY + + " EU/t and " + + EnumChatFormatting.AQUA + + GT_Utility.formatNumbers(capableStartupCanonical() / 32 / M) + + "M" + + EnumChatFormatting.GRAY + + " EU capacity per Energy Hatch") + .addInfo("If the recipe has a startup cost greater than the") + .addInfo("number of energy hatches * cap, you can't do it") + .addInfo( + "If the recipe requires a voltage tier over " + GT_Utility.getColoredTierNameFromTier((byte) tier()) + + EnumChatFormatting.GRAY + + " , you can't do it either") + .addInfo("Make sure the whole structure is built in the 3x3") + .addInfo("chunk area of the ring center (not controller).") + .addInfo("Startup < 160,000,000 EU: 128x Parallel") + .addInfo("Startup >= 160,000,000 EU: 64x Parallel") + .addInfo( + "Support" + EnumChatFormatting.BLUE + + " Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " Energy/Laser Hatches!") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addCasingInfo("Fusion Machine Casing", 1664) + .addCasingInfo("Compact Fusion Coil", 560) + .addCasingInfo("Duranium Frame Box", 128) + .addCasingInfo("Iridium Reinforced Borosilicate Glass Block", 63) + .addEnergyHatch("1-32, Hint block with dot 2", 2) + .addInputHatch("1-16, Hint block with dot 1", 1) + .addOutputHatch("1-16, Hint block with dot 1", 1) + .addStructureInfo("Supports Crafting Input Buffer") + .addStructureInfo( + "ALL Hatches must be " + GT_Utility.getColoredTierNameFromTier((byte) hatchTier()) + + EnumChatFormatting.GRAY + + " or better") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public int tier() { + return 7; + } + + @Override + public long capableStartupCanonical() { + return 320_000_000; + } + + @Override + public Block getCasingBlock() { + return GregTech_API.sBlockCasings4; + } + + @Override + public int getCasingMeta() { + return 6; + } + + @Override + public Block getCoilBlock() { + return Loaders.compactFusionCoil; + } + + @Override + public int getCoilMeta() { + return 1; + } + + @Override + public Block getGlassBlock() { + return ItemRegistry.bw_realglas; + } + + @Override + public int getGlassMeta() { + return 4; + } + + @Override + public int hatchTier() { + return 7; + } + + @Override + public Materials getFrameBox() { + return Materials.Duranium; + } + + @Override + public int getMaxPara() { + return 64; + } + + @Override + public int extraPara(int startEnergy) { + return startEnergy < 160000000 ? 2 : 1; + } + + @Override + public ITexture getTextureOverlay() { + return textureOverlay; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("LargeFusion2.hint", 9); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new LargeFusionComputer2(mName); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer3.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer3.java new file mode 100644 index 0000000000..4a4f9832d0 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer3.java @@ -0,0 +1,172 @@ +package goodgenerator.blocks.tileEntity; + +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION3; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION3_GLOW; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; + +import goodgenerator.blocks.tileEntity.base.LargeFusionComputer; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTech_API; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Utility; + +public class LargeFusionComputer3 extends LargeFusionComputer { + + private static final ITexture textureOverlay = TextureFactory.of( + TextureFactory.builder() + .addIcon(OVERLAY_FUSION3) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION3_GLOW) + .extFacing() + .glow() + .build()); + + public LargeFusionComputer3(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + public LargeFusionComputer3(String name) { + super(name); + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Fusion Reactor") + .addInfo("Millions of nuclear.") + .addInfo("Controller block for the Compact Fusion Reactor MK-III.") + .addInfo( + EnumChatFormatting.AQUA + GT_Utility.formatNumbers(getSingleHatchPower()) + + EnumChatFormatting.GRAY + + " EU/t and " + + EnumChatFormatting.AQUA + + GT_Utility.formatNumbers(capableStartupCanonical() / 32 / M) + + "M" + + EnumChatFormatting.GRAY + + " EU capacity per Energy Hatch") + .addInfo("If the recipe has a startup cost greater than the") + .addInfo("number of energy hatches * cap, you can't do it") + .addInfo( + "If the recipe requires a voltage tier over " + GT_Utility.getColoredTierNameFromTier((byte) tier()) + + EnumChatFormatting.GRAY + + " , you can't do it either") + .addInfo("Make sure the whole structure is built in the 3x3") + .addInfo("chunk area of the ring center (not controller).") + .addInfo("Startup < 160,000,000 EU: 192x Parallel") + .addInfo("Startup < 320,000,000 EU: 128x Parallel") + .addInfo("Startup >= 320,000,000 EU: 64x Parallel") + .addInfo( + "Support" + EnumChatFormatting.BLUE + + " Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " Energy/Laser Hatches!") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addCasingInfo("Fusion Machine Casing MK II", 1664) + .addCasingInfo("Advanced Compact Fusion Coil", 560) + .addCasingInfo("Neutronium Frame Box", 128) + .addCasingInfo("Osmium Reinforced Borosilicate Glass Block", 63) + .addEnergyHatch("1-32, Hint block with dot 2", 2) + .addInputHatch("1-16, Hint block with dot 1", 1) + .addOutputHatch("1-16, Hint block with dot 1", 1) + .addStructureInfo("Supports Crafting Input Buffer") + .addStructureInfo( + "ALL Hatches must be " + GT_Utility.getColoredTierNameFromTier((byte) hatchTier()) + + EnumChatFormatting.GRAY + + " or better") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public int tier() { + return 8; + } + + @Override + public long capableStartupCanonical() { + return 640_000_000; + } + + @Override + public Block getCasingBlock() { + return GregTech_API.sBlockCasings4; + } + + @Override + public int getCasingMeta() { + return 8; + } + + @Override + public Block getCoilBlock() { + return Loaders.compactFusionCoil; + } + + @Override + public int getCoilMeta() { + return 2; + } + + @Override + public Block getGlassBlock() { + return ItemRegistry.bw_realglas; + } + + @Override + public int getGlassMeta() { + return 5; + } + + @Override + public int hatchTier() { + return 8; + } + + @Override + public Materials getFrameBox() { + return Materials.Neutronium; + } + + @Override + public int getMaxPara() { + return 64; + } + + @Override + public int extraPara(int startEnergy) { + return (startEnergy < 160000000 ? 3 : (startEnergy < 320000000 ? 2 : 1)); + } + + @Override + public ITexture getTextureOverlay() { + return textureOverlay; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("LargeFusion3.hint", 9); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new LargeFusionComputer3(mName); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer4.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer4.java new file mode 100644 index 0000000000..96a9662475 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer4.java @@ -0,0 +1,227 @@ +package goodgenerator.blocks.tileEntity; + +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; + +import goodgenerator.blocks.tileEntity.base.LargeFusionComputerPP; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TAE; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Utility; +import gregtech.common.tileentities.machines.IDualInputHatch; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class LargeFusionComputer4 extends LargeFusionComputerPP { + + public LargeFusionComputer4(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + public LargeFusionComputer4(String name) { + super(name); + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Fusion Reactor") + .addInfo("Galaxy Collapse.") + .addInfo("Controller block for the Compact Fusion Reactor MK-IV Prototype.") + .addInfo( + EnumChatFormatting.AQUA + GT_Utility.formatNumbers(getSingleHatchPower()) + + EnumChatFormatting.GRAY + + " EU/t and " + + EnumChatFormatting.AQUA + + GT_Utility.formatNumbers(capableStartupCanonical() / 32 / M) + + "M" + + EnumChatFormatting.GRAY + + " EU capacity per Energy Hatch") + .addInfo("If the recipe has a startup cost greater than the") + .addInfo("number of energy hatches * cap, you can't do it") + .addInfo( + "If the recipe requires a voltage tier over " + GT_Utility.getColoredTierNameFromTier((byte) tier()) + + EnumChatFormatting.GRAY + + " , you can't do it either") + .addInfo("Make sure the whole structure is built in the 3x3") + .addInfo("chunk area of the ring center (not controller).") + .addInfo("Performs 4/4 overclock.") + .addInfo("Startup < 160,000,000 EU: 256x Parallel") + .addInfo("Startup < 320,000,000 EU: 192x Parallel") + .addInfo("Startup < 640,000,000 EU: 128x Parallel") + .addInfo("Startup >= 640,000,000 EU: 64x Parallel") + .addInfo( + "Support" + EnumChatFormatting.BLUE + + " Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " Energy/Laser Hatches!") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addCasingInfo("Fusion Machine Casing MK III", 1664) + .addCasingInfo("Compact Fusion Coil MK-II Prototype", 560) + .addCasingInfo("Infinity Catalyst Frame Box", 128) + .addCasingInfo("Neutronium Reinforced Borosilicate Glass Block", 63) + .addEnergyHatch("1-32, Hint block with dot 2", 2) + .addInputHatch("1-16, Hint block with dot 1", 1) + .addOutputHatch("1-16, Hint block with dot 1", 1) + .addStructureInfo("Supports Crafting Input Buffer") + .addStructureInfo( + "ALL Hatches must be " + GT_Utility.getColoredTierNameFromTier((byte) hatchTier()) + + EnumChatFormatting.GRAY + + " or better") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public int tier() { + return 9; + } + + @Override + public long capableStartupCanonical() { + return 5_120_000_000L; + } + + @Override + public Block getCasingBlock() { + return ModBlocks.blockCasings3Misc; + } + + @Override + public int getCasingMeta() { + return 12; + } + + @Override + public Block getCoilBlock() { + return Loaders.compactFusionCoil; + } + + @Override + public int getCoilMeta() { + return 3; + } + + @Override + public Block getGlassBlock() { + return ItemRegistry.bw_realglas; + } + + @Override + public int getGlassMeta() { + return 13; + } + + @Override + public int hatchTier() { + return 9; + } + + @Override + public Materials getFrameBox() { + return Materials.InfinityCatalyst; + } + + @Override + public ITexture getTextureOverlay() { + if (this.mMaxProgresstime > 0) return TextureFactory.of( + TextureFactory.builder() + .addIcon(TexturesGtBlock.Casing_Machine_Screen_3) + .extFacing() + .build()); + else return TextureFactory.of( + TextureFactory.builder() + .addIcon(TexturesGtBlock.Casing_Machine_Screen_1) + .extFacing() + .build()); + } + + @Override + public int getMaxPara() { + return 64; + } + + @Override + public int extraPara(int startEnergy) { + if (startEnergy < 160000000) return 4; + if (startEnergy < 320000000) return 3; + if (startEnergy < 640000000) return 2; + return 1; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("LargeFusion4.hint", 9); + } + + @Override + public boolean turnCasingActive(boolean status) { + if (this.mEnergyHatches != null) { + for (GT_MetaTileEntity_Hatch_Energy hatch : this.mEnergyHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53); + } + } + if (this.eEnergyMulti != null) { + for (GT_MetaTileEntity_Hatch_EnergyMulti hatch : this.eEnergyMulti) { + hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53); + } + } + if (this.mOutputHatches != null) { + for (GT_MetaTileEntity_Hatch_Output hatch : this.mOutputHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53); + } + } + if (this.mInputHatches != null) { + for (GT_MetaTileEntity_Hatch_Input hatch : this.mInputHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53); + } + } + if (this.mDualInputHatches != null) { + for (IDualInputHatch hatch : this.mDualInputHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53); + } + } + return true; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS) + .extFacing() + .build(), getTextureOverlay() }; + if (!aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(52) }; + return new ITexture[] { TextureFactory.builder() + .addIcon(TexturesGtBlock.TEXTURE_CASING_FUSION_CASING_ULTRA) + .extFacing() + .build() }; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new LargeFusionComputer4(mName); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer5.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer5.java new file mode 100644 index 0000000000..aa4766a01a --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer5.java @@ -0,0 +1,231 @@ +package goodgenerator.blocks.tileEntity; + +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; + +import goodgenerator.blocks.tileEntity.base.LargeFusionComputerPP; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TAE; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Utility; +import gregtech.common.tileentities.machines.IDualInputHatch; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class LargeFusionComputer5 extends LargeFusionComputerPP { + + public LargeFusionComputer5(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + public LargeFusionComputer5(String name) { + super(name); + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Fusion Reactor") + .addInfo("Galaxy Collapse.") + .addInfo("Controller block for the Compact Fusion Reactor MK-V.") + .addInfo( + EnumChatFormatting.AQUA + GT_Utility.formatNumbers(getSingleHatchPower()) + + EnumChatFormatting.GRAY + + " EU/t and " + + EnumChatFormatting.AQUA + + GT_Utility.formatNumbers(capableStartupCanonical() / 32 / M) + + "M" + + EnumChatFormatting.GRAY + + " EU capacity per Energy Hatch") + .addInfo("If the recipe has a startup cost greater than the") + .addInfo("number of energy hatches * cap, you can't do it") + .addInfo( + "If the recipe requires a voltage tier over " + GT_Utility.getColoredTierNameFromTier((byte) tier()) + + EnumChatFormatting.GRAY + + " , you can't do it either") + .addInfo("Make sure the whole structure is built in the 3x3") + .addInfo("chunk area of the ring center (not controller).") + .addInfo("Performs 4/4 overclock.") + .addInfo("Startup < 160,000,000 EU: 320x Parallel") + .addInfo("Startup < 320,000,000 EU: 256x Parallel") + .addInfo("Startup < 640,000,000 EU: 192x Parallel") + .addInfo("Startup < 1,200,000,000 EU: 128x Parallel") + .addInfo("Startup >= 1,200,000,000 EU: 64x Parallel") + .addInfo( + "Support" + EnumChatFormatting.BLUE + + " Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " Energy/Laser Hatches!") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addCasingInfo("Fusion Machine Casing MK IV", 1664) + .addCasingInfo("Compact Fusion Coil MK-II Finaltype", 560) + .addCasingInfo("Infinity Frame Box", 128) + .addCasingInfo("Cosmic Neutronium Reinforced Borosilicate Glass Block", 63) + .addEnergyHatch("1-32, Hint block with dot 2", 2) + .addInputHatch("1-16, Hint block with dot 1", 1) + .addOutputHatch("1-16, Hint block with dot 1", 1) + .addStructureInfo("Supports Crafting Input Buffer") + .addStructureInfo( + "ALL Hatches must be " + GT_Utility.getColoredTierNameFromTier((byte) hatchTier()) + + EnumChatFormatting.GRAY + + " or better") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public int tier() { + return 10; + } + + @Override + public long capableStartupCanonical() { + return 20_480_000_000L; + } + + @Override + public Block getCasingBlock() { + return ModBlocks.blockCasings6Misc; + } + + @Override + public int getCasingMeta() { + return 0; + } + + @Override + public Block getCoilBlock() { + return Loaders.compactFusionCoil; + } + + @Override + public int getCoilMeta() { + return 4; + } + + @Override + public Block getGlassBlock() { + return ItemRegistry.bw_realglas; + } + + @Override + public int getGlassMeta() { + return 14; + } + + @Override + public int hatchTier() { + return 10; + } + + @Override + public Materials getFrameBox() { + return Materials.Infinity; + } + + @Override + public ITexture getTextureOverlay() { + if (this.getBaseMetaTileEntity() + .isActive()) + return TextureFactory.of( + TextureFactory.builder() + .addIcon(TexturesGtBlock.Casing_Machine_Screen_Rainbow) + .extFacing() + .build()); + else return TextureFactory.of( + TextureFactory.builder() + .addIcon(TexturesGtBlock.Casing_Machine_Screen_1) + .extFacing() + .build()); + } + + @Override + public int getMaxPara() { + return 64; + } + + @Override + public int extraPara(int startEnergy) { + if (startEnergy < 160000000) return 5; + if (startEnergy < 320000000) return 4; + if (startEnergy < 640000000) return 3; + if (startEnergy < 1200000000) return 2; + return 1; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("LargeFusion5.hint", 9); + } + + @Override + public boolean turnCasingActive(boolean status) { + if (this.mEnergyHatches != null) { + for (GT_MetaTileEntity_Hatch_Energy hatch : this.mEnergyHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(3, 6) : 53); + } + } + if (this.eEnergyMulti != null) { + for (GT_MetaTileEntity_Hatch_EnergyMulti hatch : this.eEnergyMulti) { + hatch.updateTexture(status ? TAE.getIndexFromPage(3, 6) : 53); + } + } + if (this.mOutputHatches != null) { + for (GT_MetaTileEntity_Hatch_Output hatch : this.mOutputHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(3, 6) : 53); + } + } + if (this.mInputHatches != null) { + for (GT_MetaTileEntity_Hatch_Input hatch : this.mInputHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(3, 6) : 53); + } + } + if (this.mDualInputHatches != null) { + for (IDualInputHatch hatch : this.mDualInputHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(3, 6) : 53); + } + } + return true; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS) + .extFacing() + .build(), getTextureOverlay() }; + if (!aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(52) }; + return new ITexture[] { TextureFactory.builder() + .addIcon(TexturesGtBlock.TEXTURE_CASING_FUSION_CASING_HYPER) + .extFacing() + .build() }; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new LargeFusionComputer5(mName); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/MultiNqGenerator.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/MultiNqGenerator.java new file mode 100644 index 0000000000..cd53c48974 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/MultiNqGenerator.java @@ -0,0 +1,471 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.main.GG_Config_Loader.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.github.bartimaeusnek.bartworks.util.Pair; +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; +import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; +import goodgenerator.items.MyMaterial; +import goodgenerator.loader.Loaders; +import goodgenerator.util.CrackRecipeAdder; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTech_API; +import gregtech.api.enums.GT_HatchElement; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; +import gregtech.api.objects.GT_RenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GT_Utility; + +public class MultiNqGenerator extends GT_MetaTileEntity_TooltipMultiBlockBase_EM + implements IConstructable, ISurvivalConstructable { + + protected IStructureDefinition<MultiNqGenerator> multiDefinition = null; + protected long leftEnergy = 0; + protected long trueOutput = 0; + protected int trueEff = 0; + protected FluidStack lockedFluid = null; + protected int times = 1; + protected int basicOutput; + + private static final List<Pair<FluidStack, Integer>> excitedLiquid; + + private static final List<Pair<FluidStack, Integer>> coolant; + + static { + excitedLiquid = Arrays.asList( + new Pair<>(MaterialsUEVplus.Space.getMolten(20L), ExcitedLiquidCoe[0]), + new Pair<>(MyMaterial.atomicSeparationCatalyst.getMolten(20), ExcitedLiquidCoe[1]), + new Pair<>(Materials.Naquadah.getMolten(20L), ExcitedLiquidCoe[2]), + new Pair<>(Materials.Uranium235.getMolten(180L), ExcitedLiquidCoe[3]), + new Pair<>(Materials.Caesium.getMolten(180L), ExcitedLiquidCoe[4])); + coolant = Arrays.asList( + new Pair<>(MaterialsUEVplus.Time.getMolten(20L), CoolantEfficiency[0]), + new Pair<>(FluidRegistry.getFluidStack("cryotheum", 1000), CoolantEfficiency[1]), + new Pair<>(Materials.SuperCoolant.getFluid(1000L), CoolantEfficiency[2]), + new Pair<>(FluidRegistry.getFluidStack("ic2coolant", 1000), CoolantEfficiency[3])); + } + + @Override + public void construct(ItemStack itemStack, boolean hintsOnly) { + structureBuild_EM(mName, 3, 7, 0, itemStack, hintsOnly); + } + + @Override + public String[] getStructureDescription(ItemStack itemStack) { + return DescTextLocalization.addText("MultiNqGenerator.hint", 8); + } + + public final boolean addToGeneratorList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } else { + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { + return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); + } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { + return this.mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); + } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { + return this.mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity); + } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { + return this.mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); + } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DynamoMulti) { + return this.eDynamoMulti.add((GT_MetaTileEntity_Hatch_DynamoMulti) aMetaTileEntity); + } else { + return false; + } + } + } + } + + @Override + public IStructureDefinition<MultiNqGenerator> getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.<MultiNqGenerator>builder() + .addShape( + mName, + transpose( + new String[][] { + { "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA" }, + { "N N", " ", " CCC ", " CPC ", " CCC ", " ", "N N" }, + { "N N", " ", " CCC ", " CPC ", " CCC ", " ", "N N" }, + { "N N", " ", " CCC ", " CPC ", " CCC ", " ", "N N" }, + { "N N", " ", " CCC ", " CPC ", " CCC ", " ", "N N" }, + { "AAAAAAA", "A A", "A CCC A", "A CPC A", "A CCC A", "A A", "AAAAAAA" }, + { "ANNNNNA", "N N", "N CCC N", "N CPC N", "N CCC N", "N N", "ANNNNNA" }, + { "XXX~XXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX" }, })) + .addElement( + 'X', + ofChain( + buildHatchAdder(MultiNqGenerator.class) + .atLeast( + HatchElement.DynamoMulti.or(GT_HatchElement.Dynamo), + GT_HatchElement.InputHatch, + GT_HatchElement.OutputHatch, + GT_HatchElement.Maintenance) + .casingIndex(44) + .dot(1) + .build(), + ofBlock(GregTech_API.sBlockCasings3, 12))) + .addElement('A', ofBlock(GregTech_API.sBlockCasings3, 12)) + .addElement('N', ofBlock(Loaders.radiationProtectionSteelFrame, 0)) + .addElement('C', ofBlock(Loaders.MAR_Casing, 0)) + .addElement('P', ofBlock(GregTech_API.sBlockCasings2, 15)) + .build(); + } + return multiDefinition; + } + + public MultiNqGenerator(String name) { + super(name); + } + + public MultiNqGenerator(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.times = aNBT.getInteger("mTimes"); + this.leftEnergy = aNBT.getLong("mLeftEnergy"); + this.basicOutput = aNBT.getInteger("mbasicOutput"); + if (FluidRegistry.getFluid(aNBT.getString("mLockedFluidName")) != null) this.lockedFluid = new FluidStack( + FluidRegistry.getFluid(aNBT.getString("mLockedFluidName")), + aNBT.getInteger("mLockedFluidAmount")); + else this.lockedFluid = null; + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mTimes", this.times); + aNBT.setLong("mLeftEnergy", this.leftEnergy); + aNBT.setInteger("mbasicOutput", this.basicOutput); + if (lockedFluid != null) { + aNBT.setString( + "mLockedFluidName", + this.lockedFluid.getFluid() + .getName()); + aNBT.setInteger("mLockedFluidAmount", this.lockedFluid.amount); + } + super.saveNBTData(aNBT); + } + + @Override + public RecipeMap<?> getRecipeMap() { + return GoodGeneratorRecipeMaps.naquadahReactorFuels; + } + + @Override + protected boolean filtersFluid() { + return false; + } + + @Override + public @NotNull CheckRecipeResult checkProcessing_EM() { + + ArrayList<FluidStack> tFluids = getStoredFluids(); + for (int i = 0; i < tFluids.size() - 1; i++) { + for (int j = i + 1; j < tFluids.size(); j++) { + if (GT_Utility.areFluidsEqual(tFluids.get(i), tFluids.get(j))) { + if ((tFluids.get(i)).amount >= (tFluids.get(j)).amount) { + tFluids.remove(j--); + } else { + tFluids.remove(i--); + break; + } + } + } + } + + GT_Recipe tRecipe = GoodGeneratorRecipeMaps.naquadahReactorFuels + .findRecipe(this.getBaseMetaTileEntity(), true, 1 << 30, tFluids.toArray(new FluidStack[0])); + if (tRecipe != null) { + Pair<FluidStack, Integer> excitedInfo = getExcited(tFluids.toArray(new FluidStack[0]), false); + int pall = excitedInfo == null ? 1 : excitedInfo.getValue(); + if (consumeFuel( + CrackRecipeAdder.copyFluidWithAmount(tRecipe.mFluidInputs[0], pall), + tFluids.toArray(new FluidStack[0]))) { + mOutputFluids = new FluidStack[] { + CrackRecipeAdder.copyFluidWithAmount(tRecipe.mFluidOutputs[0], pall) }; + basicOutput = tRecipe.mSpecialValue; + times = pall; + lockedFluid = excitedInfo == null ? null : excitedInfo.getKey(); + mMaxProgresstime = tRecipe.mDuration; + return CheckRecipeResultRegistry.GENERATING; + } + } + + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + @Override + public boolean onRunningTick(ItemStack stack) { + if (this.getBaseMetaTileEntity() + .isServerSide()) { + if (mMaxProgresstime != 0 && mProgresstime % 20 == 0) { + // If there's no startRecipeProcessing, ME input hatch wouldn't work + startRecipeProcessing(); + FluidStack[] input = getStoredFluids().toArray(new FluidStack[0]); + int time = 1; + if (LiquidAirConsumptionPerSecond != 0 + && !consumeFuel(Materials.LiquidAir.getFluid(LiquidAirConsumptionPerSecond), input)) { + this.mEUt = 0; + this.trueEff = 0; + this.trueOutput = 0; + endRecipeProcessing(); + return true; + } + int eff = consumeCoolant(input); + if (consumeFuel(lockedFluid, input)) time = times; + this.mEUt = basicOutput * eff * time / 100; + this.trueEff = eff; + this.trueOutput = (long) basicOutput * (long) eff * (long) time / 100; + endRecipeProcessing(); + } + addAutoEnergy(trueOutput); + } + return true; + } + + @Override + public String[] getInfoData() { + String[] info = super.getInfoData(); + info[4] = "Probably makes: " + EnumChatFormatting.RED + + GT_Utility.formatNumbers(Math.abs(this.trueOutput)) + + EnumChatFormatting.RESET + + " EU/t"; + info[6] = "Problems: " + EnumChatFormatting.RED + + (this.getIdealStatus() - this.getRepairStatus()) + + EnumChatFormatting.RESET + + " Efficiency: " + + EnumChatFormatting.YELLOW + + trueEff + + EnumChatFormatting.RESET + + " %"; + return info; + } + + public boolean consumeFuel(FluidStack target, FluidStack[] input) { + if (target == null) return false; + for (FluidStack inFluid : input) { + if (inFluid != null && inFluid.isFluidEqual(target) && inFluid.amount >= target.amount) { + inFluid.amount -= target.amount; + return true; + } + } + return false; + } + + public Pair<FluidStack, Integer> getExcited(FluidStack[] input, boolean isConsume) { + for (Pair<FluidStack, Integer> fluidPair : excitedLiquid) { + FluidStack tFluid = fluidPair.getKey(); + for (FluidStack inFluid : input) { + if (inFluid != null && inFluid.isFluidEqual(tFluid) && inFluid.amount >= tFluid.amount) { + if (isConsume) inFluid.amount -= tFluid.amount; + return fluidPair; + } + } + } + return null; + } + + /** + * Finds valid coolant from given inputs and consumes if found. + * + * @param input Fluid inputs. + * @return Efficiency of the coolant. 100 if not found. + */ + private int consumeCoolant(FluidStack[] input) { + for (Pair<FluidStack, Integer> fluidPair : coolant) { + FluidStack tFluid = fluidPair.getKey(); + for (FluidStack inFluid : input) { + if (inFluid != null && inFluid.isFluidEqual(tFluid) && inFluid.amount >= tFluid.amount) { + inFluid.amount -= tFluid.amount; + return fluidPair.getValue(); + } + } + } + return 100; + } + + public void addAutoEnergy(long outputPower) { + if (this.eDynamoMulti.size() > 0) for (GT_MetaTileEntity_Hatch tHatch : this.eDynamoMulti) { + long voltage = tHatch.maxEUOutput(); + long power = voltage * tHatch.maxAmperesOut(); + long outputAmperes; + if (outputPower > power) doExplosion(8 * GT_Utility.getTier(power)); + if (outputPower >= voltage) { + leftEnergy += outputPower; + outputAmperes = leftEnergy / voltage; + leftEnergy -= outputAmperes * voltage; + addEnergyOutput_EM(voltage, outputAmperes); + } else { + addEnergyOutput_EM(outputPower, 1); + } + } + if (this.mDynamoHatches.size() > 0) for (GT_MetaTileEntity_Hatch tHatch : this.mDynamoHatches) { + long voltage = tHatch.maxEUOutput(); + long power = voltage * tHatch.maxAmperesOut(); + long outputAmperes; + if (outputPower > power) doExplosion(8 * GT_Utility.getTier(power)); + if (outputPower >= voltage) { + leftEnergy += outputPower; + outputAmperes = leftEnergy / voltage; + leftEnergy -= outputAmperes * voltage; + addEnergyOutput_EM(voltage, outputAmperes); + } else { + addEnergyOutput_EM(outputPower, 1); + } + } + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + return structureCheck_EM(mName, 3, 7, 0) && mMaintenanceHatches.size() == 1 + && mDynamoHatches.size() + eDynamoMulti.size() == 1; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 0; + } + + @Override + public int getPollutionPerTick(ItemStack aStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MultiNqGenerator(this.mName); + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Naquadah Reactor") + .addInfo("Controller block for the Naquadah Reactor") + .addInfo("Environmentally Friendly!") + .addInfo("Generate power from high-energy liquids.") + .addInfo( + String.format( + "Consumes %d L/s Liquid Air to keep running, otherwise" + EnumChatFormatting.YELLOW + + " it will void your fuel" + + EnumChatFormatting.GRAY + + ".", + LiquidAirConsumptionPerSecond)) + .addInfo("Input liquid nuclear fuel or liquid naquadah fuel.") + .addInfo( + "The reactor will explode when there is more than" + EnumChatFormatting.RED + + " ONE" + + EnumChatFormatting.GRAY + + " type of fuel in hatches!") + .addInfo("Can consume 1000L/s of coolant to increase efficiency:") + .addInfo( + String.format( + "IC2 Coolant %d%%, Super Coolant %d%%, Cryotheum %d%%, Tachyon Rich Temporal Fluid %d%%", + CoolantEfficiency[3], + CoolantEfficiency[2], + CoolantEfficiency[1], + CoolantEfficiency[0])) + .addInfo("Can consume excited liquid to increase the output power and fuel usage:") + .addInfo(String.format("Molten Caesium | %dx power | 180 L/s ", ExcitedLiquidCoe[4])) + .addInfo(String.format("Molten Uranium-235 | %dx power | 180 L/s", ExcitedLiquidCoe[3])) + .addInfo(String.format("Molten Naquadah | %dx power | 20 L/s", ExcitedLiquidCoe[2])) + .addInfo(String.format("Molten Atomic Separation Catalyst | %dx power | 20 L/s", ExcitedLiquidCoe[1])) + .addInfo(String.format("Spatially Enlarged Fluid | %dx power | 20 L/s", ExcitedLiquidCoe[0])) + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .beginStructureBlock(7, 8, 7, true) + .addController("Front bottom") + .addDynamoHatch("Any bottom layer casing, only accept ONE!") + .addInputHatch("Any bottom layer casing") + .addOutputHatch("Any bottom layer casing") + .addMaintenanceHatch("Any bottom layer casing") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + @SuppressWarnings("ALL") + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(44), + new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE), + TextureFactory.builder() + .addIcon(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE_GLOW) + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(44), + new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT) }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(44) }; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 3, 7, 0, elementBudget, env, false, true); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/NeutronActivator.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/NeutronActivator.java new file mode 100644 index 0000000000..f3a4fd7d3c --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/NeutronActivator.java @@ -0,0 +1,515 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; +import static gregtech.api.util.GT_StructureUtility.ofFrame; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; +import goodgenerator.blocks.tileEntity.GTMetaTileEntity.NeutronAccelerator; +import goodgenerator.blocks.tileEntity.GTMetaTileEntity.NeutronSensor; +import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import goodgenerator.util.ItemRefer; +import gregtech.api.GregTech_API; +import gregtech.api.enums.GT_HatchElement; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; +import gregtech.api.multitileentity.multiblock.casing.Glasses; +import gregtech.api.objects.XSTR; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_OverclockCalculator; +import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GT_Utility; +import gregtech.api.util.IGT_HatchAdder; + +public class NeutronActivator extends GT_MetaTileEntity_TooltipMultiBlockBase_EM + implements IConstructable, ISurvivalConstructable { + + protected static IStructureDefinition<NeutronActivator> multiDefinition = null; + protected final ArrayList<NeutronAccelerator> mNeutronAccelerator = new ArrayList<>(); + protected final ArrayList<NeutronSensor> mNeutronSensor = new ArrayList<>(); + protected int casingAmount = 0; + protected int height = 0; + protected int eV = 0, mCeil = 0, mFloor = 0; + private GT_Recipe lastRecipe; + protected static final NumberFormatMUI numberFormat; + static { + numberFormat = new NumberFormatMUI(); + numberFormat.setMinimumFractionDigits(2); + numberFormat.setMaximumFractionDigits(2); + } + final XSTR R = new XSTR(); + + private static final IIconContainer textureFontOn = new Textures.BlockIcons.CustomIcon("icons/NeutronActivator_On"); + private static final IIconContainer textureFontOn_Glow = new Textures.BlockIcons.CustomIcon( + "icons/NeutronActivator_On_GLOW"); + private static final IIconContainer textureFontOff = new Textures.BlockIcons.CustomIcon( + "icons/NeutronActivator_Off"); + private static final IIconContainer textureFontOff_Glow = new Textures.BlockIcons.CustomIcon( + "icons/NeutronActivator_Off_GLOW"); + + protected final String NA_BOTTOM = mName + "buttom"; + protected final String NA_MID = mName + "mid"; + protected final String NA_TOP = mName + "top"; + + public NeutronActivator(String name) { + super(name); + } + + public NeutronActivator(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { + return GT_OverclockCalculator.ofNoOverclock(recipe) + .setDuration((int) Math.ceil(recipe.mDuration * Math.pow(0.9f, height - 4))) + .setDurationUnderOneTickSupplier(() -> recipe.mDuration * Math.pow(0.9f, height - 4)); + } + + @NotNull + @Override + public CheckRecipeResult process() { + CheckRecipeResult result = super.process(); + if (!result.wasSuccessful()) { + return result; + } + mFloor = (lastRecipe.mSpecialValue % 10000) * 1000000; + mCeil = (lastRecipe.mSpecialValue / 10000) * 1000000; + if (eV > mCeil || eV < mFloor) { + setOutputItems(ItemRefer.Radioactive_Waste.get(4)); + } + // NA does not consume power, its hatches do. Set it to 0 to be sure + calculatedEut = 0; + return result; + } + }; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + // NA does not use power, to prevent GT_ParallelHelper from failing we trick it into thinking + // we have infinite power + logic.setAvailableVoltage(Long.MAX_VALUE); + logic.setAvailableAmperage(1); + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + batchMode = !batchMode; + if (batchMode) { + GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); + } else { + GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); + } + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack aStack) { + return 0; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + eV = aNBT.getInteger("mKeV"); + mCeil = aNBT.getInteger("mCeil"); + mFloor = aNBT.getInteger("mFloor"); + height = aNBT.getInteger("height"); + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mKeV", eV); + aNBT.setInteger("mCeil", mCeil); + aNBT.setInteger("mFloor", mFloor); + aNBT.setInteger("height", height); + super.saveNBTData(aNBT); + } + + @Override + public RecipeMap<?> getRecipeMap() { + return GoodGeneratorRecipeMaps.neutronActivatorRecipes; + } + + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Neutron Activator") + .addInfo("Controller block for the Neutron Activator") + .addInfo("Superluminal-velocity Motion.") + .addInfo("The minimum height of the Speeding Pipe Casing is 4.") + .addInfo("Per extra Speeding Pipe Casing will give time discount.") + .addInfo("But it will reduce the Neutron Accelerator efficiency.") + .addInfo("You need to input energy to the Neutron Accelerator to get it running.") + .addInfo("It will output correct products with Specific Neutron Kinetic Energy.") + .addInfo("Otherwise it will output trash.") + .addInfo("The Neutron Kinetic Energy will decrease 72KeV/s when no Neutron Accelerator is running.") + .addInfo( + "It will explode when the Neutron Kinetic Energy is over" + EnumChatFormatting.RED + + " 1200MeV" + + EnumChatFormatting.GRAY + + ".") + .addInfo("Inputting Graphite/Beryllium dust can reduce 10MeV per dust immediately.") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addController("Front bottom") + .addInputHatch("Hint block with dot 1") + .addInputBus("Hint block with dot 1") + .addOutputHatch("Hint block with dot 2") + .addOutputBus("Hint block with dot 2") + .addMaintenanceHatch("Hint block with dot 2") + .addOtherStructurePart("Neutron Accelerator", "Hint block with dot 2") + .addOtherStructurePart("Neutron Sensor", "Hint block with dot 2") + .addCasingInfoRange("Clean Stainless Steel Machine Casing", 7, 31, false) + .addCasingInfoExactly("Processor Machine Casing", 18, false) + .addCasingInfoMin("Steel Frame Box", 16, false) + .addCasingInfoMin("Speeding Pipe Casing", 4, false) + .addCasingInfoMin("EV+ Glass", 32, false) + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public IStructureDefinition<NeutronActivator> getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.<NeutronActivator>builder() + .addShape(NA_TOP, transpose(new String[][] { { "CCCCC", "CDDDC", "CDDDC", "CDDDC", "CCCCC" } })) + .addShape(NA_MID, transpose(new String[][] { { "F F", " GGG ", " GPG ", " GGG ", "F F" } })) + .addShape(NA_BOTTOM, transpose(new String[][] { { "XX~XX", "XDDDX", "XDDDX", "XDDDX", "XXXXX" } })) + .addElement( + 'C', + ofChain( + buildHatchAdder(NeutronActivator.class) + .atLeast(GT_HatchElement.InputHatch, GT_HatchElement.InputBus, GT_HatchElement.Maintenance) + .casingIndex(49) + .dot(1) + .build(), + onElementPass(NeutronActivator::onCasingFound, ofBlock(GregTech_API.sBlockCasings4, 1)))) + .addElement('D', ofBlock(GregTech_API.sBlockCasings2, 6)) + .addElement('F', ofFrame(Materials.Steel)) + .addElement('G', Glasses.chainAllGlasses()) + .addElement('P', ofBlock(Loaders.speedingPipe, 0)) + .addElement( + 'X', + ofChain( + buildHatchAdder(NeutronActivator.class) + .atLeast( + GT_HatchElement.OutputHatch, + GT_HatchElement.OutputBus, + GT_HatchElement.Maintenance, + NeutronHatchElement.NeutronAccelerator, + NeutronHatchElement.NeutronSensor) + .casingIndex(49) + .dot(2) + .build(), + onElementPass(NeutronActivator::onCasingFound, ofBlock(GregTech_API.sBlockCasings4, 1)))) + .build(); + } + return multiDefinition; + } + + @Override + protected void clearHatches_EM() { + super.clearHatches_EM(); + this.mNeutronAccelerator.clear(); + this.mNeutronSensor.clear(); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.casingAmount = 0; + if (!structureCheck_EM(NA_BOTTOM, 2, 0, 0)) return false; + height = 0; + while (structureCheck_EM(NA_MID, 2, height + 1, 0)) { + height++; + } + if (height < 4) return false; + return structureCheck_EM(NA_TOP, 2, height + 1, 0) && casingAmount >= 7; + } + + public final boolean addAcceleratorAndSensor(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof NeutronAccelerator) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mNeutronAccelerator.add((NeutronAccelerator) aMetaTileEntity); + } else if (aMetaTileEntity instanceof NeutronSensor) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mNeutronSensor.add((NeutronSensor) aMetaTileEntity); + } + } + return false; + } + + public int maxNeutronKineticEnergy() { + return 1200000000; + } + + public int getCurrentNeutronKineticEnergy() { + return eV; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean protectsExcessItem() { + return !eSafeVoid; + } + + @Override + public boolean protectsExcessFluid() { + return !eSafeVoid; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new NeutronActivator(this.mName); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + boolean anyWorking = false; + if (aBaseMetaTileEntity.isServerSide()) { + if (this.eV > 0 && (aTick % 20 == 0 || eV > mCeil)) { + tryUseModerator(); + } + + for (NeutronAccelerator tHatch : mNeutronAccelerator) { + if (tHatch.getBaseMetaTileEntity() + .isActive() && this.getRepairStatus() == this.getIdealStatus()) { + anyWorking = true; + this.eV += Math.max( + (R.nextInt(tHatch.getMaxEUConsume() + 1) + tHatch.getMaxEUConsume()) * 10 + * Math.pow(0.95, height - 4), + 10); + } + } + if (!anyWorking) { + if (this.eV >= 72000 && aTick % 20 == 0) { + this.eV -= 72000; + } else if (this.eV > 0 && aTick % 20 == 0) { + this.eV = 0; + } + } + if (this.eV < 0) this.eV = 0; + if (this.eV > maxNeutronKineticEnergy()) doExplosion(4 * 32); + + for (NeutronSensor tHatch : mNeutronSensor) { + tHatch.updateRedstoneOutput(this.eV); + } + + if (mProgresstime < mMaxProgresstime && (eV > mCeil || eV < mFloor)) { + this.mOutputFluids = null; + this.mOutputItems = new ItemStack[] { ItemRefer.Radioactive_Waste.get(4) }; + } + } + } + + private void tryUseModerator() { + startRecipeProcessing(); + for (ItemStack input : getStoredInputs()) { + if (input.isItemEqual(Materials.Graphite.getDust(1)) || input.isItemEqual(Materials.Beryllium.getDust(1))) { + int consume = Math.min(this.eV / 10000000, input.stackSize); + depleteInput(GT_Utility.copyAmount(consume, input)); + this.eV -= 10000000 * consume; + } + } + endRecipeProcessing(); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM(NA_BOTTOM, 2, 0, 0, stackSize, hintsOnly); + int heights = stackSize.stackSize + 3; + structureBuild_EM(NA_TOP, 2, heights + 1, 0, stackSize, hintsOnly); + while (heights > 0) { + structureBuild_EM(NA_MID, 2, heights, 0, stackSize, hintsOnly); + heights--; + } + } + + @Override + public String[] getStructureDescription(ItemStack itemStack) { + return DescTextLocalization.addText("NeutronActivator.hint", 7); + } + + @Override + public String[] getInfoData() { + int currentNKEInput = 0; + boolean anyWorking = false; + for (NeutronAccelerator tHatch : mNeutronAccelerator) { + if (tHatch.getBaseMetaTileEntity() + .isActive()) { + currentNKEInput += (R.nextInt(tHatch.getMaxEUConsume() + 1) + tHatch.getMaxEUConsume()) * 10 + * Math.pow(0.95, height - 4); + anyWorking = true; + } + } + if (!anyWorking) currentNKEInput = -72000; + return new String[] { "Progress:", + EnumChatFormatting.GREEN + Integer.toString(this.mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + this.mMaxProgresstime / 20 + + EnumChatFormatting.RESET + + " s", + "Current Neutron Kinetic Energy Input: " + EnumChatFormatting.GREEN + + GT_Utility.formatNumbers(currentNKEInput) + + EnumChatFormatting.RESET + + "eV", + StatCollector.translateToLocal("scanner.info.NA") + " " + + EnumChatFormatting.LIGHT_PURPLE + + GT_Utility.formatNumbers(getCurrentNeutronKineticEnergy()) + + EnumChatFormatting.RESET + + "eV" }; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(49), + TextureFactory.of(textureFontOn), TextureFactory.builder() + .addIcon(textureFontOn_Glow) + .glow() + .build() }; + else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(49), + TextureFactory.of(textureFontOff), TextureFactory.builder() + .addIcon(textureFontOff_Glow) + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(49) }; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + + int built = survivialBuildPiece(NA_BOTTOM, stackSize, 2, 0, 0, elementBudget, env, false, true); + if (built >= 0) return built; + int heights = stackSize.stackSize + 3; + for (int i = 1; i <= heights; i++) { + built = survivialBuildPiece(NA_MID, stackSize, 2, i, 0, elementBudget, env, false, true); + if (built >= 0) return built; + } + return survivialBuildPiece(NA_TOP, stackSize, 2, heights + 1, 0, elementBudget, env, false, true); + } + + protected void onCasingFound() { + casingAmount++; + } + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + + screenElements + .widget( + new TextWidget(StatCollector.translateToLocal("gui.NeutronActivator.0")) + .setDefaultColor(COLOR_TEXT_WHITE.get())) + .widget( + new TextWidget().setStringSupplier(() -> numberFormat.format(eV / 1_000_000d) + " MeV") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) + .widget(new FakeSyncWidget.IntegerSyncer(() -> eV, val -> eV = val)); + } + + private enum NeutronHatchElement implements IHatchElement<NeutronActivator> { + + NeutronSensor(NeutronActivator::addAcceleratorAndSensor, NeutronSensor.class) { + + @Override + public long count(NeutronActivator t) { + return t.mNeutronSensor.size(); + } + }, + NeutronAccelerator(NeutronActivator::addAcceleratorAndSensor, NeutronAccelerator.class) { + + @Override + public long count(NeutronActivator t) { + return t.mNeutronAccelerator.size(); + } + }; + + private final List<Class<? extends IMetaTileEntity>> mteClasses; + private final IGT_HatchAdder<NeutronActivator> adder; + + @SafeVarargs + NeutronHatchElement(IGT_HatchAdder<NeutronActivator> adder, Class<? extends IMetaTileEntity>... mteClasses) { + this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); + this.adder = adder; + } + + @Override + public List<? extends Class<? extends IMetaTileEntity>> mteClasses() { + return mteClasses; + } + + public IGT_HatchAdder<? super NeutronActivator> adder() { + return adder; + } + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/PreciseAssembler.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/PreciseAssembler.java new file mode 100644 index 0000000000..610716fc8a --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/PreciseAssembler.java @@ -0,0 +1,491 @@ +package goodgenerator.blocks.tileEntity; + +import static com.github.bartimaeusnek.bartworks.util.BW_Util.ofGlassTieredMixed; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.GT_HatchElement.*; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GT_StructureUtility.ofFrame; +import static gregtech.api.util.GT_Utility.filterValidMTEs; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureUtility; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; + +import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; +import goodgenerator.client.GUI.GG_UITextures; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTech_API; +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.GregTechTileClientEvents; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_HatchElementBuilder; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_OverclockCalculator; +import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GT_Utility; +import gregtech.common.tileentities.machines.IDualInputHatch; + +public class PreciseAssembler extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase<PreciseAssembler> + implements IConstructable, ISurvivalConstructable { + + private static final IIconContainer textureFontOn = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_QTANK"); + private static final IIconContainer textureFontOn_Glow = new Textures.BlockIcons.CustomIcon( + "iconsets/OVERLAY_QTANK_GLOW"); + private static final IIconContainer textureFontOff = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_QCHEST"); + private static final IIconContainer textureFontOff_Glow = new Textures.BlockIcons.CustomIcon( + "iconsets/OVERLAY_QCHEST_GLOW"); + + protected IStructureDefinition<PreciseAssembler> multiDefinition = null; + protected int casingAmount; + protected int casingTier; + protected int machineTier; + protected int mode; + protected int energyHatchTier; + + public PreciseAssembler(String name) { + super(name); + } + + public PreciseAssembler(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + public IStructureDefinition<PreciseAssembler> getStructureDefinition() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.<PreciseAssembler>builder() + .addShape( + mName, + transpose( + new String[][] { { "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC" }, + { "F F", "CGGGGGGGC", "C-------C", "CGGGGGGGC", "F F" }, + { "F F", "CGGGGGGGC", "C-------C", "CGGGGGGGC", "F F" }, + { "F F", "CGGGGGGGC", "C-------C", "CGGGGGGGC", "F F" }, + { "CCCC~CCCC", "CMMMMMMMC", "CMMMMMMMC", "CMMMMMMMC", "CCCCCCCCC" } })) + .addElement( + 'C', + GT_HatchElementBuilder.<PreciseAssembler>builder() + .atLeast( + InputBus, + InputHatch, + OutputHatch, + OutputBus, + Maintenance, + Muffler, + ExoticEnergy.or(Energy)) + .adder(PreciseAssembler::addToPAssList) + .casingIndex(1539) + .dot(1) + .buildAndChain( + onElementPass( + x -> x.casingAmount++, + StructureUtility.ofBlocksTiered( + (block, meta) -> block == Loaders.preciseUnitCasing ? meta : -2, + IntStream.range(0, 3) + .mapToObj( + meta -> org.apache.commons.lang3.tuple.Pair + .of(Loaders.preciseUnitCasing, meta)) + .collect(Collectors.toList()), + -1, + PreciseAssembler::setCasingTier, + PreciseAssembler::getCasingTier)))) + .addElement('F', ofFrame(Materials.TungstenSteel)) + .addElement('G', ofGlassTieredMixed((byte) 4, (byte) 127, 2)) + .addElement( + 'M', + StructureUtility.ofBlocksTiered( + (block, meta) -> block == GregTech_API.sBlockCasings1 ? meta : -2, + IntStream.range(0, 10) + .mapToObj(meta -> org.apache.commons.lang3.tuple.Pair.of(GregTech_API.sBlockCasings1, meta)) + .collect(Collectors.toList()), + -1, + PreciseAssembler::setMachineTier, + PreciseAssembler::getMachineTier)) + .build(); + } + return multiDefinition; + } + + public boolean addToPAssList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { + return mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); + } + if (aMetaTileEntity instanceof IDualInputHatch) { + return mDualInputHatches.add((IDualInputHatch) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { + return mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { + return mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) { + return mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { + return mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { + return mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) { + return mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti) { + return mExoticEnergyHatches.add((GT_MetaTileEntity_Hatch_EnergyMulti) aMetaTileEntity); + } + return false; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + casingTier = aNBT.getInteger("casingTier"); + machineTier = aNBT.getInteger("machineTier"); + mode = aNBT.getInteger("RunningMode"); + super.loadNBTData(aNBT); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("casingTier", casingTier); + aNBT.setInteger("machineTier", machineTier); + aNBT.setInteger("RunningMode", mode); + super.saveNBTData(aNBT); + } + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (getBaseMetaTileEntity().isServerSide()) { + this.mode = (this.mode + 1) % 2; + GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("preciseassembler.chat." + this.mode)); + } + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { + if (mode == 0) { + if (recipe.mSpecialValue > (casingTier + 1)) { + return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); + } + } + if (availableVoltage < recipe.mEUt) { + return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Nonnull + @Override + protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { + return super.createOverclockCalculator(recipe).setSpeedBoost(mode == 0 ? 1 : 0.5F); + } + }.setMaxParallelSupplier(() -> mode == 0 ? 1 : (int) Math.pow(2, 4 + (casingTier + 1))); + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + boolean useSingleAmp = mEnergyHatches.size() == 1 && mExoticEnergyHatches.isEmpty(); + logic.setAvailableVoltage(getMachineVoltageLimit()); + logic.setAvailableAmperage(useSingleAmp ? 1 : getMaxInputAmps()); + logic.setAmperageOC(true); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + public long getMachineVoltageLimit() { + if (machineTier < 0) return 0; + if (machineTier >= 9) return GT_Values.V[energyHatchTier]; + else return GT_Values.V[Math.min(machineTier, energyHatchTier)]; + } + + @Override + public RecipeMap<?> getRecipeMap() { + if (this.mode == 0) return GoodGeneratorRecipeMaps.preciseAssemblerRecipes; + else return RecipeMaps.assemblerRecipes; + } + + @Nonnull + @Override + public Collection<RecipeMap<?>> getAvailableRecipeMaps() { + return Arrays.asList(GoodGeneratorRecipeMaps.preciseAssemblerRecipes, RecipeMaps.assemblerRecipes); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 4, 4, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 4, 4, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.machineTier = -1; + this.casingAmount = 0; + this.casingTier = -1; + this.energyHatchTier = 0; + if (checkPiece(mName, 4, 4, 0)) { + energyHatchTier = checkEnergyHatchTier(); + if (casingTier >= 0) { + reUpdate(1539 + casingTier); + } + getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, getUpdateData()); + return casingAmount >= 42 && machineTier >= 0 + && casingTier >= 0 + && mMaintenanceHatches.size() == 1 + && !mMufflerHatches.isEmpty(); + } + return false; + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Precise Assembler/Assembler") + .addInfo("Controller block for the Precise Assembler") + .addInfo("The error is no more than 7nm.") + .addInfo("Can assemble precise component in Precise Mode.") + .addInfo("Can work like a normal assembler in Normal Mode.") + .addInfo("Use screwdriver to change mode.") + .addInfo("Machine Casing and Energy Hatch limits the voltage tier the machine can work on.") + .addInfo("UHV Machine Casing will unlock all voltage, but you still need good Energy Hatch.") + .addInfo("Precise Electronic Unit Casing won't limit recipe in Normal Mode.") + .addInfo("But gives more parallel with more advanced one.") + .addInfo("It is 100% faster in Normal Mode.") + .addInfo("MK-I = 32x, MK-II = 64x, MK-III = 128x") + .addPollutionAmount(getPollutionPerSecond(null)) + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .beginStructureBlock(9, 5, 5, true) + .addController("Front bottom") + .addCasingInfoExactly("Machine Casing", 21, true) + .addCasingInfoExactly("Glass (EV+)", 42, false) + .addCasingInfoRange("Precise Electronic Unit Casing", 42, 86, true) + .addInputHatch("Any Casing") + .addInputBus("Any Casing") + .addOutputHatch("Any Casing") + .addOutputBus("Any Casing") + .addEnergyHatch("Any Casing") + .addMufflerHatch("Any Casing") + .addMaintenanceHatch("Any Casing") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return 780; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("PreciseAssembler.hint", 7); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new PreciseAssembler(this.mName); + } + + private int checkEnergyHatchTier() { + int tier = 0; + for (GT_MetaTileEntity_Hatch_Energy tHatch : filterValidMTEs(mEnergyHatches)) { + tier = Math.max(tHatch.mTier, tier); + } + for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(mExoticEnergyHatches)) { + tier = Math.max(tHatch.mTier, tier); + } + return tier; + } + + public int getCasingTier() { + return casingTier; + } + + public void setCasingTier(int i) { + casingTier = i; + } + + public int getMachineTier() { + return machineTier; + } + + public void setMachineTier(int i) { + machineTier = i; + } + + public void reUpdate(int texture) { + for (IDualInputHatch hatch : mDualInputHatches) { + if (((MetaTileEntity) hatch).isValid()) { + hatch.updateTexture(texture); + } + } + for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mInputHatches)) { + hatch.updateTexture(texture); + } + for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mInputBusses)) { + hatch.updateTexture(texture); + } + for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mOutputHatches)) { + hatch.updateTexture(texture); + } + for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mOutputBusses)) { + hatch.updateTexture(texture); + } + for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mEnergyHatches)) { + hatch.updateTexture(texture); + } + for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mMaintenanceHatches)) { + hatch.updateTexture(texture); + } + for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mMufflerHatches)) { + hatch.updateTexture(texture); + } + for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mExoticEnergyHatches)) { + hatch.updateTexture(texture); + } + } + + @Override + public byte getUpdateData() { + return (byte) casingTier; + } + + @Override + public void receiveClientEvent(byte aEventID, byte aValue) { + super.receiveClientEvent(aEventID, aValue); + if (aEventID == GregTechTileClientEvents.CHANGE_CUSTOM_DATA && (aValue & 0x80) == 0) { + casingTier = aValue; + } + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + int t = Math.max(getCasingTier(), 0); + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1539 + t), + TextureFactory.of(textureFontOn), TextureFactory.builder() + .addIcon(textureFontOn_Glow) + .glow() + .build() }; + else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1539 + t), + TextureFactory.of(textureFontOff), TextureFactory.builder() + .addIcon(textureFontOff_Glow) + .glow() + .build() }; + } else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1539 + t) }; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + builder.widget( + new CycleButtonWidget().setToggle(() -> mode == 1, val -> mode = val ? 1 : 0) + .setTextureGetter( + state -> state == 1 ? GG_UITextures.OVERLAY_BUTTON_ASSEMBLER_MODE + : GG_UITextures.OVERLAY_BUTTON_PRECISE_MODE) + .setBackground(GT_UITextures.BUTTON_STANDARD) + .setPos(80, 91) + .setSize(16, 16) + .dynamicTooltip( + () -> Collections.singletonList(StatCollector.translateToLocal("preciseassembler.chat." + mode))) + .setUpdateTooltipEveryTick(true) + .setTooltipShowUpDelay(TOOLTIP_DELAY)); + } + + @Override + public boolean isInputSeparationEnabled() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/SupercriticalFluidTurbine.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/SupercriticalFluidTurbine.java new file mode 100644 index 0000000000..7c8d9ee154 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/SupercriticalFluidTurbine.java @@ -0,0 +1,184 @@ +package goodgenerator.blocks.tileEntity; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_LargeTurbineBase; +import goodgenerator.loader.Loaders; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.objects.XSTR; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Utility; + +public class SupercriticalFluidTurbine extends GT_MetaTileEntity_LargeTurbineBase { + + private boolean looseFit = false; + + private static final IIconContainer turbineOn = new Textures.BlockIcons.CustomIcon("icons/turbines/TURBINE_05"); + private static final IIconContainer turbineOff = new Textures.BlockIcons.CustomIcon("icons/turbines/TURBINE_15"); + private static final IIconContainer turbineEmpty = new Textures.BlockIcons.CustomIcon("icons/turbines/TURBINE_25"); + + public SupercriticalFluidTurbine(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public SupercriticalFluidTurbine(String aName) { + super(aName); + } + + @Override + public int fluidIntoPower(ArrayList<FluidStack> aFluids, int aOptFlow, int aBaseEff) { + if (looseFit) { + aOptFlow *= 4; + double pow = Math.pow(1.1f, ((aBaseEff - 7500) / 10000F) * 20f); + if (aBaseEff > 10000) { + aOptFlow *= pow; + aBaseEff = 7500; + } else if (aBaseEff > 7500) { + aOptFlow *= pow; + aBaseEff *= 0.75f; + } else { + aBaseEff *= 0.75f; + } + } + int tEU = 0; + int totalFlow = 0; // Byproducts are based on actual flow + int flow = 0; + int remainingFlow = GT_Utility.safeInt((long) (aOptFlow * 1.25f)); // Allowed to use up to 125% of optimal flow. + // Variable required outside of loop for + // multi-hatch scenarios. + this.realOptFlow = aOptFlow; + + storedFluid = 0; + FluidStack tSCSteam = FluidRegistry.getFluidStack("supercriticalsteam", 1); + for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { + final FluidStack aFluidStack = aFluids.get(i); + if (tSCSteam.isFluidEqual(aFluidStack)) { + flow = Math.min(aFluidStack.amount, remainingFlow); + depleteInput(new FluidStack(aFluidStack, flow)); + this.storedFluid += aFluidStack.amount; + remainingFlow -= flow; + totalFlow += flow; + } else if (GT_ModHandler.isAnySteam(aFluidStack)) { + depleteInput(new FluidStack(aFluidStack, aFluidStack.amount)); + } + } + if (totalFlow <= 0) return 0; + tEU = totalFlow; + addOutput(GT_ModHandler.getSteam(totalFlow)); + if (totalFlow == aOptFlow) { + tEU = GT_Utility.safeInt((long) tEU * (long) aBaseEff / 100L); + } else { + float efficiency = 1.0f - Math.abs((totalFlow - aOptFlow) / (float) aOptFlow); + tEU *= efficiency; + tEU = Math.max(1, GT_Utility.safeInt((long) tEU * (long) aBaseEff / 100L)); + } + + if (tEU > maxPower) { + tEU = GT_Utility.safeInt(maxPower); + } + + return tEU; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (side == getBaseMetaTileEntity().getFrontFacing()) { + looseFit ^= true; + GT_Utility.sendChatToPlayer( + aPlayer, + looseFit ? trans("500", "Fitting: Loose - More Flow") + : trans("501", "Fitting: Tight - More Efficiency")); + } + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + // 2x more damage than normal turbine + return looseFit ? (XSTR.XSTR_INSTANCE.nextInt(2) == 0 ? 0 : 1) : 2; + } + + @Override + public String[] getInfoData() { + super.looseFit = looseFit; + return super.getInfoData(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("turbineFitting", looseFit); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + looseFit = aNBT.getBoolean("turbineFitting"); + } + + @Override + public Block getCasingBlock() { + return Loaders.supercriticalFluidTurbineCasing; + } + + @Override + public int getCasingMeta() { + return 0; + } + + @Override + public int getCasingTextureIndex() { + return 1538; + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Supercritical Steam Turbine") + .addInfo("Controller block for Supercritical Fluid Turbine") + .addInfo("Needs a Turbine, place inside controller") + .addInfo("Use Supercritical Steam to generate power.") + .addInfo("Outputs Steam as well as producing power") + .addInfo("1L Supercritical Steam = 100 EU") + .addInfo("Extreme Heated Steam will cause more damage to the turbine.") + .addInfo("Power output depends on turbine and fitting") + .addInfo("Use screwdriver to adjust fitting of turbine") + .addSeparator() + .beginStructureBlock(3, 3, 4, true) + .addController("Front center") + .addCasingInfo("SC Turbine Casing", 24) + .addDynamoHatch("Back center", 1) + .addMaintenanceHatch("Side centered", 2) + .addInputHatch("Supercritical Fluid, Side centered", 2) + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new SupercriticalFluidTurbine(mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1538), + facing == side + ? (aActive ? TextureFactory.of(turbineOn) + : hasTurbine() ? TextureFactory.of(turbineOff) : TextureFactory.of(turbineEmpty)) + : Textures.BlockIcons.getCasingTextureForId(1538) }; + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/UniversalChemicalFuelEngine.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/UniversalChemicalFuelEngine.java new file mode 100644 index 0000000000..6c8ce62539 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/UniversalChemicalFuelEngine.java @@ -0,0 +1,393 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Mods.GTPlusPlus; +import static gregtech.api.enums.Textures.BlockIcons.*; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTech_API; +import gregtech.api.enums.GT_HatchElement; +import gregtech.api.enums.TickTime; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.maps.FuelBackend; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GT_Utility; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; + +public class UniversalChemicalFuelEngine extends GT_MetaTileEntity_TooltipMultiBlockBase_EM + implements IConstructable, ISurvivalConstructable { + + protected final double DIESEL_EFFICIENCY_COEFFICIENT = 0.04D; + protected final double GAS_EFFICIENCY_COEFFICIENT = 0.04D; + protected final double ROCKET_EFFICIENCY_COEFFICIENT = 0.005D; + protected final double EFFICIENCY_CEILING = 1.5D; + protected final int HEATING_TIMER = TickTime.SECOND * 10; + + private long tEff; + private int heatingTicks; + private boolean isStoppingSafe; + + private IStructureDefinition<UniversalChemicalFuelEngine> multiDefinition = null; + + public UniversalChemicalFuelEngine(String name) { + super(name); + super.useLongPower = true; + } + + public UniversalChemicalFuelEngine(int id, String name, String nameRegional) { + super(id, name, nameRegional); + super.useLongPower = true; + } + + public final boolean addMaintenance(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); + } + } + return false; + } + + public final boolean addMuffler(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity); + } + } + return false; + } + + public final boolean addInputHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); + } + } + return false; + } + + public final boolean addDynamoHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity); + } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DynamoMulti) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.eDynamoMulti.add((GT_MetaTileEntity_Hatch_DynamoMulti) aMetaTileEntity); + } + } + return false; + } + + @Override + public IStructureDefinition<UniversalChemicalFuelEngine> getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.<UniversalChemicalFuelEngine>builder() + .addShape( + mName, + transpose( + new String[][] { + { "TTTTT", "TTMMT", "TTMMT", "TTMMT", "TTMMT", "TTMMT", "TTMMT", "TTMMT", "TTTTT" }, + { "TTTTT", "SPCCI-", "SPCCI-", "SPCCI-", "SPCCI-", "SPCCI-", "SPCCI-", "SPCCI-", "TTTTT" }, + { "TT~TT", "SPGGI-", "SPGGI-", "SPGGI-", "SPGGI-", "SPGGI-", "SPGGI-", "SPGGI-", "TTETT" }, + { "TTWTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT" } })) + .addElement('T', ofBlock(GregTech_API.sBlockCasings4, 2)) + .addElement('W', GT_HatchElement.Maintenance.newAny(50, 1)) + .addElement('M', GT_HatchElement.Muffler.newAny(50, 2)) + .addElement('S', GT_HatchElement.InputHatch.newAny(50, 3)) + .addElement('E', GT_HatchElement.Dynamo.newAny(50, 4)) + .addElement('P', ofBlock(GregTech_API.sBlockCasings2, 14)) + .addElement('C', ofBlock(Loaders.titaniumPlatedCylinder, 0)) + .addElement('G', ofBlock(GregTech_API.sBlockCasings2, 4)) + .addElement('I', ofBlock(GregTech_API.sBlockCasings4, 13)) + .build(); + } + return multiDefinition; + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + return structureCheck_EM(mName, 2, 2, 0); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM(mName, 2, 2, 0, stackSize, hintsOnly); + } + + @Override + public String[] getStructureDescription(ItemStack itemStack) { + return DescTextLocalization.addText("UniversalChemicalFuelEngine.hint", 11); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getPollutionPerTick(ItemStack aStack) { + return (int) Math.sqrt(this.getPowerFlow()) / 20; + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Chemical Engine") + .addInfo("Controller block for the Chemical Engine") + .addInfo("BURNING BURNING BURNING") + .addInfo("Use combustible liquid to generate power.") + .addInfo("You need to supply Combustion Promoter to keep it running.") + .addInfo("It will consume all the fuel and promoter in the hatch every second.") + .addInfo("If the Dynamo Hatch's buffer fills up, the machine will stop.") + .addInfo("When turned on, there's 10-second period where the machine will not stop.") + .addInfo("Even if it doesn't stop, all the fuel in the hatch will be consumed.") + .addInfo("The efficiency is determined by the proportion of Combustion Promoter to fuel.") + .addInfo("The proportion is bigger, and the efficiency will be higher.") + .addInfo("Start machine with power button to force structure check.") + .addInfo("It creates sqrt(Current Output Power) pollution every second") + .addInfo( + "If you forget to supply Combustion Promoter, this engine will swallow all the fuel " + + EnumChatFormatting.YELLOW + + "without outputting energy" + + EnumChatFormatting.GRAY + + ".") + .addInfo("The efficiency is up to 150%.") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .beginStructureBlock(5, 4, 9, false) + .addMaintenanceHatch("Hint block with dot 1") + .addMufflerHatch("Hint block with dot 2 (fill all slots with mufflers)") + .addInputHatch("Hint block with dot 3 (fill all slots with input hatches)") + .addDynamoHatch("Hint block with dot 4") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public @NotNull CheckRecipeResult checkProcessing_EM() { + + ArrayList<FluidStack> tFluids = getStoredFluids(); + + long PromoterAmount = findLiquidAmount(getPromoter(), tFluids); + + CheckRecipeResult result; + + result = processFuel(tFluids, RecipeMaps.dieselFuels, PromoterAmount, DIESEL_EFFICIENCY_COEFFICIENT, 1); + if (result.wasSuccessful()) return result; + + result = processFuel(tFluids, RecipeMaps.gasTurbineFuels, PromoterAmount, GAS_EFFICIENCY_COEFFICIENT, 1); + if (result.wasSuccessful()) return result; + + if (GTPlusPlus.isModLoaded()) { + result = processFuel(tFluids, GTPPRecipeMaps.rocketFuels, PromoterAmount, ROCKET_EFFICIENCY_COEFFICIENT, 3); + if (result.wasSuccessful()) return result; + } + + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + protected CheckRecipeResult processFuel(ArrayList<FluidStack> tFluids, RecipeMap<FuelBackend> recipeMap, + long PromoterAmount, double efficiencyCoefficient, double FuelsValueBonus) { + for (GT_Recipe recipe : recipeMap.getAllRecipes()) { + FluidStack tFuel = findFuel(recipe); + if (tFuel == null) continue; + long FuelAmount = findLiquidAmount(tFuel, tFluids); + if (FuelAmount == 0) continue; + calculateEfficiency(FuelAmount, PromoterAmount, efficiencyCoefficient); + consumeAllLiquid(tFuel, tFluids); + consumeAllLiquid(getPromoter(), tFluids); + this.setPowerFlow((long) (FuelAmount * recipe.mSpecialValue * FuelsValueBonus / 20.0D)); + this.mMaxProgresstime = 20; + this.updateSlots(); + return CheckRecipeResultRegistry.GENERATING; + } + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + @Override + public void stopMachine() { + // Reset the counter for heating, so that it works again when the machine restarts + heatingTicks = 0; + super.stopMachine(); + } + + @Override + public boolean onRunningTick(ItemStack stack) { + super.onRunningTick(stack); + // Counts ticks up to the defined timer (200 ticks, 10 seconds) + // The multiblock will not stop due to excess energy during this time + // Machine used to explode in the past, this timer was first made to prevent that + if (heatingTicks < HEATING_TIMER) { + heatingTicks++; + isStoppingSafe = true; + } else if (isStoppingSafe) isStoppingSafe = false; + + if (this.getBaseMetaTileEntity() + .isServerSide()) { + addAutoEnergy(); + } + return true; + } + + @Override + public String[] getInfoData() { + String[] info = super.getInfoData(); + info[4] = "Probably makes: " + EnumChatFormatting.RED + + GT_Utility.formatNumbers(this.getPowerFlow()) + + EnumChatFormatting.RESET + + " EU/t"; + info[6] = "Problems: " + EnumChatFormatting.RED + + GT_Utility.formatNumbers(this.getIdealStatus() - this.getRepairStatus()) + + EnumChatFormatting.RESET + + " Efficiency: " + + EnumChatFormatting.YELLOW + + GT_Utility.formatNumbers(tEff / 100D) + + EnumChatFormatting.RESET + + " %"; + return info; + } + + void addAutoEnergy() { + long exEU = this.getPowerFlow() * tEff / 10000; + if (!mDynamoHatches.isEmpty()) { + GT_MetaTileEntity_Hatch_Dynamo tHatch = mDynamoHatches.get(0); + if (tHatch.maxEUOutput() * tHatch.maxAmperesOut() >= exEU) { + tHatch.setEUVar( + Math.min( + tHatch.maxEUStore(), + tHatch.getBaseMetaTileEntity() + .getStoredEU() + exEU)); + } else if (!isStoppingSafe) { + stopMachine(); + } + } + if (!eDynamoMulti.isEmpty()) { + GT_MetaTileEntity_Hatch_DynamoMulti tHatch = eDynamoMulti.get(0); + if (tHatch.maxEUOutput() * tHatch.maxAmperesOut() >= exEU) { + tHatch.setEUVar( + Math.min( + tHatch.maxEUStore(), + tHatch.getBaseMetaTileEntity() + .getStoredEU() + exEU)); + } else if (!isStoppingSafe) { + stopMachine(); + } + } + } + + public FluidStack getPromoter() { + return FluidRegistry.getFluidStack("combustionpromotor", 1); + } + + public FluidStack findFuel(GT_Recipe aFuel) { + if (aFuel.mInputs != null && aFuel.mInputs.length > 0) + return GT_Utility.getFluidForFilledItem(aFuel.mInputs[0], true); + else return aFuel.mFluidInputs[0]; + } + + public void calculateEfficiency(long aFuel, long aPromoter, double coefficient) { + if (aPromoter == 0) { + this.tEff = 0; + return; + } + this.tEff = (int) (Math.exp(-coefficient * (double) aFuel / (double) aPromoter) * EFFICIENCY_CEILING * 10000); + } + + public long findLiquidAmount(FluidStack liquid, List<FluidStack> input) { + long cnt = 0; + for (FluidStack fluid : input) { + if (fluid.isFluidEqual(liquid)) { + cnt += fluid.amount; + } + } + if (cnt < 0) cnt = 0; + return cnt; + } + + public void consumeAllLiquid(FluidStack liquid, List<FluidStack> input) { + for (FluidStack fluid : input) { + if (fluid.isFluidEqual(liquid)) fluid.amount = 0; + } + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { casingTexturePages[0][50], + TextureFactory.of(OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE_GLOW) + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][50], TextureFactory.of(OVERLAY_FRONT_DIESEL_ENGINE), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DIESEL_ENGINE_GLOW) + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][50] }; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new UniversalChemicalFuelEngine(this.mName); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 2, 2, 0, elementBudget, env, false, true); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java new file mode 100644 index 0000000000..f712fa12a7 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java @@ -0,0 +1,709 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GT_StructureUtility.*; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; + +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; + +import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; +import com.github.technus.tectech.TecTech; +import com.github.technus.tectech.thing.gui.TecTechUITextures; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import goodgenerator.blocks.tileEntity.GTMetaTileEntity.YOTTAHatch; +import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; +import goodgenerator.client.GUI.GG_UITextures; +import goodgenerator.loader.Loaders; +import goodgenerator.util.CharExchanger; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.enums.GT_HatchElement; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; + +public class YottaFluidTank extends GT_MetaTileEntity_TooltipMultiBlockBase_EM + implements IConstructable, ISurvivalConstructable { + + private static final IIconContainer textureFontOn = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_QTANK"); + private static final IIconContainer textureFontOn_Glow = new Textures.BlockIcons.CustomIcon( + "iconsets/OVERLAY_QTANK_GLOW"); + private static final IIconContainer textureFontOff = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_QCHEST"); + private static final IIconContainer textureFontOff_Glow = new Textures.BlockIcons.CustomIcon( + "iconsets/OVERLAY_QCHEST_GLOW"); + + protected IStructureDefinition<YottaFluidTank> multiDefinition = null; + protected final ArrayList<YOTTAHatch> mYottaHatch = new ArrayList<>(); + + private static final BigInteger ONE_HUNDRED = BigInteger.valueOf(100); + private static final BigInteger FIVE = BigInteger.valueOf(5); + + /** Tank capacity */ + public BigInteger mStorage = BigInteger.ZERO; + /** Amount of fluid millibuckets currently in the tank */ + public BigInteger mStorageCurrent = BigInteger.ZERO; + /** + * Fluid type currently stored in the tank, can be null. Stack size is always 1, real amount is stored in + * mStorageCurrent. + */ + public FluidStack mFluid = null; + /** + * Fluid type currently the tank is currently locked to, can be null. Stack size is always 1, real amount is stored + * in mStorageCurrent. + */ + public FluidStack mLockedFluid = null; + protected boolean isFluidLocked = false; + protected int glassMeta; + protected int maxCell; + protected final String YOTTANK_BOTTOM = mName + "buttom"; + protected final String YOTTANK_MID = mName + "mid"; + protected final String YOTTANK_TOP = mName + "top"; + protected final NumberFormatMUI numberFormat = new NumberFormatMUI(); + private int workTickCounter = 0; + + public static final BigInteger MAX_INT_BIGINT = BigInteger.valueOf(Integer.MAX_VALUE); + + protected boolean voidExcessEnabled = false; + + public YottaFluidTank(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + public YottaFluidTank(String name) { + super(name); + } + + public int getMeta() { + return glassMeta; + } + + public void setMeta(int meta) { + glassMeta = meta; + } + + public String getCap() { + return mStorage.toString(10); + } + + public String getStored() { + return mStorageCurrent.toString(10); + } + + public String getFluidName() { + if (mFluid == null) return StatCollector.translateToLocal("scanner.info.YOTTank.empty"); + return mFluid.getLocalizedName(); + } + + public String getLockedFluidName() { + if (!isFluidLocked) return StatCollector.translateToLocal("scanner.info.YOTTank.none"); + if (mLockedFluid == null) return StatCollector.translateToLocal("scanner.info.YOTTank.next"); + return mLockedFluid.getLocalizedName(); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + String tAmount = aNBT.getString("mStorage"); + String tAmountCurrent = aNBT.getString("mStorageCurrent"); + if (StringUtils.isEmpty(tAmount)) tAmount = "0"; + if (StringUtils.isEmpty(tAmountCurrent)) tAmountCurrent = "0"; + mStorage = new BigInteger(tAmount, 10); + mStorageCurrent = new BigInteger(tAmountCurrent, 10); + mFluid = FluidRegistry.getFluidStack(aNBT.getString("mFluidName"), 1); + mLockedFluid = FluidRegistry.getFluidStack(aNBT.getString("mLockedFluidName"), 1); + voidExcessEnabled = aNBT.getBoolean("voidExcessEnabled"); + isFluidLocked = aNBT.getBoolean("isFluidLocked"); + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setString("mStorage", mStorage.toString(10)); + aNBT.setString("mStorageCurrent", mStorageCurrent.toString(10)); + aNBT.setString( + "mFluidName", + mFluid == null ? "" + : mFluid.getFluid() + .getName()); + aNBT.setString( + "mLockedFluidName", + mLockedFluid == null ? "" + : mLockedFluid.getFluid() + .getName()); + aNBT.setBoolean("voidExcessEnabled", voidExcessEnabled); + aNBT.setBoolean("isFluidLocked", isFluidLocked); + super.saveNBTData(aNBT); + } + + @Override + public @NotNull CheckRecipeResult checkProcessing_EM() { + this.mEUt = 0; + this.mMaxProgresstime = 20; + return SimpleCheckRecipeResult.ofSuccess(""); + } + + public boolean getIsVoidExcessEnabled() { + return voidExcessEnabled; + } + + /** + * Attempts to remove {@code amount} of fluid from the tank if possible, does not do partial removals. + * + * @param amount The millibucket amount of the fluid to remove + * @return True if successfully removed amount, false if no fluid was removed. + */ + public boolean reduceFluid(long amount) { + final BigInteger bigAmount = BigInteger.valueOf(amount); + if (mStorageCurrent.compareTo(bigAmount) < 0) { + return false; + } else { + mStorageCurrent = mStorageCurrent.subtract(bigAmount); + return true; + } + } + + /** + * Attempts to put {@code amount} of fluid into the tank if possible, fails if there's not enough space for all of + * it. + * + * @param amount The millibucket amount of the fluid to insert + * @param doFill Whether to actually fill, or just simulate a fill + * @return True if successfully added the given amount of fluid to the tank, false if failed. + */ + public boolean addFluid(long amount, boolean doFill) { + final BigInteger bigAmount = BigInteger.valueOf(amount); + final BigInteger newTotal = mStorageCurrent.add(bigAmount); + if (newTotal.compareTo(mStorage) > 0) { + return false; + } else { + if (doFill) { + mStorageCurrent = newTotal; + } + return true; + } + } + + // Avoid allocating a new array on every query + private final FluidTankInfo[] tankInfoCache = new FluidTankInfo[1]; + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection aSide) { + int fluidSize = mStorageCurrent.compareTo(MAX_INT_BIGINT) >= 0 ? Integer.MAX_VALUE : mStorageCurrent.intValue(); + int tankCapacity = mStorage.compareTo(MAX_INT_BIGINT) >= 0 ? Integer.MAX_VALUE : mStorage.intValue(); + final boolean cacheNeedsRecreation; + if (tankInfoCache[0] == null || tankInfoCache[0].capacity != tankCapacity) { + cacheNeedsRecreation = true; + } else if (tankInfoCache[0].fluid == null) { + cacheNeedsRecreation = (mFluid != null); + } else { + cacheNeedsRecreation = !tankInfoCache[0].fluid.isFluidEqual(mFluid); + } + if (cacheNeedsRecreation) { + final FluidStack storedFluid = mFluid.copy(); + storedFluid.amount = fluidSize; + tankInfoCache[0] = new FluidTankInfo(storedFluid, tankCapacity); + } else if (mFluid != null) { + tankInfoCache[0].fluid.amount = fluidSize; + } + return tankInfoCache; + } + + @Override + protected void clearHatches_EM() { + super.clearHatches_EM(); + mYottaHatch.clear(); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mStorage = BigInteger.ZERO; + glassMeta = 0; + maxCell = 0; + if (!structureCheck_EM(YOTTANK_BOTTOM, 2, 0, 0)) return false; + int cnt = 0; + while (structureCheck_EM(YOTTANK_MID, 2, cnt + 1, 0)) { + cnt++; + } + if (cnt > 15 || cnt < 1) return false; + if (!structureCheck_EM(YOTTANK_TOP, 2, cnt + 2, 0)) return false; + // maxCell+1 = Tier of highest Cell. glassMeta is the glass voltage tier + if (maxCell + 3 <= glassMeta) { + if (mStorage.compareTo(mStorageCurrent) < 0) mStorageCurrent = mStorage; + if (mFluid == null) { + mStorageCurrent = BigInteger.ZERO; + } + mWrench = true; + mScrewdriver = true; + mSolderingTool = true; + mSoftHammer = true; + mHardHammer = true; + mCrowbar = true; + return true; + } + return false; + } + + @Override + public IStructureDefinition<YottaFluidTank> getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.<YottaFluidTank>builder() + .addShape( + YOTTANK_BOTTOM, + transpose( + new String[][] { { "MM~MM", "MCCCM", "MCCCM", "MCCCM", "MMMMM" }, + { " ", " OOO ", " OOO ", " OOO ", " " } })) + .addShape(YOTTANK_MID, transpose(new String[][] { { "GGGGG", "GRRRG", "GRRRG", "GRRRG", "GGGGG" } })) + .addShape( + YOTTANK_TOP, + transpose( + new String[][] { { "FFFFF", "F F", "F F", "F F", "FFFFF" }, + { "CCCCC", "CIIIC", "CIIIC", "CIIIC", "CCCCC" } })) + .addElement('C', ofBlock(Loaders.yottaFluidTankCasing, 0)) + .addElement( + 'G', + withChannel( + "glass", + BorosilicateGlass.ofBoroGlass( + (byte) 0, + (byte) 1, + Byte.MAX_VALUE, + YottaFluidTank::setMeta, + te -> (byte) te.getMeta()))) + .addElement('R', ofChain(cells(10))) + .addElement('F', ofFrame(Materials.Steel)) + .addElement( + 'I', + buildHatchAdder(YottaFluidTank.class).atLeast(GT_HatchElement.InputHatch) + .casingIndex(1537) + .dot(1) + .buildAndChain(Loaders.yottaFluidTankCasing, 0)) + .addElement( + 'M', + buildHatchAdder(YottaFluidTank.class).atLeast(GT_HatchElement.Maintenance) + .casingIndex(1537) + .dot(2) + .buildAndChain(Loaders.yottaFluidTankCasing, 0)) + .addElement( + 'O', + buildHatchAdder(YottaFluidTank.class).atLeast(GT_HatchElement.OutputHatch) + .adder(YottaFluidTank::addOutput) + .casingIndex(1537) + .dot(1) + .buildAndChain(Loaders.yottaFluidTankCasing, 0)) + .build(); + } + return multiDefinition; + } + + public List<IStructureElement<YottaFluidTank>> cells(int num) { + List<IStructureElement<YottaFluidTank>> out = new ArrayList<>(); + for (int i = 0; i < num; ++i) { + int finalI = i; + out.add(onElementPass(x -> { + x.mStorage = x.mStorage.add(calStorage(finalI)); + x.maxCell = Math.max(x.maxCell, finalI); + }, ofBlock(Loaders.yottaFluidTankCell, i))); + } + return out; + } + + public final boolean addOutput(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } else { + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); + } else if (aMetaTileEntity instanceof YOTTAHatch) { + // only one yothatch allowed + if (!this.mYottaHatch.isEmpty()) return false; + ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((YOTTAHatch) aMetaTileEntity).setTank(this); + return this.mYottaHatch.add((YOTTAHatch) aMetaTileEntity); + } + } + } + return false; + } + + @Override + public String[] getInfoData() { + return new String[] { StatCollector.translateToLocal("scanner.info.YOTTank.1"), + StatCollector.translateToLocal( + EnumChatFormatting.YELLOW + CharExchanger.formatNumber(getFluidName() + EnumChatFormatting.RESET)), + + StatCollector.translateToLocal("scanner.info.YOTTank.0"), + StatCollector.translateToLocal( + EnumChatFormatting.GREEN + CharExchanger.formatNumber(getCap()) + EnumChatFormatting.RESET + " L"), + + StatCollector.translateToLocal("scanner.info.YOTTank.2"), + StatCollector.translateToLocal( + EnumChatFormatting.GREEN + CharExchanger.formatNumber(getStored()) + + EnumChatFormatting.RESET + + " L" + + " (" + + EnumChatFormatting.GREEN + + getPercent() + + "%" + + EnumChatFormatting.RESET + + ")"), + + StatCollector.translateToLocal("scanner.info.YOTTank.3"), + StatCollector.translateToLocal( + EnumChatFormatting.YELLOW + CharExchanger.formatNumber(getLockedFluidName()) + + EnumChatFormatting.RESET) }; + } + + private String getPercent() { + if (mStorage.signum() == 0) return "0"; + return mStorageCurrent.multiply(ONE_HUNDRED) + .divide(mStorage) + .toString(); + } + + @Override + protected GT_Multiblock_Tooltip_Builder createTooltip() { + final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + tt.addMachineType("Fluid Tank") + .addInfo("Controller block for the YOTTank.") + .addInfo("The max output speed is decided by the amount of stored liquid and the output hatch's capacity.") + .addInfo("The max fluid cell tier is limited by the glass tier.") + .addInfo("HV glass for T1, EV glass for T2, IV glass for T3. . .") + .addInfo("The max height of the cell blocks is 15.") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .beginVariableStructureBlock(5, 5, 1, 15, 5, 5, false) + .addController("Front of the second layer") + .addCasingInfoExactly("Steel Frame Box", 16, false) + .addCasingInfoRange("Glass (HV+)", 16, 240, true) + .addCasingInfoRange("Fluid Cell Block", 9, 135, true) + .addCasingInfoRange("YOTTank Casing", 25, 43, false) + .addInputHatch("Hint block with dot 1") + .addOutputHatch("Hint block with dot 3") + .toolTipFinisher("Good Generator"); + return tt; + } + + private static final BigInteger[] storageWithCells; + + static { + storageWithCells = new BigInteger[10]; + final BigInteger baseStorage = BigInteger.valueOf(1_000_000); + final BigInteger storageMultiplier = BigInteger.valueOf(100); + BigInteger currentStorage = baseStorage; + for (int i = 0; i < 10; i++) { + storageWithCells[i] = currentStorage; + currentStorage = currentStorage.multiply(storageMultiplier); + } + } + + public BigInteger calStorage(int meta) { + return storageWithCells[meta]; + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + super.onRunningTick(aStack); + if (this.getBaseMetaTileEntity() + .isServerSide()) { + ++workTickCounter; + if (workTickCounter < 20) { + return true; + } + workTickCounter = 0; + + List<FluidStack> tStore = getStoredFluids(); + for (FluidStack tFluid : tStore) { + if (tFluid == null) continue; + if (isFluidLocked) { + if (mLockedFluid != null) { + if (!tFluid.isFluidEqual(mLockedFluid)) continue;; + } else { + mLockedFluid = tFluid.copy(); + mLockedFluid.amount = 1; + } + } + if (mFluid == null || tFluid.isFluidEqual(mFluid)) { + if (mFluid == null) { + mFluid = tFluid.copy(); + mFluid.amount = 1; + } + if (addFluid(tFluid.amount, true)) { + tFluid.amount = 0; + } else { + if (voidExcessEnabled) { + tFluid.amount = 0; + } else { + final BigInteger delta = mStorage.subtract(mStorageCurrent); + tFluid.amount -= delta.intValueExact(); + } + mStorageCurrent = mStorage; + } + } + } + + if (mStorageCurrent.compareTo(BigInteger.ZERO) <= 0) { + mFluid = null; + } + + if (mFluid != null) { + // Try to drain 1% of the tank per tick, so 20% per second aka 1/5 + int outputAmount = mStorageCurrent.divide(FIVE) + .min(MAX_INT_BIGINT) + .max(BigInteger.ONE) + .intValueExact(); + final int originalOutputAmount = outputAmount; + + for (final GT_MetaTileEntity_Hatch outputHatch : mOutputHatches) { + final FluidStack fluidInHatch = outputHatch.mFluid; + + final int remainingHatchSpace; + if (fluidInHatch != null) { + if (fluidInHatch.isFluidEqual(mFluid)) { + remainingHatchSpace = outputHatch.getCapacity() - fluidInHatch.amount; + } else { + continue; + } + } else { + remainingHatchSpace = outputHatch.getCapacity(); + } + + final int amountToFillHatch = Math.min(remainingHatchSpace, outputAmount); + if (amountToFillHatch <= 0) { + continue; + } + final FluidStack fillStack = mFluid.copy(); + fillStack.amount = amountToFillHatch; + final int transferredAmount = outputHatch.fill(fillStack, true); + outputAmount -= transferredAmount; + } + + final int totalDrainedAmount = originalOutputAmount - outputAmount; + if (totalDrainedAmount > 0) { + mStorageCurrent = mStorageCurrent.subtract(BigInteger.valueOf(totalDrainedAmount)); + if (mStorageCurrent.signum() < 0) { + throw new IllegalStateException( + "YOTTank drained beyond its fluid amount, indicating logic bug: " + mStorageCurrent); + } + } + } + } + return true; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM(YOTTANK_BOTTOM, 2, 0, 0, stackSize, hintsOnly); + int height = stackSize.stackSize; + if (height > 15) height = 15; + structureBuild_EM(YOTTANK_TOP, 2, height + 2, 0, stackSize, hintsOnly); + while (height > 0) { + structureBuild_EM(YOTTANK_MID, 2, height, 0, stackSize, hintsOnly); + height--; + } + } + + @Override + public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ, ItemStack toolStack) { + if (side == getBaseMetaTileEntity().getFrontFacing()) { + voidExcessEnabled ^= true; + aPlayer.addChatMessage( + new ChatComponentTranslation( + voidExcessEnabled ? "yottank.chat.voidExcessEnabled" : "yottank.chat.voidExcessDisabled")); + return true; + } + return false; + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ, ItemStack toolStack) { + if (side == getBaseMetaTileEntity().getFrontFacing()) { + if (mLockedFluid == null) { + if (mFluid != null) { + mLockedFluid = mFluid; + aPlayer.addChatMessage(new ChatComponentTranslation("yottank.chat.1", getFluidName())); + } else { + aPlayer.addChatMessage(new ChatComponentTranslation("yottank.chat.2")); + } + isFluidLocked = true; + } else { + mLockedFluid = null; + isFluidLocked = false; + aPlayer.addChatMessage(new ChatComponentTranslation("yottank.chat.0")); + } + return true; + } + return false; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("YOTTank.hint", 8); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new YottaFluidTank(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1537), + TextureFactory.of(textureFontOn), TextureFactory.builder() + .addIcon(textureFontOn_Glow) + .glow() + .build() }; + else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1537), + TextureFactory.of(textureFontOff), TextureFactory.builder() + .addIcon(textureFontOff_Glow) + .glow() + .build() }; + } else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1537) }; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int built = 0; + built += survivialBuildPiece(YOTTANK_BOTTOM, stackSize, 2, 0, 0, elementBudget, env, false, true); + int height = stackSize.stackSize; + if (height > 15) height = 15; + built += survivialBuildPiece(YOTTANK_TOP, stackSize, 2, height + 2, 0, elementBudget - built, env, false, true); + while (height > 0) { + built += survivialBuildPiece(YOTTANK_MID, stackSize, 2, height, 0, elementBudget - built, env, false, true); + height--; + } + return built; + } + + @Override + protected boolean shouldDisplayCheckRecipeResult() { + return false; + } + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + + screenElements + .widget( + new TextWidget().setStringSupplier( + () -> StatCollector.translateToLocal("gui.YOTTank.0") + " " + numberFormat.format(mStorage) + " L") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) + .widget(new FakeSyncWidget.BigIntegerSyncer(() -> mStorage, val -> mStorage = val)) + .widget( + new TextWidget() + .setStringSupplier(() -> StatCollector.translateToLocal("gui.YOTTank.1") + " " + getFluidName()) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) + .widget(new FakeSyncWidget.FluidStackSyncer(() -> mFluid, val -> mFluid = val)) + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocal("gui.YOTTank.2") + " " + + numberFormat.format(mStorageCurrent) + + " L") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) + .widget(new FakeSyncWidget.BigIntegerSyncer(() -> mStorageCurrent, val -> mStorageCurrent = val)) + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocal("gui.YOTTank.3") + " " + getLockedFluidName()) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) + .widget(new FakeSyncWidget.FluidStackSyncer(() -> mLockedFluid, val -> mLockedFluid = val)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> isFluidLocked, val -> isFluidLocked = val)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> voidExcessEnabled, val -> voidExcessEnabled = val)); + } + + @Override + protected ButtonWidget createSafeVoidButton() { + return (ButtonWidget) new ButtonWidget().setOnClick((clickData, widget) -> { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + voidExcessEnabled = !voidExcessEnabled; + }) + .setPlayClickSound(false) + .setBackground(() -> { + List<UITexture> ret = new ArrayList<>(); + ret.add(TecTechUITextures.BUTTON_STANDARD_16x16); + ret.add( + voidExcessEnabled ? TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_ON + : TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_OFF); + return ret.toArray(new IDrawable[0]); + }) + .setPos(174, doesBindPlayerInventory() ? 132 : 156) + .setSize(16, 16) + .addTooltip(StatCollector.translateToLocal("gui.YOTTank.button.void")) + .setTooltipShowUpDelay(TOOLTIP_DELAY); + } + + @Override + protected ButtonWidget createPowerPassButton() { + return (ButtonWidget) new ButtonWidget().setOnClick((clickData, widget) -> { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + isFluidLocked = !isFluidLocked; + if (!widget.getContext() + .isClient()) mLockedFluid = isFluidLocked ? mFluid : null; + }) + .setPlayClickSound(false) + .setBackground(() -> { + List<UITexture> ret = new ArrayList<>(); + ret.add(TecTechUITextures.BUTTON_STANDARD_16x16); + ret.add(isFluidLocked ? GG_UITextures.OVERLAY_BUTTON_LOCK_ON : GG_UITextures.OVERLAY_BUTTON_LOCK_OFF); + return ret.toArray(new IDrawable[0]); + }) + .setPos(174, doesBindPlayerInventory() ? 116 : 140) + .setSize(16, 16) + .addTooltip(StatCollector.translateToLocal("gui.YOTTank.button.locking")) + .setTooltipShowUpDelay(TOOLTIP_DELAY); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LargeTurbineBase.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LargeTurbineBase.java new file mode 100644 index 0000000000..3df71aa25a --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LargeTurbineBase.java @@ -0,0 +1,345 @@ +// copied from gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine +// The origin one in gt made the abstract method private so i can't imp it. +package goodgenerator.blocks.tileEntity.base; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GT_HatchElement.*; +import static gregtech.api.util.GT_StructureUtility.*; +import static gregtech.api.util.GT_Utility.filterValidMTEs; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElementCheckOnly; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.GT_MetaGenerated_Tool; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GT_Utility; +import gregtech.common.items.GT_MetaGenerated_Tool_01; + +public abstract class GT_MetaTileEntity_LargeTurbineBase extends + GT_MetaTileEntity_EnhancedMultiBlockBase<GT_MetaTileEntity_LargeTurbineBase> implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final ClassValue<IStructureDefinition<GT_MetaTileEntity_LargeTurbineBase>> STRUCTURE_DEFINITION = new ClassValue<IStructureDefinition<GT_MetaTileEntity_LargeTurbineBase>>() { + + @Override + protected IStructureDefinition<GT_MetaTileEntity_LargeTurbineBase> computeValue(Class<?> type) { + return StructureDefinition.<GT_MetaTileEntity_LargeTurbineBase>builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { " ", "xxxxx", "xxxxx", "xxxxx", "xxxxx", }, + { " --- ", "xcccx", "xchcx", "xchcx", "xcccx", }, + { " --- ", "xc~cx", "xh-hx", "xh-hx", "xcdcx", }, + { " --- ", "xcccx", "xchcx", "xchcx", "xcccx", }, + { " ", "xxxxx", "xxxxx", "xxxxx", "xxxxx", }, })) + .addElement('c', lazy(t -> ofBlock(t.getCasingBlock(), t.getCasingMeta()))) + .addElement('d', lazy(t -> Dynamo.newAny(t.getCasingTextureIndex(), 1))) + .addElement( + 'h', + lazy( + t -> buildHatchAdder(GT_MetaTileEntity_LargeTurbineBase.class) + .atLeast(Maintenance, InputHatch, OutputHatch, OutputBus, InputBus, Muffler) + .casingIndex(t.getCasingTextureIndex()) + .dot(2) + .buildAndChain(t.getCasingBlock(), t.getCasingMeta()))) + .addElement( + 'x', + (IStructureElementCheckOnly<GT_MetaTileEntity_LargeTurbineBase>) (aContext, aWorld, aX, aY, aZ) -> { + TileEntity tTile = aWorld.getTileEntity(aX, aY, aZ); + return !(tTile instanceof IGregTechTileEntity) || !(((IGregTechTileEntity) tTile) + .getMetaTileEntity() instanceof GT_MetaTileEntity_LargeTurbineBase); + }) + .build(); + } + }; + + protected int baseEff = 0; + protected int optFlow = 0; + protected double realOptFlow = 0; + protected int storedFluid = 0; + protected int counter = 0; + protected boolean looseFit = false; + protected long maxPower = 0; + + public GT_MetaTileEntity_LargeTurbineBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public GT_MetaTileEntity_LargeTurbineBase(String aName) { + super(aName); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return getMaxEfficiency(aStack) > 0; + } + + @Override + public IStructureDefinition<GT_MetaTileEntity_LargeTurbineBase> getStructureDefinition() { + return STRUCTURE_DEFINITION.get(getClass()); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + maxPower = 0; + if (checkPiece(STRUCTURE_PIECE_MAIN, 2, 2, 1) && mMaintenanceHatches.size() == 1 + && mMufflerHatches.isEmpty() == (getPollutionPerTick(null) == 0)) { + maxPower = getMaximumOutput(); + return true; + } + return false; + } + + public abstract Block getCasingBlock(); + + public abstract int getCasingMeta(); + + public abstract int getCasingTextureIndex(); + + @Override + public boolean addToMachineList(IGregTechTileEntity tTileEntity, int aBaseCasingIndex) { + return addMaintenanceToMachineList(tTileEntity, getCasingTextureIndex()) + || addInputToMachineList(tTileEntity, getCasingTextureIndex()) + || addOutputToMachineList(tTileEntity, getCasingTextureIndex()) + || addMufflerToMachineList(tTileEntity, getCasingTextureIndex()); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + } + + @Override + public @NotNull CheckRecipeResult checkProcessing() { + ItemStack controllerSlot = getControllerSlot(); + if ((counter & 7) == 0 + && (controllerSlot == null || !(controllerSlot.getItem() instanceof GT_MetaGenerated_Tool) + || controllerSlot.getItemDamage() < 170 + || controllerSlot.getItemDamage() > 179)) { + stopMachine(); + return CheckRecipeResultRegistry.NO_TURBINE_FOUND; + } + ArrayList<FluidStack> tFluids = getStoredFluids(); + if (tFluids.size() > 0) { + if (baseEff == 0 || optFlow == 0 + || counter >= 512 + || this.getBaseMetaTileEntity() + .hasWorkJustBeenEnabled() + || this.getBaseMetaTileEntity() + .hasInventoryBeenModified()) { + counter = 0; + baseEff = GT_Utility.safeInt( + (long) ((5F + + ((GT_MetaGenerated_Tool) controllerSlot.getItem()).getToolCombatDamage(controllerSlot)) + * 1000F)); + optFlow = GT_Utility.safeInt( + (long) Math.max( + Float.MIN_NORMAL, + ((GT_MetaGenerated_Tool) controllerSlot.getItem()).getToolStats(controllerSlot) + .getSpeedMultiplier() * GT_MetaGenerated_Tool.getPrimaryMaterial(controllerSlot).mToolSpeed + * 50)); + if (optFlow <= 0 || baseEff <= 0) { + stopMachine(); // in case the turbine got removed + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + } else { + counter++; + } + } + + int newPower = fluidIntoPower(tFluids, optFlow, baseEff); // How much the turbine should be producing with this + // flow + int difference = newPower - this.mEUt; // difference between current output and new output + + // Magic numbers: can always change by at least 10 eu/t, but otherwise by at most 1 percent of the difference in + // power level (per tick) + // This is how much the turbine can actually change during this tick + int maxChangeAllowed = Math.max(10, GT_Utility.safeInt((long) Math.abs(difference) / 100)); + + if (Math.abs(difference) > maxChangeAllowed) { // If this difference is too big, use the maximum allowed change + int change = maxChangeAllowed * (difference > 0 ? 1 : -1); // Make the change positive or negative. + this.mEUt += change; // Apply the change + } else this.mEUt = newPower; + + if (this.mEUt <= 0) { + // stopMachine(); + this.mEUt = 0; + this.mEfficiency = 0; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } else { + this.mMaxProgresstime = 1; + this.mEfficiencyIncrease = 10; + // Overvoltage is handled inside the MultiBlockBase when pushing out to dynamos. no need to do it here. + return CheckRecipeResultRegistry.GENERATING; + } + } + + public abstract int fluidIntoPower(ArrayList<FluidStack> aFluids, int aOptFlow, int aBaseEff); + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 1; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + if (GT_Utility.isStackInvalid(aStack)) { + return 0; + } + if (aStack.getItem() instanceof GT_MetaGenerated_Tool_01) { + return 10000; + } + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return true; + } + + public long getMaximumOutput() { + long aTotal = 0; + for (GT_MetaTileEntity_Hatch_Dynamo aDynamo : filterValidMTEs(mDynamoHatches)) { + long aVoltage = aDynamo.maxEUOutput(); + aTotal = aDynamo.maxAmperesOut() * aVoltage; + break; + } + return aTotal; + } + + @Override + public String[] getInfoData() { + int mPollutionReduction = 0; + for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { + mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); + } + + String tRunning = mMaxProgresstime > 0 + ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.running.true") + + EnumChatFormatting.RESET + : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.running.false") + + EnumChatFormatting.RESET; + String tMaintainance = getIdealStatus() == getRepairStatus() + ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.maintenance.false") + + EnumChatFormatting.RESET + : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.maintenance.true") + + EnumChatFormatting.RESET; + int tDura = 0; + + if (mInventory[1] != null && mInventory[1].getItem() instanceof GT_MetaGenerated_Tool_01) { + tDura = GT_Utility.safeInt( + (long) (100.0f / GT_MetaGenerated_Tool.getToolMaxDamage(mInventory[1]) + * (GT_MetaGenerated_Tool.getToolDamage(mInventory[1])) + 1)); + } + + long storedEnergy = 0; + long maxEnergy = 0; + for (GT_MetaTileEntity_Hatch_Dynamo tHatch : filterValidMTEs(mDynamoHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + String[] ret = new String[] { + // 8 Lines available for information panels + tRunning + ": " + + EnumChatFormatting.RED + + GT_Utility.formatNumbers(mEUt) + + EnumChatFormatting.RESET + + " EU/t", /* 1 */ + tMaintainance, /* 2 */ + StatCollector.translateToLocal("GT5U.turbine.efficiency") + ": " + + EnumChatFormatting.YELLOW + + (mEfficiency / 100F) + + EnumChatFormatting.RESET + + "%", /* 2 */ + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GT_Utility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + /* 3 */ EnumChatFormatting.YELLOW + + GT_Utility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("GT5U.turbine.flow") + ": " + + EnumChatFormatting.YELLOW + + GT_Utility.formatNumbers(GT_Utility.safeInt((long) realOptFlow)) + + EnumChatFormatting.RESET + + " L/t" + + /* 4 */ EnumChatFormatting.YELLOW + + " (" + + (looseFit ? StatCollector.translateToLocal("GT5U.turbine.loose") + : StatCollector.translateToLocal("GT5U.turbine.tight")) + + ")", /* 5 */ + StatCollector.translateToLocal("GT5U.turbine.fuel") + ": " + + EnumChatFormatting.GOLD + + GT_Utility.formatNumbers(storedFluid) + + EnumChatFormatting.RESET + + "L", /* 6 */ + StatCollector.translateToLocal( + "GT5U.turbine.dmg") + ": " + EnumChatFormatting.RED + tDura + EnumChatFormatting.RESET + "%", /* 7 */ + StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " + + EnumChatFormatting.GREEN + + mPollutionReduction + + EnumChatFormatting.RESET + + " %" /* 8 */ + }; + if (!this.getClass() + .getName() + .contains("Steam")) + ret[4] = StatCollector.translateToLocal("GT5U.turbine.flow") + ": " + + EnumChatFormatting.YELLOW + + GT_Utility.safeInt((long) realOptFlow) + + EnumChatFormatting.RESET + + " L/t"; + return ret; + } + + public boolean hasTurbine() { + return this.getMaxEfficiency(mInventory[1]) > 0; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 2, 2, 1); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 2, 1, elementBudget, env, false, true); + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_TooltipMultiBlockBase_EM.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_TooltipMultiBlockBase_EM.java new file mode 100644 index 0000000000..010dc1db88 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_TooltipMultiBlockBase_EM.java @@ -0,0 +1,62 @@ +package goodgenerator.blocks.tileEntity.base; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import net.minecraft.item.ItemStack; + +import org.lwjgl.input.Keyboard; + +import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; + +import gregtech.api.interfaces.ISecondaryDescribable; +import gregtech.api.util.GT_Multiblock_Tooltip_Builder; + +public abstract class GT_MetaTileEntity_TooltipMultiBlockBase_EM extends GT_MetaTileEntity_MultiblockBase_EM + implements ISecondaryDescribable { + + private static final Map<Integer, GT_Multiblock_Tooltip_Builder> tooltips = new ConcurrentHashMap<>(); + + protected GT_MetaTileEntity_TooltipMultiBlockBase_EM(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + protected GT_MetaTileEntity_TooltipMultiBlockBase_EM(String aName) { + super(aName); + } + + protected GT_Multiblock_Tooltip_Builder getTooltip() { + int tId = getBaseMetaTileEntity().getMetaTileID(); + GT_Multiblock_Tooltip_Builder tooltip = tooltips.get(tId); + if (tooltip == null) { + tooltip = createTooltip(); + tooltips.put(tId, tooltip); + } + return tooltip; + } + + protected abstract GT_Multiblock_Tooltip_Builder createTooltip(); + + @Override + public String[] getDescription() { + return getCurrentDescription(); + } + + @Override + public boolean isDisplaySecondaryDescription() { + return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT); + } + + public String[] getPrimaryDescription() { + return getTooltip().getInformation(); + } + + public String[] getSecondaryDescription() { + return getTooltip().getStructureInformation(); + } + + @Override + public int getPollutionPerTick(ItemStack itemStack) { + return getPollutionPerSecond(itemStack) / 20; + } +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java new file mode 100644 index 0000000000..5608d19ae4 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java @@ -0,0 +1,733 @@ +package goodgenerator.blocks.tileEntity.base; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.enums.Textures.BlockIcons.*; +import static gregtech.api.util.GT_StructureUtility.filterByMTETier; +import static gregtech.api.util.GT_StructureUtility.ofFrame; +import static gregtech.api.util.GT_Utility.filterValidMTEs; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.enums.GT_HatchElement; +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.IOverclockDescriptionProvider; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; +import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; +import gregtech.api.objects.GT_ChunkManager; +import gregtech.api.objects.GT_ItemStack; +import gregtech.api.objects.overclockdescriber.FusionOverclockDescriber; +import gregtech.api.objects.overclockdescriber.OverclockDescriber; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GT_HatchElementBuilder; +import gregtech.api.util.GT_OverclockCalculator; +import gregtech.api.util.GT_ParallelHelper; +import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GT_Utility; +import gregtech.common.tileentities.machines.IDualInputHatch; + +public abstract class LargeFusionComputer extends GT_MetaTileEntity_TooltipMultiBlockBase_EM + implements IConstructable, ISurvivalConstructable, IOverclockDescriptionProvider { + + public static final String MAIN_NAME = "largeFusion"; + public static final int M = 1_000_000; + private boolean isLoadedChunk; + public GT_Recipe mLastRecipe; + public int para; + protected OverclockDescriber overclockDescriber; + private static final ClassValue<IStructureDefinition<LargeFusionComputer>> STRUCTURE_DEFINITION = new ClassValue<IStructureDefinition<LargeFusionComputer>>() { + + @Override + protected IStructureDefinition<LargeFusionComputer> computeValue(Class<?> type) { + return StructureDefinition.<LargeFusionComputer>builder() + .addShape(MAIN_NAME, transpose(new String[][] { L0, L1, L2, L3, L2, L1, L0 })) + .addElement('H', lazy(x -> ofBlock(x.getCoilBlock(), x.getCoilMeta()))) + .addElement('C', lazy(x -> ofBlock(x.getCasingBlock(), x.getCasingMeta()))) + .addElement('B', lazy(x -> ofBlock(x.getGlassBlock(), x.getGlassMeta()))) + .addElement( + 'I', + lazy( + x -> GT_HatchElementBuilder.<LargeFusionComputer>builder() + .atLeast( + GT_HatchElement.InputHatch.or(GT_HatchElement.InputBus), + GT_HatchElement.OutputHatch) + .adder(LargeFusionComputer::addFluidIO) + .casingIndex(x.textureIndex()) + .dot(1) + .hatchItemFilterAnd(x2 -> filterByMTETier(x2.hatchTier(), Integer.MAX_VALUE)) + .buildAndChain(x.getGlassBlock(), x.getGlassMeta()))) + .addElement( + 'E', + lazy( + x -> GT_HatchElementBuilder.<LargeFusionComputer>builder() + .anyOf(HatchElement.EnergyMulti.or(GT_HatchElement.Energy)) + .adder(LargeFusionComputer::addEnergyInjector) + .casingIndex(x.textureIndex()) + .hatchItemFilterAnd(x2 -> filterByMTETier(x2.hatchTier(), Integer.MAX_VALUE)) + .dot(2) + .buildAndChain(x.getCasingBlock(), x.getCasingMeta()))) + .addElement('F', lazy(x -> ofFrame(x.getFrameBox()))) + .build(); + } + }; + + static { + Textures.BlockIcons.setCasingTextureForId( + 52, + TextureFactory.of( + TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) + .extFacing() + .glow() + .build())); + } + + public LargeFusionComputer(String name) { + super(name); + useLongPower = true; + this.overclockDescriber = createOverclockDescriber(); + } + + public LargeFusionComputer(int id, String name, String nameRegional) { + super(id, name, nameRegional); + useLongPower = true; + this.overclockDescriber = createOverclockDescriber(); + } + + protected OverclockDescriber createOverclockDescriber() { + return new FusionOverclockDescriber((byte) tier(), capableStartupCanonical()); + } + + @Nullable + @Override + public OverclockDescriber getOverclockDescriber() { + return overclockDescriber; + } + + public abstract int tier(); + + @Override + public long maxEUStore() { + return capableStartupCanonical() * (Math.min(32, this.mEnergyHatches.size() + this.eEnergyMulti.size())) / 32L; + } + + /** + * Unlike {@link #maxEUStore()}, this provides theoretical limit of startup EU, without considering the amount of + * hatches nor the room for extra energy. Intended for simulation. + */ + public abstract long capableStartupCanonical(); + + public abstract Block getCasingBlock(); + + public abstract int getCasingMeta(); + + public abstract Block getCoilBlock(); + + public abstract int getCoilMeta(); + + public abstract Block getGlassBlock(); + + public abstract int getGlassMeta(); + + public abstract int hatchTier(); + + public abstract Materials getFrameBox(); + + public abstract int getMaxPara(); + + public abstract int extraPara(int startEnergy); + + public int textureIndex() { + return 53; + } + + public abstract ITexture getTextureOverlay(); + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aStack) { + return side != getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + // Migration code + if (lEUt > 0) { + lEUt = -lEUt; + } + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.eEnergyMulti.clear(); + if (structureCheck_EM(MAIN_NAME, 23, 3, 40) && mInputHatches.size() + mDualInputHatches.size() != 0 + && !mOutputHatches.isEmpty() + && (mEnergyHatches.size() + eEnergyMulti.size()) != 0) { + fixAllIssue(); + return true; + } + return false; + } + + public void fixAllIssue() { + mWrench = true; + mScrewdriver = true; + mSoftHammer = true; + mHardHammer = true; + mSolderingTool = true; + mCrowbar = true; + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + structureBuild_EM(MAIN_NAME, 23, 3, 40, itemStack, b); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); + return survivialBuildPiece(MAIN_NAME, stackSize, 23, 3, 40, realBudget, env, false, true); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide() && !aBaseMetaTileEntity.isAllowedToWork()) { + // if machine has stopped, stop chunkloading + GT_ChunkManager.releaseTicket((TileEntity) aBaseMetaTileEntity); + this.isLoadedChunk = false; + } else if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && !this.isLoadedChunk) { + // load a 3x3 area when machine is running + GT_ChunkManager.releaseTicket((TileEntity) aBaseMetaTileEntity); + int offX = aBaseMetaTileEntity.getFrontFacing().offsetX; + int offZ = aBaseMetaTileEntity.getFrontFacing().offsetZ; + GT_ChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() + offX, getChunkZ() + offZ)); + GT_ChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() + 1 + offX, getChunkZ() + 1 + offZ)); + GT_ChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() + 1 + offX, getChunkZ() + offZ)); + GT_ChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() + 1 + offX, getChunkZ() - 1 + offZ)); + GT_ChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() - 1 + offX, getChunkZ() + 1 + offZ)); + GT_ChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() - 1 + offX, getChunkZ() + offZ)); + GT_ChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() - 1 + offX, getChunkZ() - 1 + offZ)); + GT_ChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() + offX, getChunkZ() + 1 + offZ)); + GT_ChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() + offX, getChunkZ() - 1 + offZ)); + this.isLoadedChunk = true; + } + + if (aBaseMetaTileEntity.isServerSide()) { + if (aTick % 400 == 0) fixAllIssue(); + if (mEfficiency < 0) mEfficiency = 0; + if (mRunningOnLoad && checkMachine(aBaseMetaTileEntity, mInventory[1])) { + checkRecipe(); + } + if (mUpdated) { + mUpdate = 50; + mUpdated = false; + } + if (--mUpdate == 0 || --mStartUpCheck == 0 + || cyclicUpdate_EM() + || aBaseMetaTileEntity.hasWorkJustBeenEnabled()) { + if (mUpdate <= -1000) { + mUpdate = 5000; + } + checkStructure(true, aBaseMetaTileEntity); + } + if (mStartUpCheck < 0) { + if (mMachine) { + if (aBaseMetaTileEntity.getStoredEU() <= 0 && mMaxProgresstime > 0) { + criticalStopMachine(); + } + + long energyLimit = getSingleHatchPower(); + List<GT_MetaTileEntity_Hatch> hatches = getExoticAndNormalEnergyHatchList(); + for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(hatches)) { + long consumableEnergy = Math.min(hatch.getEUVar(), energyLimit); + long receivedEnergy = Math + .min(consumableEnergy, maxEUStore() - aBaseMetaTileEntity.getStoredEU()); + if (receivedEnergy > 0) { + hatch.getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(receivedEnergy, false); + aBaseMetaTileEntity.increaseStoredEnergyUnits(receivedEnergy, true); + } + } + + if (mMaxProgresstime > 0) { + this.getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(-lEUt, true); + if (mMaxProgresstime > 0 && ++mProgresstime >= mMaxProgresstime) { + if (mOutputItems != null) + for (ItemStack tStack : mOutputItems) if (tStack != null) addOutput(tStack); + if (mOutputFluids != null) + for (FluidStack tStack : mOutputFluids) if (tStack != null) addOutput(tStack); + mEfficiency = Math + .max(0, Math.min(mEfficiency + mEfficiencyIncrease, getMaxEfficiency(mInventory[1]))); + mOutputItems = null; + mOutputFluids = null; + mProgresstime = 0; + mMaxProgresstime = 0; + mEfficiencyIncrease = 0; + para = 0; + if (aBaseMetaTileEntity.isAllowedToWork()) checkRecipe(); + } + } else { + if (aTick % 100 == 0 || aBaseMetaTileEntity.hasWorkJustBeenEnabled() + || aBaseMetaTileEntity.hasInventoryBeenModified()) { + turnCasingActive(mMaxProgresstime > 0); + if (aBaseMetaTileEntity.isAllowedToWork()) { + if (checkRecipe()) { + if (aBaseMetaTileEntity.getStoredEU() + < this.mLastRecipe.mSpecialValue + this.lEUt) { + mMaxProgresstime = 0; + turnCasingActive(false); + criticalStopMachine(); + } + getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(this.mLastRecipe.mSpecialValue + this.lEUt, false); + } + } + if (mMaxProgresstime <= 0) mEfficiency = Math.max(0, mEfficiency - 1000); + } + } + } else { + turnCasingActive(false); + this.mLastRecipe = null; + stopMachine(); + } + } + aBaseMetaTileEntity + .setErrorDisplayID((aBaseMetaTileEntity.getErrorDisplayID() & ~127) | (mMachine ? 0 : 64)); + aBaseMetaTileEntity.setActive(mMaxProgresstime > 0); + } else { + soundMagic(getActivitySound()); + } + } + + /** + * @return The power one hatch can deliver to the reactor + */ + protected long getSingleHatchPower() { + return GT_Values.V[tier()] * getMaxPara() * extraPara(100) / 32; + } + + public boolean turnCasingActive(boolean status) { + if (this.mEnergyHatches != null) { + for (GT_MetaTileEntity_Hatch_Energy hatch : this.mEnergyHatches) { + hatch.updateTexture(status ? 52 : 53); + } + } + if (this.eEnergyMulti != null) { + for (GT_MetaTileEntity_Hatch_EnergyMulti hatch : this.eEnergyMulti) { + hatch.updateTexture(status ? 52 : 53); + } + } + if (this.mOutputHatches != null) { + for (GT_MetaTileEntity_Hatch_Output hatch : this.mOutputHatches) { + hatch.updateTexture(status ? 52 : 53); + } + } + if (this.mInputHatches != null) { + for (GT_MetaTileEntity_Hatch_Input hatch : this.mInputHatches) { + hatch.updateTexture(status ? 52 : 53); + } + } + if (this.mDualInputHatches != null) { + for (IDualInputHatch hatch : this.mDualInputHatches) { + hatch.updateTexture(status ? 52 : 53); + } + } + return true; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS) + .extFacing() + .build(), getTextureOverlay() }; + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(52) }; + return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS) + .extFacing() + .build() }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public void onMachineBlockUpdate() { + mUpdate = 100; + } + + @Override + public RecipeMap<?> getRecipeMap() { + return RecipeMaps.fusionRecipes; + } + + @Override + public int getRecipeCatalystPriority() { + return -2; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected GT_ParallelHelper createParallelHelper(@NotNull GT_Recipe recipe) { + // When the fusion first loads and is still processing, it does the recipe check without consuming. + return super.createParallelHelper(recipe).setConsumption(!mRunningOnLoad); + } + + @NotNull + @Override + protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { + return overclockDescriber.createCalculator(super.createOverclockCalculator(recipe), recipe); + } + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { + if (!mRunningOnLoad) { + if (recipe.mSpecialValue > maxEUStore()) { + return CheckRecipeResultRegistry.insufficientStartupPower(recipe.mSpecialValue); + } + if (recipe.mEUt > GT_Values.V[tier()]) { + return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); + } + } + maxParallel = getMaxPara() * extraPara(recipe.mSpecialValue); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @NotNull + @Override + public CheckRecipeResult process() { + CheckRecipeResult result = super.process(); + if (mRunningOnLoad) mRunningOnLoad = false; + turnCasingActive(result.wasSuccessful()); + if (result.wasSuccessful()) { + mLastRecipe = lastRecipe; + } else { + mLastRecipe = null; + } + para = getCurrentParallels(); + return result; + } + }; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(GT_Values.V[tier()]); + logic.setAvailableAmperage(getSingleHatchPower() * 32 / GT_Values.V[tier()]); + } + + @Override + public void onRemoval() { + if (this.isLoadedChunk) GT_ChunkManager.releaseTicket((TileEntity) getBaseMetaTileEntity()); + super.onRemoval(); + } + + public int getChunkX() { + return getBaseMetaTileEntity().getXCoord() >> 4; + } + + public int getChunkZ() { + return getBaseMetaTileEntity().getZCoord() >> 4; + } + + private boolean addEnergyInjector(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy tHatch) { + if (tHatch.getTierForStructure() < hatchTier()) return false; + tHatch.updateTexture(aBaseCasingIndex); + return mEnergyHatches.add(tHatch); + } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti tHatch) { + if (tHatch.getTierForStructure() < hatchTier()) return false; + tHatch.updateTexture(aBaseCasingIndex); + return eEnergyMulti.add(tHatch); + } + return false; + } + + private boolean addFluidIO(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch hatch) { + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input tInput) { + if (tInput.getTierForStructure() < hatchTier()) return false; + tInput.mRecipeMap = getRecipeMap(); + return mInputHatches.add(tInput); + } + if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output tOutput) { + if (tOutput.getTierForStructure() < hatchTier()) return false; + return mOutputHatches.add(tOutput); + } + if (aMetaTileEntity instanceof IDualInputHatch tInput) { + tInput.updateCraftingIcon(this.getMachineCraftingIcon()); + return mDualInputHatches.add(tInput); + } + return false; + } + + @Override + public IStructureDefinition<LargeFusionComputer> getStructure_EM() { + return STRUCTURE_DEFINITION.get(getClass()); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + protected ResourceLocation getActivitySound() { + return SoundResource.GT_MACHINES_FUSION_LOOP.resourceLocation; + } + + @Override + public String[] getInfoData() { + IGregTechTileEntity baseMetaTileEntity = getBaseMetaTileEntity(); + String tier = switch (tier()) { + case 6 -> EnumChatFormatting.RED + "I" + EnumChatFormatting.RESET; + case 7 -> EnumChatFormatting.RED + "II" + EnumChatFormatting.RESET; + case 8 -> EnumChatFormatting.RED + "III" + EnumChatFormatting.RESET; + case 9 -> EnumChatFormatting.RED + "IV" + EnumChatFormatting.RESET; + default -> EnumChatFormatting.GOLD + "V" + EnumChatFormatting.RESET; + }; + double plasmaOut = 0; + if (mMaxProgresstime > 0) plasmaOut = (double) mOutputFluids[0].amount / mMaxProgresstime; + + return new String[] { EnumChatFormatting.BLUE + "Fusion Reactor MK " + EnumChatFormatting.RESET + tier, + StatCollector.translateToLocal("scanner.info.UX.0") + ": " + + EnumChatFormatting.LIGHT_PURPLE + + GT_Utility.formatNumbers(this.para) + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.fusion.req") + ": " + + EnumChatFormatting.RED + + GT_Utility.formatNumbers(-lEUt) + + EnumChatFormatting.RESET + + "EU/t", + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GT_Utility.formatNumbers(baseMetaTileEntity != null ? baseMetaTileEntity.getStoredEU() : 0) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GT_Utility.formatNumbers(maxEUStore()) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("GT5U.fusion.plasma") + ": " + + EnumChatFormatting.YELLOW + + GT_Utility.formatNumbers(plasmaOut) + + EnumChatFormatting.RESET + + "L/t" }; + } + + protected long energyStorageCache; + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + + screenElements + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocal("gui.LargeFusion.0") + " " + + numberFormat.format(energyStorageCache) + + " EU") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) + .widget(new FakeSyncWidget.LongSyncer(this::maxEUStore, val -> energyStorageCache = val)) + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocal("gui.LargeFusion.1") + " " + + numberFormat.format(getEUVar()) + + " EU") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) + .widget(new FakeSyncWidget.LongSyncer(this::getEUVar, this::setEUVar)); + } + + public static final String[] L0 = { " ", + " ", " FCCCCCF ", + " FCIBICF ", " FCCCCCF ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " FFF FFF ", + " CCC CCC ", " CIC CIC ", + " CBC CBC ", " CIC CIC ", + " CCC CCC ", " FFF FFF ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " FCCCCCF ", + " FCIBICF ", " FCCCCCF ", + " ", " ", }; + + public static final String[] L1 = { " ", + " FCBBBCF ", " CC CC ", + " CCCCC CCCCC ", " CCCCCCC CCCCCCC ", + " CCCCCCC FCBBBCF CCCCCCC ", " CCCCC CCCCC ", + " CCCC CCCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " FCCCF FCCCF ", + " C C C C ", " B B B B ", + " B B B B ", " B B B B ", + " C C C C ", " FCCCF FCCCF ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCCC CCCC ", " CCCCC CCCCC ", + " CCCCCCC FCBBBCF CCCCCCC ", " CCCCCCC CCCCCCC ", + " CCCCC CCCCC ", " CC CC ", + " FCBBBCF ", " ", }; + + public static final String[] L2 = { " FCCCCCF ", + " CC CC ", " CCCCC CCCCC ", + " CCCCCHHHHHHHHHCCCCC ", " CCCCHHHCC CCHHHCCCC ", + " CCCHHCCCCC CCCCCHHCCC ", " ECHHCCCCC FCCCCCF CCCCCHHCE ", + " CCHCCCC CCCCHCC ", " CCHCCC CCCHCC ", + " CCHCE ECHCC ", " ECHCC CCHCE ", + " CCHCE ECHCC ", " CCHCC CCHCC ", + " CCHCC CCHCC ", " CCHCC CCHCC ", + " CCHCC CCHCC ", " CCHCC CCHCC ", + " CCHCC CCHCC ", " CCHCC CCHCC ", + " CCHCC CCHCC ", "FCCHCCF FCCHCCF", + "C H C C H C", "C H C C H C", + "C H C C H C", "C H C C H C", + "C H C C H C", "FCCHCCF FCCHCCF", + " CCHCC CCHCC ", " CCHCC CCHCC ", + " CCHCC CCHCC ", " CCHCC CCHCC ", + " CCHCC CCHCC ", " CCHCC CCHCC ", + " CCHCC CCHCC ", " CCHCC CCHCC ", + " CCHCE ECHCC ", " ECHCC CCHCE ", + " CCHCE ECHCC ", " CCHCCC CCCHCC ", + " CCHCCCC CCCCHCC ", " ECHHCCCCC FCCCCCF CCCCCHHCE ", + " CCCHHCCCCC CCCCCHHCCC ", " CCCCHHHCC CCHHHCCCC ", + " CCCCCHHHHHHHHHCCCCC ", " CCCCC CCCCC ", + " CC CC ", " FCCCCCF ", }; + + public static final String[] L3 = { " FCIBICF ", + " CC CC ", " CCCHHHHHHHHHCCC ", + " CCHHHHHHHHHHHHHHHCC ", " CCHHHHHHHHHHHHHHHHHHHCC ", + " CHHHHHHHCC CCHHHHHHHC ", " CHHHHHCCC FCIBICF CCCHHHHHC ", + " CHHHHCC CCHHHHC ", " CHHHCC CCHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", "FCHHHCF FCHHHCF", + "C HHH C C HHH C", "I HHH I I HHH I", + "B HHH B B HHH B", "I HHH I I HHH I", + "C HHH C C HHH C", "FCHHHCF FCHHHCF", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHCC CCHHHC ", + " CHHHHCC CCHHHHC ", " CHHHHHCCC FCI~ICF CCCHHHHHC ", + " CHHHHHHHCC CCHHHHHHHC ", " CCHHHHHHHHHHHHHHHHHHHCC ", + " CCHHHHHHHHHHHHHHHCC ", " CCCHHHHHHHHHCCC ", + " CC CC ", " FCIBICF ", }; +} diff --git a/goodgen/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java new file mode 100644 index 0000000000..7d87e6fdd1 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java @@ -0,0 +1,53 @@ +package goodgenerator.blocks.tileEntity.base; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus; +import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; + +import gregtech.api.objects.overclockdescriber.OverclockDescriber; +import gregtech.api.util.AdvancedFusionOverclockDescriber; + +public abstract class LargeFusionComputerPP extends LargeFusionComputer { + + protected Parameters.Group.ParameterIn batchSetting; + + /** Name of the batch setting */ + private static final INameFunction<LargeFusionComputerPP> BATCH_SETTING_NAME = (base, + p) -> translateToLocal("gt.blockmachines.LargeFusionComputerPP.cfgi.0"); // Batch size + /** Status of the batch setting */ + private static final IStatusFunction<LargeFusionComputerPP> BATCH_STATUS = (base, p) -> LedStatus + .fromLimitsInclusiveOuterBoundary(p.get(), 1, 0, 32, 128); + + public LargeFusionComputerPP(String name) { + super(name); + } + + public LargeFusionComputerPP(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + protected OverclockDescriber createOverclockDescriber() { + return new AdvancedFusionOverclockDescriber((byte) tier(), capableStartupCanonical()); + } + + @Override + protected void parametersInstantiation_EM() { + batchSetting = parametrization.getGroup(9, false) + .makeInParameter(1, 1, BATCH_SETTING_NAME, BATCH_STATUS); + } + + @Override + protected int getMaxBatchSize() { + // Batch size 1~128 + return (int) Math.min(Math.max(batchSetting.get(), 1.0D), 128.0D); + } + + @Override + public boolean getDefaultBatchMode() { + return true; + } +} diff --git a/goodgen/src/main/java/goodgenerator/client/ClientProxy.java b/goodgen/src/main/java/goodgenerator/client/ClientProxy.java new file mode 100644 index 0000000000..b8a885cab6 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/client/ClientProxy.java @@ -0,0 +1,24 @@ +package goodgenerator.client; + +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import goodgenerator.common.CommonProxy; + +public class ClientProxy extends CommonProxy { + + @Override + public void preInit(FMLPreInitializationEvent event) { + super.preInit(event); + } + + @Override + public void init(FMLInitializationEvent event) { + super.init(event); + } + + @Override + public void postInit(FMLPostInitializationEvent event) { + super.postInit(event); + } +} diff --git a/goodgen/src/main/java/goodgenerator/client/GUI/GG_UITextures.java b/goodgen/src/main/java/goodgenerator/client/GUI/GG_UITextures.java new file mode 100644 index 0000000000..2b9bc8df84 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/client/GUI/GG_UITextures.java @@ -0,0 +1,22 @@ +package goodgenerator.client.GUI; + +import com.gtnewhorizons.modularui.api.drawable.UITexture; + +public class GG_UITextures { + + private static final String MODID = "goodgenerator"; + + public static final UITexture PICTURE_NAQUADAH_REACTOR = UITexture.fullImage(MODID, "gui/picture/naquadah_reactor"); + public static final UITexture PICTURE_NEUTRON_ACTIVATOR = UITexture + .fullImage(MODID, "gui/picture/neutron_activator"); + public static final UITexture PICTURE_EXTREME_HEAT_EXCHANGER = UITexture + .fullImage(MODID, "gui/picture/extreme_heat_exchanger"); + public static final UITexture PICTURE_COMPONENT_ASSLINE = UITexture + .fullImage(MODID, "gui/picture/component_assline"); + public static final UITexture OVERLAY_BUTTON_LOCK_OFF = UITexture.fullImage(MODID, "gui/overlay_button/lock_off"); + public static final UITexture OVERLAY_BUTTON_LOCK_ON = UITexture.fullImage(MODID, "gui/overlay_button/lock_on"); + public static final UITexture OVERLAY_BUTTON_ASSEMBLER_MODE = UITexture + .fullImage(MODID, "gui/overlay_button/assembler_mode"); + public static final UITexture OVERLAY_BUTTON_PRECISE_MODE = UITexture + .fullImage(MODID, "gui/overlay_button/precise_mode"); +} diff --git a/goodgen/src/main/java/goodgenerator/client/render/BlockRenderHandler.java b/goodgen/src/main/java/goodgenerator/client/render/BlockRenderHandler.java new file mode 100644 index 0000000000..01893339f5 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/client/render/BlockRenderHandler.java @@ -0,0 +1,135 @@ +package goodgenerator.client.render; + +import static gregtech.common.render.GT_Renderer_Block.*; +import static net.minecraftforge.common.util.ForgeDirection.*; +import static net.minecraftforge.common.util.ForgeDirection.EAST; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.world.IBlockAccess; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.client.registry.RenderingRegistry; +import goodgenerator.blocks.regularBlock.ITextureBlock; +import gregtech.GT_Mod; + +public class BlockRenderHandler implements ISimpleBlockRenderingHandler { + + public static final float blockMin = 0.0F; + public static final float blockMax = 1.0F; + public static BlockRenderHandler INSTANCE; + public final int mRenderID; + + public BlockRenderHandler() { + this.mRenderID = RenderingRegistry.getNextAvailableRenderId(); + INSTANCE = this; + RenderingRegistry.registerBlockHandler(this); + } + + @Override + public void renderInventoryBlock(Block aBlock, int metadata, int modelId, RenderBlocks aRenderer) { + aRenderer.enableAO = false; + aRenderer.useInventoryTint = true; + + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + + if (aBlock instanceof ITextureBlock) { + ITextureBlock tc = (ITextureBlock) aBlock; + aBlock.setBlockBoundsForItemRender(); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing(null, aRenderer, aBlock, 0, 0, 0, tc.getTexture(aBlock, metadata, DOWN), true); + renderPositiveYFacing(null, aRenderer, aBlock, 0, 0, 0, tc.getTexture(aBlock, metadata, UP), true); + renderNegativeZFacing(null, aRenderer, aBlock, 0, 0, 0, tc.getTexture(aBlock, metadata, NORTH), true); + renderPositiveZFacing(null, aRenderer, aBlock, 0, 0, 0, tc.getTexture(aBlock, metadata, SOUTH), true); + renderNegativeXFacing(null, aRenderer, aBlock, 0, 0, 0, tc.getTexture(aBlock, metadata, WEST), true); + renderPositiveXFacing(null, aRenderer, aBlock, 0, 0, 0, tc.getTexture(aBlock, metadata, EAST), true); + } + + aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, blockMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + aRenderer.useInventoryTint = false; + } + + @Override + public boolean renderWorldBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, int aModelID, + RenderBlocks aRenderer) { + aRenderer.enableAO = Minecraft.isAmbientOcclusionEnabled() && GT_Mod.gregtechproxy.mRenderTileAmbientOcclusion; + aRenderer.useInventoryTint = false; + if (aBlock instanceof ITextureBlock) { + aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, blockMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + ITextureBlock tc = (ITextureBlock) aBlock; + renderNegativeYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + tc.getTexture(aBlock, DOWN, aWorld, aX, aY, aZ), + true); + renderPositiveYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + tc.getTexture(aBlock, UP, aWorld, aX, aY, aZ), + true); + renderNegativeZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + tc.getTexture(aBlock, NORTH, aWorld, aX, aY, aZ), + true); + renderPositiveZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + tc.getTexture(aBlock, SOUTH, aWorld, aX, aY, aZ), + true); + renderNegativeXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + tc.getTexture(aBlock, WEST, aWorld, aX, aY, aZ), + true); + renderPositiveXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + tc.getTexture(aBlock, EAST, aWorld, aX, aY, aZ), + true); + } + return false; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return this.mRenderID; + } +} diff --git a/goodgen/src/main/java/goodgenerator/common/CommonProxy.java b/goodgen/src/main/java/goodgenerator/common/CommonProxy.java new file mode 100644 index 0000000000..05bf053bb7 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/common/CommonProxy.java @@ -0,0 +1,14 @@ +package goodgenerator.common; + +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; + +public class CommonProxy { + + public void preInit(FMLPreInitializationEvent event) {} + + public void init(FMLInitializationEvent event) {} + + public void postInit(FMLPostInitializationEvent event) {} +} diff --git a/goodgen/src/main/java/goodgenerator/crossmod/ic2/CropsLoader.java b/goodgen/src/main/java/goodgenerator/crossmod/ic2/CropsLoader.java new file mode 100644 index 0000000000..0c94742ddb --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/crossmod/ic2/CropsLoader.java @@ -0,0 +1,10 @@ +package goodgenerator.crossmod.ic2; + +import ic2.api.crops.Crops; + +public class CropsLoader { + + public static void registerCrops() { + Crops.instance.registerCrop(new GGCropsSaltyRoot("saltroot")); + } +} diff --git a/goodgen/src/main/java/goodgenerator/crossmod/ic2/GGCropsSaltyRoot.java b/goodgen/src/main/java/goodgenerator/crossmod/ic2/GGCropsSaltyRoot.java new file mode 100644 index 0000000000..b17959b44a --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/crossmod/ic2/GGCropsSaltyRoot.java @@ -0,0 +1,129 @@ +package goodgenerator.crossmod.ic2; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import goodgenerator.main.GoodGenerator; +import goodgenerator.util.ItemRefer; +import ic2.api.crops.CropCard; +import ic2.api.crops.ICropTile; +import speiger.src.crops.api.ICropCardInfo; + +public class GGCropsSaltyRoot extends CropCard implements ICropCardInfo { + + private final String cropName; + + public GGCropsSaltyRoot(String name) { + this.cropName = name; + } + + @Override + public String name() { + return cropName; + } + + @Override + public int tier() { + return 4; + } + + @Override + public int stat(int n) { + return 0; + } + + @Override + public String[] attributes() { + return new String[] { "Salt", "Gray", "Root", "Hydrophobic" }; + } + + @Override + public int maxSize() { + return 3; + } + + @Override + public boolean canGrow(ICropTile crop) { + return crop.getSize() < maxSize(); + } + + @Override + public int getOptimalHavestSize(ICropTile crop) { + return 3; + } + + @Override + public boolean canBeHarvested(ICropTile crop) { + return crop.getSize() == 3; + } + + @Override + public ItemStack getGain(ICropTile crop) { + return ItemRefer.Salty_Root.get(1); + } + + @Override + public String discoveredBy() { + return "GlodBlock"; + } + + @Override + public String owner() { + return GoodGenerator.MOD_ID; + } + + @Override + public String displayName() { + return StatCollector.translateToLocal( + "crops." + cropName.toLowerCase() + .replace(" ", "")); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerSprites(IIconRegister iconRegister) { + textures = new IIcon[maxSize()]; + for (int i = 1; i <= textures.length; i++) { + textures[i - 1] = iconRegister.registerIcon(GoodGenerator.MOD_ID + ":crops/" + name() + "." + i); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getSprite(ICropTile crop) { + if (crop.getSize() <= 0 || crop.getSize() > textures.length) return null; + return textures[crop.getSize() - 1]; + } + + @Override + public boolean canCross(ICropTile crop) { + return crop.getSize() > 1; + } + + @Override + public float dropGainChance() { + return 4.0F; + } + + @Override + public int weightInfluences(ICropTile crop, float humidity, float nutrients, float air) { + return (int) (-humidity + nutrients * 2 + air); + } + + @Override + public List<String> getCropInformation() { + return Arrays.asList("It prefers dry environment.", "Inedible."); + } + + @Override + public ItemStack getDisplayItem() { + return ItemRefer.Salty_Root.get(1); + } +} diff --git a/goodgen/src/main/java/goodgenerator/crossmod/nei/NEI_Config.java b/goodgen/src/main/java/goodgenerator/crossmod/nei/NEI_Config.java new file mode 100644 index 0000000000..e28f09885e --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/crossmod/nei/NEI_Config.java @@ -0,0 +1,38 @@ +package goodgenerator.crossmod.nei; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import codechicken.nei.api.API; +import codechicken.nei.api.IConfigureNEI; +import goodgenerator.main.GoodGenerator; + +public class NEI_Config implements IConfigureNEI { + + public static boolean isAdded = true; + + @Override + public void loadConfig() { + NEI_Config.isAdded = false; + NEI_Config.isAdded = true; + } + + public static void hide(Block aBlock) { + API.hideItem(new ItemStack(aBlock, 1)); + } + + public static void hide(Item aItem) { + API.hideItem(new ItemStack(aItem, 1)); + } + + @Override + public String getName() { + return "Good Generator NEI Plugin"; + } + + @Override + public String getVersion() { + return GoodGenerator.VERSION; + } +} diff --git a/goodgen/src/main/java/goodgenerator/crossmod/thaumcraft/LargeEssentiaEnergyData.java b/goodgen/src/main/java/goodgenerator/crossmod/thaumcraft/LargeEssentiaEnergyData.java new file mode 100644 index 0000000000..6d3249501e --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/crossmod/thaumcraft/LargeEssentiaEnergyData.java @@ -0,0 +1,146 @@ +package goodgenerator.crossmod.thaumcraft; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + +import thaumcraft.api.aspects.Aspect; + +public class LargeEssentiaEnergyData { + + public static final HashMap<Aspect, FuelData> ASPECT_FUEL_DATA = new HashMap<>(); + + public static String readJsonFile() { + try { + URL url = Thread.currentThread() + .getContextClassLoader() + .getResource("assets/goodgenerator/data/essentia.json"); + assert url != null; + BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8)); + String s; + StringBuilder sb = new StringBuilder(); + while ((s = in.readLine()) != null) { + sb.append(s); + } + in.close(); + return sb.toString(); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + public static void processEssentiaData() { + String data = readJsonFile(); + if (data == null) { + return; + } + JsonParser jsonParser = new JsonParser(); + JsonObject jsonObject = (JsonObject) jsonParser.parse(data); + JsonArray jsonArray = jsonObject.get("Essentia") + .getAsJsonArray(); + for (JsonElement elm : jsonArray) { + JsonObject essData = elm.getAsJsonObject(); + String aspectName = essData.get("name") + .getAsString(); + Aspect aspect = Aspect.getAspect(aspectName.toLowerCase()); + if (aspect != null) { + int fuel = essData.get("fuelValue") + .getAsInt(); + String cate = essData.get("category") + .getAsString(); + float ceo = essData.get("consumeCeo") + .getAsFloat(); + ASPECT_FUEL_DATA.put(aspect, new FuelData(fuel, cate, ceo)); + } + } + } + + public static int getAspectTypeIndex(Aspect aspect) { + if (ASPECT_FUEL_DATA.containsKey(aspect)) { + return ASPECT_FUEL_DATA.get(aspect) + .getCategoryIndex(); + } else return -1; + } + + public static String getAspectType(Aspect aspect) { + if (ASPECT_FUEL_DATA.containsKey(aspect)) { + return ASPECT_FUEL_DATA.get(aspect) + .getCategory(); + } else return null; + } + + public static int getAspectFuelValue(Aspect aspect) { + if (ASPECT_FUEL_DATA.containsKey(aspect)) { + return ASPECT_FUEL_DATA.get(aspect) + .getFuelValue(); + } else return 0; + } + + public static float getAspectCeo(Aspect aspect) { + if (ASPECT_FUEL_DATA.containsKey(aspect)) { + return ASPECT_FUEL_DATA.get(aspect) + .getConsumeSpeed(); + } else return 0; + } +} + +class FuelData { + + private final int fuelValue; + private final String category; + private final float consumeSpeed; + + FuelData(int basicValue, String cate, float ceo) { + fuelValue = basicValue; + category = cate; + consumeSpeed = ceo; + } + + public int getFuelValue() { + return fuelValue; + } + + public float getConsumeSpeed() { + return consumeSpeed; + } + + public String getCategory() { + return category; + } + + public int getCategoryIndex() { + switch (category) { + case "NORMAL": + return 0; + case "AIR": + return 1; + case "THERMAL": + return 2; + case "UNSTABLE": + return 3; + case "VICTUS": + return 4; + case "TAINTED": + return 5; + case "MECHANICS": + return 6; + case "SPRITE": + return 7; + case "RADIATION": + return 8; + case "ELECTRIC": + return 9; + default: + return -1; + } + } +} diff --git a/goodgen/src/main/java/goodgenerator/crossmod/thaumcraft/Research.java b/goodgen/src/main/java/goodgenerator/crossmod/thaumcraft/Research.java new file mode 100644 index 0000000000..5f18c20ae1 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/crossmod/thaumcraft/Research.java @@ -0,0 +1,673 @@ +package goodgenerator.crossmod.thaumcraft; + +import static gregtech.api.enums.Mods.Automagy; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.enums.Mods.ThaumicBases; +import static gregtech.api.enums.Mods.ThaumicEnergistics; +import static gregtech.api.enums.Mods.ThaumicTinkerer; +import static gregtech.api.enums.Mods.WitchingGadgets; +import static thaumcraft.api.ThaumcraftApi.addArcaneCraftingRecipe; + +import java.util.Arrays; +import java.util.Collections; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; +import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; + +import goodgenerator.util.DescTextLocalization; +import goodgenerator.util.ItemRefer; +import gregtech.api.GregTech_API; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TC_Aspects; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_OreDictUnificator; +import ic2.core.Ic2Items; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.common.config.ConfigBlocks; +import thaumcraft.common.config.ConfigItems; + +public class Research { + + public static void addResearch() { + DescTextLocalization.addText("research.ESSENTIA_GENERATOR.page", 4); + DescTextLocalization.addText("research.ESSENTIA_CELL.page", 1); + DescTextLocalization.addText("research.ESSENTIA_UPGRADE_BLANK.page", 1); + DescTextLocalization.addText("research.ESSENTIA_UPGRADE_AIR.page", 2); + DescTextLocalization.addText("research.ESSENTIA_UPGRADE_THERMAL.page", 3); + DescTextLocalization.addText("research.ESSENTIA_UPGRADE_UNSTABLE.page", 3); + DescTextLocalization.addText("research.ESSENTIA_UPGRADE_VICTUS.page", 3); + DescTextLocalization.addText("research.ESSENTIA_UPGRADE_TAINTED.page", 4); + DescTextLocalization.addText("research.ESSENTIA_UPGRADE_MECHANICS.page", 3); + DescTextLocalization.addText("research.ESSENTIA_UPGRADE_SPRITE.page", 3); + DescTextLocalization.addText("research.ESSENTIA_UPGRADE_RADIATION.page", 3); + DescTextLocalization.addText("research.ESSENTIA_UPGRADE_ELECTRIC.page", 2); + GregTech_API.sThaumcraftCompat.addResearch( + "ESSENTIA_GENERATOR", + "Combustion Engine in Magic World", + "Will it cause Flux pollution?", + new String[] { "INFUSION" }, + "ARTIFICE", + ItemRefer.Large_Essentia_Generator.get(1), + 3, + 0, + -9, + 3, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L)), + null, + new Object[] { "research.ESSENTIA_GENERATOR.page.0", + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_GENERATOR", + ItemList.Hull_HV.get(1), + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Advanced, 1L), + new ItemStack(ConfigBlocks.blockJar, 1), + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Thaumium, 1L), + GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Emerald, 1L), + new ItemStack(ConfigBlocks.blockWoodenDevice, 1), + GT_OreDictUnificator.get(OrePrefixes.spring, Materials.Manyullyn, 1L), Ic2Items.teslaCoil, + ItemList.Sensor_MV.get(1) }, + ItemRefer.Large_Essentia_Generator.get(1), + 6, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L), + new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), + new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 32), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 32))), + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_GENERATOR", + ItemList.Hatch_Input_HV.get(1), + new ItemStack[] { new ItemStack(ConfigBlocks.blockJar, 1), ItemRefer.Magic_Casing.get(1), + new ItemStack(ConfigBlocks.blockTube, 1), ItemList.Electric_Pump_MV.get(1L) }, + ItemRefer.Essentia_Hatch.get(1), + 6, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 64), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 32), + new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 32))), + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_GENERATOR", + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Thaumium, 1), + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Titanium, 1), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.ElectricalSteel, 1), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.ElectricalSteel, 1), + ItemList.Electric_Pump_EV.get(1L), new ItemStack(ConfigBlocks.blockTube, 1, 4), + new ItemStack(ConfigBlocks.blockCosmeticOpaque, 1, 2), }, + ItemRefer.Essentia_Cell_T1.get(1), + 4, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 32), + new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 32), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 16))), + addArcaneCraftingRecipe( + "ESSENTIA_GENERATOR", + ItemRefer.Magic_Casing.get(1), + new AspectList().add(Aspect.AIR, 50) + .add(Aspect.FIRE, 50) + .add(Aspect.ORDER, 50), + "SCS", + "GAG", + "SCS", + 'S', + new ItemStack(ConfigItems.itemResource, 1, 14), + 'C', + GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.Thaumium, 1), + 'G', + Ic2Items.reinforcedGlass, + 'A', + Ic2Items.advancedMachine), + "research.ESSENTIA_GENERATOR.page.1", "research.ESSENTIA_GENERATOR.page.2", + "research.ESSENTIA_GENERATOR.page.3" }); + GregTech_API.sThaumcraftCompat.addResearch( + "ESSENTIA_CELL", + "Better Cells", + "And higher efficiency.", + new String[] { "ESSENTIA_GENERATOR" }, + "ARTIFICE", + ItemRefer.Essentia_Cell_T4.get(1), + 2, + 0, + -10, + 3, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L)), + null, + new Object[] { "research.ESSENTIA_CELL.page.0", + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_CELL", + ItemRefer.Essentia_Cell_T1.get(1), + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 1), + ItemList.Electric_Pump_IV.get(1L), ItemList.QuantumStar.get(1L), + new ItemStack(ConfigBlocks.blockMetalDevice, 1, 3), ItemList.Reactor_Coolant_Sp_1.get(1L), + GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Plutonium241, 1), }, + ItemRefer.Essentia_Cell_T2.get(1), + 6, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 64), + new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 64), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 32))), + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_CELL", + ItemRefer.Essentia_Cell_T2.get(1), + new ItemStack[] { ItemList.Field_Generator_IV.get(1L), ItemList.Electric_Pump_LuV.get(1L), + new ItemStack(ConfigItems.itemResource, 1, 14), Ic2Items.fluidregulator, + new ItemStack(ConfigBlocks.blockJar, 1, 0), + GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Ichorium, 1) }, + ItemRefer.Essentia_Cell_T3.get(1), + 8, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 64))), + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_CELL", + ItemRefer.Essentia_Cell_T3.get(1), + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Europium, 1), + ItemList.Emitter_LuV.get(1L), new ItemStack(ItemRegistry.bw_realglas, 1, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StellarAlloy, 1), + GT_OreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Helium, 1), + new ItemStack(ConfigItems.itemShard, 1, 6), }, + ItemRefer.Essentia_Cell_T4.get(1), + 10, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 256), + new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 256), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 128))) }); + ItemStack broad = new ItemStack(ConfigBlocks.blockCosmeticSolid, 1, 6); + if (NewHorizonsCoreMod.isModLoaded()) broad = GT_ModHandler.getModItem("dreamcraft", "item.ArcaneSlate", 1); + GregTech_API.sThaumcraftCompat.addResearch( + "ESSENTIA_UPGRADE_BLANK", + "Upgrade your generator", + "Let's try some more dangerous essentia.", + new String[] { "ESSENTIA_GENERATOR" }, + "ARTIFICE", + ItemRefer.Essentia_Upgrade_Empty.get(1), + 2, + 0, + -9, + 4, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + null, + new Object[] { "research.ESSENTIA_UPGRADE_BLANK.page.0", + addArcaneCraftingRecipe( + "ESSENTIA_UPGRADE_BLANK", + ItemRefer.Essentia_Upgrade_Empty.get(1), + new AspectList().add(Aspect.AIR, 80) + .add(Aspect.ENTROPY, 50) + .add(Aspect.ORDER, 50) + .add(Aspect.WATER, 80), + "AMB", + "CZD", + "EIF", + 'A', + GT_OreDictUnificator.get(OrePrefixes.screw, Materials.InfusedAir, 1), + 'B', + GT_OreDictUnificator.get(OrePrefixes.screw, Materials.InfusedEarth, 1), + 'C', + GT_OreDictUnificator.get(OrePrefixes.screw, Materials.InfusedFire, 1), + 'D', + GT_OreDictUnificator.get(OrePrefixes.screw, Materials.InfusedWater, 1), + 'E', + GT_OreDictUnificator.get(OrePrefixes.screw, Materials.InfusedOrder, 1), + 'F', + GT_OreDictUnificator.get(OrePrefixes.screw, Materials.InfusedEntropy, 1), + 'M', + new ItemStack(ConfigItems.itemResource, 1, 10), + 'Z', + broad, + 'I', + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.PulsatingIron, 1)), }); + GregTech_API.sThaumcraftCompat.addResearch( + "ESSENTIA_UPGRADE_AIR", + "Essentia: AIR", + "I can feel it on the wind.", + new String[] { "ESSENTIA_UPGRADE_BLANK" }, + "ARTIFICE", + ItemRefer.Essentia_Upgrade_Air.get(1), + 1, + 0, + -9, + 5, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.AER, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + null, + new Object[] { "research.ESSENTIA_UPGRADE_AIR.page.0", GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_UPGRADE_AIR", + ItemRefer.Essentia_Upgrade_Empty.get(1), + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.cell, Materials.LiquidAir, 1), + GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 1), + GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Helium, 1), + GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Argon, 1), + WerkstoffLoader.Neon.get(OrePrefixes.cell, 1), WerkstoffLoader.Krypton.get(OrePrefixes.cell, 1), }, + ItemRefer.Essentia_Upgrade_Air.get(1), + 5, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.AER, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.VOLATUS, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 128))), + "research.ESSENTIA_UPGRADE_AIR.page.1" }); + GregTech_API.sThaumcraftCompat.addResearch( + "ESSENTIA_UPGRADE_THERMAL", + "Essentia: THERMAL", + "Melting down.", + new String[] { "ESSENTIA_UPGRADE_BLANK" }, + "ARTIFICE", + ItemRefer.Essentia_Upgrade_Thermal.get(1), + 1, + 0, + -10, + 5, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + null, + new Object[] { "research.ESSENTIA_UPGRADE_THERMAL.page.0", + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_UPGRADE_THERMAL", + ItemRefer.Essentia_Upgrade_Empty.get(1), + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Firestone, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Netherrack, 1), + Ic2Items.reactorPlatingHeat, ItemList.Casing_Coil_Nichrome.get(1), + new ItemStack(ConfigItems.itemResource, 1, 1), new ItemStack(ConfigItems.itemResource, 1, 0), }, + ItemRefer.Essentia_Upgrade_Thermal.get(1), + 5, + Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1024))), + "research.ESSENTIA_UPGRADE_THERMAL.page.1", "research.ESSENTIA_UPGRADE_THERMAL.page.2" }); + GregTech_API.sThaumcraftCompat.addResearch( + "ESSENTIA_UPGRADE_UNSTABLE", + "Essentia: UNSTABLE", + "Heart of chaos.", + new String[] { "ESSENTIA_UPGRADE_BLANK" }, + "ARTIFICE", + ItemRefer.Essentia_Upgrade_Unstable.get(1), + 1, + 0, + -11, + 5, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + null, + new Object[] { "research.ESSENTIA_UPGRADE_UNSTABLE.page.0", + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_UPGRADE_UNSTABLE", + ItemRefer.Essentia_Upgrade_Empty.get(1), + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.cell, Materials.GasolinePremium, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Unstable, 1), + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Void, 1), + GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEntropy, 1), Ic2Items.industrialTnt, + new ItemStack(ItemRegistry.DESTRUCTOPACK) }, + ItemRefer.Essentia_Upgrade_Unstable.get(1), + 6, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 128))), + "research.ESSENTIA_UPGRADE_UNSTABLE.page.1", "research.ESSENTIA_UPGRADE_UNSTABLE.page.2" }); + ItemStack meatDust = GT_OreDictUnificator.get(OrePrefixes.dust, Materials.MeatRaw, 1); + if (NewHorizonsCoreMod.isModLoaded()) meatDust = GT_ModHandler.getModItem("dreamcraft", "GTNHBioItems", 1, 2); + GregTech_API.sThaumcraftCompat.addResearch( + "ESSENTIA_UPGRADE_VICTUS", + "Essentia: VICTUS", + "Will it bleed?", + new String[] { "ESSENTIA_UPGRADE_BLANK" }, + "ARTIFICE", + ItemRefer.Essentia_Upgrade_Victus.get(1), + 1, + 0, + -12, + 5, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.VICTUS, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + null, + new Object[] { "research.ESSENTIA_UPGRADE_VICTUS.page.0", + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_UPGRADE_VICTUS", + ItemRefer.Essentia_Upgrade_Empty.get(1), + new ItemStack[] { meatDust, ItemList.Food_Dough_Sugar.get(1), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Calcium, 1), + new ItemStack(Item.getItemById(367), 1), new ItemStack(ConfigItems.itemResource, 1, 4), + new ItemStack(ConfigBlocks.blockMetalDevice, 1, 8), }, + ItemRefer.Essentia_Upgrade_Victus.get(1), + 5, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.VICTUS, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.SPIRITUS, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.HUMANUS, 128))), + "research.ESSENTIA_UPGRADE_VICTUS.page.1", "research.ESSENTIA_UPGRADE_VICTUS.page.2" }); + GregTech_API.sThaumcraftCompat.addResearch( + "ESSENTIA_UPGRADE_TAINTED", + "Essentia: TAINTED", + "Dirty Deeds Done Dirt Cheap", + new String[] { "ESSENTIA_UPGRADE_BLANK" }, + "ARTIFICE", + ItemRefer.Essentia_Upgrade_Tainted.get(1), + 1, + 0, + -13, + 5, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.MORTUUS, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + null, + new Object[] { "research.ESSENTIA_UPGRADE_TAINTED.page.0", "research.ESSENTIA_UPGRADE_TAINTED.page.1", + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_UPGRADE_TAINTED", + ItemRefer.Essentia_Upgrade_Empty.get(1), + new ItemStack[] { new ItemStack(ConfigBlocks.blockTaintFibres, 1, 0), + new ItemStack(ConfigBlocks.blockTaintFibres, 1, 2), + new ItemStack(ConfigItems.itemResource, 1, 11), + GT_OreDictUnificator.get(OrePrefixes.spring, Materials.NaquadahEnriched, 1), + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.EndSteel, 1), + new ItemStack(Block.getBlockById(138), 1), }, + ItemRefer.Essentia_Upgrade_Tainted.get(1), + 7, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.MORTUUS, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.EXANIMIS, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.VITIUM, 128))), + "research.ESSENTIA_UPGRADE_TAINTED.page.2", "research.ESSENTIA_UPGRADE_TAINTED.page.3" }); + GregTech_API.sThaumcraftCompat.addResearch( + "ESSENTIA_UPGRADE_MECHANICS", + "Essentia: MECHANICS", + "Driven by Ether.", + new String[] { "ESSENTIA_UPGRADE_BLANK" }, + "ARTIFICE", + ItemRefer.Essentia_Upgrade_Mechanics.get(1), + 1, + 0, + -14, + 5, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + null, + new Object[] { "research.ESSENTIA_UPGRADE_MECHANICS.page.0", + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_UPGRADE_MECHANICS", + ItemRefer.Essentia_Upgrade_Empty.get(1), + new ItemStack[] { new ItemStack(ConfigBlocks.blockTube, 1, 4), + new ItemStack(ConfigBlocks.blockTube, 1, 2), + GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.VividAlloy, 1), + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Polybenzimidazole, 1), + ItemList.Electric_Motor_IV.get(1), ItemList.Electric_Pump_IV.get(1), }, + ItemRefer.Essentia_Upgrade_Mechanics.get(1), + 5, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.LIMUS, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 128))), + "research.ESSENTIA_UPGRADE_MECHANICS.page.1", "research.ESSENTIA_UPGRADE_MECHANICS.page.2" }); + GregTech_API.sThaumcraftCompat.addResearch( + "ESSENTIA_UPGRADE_SPRITE", + "Essentia: SPRITE", + "Brain in a Machine.", + new String[] { "ESSENTIA_UPGRADE_BLANK" }, + "ARTIFICE", + ItemRefer.Essentia_Upgrade_Spirit.get(1), + 1, + 0, + -15, + 5, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + null, + new Object[] { "research.ESSENTIA_UPGRADE_SPRITE.page.0", GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_UPGRADE_SPRITE", + ItemRefer.Essentia_Upgrade_Empty.get(1), + new ItemStack[] { new ItemStack(ConfigBlocks.blockJar, 1, 1), + GT_OreDictUnificator.get(OrePrefixes.food, Materials.Cheese, 1), + GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Shadow, 1), + GT_OreDictUnificator.get(OrePrefixes.spring, Materials.FierySteel, 1), + GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Milk, 1), ItemList.Machine_EV_Scanner.get(1) }, + ItemRefer.Essentia_Upgrade_Spirit.get(1), + 5, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 128))), + "research.ESSENTIA_UPGRADE_SPRITE.page.1", "research.ESSENTIA_UPGRADE_SPRITE.page.2" }); + GregTech_API.sThaumcraftCompat.addResearch( + "ESSENTIA_UPGRADE_RADIATION", + "Essentia: RADIATION", + "Atomic Heart", + new String[] { "ESSENTIA_UPGRADE_BLANK" }, + "ARTIFICE", + ItemRefer.Essentia_Upgrade_Radiation.get(1), + 1, + 0, + -16, + 5, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + null, + new Object[] { "research.ESSENTIA_UPGRADE_RADIATION.page.0", + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_UPGRADE_RADIATION", + ItemRefer.Essentia_Upgrade_Empty.get(1), + new ItemStack[] { ItemRefer.High_Density_Plutonium.get(1), ItemRefer.High_Density_Uranium.get(1), + ItemRefer.High_Density_Thorium.get(1), Ic2Items.UranFuel, Ic2Items.MOXFuel, + WerkstoffLoader.Tiberium.get(OrePrefixes.gem, 1) }, + ItemRefer.Essentia_Upgrade_Radiation.get(1), + 8, + Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1024))), + "research.ESSENTIA_UPGRADE_RADIATION.page.1", "research.ESSENTIA_UPGRADE_RADIATION.page.2" }); + GregTech_API.sThaumcraftCompat.addResearch( + "ESSENTIA_UPGRADE_ELECTRIC", + "Essentia: ELECTRIC", + "Get electricity from... electricity?", + new String[] { "ESSENTIA_UPGRADE_AIR", "ESSENTIA_UPGRADE_THERMAL", "ESSENTIA_UPGRADE_UNSTABLE", + "ESSENTIA_UPGRADE_VICTUS", "ESSENTIA_UPGRADE_TAINTED", "ESSENTIA_UPGRADE_MECHANICS", + "ESSENTIA_UPGRADE_SPRITE", "ESSENTIA_UPGRADE_RADIATION" }, + "ARTIFICE", + ItemRefer.Essentia_Upgrade_Electric.get(1), + 1, + 0, + -12, + 7, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), + new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + null, + new Object[] { "research.ESSENTIA_UPGRADE_ELECTRIC.page.0", + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_UPGRADE_RADIATION", + ItemRefer.Essentia_Upgrade_Empty.get(1), + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorMV, 1), + GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorHV, 1), + GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorEV, 1), + GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorIV, 1), + GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 1), + GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 1) }, + ItemRefer.Essentia_Upgrade_Electric.get(1), + 10, + Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32768))), + "research.ESSENTIA_UPGRADE_ELECTRIC.page.1" }); + + ItemStack nodeLinkDevice = ThaumicBases.isModLoaded() + ? GT_ModHandler.getModItem("thaumicbases", "nodeLinker", 1, 0) + : new ItemStack(ConfigBlocks.blockStoneDevice, 1, 11); + ItemStack alchemicalFurnace = ThaumicBases.isModLoaded() + ? GT_ModHandler.getModItem("thaumicbases", "advAlchFurnace", 1, 0) + : new ItemStack(ConfigBlocks.blockStoneDevice, 1, 0); + ItemStack nitor = ThaumicTinkerer.isModLoaded() + ? GT_ModHandler.getModItem("ThaumicTinkerer", "brightNitor", 1, 0) + : new ItemStack(ConfigItems.itemResource, 1, 1); + ItemStack alchemicalBoiler = Automagy.isModLoaded() ? GT_ModHandler.getModItem("Automagy", "blockBoiler", 1, 0) + : new ItemStack(ConfigBlocks.blockStoneDevice, 1, 1); + ItemStack essentiaLocus = Automagy.isModLoaded() + ? GT_ModHandler.getModItem("Automagy", "blockEssentiaLocus", 1, 0) + : new ItemStack(ConfigBlocks.blockJar, 1, 1); + ItemStack thauminiteBlock = ThaumicBases.isModLoaded() + ? GT_ModHandler.getModItem("thaumicbases", "thauminiteBlock", 1, 0) + : new ItemStack(ConfigBlocks.blockCosmeticSolid, 1, 4); + GregTech_API.sThaumcraftCompat + .addResearch( + "ESSENTIA_SMELTERY", + "Large Essentia Smeltery", + "You need a bigger boat.", + new String[] { "INFUSION" }, + "ARTIFICE", + ItemRefer.Large_Essentia_Smeltery.get(1), + 4, + 0, + -16, + 3, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 10), + new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 10), + new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 10), + new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 10), + new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 10), + new TC_Aspects.TC_AspectStack(TC_Aspects.LIMUS, 10)), + null, + new Object[] { "research.ESSENTIA_SMELTERY.page.0", + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_SMELTERY", + ItemList.Casing_Firebox_TungstenSteel.get(1), + new ItemStack[] { nodeLinkDevice, nitor, alchemicalFurnace, essentiaLocus, alchemicalBoiler, + new ItemStack(ConfigBlocks.blockCrystal, 1, 1), + new ItemStack(ConfigBlocks.blockMetalDevice, 1, 3), ItemList.Electric_Piston_IV.get(1), + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.FierySteel, 1L), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Elite, 1L), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Elite, 1L), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Elite, 1L), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Elite, 1L) }, + ItemRefer.Large_Essentia_Smeltery.get(1), + 16, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 256), + new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 256), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 256), + new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 256), + new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 256), + new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 256))), + "research.ESSENTIA_SMELTERY.page.1", + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_GENERATOR", + ItemList.Hatch_Output_HV.get(1), + new ItemStack[] { new ItemStack(ConfigBlocks.blockJar, 1), ItemRefer.Magic_Casing.get(1), + new ItemStack(ConfigBlocks.blockTube, 1), ItemList.Electric_Pump_MV.get(1L) }, + ItemRefer.Essentia_Output_Hatch.get(1), + 6, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 128), + new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 64), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 32), + new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 32))), + "research.ESSENTIA_SMELTERY.page.2", + addArcaneCraftingRecipe( + "ESSENTIA_SMELTERY", + ItemRefer.Essentia_Filter_Casing.get(1), + new AspectList().add(Aspect.AIR, 70) + .add(Aspect.EARTH, 70) + .add(Aspect.FIRE, 70) + .add(Aspect.WATER, 70) + .add(Aspect.ORDER, 70) + .add(Aspect.ENTROPY, 70), + "ABA", + "CDC", + "EFE", + 'A', + new ItemStack(ConfigBlocks.blockTube, 1, 3), + 'B', + new ItemStack(ConfigBlocks.blockStoneDevice, 1, 14), + 'C', + GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Void, 1), + 'D', + new ItemStack(GregTech_API.sBlockCasings3, 1, 11), + 'E', + GT_OreDictUnificator.get(OrePrefixes.pipeSmall, Materials.NetherStar, 1), + 'F', + thauminiteBlock) }); + + if (ThaumicEnergistics.isModLoaded()) { + ItemStack essentiaPump = WitchingGadgets.isModLoaded() + ? GT_ModHandler.getModItem("WitchingGadgets", "WG_MetalDevice", 1, 0) + : new ItemStack(ConfigBlocks.blockTube, 1, 4); + ItemStack inter = ThaumicTinkerer.isModLoaded() + ? GT_ModHandler.getModItem("ThaumicTinkerer", "interface", 1, 0) + : new ItemStack(ConfigItems.itemResource, 1, 15); + GregTech_API.sThaumcraftCompat.addResearch( + "ESSENTIA_OUTPUT_HATCH_ME", + "Essentia Output Hatch (ME)", + "It must exist.", + new String[] { "INFUSION" }, + "ARTIFICE", + ItemRefer.Essentia_Output_Hatch_ME.get(1), + 3, + 0, + -15, + 3, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 10), + new TC_Aspects.TC_AspectStack(TC_Aspects.VINCULUM, 10), + new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 10), + new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 10), + new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10)), + null, + new Object[] { "research.ESSENTIA_OUTPUT_HATCH_ME.page.0", + GregTech_API.sThaumcraftCompat.addInfusionRecipe( + "ESSENTIA_OUTPUT_HATCH_ME", + ItemRefer.Essentia_Output_Hatch.get(1), + new ItemStack[] { + GT_ModHandler + .getModItem("thaumicenergistics", "thaumicenergistics.block.essentia.provider", 1), + new ItemStack(ConfigBlocks.blockEssentiaReservoir, 1, 0), essentiaPump, inter, }, + ItemRefer.Essentia_Output_Hatch_ME.get(1), + 8, + Arrays.asList( + new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 256), + new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 256), + new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 256), + new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 256))) }); + } + } +} diff --git a/goodgen/src/main/java/goodgenerator/items/DepletedFuelRod.java b/goodgen/src/main/java/goodgenerator/items/DepletedFuelRod.java new file mode 100644 index 0000000000..308f149933 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/items/DepletedFuelRod.java @@ -0,0 +1,54 @@ +package goodgenerator.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; + +import ic2.api.item.IBoxable; +import ic2.api.reactor.IReactor; +import ic2.api.reactor.IReactorComponent; + +public class DepletedFuelRod extends RadioactiveItem implements IReactorComponent, IBoxable { + + public DepletedFuelRod(String name, String[] tooltip, CreativeTabs Tab, int Rad) { + super(name, tooltip, Tab, Rad); + } + + @Override + public boolean canBeStoredInToolbox(ItemStack itemStack) { + return true; + } + + @Override + public void processChamber(IReactor iReactor, ItemStack itemStack, int i, int i1, boolean b) {} + + @Override + public boolean acceptUraniumPulse(IReactor iReactor, ItemStack itemStack, ItemStack itemStack1, int i, int i1, + int i2, int i3, boolean b) { + return false; + } + + @Override + public boolean canStoreHeat(IReactor iReactor, ItemStack itemStack, int i, int i1) { + return false; + } + + @Override + public int getMaxHeat(IReactor iReactor, ItemStack itemStack, int i, int i1) { + return 0; + } + + @Override + public int getCurrentHeat(IReactor iReactor, ItemStack itemStack, int i, int i1) { + return 0; + } + + @Override + public int alterHeat(IReactor iReactor, ItemStack itemStack, int i, int i1, int i2) { + return 0; + } + + @Override + public float influenceExplosion(IReactor iReactor, ItemStack itemStack) { + return 0; + } +} diff --git a/goodgen/src/main/java/goodgenerator/items/FuelRod.java b/goodgen/src/main/java/goodgenerator/items/FuelRod.java new file mode 100644 index 0000000000..00ca8b3491 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/items/FuelRod.java @@ -0,0 +1,215 @@ +package goodgenerator.items; + +import static goodgenerator.util.DescTextLocalization.addText; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.util.GT_Utility; +import ic2.api.item.IBoxable; +import ic2.api.reactor.IReactor; +import ic2.api.reactor.IReactorComponent; +import ic2.core.util.StackUtil; +import ic2.core.util.Util; + +public class FuelRod extends RadioactiveItem implements IReactorComponent, IBoxable { + + private final int numberOfCells; + private final int maxDmg; + private final float Power; + private final int Heat; + private float HeatBonus = 0; + private final ItemStack result; + + public FuelRod(String aName, int aCells, int aEUt, int aHeat, int aRads, int aDuration, ItemStack aResult, + CreativeTabs Tab) { + super(aName, Tab, aRads); + this.setMaxStackSize(64); + this.numberOfCells = aCells; + this.maxDmg = aDuration; + this.Power = (float) aEUt / 25.0F; + this.result = aResult; + this.Heat = aHeat; + setMaxDamage(100); + } + + public FuelRod(String aName, int aCells, int aEUt, int aHeat, int aRads, int aDuration, float aHeatBonus, + ItemStack aResult, CreativeTabs Tab) { + super(aName, Tab, aRads); + this.setMaxStackSize(64); + this.numberOfCells = aCells; + this.maxDmg = aDuration; + this.Power = (float) aEUt / 25.0F; + this.result = aResult; + this.Heat = aHeat; + this.HeatBonus = aHeatBonus; + setMaxDamage(100); + } + + public void processChamber(IReactor reactor, ItemStack stack, int x, int y, boolean heatRun) { + if (reactor.produceEnergy()) { + for (int iteration = 0; iteration < this.numberOfCells; ++iteration) { + int pulses = 1 + this.numberOfCells / 2; + int heat; + if (!heatRun) { + for (heat = 0; heat < pulses; ++heat) { + this.acceptUraniumPulse(reactor, stack, stack, x, y, x, y, heatRun); + } + checkPulseable(reactor, x - 1, y, stack, x, y, heatRun); + checkPulseable(reactor, x + 1, y, stack, x, y, heatRun); + checkPulseable(reactor, x, y - 1, stack, x, y, heatRun); + checkPulseable(reactor, x, y + 1, stack, x, y, heatRun); + } else { + pulses += checkPulseable(reactor, x - 1, y, stack, x, y, heatRun) + + checkPulseable(reactor, x + 1, y, stack, x, y, heatRun) + + checkPulseable(reactor, x, y - 1, stack, x, y, heatRun) + + checkPulseable(reactor, x, y + 1, stack, x, y, heatRun); + heat = sumUp(pulses) * this.Heat; + ArrayList<FuelRod.ItemStackCoord> heatAcceptors = new ArrayList<>(); + this.checkHeatAcceptor(reactor, x - 1, y, heatAcceptors); + this.checkHeatAcceptor(reactor, x + 1, y, heatAcceptors); + this.checkHeatAcceptor(reactor, x, y - 1, heatAcceptors); + this.checkHeatAcceptor(reactor, x, y + 1, heatAcceptors); + + while (heatAcceptors.size() > 0 && heat > 0) { + int dheat = heat / heatAcceptors.size(); + heat -= dheat; + dheat = ((IReactorComponent) heatAcceptors.get(0).stack.getItem()).alterHeat( + reactor, + heatAcceptors.get(0).stack, + heatAcceptors.get(0).x, + heatAcceptors.get(0).y, + dheat); + heat += dheat; + heatAcceptors.remove(0); + } + + if (heat > 0) { + reactor.addHeat(heat); + } + } + } + if (this.getCustomDamage(stack) >= this.getMaxCustomDamage(stack) - 1) { + reactor.setItemAt(x, y, GT_Utility.copyAmount(1, result)); + } else if (heatRun) { + this.applyCustomDamage(stack, 1, null); + } + } + } + + private static int checkPulseable(IReactor reactor, int x, int y, ItemStack me, int mex, int mey, boolean heatrun) { + ItemStack other = reactor.getItemAt(x, y); + return other != null && other.getItem() instanceof IReactorComponent + && ((IReactorComponent) other.getItem()).acceptUraniumPulse(reactor, other, me, x, y, mex, mey, heatrun) ? 1 + : 0; + } + + private static int sumUp(int x) { + return (x * x + x) / 2; + } + + private void checkHeatAcceptor(IReactor reactor, int x, int y, ArrayList<FuelRod.ItemStackCoord> heatAcceptors) { + ItemStack thing = reactor.getItemAt(x, y); + if (thing != null && thing.getItem() instanceof IReactorComponent + && ((IReactorComponent) thing.getItem()).canStoreHeat(reactor, thing, x, y)) { + heatAcceptors.add(new ItemStackCoord(thing, x, y)); + } + } + + public boolean acceptUraniumPulse(IReactor reactor, ItemStack yourStack, ItemStack pulsingStack, int youX, int youY, + int pulseX, int pulseY, boolean heatrun) { + if (!heatrun) { + reactor.addOutput(Power * (1 + HeatBonus * ((float) reactor.getHeat() / (float) reactor.getMaxHeat()))); + } + return true; + } + + public boolean canStoreHeat(IReactor reactor, ItemStack yourStack, int x, int y) { + return false; + } + + public int getMaxHeat(IReactor reactor, ItemStack yourStack, int x, int y) { + return 0; + } + + public int getCurrentHeat(IReactor reactor, ItemStack yourStack, int x, int y) { + return 0; + } + + public int alterHeat(IReactor reactor, ItemStack yourStack, int x, int y, int heat) { + return heat; + } + + public float influenceExplosion(IReactor reactor, ItemStack yourStack) { + return (float) (2 * this.numberOfCells); + } + + @Override + public boolean canBeStoredInToolbox(ItemStack itemStack) { + return true; + } + + private static class ItemStackCoord { + + public ItemStack stack; + public int x; + public int y; + + public ItemStackCoord(ItemStack stack1, int x1, int y1) { + this.stack = stack1; + this.x = x1; + this.y = y1; + } + } + + public int getCustomDamage(ItemStack stack) { + NBTTagCompound nbt = StackUtil.getOrCreateNbtData(stack); + return nbt.getInteger("advDmg"); + } + + public int getMaxCustomDamage(ItemStack stack) { + return this.maxDmg; + } + + public void setCustomDamage(ItemStack stack, int damage) { + NBTTagCompound nbt = StackUtil.getOrCreateNbtData(stack); + nbt.setInteger("advDmg", damage); + int maxStackDamage = stack.getMaxDamage(); + if (maxStackDamage > 2) { + stack.setItemDamage(1 + (int) Util.map(damage, this.maxDmg, maxStackDamage - 2)); + } + } + + public boolean applyCustomDamage(ItemStack stack, int damage, EntityLivingBase src) { + this.setCustomDamage(stack, this.getCustomDamage(stack) + damage); + return true; + } + + @SideOnly(Side.CLIENT) + @SuppressWarnings("unchecked") + @Override + public void addInformation(ItemStack item, EntityPlayer player, List tooltip, boolean p_77624_4_) { + super.addInformation(item, player, tooltip, p_77624_4_); + tooltip.add( + String.format( + addText("fuelrod.tooltip", 1)[0], + getMaxCustomDamage(item) - getCustomDamage(item), + getMaxCustomDamage(item))); + double tMut = this.Heat / 4.0; + if (this.Heat == 4) { + tooltip.add(StatCollector.translateToLocal("fuelrodheat.tooltip.0")); + } else { + tooltip.add(String.format(StatCollector.translateToLocal("fuelrodheat.tooltip.1"), tMut)); + } + if (this.HeatBonus != 0) tooltip.add(StatCollector.translateToLocal("fuelrodheat.tooltip.2")); + } +} diff --git a/goodgen/src/main/java/goodgenerator/items/MyItemBlocks.java b/goodgen/src/main/java/goodgenerator/items/MyItemBlocks.java new file mode 100644 index 0000000000..3ee7347e97 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/items/MyItemBlocks.java @@ -0,0 +1,105 @@ +package goodgenerator.items; + +import static goodgenerator.loader.Loaders.essentiaCell; +import static goodgenerator.loader.Loaders.yottaFluidTankCell; +import static goodgenerator.util.CharExchanger.tierName; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import goodgenerator.blocks.regularBlock.TEBlock; +import goodgenerator.blocks.tileEntity.EssentiaOutputHatch; +import goodgenerator.main.GoodGenerator; +import goodgenerator.util.CharExchanger; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.util.GT_LanguageManager; + +public class MyItemBlocks extends ItemBlock { + + private final String mNoMobsToolTip = GT_LanguageManager + .addStringLocalization("gt.nomobspawnsonthisblock", "Mobs cannot Spawn on this Block"); + private final String mNoTileEntityToolTip = GT_LanguageManager + .addStringLocalization("gt.notileentityinthisblock", "This is NOT a TileEntity!"); + + public MyItemBlocks(Block block) { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setCreativeTab(GoodGenerator.GG); + } + + @Override + public int getMetadata(int aMeta) { + return aMeta; + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return this.field_150939_a.getUnlocalizedName() + "." + this.getDamage(aStack); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(ItemStack stack, int pass) { + return this.field_150939_a.getIcon(0, stack.getItemDamage()); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) { + return this.getIcon(stack, renderPass); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamageForRenderPass(int p_77618_1_, int p_77618_2_) { + return this.field_150939_a.getIcon(0, p_77618_2_); + } + + @Override + @SuppressWarnings({ "unchecked" }) + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer playerIn, List tooltip, boolean advanced) { + if (stack == null) return; + tooltip.add(mNoMobsToolTip); + if (Block.getBlockFromItem(stack.getItem()) instanceof TEBlock) { + TEBlock tile = (TEBlock) Block.getBlockFromItem(stack.getItem()); + if (tile.getIndex() == 1) + tooltip.addAll(Arrays.asList(DescTextLocalization.addText("EssentiaHatch.tooltip", 2))); + if (tile.getIndex() == 2) { + tooltip.add(StatCollector.translateToLocal("EssentiaOutputHatch.tooltip.0")); + tooltip.add( + StatCollector.translateToLocal("EssentiaOutputHatch.tooltip.1") + " " + + EssentiaOutputHatch.CAPACITY); + } + } else { + tooltip.add(mNoTileEntityToolTip); + } + + if (Block.getBlockFromItem(stack.getItem()) + .equals(yottaFluidTankCell)) { + StringBuilder cap = new StringBuilder(); + cap.append(" 1000000"); + for (int i = 0; i < stack.getItemDamage(); i++) cap.append("00"); + cap.append(" L"); + tooltip.add( + StatCollector.translateToLocal("YOTTankCell.tooltip.0") + CharExchanger.formatNumber(cap.toString())); + tooltip.add(StatCollector.translateToLocal("YOTTankCell.tooltip.1")); + } + + if (Block.getBlockFromItem(stack.getItem()) + .equals(essentiaCell)) { + tooltip + .add(StatCollector.translateToLocal("hatchTier.tooltip.0") + " " + tierName[stack.getItemDamage() + 4]); + } + } +} diff --git a/goodgen/src/main/java/goodgenerator/items/MyItems.java b/goodgen/src/main/java/goodgenerator/items/MyItems.java new file mode 100644 index 0000000000..71a67d4fd6 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/items/MyItems.java @@ -0,0 +1,127 @@ +package goodgenerator.items; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import goodgenerator.main.GoodGenerator; + +public class MyItems extends Item { + + @SideOnly(Side.CLIENT) + protected IIcon[] texture; + + private String tex; + private String[] textureNames; + private final String Name; + private List<String> tooltips = new ArrayList<>(); + private List<String> tooltipses = new ArrayList<>(); + + public MyItems(String name, CreativeTabs Tab) { + this.setUnlocalizedName(name); + this.setCreativeTab(Tab); + this.tex = name; + this.Name = name; + } + + public MyItems(String name, CreativeTabs Tab, String[] textures) { + this.setUnlocalizedName(name); + this.setCreativeTab(Tab); + this.setHasSubtypes(true); + this.textureNames = textures; + this.Name = name; + } + + public MyItems(String name, String[] tooltip, CreativeTabs Tab, String[] textures) { + this.setUnlocalizedName(name); + this.setCreativeTab(Tab); + this.setHasSubtypes(true); + this.textureNames = textures; + this.Name = name; + this.tooltipses = Arrays.asList(tooltip); + } + + public MyItems(String name, String tooltip, CreativeTabs Tab) { + this.setUnlocalizedName(name); + this.setCreativeTab(Tab); + this.tex = name; + this.tooltips.add(tooltip); + this.Name = name; + } + + public MyItems(String name, String[] tooltip, CreativeTabs Tab) { + this.setUnlocalizedName(name); + this.setCreativeTab(Tab); + this.tex = name; + this.tooltips = Arrays.asList(tooltip); + this.Name = name; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int meta) { + if (this.texture == null || this.texture.length < 1) return this.itemIcon; + else return meta < this.texture.length ? this.texture[meta] : this.texture[0]; + } + + @Override + public int getMetadata(int aMeta) { + return aMeta; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + if (this.textureNames == null || this.textureNames.length < 1) { + this.itemIcon = iconRegister.registerIcon(GoodGenerator.MOD_ID + ":" + this.tex); + } else { + this.texture = new IIcon[this.textureNames.length]; + for (int i = 0; i < this.textureNames.length; ++i) { + this.texture[i] = iconRegister.registerIcon(this.textureNames[i]); + } + } + } + + @Override + public String getUnlocalizedName(ItemStack p_77667_1_) { + if (this.textureNames == null || this.textureNames.length < 1) { + return "item." + this.Name; + } else { + return "item." + this.Name + "." + p_77667_1_.getItemDamage(); + } + } + + @Override + @SideOnly(Side.CLIENT) + @SuppressWarnings("unchecked") + public void getSubItems(Item item, CreativeTabs tab, List list) { + if (this.texture == null || this.texture.length < 1) list.add(new ItemStack(item, 1, 0)); + else { + for (int i = 0; i < this.texture.length; ++i) { + list.add(new ItemStack(item, 1, i)); + } + } + } + + @SideOnly(Side.CLIENT) + @SuppressWarnings({ "unchecked" }) + public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List p_77624_3_, boolean p_77624_4_) { + if (tooltips.size() > 0) { + p_77624_3_.addAll(tooltips); + } + if (tooltipses.size() > 0) { + int meta = p_77624_1_.getItemDamage(); + if (tooltipses.size() - 1 < meta) meta = tooltipses.size() - 1; + p_77624_3_.add(tooltipses.get(meta)); + } + } +} diff --git a/goodgen/src/main/java/goodgenerator/items/MyMaterial.java b/goodgen/src/main/java/goodgenerator/items/MyMaterial.java new file mode 100644 index 0000000000..1e75167ef0 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/items/MyMaterial.java @@ -0,0 +1,1524 @@ +package goodgenerator.items; + +import static com.github.bartimaeusnek.bartworks.util.BW_Util.subscriptNumbers; +import static gregtech.api.enums.Materials.*; + +import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; +import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; +import com.github.bartimaeusnek.bartworks.util.Pair; + +import goodgenerator.util.CharExchanger; +import gregtech.api.enums.TextureSet; + +@SuppressWarnings({ "unchecked" }) +public class MyMaterial implements Runnable { + + protected static final int OffsetID = 10001; + + // Uranium Based Fuel Line + public static final Werkstoff graphiteUraniumMixture = new Werkstoff( + new short[] { 0x3a, 0x77, 0x3d }, + "Graphite-Uranium Mixture", + subscriptNumbers("C3U"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addMixerRecipes() + .onlyDust(), + OffsetID, + TextureSet.SET_DULL, + new Pair<>(Graphite, 3), + new Pair<>(Uranium, 1)); + + public static final Werkstoff uraniumBasedLiquidFuel = new Werkstoff( + new short[] { 0x00, 0xff, 0x00 }, + "Uranium Based Liquid Fuel", + subscriptNumbers("U36K8Qt4Rn"), + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 1, + TextureSet.SET_FLUID); + + public static final Werkstoff uraniumBasedLiquidFuelExcited = new Werkstoff( + new short[] { 0x00, 0xff, 0x00 }, + "Uranium Based Liquid Fuel (Excited State)", + subscriptNumbers("*(U36K8Qt4Rn)*"), + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 2, + TextureSet.SET_FLUID); + + public static final Werkstoff uraniumBasedLiquidFuelDepleted = new Werkstoff( + new short[] { 0x6e, 0x8b, 0x3d }, + "Uranium Based Liquid Fuel (Depleted)", + subscriptNumbers("Pb?Bi?Ba?Xe?"), + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 3, + TextureSet.SET_FLUID); + + // Thorium Based Fuel + public static final Werkstoff uraniumCarbideThoriumMixture = new Werkstoff( + new short[] { 0x16, 0x32, 0x07 }, + "Uranium Carbide-Thorium Mixture", + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addMixerRecipes() + .onlyDust(), + OffsetID + 4, + TextureSet.SET_DULL, + new Pair<>(Thorium, 11), + new Pair<>(WerkstoffLoader.Thorium232, 1), + new Pair<>(Uranium235, 1), + new Pair<>(Carbon, 3)); + + public static final Werkstoff thoriumBasedLiquidFuel = new Werkstoff( + new short[] { 0x50, 0x32, 0x66 }, + "Thorium Based Liquid Fuel", + subscriptNumbers("Th432Li4D2Hg"), + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 5, + TextureSet.SET_FLUID); + + public static final Werkstoff thoriumBasedLiquidFuelExcited = new Werkstoff( + new short[] { 0x50, 0x32, 0x66 }, + "Thorium Based Liquid Fuel (Excited State)", + subscriptNumbers("*(Th432Li4D2Hg)*"), + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 6, + TextureSet.SET_FLUID); + + public static final Werkstoff thoriumBasedLiquidFuelDepleted = new Werkstoff( + new short[] { 0x7d, 0x6c, 0x8a }, + "Thorium Based Liquid Fuel (Depleted)", + subscriptNumbers("Th?Pr?B?In?"), + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 7, + TextureSet.SET_FLUID); + + // Plutonium Based Fuel + public static final Werkstoff plutoniumOxideUraniumMixture = new Werkstoff( + new short[] { 0xd1, 0x1f, 0x4a }, + "Plutonium Oxide-Uranium Mixture", + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addMixerRecipes() + .onlyDust(), + OffsetID + 8, + TextureSet.SET_SHINY, + new Pair<>(Plutonium, 10), + new Pair<>(Oxygen, 12), + new Pair<>(Uranium, 2), + new Pair<>(Carbon, 8)); + + public static final Werkstoff plutoniumBasedLiquidFuel = new Werkstoff( + new short[] { 0xef, 0x15, 0x15 }, + "Plutonium Based Liquid Fuel", + subscriptNumbers("Pu45Nt8Cs16Nq2"), + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 9, + TextureSet.SET_FLUID); + + public static final Werkstoff plutoniumBasedLiquidFuelExcited = new Werkstoff( + new short[] { 0xef, 0x15, 0x15 }, + "Plutonium Based Liquid Fuel (Excited State)", + subscriptNumbers("*(Pu45Nt8Cs16Nq2)*"), + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 10, + TextureSet.SET_FLUID); + + public static final Werkstoff plutoniumBasedLiquidFuelDepleted = new Werkstoff( + new short[] { 0x67, 0x19, 0x19 }, + "Plutonium Based Liquid Fuel (Depleted)", + subscriptNumbers("Tn?Ce?Au?Kr?"), + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 11, + TextureSet.SET_FLUID); + + // Thorium-233 + public static final Werkstoff oxalate = new Werkstoff( + new short[] { 0x79, 0xd8, 0x55 }, + "Oxalate", + Werkstoff.Types.BIOLOGICAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 12, + TextureSet.SET_FLUID, + new Pair<>(Hydrogen, 2), + new Pair<>(Carbon, 2), + new Pair<>(Oxygen, 4)); + + public static final Werkstoff vanadiumPentoxide = new Werkstoff( + new short[] { 0xde, 0x8d, 0x12 }, + "Vanadium Pentoxide", + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 13, + TextureSet.SET_SHINY, + new Pair<>(Vanadium, 2), + new Pair<>(Oxygen, 5)); + + public static final Werkstoff thoriumNitrate = new Werkstoff( + new short[] { 0xba, 0xe8, 0x26 }, + "Thorium Nitrate", + subscriptNumbers("Th(NO3)4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 14, + TextureSet.SET_DULL); + + public static final Werkstoff thoriumOxalate = new Werkstoff( + new short[] { 0x50, 0x63, 0x13 }, + "Thorium Oxalate", + subscriptNumbers("Th(C2O4)2"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 15, + TextureSet.SET_DULL); + + public static final Werkstoff thoriumHydroxide = new Werkstoff( + new short[] { 0x92, 0xae, 0x89 }, + "Thorium Hydroxide", + subscriptNumbers("Th(OH)4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 16, + TextureSet.SET_SHINY); + + public static final Werkstoff sodiumOxalate = new Werkstoff( + new short[] { 0xe4, 0xf8, 0x9b }, + "Sodium Oxalate", + subscriptNumbers("Na2C2O4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 17, + TextureSet.SET_DULL); + + public static final Werkstoff thoriumTetrachloride = new Werkstoff( + new short[] { 0x13, 0x7c, 0x16 }, + "Thorium Tetrachloride", + subscriptNumbers("ThCl4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 18, + TextureSet.SET_FLUID); + + public static final Werkstoff thoriumTetrafluoride = new Werkstoff( + new short[] { 0x15, 0x6a, 0x6a }, + "Thorium Tetrafluoride", + subscriptNumbers("ThF4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 19, + TextureSet.SET_FLUID); + + public static final Werkstoff thorium232Tetrafluoride = new Werkstoff( + new short[] { 0x15, 0x6a, 0x6a }, + "Thorium-232 Tetrafluoride", + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 20, + TextureSet.SET_FLUID, + new Pair<>(WerkstoffLoader.Thorium232, 1), + new Pair<>(Fluorine, 4)); + + // Atomic Separation Catalyst + public static final Werkstoff orundum = new Werkstoff( + new short[] { 0xcd, 0x26, 0x26 }, + "Orundum", + "Or", + new Werkstoff.Stats().setProtons(120) + .setMass(300), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().addGems() + .addMolten(), + OffsetID + 22, + TextureSet.SET_DIAMOND); + + public static final Werkstoff atomicSeparationCatalyst = new Werkstoff( + new short[] { 0xe8, 0x5e, 0x0c }, + "Atomic Separation Catalyst", + "the melting core...", + new Werkstoff.Stats().setMeltingPoint(5000), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMolten() + .addMetalItems() + .addSimpleMetalWorkingItems() + .addCraftingMetalWorkingItems() + .addMultipleIngotMetalWorkingItems(), + OffsetID + 21, + TextureSet.SET_SHINY, + new Pair<>(MyMaterial.orundum, 2), + new Pair<>(Plutonium, 1), + new Pair<>(Naquadah, 2)); + + // Naquadah Fuel Rework + public static final Werkstoff extremelyUnstableNaquadah = new Werkstoff( + new short[] { 0x06, 0x26, 0x05 }, + "Extremely Unstable Naquadah", + "Nq" + CharExchanger.shifter(9734), + new Werkstoff.Stats().setMeltingPoint(7000) + .setBlastFurnace(true) + .setProtons(200) + .setMass(450) + .setRadioactive(true), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMolten() + .addMetalItems() + .addSimpleMetalWorkingItems() + .addCraftingMetalWorkingItems() + .addMultipleIngotMetalWorkingItems(), + OffsetID + 23, + TextureSet.SET_SHINY); + + public static final Werkstoff lightNaquadahFuel = new Werkstoff( + new short[] { 92, 203, 92 }, + "Light Naquadah Fuel", + "far from enough", + new Werkstoff.Stats().setToxic(true) + .setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 24, + TextureSet.SET_FLUID); + + public static final Werkstoff heavyNaquadahFuel = new Werkstoff( + new short[] { 54, 255, 54 }, + "Heavy Naquadah Fuel", + "still need processing", + new Werkstoff.Stats().setToxic(true) + .setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 25, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahGas = new Werkstoff( + new short[] { 93, 219, 0 }, + "Naquadah Gas", + "Who need it?", + new Werkstoff.Stats().setToxic(true) + .setRadioactive(true) + .setGas(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 26, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahAsphalt = new Werkstoff( + new short[] { 5, 37, 5 }, + "Naquadah Asphalt", + "It will damage the reactor.", + new Werkstoff.Stats().setToxic(true) + .setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 27, + TextureSet.SET_FLUID); + + public static final Werkstoff ether = new Werkstoff( + new short[] { 0xeb, 0xbc, 0x2f }, + "Ether", + subscriptNumbers("CH3CH2OCH2CH3"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 28, + TextureSet.SET_FLUID, + new Pair<>(Carbon, 4), + new Pair<>(Hydrogen, 10), + new Pair<>(Oxygen, 1)); + + public static final Werkstoff antimonyTrichloride = new Werkstoff( + new short[] { 0x0f, 0xdc, 0x34 }, + "Antimony Trichloride Solution", + subscriptNumbers("SbCl3"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 29, + TextureSet.SET_FLUID); + + public static final Werkstoff antimonyPentachlorideSolution = new Werkstoff( + new short[] { 0x15, 0x93, 0x2c }, + "Antimony Pentachloride Solution", + subscriptNumbers("SbCl5"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 30, + TextureSet.SET_FLUID); + + public static final Werkstoff antimonyPentachloride = new Werkstoff( + new short[] { 0x15, 0x93, 0x2c }, + "Antimony Pentachloride", + subscriptNumbers("SbCl5"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 31, + TextureSet.SET_FLUID); + + public static final Werkstoff antimonyPentafluoride = new Werkstoff( + new short[] { 0x16, 0xd5, 0xe2 }, + "Antimony Pentafluoride", + subscriptNumbers("SbF5"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 32, + TextureSet.SET_FLUID); + + public static final Werkstoff fluoroantimonicAcid = new Werkstoff( + new short[] { 0x16, 0xd5, 0xe2 }, + "Fluoroantimonic Acid", + subscriptNumbers("HSbF6"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 33, + TextureSet.SET_FLUID); + + public static final Werkstoff radioactiveSludge = new Werkstoff( + new short[] { 0xb3, 0x49, 0x1e }, + "Radioactive Sludge", + ">>> DANGER <<<", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 34, + TextureSet.SET_DULL); + + public static final Werkstoff acidNaquadahEmulsion = new Werkstoff( + new short[] { 0x25, 0x22, 0x22 }, + "Acid Naquadah Emulsion", + "??Nq??H" + CharExchanger.shifter(8314), + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 35, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahEmulsion = new Werkstoff( + new short[] { 0x4a, 0x46, 0x45 }, + "Naquadah Emulsion", + "??Nq??", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 36, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahSolution = new Werkstoff( + new short[] { 0x84, 0x81, 0x80 }, + "Naquadah Solution", + "~Nq~", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 37, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkI = new Werkstoff( + new short[] { 0x62, 0x5c, 0x5b }, + "Naquadah Based Liquid Fuel MkI", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 38, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkIDepleted = new Werkstoff( + new short[] { 0xcb, 0xc3, 0xc1 }, + "Naquadah Based Liquid Fuel MkI (Depleted)", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 39, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkII = new Werkstoff( + new short[] { 0x52, 0x4e, 0x4d }, + "Naquadah Based Liquid Fuel MkII", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 40, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkIIDepleted = new Werkstoff( + new short[] { 0xb5, 0xb0, 0xae }, + "Naquadah Based Liquid Fuel MkII (Depleted)", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 41, + TextureSet.SET_FLUID); + /* These materials will be enable when they are removed in GregTech */ + /* + * public static final Werkstoff praseodymium = new Werkstoff( new short[]{0xff,0xff,0xff}, "praseodymium", "Pr", + * new Werkstoff.Stats(), Werkstoff.Types.ELEMENT, new + * Werkstoff.GenerationFeatures().disable().onlyDust().addMolten().addMetalItems(), OffsetID + 42, + * TextureSet.SET_METALLIC ); public static final Werkstoff rubidium = new Werkstoff( new short[]{0xff,0x2a,0x00}, + * "rubidium", "Rb", new Werkstoff.Stats(), Werkstoff.Types.ELEMENT, new + * Werkstoff.GenerationFeatures().disable().onlyDust().addMolten().addMetalItems(), OffsetID + 43, + * TextureSet.SET_SHINY ); public static final Werkstoff thulium = new Werkstoff( new short[]{0xff,0xff,0xff}, + * "Thulium", "Tm", new Werkstoff.Stats(), Werkstoff.Types.ELEMENT, new + * Werkstoff.GenerationFeatures().disable().onlyDust().addMolten().addMetalItems(), OffsetID + 44, + * TextureSet.SET_METALLIC ); + */ + public static final Werkstoff naquadahBasedFuelMkIII = new Werkstoff( + new short[] { 0x29, 0x22, 0x21 }, + "Naquadah Based Liquid Fuel MkIII", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 45, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkIIIDepleted = new Werkstoff( + new short[] { 0x66, 0x40, 0x38 }, + "Naquadah Based Liquid Fuel MkIII (Depleted)", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 46, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkIV = new Werkstoff( + new short[] { 0x0e, 0x0c, 0x0c }, + "Naquadah Based Liquid Fuel MkIV", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 47, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkIVDepleted = new Werkstoff( + new short[] { 0x8e, 0x34, 0x22 }, + "Naquadah Based Liquid Fuel MkIV (Depleted)", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 48, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkV = new Werkstoff( + new short[] { 0x00, 0x00, 0x00 }, + "Naquadah Based Liquid Fuel MkV", + "THE END", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 49, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkVDepleted = new Werkstoff( + new short[] { 0xff, 0xff, 0xff }, + "Naquadah Based Liquid Fuel MkV (Depleted)", + "THE END (literally)", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 50, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkVI = new Werkstoff( + new short[] { 0x30, 0x00, 0x00 }, + "Naquadah Based Liquid Fuel MkVI", + "THE FUTURE", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 115, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkVIDepleted = new Werkstoff( + new short[] { 0x99, 0x33, 0x33 }, + "Naquadah Based Liquid Fuel MkVI (Depleted)", + "THE FUTURE (achieved)", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 116, + TextureSet.SET_FLUID); + + public static final Werkstoff zincChloride = new Werkstoff( + new short[] { 0x73, 0xa5, 0xfc }, + "Zinc Chloride", + subscriptNumbers("ZnCl2"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 51, + TextureSet.SET_SHINY, + new Pair<>(Zinc, 1), + new Pair<>(Chlorine, 2)); + + public static final Werkstoff zincThoriumAlloy = new Werkstoff( + new short[] { 0x12, 0x34, 0x56 }, + "Zn-Th Alloy", + subscriptNumbers("ZnTh"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMolten() + .addMetalItems(), + OffsetID + 52, + TextureSet.SET_SHINY, + new Pair<>(Zinc, 1), + new Pair<>(Thorium, 1)); + + // Naquadah Rework Materials + public static final Werkstoff naquadahEarth = new Werkstoff( + new short[] { 0x4c, 0x4c, 0x4c }, + "Naquadah Oxide Mixture", + subscriptNumbers("??NqTiGaAd??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures(), + OffsetID + 53, + TextureSet.SET_METALLIC); + + public static final Werkstoff titaniumTrifluoride = new Werkstoff( + new short[] { 0xc0, 0x92, 0xa8 }, + "Titanium Trifluoride", + subscriptNumbers("TiF3"), + new Werkstoff.Stats().setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 54, + TextureSet.SET_METALLIC, + new Pair<>(Titanium, 1), + new Pair<>(Fluorine, 3)); + + public static final Werkstoff lowQualityNaquadahEmulsion = new Werkstoff( + new short[] { 0x4c, 0x4c, 0x4c }, + "Low Quality Naquadah Emulsion", + subscriptNumbers("??NqGaAd??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 55, + TextureSet.SET_FLUID); + + public static final Werkstoff galliumHydroxide = new Werkstoff( + new short[] { 0xa6, 0xa6, 0xa6 }, + "Gallium Hydroxide", + subscriptNumbers("Ga(OH)3"), + new Werkstoff.Stats().setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 56, + TextureSet.SET_DULL, + new Pair<>(Gallium, 1), + new Pair<>(Oxygen, 3), + new Pair<>(Hydrogen, 3)); + + public static final Werkstoff lowQualityNaquadahSolution = new Werkstoff( + new short[] { 0x71, 0x62, 0x62 }, + "Low Quality Naquadah Solution", + subscriptNumbers("~??NqAd??~"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 57, + TextureSet.SET_FLUID); + + public static final Werkstoff towEthyl1Hexanol = new Werkstoff( + new short[] { 0x80, 0xb5, 0x57 }, + "2-Ethyl-1-Hexanol", + subscriptNumbers("C8H18O"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 58, + TextureSet.SET_FLUID, + new Pair<>(Carbon, 8), + new Pair<>(Oxygen, 1), + new Pair<>(Hydrogen, 18)); + + public static final Werkstoff P507 = new Werkstoff( + new short[] { 0x29, 0xc2, 0x2a }, + "P-507", + subscriptNumbers("(C8H17)2PO3H"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 59, + TextureSet.SET_FLUID, + new Pair<>(Carbon, 16), + new Pair<>(Phosphorus, 1), + new Pair<>(Oxygen, 3), + new Pair<>(Hydrogen, 35)); + + public static final Werkstoff naquadahAdamantiumSolution = new Werkstoff( + new short[] { 0x3d, 0x38, 0x38 }, + "Naquadah-Adamantium Solution", + subscriptNumbers("~NqAd~"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 60, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahRichSolution = new Werkstoff( + new short[] { 0x33, 0x33, 0x33 }, + "Naquadah-Rich Solution", + subscriptNumbers("~?Nq?~"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 61, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahine = new Werkstoff( + new short[] { 0x33, 0x33, 0x33 }, + "Naquadahine", + subscriptNumbers("NqO2"), + new Werkstoff.Stats().setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 62, + TextureSet.SET_METALLIC, + new Pair<>(Naquadah, 1), + new Pair<>(Oxygen, 2)); + + public static final Werkstoff fluorineRichWasteLiquid = new Werkstoff( + new short[] { 0x13, 0x68, 0x62 }, + "Fluorine-Rich Waste Liquid", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 63, + TextureSet.SET_FLUID); + + public static final Werkstoff wasteLiquid = new Werkstoff( + new short[] { 0x14, 0x1c, 0x68 }, + "Waste Liquid", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 64, + TextureSet.SET_FLUID); + + public static final Werkstoff adamantine = new Werkstoff( + new short[] { 0xb7, 0xb7, 0xb7 }, + "Adamantine", + subscriptNumbers("Ad2O3"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 65, + TextureSet.SET_DULL, + new Pair<>(Adamantium, 2), + new Pair<>(Oxygen, 3)); + + public static final Werkstoff enrichedNaquadahEarth = new Werkstoff( + new short[] { 0x82, 0x68, 0x68 }, + "Enriched-Naquadah Oxide Mixture", + subscriptNumbers("??KeNq") + CharExchanger.shifter(8314) + "??", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures(), + OffsetID + 66, + TextureSet.SET_METALLIC); + + public static final Werkstoff triniumSulphate = new Werkstoff( + new short[] { 0xda, 0xda, 0xda }, + "Trinium Sulphate", + subscriptNumbers("KeSO4"), + new Werkstoff.Stats().setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 67, + TextureSet.SET_METALLIC, + new Pair<>(Trinium, 1), + new Pair<>(Sulfur, 1), + new Pair<>(Oxygen, 4)); + + public static final Werkstoff enrichedNaquadahRichSolution = new Werkstoff( + new short[] { 0x52, 0x39, 0x39 }, + "Enriched-Naquadah-Rich Solution", + subscriptNumbers("~?Nq") + CharExchanger.shifter(8314) + "?~", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 68, + TextureSet.SET_FLUID); + + public static final Werkstoff concentratedEnrichedNaquadahSludge = new Werkstoff( + new short[] { 0x52, 0x39, 0x39 }, + "Concentrated Enriched-Naquadah Sludge", + subscriptNumbers("?Nq") + CharExchanger.shifter(8314) + "?", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 69, + TextureSet.SET_METALLIC); + + public static final Werkstoff enrichedNaquadahSulphate = new Werkstoff( + new short[] { 0x52, 0x39, 0x39 }, + "Enriched-Naquadah Sulphate", + "Nq" + CharExchanger.shifter(8314) + subscriptNumbers("(SO4)2"), + new Werkstoff.Stats().setRadioactive(true) + .setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 70, + TextureSet.SET_DULL, + new Pair<>(NaquadahEnriched, 1), + new Pair<>(Sulfur, 2), + new Pair<>(Oxygen, 8)); + + public static final Werkstoff naquadriaEarth = new Werkstoff( + new short[] { 0x4d, 0x4d, 0x55 }, + "Naquadria Oxide Mixture", + subscriptNumbers("??Nq*BaIn??"), + new Werkstoff.Stats().setRadioactive(true) + .setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures(), + OffsetID + 71, + TextureSet.SET_METALLIC); + + public static final Werkstoff indiumPhosphate = new Werkstoff( + new short[] { 0x2b, 0x2e, 0x70 }, + "Indium Phosphate", + subscriptNumbers("InPO4"), + new Werkstoff.Stats().setToxic(true) + .setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 72, + TextureSet.SET_DULL, + new Pair<>(Indium, 1), + new Pair<>(Phosphorus, 1), + new Pair<>(Oxygen, 4)); + + public static final Werkstoff lowQualityNaquadriaPhosphate = new Werkstoff( + new short[] { 0x4d, 0x4d, 0x55 }, + "Low Quality Naquadria Phosphate", + subscriptNumbers("??Nq*3(PO4)4??"), + new Werkstoff.Stats().setRadioactive(true) + .setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 73, + TextureSet.SET_DULL); + + public static final Werkstoff naquadriaRichSolution = new Werkstoff( + new short[] { 0x1f, 0x1e, 0x33 }, + "Naquadria-Rich Solution", + subscriptNumbers("~?Nq*?~"), + new Werkstoff.Stats().setRadioactive(true) + .setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 74, + TextureSet.SET_FLUID); + + public static final Werkstoff lowQualityNaquadriaSulphate = new Werkstoff( + new short[] { 0x73, 0x72, 0x84 }, + "Low Quality Naquadria Sulphate", + subscriptNumbers("??Nq*(SO4)2??"), + new Werkstoff.Stats().setRadioactive(true) + .setToxic(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 75, + TextureSet.SET_METALLIC); + + public static final Werkstoff lowQualityNaquadriaSolution = new Werkstoff( + new short[] { 0x73, 0x72, 0x84 }, + "Low Quality Naquadria Sulphate", + subscriptNumbers("~??Nq*??~"), + new Werkstoff.Stats().setRadioactive(true) + .setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 76, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadriaSulphate = new Werkstoff( + new short[] { 0x1f, 0x1e, 0x33 }, + "Naquadria Sulphate", + subscriptNumbers("Nq*(SO4)2"), + new Werkstoff.Stats().setRadioactive(true) + .setToxic(true) + .setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 77, + TextureSet.SET_METALLIC, + new Pair<>(Naquadria, 1), + new Pair<>(Sulfur, 2), + new Pair<>(Oxygen, 8)); + + public static final Werkstoff naquadahGoo = new Werkstoff( + new short[] { 0x4c, 0x4c, 0x4c }, + "Naquadah Goo", + subscriptNumbers("??NqTiGaAd??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 78, + TextureSet.SET_FLUID); + + public static final Werkstoff enrichedNaquadahGoo = new Werkstoff( + new short[] { 0x82, 0x68, 0x68 }, + "Enriched Naquadah Goo", + subscriptNumbers("??KeNq") + CharExchanger.shifter(8314) + "??", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 79, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadriaGoo = new Werkstoff( + new short[] { 0x4d, 0x4d, 0x55 }, + "Naquadria Goo", + subscriptNumbers("??Nq*BaIn??"), + new Werkstoff.Stats().setRadioactive(true) + .setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 80, + TextureSet.SET_FLUID); + + // material for reactor stuff + public static final Werkstoff zircaloy4 = new Werkstoff( + new short[] { 0x8a, 0x6e, 0x68 }, + "Zircaloy-4", + subscriptNumbers("Zr34Sn5Fe2Cr"), + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingPoint(2800), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMixerRecipes((short) 4), + OffsetID + 81, + TextureSet.SET_METALLIC, + new Pair<>(WerkstoffLoader.Zirconium, 34), + new Pair<>(Tin, 5), + new Pair<>(Iron, 2), + new Pair<>(Chrome, 1)); + + public static final Werkstoff zircaloy2 = new Werkstoff( + new short[] { 0xa4, 0x8f, 0x8b }, + "Zircaloy-2", + subscriptNumbers("Zr34Sn4FeCrNi"), + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingPoint(2800), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMixerRecipes((short) 2), + OffsetID + 82, + TextureSet.SET_METALLIC, + new Pair<>(WerkstoffLoader.Zirconium, 34), + new Pair<>(Tin, 4), + new Pair<>(Iron, 1), + new Pair<>(Chrome, 1), + new Pair<>(Nickel, 1)); + + public static final Werkstoff incoloy903 = new Werkstoff( + new short[] { 0xa4, 0x8f, 0x8b }, + "Incoloy-903", + subscriptNumbers("Fe12Ni10Co8Ti4Mo2Al"), + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingPoint(3700), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addSimpleMetalWorkingItems() + .addMixerRecipes((short) 6), + OffsetID + 83, + TextureSet.SET_METALLIC, + new Pair<>(Iron, 12), + new Pair<>(Nickel, 10), + new Pair<>(Cobalt, 8), + new Pair<>(Titanium, 4), + new Pair<>(Molybdenum, 2), + new Pair<>(Aluminium, 1)); + + public static final Werkstoff adamantiumAlloy = new Werkstoff( + new short[] { 0xa0, 0xa0, 0xa0 }, + "Adamantium Alloy", + subscriptNumbers("Ad5Nq2La3"), + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingPoint(5500) + .setSpeedOverride(191.2F) + .setDurOverride(102400), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addSimpleMetalWorkingItems() + .addMultipleIngotMetalWorkingItems() + .addMixerRecipes((short) 3), + OffsetID + 84, + TextureSet.SET_SHINY, + new Pair<>(Adamantium, 5), + new Pair<>(Naquadah, 2), + new Pair<>(Lanthanum, 3)); + + public static final Werkstoff ethanolGasoline = new Werkstoff( + new short[] { 0xe4, 0xc6, 0x61 }, + "Ethanol Gasoline", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 85, + TextureSet.SET_FLUID); + + public static final Werkstoff cyclopentadiene = new Werkstoff( + new short[] { 0xff, 0xf6, 0xbd }, + "Cyclopentadiene", + subscriptNumbers("C5H6"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 86, + TextureSet.SET_FLUID); + + public static final Werkstoff ferrousChloride = new Werkstoff( + new short[] { 0x5b, 0x5b, 0x5b }, + "Iron II Chloride", + subscriptNumbers("FeCl2"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 87, + TextureSet.SET_FLUID); + + public static final Werkstoff diethylamine = new Werkstoff( + new short[] { 0x69, 0x77, 0xca }, + "Diethylamine", + subscriptNumbers("C4H11N"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 88, + TextureSet.SET_FLUID); + + public static final Werkstoff impureFerroceneMixture = new Werkstoff( + new short[] { 0x79, 0x55, 0x08 }, + "Impure Ferrocene Mixture", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 89, + TextureSet.SET_FLUID); + + public static final Werkstoff ferroceneSolution = new Werkstoff( + new short[] { 0xde, 0x7e, 0x1c }, + "Ferrocene Solution", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 90, + TextureSet.SET_FLUID); + + public static final Werkstoff ferroceneWaste = new Werkstoff( + new short[] { 0x35, 0x1d, 0x03 }, + "Ferrocene Waste", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 91, + TextureSet.SET_FLUID); + + public static final Werkstoff ferrocene = new Werkstoff( + new short[] { 0xf1, 0x8f, 0x2b }, + "Ferrocene", + subscriptNumbers("Fe(C5H5)2"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 92, + TextureSet.SET_SHINY); + + public static final Werkstoff ironedKerosene = new Werkstoff( + new short[] { 0x97, 0x00, 0x61 }, + "Jet Fuel No.3", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 93, + TextureSet.SET_FLUID); + + public static final Werkstoff ironedFuel = new Werkstoff( + new short[] { 0xff, 0x98, 0x00 }, + "Jet Fuel A", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 94, + TextureSet.SET_FLUID); + + public static final Werkstoff marM200 = new Werkstoff( + new short[] { 0x51, 0x51, 0x51 }, + "MAR-M200 Steel", + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingPoint(5000), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addSimpleMetalWorkingItems() + .addMultipleIngotMetalWorkingItems() + .addMixerRecipes((short) 7), + OffsetID + 95, + TextureSet.SET_SHINY, + new Pair<>(Niobium, 2), + new Pair<>(Chrome, 9), + new Pair<>(Aluminium, 5), + new Pair<>(Titanium, 2), + new Pair<>(Cobalt, 10), + new Pair<>(Tungsten, 13), + new Pair<>(Nickel, 18)); + + public static final Werkstoff marCeM200 = new Werkstoff( + new short[] { 0x38, 0x30, 0x30 }, + "MAR-Ce-M200 Steel", + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingPoint(5000) + .setMass(1200) + .setProtons(1000) + .setSpeedOverride(150F) + .setDurOverride(204800), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addSimpleMetalWorkingItems() + .addMultipleIngotMetalWorkingItems(), + OffsetID + 96, + TextureSet.SET_METALLIC, + new Pair<>(marM200, 18), + new Pair<>(Cerium, 1)); + + public static final Werkstoff lithiumChloride = new Werkstoff( + new short[] { 0xb7, 0xe2, 0xce }, + "Lithium Chloride", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .enforceUnification(), + OffsetID + 97, + TextureSet.SET_DULL, + new Pair<>(Lithium, 1), + new Pair<>(Chlorine, 1)); + + public static final Werkstoff signalium = new Werkstoff( + new short[] { 0xd4, 0x40, 0x00 }, + "Signalium", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(4000), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems(), + OffsetID + 98, + TextureSet.SET_SHINY, + new Pair<>(AnnealedCopper, 4), + new Pair<>(Ardite, 2), + new Pair<>(RedAlloy, 2)); + + public static final Werkstoff lumiinessence = new Werkstoff( + new short[] { 0xe8, 0xf2, 0x24 }, + "Lumiinessence", + subscriptNumbers("(Al??)2(PO4)4"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust(), + OffsetID + 99, + TextureSet.SET_DULL); + + public static final Werkstoff lumiium = new Werkstoff( + new short[] { 0xe8, 0xf2, 0x24 }, + "Lumiium", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(4000), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems(), + OffsetID + 100, + TextureSet.SET_SHINY, + new Pair<>(TinAlloy, 4), + new Pair<>(SterlingSilver, 2), + new Pair<>(lumiinessence, 2)); + + public static final Werkstoff artheriumSn = new Werkstoff( + new short[] { 0x60, 0x36, 0xf7 }, + "Artherium-Sn", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(6500) + .setCentrifuge(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMixerRecipes((short) 6), + OffsetID + 101, + TextureSet.SET_SHINY, + new Pair<>(adamantiumAlloy, 12), + new Pair<>(orundum, 9), + new Pair<>(Tin, 8), + new Pair<>(Arsenic, 7), + new Pair<>(Caesium, 4), + new Pair<>(Osmiridium, 3)); + + public static final Werkstoff titaniumBetaC = new Werkstoff( + new short[] { 0xc7, 0x2f, 0xcc }, + "Tanmolyium Beta-C", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(5300) + .setCentrifuge(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMixerRecipes((short) 5), + OffsetID + 102, + TextureSet.SET_METALLIC, + new Pair<>(Titanium, 5), + new Pair<>(Molybdenum, 5), + new Pair<>(Vanadium, 2), + new Pair<>(Chrome, 3), + new Pair<>(Aluminium, 1)); + + public static final Werkstoff dalisenite = new Werkstoff( + new short[] { 0xb0, 0xb8, 0x12 }, + "Dalisenite", + new Werkstoff.Stats().setMeltingPoint(8700) + .setCentrifuge(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMixerRecipes((short) 6), + OffsetID + 103, + TextureSet.SET_SHINY, + new Pair<>(titaniumBetaC, 14), + new Pair<>(Tungsten, 10), + new Pair<>(NiobiumTitanium, 9), + new Pair<>(WerkstoffLoader.LuVTierMaterial, 8), + new Pair<>(Quantium, 7), + new Pair<>(Erbium, 3)); + + public static final Werkstoff hikarium = new Werkstoff( + new short[] { 0xff, 0xd6, 0xfb }, + "Hikarium", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(5400) + .setCentrifuge(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMixerRecipes((short) 3), + OffsetID + 104, + TextureSet.SET_SHINY, + new Pair<>(lumiium, 18), + new Pair<>(Silver, 8), + new Pair<>(Sunnarium, 4)); + + public static final Werkstoff tairitsu = new Werkstoff( + new short[] { 0x36, 0x36, 0x36 }, + "Tairitsu", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(7400) + .setCentrifuge(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMixerRecipes((short) 6), + OffsetID + 105, + TextureSet.SET_SHINY, + new Pair<>(Tungsten, 8), + new Pair<>(Naquadria, 7), + new Pair<>(Bedrockium, 4), + new Pair<>(Carbon, 4), + new Pair<>(Vanadium, 3), + new Pair<>(BlackPlutonium, 1)); + + public static final Werkstoff antimonyPentafluorideSolution = new Werkstoff( + new short[] { 0x16, 0xd5, 0xe2 }, + "Antimony Pentafluoride Solution", + subscriptNumbers("SbF5"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 106, + TextureSet.SET_FLUID); + + public static final Werkstoff magnesiumSulphate = new Werkstoff( + new short[] { 0x87, 0x74, 0x91 }, + "Magnesium Sulphate", + subscriptNumbers("MgSO4"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 107, + TextureSet.SET_DULL, + new Pair<>(Magnesium, 1), + new Pair<>(Sulfur, 1), + new Pair<>(Oxygen, 4)); + + public static final Werkstoff preciousMetalAlloy = new Werkstoff( + new short[] { 0x9d, 0x90, 0xc6 }, + "Precious Metals Alloy", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(10000) + .setCentrifuge(true) + .setSpeedOverride(100F), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMultipleIngotMetalWorkingItems() + .addMixerRecipes((short) 6), + OffsetID + 108, + TextureSet.SET_SHINY, + new Pair<>(WerkstoffLoader.Ruthenium, 1), + new Pair<>(WerkstoffLoader.Rhodium, 1), + new Pair<>(Palladium, 1), + new Pair<>(Platinum, 1), + new Pair<>(Osmium, 1), + new Pair<>(Iridium, 1)); + + public static final Werkstoff enrichedNaquadahAlloy = new Werkstoff( + new short[] { 0x16, 0x07, 0x40 }, + "Enriched Naquadah Alloy", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(11000) + .setCentrifuge(true) + .setSpeedOverride(180F), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addSimpleMetalWorkingItems() + .addMultipleIngotMetalWorkingItems() + .addMixerRecipes((short) 4), + OffsetID + 109, + TextureSet.SET_METALLIC, + new Pair<>(NaquadahEnriched, 8), + new Pair<>(Tritanium, 5), + new Pair<>(WerkstoffLoader.Californium, 3), + new Pair<>(BlackPlutonium, 2)); + + public static final Werkstoff metastableOganesson = new Werkstoff( + new short[] { 0x14, 0x39, 0x7f }, + "Metastable Oganesson", + "Og*", + new Werkstoff.Stats().setBlastFurnace(true) + .setProtons(118) + .setMass(294) + .setMeltingPoint(11000), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMultipleIngotMetalWorkingItems() + .addMetaSolidifierRecipes(), + OffsetID + 110, + TextureSet.SET_SHINY); + + public static final Werkstoff shirabon = new Werkstoff( + new short[] { 0xe0, 0x15, 0x6d }, + "Shirabon", + "Sh" + CharExchanger.shifter(9191), + new Werkstoff.Stats().setProtons(500) + .setMass(750) + .setMeltingPoint(13000) + .setSpeedOverride(640.0F) + .setDurOverride(15728640) + .setQualityOverride((byte) 26), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addSimpleMetalWorkingItems() + .addMultipleIngotMetalWorkingItems() + .addMetalCraftingSolidifierRecipes() + .addMetaSolidifierRecipes(), + OffsetID + 111, + TextureSet.SET_SHINY); + + public static final Werkstoff inertNaquadah = new Werkstoff( + new short[] { 0x3b, 0x3b, 0x3b }, + "Inert Naquadah", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 112, + TextureSet.SET_METALLIC, + new Pair<>(Naquadah, 1)); + + public static final Werkstoff inertEnrichedNaquadah = new Werkstoff( + new short[] { 0x61, 0x44, 0x44 }, + "Inert Enriched Naquadah", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 113, + TextureSet.SET_METALLIC, + new Pair<>(NaquadahEnriched, 1)); + + public static final Werkstoff inertNaquadria = new Werkstoff( + new short[] { 0x00, 0x00, 0x00 }, + "Inert Naquadria", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 114, + TextureSet.SET_METALLIC, + new Pair<>(Naquadria, 1)); + + @Override + public void run() {} +} diff --git a/goodgen/src/main/java/goodgenerator/items/RadioactiveItem.java b/goodgen/src/main/java/goodgenerator/items/RadioactiveItem.java new file mode 100644 index 0000000000..ab6c003268 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/items/RadioactiveItem.java @@ -0,0 +1,40 @@ +package goodgenerator.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.World; + +import gregtech.api.util.GT_Utility; +import ic2.core.IC2Potion; + +public class RadioactiveItem extends MyItems { + + protected final int mRadio; + + public RadioactiveItem(String name, CreativeTabs Tab, int Rad) { + super(name, Tab); + this.mRadio = Rad; + } + + public RadioactiveItem(String name, String[] tooltip, CreativeTabs Tab, int Rad) { + super(name, tooltip, Tab); + this.mRadio = Rad; + } + + public RadioactiveItem(String name, String tooltip, CreativeTabs Tab, int Rad) { + super(name, tooltip, Tab); + this.mRadio = Rad; + } + + @Override + public void onUpdate(ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand) { + super.onUpdate(aStack, aWorld, aPlayer, aTimer, aIsInHand); + EntityLivingBase tPlayer = (EntityPlayer) aPlayer; + if (!GT_Utility.isWearingFullRadioHazmat(tPlayer)) + tPlayer.addPotionEffect(new PotionEffect(IC2Potion.radiation.id, mRadio, 4)); + } +} diff --git a/goodgen/src/main/java/goodgenerator/items/nuclear/IsotopeMaterial.java b/goodgen/src/main/java/goodgenerator/items/nuclear/IsotopeMaterial.java new file mode 100644 index 0000000000..593a663a71 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/items/nuclear/IsotopeMaterial.java @@ -0,0 +1,60 @@ +// package goodgenerator.items.nuclear; +// +// import goodgenerator.loader.Loaders; +// import net.minecraft.item.ItemStack; +// +// import java.util.HashMap; +// import java.util.HashSet; +// +// public class IsotopeMaterial { +// +// public static final HashSet<IsotopeMaterial> mIsotopeMaterial = new HashSet<>(); +// public static final HashMap<Integer, IsotopeMaterial> mIDMap = new HashMap<>(); +// public static final HashMap<String, IsotopeMaterial> mNameMap = new HashMap<>(); +// +// public final int mID; +// public final int mNeutron; +// public final String mName; +// public final String mLocalizedName; +// public final String mMaterialName; +// public final short[] mRGB; +// public final short[] mRGBO; +// public final NuclearTextures mTexture; +// +// public IsotopeMaterial(int aID, String aName, String aMaterialName, String aLocalizedName, NuclearTextures +// aTexture, int aR, int aG, int aB, int aNeutron) { +// if (mIDMap.get(aID) != null) +// throw new UnsupportedOperationException("ID:" + aID + " is already used!"); +// this.mID = aID; +// this.mNeutron = aNeutron; +// this.mName = aName; +// this.mMaterialName = aMaterialName; +// this.mLocalizedName = aLocalizedName; +// this.mRGB = new short[] {(short) (aR * 0.6), (short) (aG * 0.6), (short) (aB * 0.6), 0}; +// this.mRGBO = new short[] {(short) aR, (short) aG, (short) aB, 0}; +// this.mTexture = aTexture; +// mIsotopeMaterial.add(this); +// mIDMap.put(this.mID, this); +// mNameMap.put(this.mName, this); +// } +// +// public ItemStack getFull(int aAmount) { +// if (aAmount > 64) aAmount = 64; +// return new ItemStack(Loaders.Isotope, aAmount, mID + 1000); +// } +// +// public ItemStack getTiny(int aAmount) { +// if (aAmount > 64) aAmount = 64; +// return new ItemStack(Loaders.Isotope, aAmount, mID + 2000); +// } +// +// public ItemStack getFullOxide(int aAmount) { +// if (aAmount > 64) aAmount = 64; +// return new ItemStack(Loaders.Isotope, aAmount, mID + 3000); +// } +// +// public ItemStack getTinyOxide(int aAmount) { +// if (aAmount > 64) aAmount = 64; +// return new ItemStack(Loaders.Isotope, aAmount, mID + 4000); +// } +// } diff --git a/goodgen/src/main/java/goodgenerator/items/nuclear/IsotopeMaterialLoader.java b/goodgen/src/main/java/goodgenerator/items/nuclear/IsotopeMaterialLoader.java new file mode 100644 index 0000000000..a014abaa32 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/items/nuclear/IsotopeMaterialLoader.java @@ -0,0 +1,177 @@ +// package goodgenerator.items.nuclear; +// +// public class IsotopeMaterialLoader implements Runnable { +// +// protected static final int OffsetID = 0; +// +// public static final IsotopeMaterial Thorium232 = new IsotopeMaterial( +// OffsetID, +// "Thorium232", "Thorium", "Thorium-232", +// NuclearTextures.STABLE1, 59, 59, 59, +// 232 +// ); +// +// public static final IsotopeMaterial Thorium230 = new IsotopeMaterial( +// OffsetID + 1, +// "Thorium232", "Thorium", "Thorium-230", +// NuclearTextures.STABLE2, 59, 59, 59, +// 230 +// ); +// +// public static final IsotopeMaterial Uranium233 = new IsotopeMaterial( +// OffsetID + 2, +// "Uranium233", "Uranium", "Uranium-233", +// NuclearTextures.UNSTABLE4, 60, 167, 85, +// 233 +// ); +// +// public static final IsotopeMaterial Uranium235 = new IsotopeMaterial( +// OffsetID + 3, +// "Uranium235", "Uranium", "Uranium-235", +// NuclearTextures.UNSTABLE3, 60, 167, 85, +// 235 +// ); +// +// public static final IsotopeMaterial Uranium238 = new IsotopeMaterial( +// OffsetID + 4, +// "Uranium238", "Uranium", "Uranium-238", +// NuclearTextures.STABLE2, 60, 167, 85, +// 238 +// ); +// +// public static final IsotopeMaterial Neptunium236 = new IsotopeMaterial( +// OffsetID + 5, +// "Neptunium236", "Neptunium", "Neptunium-236", +// NuclearTextures.UNSTABLE1, 60, 170, 176, +// 236 +// ); +// +// public static final IsotopeMaterial Neptunium237 = new IsotopeMaterial( +// OffsetID + 6, +// "Neptunium237", "Neptunium", "Neptunium-237", +// NuclearTextures.STABLE2, 60, 170, 176, +// 237 +// ); +// +// public static final IsotopeMaterial Plutonium238 = new IsotopeMaterial( +// OffsetID + 7, +// "Plutonium238", "Plutonium", "Plutonium-238", +// NuclearTextures.STABLE1, 169, 169, 169, +// 238 +// ); +// +// public static final IsotopeMaterial Plutonium239 = new IsotopeMaterial( +// OffsetID + 8, +// "Plutonium239", "Plutonium", "Plutonium-239", +// NuclearTextures.UNSTABLE1, 169, 169, 169, +// 239 +// ); +// +// public static final IsotopeMaterial Plutonium241 = new IsotopeMaterial( +// OffsetID + 9, +// "Plutonium241", "Plutonium", "Plutonium-241", +// NuclearTextures.UNSTABLE2, 169, 169, 169, +// 241 +// ); +// +// public static final IsotopeMaterial Plutonium242 = new IsotopeMaterial( +// OffsetID + 10, +// "Plutonium242", "Plutonium", "Plutonium-242", +// NuclearTextures.STABLE2, 169, 169, 169, +// 242 +// ); +// +// public static final IsotopeMaterial Americium241 = new IsotopeMaterial( +// OffsetID + 11, +// "Americium241", "Americium", "Americium-241", +// NuclearTextures.STABLE1, 150, 120, 22, +// 241 +// ); +// +// public static final IsotopeMaterial Americium242 = new IsotopeMaterial( +// OffsetID + 12, +// "Americium242", "Americium", "Americium-242", +// NuclearTextures.UNSTABLE4, 150, 120, 22, +// 242 +// ); +// +// public static final IsotopeMaterial Americium243 = new IsotopeMaterial( +// OffsetID + 13, +// "Americium243", "Americium", "Americium-243", +// NuclearTextures.STABLE2, 150, 120, 22, +// 243 +// ); +// +// public static final IsotopeMaterial Curium243 = new IsotopeMaterial( +// OffsetID + 14, +// "Curium243", "Curium", "Curium-243", +// NuclearTextures.UNSTABLE1, 107, 6, 105, +// 243 +// ); +// +// public static final IsotopeMaterial Curium245 = new IsotopeMaterial( +// OffsetID + 15, +// "Curium245", "Curium", "Curium-245", +// NuclearTextures.UNSTABLE3, 107, 6, 105, +// 245 +// ); +// +// public static final IsotopeMaterial Curium246 = new IsotopeMaterial( +// OffsetID + 16, +// "Curium246", "Curium", "Curium-246", +// NuclearTextures.STABLE2, 107, 6, 105, +// 246 +// ); +// +// public static final IsotopeMaterial Curium247 = new IsotopeMaterial( +// OffsetID + 17, +// "Curium247", "Curium", "Curium-247", +// NuclearTextures.UNSTABLE4, 107, 6, 105, +// 247 +// ); +// +// public static final IsotopeMaterial Berkelium247 = new IsotopeMaterial( +// OffsetID + 18, +// "Berkelium247", "Berkelium", "Berkelium-247", +// NuclearTextures.STABLE2, 130, 54, 29, +// 247 +// ); +// +// public static final IsotopeMaterial Berkelium248 = new IsotopeMaterial( +// OffsetID + 19, +// "Berkelium248", "Berkelium", "Berkelium-248", +// NuclearTextures.UNSTABLE1, 130, 54, 29, +// 248 +// ); +// +// public static final IsotopeMaterial Californium249 = new IsotopeMaterial( +// OffsetID + 20, +// "Californium249", "Californium", "Californium-249", +// NuclearTextures.UNSTABLE2, 186, 55, 11, +// 249 +// ); +// +// public static final IsotopeMaterial Californium250 = new IsotopeMaterial( +// OffsetID + 21, +// "Californium250", "Californium", "Californium-250", +// NuclearTextures.STABLE1, 186, 55, 11, +// 250 +// ); +// +// public static final IsotopeMaterial Californium251 = new IsotopeMaterial( +// OffsetID + 22, +// "Californium251", "Californium", "Californium-251", +// NuclearTextures.UNSTABLE4, 186, 55, 11, +// 251 +// ); +// +// public static final IsotopeMaterial Californium252 = new IsotopeMaterial( +// OffsetID + 23, +// "Californium252", "Californium", "Californium-252", +// NuclearTextures.UNSTABLE1, 186, 55, 11, +// 252 +// ); +// +// @Override +// public void run() { } +// } diff --git a/goodgen/src/main/java/goodgenerator/items/nuclear/NuclearMetaItemGenerator.java b/goodgen/src/main/java/goodgenerator/items/nuclear/NuclearMetaItemGenerator.java new file mode 100644 index 0000000000..a0b71b52e5 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/items/nuclear/NuclearMetaItemGenerator.java @@ -0,0 +1,110 @@ +// package goodgenerator.items.nuclear; +// +// import com.github.bartimaeusnek.bartworks.util.Pair; +// import cpw.mods.fml.relauncher.Side; +// import cpw.mods.fml.relauncher.SideOnly; +// import goodgenerator.main.GoodGenerator; +// import gregtech.api.interfaces.IIconContainer; +// import gregtech.api.items.GT_MetaGenerated_Item; +// import gregtech.api.util.GT_LanguageManager; +// import gregtech.api.util.GT_OreDictUnificator; +// import net.minecraft.creativetab.CreativeTabs; +// import net.minecraft.item.Item; +// import net.minecraft.item.ItemStack; +// import net.minecraft.util.EnumChatFormatting; +// import net.minecraft.util.IIcon; +// +// import java.util.List; +// +// import static goodgenerator.items.nuclear.IsotopeMaterial.mIDMap; +// import static goodgenerator.items.nuclear.IsotopeMaterial.mIsotopeMaterial; +// +// public class NuclearMetaItemGenerator extends GT_MetaGenerated_Item { +// +// /** +// * <p>Full ingot - 1000 +// * <p>Tiny ingot - 2000 +// * <p>Full-Oxide - 3000 +// * <p>Tiny-Oxide - 4000 +// */ +// public static final Pair<Integer, String>[] TYPE_OFFSET = new Pair[] { +// new Pair<>(1000, "%s"), +// new Pair<>(2000, "Tiny of %s"), +// new Pair<>(3000, "%s Oxide"), +// new Pair<>(4000, "Tiny of %s Oxide"), +// }; +// public static final Pair<Integer, String>[] OREPREFIX = new Pair[] { +// new Pair<>(1000, "item%s"), +// new Pair<>(2000, "itemTiny%s"), +// new Pair<>(3000, "item%sOxide"), +// new Pair<>(4000, "itemTiny%sOxide"), +// }; +// +// public NuclearMetaItemGenerator() { +// super("nuclearIsotopeMaterial", (short) 32766, (short) 0); +// this.setCreativeTab(GoodGenerator.GG); +// for (IsotopeMaterial tIsotope : mIsotopeMaterial) { +// for (Pair<Integer, String> tType : TYPE_OFFSET) { +// int tOffset = tType.getKey(); +// String tOreName = tType.getValue(); +// ItemStack tStack = new ItemStack(this, 1, tIsotope.mID + tOffset); +// GT_LanguageManager.addStringLocalization(this.getUnlocalizedName(tStack) + ".name", +// String.format(tOreName, tIsotope.mLocalizedName)); +// GT_LanguageManager.addStringLocalization(this.getUnlocalizedName(tStack) + ".tooltip", +// EnumChatFormatting.AQUA + String.format("%s's Isotope.", tIsotope.mMaterialName) + EnumChatFormatting.RESET); +// } +// for (Pair<Integer, String> tOreDict : OREPREFIX) { +// int tOffset = tOreDict.getKey(); +// String tOreName = tOreDict.getValue(); +// ItemStack tStack = new ItemStack(this, 1, tIsotope.mID + tOffset); +// GT_OreDictUnificator.registerOre(String.format(tOreName, tIsotope.mName), tStack); +// } +// } +// } +// +// @Override +// public String getItemStackDisplayName(ItemStack aStack) { +// return GT_LanguageManager.getTranslation(this.getUnlocalizedName(aStack) + ".name"); +// } +// +// @Override +// public IIconContainer getIconContainer(int aMetaData) { +// int tID = aMetaData % 1000; +// int tType = aMetaData / 1000 - 1; +// IsotopeMaterial tMaterial = mIDMap.get(tID); +// if (tMaterial != null) { +// return tMaterial.mTexture.mTextures[tType]; +// } +// return null; +// } +// +// @Override +// @SideOnly(Side.CLIENT) +// public void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) { +// for (IsotopeMaterial tIsotope : mIsotopeMaterial) { +// for (int i = 1; i <= 4; i ++) { +// ItemStack tStack = new ItemStack(this, 1, tIsotope.mID + i * 1000); +// aList.add(tStack); +// } +// } +// } +// +// @Override +// public short[] getRGBa(ItemStack aStack) { +// int tID = aStack.getItemDamage() % 1000; +// int tType = aStack.getItemDamage() / 1000; +// IsotopeMaterial tMaterial = mIDMap.get(tID); +// if (tMaterial != null) { +// if (tType == 1 || tType == 2) +// return tMaterial.mRGB; +// else +// return tMaterial.mRGBO; +// } +// return null; +// } +// +// @Override +// public final IIcon getIconFromDamage(int aMetaData) { +// return this.getIconContainer(aMetaData).getIcon(); +// } +// } diff --git a/goodgen/src/main/java/goodgenerator/items/nuclear/NuclearTextures.java b/goodgen/src/main/java/goodgenerator/items/nuclear/NuclearTextures.java new file mode 100644 index 0000000000..63314044cf --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/items/nuclear/NuclearTextures.java @@ -0,0 +1,31 @@ +// package goodgenerator.items.nuclear; +// +// import gregtech.api.enums.Textures; +// import gregtech.api.interfaces.IIconContainer; +// +// public class NuclearTextures { +// public static final NuclearTextures +// STABLE1 = new NuclearTextures("stable1"), +// STABLE2 = new NuclearTextures("stable2"), +// UNSTABLE1 = new NuclearTextures("unstable1"), +// UNSTABLE2 = new NuclearTextures("unstable2"), +// UNSTABLE3 = new NuclearTextures("unstable3"), +// UNSTABLE4 = new NuclearTextures("unstable4"); +// +// public final IIconContainer[] mTextures = new IIconContainer[4]; +// public final String mSetName; +// public static final String mTextureDir = "icons/isotope/"; +// public static final int +// FULL = 0, +// TINY = 1, +// FULL_OXIDE = 2, +// TINY_OXIDE = 3; +// +// public NuclearTextures(String aName) { +// mSetName = aName; +// mTextures[0] = new Textures.ItemIcons.CustomIcon(mTextureDir + aName); +// mTextures[1] = new Textures.ItemIcons.CustomIcon(mTextureDir + aName + "tiny"); +// mTextures[2] = new Textures.ItemIcons.CustomIcon(mTextureDir + aName); +// mTextures[3] = new Textures.ItemIcons.CustomIcon(mTextureDir + aName + "tiny"); +// } +// } diff --git a/goodgen/src/main/java/goodgenerator/loader/AchievementLoader.java b/goodgen/src/main/java/goodgenerator/loader/AchievementLoader.java new file mode 100644 index 0000000000..2df30c8752 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/loader/AchievementLoader.java @@ -0,0 +1,4 @@ +package goodgenerator.loader; + +public class AchievementLoader { +} diff --git a/goodgen/src/main/java/goodgenerator/loader/ComponentAssemblyLineMiscRecipes.java b/goodgen/src/main/java/goodgenerator/loader/ComponentAssemblyLineMiscRecipes.java new file mode 100644 index 0000000000..f83712c7db --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/loader/ComponentAssemblyLineMiscRecipes.java @@ -0,0 +1,503 @@ +package goodgenerator.loader; + +import static goodgenerator.util.ItemRefer.Compassline_Casing_EV; +import static goodgenerator.util.ItemRefer.Compassline_Casing_HV; +import static goodgenerator.util.ItemRefer.Compassline_Casing_IV; +import static goodgenerator.util.ItemRefer.Compassline_Casing_LV; +import static goodgenerator.util.ItemRefer.Compassline_Casing_LuV; +import static goodgenerator.util.ItemRefer.Compassline_Casing_MV; +import static goodgenerator.util.ItemRefer.Compassline_Casing_UEV; +import static goodgenerator.util.ItemRefer.Compassline_Casing_UHV; +import static goodgenerator.util.ItemRefer.Compassline_Casing_UIV; +import static goodgenerator.util.ItemRefer.Compassline_Casing_UMV; +import static goodgenerator.util.ItemRefer.Compassline_Casing_UV; +import static goodgenerator.util.ItemRefer.Compassline_Casing_UXV; +import static goodgenerator.util.ItemRefer.Compassline_Casing_ZPM; +import static goodgenerator.util.ItemRefer.Component_Assembly_Line; +import static goodgenerator.util.Log.LOGGER; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.util.GT_RecipeBuilder.HOURS; +import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GT_RecipeBuilder.TICKS; +import static gregtech.api.util.GT_RecipeConstants.AssemblyLine; +import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM; +import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME; + +import java.util.HashMap; + +import javax.annotation.Nullable; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.logging.log4j.Level; + +import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; +import com.github.technus.tectech.recipe.TT_recipeAdder; + +import cpw.mods.fml.common.registry.GameRegistry; +import goodgenerator.items.MyMaterial; +import goodgenerator.util.StackUtils; +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GT_Utility; +import gtPlusPlus.core.recipe.common.CI; + +public class ComponentAssemblyLineMiscRecipes { + + public static final String[] circuitTierMaterials = { "Primitive", "Basic", "Good", "Advanced", "Data", "Elite", + "Master", "Ultimate", "Superconductor", "Infinite", "Bio", "Optical", "Piko", "Quantum" }; + + static final HashMap<String, Integer> NameToTier = new HashMap<>(); + + static void run() { + for (int i = 0; i < circuitTierMaterials.length; i++) NameToTier.put(circuitTierMaterials[i], i); + // Cry about it + NameToTier.put("Nano", 11); + + generateCasingRecipes(); + generateWrapRecipes(); + // Try and find the ZPM Fluid solidifier + ItemStack solidifier; + try { + Class<?> c = Class.forName("com.dreammaster.gthandler.CustomItemList"); + Object maybeSolidifier = c.getMethod("valueOf", String.class) + .invoke(null, "FluidSolidifierZPM"); + solidifier = (ItemStack) (c.getMethod("get", long.class, Object[].class) + .invoke(maybeSolidifier, 16L, null)); + if (GT_Utility.isStackValid(solidifier)) LOGGER.log(Level.INFO, "ZPM Fluid Solidifier found."); + else throw new NullPointerException(); + } catch (Exception e) { + LOGGER.log(Level.ERROR, "ZPM Fluid Solidifier not found, falling back to IV.", e); + solidifier = ItemList.Machine_IV_FluidSolidifier.get(16); + } + + // The controller itself + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, Compassline_Casing_EV.get(1)) + .metadata(RESEARCH_TIME, 1 * HOURS) + .itemInputs( + ItemList.Machine_Multi_Assemblyline.get(16L), + ItemList.Casing_Assembler.get(16L), + ItemList.Casing_Gearbox_TungstenSteel.get(32L), + ComponentType.Robot_Arm.getComponent(8) + .get(16), + ComponentType.Conveyor_Module.getComponent(8) + .get(32), + ComponentType.Electric_Motor.getComponent(7) + .get(32), + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Polybenzimidazole, 16), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Iridium, 32), + solidifier, + getALCircuit(8, 16), + getALCircuit(7, 20), + getALCircuit(6, 24)) + .fluidInputs( + new FluidStack(FluidRegistry.getFluid("molten.indalloy140"), 144 * 12), + Materials.Naquadria.getMolten(144 * 16), + Materials.Lubricant.getFluid(5000)) + .itemOutputs(Component_Assembly_Line.get(1)) + .eut(TierEU.RECIPE_UHV / 2) + .duration(30 * SECONDS) + .addTo(AssemblyLine); + } + + /** Recipes for the Component Assembly Line Casings */ + private static void generateCasingRecipes() { + int t = 1; + // lv 1 + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Steel, 4), + ComponentType.Robot_Arm.getComponent(t) + .get(4), + ComponentType.Electric_Piston.getComponent(t) + .get(8), + ComponentType.Electric_Motor.getComponent(t) + .get(10), + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Steel, 4), + GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tin, 6), + getCircuit(t, 16)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144 * (t + 1))) + .itemOutputs(Compassline_Casing_LV.get(1)) + .duration(16 * SECONDS) + .eut(GT_Values.VP[t]) + .addTo(assemblerRecipes); + // mv 2 + t++; + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Aluminium, 1), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Aluminium, 4), + ComponentType.Robot_Arm.getComponent(t) + .get(4), + ComponentType.Electric_Piston.getComponent(t) + .get(8), + ComponentType.Electric_Motor.getComponent(t) + .get(10), + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Aluminium, 4), + GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.AnyCopper, 6), + getCircuit(t, 8), + getCircuit(t - 1, 16)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144 * (t + 1))) + .itemOutputs(Compassline_Casing_MV.get(1)) + .duration(16 * SECONDS) + .eut(GT_Values.VP[t]) + .addTo(assemblerRecipes); + // hv 3 + t++; + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.StainlessSteel, 4), + ComponentType.Robot_Arm.getComponent(t) + .get(4), + ComponentType.Electric_Piston.getComponent(t) + .get(8), + ComponentType.Electric_Motor.getComponent(t) + .get(10), + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.StainlessSteel, 4), + GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Gold, 6), + getCircuit(t, 8), + getCircuit(t - 1, 16)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144 * (t + 1))) + .itemOutputs(Compassline_Casing_HV.get(1)) + .duration(16 * SECONDS) + .eut(GT_Values.VP[t]) + .addTo(assemblerRecipes); + // ev 4 + t++; + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Titanium, 1), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Titanium, 4), + ComponentType.Robot_Arm.getComponent(t) + .get(4), + ComponentType.Electric_Piston.getComponent(t) + .get(8), + ComponentType.Electric_Motor.getComponent(t) + .get(10), + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Titanium, 4), + GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Aluminium, 6), + getCircuit(t, 8), + getCircuit(t - 1, 16)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144 * (t + 1))) + .itemOutputs(Compassline_Casing_EV.get(1)) + .duration(16 * SECONDS) + .eut(GT_Values.VP[t]) + .addTo(assemblerRecipes); + // iv 5 + t++; + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.TungstenSteel, 4), + ComponentType.Robot_Arm.getComponent(t) + .get(4), + ComponentType.Electric_Piston.getComponent(t) + .get(8), + ComponentType.Electric_Motor.getComponent(t) + .get(10), + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.TungstenSteel, 4), + GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tungsten, 6), + getCircuit(t, 8), + getCircuit(t - 1, 16)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144 * (t + 1))) + .itemOutputs(Compassline_Casing_IV.get(1)) + .duration(16 * SECONDS) + .eut(GT_Values.VP[t]) + .addTo(assemblerRecipes); + + Fluid sold = FluidRegistry.getFluid("molten.indalloy140"); + // Assline Recipes! + // luv 6 + t++; + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, Compassline_Casing_IV.get(1)) + .metadata(RESEARCH_TIME, (2250 << t) * TICKS) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Europium, 1), + WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.plateDense, 6), + ComponentType.Robot_Arm.getComponent(t) + .get(8), + ComponentType.Electric_Piston.getComponent(t) + .get(10), + ComponentType.Electric_Motor.getComponent(t) + .get(16), + WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.gearGt, 4), + WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.gearGtSmall, 16), + GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 8), + getALCircuit(t, 8), + getALCircuit(t - 1, 16)) + .fluidInputs( + new FluidStack(sold, 144 * t * 4), + CI.getTieredFluid(t, 144 * t * 2), + StackUtils.getTieredFluid(t, 144 * t), + Materials.Lubricant.getFluid(1000 * (t - 2))) + .itemOutputs(Compassline_Casing_LuV.get(1)) + .eut(TierEU.RECIPE_IV) + .duration(30 * SECONDS) + .addTo(AssemblyLine); + // zpm 7 + t++; + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, Compassline_Casing_LuV.get(1)) + .metadata(RESEARCH_TIME, (2250 << t) * TICKS) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Iridium, 1), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Iridium, 6), + ComponentType.Robot_Arm.getComponent(t) + .get(8), + ComponentType.Electric_Piston.getComponent(t) + .get(10), + ComponentType.Electric_Motor.getComponent(t) + .get(16), + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Iridium, 4), + GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Iridium, 16), + GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Naquadah, 8), + getALCircuit(t, 8), + getALCircuit(t - 1, 16)) + .fluidInputs( + new FluidStack(sold, 144 * t * 4), + CI.getTieredFluid(t, 144 * t * 2), + StackUtils.getTieredFluid(t, 144 * t), + Materials.Lubricant.getFluid(1000 * (t - 2))) + .itemOutputs(Compassline_Casing_ZPM.get(1)) + .eut(TierEU.RECIPE_LuV) + .duration(30 * SECONDS) + .addTo(AssemblyLine); + // uv 8 + t++; + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, Compassline_Casing_ZPM.get(1)) + .metadata(RESEARCH_TIME, (2250 << t) * TICKS) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmium, 1), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Osmium, 6), + ComponentType.Robot_Arm.getComponent(t) + .get(8), + ComponentType.Electric_Piston.getComponent(t) + .get(10), + ComponentType.Electric_Motor.getComponent(t) + .get(16), + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Osmium, 4), + GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Osmium, 16), + GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 8), + getALCircuit(t, 8), + getALCircuit(t - 1, 16)) + .fluidInputs( + new FluidStack(sold, 144 * t * 4), + CI.getTieredFluid(t, 144 * t * 2), + StackUtils.getTieredFluid(t, 144 * t), + Materials.Lubricant.getFluid(1000 * (t - 2))) + .itemOutputs(Compassline_Casing_UV.get(1)) + .eut(TierEU.RECIPE_ZPM) + .duration(30 * SECONDS) + .addTo(AssemblyLine); + // uhv 9 + t++; + TT_recipeAdder.addResearchableAssemblylineRecipe( + Compassline_Casing_UV.get(1), + 375 << (t - 2), + 1 << (t - 3), + (int) TierEU.RECIPE_UV, + 1, + new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.CosmicNeutronium, 6), + ComponentType.Robot_Arm.getComponent(t) + .get(8), + ComponentType.Electric_Piston.getComponent(t) + .get(10), + ComponentType.Electric_Motor.getComponent(t) + .get(16), + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.CosmicNeutronium, 4), + GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.CosmicNeutronium, 16), + GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 8), getALCircuit(t, 8), + getALCircuit(t - 1, 16) }, + new FluidStack[] { new FluidStack(sold, 144 * t * 4), CI.getTieredFluid(t, 144 * t * 2), + StackUtils.getTieredFluid(t, 144 * t), Materials.Lubricant.getFluid(1000 * (t - 2)) }, + Compassline_Casing_UHV.get(1), + 50 * SECONDS, + (int) TierEU.RECIPE_UV); + sold = FluidRegistry.getFluid("molten.mutatedlivingsolder"); + // uev 10 + t++; + TT_recipeAdder.addResearchableAssemblylineRecipe( + Compassline_Casing_UHV.get(1), + 375 << (t - 2), + 1 << (t - 3), + (int) TierEU.RECIPE_UHV, + 1, + new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 6), + ComponentType.Robot_Arm.getComponent(t) + .get(8), + ComponentType.Electric_Piston.getComponent(t) + .get(10), + ComponentType.Electric_Motor.getComponent(t) + .get(16), + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Infinity, 4), + GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Infinity, 16), + GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 8), getALCircuit(t, 8), + getALCircuit(t - 1, 16) }, + new FluidStack[] { new FluidStack(sold, 144 * t * 4), CI.getTieredFluid(t, 144 * t * 2), + StackUtils.getTieredFluid(t, 144 * t), Materials.Lubricant.getFluid(1000 * (t - 2)) }, + Compassline_Casing_UEV.get(1), + 50 * SECONDS, + (int) TierEU.RECIPE_UHV); + // uiv 11 + t++; + TT_recipeAdder.addResearchableAssemblylineRecipe( + Compassline_Casing_UEV.get(1), + 375 << (t - 2), + 1 << (t - 3), + (int) TierEU.RECIPE_UEV, + 1, + new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 6), + ComponentType.Robot_Arm.getComponent(t) + .get(8), + ComponentType.Electric_Piston.getComponent(t) + .get(10), + ComponentType.Electric_Motor.getComponent(t) + .get(16), + GT_OreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.TranscendentMetal, 4), + GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.TranscendentMetal, 16), + GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 8), getALCircuit(t, 8), + getALCircuit(t - 1, 16) }, + new FluidStack[] { new FluidStack(sold, 144 * t * 4), CI.getTieredFluid(t, 144 * t * 2), + StackUtils.getTieredFluid(t, 144 * t), Materials.Lubricant.getFluid(1000 * (t - 2)) }, + Compassline_Casing_UIV.get(1), + 50 * SECONDS, + (int) TierEU.RECIPE_UEV); + // umv 12 + t++; + TT_recipeAdder.addResearchableAssemblylineRecipe( + Compassline_Casing_UIV.get(1), + 375 << (t - 2), + 1 << (t - 3), + (int) TierEU.RECIPE_UIV, + 1, + new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 6), + ComponentType.Robot_Arm.getComponent(t) + .get(8), + ComponentType.Electric_Piston.getComponent(t) + .get(10), + ComponentType.Electric_Motor.getComponent(t) + .get(16), + GT_OreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.SpaceTime, 4), + GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.SpaceTime, 16), + GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 8), getALCircuit(t, 8), + getALCircuit(t - 1, 16) }, + new FluidStack[] { new FluidStack(sold, 144 * t * 4), CI.getTieredFluid(t - 1, 144 * t * 2), + StackUtils.getTieredFluid(t, 144 * t), Materials.Lubricant.getFluid(1000 * (t - 2)) }, + Compassline_Casing_UMV.get(1), + 50 * 20, + (int) TierEU.RECIPE_UIV); + // uxv 13 + t++; + TT_recipeAdder.addResearchableAssemblylineRecipe( + Compassline_Casing_UMV.get(1), + 375 << (t - 2), + 1 << (t - 3), + (int) TierEU.RECIPE_UMV, + 1, + new Object[] { + GT_OreDictUnificator + .get(OrePrefixes.frameGt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 1), + GT_OreDictUnificator + .get(OrePrefixes.plateDense, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 3), + MyMaterial.shirabon.get(OrePrefixes.plateDense, 3), ComponentType.Robot_Arm.getComponent(t) + .get(8), + ComponentType.Electric_Piston.getComponent(t) + .get(10), + ComponentType.Electric_Motor.getComponent(t) + .get(16), + GT_OreDictUnificator + .get(OrePrefixes.gearGt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 2), + MyMaterial.shirabon.get(OrePrefixes.gearGt, 2), + GT_OreDictUnificator + .get(OrePrefixes.gearGtSmall, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8), + MyMaterial.shirabon.get(OrePrefixes.gearGtSmall, 8), + GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 4), + GT_OreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 4), getALCircuit(t, 8), + getALCircuit(t - 1, 16) }, + new FluidStack[] { new FluidStack(sold, 144 * t * 4), + MaterialsUEVplus.BlackDwarfMatter.getMolten(144 * t * 2), MaterialsUEVplus.Eternity.getMolten(144 * t), + Materials.Lubricant.getFluid(1000 * (t - 2)) }, + Compassline_Casing_UXV.get(1), + 50 * SECONDS, + (int) TierEU.RECIPE_UMV); + } + + private static void generateWrapRecipes() { + for (int i = 0; i <= 11; i++) { + GT_Values.RA.stdBuilder() + .itemInputs(getCircuit(i, 16), GT_Utility.getIntegratedCircuit(16)) + .fluidInputs(Materials.SolderingAlloy.getMolten(72L)) + .itemOutputs(new ItemStack(Loaders.circuitWrap, 1, i)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + } + GT_Values.RA.stdBuilder() + .itemInputs( + GameRegistry.findItemStack("dreamcraft", "item.PikoCircuit", 16), + GT_Utility.getIntegratedCircuit(16)) + .fluidInputs(Materials.SolderingAlloy.getMolten(72L)) + .itemOutputs(new ItemStack(Loaders.circuitWrap, 1, 12)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + GT_Values.RA.stdBuilder() + .itemInputs( + GameRegistry.findItemStack("dreamcraft", "item.QuantumCircuit", 16), + GT_Utility.getIntegratedCircuit(16)) + .fluidInputs(Materials.SolderingAlloy.getMolten(72L)) + .itemOutputs(new ItemStack(Loaders.circuitWrap, 1, 13)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + } + + @SuppressWarnings("unused") + private enum ComponentType { + + Electric_Motor, + Electric_Piston, + Robot_Arm, + Electric_Pump, + Field_Generator, + Conveyor_Module, + Emitter, + Sensor; + + public ItemList getComponent(int tier) { + if (tier < 0 || tier > GT_Values.VN.length) throw new IllegalArgumentException("Tier is out of range!"); + return ItemList.valueOf(this.name() + "_" + GT_Values.VN[tier]); + } + } + + private static ItemStack getCircuit(int tier, long amount) { + return GT_OreDictUnificator.get(OrePrefixes.circuit, getCircuitMaterial(tier), amount); + } + + private static Object[] getALCircuit(int tier, int amount) { + return new Object[] { OrePrefixes.circuit.get(getCircuitMaterial(tier)), amount }; + } + + @Nullable + public static Materials getCircuitMaterial(int tier) { + return Materials.getRealMaterial(circuitTierMaterials[tier]); + } +} diff --git a/goodgen/src/main/java/goodgenerator/loader/ComponentAssemblyLineRecipeLoader.java b/goodgen/src/main/java/goodgenerator/loader/ComponentAssemblyLineRecipeLoader.java new file mode 100644 index 0000000000..f1b16089d9 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/loader/ComponentAssemblyLineRecipeLoader.java @@ -0,0 +1,484 @@ +package goodgenerator.loader; + +import static goodgenerator.util.StackUtils.getTotalItems; +import static goodgenerator.util.StackUtils.mergeStacks; +import static goodgenerator.util.StackUtils.multiplyAndSplitIntoStacks; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.stream.Collectors; + +import javax.annotation.Nullable; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import org.apache.commons.lang3.tuple.Pair; + +import goodgenerator.util.MyRecipeAdder; +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GT_Utility; +import gregtech.common.items.GT_IntegratedCircuit_Item; + +public class ComponentAssemblyLineRecipeLoader { + + private static final String[] compPrefixes = { "Electric_Motor_", "Electric_Piston_", "Electric_Pump_", + "Robot_Arm_", "Conveyor_Module_", "Emitter_", "Sensor_", "Field_Generator_", }; + private static final String[] blacklistedDictPrefixes = { "circuit" }; + private static final String[] softBlacklistedDictPrefixes = { "Any", "crafting", "nanite" }; + private static final String moltenMHDCSM = "molten.magnetohydrodynamicallyconstrainedstarmatter"; + + private static LinkedHashMap<List<GT_Recipe>, Pair<ItemList, Integer>> allAssemblerRecipes; + private static LinkedHashMap<List<GT_Recipe.GT_Recipe_AssemblyLine>, Pair<ItemList, Integer>> allAsslineRecipes; + + private static final HashMap<OrePrefixes, Double> magnetoConversionMultipliers = new HashMap<>(); + private static final HashMap<OrePrefixes, OrePrefixes> conversion = new HashMap<>(); + + private static final int INPUT_MULTIPLIER = 48; + private static final int OUTPUT_MULTIPLIER = 64; + private static final int FLUID_CONVERSION_STACKSIZE_THRESHOLD = 64; + + public static void run() { + ComponentAssemblyLineMiscRecipes.run(); + conversion.put(OrePrefixes.cableGt01, OrePrefixes.cableGt16); + conversion.put(OrePrefixes.wireGt01, OrePrefixes.wireGt16); + conversion.put(OrePrefixes.cableGt02, OrePrefixes.cableGt16); + conversion.put(OrePrefixes.wireGt02, OrePrefixes.wireGt16); + conversion.put(OrePrefixes.cableGt04, OrePrefixes.cableGt16); + conversion.put(OrePrefixes.wireGt04, OrePrefixes.wireGt16); + conversion.put(OrePrefixes.cableGt08, OrePrefixes.cableGt16); + conversion.put(OrePrefixes.wireGt08, OrePrefixes.wireGt16); + conversion.put(OrePrefixes.plate, OrePrefixes.plateDense); + conversion.put(OrePrefixes.foil, OrePrefixes.plate); + conversion.put(OrePrefixes.stick, OrePrefixes.stickLong); + conversion.put(OrePrefixes.gearGtSmall, OrePrefixes.gearGt); + magnetoConversionMultipliers.put(OrePrefixes.frameGt, 1.0); + magnetoConversionMultipliers.put(OrePrefixes.plate, 1.0); + magnetoConversionMultipliers.put(OrePrefixes.plateDense, 3.0); + magnetoConversionMultipliers.put(OrePrefixes.stick, 1.0 / 2.0); + magnetoConversionMultipliers.put(OrePrefixes.round, 1.0 / 8.0); + magnetoConversionMultipliers.put(OrePrefixes.bolt, 1.0 / 8.0); + magnetoConversionMultipliers.put(OrePrefixes.screw, 1.0 / 8.0); + magnetoConversionMultipliers.put(OrePrefixes.ring, 1.0 / 4.0); + magnetoConversionMultipliers.put(OrePrefixes.foil, 1.0 / 8.0); + magnetoConversionMultipliers.put(OrePrefixes.gearGtSmall, 1.0); + magnetoConversionMultipliers.put(OrePrefixes.rotor, 2.0); + magnetoConversionMultipliers.put(OrePrefixes.stickLong, 1.0); + magnetoConversionMultipliers.put(OrePrefixes.gearGt, 2.0); + magnetoConversionMultipliers.put(OrePrefixes.wireFine, 1.0 / 8.0); + findAllRecipes(); + generateAssemblerRecipes(); + generateAsslineRecipes(); + } + + /** Normal assembler recipes (LV-IV) */ + private static void generateAssemblerRecipes() { + allAssemblerRecipes.forEach((recipeList, info) -> { + for (GT_Recipe recipe : recipeList) { + if (recipe != null) { + ArrayList<ItemStack> fixedInputs = new ArrayList<>(); + ArrayList<FluidStack> fixedFluids = new ArrayList<>(); + + for (int j = 0; j < recipe.mInputs.length; j++) { + ItemStack input = recipe.mInputs[j]; + if (GT_Utility.isStackValid(input) && !(input.getItem() instanceof GT_IntegratedCircuit_Item)) + fixedInputs.addAll(multiplyAndSplitIntoStacks(input, INPUT_MULTIPLIER)); + } + for (int j = 0; j < recipe.mFluidInputs.length; j++) { + FluidStack currFluid = recipe.mFluidInputs[j].copy(); + currFluid.amount = currFluid.amount * INPUT_MULTIPLIER; + fixedFluids.add(currFluid); + } + + fixedInputs = compactItems(fixedInputs, info.getRight()); + replaceIntoFluids(fixedInputs, fixedFluids, 64); + int tier = info.getRight(); + int energy = (int) Math.min(Integer.MAX_VALUE - 7, GT_Values.VP[tier - 1]); + MyRecipeAdder.instance.addComponentAssemblyLineRecipe( + fixedInputs.toArray(new ItemStack[0]), + fixedFluids.toArray(new FluidStack[0]), + info.getLeft() + .get(OUTPUT_MULTIPLIER), + recipe.mDuration * INPUT_MULTIPLIER, + energy, + info.getRight()); + } + } + }); + } + + /** Assembly Line Recipes (LuV+) **/ + private static void generateAsslineRecipes() { + allAsslineRecipes.forEach((recipeList, info) -> { + for (GT_Recipe.GT_Recipe_AssemblyLine recipe : recipeList) { + if (recipe != null) { + int componentCircuit = -1; + for (int i = 0; i < compPrefixes.length; i++) if (info.getLeft() + .toString() + .startsWith(compPrefixes[i])) componentCircuit = i + 1; + if (componentCircuit == -1) { + throw new NullPointerException( + "Wrong circuit. Comp: " + info.getLeft() + .toString()); + } + final boolean addProgrammedCircuit = componentCircuit <= 7; + // Arrays of the item and fluid inputs, that are updated to be multiplied and/or condensed in the + // following code + ArrayList<ItemStack> fixedInputs = new ArrayList<>(); + ArrayList<FluidStack> fixedFluids = new ArrayList<>(); + + // Multiplies the original fluid inputs + for (int j = 0; j < recipe.mFluidInputs.length; j++) { + FluidStack currFluid = recipe.mFluidInputs[j].copy(); + currFluid.amount *= (double) INPUT_MULTIPLIER; + fixedFluids.add(currFluid); + } + + // First pass. + for (ItemStack input : recipe.mInputs) { + if (GT_Utility.isStackValid(input)) { + int count = input.stackSize; + // Mulitplies the input by its multiplier, and adjusts the stacks accordingly + if (!(input.getItem() instanceof GT_IntegratedCircuit_Item)) { + + ItemData data = GT_OreDictUnificator.getAssociation(input); + // trying to fix some circuit oredicting issues + + if (data != null && data.mPrefix == OrePrefixes.circuit) fixedInputs.addAll( + multiplyAndSplitIntoStacks( + GT_OreDictUnificator.get(data.mPrefix, data.mMaterial.mMaterial, count), + INPUT_MULTIPLIER)); + else fixedInputs.addAll(multiplyAndSplitIntoStacks(input, INPUT_MULTIPLIER)); + } + } + } + fixedInputs = compactItems(fixedInputs, info.getRight()); + replaceIntoFluids(fixedInputs, fixedFluids, FLUID_CONVERSION_STACKSIZE_THRESHOLD); + // If it overflows then it tries REALLY HARD to cram as much stuff into there. + if (fixedInputs.size() > (addProgrammedCircuit ? 8 : 9)) + replaceIntoFluids(fixedInputs, fixedFluids, FLUID_CONVERSION_STACKSIZE_THRESHOLD / 2); + if (addProgrammedCircuit) fixedInputs.add(GT_Utility.getIntegratedCircuit(componentCircuit)); + + addEternityForMHDCSM(fixedFluids); + MyRecipeAdder.instance.addComponentAssemblyLineRecipe( + fixedInputs.toArray(new ItemStack[0]), + fixedFluids.toArray(new FluidStack[0]), + info.getLeft() + .get(OUTPUT_MULTIPLIER), // The component output + recipe.mDuration * INPUT_MULTIPLIER, // Takes as long as this many + recipe.mEUt, + info.getRight()); // Casing tier + + // Add a second recipe using Styrene-Butadiene + // Rubber instead of Silicone Rubber. + // This relies on silicone rubber being first in + // @allSyntheticRubber so it's quite fragile, but + // it's also the least invasive change. + if (swapSiliconeForStyreneButadiene(fixedFluids)) { + MyRecipeAdder.instance.addComponentAssemblyLineRecipe( + fixedInputs.toArray(new ItemStack[0]), + fixedFluids.toArray(new FluidStack[0]), + info.getLeft() + .get(OUTPUT_MULTIPLIER), // The component output + recipe.mDuration * INPUT_MULTIPLIER, // Takes as long as this many + recipe.mEUt, + info.getRight()); // Casing tier + } + } + } + }); + } + + /** + * Looks for a matching FluidStack and merges the amount of the converted fluid with the one it found. Otherwise, it + * will add the converted to the fluid inputs. + */ + private static void replaceIntoFluids(List<ItemStack> inputs, List<FluidStack> fluidOutputs, int threshold) { + HashMap<ItemStack, Integer> totals = getTotalItems(inputs.toArray(new ItemStack[0])); + ArrayList<ItemStack> newInputs = new ArrayList<>(); + for (ItemStack input : totals.keySet()) { + int count = totals.get(input); + boolean isConverted = false; + if (OreDictionary.getOreIDs(input).length > 0 && count > threshold) { + FluidStack foundFluidStack = tryConvertItemStackToFluidMaterial(input); + + ItemData data = GT_OreDictUnificator.getAssociation(input); + + // Prevents the uncraftable molten magnetic samarium from being converted into fluid during auto + // generation + if (data != null && data.mMaterial.mMaterial == Materials.SamariumMagnetic) { + input = GT_OreDictUnificator.get(data.mPrefix, Materials.Samarium, 1); + foundFluidStack = tryConvertItemStackToFluidMaterial(input); + } else if (data != null && data.mMaterial.mMaterial == Materials.TengamAttuned) { + input = GT_OreDictUnificator.get(data.mPrefix, Materials.TengamPurified, 1); + foundFluidStack = tryConvertItemStackToFluidMaterial(input); + } + + if (foundFluidStack != null) { + foundFluidStack.amount *= count; + boolean alreadyHasFluid = false; + for (FluidStack fluidstack : fluidOutputs) { + if (foundFluidStack.getFluid() + .equals(fluidstack.getFluid())) { + fluidstack.amount += foundFluidStack.amount; + alreadyHasFluid = true; + break; + } + } + if (!alreadyHasFluid) { + fluidOutputs.add(foundFluidStack); + } + isConverted = true; + } + } + if (!isConverted) { + newInputs.add(GT_Utility.copyAmountUnsafe(count, input)); + } + } + inputs.clear(); + inputs.addAll(newInputs); + } + + /** + * Tries to convert {@code input} into its molten form. Because the internal names for material fluids in GT5u, + * GT++, and BartWorks follow the same naming scheme, this method should work for any {@code ItemStack} from any of + * the 3 material systems. + */ + @Nullable + private static FluidStack tryConvertItemStackToFluidMaterial(ItemStack input) { + ArrayList<String> oreDicts = new ArrayList<>(); + for (int id : OreDictionary.getOreIDs(input)) { + oreDicts.add(OreDictionary.getOreName(id)); + } + oreDictLoop: for (String dict : oreDicts) { + for (String blacklistedPrefix : blacklistedDictPrefixes) { + if (dict.startsWith(blacklistedPrefix)) { + return null; + } + } + for (String blacklistedPrefix : softBlacklistedDictPrefixes) { + if (dict.startsWith(blacklistedPrefix)) { + continue oreDictLoop; + } + } + OrePrefixes orePrefix; + try { + orePrefix = OrePrefixes.valueOf(findBestPrefix(dict)); + } catch (Exception e) { + continue; + } + + String strippedOreDict = dict.substring( + orePrefix.toString() + .length()); + + // Prevents things like AnyCopper or AnyIron from messing the search up. + if (strippedOreDict.contains("Any")) continue; + if (strippedOreDict.contains("PTMEG")) return FluidRegistry.getFluidStack( + "molten.silicone", + (int) (orePrefix.mMaterialAmount / (GT_Values.M / 144)) * input.stackSize); + return FluidRegistry.getFluidStack( + "molten." + strippedOreDict.toLowerCase(), + (int) (orePrefix.mMaterialAmount / (GT_Values.M / 144)) * input.stackSize); + } + return null; + } + + /** + * Gives the longest Ore Prefix that the OreDictionary string starts with. This makes it the most accurate prefix. + * For example: If your OreDictionary is something like {@code gearGtSmallSpaceTime}, a conventional search would + * return something like {@code gearGt} instead of {@code gearGtSmall}. This makes the longer String the most + * accurate. + * + * @param oreDict The Ore Dictionary entry + * @return The longest ore prefix that the OreDict string starts with. This makes it the most accurate prefix. + */ + private static String findBestPrefix(String oreDict) { + int longestPrefixLength = 0; + String matchingPrefix = null; + for (OrePrefixes prefix : OrePrefixes.values()) { + String name = prefix.toString(); + if (oreDict.startsWith(name)) { + if (name.length() > longestPrefixLength) { + longestPrefixLength = name.length(); + matchingPrefix = name; + } + } + } + return matchingPrefix; + } + + /** + * Transforms each {@code ItemStack}, if possible, into a more compact form. For example, a stack of 16 1x cables, + * when passed into the {@code items} array, will be converted into a single 16x cable. Also handles GraviStar and + * neutronium nanite conversion. + */ + private static ArrayList<ItemStack> compactItems(List<ItemStack> items, int tier) { + ArrayList<ItemStack> stacks = new ArrayList<>(); + HashMap<ItemStack, Integer> totals = getTotalItems(items); + for (ItemStack itemstack : totals.keySet()) { + int totalItems = totals.get(itemstack); + ItemData data = GT_OreDictUnificator.getAssociation(itemstack); + boolean isCompacted = false; + + for (String dict : Arrays.stream(OreDictionary.getOreIDs(itemstack)) + .mapToObj(OreDictionary::getOreName) + .collect(Collectors.toList())) { + if (dict.startsWith("circuit")) { + stacks.addAll(getWrappedCircuits(itemstack, totalItems, dict)); + isCompacted = true; + break; + } + if (dict.contains("Magneto")) { + stacks.addAll(getMagnetoConversion(itemstack, totalItems)); + isCompacted = true; + break; + } + } + + if (data != null && !isCompacted) { + OrePrefixes goInto = conversion.get(data.mPrefix); + if (goInto != null && GT_OreDictUnificator.get(goInto, data.mMaterial.mMaterial, 1) != null) { + compactorHelper(data, goInto, stacks, totalItems); + isCompacted = true; + } + } + if (GT_Utility.areStacksEqual(itemstack, ItemList.Gravistar.get(1)) && tier >= 9) { + stacks.addAll(multiplyAndSplitIntoStacks(ItemList.NuclearStar.get(1), totalItems / 16)); + isCompacted = true; + } + if (GT_Utility + .areStacksEqual(itemstack, GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Neutronium, 1))) { + stacks.addAll( + multiplyAndSplitIntoStacks( + GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Gold, 1), + totalItems / 16)); + isCompacted = true; + } + if (!isCompacted) stacks.addAll(multiplyAndSplitIntoStacks(itemstack, totalItems)); + } + stacks = mergeStacks(stacks); + return stacks; + } + + /** A helper method for compacting items */ + private static void compactorHelper(ItemData data, OrePrefixes compactInto, ArrayList<ItemStack> output, + int total) { + int materialRatio = (int) ((double) compactInto.mMaterialAmount / data.mPrefix.mMaterialAmount); + output.addAll( + multiplyAndSplitIntoStacks( + GT_OreDictUnificator.get(compactInto, data.mMaterial.mMaterial, 1), + total / materialRatio)); + } + + /** + * Searches the Assembler and Assembly line registry for all the base component recipes. + */ + private static void findAllRecipes() { + allAssemblerRecipes = new LinkedHashMap<>(); + allAsslineRecipes = new LinkedHashMap<>(); + for (String compPrefix : compPrefixes) { + for (int t = 1; t <= 13; t++) { + String vName = GT_Values.VN[t]; + ItemList currentComponent = ItemList.valueOf(compPrefix + vName); + if (currentComponent.hasBeenSet()) { + if (t < 6) { + ArrayList<GT_Recipe> foundRecipes = new ArrayList<>(); + for (GT_Recipe recipe : RecipeMaps.assemblerRecipes.getAllRecipes()) { + if (GT_Utility.areStacksEqual(currentComponent.get(1), recipe.mOutputs[0])) { + foundRecipes.add(recipe); + } + } + allAssemblerRecipes.put(foundRecipes, Pair.of(currentComponent, t)); + } else { + ArrayList<GT_Recipe.GT_Recipe_AssemblyLine> foundRecipes = new ArrayList<>(); + for (GT_Recipe.GT_Recipe_AssemblyLine recipe : GT_Recipe.GT_Recipe_AssemblyLine.sAssemblylineRecipes) { + if (GT_Utility.areStacksEqual(currentComponent.get(1), recipe.mOutput)) { + foundRecipes.add(recipe); + } + } + allAsslineRecipes.put(foundRecipes, Pair.of(currentComponent, t)); + } + } + } + } + } + + private static List<ItemStack> getWrappedCircuits(ItemStack item, int total, String oreDict) { + ArrayList<ItemStack> stacks = new ArrayList<>(); + String circuitMaterial = oreDict.substring(7); + int tier = ComponentAssemblyLineMiscRecipes.NameToTier.get(circuitMaterial); + if (total >= 16) + stacks.addAll(multiplyAndSplitIntoStacks(new ItemStack(Loaders.circuitWrap, 1, tier), total / 16)); + else stacks.addAll(multiplyAndSplitIntoStacks(item, total)); + + return stacks; + } + + private static List<ItemStack> getMagnetoConversion(ItemStack item, int total) { + ArrayList<ItemStack> stacks = new ArrayList<>(); + ItemData data = GT_OreDictUnificator.getAssociation(item); + if (data == null) { + return stacks; + } + if (total >= FLUID_CONVERSION_STACKSIZE_THRESHOLD) { + double multiplier = magnetoConversionMultipliers.get(data.mPrefix); + stacks.addAll( + getWrappedCircuits( + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Infinite, 1), + (int) (total * multiplier), + "circuitInfinite")); + } + stacks.addAll(multiplyAndSplitIntoStacks(item, total)); + return stacks; + } + + private static void addEternityForMHDCSM(ArrayList<FluidStack> fluidInputs) { + boolean eternity = false; + boolean mhdcsm = false; + int mhdcsmAmount = 0; + + for (FluidStack fluidstack : fluidInputs) { + if (fluidstack.getFluid() + .equals(FluidRegistry.getFluid(moltenMHDCSM))) { + mhdcsm = true; + mhdcsmAmount = fluidstack.amount; + } + if (fluidstack.getFluid() + .equals(FluidRegistry.getFluid("molten.eternity"))) { + eternity = true; + } + } + + if (mhdcsm && !eternity) { + // 576 * 48 is substracted because uxv parts have 576L mhdcsm fluid (not solid, so no EIC conversion needed) + // in their assline recipes and each CoAl recipe has 48x recipe inputs + fluidInputs.add(MaterialsUEVplus.Eternity.getMolten(mhdcsmAmount - 576 * 48)); + } + } + + private static boolean swapSiliconeForStyreneButadiene(ArrayList<FluidStack> fluidInputs) { + for (int i = 0; i < fluidInputs.size(); i++) { + FluidStack fluidstack = fluidInputs.get(i); + if (fluidstack.getFluid() + .equals(FluidRegistry.getFluid("molten.silicone"))) { + fluidInputs.set(i, FluidRegistry.getFluidStack("molten.styrenebutadienerubber", fluidstack.amount)); + return true; + } + } + return false; + } +} diff --git a/goodgen/src/main/java/goodgenerator/loader/FuelRecipeLoader.java b/goodgen/src/main/java/goodgenerator/loader/FuelRecipeLoader.java new file mode 100644 index 0000000000..2a1981b201 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/loader/FuelRecipeLoader.java @@ -0,0 +1,168 @@ +package goodgenerator.loader; + +import static goodgenerator.main.GG_Config_Loader.NaquadahFuelTime; +import static goodgenerator.main.GG_Config_Loader.NaquadahFuelVoltage; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; + +import goodgenerator.items.MyMaterial; +import goodgenerator.util.ItemRefer; +import goodgenerator.util.MyRecipeAdder; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_OreDictUnificator; +import gtPlusPlus.core.material.ELEMENT; + +public class FuelRecipeLoader { + + public static void RegisterFuel() { + // MyRecipeAdder.instance.addLiquidMentalFuel(Materials.NaquadahEnriched.getMolten(1L),Materials.Naquadah.getMolten(1L),32768,100); + // MyRecipeAdder.instance.addLiquidMentalFuel(Materials.Naquadria.getMolten(1L),Materials.Naquadah.getMolten(1L),262144,120); + MyRecipeAdder.instance.addLiquidMentalFuel( + MyMaterial.uraniumBasedLiquidFuelExcited.getFluidOrGas(1), + MyMaterial.uraniumBasedLiquidFuelDepleted.getFluidOrGas(1), + NaquadahFuelVoltage[0], + NaquadahFuelTime[0]); + MyRecipeAdder.instance.addLiquidMentalFuel( + MyMaterial.thoriumBasedLiquidFuelExcited.getFluidOrGas(1), + MyMaterial.thoriumBasedLiquidFuelDepleted.getFluidOrGas(1), + NaquadahFuelVoltage[1], + NaquadahFuelTime[1]); + MyRecipeAdder.instance.addLiquidMentalFuel( + MyMaterial.plutoniumBasedLiquidFuelExcited.getFluidOrGas(1), + MyMaterial.plutoniumBasedLiquidFuelDepleted.getFluidOrGas(1), + NaquadahFuelVoltage[2], + NaquadahFuelTime[2]); + MyRecipeAdder.instance.addLiquidMentalFuel( + MyMaterial.naquadahBasedFuelMkI.getFluidOrGas(1), + MyMaterial.naquadahBasedFuelMkIDepleted.getFluidOrGas(1), + NaquadahFuelVoltage[3], + NaquadahFuelTime[3]); + MyRecipeAdder.instance.addLiquidMentalFuel( + MyMaterial.naquadahBasedFuelMkII.getFluidOrGas(1), + MyMaterial.naquadahBasedFuelMkIIDepleted.getFluidOrGas(1), + NaquadahFuelVoltage[4], + NaquadahFuelTime[4]); + MyRecipeAdder.instance.addLiquidMentalFuel( + MyMaterial.naquadahBasedFuelMkIII.getFluidOrGas(1), + MyMaterial.naquadahBasedFuelMkIIIDepleted.getFluidOrGas(1), + NaquadahFuelVoltage[5], + NaquadahFuelTime[5]); + MyRecipeAdder.instance.addLiquidMentalFuel( + MyMaterial.naquadahBasedFuelMkIV.getFluidOrGas(1), + MyMaterial.naquadahBasedFuelMkIVDepleted.getFluidOrGas(1), + NaquadahFuelVoltage[6], + NaquadahFuelTime[6]); + MyRecipeAdder.instance.addLiquidMentalFuel( + MyMaterial.naquadahBasedFuelMkV.getFluidOrGas(1), + MyMaterial.naquadahBasedFuelMkVDepleted.getFluidOrGas(1), + NaquadahFuelVoltage[7], + NaquadahFuelTime[7]); + MyRecipeAdder.instance.addLiquidMentalFuel( + MyMaterial.naquadahBasedFuelMkVI.getFluidOrGas(1), + MyMaterial.naquadahBasedFuelMkVIDepleted.getFluidOrGas(1), + NaquadahFuelVoltage[8], + NaquadahFuelTime[8]); + // MK III Naquadah Fuel + MyRecipeAdder.instance.addNaquadahFuelRefineRecipe( + new FluidStack[] { MyMaterial.heavyNaquadahFuel.getFluidOrGas(800), + MyMaterial.lightNaquadahFuel.getFluidOrGas(1000), }, + new ItemStack[] { MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 4), + WerkstoffLoader.Tiberium.get(OrePrefixes.dust, 27), ItemRefer.High_Density_Uranium.get(2), + ItemRefer.High_Density_Plutonium.get(1), }, + MyMaterial.naquadahBasedFuelMkIII.getFluidOrGas(100), + 1100000, + 100, + 1); + + // Alternative higher tier recipe + MyRecipeAdder.instance.addNaquadahFuelRefineRecipe( + new FluidStack[] { MyMaterial.heavyNaquadahFuel.getFluidOrGas(800), + MyMaterial.lightNaquadahFuel.getFluidOrGas(1000), }, + new ItemStack[] { MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 8), + GT_ModHandler.getModItem("miscutils", "itemDustChromaticGlass", 9), + ItemRefer.High_Density_Uranium.get(2), ItemRefer.High_Density_Plutonium.get(1), }, + MyMaterial.naquadahBasedFuelMkIII.getFluidOrGas(200), + 2100000, + 100, + 1); + // MK IV Naquadah Fuel + MyRecipeAdder.instance.addNaquadahFuelRefineRecipe( + new FluidStack[] { MyMaterial.naquadahBasedFuelMkIII.getFluidOrGas(2000), + Materials.Praseodymium.getMolten(9216L) }, + new ItemStack[] { MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 27), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherStar, 64), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64), + MyMaterial.orundum.get(OrePrefixes.dust, 32), }, + MyMaterial.naquadahBasedFuelMkIV.getFluidOrGas(250), + 46000000, + 160, + 2); + + // Alternate higher tier recipe + MyRecipeAdder.instance.addNaquadahFuelRefineRecipe( + new FluidStack[] { MyMaterial.naquadahBasedFuelMkIII.getFluidOrGas(2000), + new FluidStack(FluidRegistry.getFluid("molten.hypogen"), 1440) }, + new ItemStack[] { MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 27), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bedrockium, 64), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64), + MyMaterial.orundum.get(OrePrefixes.dust, 64), }, + MyMaterial.naquadahBasedFuelMkIV.getFluidOrGas(500), + 75000000, + 160, + 2); + + // MK V Naquadah Fuel + MyRecipeAdder.instance.addNaquadahFuelRefineRecipe( + new FluidStack[] { MyMaterial.naquadahBasedFuelMkIV.getFluidOrGas(2000), + FluidRegistry.getFluidStack("heavyradox", 1000), }, + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Infinity, 16), + MyMaterial.atomicSeparationCatalyst.get(OrePrefixes.dust, 32), }, + MyMaterial.naquadahBasedFuelMkV.getFluidOrGas(500), + 100000000, + 200, + 2); + + // Alternate higher tier recipe + MyRecipeAdder.instance.addNaquadahFuelRefineRecipe( + new FluidStack[] { MyMaterial.naquadahBasedFuelMkIV.getFluidOrGas(2000), + FluidRegistry.getFluidStack("heavyradox", 1000), }, + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsUEVplus.SpaceTime, 8), + GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsUEVplus.TranscendentMetal, 16), + MyMaterial.atomicSeparationCatalyst.get(OrePrefixes.dust, 48), }, + MyMaterial.naquadahBasedFuelMkV.getFluidOrGas(750), + 300000000, + 200, + 3); + + // MK VI Naquadah Fuel + MyRecipeAdder.instance.addNaquadahFuelRefineRecipe( + new FluidStack[] { MyMaterial.naquadahBasedFuelMkV.getFluidOrGas(2000), + FluidRegistry.getFluidStack("molten.shirabon", 1440), }, + new ItemStack[] { ELEMENT.STANDALONE.ASTRAL_TITANIUM.getDust(64), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tritanium, 32), }, + MyMaterial.naquadahBasedFuelMkVI.getFluidOrGas(500), + 320000000, + 240, + 3); + + // Alternate higher tier recipe + MyRecipeAdder.instance.addNaquadahFuelRefineRecipe( + new FluidStack[] { MyMaterial.naquadahBasedFuelMkV.getFluidOrGas(2000), + FluidRegistry.getFluidStack("molten.shirabon", 1440), }, + new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsUEVplus.WhiteDwarfMatter, 8), + ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getDust(64), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tritanium, 48), }, + MyMaterial.naquadahBasedFuelMkVI.getFluidOrGas(750), + 530000000, + 240, + 4); + + } +} diff --git a/goodgen/src/main/java/goodgenerator/loader/FuelRodLoader.java b/goodgen/src/main/java/goodgenerator/loader/FuelRodLoader.java new file mode 100644 index 0000000000..9654479861 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/loader/FuelRodLoader.java @@ -0,0 +1,248 @@ +package goodgenerator.loader; + +import static goodgenerator.util.DescTextLocalization.addText; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import cpw.mods.fml.common.registry.GameRegistry; +import goodgenerator.items.DepletedFuelRod; +import goodgenerator.items.FuelRod; +import goodgenerator.main.GoodGenerator; + +public class FuelRodLoader { + + public static Item rodCompressedUraniumDepleted; + public static Item rodCompressedUraniumDepleted_2; + public static Item rodCompressedUraniumDepleted_4; + public static Item rodCompressedPlutoniumDepleted; + public static Item rodCompressedPlutoniumDepleted_2; + public static Item rodCompressedPlutoniumDepleted_4; + public static Item rodLiquidUraniumDepleted; + public static Item rodLiquidUraniumDepleted_2; + public static Item rodLiquidUraniumDepleted_4; + public static Item rodLiquidPlutoniumDepleted; + public static Item rodLiquidPlutoniumDepleted_2; + public static Item rodLiquidPlutoniumDepleted_4; + public static Item rodCompressedUranium; + public static Item rodCompressedUranium_2; + public static Item rodCompressedUranium_4; + public static Item rodCompressedPlutonium; + public static Item rodCompressedPlutonium_2; + public static Item rodCompressedPlutonium_4; + public static Item rodLiquidUranium; + public static Item rodLiquidUranium_2; + public static Item rodLiquidUranium_4; + public static Item rodLiquidPlutonium; + public static Item rodLiquidPlutonium_2; + public static Item rodLiquidPlutonium_4; + + public static void RegisterRod() { + rodCompressedUraniumDepleted = new DepletedFuelRod( + "rodCompressedUraniumDepleted", + addText("depletedfuelrod.tooltip", 1), + GoodGenerator.GG, + 100); + rodCompressedUraniumDepleted_2 = new DepletedFuelRod( + "rodCompressedUraniumDepleted2", + addText("depletedfuelrod.tooltip", 1), + GoodGenerator.GG, + 200); + rodCompressedUraniumDepleted_4 = new DepletedFuelRod( + "rodCompressedUraniumDepleted4", + addText("depletedfuelrod.tooltip", 1), + GoodGenerator.GG, + 400); + rodCompressedPlutoniumDepleted = new DepletedFuelRod( + "rodCompressedPlutoniumDepleted", + addText("depletedfuelrod.tooltip", 1), + GoodGenerator.GG, + 120); + rodCompressedPlutoniumDepleted_2 = new DepletedFuelRod( + "rodCompressedPlutoniumDepleted2", + addText("depletedfuelrod.tooltip", 1), + GoodGenerator.GG, + 240); + rodCompressedPlutoniumDepleted_4 = new DepletedFuelRod( + "rodCompressedPlutoniumDepleted4", + addText("depletedfuelrod.tooltip", 1), + GoodGenerator.GG, + 480); + rodLiquidUraniumDepleted = new DepletedFuelRod( + "rodLiquidUraniumDepleted", + addText("depletedfuelrod.tooltip", 1), + GoodGenerator.GG, + 800); + rodLiquidUraniumDepleted_2 = new DepletedFuelRod( + "rodLiquidUraniumDepleted2", + addText("depletedfuelrod.tooltip", 1), + GoodGenerator.GG, + 1600); + rodLiquidUraniumDepleted_4 = new DepletedFuelRod( + "rodLiquidUraniumDepleted4", + addText("depletedfuelrod.tooltip", 1), + GoodGenerator.GG, + 3200); + rodLiquidPlutoniumDepleted = new DepletedFuelRod( + "rodLiquidPlutoniumDepleted", + addText("depletedfuelrod.tooltip", 1), + GoodGenerator.GG, + 1000); + rodLiquidPlutoniumDepleted_2 = new DepletedFuelRod( + "rodLiquidPlutoniumDepleted2", + addText("depletedfuelrod.tooltip", 1), + GoodGenerator.GG, + 2000); + rodLiquidPlutoniumDepleted_4 = new DepletedFuelRod( + "rodLiquidPlutoniumDepleted4", + addText("depletedfuelrod.tooltip", 1), + GoodGenerator.GG, + 4000); + + GameRegistry.registerItem(rodCompressedUraniumDepleted, "rodCompressedUraniumDepleted", GoodGenerator.MOD_ID); + GameRegistry + .registerItem(rodCompressedUraniumDepleted_2, "rodCompressedUraniumDepleted2", GoodGenerator.MOD_ID); + GameRegistry + .registerItem(rodCompressedUraniumDepleted_4, "rodCompressedUraniumDepleted4", GoodGenerator.MOD_ID); + GameRegistry + .registerItem(rodCompressedPlutoniumDepleted, "rodCompressedPlutoniumDepleted", GoodGenerator.MOD_ID); + GameRegistry + .registerItem(rodCompressedPlutoniumDepleted_2, "rodCompressedPlutoniumDepleted2", GoodGenerator.MOD_ID); + GameRegistry + .registerItem(rodCompressedPlutoniumDepleted_4, "rodCompressedPlutoniumDepleted4", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodLiquidUraniumDepleted, "rodLiquidUraniumDepleted", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodLiquidUraniumDepleted_2, "rodLiquidUraniumDepleted2", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodLiquidUraniumDepleted_4, "rodLiquidUraniumDepleted4", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodLiquidPlutoniumDepleted, "rodLiquidPlutoniumDepleted", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodLiquidPlutoniumDepleted_2, "rodLiquidPlutoniumDepleted2", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodLiquidPlutoniumDepleted_4, "rodLiquidPlutoniumDepleted4", GoodGenerator.MOD_ID); + + rodCompressedUranium = new FuelRod( + "rodCompressedUranium", + 1, + 100, + 4, + 800, + 70000, + new ItemStack(rodCompressedUraniumDepleted, 1), + GoodGenerator.GG); + rodCompressedUranium_2 = new FuelRod( + "rodCompressedUranium2", + 2, + 100, + 4, + 1600, + 70000, + new ItemStack(rodCompressedUraniumDepleted_2, 1), + GoodGenerator.GG); + rodCompressedUranium_4 = new FuelRod( + "rodCompressedUranium4", + 4, + 100, + 4, + 3200, + 70000, + new ItemStack(rodCompressedUraniumDepleted_4, 1), + GoodGenerator.GG); + rodCompressedPlutonium = new FuelRod( + "rodCompressedPlutonium", + 1, + 50, + 4, + 1000, + 30000, + 6, + new ItemStack(rodCompressedPlutoniumDepleted, 1), + GoodGenerator.GG); + rodCompressedPlutonium_2 = new FuelRod( + "rodCompressedPlutonium2", + 2, + 50, + 4, + 2000, + 30000, + 6, + new ItemStack(rodCompressedPlutoniumDepleted_2, 1), + GoodGenerator.GG); + rodCompressedPlutonium_4 = new FuelRod( + "rodCompressedPlutonium4", + 4, + 50, + 4, + 4000, + 30000, + 6, + new ItemStack(rodCompressedPlutoniumDepleted_4, 1), + GoodGenerator.GG); + rodLiquidUranium = new FuelRod( + "rodLiquidUranium", + 1, + 1200, + 64, + 8000, + 6000, + new ItemStack(rodLiquidUraniumDepleted, 1), + GoodGenerator.GG); + rodLiquidUranium_2 = new FuelRod( + "rodLiquidUranium2", + 2, + 1200, + 64, + 8000, + 6000, + new ItemStack(rodLiquidUraniumDepleted_2, 1), + GoodGenerator.GG); + rodLiquidUranium_4 = new FuelRod( + "rodLiquidUranium4", + 4, + 1200, + 64, + 8000, + 6000, + new ItemStack(rodLiquidUraniumDepleted_4, 1), + GoodGenerator.GG); + rodLiquidPlutonium = new FuelRod( + "rodLiquidPlutonium", + 1, + 1600, + 64, + 10000, + 10000, + 2, + new ItemStack(rodLiquidPlutoniumDepleted, 1), + GoodGenerator.GG); + rodLiquidPlutonium_2 = new FuelRod( + "rodLiquidPlutonium2", + 2, + 1600, + 64, + 10000, + 10000, + 2, + new ItemStack(rodLiquidPlutoniumDepleted_2, 1), + GoodGenerator.GG); + rodLiquidPlutonium_4 = new FuelRod( + "rodLiquidPlutonium4", + 4, + 1600, + 64, + 10000, + 10000, + 2, + new ItemStack(rodLiquidPlutoniumDepleted_4, 1), + GoodGenerator.GG); + + GameRegistry.registerItem(rodCompressedUranium, "rodCompressedUranium", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodCompressedUranium_2, "rodCompressedUranium2", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodCompressedUranium_4, "rodCompressedUranium4", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodCompressedPlutonium, "rodCompressedPlutonium", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodCompressedPlutonium_2, "rodCompressedPlutonium2", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodCompressedPlutonium_4, "rodCompressedPlutonium4", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodLiquidUranium, "rodLiquidUranium", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodLiquidUranium_2, "rodLiquidUranium2", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodLiquidUranium_4, "rodLiquidUranium4", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodLiquidPlutonium, "rodLiquidPlutonium", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodLiquidPlutonium_2, "rodLiquidPlutonium2", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rodLiquidPlutonium_4, "rodLiquidPlutonium4", GoodGenerator.MOD_ID); + } +} diff --git a/goodgen/src/main/java/goodgenerator/loader/Loaders.java b/goodgen/src/main/java/goodgenerator/loader/Loaders.java new file mode 100644 index 0000000000..30ca824dc0 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/loader/Loaders.java @@ -0,0 +1,489 @@ +package goodgenerator.loader; + +import static goodgenerator.util.DescTextLocalization.addText; +import static gregtech.api.enums.Mods.GTPlusPlus; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.registry.GameRegistry; +import goodgenerator.blocks.myFluids.FluidsBuilder; +import goodgenerator.blocks.regularBlock.Casing; +import goodgenerator.blocks.regularBlock.ComplexTextureCasing; +import goodgenerator.blocks.regularBlock.Frame; +import goodgenerator.blocks.regularBlock.TEBlock; +import goodgenerator.blocks.regularBlock.TurbineCasing; +import goodgenerator.blocks.tileEntity.ComponentAssemblyLine; +import goodgenerator.blocks.tileEntity.CoolantTower; +import goodgenerator.blocks.tileEntity.EssentiaHatch; +import goodgenerator.blocks.tileEntity.EssentiaOutputHatch; +import goodgenerator.blocks.tileEntity.EssentiaOutputHatch_ME; +import goodgenerator.blocks.tileEntity.ExtremeHeatExchanger; +import goodgenerator.blocks.tileEntity.FuelRefineFactory; +import goodgenerator.blocks.tileEntity.GTMetaTileEntity.DieselGenerator; +import goodgenerator.blocks.tileEntity.GTMetaTileEntity.NeutronAccelerator; +import goodgenerator.blocks.tileEntity.GTMetaTileEntity.NeutronSensor; +import goodgenerator.blocks.tileEntity.GTMetaTileEntity.YOTTAHatch; +import goodgenerator.blocks.tileEntity.LargeEssentiaGenerator; +import goodgenerator.blocks.tileEntity.LargeEssentiaSmeltery; +import goodgenerator.blocks.tileEntity.LargeFusionComputer1; +import goodgenerator.blocks.tileEntity.LargeFusionComputer2; +import goodgenerator.blocks.tileEntity.LargeFusionComputer3; +import goodgenerator.blocks.tileEntity.LargeFusionComputer4; +import goodgenerator.blocks.tileEntity.LargeFusionComputer5; +import goodgenerator.blocks.tileEntity.MultiNqGenerator; +import goodgenerator.blocks.tileEntity.NeutronActivator; +import goodgenerator.blocks.tileEntity.PreciseAssembler; +import goodgenerator.blocks.tileEntity.SupercriticalFluidTurbine; +import goodgenerator.blocks.tileEntity.UniversalChemicalFuelEngine; +import goodgenerator.blocks.tileEntity.YottaFluidTank; +import goodgenerator.client.render.BlockRenderHandler; +import goodgenerator.crossmod.ic2.CropsLoader; +import goodgenerator.crossmod.nei.NEI_Config; +import goodgenerator.crossmod.thaumcraft.LargeEssentiaEnergyData; +import goodgenerator.items.MyItemBlocks; +import goodgenerator.items.MyItems; +import goodgenerator.items.MyMaterial; +import goodgenerator.items.RadioactiveItem; +import goodgenerator.main.GoodGenerator; +import goodgenerator.util.CrackRecipeAdder; +import goodgenerator.util.MaterialFix; +import gregtech.api.GregTech_API; +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.render.TextureFactory; + +public class Loaders { + + public static final int IDOffset = 32001; + public static final byte GoodGeneratorTexturePage = 12; + + public static final Item _null_ = new MyItems("_null_", null); + + public static final Item radiationProtectionPlate = new MyItems("radiationProtectionPlate", GoodGenerator.GG); + public static final Item wrappedUraniumIngot = new MyItems("wrappedUraniumIngot", GoodGenerator.GG); + public static final Item highDensityUraniumNugget = new RadioactiveItem( + "highDensityUraniumNugget", + GoodGenerator.GG, + 200); + public static final Item highDensityUranium = new RadioactiveItem("highDensityUranium", GoodGenerator.GG, 1800); + public static final Item wrappedThoriumIngot = new MyItems("wrappedThoriumIngot", GoodGenerator.GG); + public static final Item highDensityThoriumNugget = new RadioactiveItem( + "highDensityThoriumNugget", + GoodGenerator.GG, + 50); + public static final Item highDensityThorium = new RadioactiveItem("highDensityThorium", GoodGenerator.GG, 450); + public static final Item wrappedPlutoniumIngot = new MyItems("wrappedPlutoniumIngot", GoodGenerator.GG); + public static final Item highDensityPlutoniumNugget = new RadioactiveItem( + "highDensityPlutoniumNugget", + GoodGenerator.GG, + 450); + public static final Item highDensityPlutonium = new RadioactiveItem("highDensityPlutonium", GoodGenerator.GG, 4050); + public static final Item rawAtomicSeparationCatalyst = new MyItems("rawAtomicSeparationCatalyst", GoodGenerator.GG); + public static final Item advancedRadiationProtectionPlate = new MyItems( + "advancedRadiationProtectionPlate", + GoodGenerator.GG); + public static final Item aluminumNitride = new MyItems("aluminumNitride", "AlN", GoodGenerator.GG); + public static final Item specialCeramics = new MyItems("specialCeramics", GoodGenerator.GG); + public static final Item specialCeramicsPlate = new MyItems("specialCeramicsPlate", GoodGenerator.GG); + public static final Item radioactiveWaste = new RadioactiveItem("radioactiveWaste", GoodGenerator.GG, 400); + public static final Item plasticCase = new MyItems("plasticCase", GoodGenerator.GG); + public static final Item quartzWafer = new MyItems("quartzWafer", GoodGenerator.GG); + public static final Item microHeater = new MyItems("microHeater", GoodGenerator.GG); + public static final Item quartzCrystalResonator = new MyItems("quartzCrystalResonator", GoodGenerator.GG); + public static final Item inverter = new MyItems("inverter", addText("inverter.tooltip", 1), GoodGenerator.GG); + public static final Item neutronSource = new MyItems("neutronSource", GoodGenerator.GG); + public static final Item naquadahMass = new MyItems( + "naquadahMass", + addText("naquadahMass.tooltip", 1), + GoodGenerator.GG); + public static final Item enrichedNaquadahMass = new MyItems( + "enrichedNaquadahMass", + addText("enrichedNaquadahMass.tooltip", 1), + GoodGenerator.GG); + public static final Item naquadriaMass = new MyItems( + "naquadriaMass", + addText("naquadriaMass.tooltip", 1), + GoodGenerator.GG); + public static final Item advancedFuelRod = new MyItems("advancedFuelRod", GoodGenerator.GG); + public static final Item fluidCore = new MyItems( + "fluidCore", + GoodGenerator.GG, + new String[] { GoodGenerator.MOD_ID + ":fluidCore/1", GoodGenerator.MOD_ID + ":fluidCore/2", + GoodGenerator.MOD_ID + ":fluidCore/3", GoodGenerator.MOD_ID + ":fluidCore/4", + GoodGenerator.MOD_ID + ":fluidCore/5", GoodGenerator.MOD_ID + ":fluidCore/6", + GoodGenerator.MOD_ID + ":fluidCore/7", GoodGenerator.MOD_ID + ":fluidCore/8", + GoodGenerator.MOD_ID + ":fluidCore/9", GoodGenerator.MOD_ID + ":fluidCore/10" }); + public static final Item upgradeEssentia = new MyItems( + "upgradeEssentia", + GoodGenerator.GG, + new String[] { GoodGenerator.MOD_ID + ":upgradeEssentia/null", GoodGenerator.MOD_ID + ":upgradeEssentia/air", + GoodGenerator.MOD_ID + ":upgradeEssentia/thermal", GoodGenerator.MOD_ID + ":upgradeEssentia/unstable", + GoodGenerator.MOD_ID + ":upgradeEssentia/victus", GoodGenerator.MOD_ID + ":upgradeEssentia/tainted", + GoodGenerator.MOD_ID + ":upgradeEssentia/mechanics", GoodGenerator.MOD_ID + ":upgradeEssentia/spirit", + GoodGenerator.MOD_ID + ":upgradeEssentia/radiation", GoodGenerator.MOD_ID + ":upgradeEssentia/electric" }); + public static final Item highEnergyMixture = new MyItems( + "highEnergyMixture", + GoodGenerator.GG, + new String[] { GoodGenerator.MOD_ID + ":highEnergyMixture" }); + public static final Item saltyRoot = new MyItems( + "saltyRoot", + GoodGenerator.GG, + new String[] { GoodGenerator.MOD_ID + ":saltyRoot" }); + public static final Item huiCircuit = new MyItems( + "huiCircuit", + addText("huiCircuit.tooltip", 5), + GoodGenerator.GG, + new String[] { GoodGenerator.MOD_ID + ":ciruits/1", GoodGenerator.MOD_ID + ":ciruits/2", + GoodGenerator.MOD_ID + ":ciruits/3", GoodGenerator.MOD_ID + ":ciruits/4", + GoodGenerator.MOD_ID + ":ciruits/5", }); + + public static final Item circuitWrap = new MyItems( + "circuitWrap", + GoodGenerator.GG, + new String[] { GoodGenerator.MOD_ID + ":wraps/0", GoodGenerator.MOD_ID + ":wraps/1", + GoodGenerator.MOD_ID + ":wraps/2", GoodGenerator.MOD_ID + ":wraps/3", GoodGenerator.MOD_ID + ":wraps/4", + GoodGenerator.MOD_ID + ":wraps/5", GoodGenerator.MOD_ID + ":wraps/6", GoodGenerator.MOD_ID + ":wraps/7", + GoodGenerator.MOD_ID + ":wraps/8", GoodGenerator.MOD_ID + ":wraps/9", GoodGenerator.MOD_ID + ":wraps/10", + GoodGenerator.MOD_ID + ":wraps/11", GoodGenerator.MOD_ID + ":wraps/12", GoodGenerator.MOD_ID + ":wraps/13", + GoodGenerator.MOD_ID + ":wraps/14" }); + + public static final Block MAR_Casing = new Casing( + "MAR_Casing", + new String[] { GoodGenerator.MOD_ID + ":MAR_Casing" }); + public static final Block FRF_Casings = new Casing( + "FRF_Casing", + new String[] { "gregtech:iconsets/MACHINE_CASING_MINING_BLACKPLUTONIUM" }); + public static final Block FRF_Coil_1 = new Casing( + "FRF_Coil_1", + new String[] { GoodGenerator.MOD_ID + ":FRF_Coils/1" }); + public static final Block FRF_Coil_2 = new Casing( + "FRF_Coil_2", + new String[] { GoodGenerator.MOD_ID + ":FRF_Coils/2" }); + public static final Block FRF_Coil_3 = new Casing( + "FRF_Coil_3", + new String[] { GoodGenerator.MOD_ID + ":FRF_Coils/3" }); + public static final Block FRF_Coil_4 = new Casing( + "FRF_Coil_4", + new String[] { GoodGenerator.MOD_ID + ":FRF_Coils/4" }); + public static final Block radiationProtectionSteelFrame = new Frame( + "radiationProtectionSteelFrame", + new String[] { GoodGenerator.MOD_ID + ":radiationProtectionSteelFrame" }); + public static final Block fieldRestrictingGlass = new Frame( + "fieldRestrictingGlass", + new String[] { GoodGenerator.MOD_ID + ":fieldRestrictingGlass" }); + public static final Block rawCylinder = new Casing( + "rawCylinder", + new String[] { GoodGenerator.MOD_ID + ":rawCylinder" }); + public static final Block titaniumPlatedCylinder = new Casing( + "titaniumPlatedCylinder", + new String[] { GoodGenerator.MOD_ID + ":titaniumPlatedCylinder" }); + public static final Block magicCasing = new Casing( + "magicCasing", + new String[] { GoodGenerator.MOD_ID + ":MagicCasing" }); + public static final Block essentiaCell = new Casing( + "essentiaCell", + new String[] { GoodGenerator.MOD_ID + ":essentiaCell/1", GoodGenerator.MOD_ID + ":essentiaCell/2", + GoodGenerator.MOD_ID + ":essentiaCell/3", GoodGenerator.MOD_ID + ":essentiaCell/4" }); + public static final Block speedingPipe = new ComplexTextureCasing( + "speedingPipe", + new String[] { GoodGenerator.MOD_ID + ":speedingPipe_SIDE" }, + new String[] { GoodGenerator.MOD_ID + ":speedingPipe_TOP" }); + public static final Block yottaFluidTankCell = new Casing( + "yottaFluidTankCell", + new String[] { GoodGenerator.MOD_ID + ":yottaFluidTankCell/1", GoodGenerator.MOD_ID + ":yottaFluidTankCell/2", + GoodGenerator.MOD_ID + ":yottaFluidTankCell/3", GoodGenerator.MOD_ID + ":yottaFluidTankCell/4", + GoodGenerator.MOD_ID + ":yottaFluidTankCell/5", GoodGenerator.MOD_ID + ":yottaFluidTankCell/6", + GoodGenerator.MOD_ID + ":yottaFluidTankCell/7", GoodGenerator.MOD_ID + ":yottaFluidTankCell/8", + GoodGenerator.MOD_ID + ":yottaFluidTankCell/9", GoodGenerator.MOD_ID + ":yottaFluidTankCell/10", }); + public static final Block yottaFluidTankCasing = new ComplexTextureCasing( + "yottaFluidTankCasing", + new String[] { GoodGenerator.MOD_ID + ":yottaFluidTankCasing_SIDE" }, + new String[] { GoodGenerator.MOD_ID + ":yottaFluidTankCasing_TOP" }); + public static final Block supercriticalFluidTurbineCasing = new TurbineCasing( + "supercriticalFluidTurbineCasing", + "supercriticalFluidTurbineCasing"); + public static final Block pressureResistantWalls = new Casing( + "pressureResistantWalls", + new String[] { GoodGenerator.MOD_ID + ":pressureResistantWalls" }); + public static final Block preciseUnitCasing = new Casing( + "preciseUnitCasing", + new String[] { GoodGenerator.MOD_ID + ":preciseUnitCasing/1", GoodGenerator.MOD_ID + ":preciseUnitCasing/2", + GoodGenerator.MOD_ID + ":preciseUnitCasing/3" }); + public static final Block compactFusionCoil = new Casing( + "compactFusionCoil", + new String[] { GoodGenerator.MOD_ID + ":fuison/1", GoodGenerator.MOD_ID + ":fuison/2", + GoodGenerator.MOD_ID + ":fuison/3", GoodGenerator.MOD_ID + ":fuison/4", + GoodGenerator.MOD_ID + ":fuison/5" }); + public static final Block essentiaFilterCasing = new Casing( + "essentiaFilterCasing", + new String[] { GoodGenerator.MOD_ID + ":essentiaFilterCasing" }); + public static Block essentiaHatch; + public static Block essentiaOutputHatch; + public static Block essentiaOutputHatch_ME; + public static final Block componentAssemblylineCasing = new Casing( + "componentAssemblyLineCasing", + new String[] { GoodGenerator.MOD_ID + ":compAsslineCasing/0", // LV + GoodGenerator.MOD_ID + ":compAsslineCasing/1", // MV + GoodGenerator.MOD_ID + ":compAsslineCasing/2", // HV + GoodGenerator.MOD_ID + ":compAsslineCasing/3", // EV + GoodGenerator.MOD_ID + ":compAsslineCasing/4", // IV + GoodGenerator.MOD_ID + ":compAsslineCasing/5", // LuV + GoodGenerator.MOD_ID + ":compAsslineCasing/6", // ZPM + GoodGenerator.MOD_ID + ":compAsslineCasing/7", // UV + GoodGenerator.MOD_ID + ":compAsslineCasing/8", // UHV + GoodGenerator.MOD_ID + ":compAsslineCasing/9", // UEV + GoodGenerator.MOD_ID + ":compAsslineCasing/10", // UIV + GoodGenerator.MOD_ID + ":compAsslineCasing/11", // UMV + GoodGenerator.MOD_ID + ":compAsslineCasing/12", // UXV + GoodGenerator.MOD_ID + ":compAsslineCasing/13" // MAX + }); + public static ItemStack MAR; + public static ItemStack FRF; + public static ItemStack UCFE; + public static ItemStack LEG; + public static ItemStack NS; + public static ItemStack NA; + public static ItemStack YFT; + public static ItemStack YFH; + public static ItemStack SCTurbine; + public static ItemStack XHE; + public static ItemStack PA; + public static ItemStack LES; + public static ItemStack CT; + public static ItemStack[] LFC = new ItemStack[5]; + + public static ItemStack[] NeutronAccelerators = new ItemStack[9]; + public static ItemStack[] Generator_Diesel = new ItemStack[2]; + + public static ItemStack CompAssline; + // public static Item Isotope = new NuclearMetaItemGenerator(); + + public static void GTMetaTileRegister() { + Loaders.MAR = new MultiNqGenerator(12732, "NaG", "Large Naquadah Reactor").getStackForm(1L); + Loaders.FRF = new FuelRefineFactory(16999, "FRF", "Naquadah Fuel Refinery").getStackForm(1L); + Loaders.UCFE = new UniversalChemicalFuelEngine( + IDOffset, + "UniversalChemicalFuelEngine", + "Universal Chemical Fuel Engine").getStackForm(1L); + for (int i = 0; i < 9; i++) { + Loaders.NeutronAccelerators[i] = new NeutronAccelerator( + IDOffset + 2 + i, + "Neutron Accelerator " + GT_Values.VN[i], + "Neutron Accelerator " + GT_Values.VN[i], + i).getStackForm(1L); + } + Loaders.NS = new NeutronSensor(IDOffset + 11, "Neutron Sensor", "Neutron Sensor", 5).getStackForm(1L); + Loaders.NA = new NeutronActivator(IDOffset + 12, "NeutronActivator", "Neutron Activator").getStackForm(1L); + Loaders.YFT = new YottaFluidTank(IDOffset + 13, "YottaFluidTank", "YOTTank").getStackForm(1L); + Loaders.YFH = new YOTTAHatch(IDOffset + 14, "YottaFluidTankHatch", "YOTHatch", 5).getStackForm(1L); + Loaders.SCTurbine = new SupercriticalFluidTurbine( + IDOffset + 15, + "SupercriticalSteamTurbine", + "SC Steam Turbine").getStackForm(1L); + Loaders.XHE = new ExtremeHeatExchanger(IDOffset + 16, "ExtremeHeatExchanger", "Extreme Heat Exchanger") + .getStackForm(1L); + Loaders.PA = new PreciseAssembler(IDOffset + 17, "PreciseAssembler", "Precise Auto-Assembler MT-3662") + .getStackForm(1L); + Loaders.LFC[0] = new LargeFusionComputer1( + IDOffset + 18, + "LargeFusionComputer1", + "Compact Fusion Computer MK-I Prototype").getStackForm(1); + Loaders.LFC[1] = new LargeFusionComputer2( + IDOffset + 19, + "LargeFusionComputer2", + "Compact Fusion Computer MK-II").getStackForm(1L); + Loaders.LFC[2] = new LargeFusionComputer3( + IDOffset + 20, + "LargeFusionComputer3", + "Compact Fusion Computer MK-III").getStackForm(1L); + if (GTPlusPlus.isModLoaded()) { + Loaders.LFC[3] = new LargeFusionComputer4( + IDOffset + 21, + "LargeFusionComputer4", + "Compact Fusion Computer MK-IV Prototype").getStackForm(1L); + Loaders.LFC[4] = new LargeFusionComputer5( + IDOffset + 22, + "LargeFusionComputer5", + "Compact Fusion Computer MK-V").getStackForm(1L); + } + Loaders.Generator_Diesel[0] = new DieselGenerator( + 1113, + "basicgenerator.diesel.tier.04", + "Turbo Supercharging Combustion Generator", + 4).getStackForm(1L); + Loaders.Generator_Diesel[1] = new DieselGenerator( + 1114, + "basicgenerator.diesel.tier.05", + "Ultimate Chemical Energy Releaser", + 5).getStackForm(1L); + Loaders.CT = new CoolantTower(IDOffset + 24, "CoolantTower", "Coolant Tower").getStackForm(1L); + Loaders.CompAssline = new ComponentAssemblyLine( + IDOffset + 25, + "ComponentAssemblyLine", + "Component Assembly Line").getStackForm(1L); + CrackRecipeAdder.registerPipe(30995, MyMaterial.incoloy903, 15000, 8000, true); + CrackRecipeAdder.registerWire(32749, MyMaterial.signalium, 12, 131072, 16, true); + CrackRecipeAdder.registerWire(32737, MyMaterial.lumiium, 8, 524288, 64, true); + } + + public static void Register() { + + GameRegistry.registerItem(_null_, "_null_", GoodGenerator.MOD_ID); + NEI_Config.hide(_null_); + + GameRegistry.registerBlock(MAR_Casing, MyItemBlocks.class, "MAR_Casing"); + GameRegistry.registerBlock(radiationProtectionSteelFrame, MyItemBlocks.class, "radiationProtectionSteelFrame"); + GameRegistry.registerBlock(fieldRestrictingGlass, MyItemBlocks.class, "fieldRestrictingGlass"); + GameRegistry.registerBlock(FRF_Casings, MyItemBlocks.class, "FRF_Casings"); + GameRegistry.registerBlock(FRF_Coil_1, MyItemBlocks.class, "FRF_Coil_1"); + GameRegistry.registerBlock(FRF_Coil_2, MyItemBlocks.class, "FRF_Coil_2"); + GameRegistry.registerBlock(FRF_Coil_3, MyItemBlocks.class, "FRF_Coil_3"); + GameRegistry.registerBlock(FRF_Coil_4, MyItemBlocks.class, "FRF_Coil_4"); + GameRegistry.registerBlock(rawCylinder, MyItemBlocks.class, "rawCylinder"); + GameRegistry.registerBlock(titaniumPlatedCylinder, MyItemBlocks.class, "titaniumPlatedCylinder"); + GameRegistry.registerBlock(speedingPipe, MyItemBlocks.class, "speedingPipe"); + GameRegistry.registerBlock(yottaFluidTankCell, MyItemBlocks.class, "yottaFluidTankCells"); + GameRegistry.registerBlock(yottaFluidTankCasing, MyItemBlocks.class, "yottaFluidTankCasing"); + GameRegistry + .registerBlock(supercriticalFluidTurbineCasing, MyItemBlocks.class, "supercriticalFluidTurbineCasing"); + GameRegistry.registerBlock(componentAssemblylineCasing, MyItemBlocks.class, "componentAssemblylineCasing"); + GameRegistry.registerBlock(pressureResistantWalls, MyItemBlocks.class, "pressureResistantWalls"); + GameRegistry.registerBlock(preciseUnitCasing, MyItemBlocks.class, "preciseUnitCasing"); + GameRegistry.registerBlock(compactFusionCoil, MyItemBlocks.class, "compactFusionCoil"); + GameRegistry.registerItem(radiationProtectionPlate, "radiationProtectionPlate", GoodGenerator.MOD_ID); + GameRegistry.registerItem(wrappedUraniumIngot, "wrappedUraniumIngot", GoodGenerator.MOD_ID); + GameRegistry.registerItem(highDensityUraniumNugget, "highDensityUraniumNugget", GoodGenerator.MOD_ID); + GameRegistry.registerItem(highDensityUranium, "highDensityUranium", GoodGenerator.MOD_ID); + GameRegistry.registerItem(wrappedThoriumIngot, "wrappedThoriumIngot", GoodGenerator.MOD_ID); + GameRegistry.registerItem(highDensityThoriumNugget, "highDensityThoriumNugget", GoodGenerator.MOD_ID); + GameRegistry.registerItem(highDensityThorium, "highDensityThorium", GoodGenerator.MOD_ID); + GameRegistry.registerItem(wrappedPlutoniumIngot, "wrappedPlutoniumIngot", GoodGenerator.MOD_ID); + GameRegistry.registerItem(highDensityPlutoniumNugget, "highDensityPlutoniumNugget", GoodGenerator.MOD_ID); + GameRegistry.registerItem(highDensityPlutonium, "highDensityPlutonium", GoodGenerator.MOD_ID); + GameRegistry.registerItem(rawAtomicSeparationCatalyst, "rawAtomicSeparationCatalyst", GoodGenerator.MOD_ID); + GameRegistry + .registerItem(advancedRadiationProtectionPlate, "advancedRadiationProtectionPlate", GoodGenerator.MOD_ID); + GameRegistry.registerItem(aluminumNitride, "aluminumNitride", GoodGenerator.MOD_ID); + GameRegistry.registerItem(specialCeramics, "specialCeramics", GoodGenerator.MOD_ID); + GameRegistry.registerItem(specialCeramicsPlate, "specialCeramicsPlate", GoodGenerator.MOD_ID); + GameRegistry.registerItem(radioactiveWaste, "radioactiveWaste", GoodGenerator.MOD_ID); + GameRegistry.registerItem(plasticCase, "plasticCase", GoodGenerator.MOD_ID); + GameRegistry.registerItem(quartzWafer, "quartzWafer", GoodGenerator.MOD_ID); + GameRegistry.registerItem(microHeater, "microHeater", GoodGenerator.MOD_ID); + GameRegistry.registerItem(quartzCrystalResonator, "quartzCrystalResonator", GoodGenerator.MOD_ID); + GameRegistry.registerItem(inverter, "inverter", GoodGenerator.MOD_ID); + GameRegistry.registerItem(neutronSource, "neutronSource", GoodGenerator.MOD_ID); + GameRegistry.registerItem(naquadahMass, "naquadahMass", GoodGenerator.MOD_ID); + GameRegistry.registerItem(enrichedNaquadahMass, "enrichedNaquadahMass", GoodGenerator.MOD_ID); + GameRegistry.registerItem(naquadriaMass, "naquadriaMass", GoodGenerator.MOD_ID); + GameRegistry.registerItem(advancedFuelRod, "advancedFuelRod", GoodGenerator.MOD_ID); + GameRegistry.registerItem(fluidCore, "fluidCore", GoodGenerator.MOD_ID); + GameRegistry.registerItem(highEnergyMixture, "highEnergyMixture", GoodGenerator.MOD_ID); + GameRegistry.registerItem(saltyRoot, "saltyRoot", GoodGenerator.MOD_ID); + GameRegistry.registerItem(huiCircuit, "huiCircuit", GoodGenerator.MOD_ID); + GameRegistry.registerItem(circuitWrap, "circuitWrap", GoodGenerator.MOD_ID); + } + + public static void compactMod() { + if (Loader.isModLoaded("Thaumcraft")) { + LargeEssentiaEnergyData.processEssentiaData(); + GameRegistry.registerItem(upgradeEssentia, "upgradeEssentia", GoodGenerator.MOD_ID); + GameRegistry.registerTileEntity(EssentiaHatch.class, "EssentiaHatch"); + GameRegistry.registerTileEntity(EssentiaOutputHatch.class, "EssentiaOutputHatch"); + GameRegistry.registerTileEntity(EssentiaOutputHatch_ME.class, "EssentiaOutputHatch_ME"); + Loaders.LEG = new LargeEssentiaGenerator(IDOffset + 1, "LargeEssentiaGenerator", "Large Essentia Generator") + .getStackForm(1L); + Loaders.LES = new LargeEssentiaSmeltery(IDOffset + 23, "LargeEssentiaSmeltery", "Large Essentia Smeltery") + .getStackForm(1L); + essentiaHatch = new TEBlock("essentiaHatch", new String[] { GoodGenerator.MOD_ID + ":essentiaHatch" }, 1); + essentiaOutputHatch = new TEBlock( + "essentiaOutputHatch", + new String[] { GoodGenerator.MOD_ID + ":essentiaOutputHatch" }, + 2); + essentiaOutputHatch_ME = new TEBlock( + "essentiaOutputHatch_ME", + new String[] { GoodGenerator.MOD_ID + ":essentiaOutputHatch_ME" }, + 3); + GameRegistry.registerBlock(magicCasing, MyItemBlocks.class, "magicCasing"); + GameRegistry.registerBlock(essentiaCell, MyItemBlocks.class, "essentiaCell"); + GameRegistry.registerBlock(essentiaHatch, MyItemBlocks.class, "essentiaHatch"); + GameRegistry.registerBlock(essentiaOutputHatch, MyItemBlocks.class, "essentiaOutputHatch"); + GameRegistry.registerBlock(essentiaFilterCasing, MyItemBlocks.class, "essentiaFilterCasing"); + GameRegistry.registerBlock(essentiaOutputHatch_ME, MyItemBlocks.class, "essentiaOutputHatch_ME"); + + Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage][0] = TextureFactory.of(magicCasing); + } + } + + public static void addOreDic() { + OreDictionary.registerOre("dustAluminumNitride", aluminumNitride); + } + + public static void addTexturePage() { + if (Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage] == null) { + Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage] = new ITexture[128]; + Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage][1] = TextureFactory + .of(yottaFluidTankCasing); + Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage][2] = TextureFactory + .of(supercriticalFluidTurbineCasing); + Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage][3] = TextureFactory + .of(preciseUnitCasing, 0); + Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage][4] = TextureFactory + .of(preciseUnitCasing, 1); + Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage][5] = TextureFactory + .of(preciseUnitCasing, 2); + Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage][6] = TextureFactory + .of(GregTech_API.sBlockConcretes, 8); + } + } + + public static void preInitLoad() { + Register(); + addOreDic(); + addTexturePage(); + compactMod(); + FluidsBuilder.Register(); + FuelRodLoader.RegisterRod(); + } + + public static void initLoad() { + if (FMLCommonHandler.instance() + .getSide() + .isClient()) { + new BlockRenderHandler(); + } + GTMetaTileRegister(); + initLoadRecipes(); + CropsLoader.registerCrops(); + } + + public static void postInitLoad() { + postInitLoadRecipes(); + } + + public static void completeLoad() { + RecipeLoader_02.FinishLoadRecipe(); + MaterialFix.addRecipeForMultiItems(); + ComponentAssemblyLineRecipeLoader.run(); + } + + public static void initLoadRecipes() { + RecipeLoader.InitLoadRecipe(); + RecipeLoader_02.InitLoadRecipe(); + FuelRecipeLoader.RegisterFuel(); + NaquadahReworkRecipeLoader.RecipeLoad(); + } + + public static void postInitLoadRecipes() { + RecipeLoader.RecipeLoad(); + RecipeLoader.Fixer(); + RecipeLoader_02.RecipeLoad(); + NeutronActivatorLoader.NARecipeLoad(); + } +} diff --git a/goodgen/src/main/java/goodgenerator/loader/NaquadahReworkRecipeLoader.java b/goodgen/src/main/java/goodgenerator/loader/NaquadahReworkRecipeLoader.java new file mode 100644 index 0000000000..ad51d7a99d --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/loader/NaquadahReworkRecipeLoader.java @@ -0,0 +1,1376 @@ +package goodgenerator.loader; + +import static goodgenerator.items.MyMaterial.P507; +import static goodgenerator.items.MyMaterial.adamantine; +import static goodgenerator.items.MyMaterial.concentratedEnrichedNaquadahSludge; +import static goodgenerator.items.MyMaterial.enrichedNaquadahEarth; +import static goodgenerator.items.MyMaterial.enrichedNaquadahGoo; +import static goodgenerator.items.MyMaterial.enrichedNaquadahRichSolution; +import static goodgenerator.items.MyMaterial.enrichedNaquadahSulphate; +import static goodgenerator.items.MyMaterial.fluorineRichWasteLiquid; +import static goodgenerator.items.MyMaterial.fluoroantimonicAcid; +import static goodgenerator.items.MyMaterial.galliumHydroxide; +import static goodgenerator.items.MyMaterial.indiumPhosphate; +import static goodgenerator.items.MyMaterial.inertEnrichedNaquadah; +import static goodgenerator.items.MyMaterial.inertNaquadah; +import static goodgenerator.items.MyMaterial.inertNaquadria; +import static goodgenerator.items.MyMaterial.lowQualityNaquadahEmulsion; +import static goodgenerator.items.MyMaterial.lowQualityNaquadahSolution; +import static goodgenerator.items.MyMaterial.lowQualityNaquadriaPhosphate; +import static goodgenerator.items.MyMaterial.lowQualityNaquadriaSolution; +import static goodgenerator.items.MyMaterial.lowQualityNaquadriaSulphate; +import static goodgenerator.items.MyMaterial.magnesiumSulphate; +import static goodgenerator.items.MyMaterial.naquadahAdamantiumSolution; +import static goodgenerator.items.MyMaterial.naquadahEarth; +import static goodgenerator.items.MyMaterial.naquadahGoo; +import static goodgenerator.items.MyMaterial.naquadahRichSolution; +import static goodgenerator.items.MyMaterial.naquadahine; +import static goodgenerator.items.MyMaterial.naquadriaEarth; +import static goodgenerator.items.MyMaterial.naquadriaGoo; +import static goodgenerator.items.MyMaterial.naquadriaRichSolution; +import static goodgenerator.items.MyMaterial.naquadriaSulphate; +import static goodgenerator.items.MyMaterial.titaniumTrifluoride; +import static goodgenerator.items.MyMaterial.towEthyl1Hexanol; +import static goodgenerator.items.MyMaterial.triniumSulphate; +import static goodgenerator.items.MyMaterial.wasteLiquid; +import static goodgenerator.main.GG_Config_Loader.EnableNaquadahRework; +import static gregtech.api.enums.Mods.GTPlusPlus; +import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; +import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.chemicalReactorRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.recipe.RecipeMaps.mixerRecipes; +import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; +import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; +import static gregtech.api.util.GT_RecipeBuilder.MINUTES; +import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GT_RecipeBuilder.TICKS; +import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; +import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; +import static gregtech.common.items.GT_MetaGenerated_Item_01.registerCauldronCleaningFor; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.HashSet; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraftforge.oredict.ShapelessOreRecipe; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import com.github.bartimaeusnek.bartworks.system.material.GT_Enhancement.PlatinumSludgeOverHaul; +import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; + +import goodgenerator.main.GoodGenerator; +import goodgenerator.util.CrackRecipeAdder; +import goodgenerator.util.ItemRefer; +import goodgenerator.util.MyRecipeAdder; +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GT_Log; +import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GT_Utility; +import gregtech.common.items.CombType; +import gregtech.loaders.misc.GT_Bees; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.item.chemistry.GenericChem; +import gtPlusPlus.core.lib.CORE; + +public class NaquadahReworkRecipeLoader { + + public static void RecipeLoad() { + + if (!EnableNaquadahRework) return; + + if (GTPlusPlus.isModLoaded()) { + try { + // Naquadah (UEV) + CORE.RA.addQuantumTransformerRecipe( + new ItemStack[] { naquadahEarth.get(OrePrefixes.dust, 32), Materials.Sodium.getDust(64), + Materials.Carbon.getDust(1), GT_Utility.copyAmount(0, GenericChem.mSimpleNaquadahCatalyst) }, + new FluidStack[] { Materials.Hydrogen.getGas(64000L), Materials.Fluorine.getGas(64000L), + Materials.Oxygen.getGas(100L) }, + new FluidStack[] {}, + new ItemStack[] { inertNaquadah.get(OrePrefixes.dust, 1), Materials.Titanium.getDust(64), + Materials.Adamantium.getDust(64), Materials.Gallium.getDust(64) }, + new int[] { 2500, 2500, 2500, 2500 }, + 10 * 20, + (int) GT_Values.VP[10], + 2); + // Enriched Naquadah (UIV) + CORE.RA.addQuantumTransformerRecipe( + new ItemStack[] { enrichedNaquadahEarth.get(OrePrefixes.dust, 32), Materials.Zinc.getDust(64), + Materials.Carbon.getDust(1), GT_Utility.copyAmount(0, GenericChem.mSimpleNaquadahCatalyst) }, + new FluidStack[] { Materials.SulfuricAcid.getFluid(16000), Materials.Oxygen.getGas(100L) }, + new FluidStack[] { wasteLiquid.getFluidOrGas(32000) }, + new ItemStack[] { inertEnrichedNaquadah.get(OrePrefixes.dust, 1), Materials.Trinium.getDust(64), }, + new int[] { 3300, 3300, 3300 }, + 10 * 20, + (int) GT_Values.VP[11], + 2); + // Naquadria (UMV) + CORE.RA.addQuantumTransformerRecipe( + new ItemStack[] { naquadriaEarth.get(OrePrefixes.dust, 32), Materials.Magnesium.getDust(64), + GT_Utility.copyAmount(0, GenericChem.mAdvancedNaquadahCatalyst) }, + new FluidStack[] { Materials.PhosphoricAcid.getFluid(16000), Materials.SulfuricAcid.getFluid(16000), + Materials.Oxygen.getGas(100L) }, + new FluidStack[] {}, + new ItemStack[] { inertNaquadria.get(OrePrefixes.dust, 1), Materials.Barium.getDust(64), + Materials.Indium.getDust(64), ItemList.NaquadriaSupersolid.get(1) }, + new int[] { 2500, 2500, 2500, 2500 }, + 5 * 20, + (int) GT_Values.VP[12], + 3); + // Activate Them + MyRecipeAdder.instance.addNeutronActivatorRecipe( + new FluidStack[] { Materials.Nickel.getPlasma(144 * 16) }, + new ItemStack[] { inertNaquadah.get(OrePrefixes.dust, 64), + inertNaquadah.get(OrePrefixes.dust, 32) }, + new FluidStack[] { Materials.Naquadah.getMolten(144 * 9216) }, + new ItemStack[] { Materials.Nickel.getDust(16) }, + 2000, + 600, + 500); + MyRecipeAdder.instance.addNeutronActivatorRecipe( + new FluidStack[] { Materials.Titanium.getPlasma(16 * 144) }, + new ItemStack[] { inertEnrichedNaquadah.get(OrePrefixes.dust, 64), + inertEnrichedNaquadah.get(OrePrefixes.dust, 32) }, + new FluidStack[] { Materials.NaquadahEnriched.getMolten(144 * 9216) }, + new ItemStack[] { Materials.Titanium.getDust(16) }, + 2000, + 900, + 850); + MyRecipeAdder.instance.addNeutronActivatorRecipe( + new FluidStack[] { Materials.Americium.getPlasma(144 * 16) }, + new ItemStack[] { inertNaquadria.get(OrePrefixes.dust, 64), + inertNaquadria.get(OrePrefixes.dust, 32) }, + new FluidStack[] { Materials.Naquadria.getMolten(144 * 9216) }, + new ItemStack[] { Materials.Americium.getDust(16) }, + 2000, + 1100, + 1080); + } catch (Throwable t) { + // Cry about it + } + } + + // Fix shit + GT_Values.RA.stdBuilder() + .itemInputs(lowQualityNaquadriaSolution.get(OrePrefixes.cell, 1)) + .itemOutputs(Materials.Tin.getDust(2)) + .duration(16 * SECONDS + 14 * TICKS) + .eut(4) + .addTo(maceratorRecipes); + + // Naquadah Rework Line + GT_Values.RA.stdBuilder() + .itemInputs(naquadahEarth.get(OrePrefixes.dust, 2), GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(fluoroantimonicAcid.getFluidOrGas(3000)) + .fluidOutputs(lowQualityNaquadahEmulsion.getFluidOrGas(2000)) + .itemOutputs(titaniumTrifluoride.get(OrePrefixes.dust, 4)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .metadata(COIL_HEAT, 3000) + .addTo(blastFurnaceRecipes); + + // TiF3 + 3H = Ti + 3HF + GT_Values.RA.stdBuilder() + .itemInputs(titaniumTrifluoride.get(OrePrefixes.dust, 4), GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Hydrogen.getGas(3000)) + .fluidOutputs(Materials.HydrofluoricAcid.getFluid(3000)) + .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.Titanium, 1)) + .duration(6 * SECONDS) + .eut(TierEU.RECIPE_EV) + .metadata(COIL_HEAT, 2000) + .addTo(blastFurnaceRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_Utility.copyAmount(0, GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Copper, 1)), + Materials.Hydrogen.getCells(8)) + .fluidInputs(FluidRegistry.getFluidStack("seedoil", 3000)) + .itemOutputs(ItemList.Cell_Empty.get(8)) + .fluidOutputs(towEthyl1Hexanol.getFluidOrGas(1000)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + // 2C8H18O + H3PO4 =Na,C2H6O= C16H35O3P + 2H2O + GT_Values.RA.stdBuilder() + .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 2)) + .fluidInputs( + towEthyl1Hexanol.getFluidOrGas(2000), + Materials.PhosphoricAcid.getFluid(1000), + Materials.Ethanol.getFluid(2000)) + .fluidOutputs(P507.getFluidOrGas(1000)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_EV) + .addTo(multiblockChemicalReactorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(lowQualityNaquadahSolution.get(OrePrefixes.cell, 36), P507.get(OrePrefixes.cell, 4)) + .itemOutputs(naquadahAdamantiumSolution.get(OrePrefixes.cell, 30), ItemList.Cell_Empty.get(10)) + .fluidOutputs(fluorineRichWasteLiquid.getFluidOrGas(10000)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(chemicalReactorRecipes); + + GT_Values.RA.stdBuilder() + .fluidInputs(P507.getFluidOrGas(4000), lowQualityNaquadahSolution.getFluidOrGas(36000)) + .fluidOutputs(fluorineRichWasteLiquid.getFluidOrGas(10000), naquadahAdamantiumSolution.getFluidOrGas(30000)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(multiblockChemicalReactorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, 40)) + .fluidInputs(fluorineRichWasteLiquid.getFluidOrGas(1500)) + .fluidOutputs(wasteLiquid.getFluidOrGas(1000)) + .itemOutputs(WerkstoffLoader.Fluorspar.get(OrePrefixes.dust, 60)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(UniversalChemical); + + CrackRecipeAdder.addUniversalDistillationRecipe( + wasteLiquid.getFluidOrGas(10000), + new FluidStack[] { Materials.SaltWater.getFluid(3000), FluidRegistry.getFluidStack("phenol", 2000), + Materials.HydrochloricAcid.getFluid(5000) }, + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 3), + 15 * SECONDS, + TierEU.RECIPE_HV); + + MyRecipeAdder.instance.addNeutronActivatorRecipe( + new FluidStack[] { naquadahAdamantiumSolution.getFluidOrGas(3000) }, + null, + new FluidStack[] { naquadahRichSolution.getFluidOrGas(2000) }, + new ItemStack[] { adamantine.get(OrePrefixes.dust, 4), naquadahEarth.get(OrePrefixes.dust, 2), + concentratedEnrichedNaquadahSludge.get(OrePrefixes.dust, 1) }, + 100, + 230, + 200); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 27)) + .fluidInputs(naquadahRichSolution.getFluidOrGas(5000)) + .itemOutputs(naquadahine.get(OrePrefixes.dust, 30)) + .fluidOutputs(P507.getFluidOrGas(1000)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(autoclaveRecipes); + + // NqO2 + C = CO2 + Nq + GT_Values.RA.stdBuilder() + .itemInputs( + naquadahine.get(OrePrefixes.dust, 3), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1)) + .fluidOutputs(Materials.CarbonDioxide.getGas(1000)) + .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.Naquadah, 1)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_IV) + .metadata(COIL_HEAT, 5000) + .addTo(blastFurnaceRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 27), + GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(lowQualityNaquadahEmulsion.getFluidOrGas(10000)) + .itemOutputs( + galliumHydroxide.get(OrePrefixes.dust, 64), + galliumHydroxide.get(OrePrefixes.dust, 48), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Antimony, 15)) + .outputChances(6250, 6250, 10000) + .fluidOutputs(lowQualityNaquadahSolution.getFluidOrGas(9000)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(enrichedNaquadahEarth.get(OrePrefixes.dust, 4)) + .fluidInputs(P507.getFluidOrGas(1000), Materials.SulfuricAcid.getFluid(18000)) + .fluidOutputs(enrichedNaquadahRichSolution.getFluidOrGas(4000), wasteLiquid.getFluidOrGas(1000)) + .itemOutputs(naquadahEarth.get(OrePrefixes.dust, 1), triniumSulphate.get(OrePrefixes.dust, 1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(multiblockChemicalReactorRecipes); + + // ZnSO4 + 2H = H2SO4 + Zn + GT_Values.RA.stdBuilder() + .itemInputs(WerkstoffLoader.ZincSulfate.get(OrePrefixes.dust, 6)) + .fluidInputs(Materials.Hydrogen.getGas(2000)) + .fluidOutputs(Materials.SulfuricAcid.getFluid(1000)) + .itemOutputs(Materials.Zinc.getDust(1)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_ULV) + .addTo(UniversalChemical); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 60)) + .fluidInputs(enrichedNaquadahRichSolution.getFluidOrGas(10000)) + .itemOutputs(concentratedEnrichedNaquadahSludge.get(OrePrefixes.dust, 8)) + .fluidOutputs(P507.getFluidOrGas(2500)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(autoclaveRecipes); + + MyRecipeAdder.instance.addNeutronActivatorRecipe( + null, + new ItemStack[] { concentratedEnrichedNaquadahSludge.get(OrePrefixes.dust, 16), }, + null, + new ItemStack[] { enrichedNaquadahSulphate.get(OrePrefixes.dust, 64), + enrichedNaquadahSulphate.get(OrePrefixes.dust, 64), enrichedNaquadahSulphate.get(OrePrefixes.dust, 37), + WerkstoffLoader.Sodiumsulfate.get(OrePrefixes.dust, 64), + WerkstoffLoader.Sodiumsulfate.get(OrePrefixes.dust, 64), + WerkstoffLoader.Sodiumsulfate.get(OrePrefixes.dust, 12), + lowQualityNaquadriaSulphate.get(OrePrefixes.dust, 2), }, + 120, + 480, + 460); + + // Nq+(SO4)2 + 2Zn = Nq+ + 2ZnSO4 + GT_Values.RA.stdBuilder() + .itemInputs( + enrichedNaquadahSulphate.get(OrePrefixes.dust, 11), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 2)) + .itemOutputs( + GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.NaquadahEnriched, 1), + WerkstoffLoader.ZincSulfate.get(OrePrefixes.dust, 12)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_IV) + .metadata(COIL_HEAT, 7500) + .addTo(blastFurnaceRecipes); + + // KeSO4 + 2H = Ke + H2SO4 + GT_Values.RA.stdBuilder() + .itemInputs(triniumSulphate.get(OrePrefixes.dust, 6)) + .fluidInputs(Materials.Hydrogen.getGas(2000)) + .fluidOutputs(Materials.SulfuricAcid.getFluid(1000)) + .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Trinium, 1)) + .duration(6 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(multiblockChemicalReactorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(naquadriaEarth.get(OrePrefixes.dust, 4)) + .fluidInputs(Materials.PhosphoricAcid.getFluid(4000)) + .itemOutputs( + indiumPhosphate.get(OrePrefixes.dust, 6), + lowQualityNaquadriaPhosphate.get(OrePrefixes.dust, 4)) + .outputChances(2000, 10000) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(centrifugeRecipes); + + // Ga(OH)3 + 3Na = Ga + 3NaOH + GT_Values.RA.stdBuilder() + .itemInputs( + galliumHydroxide.get(OrePrefixes.dust, 7), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 3)) + .itemOutputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gallium, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 9)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // 2InPO4 + 3Ca = 2In + Ca3(PO4)2 + GT_Values.RA.stdBuilder() + .itemInputs( + indiumPhosphate.get(OrePrefixes.dust, 12), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 3)) + .itemOutputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Indium, 2), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 5)) + .duration(1 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GT_Values.RA.stdBuilder() + .itemInputs(lowQualityNaquadriaPhosphate.get(OrePrefixes.dust, 10), Materials.SulfuricAcid.getCells(30)) + .fluidOutputs(naquadriaRichSolution.getFluidOrGas(9000)) + .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Barite, 1), ItemList.Cell_Empty.get(30)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(UniversalChemical); + + MyRecipeAdder.instance.addNeutronActivatorRecipe( + new FluidStack[] { naquadriaRichSolution.getFluidOrGas(9000) }, + null, + null, + new ItemStack[] { naquadriaSulphate.get(OrePrefixes.dust, 44), + lowQualityNaquadriaSulphate.get(OrePrefixes.dust, 6) }, + 100, + 1100, + 1050); + + GT_Values.RA.stdBuilder() + .itemInputs(lowQualityNaquadriaSulphate.get(OrePrefixes.dust, 3), Materials.Water.getCells(3)) + .fluidInputs(P507.getFluidOrGas(500)) + .fluidOutputs(lowQualityNaquadriaSolution.getFluidOrGas(3500)) + .itemOutputs(ItemList.Cell_Empty.get(3)) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(UniversalChemical); + + CrackRecipeAdder.addUniversalDistillationRecipe( + lowQualityNaquadriaSolution.getFluidOrGas(7000), + new FluidStack[] { P507.getFluidOrGas(1000), naquadriaRichSolution.getFluidOrGas(5400), + Materials.DilutedSulfuricAcid.getFluid(12000) }, + enrichedNaquadahEarth.get(OrePrefixes.dust, 2), + 25 * SECONDS, + TierEU.RECIPE_IV); + + // Nq*(SO4)2 + 2Mg = Nq* + 2MgSO4 + GT_Values.RA.stdBuilder() + .itemInputs( + naquadriaSulphate.get(OrePrefixes.dust, 11), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2)) + .itemOutputs( + GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.Naquadria, 1), + magnesiumSulphate.get(OrePrefixes.dust, 12)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .metadata(COIL_HEAT, 9100) + .addTo(blastFurnaceRecipes); + + // InPO4 + Ga(OH)3 = InGaP + GT_Values.RA.stdBuilder() + .itemInputs( + indiumPhosphate.get(OrePrefixes.dust, 6), + galliumHydroxide.get(OrePrefixes.dust, 7), + GT_Utility.getIntegratedCircuit(2)) + .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.IndiumGalliumPhosphide, 3)) + .duration(15 * TICKS) + .eut(TierEU.RECIPE_ULV) + .addTo(mixerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Ball.get(0)) + .fluidInputs(naquadahGoo.getFluidOrGas(72)) + .itemOutputs(ItemRefer.Naquadah_Mass.get(1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(fluidSolidifierRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Ball.get(0)) + .fluidInputs(enrichedNaquadahGoo.getFluidOrGas(72)) + .itemOutputs(ItemRefer.Enriched_Naquadah_Mass.get(1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(fluidSolidifierRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Ball.get(0)) + .fluidInputs(naquadriaGoo.getFluidOrGas(72)) + .itemOutputs(ItemRefer.Naquadria_Mass.get(1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(fluidSolidifierRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Naquadah_Mass.get(1)) + .itemOutputs(naquadahEarth.get(OrePrefixes.dust, 1), enrichedNaquadahEarth.get(OrePrefixes.dust, 1)) + .outputChances(10000, 100) + .duration(5 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Enriched_Naquadah_Mass.get(1)) + .itemOutputs(enrichedNaquadahEarth.get(OrePrefixes.dust, 1), naquadriaEarth.get(OrePrefixes.dust, 1)) + .outputChances(10000, 100) + .duration(5 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Naquadria_Mass.get(1)) + .itemOutputs(naquadriaEarth.get(OrePrefixes.dust, 1), naquadriaEarth.get(OrePrefixes.dust, 1)) + .outputChances(10000, 100) + .duration(5 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.block, Materials.SiliconSG, 16), + naquadahine.get(OrePrefixes.dust, 3), + ItemList.GalliumArsenideCrystal.get(1L)) + .fluidInputs(Materials.Argon.getGas(8000)) + .itemOutputs(ItemList.Circuit_Silicon_Ingot3.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_IV) + .metadata(COIL_HEAT, 4484) + .addTo(blastFurnaceRecipes); + + // NqO2 + 4Na = 2Na2O + Nq + GT_Values.RA.stdBuilder() + .itemInputs(naquadahine.get(OrePrefixes.dust, 3), Materials.Sodium.getDust(4)) + .itemOutputs(Materials.Naquadah.getDust(1), Materials.SodiumOxide.getDust(6)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(UniversalChemical); + + GT_Values.RA.stdBuilder() + .itemInputs(naquadahEarth.get(OrePrefixes.dust, 2), GT_Utility.getIntegratedCircuit(2)) + .fluidInputs(Materials.Nitrogen.getGas(1000)) + .itemOutputs(Materials.Naquadah.getNuggets(1)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_IV) + .metadata(COIL_HEAT, 5000) + .addTo(blastFurnaceRecipes); + + // C2H4 + H2O(g) = C2H6O + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(24)) + .fluidInputs(Materials.Ethylene.getGas(1000), FluidRegistry.getFluidStack("steam", 2000)) + .fluidOutputs(Materials.Ethanol.getFluid(1000)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(multiblockChemicalReactorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(Materials.Ethylene.getCells(1), GT_Utility.getIntegratedCircuit(24)) + .fluidInputs(FluidRegistry.getFluidStack("steam", 2000)) + .itemOutputs(Materials.Ethanol.getCells(1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(chemicalReactorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.Naquadah, 1)) + .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadah, 1)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(vacuumFreezerRecipes); + } + + public static void SmallRecipeChange() { + + GT_Recipe tRecipe; + + tRecipe = RecipeMaps.chemicalReactorRecipes.findRecipe( + null, + false, + 1 << 30, + new FluidStack[] { Materials.SulfuricAcid.getFluid(500) }, + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Platinum, 16), + ItemList.Empty_Board_Elite.get(2)); + if (tRecipe != null) { + RecipeMaps.chemicalReactorRecipes.getBackend() + .removeRecipe(tRecipe); + GT_Recipe tRecipe2 = tRecipe.copy(); + tRecipe2.mInputs = new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Naquadah, 8), + ItemList.Empty_Board_Elite.get(2) }; + RecipeMaps.chemicalReactorRecipes.add(tRecipe2); + RecipeMaps.chemicalReactorRecipes.getBackend() + .reInit(); + } + + tRecipe = RecipeMaps.multiblockChemicalReactorRecipes.findRecipe( + null, + false, + 1 << 30, + new FluidStack[] { Materials.SulfuricAcid.getFluid(500) }, + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Platinum, 16), + ItemList.Empty_Board_Elite.get(2)); + if (tRecipe != null) { + RecipeMaps.multiblockChemicalReactorRecipes.getBackend() + .removeRecipe(tRecipe); + GT_Recipe tRecipe2 = tRecipe.copy(); + tRecipe2.mInputs = new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Naquadah, 8), + ItemList.Empty_Board_Elite.get(2) }; + RecipeMaps.multiblockChemicalReactorRecipes.add(tRecipe2); + RecipeMaps.multiblockChemicalReactorRecipes.getBackend() + .reInit(); + } + + tRecipe = RecipeMaps.assemblerRecipes.findRecipe( + null, + false, + 1 << 30, + new FluidStack[] { Materials.Polybenzimidazole.getMolten(36) }, + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 2), + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.HSSS, 1), + GT_Utility.getIntegratedCircuit(1)); + if (tRecipe != null) { + RecipeMaps.assemblerRecipes.getBackend() + .removeRecipe(tRecipe); + GT_Recipe tRecipe2 = tRecipe.copy(); + tRecipe2.mInputs = new ItemStack[] { + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 2), + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.NaquadahEnriched, 1) }; + RecipeMaps.assemblerRecipes.add(tRecipe2); + RecipeMaps.assemblerRecipes.getBackend() + .reInit(); + } + } + + public static void Remover() { + + if (!EnableNaquadahRework) return; + + GT_Log.out.print(GoodGenerator.MOD_ID + ": Begin to remove pure Naquadah, Enriched Naquadah and Naquadria.\n"); + + HashSet<GT_Recipe> remove = new HashSet<>(5000); + HashSet<GT_Recipe> reAdd = new HashSet<>(5000); + + // For Crusher + for (GT_Recipe recipe : RecipeMaps.maceratorRecipes.getAllRecipes()) { + ItemStack input = recipe.mInputs[0]; + if (GT_Utility.isStackValid(input)) { + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + if ((OreDictionary.getOreName(oreDictID) + .startsWith("ore") + || OreDictionary.getOreName(oreDictID) + .startsWith("rawOre") + || OreDictionary.getOreName(oreDictID) + .startsWith("crushed")) + && OreDictionary.getOreName(oreDictID) + .contains("Naq")) { + GT_Recipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadahEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + enrichedNaquadahEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadriaEarth.get(OrePrefixes.dust, 1)); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + } + } + } + } + RecipeMaps.maceratorRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(RecipeMaps.maceratorRecipes::add); + RecipeMaps.maceratorRecipes.getBackend() + .reInit(); + + GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + + remove.clear(); + reAdd.clear(); + + GT_Log.out.print("Crusher done!\n"); + + // For Washer + for (GT_Recipe recipe : RecipeMaps.oreWasherRecipes.getAllRecipes()) { + ItemStack input = recipe.mInputs[0]; + if (GT_Utility.isStackValid(input)) { + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + if (OreDictionary.getOreName(oreDictID) + .startsWith("crushed") + && OreDictionary.getOreName(oreDictID) + .contains("Naq")) { + GT_Recipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadahEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + enrichedNaquadahEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadriaEarth.get(OrePrefixes.dust, 1)); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + } + } + } + } + RecipeMaps.oreWasherRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(RecipeMaps.oreWasherRecipes::add); + RecipeMaps.oreWasherRecipes.getBackend() + .reInit(); + + GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + + remove.clear(); + reAdd.clear(); + + GT_Log.out.print("Washer done!\n"); + + // For Thermal Centrifuge + for (GT_Recipe recipe : RecipeMaps.thermalCentrifugeRecipes.getAllRecipes()) { + ItemStack input = recipe.mInputs[0]; + if (GT_Utility.isStackValid(input)) { + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + if (OreDictionary.getOreName(oreDictID) + .startsWith("crushed") + && OreDictionary.getOreName(oreDictID) + .contains("Naq")) { + GT_Recipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadahEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + enrichedNaquadahEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadriaEarth.get(OrePrefixes.dust, 1)); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + } + } + } + } + RecipeMaps.thermalCentrifugeRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(RecipeMaps.thermalCentrifugeRecipes::add); + RecipeMaps.thermalCentrifugeRecipes.getBackend() + .reInit(); + + GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + + remove.clear(); + reAdd.clear(); + + GT_Log.out.print("Thermal Centrifuge done!\n"); + + // For Centrifuge + for (GT_Recipe recipe : RecipeMaps.centrifugeRecipes.getAllRecipes()) { + ItemStack input = null; + if (recipe.mInputs.length > 0) input = recipe.mInputs[0]; + if (GT_Utility.isStackValid(input)) { + int[] oreDict = OreDictionary.getOreIDs(input); + if (input.isItemEqual(GT_Bees.combs.getStackForType(CombType.DOB))) { + GT_Recipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDustTiny(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2L, + naquadahEarth.get(OrePrefixes.dustTiny, 1)); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + } else for (int oreDictID : oreDict) { + if (OreDictionary.getOreName(oreDictID) + .startsWith("dustPureNaq") + || OreDictionary.getOreName(oreDictID) + .startsWith("dustImpureNaq") + || OreDictionary.getOreName(oreDictID) + .startsWith("dustSpace") + || OreDictionary.getOreName(oreDictID) + .startsWith("dustNaq")) { + GT_Recipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDustTiny(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadahEarth.get(OrePrefixes.dustTiny, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDustTiny(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + enrichedNaquadahEarth.get(OrePrefixes.dustTiny, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDustTiny(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadriaEarth.get(OrePrefixes.dustTiny, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadahEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + enrichedNaquadahEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadriaEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDustSmall(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadahEarth.get(OrePrefixes.dustSmall, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDustSmall(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + enrichedNaquadahEarth.get(OrePrefixes.dustSmall, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDustSmall(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadriaEarth.get(OrePrefixes.dustSmall, 1)); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + } + } + } + } + RecipeMaps.centrifugeRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(RecipeMaps.centrifugeRecipes::add); + RecipeMaps.centrifugeRecipes.getBackend() + .reInit(); + + GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + + remove.clear(); + reAdd.clear(); + + GT_Log.out.print("Centrifuge done!\n"); + + // For Centrifuge (PA) + for (GT_Recipe recipe : RecipeMaps.centrifugeNonCellRecipes.getAllRecipes()) { + ItemStack input = null; + if (recipe.mInputs.length > 0) input = recipe.mInputs[0]; + if (GT_Utility.isStackValid(input)) { + int[] oreDict = OreDictionary.getOreIDs(input); + if (input.isItemEqual(GT_Bees.combs.getStackForType(CombType.DOB))) { + GT_Recipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDustTiny(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2L, + naquadahEarth.get(OrePrefixes.dustTiny, 1)); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + } else for (int oreDictID : oreDict) { + if (OreDictionary.getOreName(oreDictID) + .startsWith("dustPureNaq") + || OreDictionary.getOreName(oreDictID) + .startsWith("dustImpureNaq") + || OreDictionary.getOreName(oreDictID) + .startsWith("dustSpace") + || OreDictionary.getOreName(oreDictID) + .startsWith("dustNaq")) { + GT_Recipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDustTiny(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadahEarth.get(OrePrefixes.dustTiny, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDustTiny(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + enrichedNaquadahEarth.get(OrePrefixes.dustTiny, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDustTiny(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadriaEarth.get(OrePrefixes.dustTiny, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadahEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + enrichedNaquadahEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadriaEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDustSmall(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadahEarth.get(OrePrefixes.dustSmall, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDustSmall(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + enrichedNaquadahEarth.get(OrePrefixes.dustSmall, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDustSmall(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadriaEarth.get(OrePrefixes.dustSmall, 1)); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + } + } + } + } + RecipeMaps.centrifugeNonCellRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(RecipeMaps.centrifugeNonCellRecipes::add); + RecipeMaps.centrifugeNonCellRecipes.getBackend() + .reInit(); + + GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + + remove.clear(); + reAdd.clear(); + + GT_Log.out.print("Centrifuge (PA) done!\n"); + + // For Hammer + for (GT_Recipe recipe : RecipeMaps.hammerRecipes.getAllRecipes()) { + ItemStack input = recipe.mInputs[0]; + if (GT_Utility.isStackValid(input)) { + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + if (OreDictionary.getOreName(oreDictID) + .startsWith("crushed") + && OreDictionary.getOreName(oreDictID) + .contains("Naq")) { + GT_Recipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadahEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + enrichedNaquadahEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + naquadriaEarth.get(OrePrefixes.dust, 1)); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + } + } + } + } + RecipeMaps.hammerRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(RecipeMaps.hammerRecipes::add); + RecipeMaps.hammerRecipes.getBackend() + .reInit(); + + GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + + remove.clear(); + reAdd.clear(); + + GT_Log.out.print("Hammer done!\n"); + + // For Chemical Reactor + for (GT_Recipe recipe : RecipeMaps.chemicalReactorRecipes.getAllRecipes()) { + if (recipe.mFluidOutputs == null) continue; + boolean isAny = false; + for (int i = 0; i < recipe.mFluidOutputs.length; i++) { + if (recipe.mFluidOutputs[i] == null) continue; + if (recipe.mFluidOutputs[i].isFluidEqual(Materials.Naquadah.getMolten(1)) + || recipe.mFluidOutputs[i].isFluidEqual(Materials.NaquadahEnriched.getMolten(1)) + || recipe.mFluidOutputs[i].isFluidEqual(Materials.Naquadria.getMolten(1))) { + isAny = true; + break; + } + } + if (!isAny) continue; + GT_Recipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < recipe.mFluidOutputs.length; i++) { + if (recipe.mFluidOutputs[i] == null) continue; + if (recipe.mFluidOutputs[i].isFluidEqual(Materials.Naquadah.getMolten(1))) { + tRecipe.mFluidOutputs[i] = naquadahGoo.getFluidOrGas(recipe.mFluidOutputs[i].amount * 2); + modified = true; + } else if (recipe.mFluidOutputs[i].isFluidEqual(Materials.NaquadahEnriched.getMolten(1))) { + tRecipe.mFluidOutputs[i] = enrichedNaquadahGoo.getFluidOrGas(recipe.mFluidOutputs[i].amount * 2); + modified = true; + } else if (recipe.mFluidOutputs[i].isFluidEqual(Materials.Naquadria.getMolten(1))) { + tRecipe.mFluidOutputs[i] = naquadriaGoo.getFluidOrGas(recipe.mFluidOutputs[i].amount * 2); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + } + RecipeMaps.chemicalReactorRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(RecipeMaps.chemicalReactorRecipes::add); + RecipeMaps.chemicalReactorRecipes.getBackend() + .reInit(); + + GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + + remove.clear(); + reAdd.clear(); + + GT_Log.out.print("Chemical Reactor done!\n"); + + // For Multi Chemical Reactor + for (GT_Recipe recipe : RecipeMaps.multiblockChemicalReactorRecipes.getAllRecipes()) { + if (recipe.mFluidOutputs == null) continue; + boolean isAny = false; + for (int i = 0; i < recipe.mFluidOutputs.length; i++) { + if (recipe.mFluidOutputs[i] == null) continue; + if (recipe.mFluidOutputs[i].isFluidEqual(Materials.Naquadah.getMolten(1)) + || recipe.mFluidOutputs[i].isFluidEqual(Materials.NaquadahEnriched.getMolten(1)) + || recipe.mFluidOutputs[i].isFluidEqual(Materials.Naquadria.getMolten(1))) { + isAny = true; + break; + } + } + if (!isAny) continue; + GT_Recipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < recipe.mFluidOutputs.length; i++) { + if (recipe.mFluidOutputs[i] == null) continue; + if (recipe.mFluidOutputs[i].isFluidEqual(Materials.Naquadah.getMolten(1))) { + tRecipe.mFluidOutputs[i] = naquadahGoo.getFluidOrGas(recipe.mFluidOutputs[i].amount * 2); + modified = true; + } else if (recipe.mFluidOutputs[i].isFluidEqual(Materials.NaquadahEnriched.getMolten(1))) { + tRecipe.mFluidOutputs[i] = enrichedNaquadahGoo.getFluidOrGas(recipe.mFluidOutputs[i].amount * 2); + modified = true; + } else if (recipe.mFluidOutputs[i].isFluidEqual(Materials.Naquadria.getMolten(1))) { + tRecipe.mFluidOutputs[i] = naquadriaGoo.getFluidOrGas(recipe.mFluidOutputs[i].amount * 2); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + } + RecipeMaps.multiblockChemicalReactorRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(RecipeMaps.multiblockChemicalReactorRecipes::add); + RecipeMaps.multiblockChemicalReactorRecipes.getBackend() + .reInit(); + + GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + + remove.clear(); + reAdd.clear(); + + GT_Log.out.print("Multi Chemical Reactor done!\n"); + + if (GTPlusPlus.isModLoaded()) { + // For Gt++ Multi Centrifuge + // Apparently NEI will break down if one modifies the hash list directly. + // GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes_GT.mRecipeList.clear(); + // RecipeGen_MultisUsingFluidInsteadOfCells.generateRecipesNotUsingCells( + // RecipeMaps.centrifugeRecipes, + // GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes_GT); + // GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes_GT.reInit(); + + // For Simple Washer + for (GT_Recipe recipe : GTPPRecipeMaps.simpleWasherRecipes.getAllRecipes()) { + ItemStack input = recipe.mInputs[0]; + if (GT_Utility.isStackValid(input)) { + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + if (OreDictionary.getOreName(oreDictID) + .startsWith("dustImpureNaq") + || OreDictionary.getOreName(oreDictID) + .startsWith("dustPureNaq")) { + GT_Recipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize, + naquadahEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize, + enrichedNaquadahEarth.get(OrePrefixes.dust, 1)); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDust(1))) { + tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i].stackSize, + naquadriaEarth.get(OrePrefixes.dust, 1)); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + } + } + } + } + GTPPRecipeMaps.simpleWasherRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(GTPPRecipeMaps.simpleWasherRecipes::add); + GTPPRecipeMaps.simpleWasherRecipes.getBackend() + .reInit(); + + GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + + remove.clear(); + reAdd.clear(); + + GT_Log.out.print("Simple Washer done!\n"); + } + + // For Cauldron Wash + registerCauldronCleaningFor(Materials.Naquadah, naquadahEarth.getBridgeMaterial()); + registerCauldronCleaningFor(Materials.NaquadahEnriched, enrichedNaquadahEarth.getBridgeMaterial()); + registerCauldronCleaningFor(Materials.Naquadria, naquadriaEarth.getBridgeMaterial()); + GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace 3! "); + GT_Log.out.print("Cauldron Wash done!\n"); + + // For Crafting Table + CraftingManager.getInstance() + .getRecipeList() + .forEach(NaquadahReworkRecipeLoader::replaceInCraftTable); + + GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace Unknown! "); + GT_Log.out.print("Crafting Table done!\n"); + } + + // I don't understand. . . + // I use and copy some private methods in Bartworks because his system runs well. + // Bartworks is under MIT License + /* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY + * KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR + * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + public static void replaceInCraftTable(Object obj) { + + Constructor<?> cs = null; + PlatinumSludgeOverHaul BartObj = null; + try { + cs = PlatinumSludgeOverHaul.class.getDeclaredConstructor(); + cs.setAccessible(true); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } + + if (cs == null) return; + + try { + BartObj = (PlatinumSludgeOverHaul) cs.newInstance(); + } catch (IllegalAccessException | InstantiationException | InvocationTargetException e) { + e.printStackTrace(); + } + + Method recipeCheck = null; + + try { + recipeCheck = PlatinumSludgeOverHaul.class.getDeclaredMethod("checkRecipe", Object.class, Materials.class); + recipeCheck.setAccessible(true); + } catch (Exception e) { + e.printStackTrace(); + } + + String inputName = "output"; + String inputItemName = "input"; + if (!(obj instanceof ShapedOreRecipe || obj instanceof ShapelessOreRecipe)) { + if (obj instanceof ShapedRecipes || (obj instanceof ShapelessRecipes)) { + inputName = "recipeOutput"; + inputItemName = "recipeItems"; + } + } + IRecipe recipe = (IRecipe) obj; + ItemStack result = recipe.getRecipeOutput(); + + Field out = FieldUtils.getDeclaredField(recipe.getClass(), inputName, true); + if (out == null) out = FieldUtils.getField(recipe.getClass(), inputName, true); + + Field in = FieldUtils.getDeclaredField(recipe.getClass(), inputItemName, true); + if (in == null) in = FieldUtils.getField(recipe.getClass(), inputItemName, true); + if (in == null) return; + + // this part here is NOT MIT LICENSED BUT LICSENSED UNDER THE Apache License, Version 2.0! + try { + if (Modifier.isFinal(in.getModifiers())) { + // Do all JREs implement Field with a private ivar called "modifiers"? + Field modifiersField = Field.class.getDeclaredField("modifiers"); + boolean doForceAccess = !modifiersField.isAccessible(); + if (doForceAccess) { + modifiersField.setAccessible(true); + } + try { + modifiersField.setInt(in, in.getModifiers() & ~Modifier.FINAL); + } finally { + if (doForceAccess) { + modifiersField.setAccessible(false); + } + } + } + } catch (NoSuchFieldException ignored) { + // The field class contains always a modifiers field + } catch (IllegalAccessException ignored) { + // The modifiers field is made accessible + } + // END OF APACHE COMMONS COLLECTION COPY + + Object input; + try { + input = in.get(obj); + } catch (IllegalAccessException e) { + e.printStackTrace(); + return; + } + + if (out == null || recipeCheck == null) return; + + if (GT_Utility.areStacksEqual(result, Materials.Naquadah.getDust(1), true)) { + + recipeCheck.setAccessible(true); + boolean isOk = true; + + try { + isOk = (boolean) recipeCheck.invoke(BartObj, input, Materials.Naquadah); + } catch (InvocationTargetException | IllegalAccessException ignored) {} + + if (isOk) return; + try { + out.set(recipe, naquadahEarth.get(OrePrefixes.dust, 2)); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } else if (GT_Utility.areStacksEqual(result, Materials.NaquadahEnriched.getDust(1), true)) { + + recipeCheck.setAccessible(true); + boolean isOk = true; + + try { + isOk = (boolean) recipeCheck.invoke(BartObj, input, Materials.NaquadahEnriched); + } catch (InvocationTargetException | IllegalAccessException ignored) {} + + if (isOk) return; + try { + out.set(recipe, enrichedNaquadahEarth.get(OrePrefixes.dust, 2)); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } else if (GT_Utility.areStacksEqual(result, Materials.Naquadria.getDust(1), true)) { + + recipeCheck.setAccessible(true); + boolean isOk = true; + + try { + isOk = (boolean) recipeCheck.invoke(BartObj, input, Materials.Naquadria); + } catch (InvocationTargetException | IllegalAccessException ignored) {} + + if (isOk) return; + try { + out.set(recipe, naquadriaEarth.get(OrePrefixes.dust, 2)); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } +} diff --git a/goodgen/src/main/java/goodgenerator/loader/NeutronActivatorLoader.java b/goodgen/src/main/java/goodgenerator/loader/NeutronActivatorLoader.java new file mode 100644 index 0000000000..353277dc1f --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/loader/NeutronActivatorLoader.java @@ -0,0 +1,46 @@ +package goodgenerator.loader; + +import static goodgenerator.items.MyMaterial.*; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import goodgenerator.util.MyRecipeAdder; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GT_Utility; + +public class NeutronActivatorLoader { + + public static void NARecipeLoad() { + MyRecipeAdder.instance.addNeutronActivatorRecipe( + new FluidStack[] { thoriumBasedLiquidFuelExcited.getFluidOrGas(200) }, + null, + new FluidStack[] { thoriumBasedLiquidFuelDepleted.getFluidOrGas(200) }, + null, + 10000, + 700, + 500); + + MyRecipeAdder.instance.addNeutronActivatorRecipe( + new FluidStack[] { uraniumBasedLiquidFuel.getFluidOrGas(100) }, + new ItemStack[] { + GT_Utility.copyAmount(0, GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Tungsten, 1)) }, + new FluidStack[] { uraniumBasedLiquidFuelExcited.getFluidOrGas(100) }, + null, + 80, + 550, + 450); + + MyRecipeAdder.instance.addNeutronActivatorRecipe( + new FluidStack[] { plutoniumBasedLiquidFuel.getFluidOrGas(100) }, + new ItemStack[] { + GT_Utility.copyAmount(0, GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Tritanium, 1)) }, + new FluidStack[] { plutoniumBasedLiquidFuelExcited.getFluidOrGas(100) }, + null, + 80, + 600, + 500); + } +} diff --git a/goodgen/src/main/java/goodgenerator/loader/RecipeLoader.java b/goodgen/src/main/java/goodgenerator/loader/RecipeLoader.java new file mode 100644 index 0000000000..0c7ae0e60f --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/loader/RecipeLoader.java @@ -0,0 +1,1466 @@ +package goodgenerator.loader; + +import static gregtech.api.enums.Mods.GTPlusPlus; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; +import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.compressorRecipes; +import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes; +import static gregtech.api.recipe.RecipeMaps.extruderRecipes; +import static gregtech.api.recipe.RecipeMaps.formingPressRecipes; +import static gregtech.api.recipe.RecipeMaps.fusionRecipes; +import static gregtech.api.recipe.RecipeMaps.implosionRecipes; +import static gregtech.api.recipe.RecipeMaps.mixerRecipes; +import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; +import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; +import static gregtech.api.util.GT_RecipeBuilder.HOURS; +import static gregtech.api.util.GT_RecipeBuilder.MINUTES; +import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GT_RecipeBuilder.TICKS; +import static gregtech.api.util.GT_RecipeConstants.ADDITIVE_AMOUNT; +import static gregtech.api.util.GT_RecipeConstants.AssemblyLine; +import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; +import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE; +import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE; +import static gregtech.api.util.GT_RecipeConstants.FUSION_THRESHOLD; +import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM; +import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME; +import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; +import static gregtech.loaders.postload.GT_MachineRecipeLoader.solderingMats; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; + +import goodgenerator.items.MyMaterial; +import goodgenerator.util.CrackRecipeAdder; +import goodgenerator.util.ItemRefer; +import goodgenerator.util.MaterialFix; +import goodgenerator.util.MyRecipeAdder; +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GT_RecipeConstants; +import gregtech.api.util.GT_Utility; + +public class RecipeLoader { + + public static void RecipeLoad() { + + // Radiation Protection Plate + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Iridium, 8L), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 8L), + GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Lead.getMolten(1152)) + .itemOutputs(ItemRefer.Radiation_Protection_Plate.get(1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Lanthanum, 4L), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 8L), + GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Lead.getMolten(1152)) + .itemOutputs(ItemRefer.Radiation_Protection_Plate.get(1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null + ? FluidRegistry.getFluid("molten.indalloy140") + : FluidRegistry.getFluid("molten.solderingalloy"); + + // LNR Controller + GT_Values.RA.stdBuilder() + .metadata( + RESEARCH_ITEM, + ItemList.Generator_Naquadah_Mark_III.get(1) + .copy()) + .metadata(RESEARCH_TIME, 1 * HOURS + 24 * MINUTES) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Adamantium, 8), + ItemRefer.Radiation_Protection_Plate.get(16), + ItemList.Field_Generator_ZPM.get(2), + ItemList.Electric_Pump_ZPM.get(8), + new Object[] { OrePrefixes.circuit.get(Materials.SuperconductorUHV), 4 }, + GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorLuV, 8), + GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Naquadah, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 8), + GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Osmium, 16)) + .fluidInputs( + Materials.Trinium.getMolten(576), + new FluidStack(solderIndalloy, 4608), + Materials.Lubricant.getFluid(8000)) + .itemOutputs(ItemRefer.Large_Naquadah_Reactor.get(1)) + .eut(TierEU.RECIPE_ZPM) + .duration(13 * MINUTES + 30 * SECONDS) + .addTo(AssemblyLine); + + // LNR Casing + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Radiation_Protection_Plate.get(6), + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Europium, 1), + ItemList.Field_Generator_MV.get(1), + GT_Utility.getIntegratedCircuit(1)) + .itemOutputs(ItemRefer.Field_Restriction_Casing.get(1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + // LNR Frame + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.NaquadahAlloy, 8), + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.HSSE, 4), + GT_Utility.getIntegratedCircuit(24)) + .itemOutputs(ItemRefer.Radiation_Proof_Steel_Frame_Box.get(1)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + // Uranium Liquid Fuel Process Line + GT_Values.RA.stdBuilder() + .itemInputs( + MyMaterial.graphiteUraniumMixture.get(OrePrefixes.dust, 4), + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.TungstenCarbide, 2), + GT_Utility.getIntegratedCircuit(1)) + .itemOutputs(ItemRefer.Wrapped_Uranium_Ingot.get(1)) + .duration(1 * MINUTES + 10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Wrapped_Uranium_Ingot.get(4)) + .itemOutputs( + ItemRefer.High_Density_Uranium_Nugget.get(1), + GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.TungstenCarbide, 8)) + .duration(1 * SECONDS) + .eut(TierEU.RECIPE_LV) + .metadata(ADDITIVE_AMOUNT, 8) + .addTo(implosionRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.High_Density_Uranium_Nugget.get(9)) + .itemOutputs(ItemRefer.High_Density_Uranium.get(1)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(compressorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.High_Density_Uranium.get(1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Potassium, 8), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quantium, 4), + GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Radon.getGas(1000L)) + .fluidOutputs(MyMaterial.uraniumBasedLiquidFuel.getFluidOrGas(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LuV / 2) + .addTo(mixerRecipes); + + GT_Values.RA.stdBuilder() + .fluidInputs(MyMaterial.uraniumBasedLiquidFuel.getFluidOrGas(10), Materials.Hydrogen.getGas(100L)) + .fluidOutputs(MyMaterial.uraniumBasedLiquidFuelExcited.getFluidOrGas(10)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_IV) + .metadata(FUSION_THRESHOLD, 200000000) + .addTo(fusionRecipes); + + // Thorium Liquid Process Line + GT_Values.RA.stdBuilder() + .itemInputs( + MyMaterial.uraniumCarbideThoriumMixture.get(OrePrefixes.dust, 64), + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.TungstenSteel, 4), + GT_Utility.getIntegratedCircuit(1)) + .itemOutputs(ItemRefer.Wrapped_Thorium_Ingot.get(1)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Wrapped_Thorium_Ingot.get(1)) + .itemOutputs( + ItemRefer.High_Density_Thorium_Nugget.get(1), + GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.TungstenSteel, 8)) + .duration(1 * SECONDS) + .eut(TierEU.RECIPE_LV) + .metadata(ADDITIVE_AMOUNT, 4) + .addTo(implosionRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.High_Density_Thorium_Nugget.get(9)) + .itemOutputs(ItemRefer.High_Density_Thorium.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(compressorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.High_Density_Thorium.get(1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 4), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Draconium, 2), + GT_Utility.getIntegratedCircuit(2)) + .fluidInputs(Materials.Mercury.getFluid(1000L)) + .fluidOutputs(MyMaterial.thoriumBasedLiquidFuel.getFluidOrGas(4000)) + .duration(2 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_HV / 2) + .addTo(mixerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.thoriumBasedLiquidFuel.get(OrePrefixes.cell, 1), GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Helium.getPlasma(250L)) + .itemOutputs(MyMaterial.thoriumBasedLiquidFuelExcited.get(OrePrefixes.cell, 1)) + .duration(6 * SECONDS) + .eut(TierEU.RECIPE_IV / 2) + .addTo(mixerRecipes); + + // Liquid Plutonium Process Line + GT_Values.RA.stdBuilder() + .itemInputs( + MyMaterial.plutoniumOxideUraniumMixture.get(OrePrefixes.dust, 8), + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.HSSS, 4), + GT_Utility.getIntegratedCircuit(1)) + .itemOutputs(ItemRefer.Wrapped_Plutonium_Ingot.get(1)) + .duration(1 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Wrapped_Plutonium_Ingot.get(2)) + .itemOutputs( + ItemRefer.High_Density_Plutonium_Nugget.get(1), + GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.HSSS, 8)) + .duration(1 * SECONDS) + .eut(TierEU.RECIPE_LV) + .metadata(ADDITIVE_AMOUNT, 16) + .addTo(implosionRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.High_Density_Plutonium_Nugget.get(9)) + .itemOutputs(ItemRefer.High_Density_Plutonium.get(1)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_MV) + .addTo(compressorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.High_Density_Plutonium.get(1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Neutronium, 8), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Caesium, 16), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 2), + GT_Utility.getIntegratedCircuit(1)) + .fluidOutputs(MyMaterial.plutoniumBasedLiquidFuel.getFluidOrGas(1000)) + .duration(18 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(mixerRecipes); + + GT_Values.RA.stdBuilder() + .fluidInputs(Materials.Lutetium.getMolten(16), MyMaterial.plutoniumBasedLiquidFuel.getFluidOrGas(20)) + .fluidOutputs(MyMaterial.plutoniumBasedLiquidFuelExcited.getFluidOrGas(20)) + .duration(1 * SECONDS) + .eut(TierEU.RECIPE_LuV / 2) + .metadata(FUSION_THRESHOLD, 220000000) + .addTo(fusionRecipes); + + // Th-232 + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 24), + MyMaterial.vanadiumPentoxide.get(OrePrefixes.dust, 0), + GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(FluidRegistry.getFluidStack("nitricacid", 6000)) + .fluidOutputs(MyMaterial.oxalate.getFluidOrGas(3000), Materials.NitricOxide.getGas(6000)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(multiblockChemicalReactorRecipes); + + // Th + 2O = ThO2 + GT_Values.RA.stdBuilder() + .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 1)) + .fluidInputs(Materials.Oxygen.getGas(2000)) + .itemOutputs(WerkstoffLoader.Thorianit.get(OrePrefixes.dust, 3)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .metadata(COIL_HEAT, 1200) + .addTo(blastFurnaceRecipes); + + // Th + 8HNO3 =HF= Th(NO3)4 + 4NO2 + 4H2O + GT_Values.RA.stdBuilder() + .itemInputs(Materials.Thorium.getDust(1)) + .fluidInputs(Materials.HydrofluoricAcid.getFluid(100), FluidRegistry.getFluidStack("nitricacid", 8000)) + .fluidOutputs(MyMaterial.thoriumNitrate.getFluidOrGas(1000), Materials.NitrogenDioxide.getGas(4000)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(multiblockChemicalReactorRecipes); + + // 4NaOH + Th(NO3)4 = Th(OH)4 + 4NaNO3 + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1), Materials.SodiumHydroxide.getDust(12)) + .fluidInputs(MyMaterial.thoriumNitrate.getFluidOrGas(1000)) + .itemOutputs( + MyMaterial.thoriumHydroxide.get(OrePrefixes.dust, 9), + WerkstoffLoader.SodiumNitrate.get(OrePrefixes.dust, 20)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(UniversalChemical); + + // 2 NaNO3 + H2SO4 = Na2SO4 + 2HNO3 + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1), WerkstoffLoader.SodiumNitrate.get(OrePrefixes.dust, 10)) + .fluidInputs(Materials.SulfuricAcid.getFluid(1000)) + .fluidOutputs(Materials.NitricAcid.getFluid(2000)) + .itemOutputs(WerkstoffLoader.Sodiumsulfate.get(OrePrefixes.dust, 7)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + // Th(OH)4 + 4HF = ThF4 + 4H2O + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.thoriumHydroxide.get(OrePrefixes.dust, 9), GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(Materials.HydrofluoricAcid.getFluid(4000)) + .fluidOutputs(MyMaterial.thoriumTetrafluoride.getFluidOrGas(1000)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // Zn + 2Cl = ZnCl2 + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1), + GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Chlorine.getGas(2000)) + .itemOutputs(MyMaterial.zincChloride.get(OrePrefixes.dust, 3)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // ZnCl2 + 3Ca + ThF4 = ZnTh + CaCl2 + 2CaF2 + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.zincChloride.get(OrePrefixes.dust, 3), Materials.Calcium.getDust(3)) + .fluidInputs(MyMaterial.thorium232Tetrafluoride.getFluidOrGas(1000)) + .fluidOutputs(WerkstoffLoader.CalciumChloride.getFluidOrGas(3000)) + .itemOutputs( + MyMaterial.zincThoriumAlloy.get(OrePrefixes.ingot, 1), + WerkstoffLoader.Fluorspar.get(OrePrefixes.dust, 6)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_MV) + .metadata(COIL_HEAT, 3000) + .addTo(blastFurnaceRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.zincThoriumAlloy.get(OrePrefixes.ingot, 1), GT_Utility.getIntegratedCircuit(11)) + .fluidInputs(Materials.Argon.getGas(250)) + .fluidOutputs(Materials.Zinc.getMolten(144)) + .itemOutputs(WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 1)) + .duration(7 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_HV) + .metadata(COIL_HEAT, 1900) + .addTo(blastFurnaceRecipes); + + // 2V + 5O = V2O5 + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Vanadium, 2), + GT_Utility.getIntegratedCircuit(24)) + .fluidInputs(Materials.Oxygen.getGas(5000)) + .itemOutputs(MyMaterial.vanadiumPentoxide.get(OrePrefixes.dust, 7)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .metadata(COIL_HEAT, 2500) + .addTo(blastFurnaceRecipes); + + // Atomic Separation Catalyst + ItemStack[] mat1 = new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 32), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Firestone, 4) }; + ItemStack[] mat2 = new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Draconium, 4), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quantium, 4), }; + ItemStack[] mat3 = new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ardite, 4), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Manyullyn, 4) }; + + for (ItemStack m1 : mat1) { + for (ItemStack m2 : mat2) { + for (ItemStack m3 : mat3) { + GT_Values.RA.stdBuilder() + .itemInputs(m1, m2, m3, GT_Utility.getIntegratedCircuit(4)) + .fluidInputs(Materials.Naquadah.getMolten(288)) + .itemOutputs(ItemRefer.Raw_Atomic_Separation_Catalyst.get(63)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(mixerRecipes); + } + } + } + + GT_Values.RA.stdBuilder() + .itemInputs( + WerkstoffLoader.Tiberium.get(OrePrefixes.plate, 1), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Silicon, 8)) + .itemOutputs(MyMaterial.orundum.get(OrePrefixes.plate, 1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV / 2) + .addTo(formingPressRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.orundum.get(OrePrefixes.plate, 2), ItemRefer.Raw_Atomic_Separation_Catalyst.get(4)) + .fluidInputs(Materials.Plutonium.getMolten(144)) + .itemOutputs(MyMaterial.atomicSeparationCatalyst.get(OrePrefixes.ingotHot, 1)) + .duration(3 * MINUTES) + .eut(TierEU.RECIPE_HV) + .metadata(COIL_HEAT, 5000) + .addTo(blastFurnaceRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.atomicSeparationCatalyst.get(OrePrefixes.ingotHot, 1)) + .itemOutputs(MyMaterial.atomicSeparationCatalyst.get(OrePrefixes.ingot, 1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(vacuumFreezerRecipes); + + CrackRecipeAdder.crackerAdder( + MyMaterial.naquadahGas.getFluidOrGas(1000), + MyMaterial.atomicSeparationCatalyst.getMolten(4), + new FluidStack[] { Materials.Helium.getGas(300), WerkstoffLoader.Neon.getFluidOrGas(50), + Materials.Argon.getGas(80), WerkstoffLoader.Krypton.getFluidOrGas(20), + WerkstoffLoader.Xenon.getFluidOrGas(40), Materials.Radon.getGas(14000) }, + GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Naquadah, 1), + 6, + 4020, + 300); + + CrackRecipeAdder.crackerAdder( + MyMaterial.lightNaquadahFuel.getFluidOrGas(1000), + MyMaterial.atomicSeparationCatalyst.getMolten(4), + new FluidStack[] { Materials.Radon.getGas(1400), MyMaterial.naquadahGas.getFluidOrGas(400), + Materials.Uranium.getMolten(648), MyMaterial.heavyNaquadahFuel.getFluidOrGas(280), + Materials.Plutonium.getMolten(576), MyMaterial.naquadahAsphalt.getFluidOrGas(140) }, + GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Uranium235, 1), + 6, + 4020, + 450); + + CrackRecipeAdder.crackerAdder( + MyMaterial.heavyNaquadahFuel.getFluidOrGas(1000), + MyMaterial.atomicSeparationCatalyst.getMolten(6), + new FluidStack[] { Materials.Radon.getGas(1000), MyMaterial.naquadahGas.getFluidOrGas(450), + MyMaterial.lightNaquadahFuel.getFluidOrGas(560), Materials.Uranium.getMolten(720), + Materials.Lutetium.getMolten(648), MyMaterial.naquadahAsphalt.getFluidOrGas(240) }, + GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium, 1), + 6, + 4020, + 500); + + CrackRecipeAdder.crackerAdder( + MyMaterial.naquadahAsphalt.getFluidOrGas(1000), + MyMaterial.atomicSeparationCatalyst.getMolten(12), + new FluidStack[] { MyMaterial.lightNaquadahFuel.getFluidOrGas(600), Materials.Uranium.getMolten(1152), + Materials.Thorium.getMolten(864), Materials.Plutonium.getMolten(792), Materials.Thulium.getMolten(216), + MyMaterial.heavyNaquadahFuel.getFluidOrGas(350) }, + GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Naquadria, 1), + 6, + 4020, + 800); + + // 2C2H6O =H2SO4= C4H10O + H2O + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(2)) + .fluidInputs(Materials.Ethanol.getFluid(1000), Materials.SulfuricAcid.getFluid(1000)) + .fluidOutputs(MyMaterial.ether.getFluidOrGas(500), Materials.DilutedSulfuricAcid.getFluid(1500)) + .duration(25 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(multiblockChemicalReactorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(Materials.GasolineRaw.getCells(9), Materials.Ethanol.getCells(1)) + .itemOutputs(MyMaterial.ethanolGasoline.get(OrePrefixes.cell, 10)) + .duration(15 * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(UniversalChemical); + + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.ether.get(OrePrefixes.cell)) + .metadata(FUEL_VALUE, 537) + .metadata(FUEL_TYPE, 0) + .addTo(GT_RecipeConstants.Fuel); + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.ether.get(OrePrefixes.cell)) + .metadata(FUEL_VALUE, 537) + .metadata(FUEL_TYPE, 1) + .addTo(GT_RecipeConstants.Fuel); + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.ethanolGasoline.get(OrePrefixes.cell)) + .metadata(FUEL_VALUE, 1100) + .metadata(FUEL_TYPE, 0) + .addTo(GT_RecipeConstants.Fuel); + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.cyclopentadiene.get(OrePrefixes.cell)) + .metadata(FUEL_VALUE, 70) + .metadata(FUEL_TYPE, 1) + .addTo(GT_RecipeConstants.Fuel); + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.ironedFuel.get(OrePrefixes.cell)) + .metadata(FUEL_VALUE, 2248) + .metadata(FUEL_TYPE, 0) + .addTo(GT_RecipeConstants.Fuel); + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.ironedKerosene.get(OrePrefixes.cell)) + .metadata(FUEL_VALUE, 1824) + .metadata(FUEL_TYPE, 0) + .addTo(GT_RecipeConstants.Fuel); + + // Sb + 3Cl = SbCl3 + GT_Values.RA.stdBuilder() + .itemInputs( + GT_Utility.getIntegratedCircuit(1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Antimony, 1)) + .fluidInputs(MyMaterial.ether.getFluidOrGas(1000), Materials.Chlorine.getGas(3000)) + .fluidOutputs(MyMaterial.antimonyTrichloride.getFluidOrGas(1000)) + .duration(3 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(multiblockChemicalReactorRecipes); + + // SbCl3 + 2Cl = SbCl5 + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(MyMaterial.antimonyTrichloride.getFluidOrGas(1000), Materials.Chlorine.getGas(2000)) + .fluidOutputs(MyMaterial.antimonyPentachlorideSolution.getFluidOrGas(1000)) + .duration(9 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(multiblockChemicalReactorRecipes); + + CrackRecipeAdder.addUniversalDistillationRecipe( + MyMaterial.antimonyPentachlorideSolution.getFluidOrGas(1000), + new FluidStack[] { MyMaterial.ether.getFluidOrGas(1000), + MyMaterial.antimonyPentachloride.getFluidOrGas(1000) }, + GT_Values.NI, + 30 * SECONDS, + TierEU.RECIPE_MV); + + // SbCl5 + 5HF = SbF5 + 5HCl + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1)) + .fluidInputs( + MyMaterial.antimonyPentachloride.getFluidOrGas(1000), + Materials.HydrofluoricAcid.getFluid(5000)) + .fluidOutputs( + MyMaterial.antimonyPentafluoride.getFluidOrGas(1000), + Materials.HydrochloricAcid.getFluid(5000)) + .duration(21 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(multiblockChemicalReactorRecipes); + + // SbH5 + HF = HSbF6 + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1)) + .fluidInputs( + MyMaterial.antimonyPentafluoride.getFluidOrGas(1000), + Materials.HydrofluoricAcid.getFluid(1000)) + .fluidOutputs(MyMaterial.fluoroantimonicAcid.getFluidOrGas(1000)) + .duration(42 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(multiblockChemicalReactorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahEnriched, 16), + GT_Utility.getIntegratedCircuit(16)) + .fluidInputs(Materials.HydrofluoricAcid.getFluid(3000)) + .fluidOutputs(MyMaterial.acidNaquadahEmulsion.getFluidOrGas(2000)) + .itemOutputs(MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 3)) + .duration(3 * MINUTES) + .eut(TierEU.RECIPE_EV) + .metadata(COIL_HEAT, 3400) + .addTo(blastFurnaceRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_Utility.getIntegratedCircuit(3), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, 8)) + .fluidInputs(MyMaterial.acidNaquadahEmulsion.getFluidOrGas(1000)) + .fluidOutputs(MyMaterial.naquadahEmulsion.getFluidOrGas(1000)) + .itemOutputs( + GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.AntimonyTrioxide, 1), + WerkstoffLoader.Fluorspar.get(OrePrefixes.dust, 4)) + .duration(12 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(multiblockChemicalReactorRecipes); + + CrackRecipeAdder.addUniversalDistillationRecipe( + MyMaterial.naquadahSolution.getFluidOrGas(20), + new FluidStack[] { MyMaterial.naquadahAsphalt.getFluidOrGas(2), + MyMaterial.heavyNaquadahFuel.getFluidOrGas(5), MyMaterial.lightNaquadahFuel.getFluidOrGas(10), + FluidRegistry.getFluidStack("water", 10), MyMaterial.naquadahGas.getFluidOrGas(60) }, + GT_Values.NI, + 1 * SECONDS, + TierEU.RECIPE_EV); + + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.naquadahGas.get(OrePrefixes.cell)) + .metadata(FUEL_VALUE, 1024) + .metadata(FUEL_TYPE, 1) + .addTo(GT_RecipeConstants.Fuel); + + GT_Values.RA.stdBuilder() + .fluidInputs( + MyMaterial.lightNaquadahFuel.getFluidOrGas(780), + MyMaterial.heavyNaquadahFuel.getFluidOrGas(360)) + .fluidOutputs(MyMaterial.naquadahBasedFuelMkI.getFluidOrGas(100)) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .metadata(FUSION_THRESHOLD, 320000000) + .addTo(fusionRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_Utility.getIntegratedCircuit(1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherStar, 4), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.ElectrumFlux, 32)) + .fluidInputs(MyMaterial.naquadahBasedFuelMkI.getFluidOrGas(100), MyMaterial.naquadahGas.getFluidOrGas(1500)) + .fluidOutputs(MyMaterial.naquadahBasedFuelMkII.getFluidOrGas(100)) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_UHV / 2) + .addTo(multiblockChemicalReactorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 32), + GT_Utility.getIntegratedCircuit(16)) + .fluidInputs(MyMaterial.fluoroantimonicAcid.getFluidOrGas(4000)) + .fluidOutputs(MyMaterial.acidNaquadahEmulsion.getFluidOrGas(8000)) + .itemOutputs(MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 17)) + .duration(3 * MINUTES) + .eut(TierEU.RECIPE_IV / 2) + .metadata(COIL_HEAT, 3400) + .addTo(blastFurnaceRecipes); + + GT_Values.RA.stdBuilder() + .metadata( + RESEARCH_ITEM, + ItemList.Generator_Naquadah_Mark_V.get(1) + .copy()) + .metadata(RESEARCH_TIME, 7 * HOURS) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmiridium, 8), + ItemRefer.Advanced_Radiation_Protection_Plate.get(64), + ItemList.Field_Generator_UV.get(8), + ItemList.Electric_Pump_UHV.get(2), + new Object[] { OrePrefixes.circuit.get(Materials.Bio), 4 }, + GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.MysteriousCrystal, 8), + ItemList.Circuit_Wafer_NPIC.get(16), + ItemList.UHV_Coil.get(64), + new Object[] { "craftingLensYellow", 16 }, + GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Thulium, 64)) + .fluidInputs( + Materials.Quantium.getMolten(9216L), + Materials.DraconiumAwakened.getMolten(4608L), + MyMaterial.extremelyUnstableNaquadah.getMolten(1440), + new FluidStack(solderIndalloy, 14400)) + .itemOutputs(ItemRefer.Naquadah_Fuel_Refinery.get(1)) + .eut(TierEU.RECIPE_UHV) + .duration(30 * MINUTES) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Radiation_Protection_Plate.get(1)) + .metadata(RESEARCH_TIME, 1 * HOURS + 7 * MINUTES) + .itemInputs( + ItemRefer.Radiation_Protection_Plate.get(1), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.ElectrumFlux, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Trinium, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.VibrantAlloy, 4), + ItemRefer.Radiation_Protection_Plate.get(1)) + .fluidInputs(new FluidStack(solderIndalloy, 1152)) + .itemOutputs(ItemRefer.Advanced_Radiation_Protection_Plate.get(1)) + .eut(TierEU.RECIPE_ZPM / 2) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Field_Restriction_Casing.get(1)) + .metadata(RESEARCH_TIME, 3 * HOURS + 30 * MINUTES) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Thulium, 1), + ItemRefer.Advanced_Radiation_Protection_Plate.get(6), + ItemList.Field_Generator_IV.get(2), + GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Naquadah, 16), + GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.NaquadahAlloy, 32), + GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.NaquadahAlloy, 32), + GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Manyullyn, 32), + GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Manyullyn, 32), + MyMaterial.orundum.get(OrePrefixes.plate, 4)) + .fluidInputs(Materials.TungstenSteel.getMolten(1152), new FluidStack(solderIndalloy, 2304)) + .itemOutputs(ItemRefer.Naquadah_Fuel_Refinery_Casing.get(1)) + .eut(TierEU.RECIPE_ZPM / 2) + .duration(25 * SECONDS) + .addTo(AssemblyLine); + + if (NewHorizonsCoreMod.isModLoaded()) { + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.ingot)) + .metadata(RESEARCH_TIME, 4 * HOURS + 10 * MINUTES) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmium, 1), + ItemList.Field_Generator_UV.get(2), + ItemList.Electric_Pump_UV.get(8), + GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 64), + GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 64), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Americium, 8), + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.BlackPlutonium, 16), + ItemList.Circuit_Wafer_PPIC.get(32), + new Object[] { OrePrefixes.circuit.get(Materials.Infinite), 1L }) + .fluidInputs( + WerkstoffLoader.Krypton.getFluidOrGas(1000), + Materials.ElectrumFlux.getMolten(9216), + Materials.Lubricant.getFluid(128000)) + .itemOutputs(ItemRefer.Field_Restriction_Coil_T1.get(1)) + .eut(TierEU.RECIPE_ZPM) + .duration(15 * MINUTES) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Field_Restriction_Coil_T1.get(1)) + .metadata(RESEARCH_TIME, 4 * HOURS + 50 * MINUTES) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1), + ItemList.Field_Generator_UHV.get(2), + ItemList.Electric_Pump_UHV.get(8), + GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorUV, 64), + GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorUV, 64), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 8), + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Neutronium, 16), + ItemList.Circuit_Wafer_PPIC.get(48), + new Object[] { OrePrefixes.circuit.get(Materials.Bio), 1L }) + .fluidInputs( + Materials.Radon.getPlasma(1000), + Materials.DraconiumAwakened.getMolten(9216), + Materials.Lubricant.getFluid(128000)) + .itemOutputs(ItemRefer.Field_Restriction_Coil_T2.get(1)) + .eut(TierEU.RECIPE_ZPM) + .duration(30 * MINUTES) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Field_Restriction_Coil_T2.get(1)) + .metadata(RESEARCH_TIME, 5 * HOURS + 30 * MINUTES) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1), + ItemList.Field_Generator_UEV.get(2), + ItemList.Electric_Pump_UEV.get(8), + GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUHV, 64), + GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUHV, 64), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 8), + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Infinity, 16), + ItemList.Circuit_Wafer_PPIC.get(64), + new Object[] { OrePrefixes.circuit.get(Materials.Optical), 1L }) + .fluidInputs( + WerkstoffLoader.Oganesson.getFluidOrGas(1000), + Materials.Neutronium.getMolten(9216), + Materials.Lubricant.getFluid(128000)) + .itemOutputs(ItemRefer.Field_Restriction_Coil_T3.get(1)) + .eut(TierEU.RECIPE_ZPM) + .duration(1 * HOURS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Field_Restriction_Coil_T3.get(1)) + .metadata(RESEARCH_TIME, 7 * HOURS) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1), + ItemList.Field_Generator_UIV.get(2), + ItemList.Electric_Pump_UIV.get(8), + GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUEV, 64), + GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUEV, 64), + GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 8), + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, MaterialsUEVplus.SpaceTime, 16), + ItemList.Circuit_Wafer_PPIC.get(64), + new Object[] { OrePrefixes.circuit.get(Materials.Piko), 1L }) + .fluidInputs( + MyMaterial.metastableOganesson.getMolten(1000), + MaterialsUEVplus.TranscendentMetal.getMolten(9216), + Materials.Lubricant.getFluid(128000)) + .itemOutputs(ItemRefer.Field_Restriction_Coil_T4.get(1)) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * HOURS) + .addTo(AssemblyLine); + } + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BorosilicateGlass, 1), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.ReinforceGlass, 6), + GT_OreDictUnificator.get(OrePrefixes.ring, Materials.NaquadahAlloy, 32), + ItemList.Field_Generator_HV.get(4), + GT_Utility.getIntegratedCircuit(6)) + .fluidInputs(Materials.Naquadria.getMolten(288)) + .itemOutputs(ItemRefer.Field_Restriction_Glass.get(1)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + + // Ca + O = CaO + GT_Values.RA.stdBuilder() + .itemInputs( + GT_Utility.getIntegratedCircuit(1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1)) + .fluidInputs(Materials.Oxygen.getGas(1000)) + .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, 2)) + .duration(10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // AlN = Al + N + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Aluminum_Nitride_Dust.get(2)) + .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1)) + .fluidOutputs(Materials.Nitrogen.getGas(1000L)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(electrolyzerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Aluminum_Nitride_Dust.get(4), + WerkstoffLoader.YttriumOxide.get(OrePrefixes.dust, 5), + GT_Utility.getIntegratedCircuit(9)) + .fluidInputs(FluidRegistry.getFluidStack("advancedglue", 1000)) + .itemOutputs(ItemRefer.Special_Ceramics_Dust.get(9)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(mixerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Aluminum_Nitride_Dust.get(4), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uraninite, 5), + GT_Utility.getIntegratedCircuit(9)) + .fluidInputs(FluidRegistry.getFluidStack("advancedglue", 1000)) + .itemOutputs(ItemRefer.Special_Ceramics_Dust.get(9)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(mixerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Special_Ceramics_Dust.get(2), ItemList.Shape_Extruder_Plate.get(0L)) + .itemOutputs(ItemRefer.Special_Ceramics_Plate.get(1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(extruderRecipes); + + GT_ModHandler.addCraftingRecipe( + ItemRefer.Raw_Cylinder.get(1), + GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, + new Object[] { "PPP", "PFP", "PPP", 'P', ItemRefer.Special_Ceramics_Plate.get(1), 'F', + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1) }); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Raw_Cylinder.get(1), + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Titanium, 1), + GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Titanium, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 6), + GT_Utility.getIntegratedCircuit(4)) + .itemOutputs(ItemRefer.Titanium_Plated_Cylinder.get(1)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_Utility.getIntegratedCircuit(16), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 2)) + .fluidInputs(FluidRegistry.getFluidStack("liquidoxygen", 1000), Materials.NitrogenDioxide.getGas(1000)) + .fluidOutputs(FluidRegistry.getFluidStack("combustionpromotor", 500)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(multiblockChemicalReactorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(16), WerkstoffLoader.SodiumNitrate.get(OrePrefixes.dust, 2)) + .fluidInputs(FluidRegistry.getFluidStack("liquidoxygen", 1000), Materials.NitrogenDioxide.getGas(1000)) + .fluidOutputs(FluidRegistry.getFluidStack("combustionpromotor", 500)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(multiblockChemicalReactorRecipes); + + if (GTPlusPlus.isModLoaded()) { + GT_Values.RA.stdBuilder() + .itemInputs( + GT_Utility.getIntegratedCircuit(16), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 2)) + .fluidInputs( + FluidRegistry.getFluidStack("fluid.hydrogenperoxide", 1000), + Materials.NitrogenDioxide.getGas(1000)) + .fluidOutputs(FluidRegistry.getFluidStack("combustionpromotor", 2000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(multiblockChemicalReactorRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(16), WerkstoffLoader.SodiumNitrate.get(OrePrefixes.dust, 2)) + .fluidInputs( + FluidRegistry.getFluidStack("fluid.hydrogenperoxide", 1000), + Materials.NitrogenDioxide.getGas(1000)) + .fluidOutputs(FluidRegistry.getFluidStack("combustionpromotor", 2000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(multiblockChemicalReactorRecipes); + } + + GT_ModHandler.addCraftingRecipe( + ItemRefer.Universal_Chemical_Fuel_Engine.get(1), + GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, + new Object[] { "TZT", "ALB", "WGW", 'T', + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Titanium, 1), 'Z', "circuitUltimate", 'A', + ItemList.Machine_Multi_DieselEngine.get(1), 'B', ItemList.Machine_Multi_ExtremeDieselEngine.get(1), 'L', + ItemList.Hull_LuV, 'W', GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 1), 'G', + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Osmium, 1), }); + + // neutron activator + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.stick, Materials.PolyvinylChloride, 4), + GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.Plastic, 4), + GT_Utility.getIntegratedCircuit(8)) + .fluidInputs(FluidRegistry.getFluidStack("dye.chemical.dyecyan", 144)) + .itemOutputs(ItemRefer.Plastic_Case.get(1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.stick, Materials.PolyvinylChloride, 4), + GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.Plastic, 4), + GT_Utility.getIntegratedCircuit(8)) + .fluidInputs(FluidRegistry.getFluidStack("dye.watermixed.dyecyan", 144)) + .itemOutputs(ItemRefer.Plastic_Case.get(1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + + GT_ModHandler.addCraftingRecipe( + ItemRefer.Plastic_Case.get(1), + new Object[] { "PCP", "CDC", "PCP", 'P', + GT_OreDictUnificator.get(OrePrefixes.stick, Materials.PolyvinylChloride, 1), 'C', + GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.Plastic, 1), 'D', "dyeCyan" }); + + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { ItemList.Circuit_Board_Coated_Basic.get(1), ItemList.Circuit_Chip_ULPIC.get(1), + ItemList.ULV_Coil.get(2), ItemList.Battery_RE_ULV_Tantalum.get(1) }, + new FluidStack[] { Materials.RedAlloy.getMolten(144), Materials.Aluminium.getMolten(144) }, + ItemRefer.Micro_Heater.get(1), + 120, + 40, + 1); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Quartzite, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 4)) + .fluidInputs(Materials.Water.getFluid(1000)) + .itemOutputs(ItemRefer.Quartz_Wafer.get(1)) + .outputChances(3333) + .requiresCleanRoom() + .duration(5 * MINUTES) + .eut(TierEU.RECIPE_LV) + .addTo(autoclaveRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Quartzite, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 4)) + .fluidInputs(FluidRegistry.getFluidStack("ic2distilledwater", 1000)) + .itemOutputs(ItemRefer.Quartz_Wafer.get(1)) + .requiresCleanRoom() + .duration(1 * MINUTES + 15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(autoclaveRecipes); + + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { ItemRefer.Quartz_Wafer.get(1), ItemRefer.Special_Ceramics_Plate.get(2), + ItemRefer.Micro_Heater.get(1), ItemList.Circuit_Chip_ILC.get(4) }, + new FluidStack[] { Materials.EnergeticAlloy.getMolten(72), Materials.Silver.getMolten(18) }, + ItemRefer.Quartz_Crystal_Resonator.get(1), + 480, + 40, + 1); + + for (Materials tMat : solderingMats) { + int tMultiplier = tMat.contains(SubTag.SOLDERING_MATERIAL_GOOD) ? 1 + : tMat.contains(SubTag.SOLDERING_MATERIAL_BAD) ? 4 : 2; + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Quartz_Crystal_Resonator.get(2), + ItemRefer.Plastic_Case.get(1), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Good, 1), + ItemList.Cover_Screen.get(1), + GT_OreDictUnificator.get(OrePrefixes.componentCircuit, Materials.Diode, 16L), + GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Aluminium, 8)) + .fluidInputs(tMat.getMolten(144 * tMultiplier)) + .itemOutputs(ItemRefer.Inverter.get(1)) + .duration(12 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Quartz_Crystal_Resonator.get(2), + ItemRefer.Plastic_Case.get(1), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Good, 1), + ItemList.Cover_Screen.get(1), + ItemList.Circuit_Parts_DiodeASMD.get(4), + GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Aluminium, 8)) + .fluidInputs(tMat.getMolten(144 * tMultiplier)) + .itemOutputs(ItemRefer.Inverter.get(1)) + .duration(12 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + if (NewHorizonsCoreMod.isModLoaded()) { + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Circuit_Board_Multifiberglass_Elite.get(1), + GT_ModHandler.getModItem("dreamcraft", "item.EngravedGoldChip", 16), + ItemList.Circuit_Chip_SoC2.get(8), + ItemList.Circuit_Chip_NOR.get(32), + MyMaterial.signalium.get(OrePrefixes.bolt, 32), + GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Aluminium, 8), + GT_ModHandler.getIC2Item("reactorVent", 1L, 1)) + .fluidInputs(tMat.getMolten(288 * tMultiplier)) + .itemOutputs(ItemRefer.HiC_T1.get(1)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Circuit_Board_Multifiberglass_Elite.get(1), + GT_ModHandler.getModItem("dreamcraft", "item.EngravedGoldChip", 16), + ItemList.Circuit_Chip_SoC2.get(8), + ItemList.Circuit_Chip_NOR.get(32), + MyMaterial.signalium.get(OrePrefixes.bolt, 32), + GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Aluminium, 8), + GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.TinAlloy, 1)) + .fluidInputs(tMat.getMolten(288 * tMultiplier)) + .itemOutputs(ItemRefer.HiC_T1.get(1)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + } + } + + GT_ModHandler.addCraftingRecipe( + Loaders.NeutronAccelerators[0].copy(), + GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, + new Object[] { "WPM", "CHI", "WPM", 'W', GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Lead, 1), + 'P', GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Lead, 1), 'M', + GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Lead, 1), 'C', + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Wood, 1), 'H', ItemList.Hull_ULV, 'I', + ItemRefer.Inverter.get(1), }); + + GT_ModHandler.addCraftingRecipe( + Loaders.NeutronAccelerators[1].copy(), + GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, + new Object[] { "WPM", "CHI", "WPM", 'W', GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tin, 1), + 'P', GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Lead, 1), 'M', + ItemList.Electric_Motor_LV, 'C', "plateAnyRubber", 'H', ItemList.Hull_LV, 'I', + ItemRefer.Inverter.get(1), }); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Inverter.get(1), + ItemList.Hull_MV.get(1L), + GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.AnyCopper, 2), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Plastic, 1), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Beryllium, 2), + ItemList.Electric_Motor_MV.get(2)) + .itemOutputs(Loaders.NeutronAccelerators[2].copy()) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Inverter.get(1), + ItemList.Hull_HV.get(1L), + GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 2), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.PolyvinylChloride, 1), + GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Beryllium, 2), + ItemList.Electric_Motor_HV.get(2)) + .itemOutputs(Loaders.NeutronAccelerators[3].copy()) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, Loaders.NeutronAccelerators[5].copy()) + .metadata(RESEARCH_TIME, 16 * MINUTES) + .itemInputs( + ItemRefer.Inverter.get(2), + ItemList.Hull_LuV.get(1L), + GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 2), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NetherStar, 1), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Polybenzimidazole, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NeodymiumMagnetic, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NeodymiumMagnetic, 4), + ItemList.Electric_Motor_LuV.get(2), + GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorMV, 4)) + .fluidInputs(Materials.Argon.getGas(3000)) + .itemOutputs(Loaders.NeutronAccelerators[6].copy()) + .eut(TierEU.RECIPE_LuV) + .duration(15 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, Loaders.NeutronAccelerators[6].copy()) + .metadata(RESEARCH_TIME, 16 * MINUTES) + .itemInputs( + ItemRefer.Inverter.get(2), + ItemList.Hull_ZPM.get(1L), + GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.VanadiumGallium, 2), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NetherStar, 1), + GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Polybenzimidazole, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.SamariumMagnetic, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.SamariumMagnetic, 4), + ItemList.Electric_Motor_ZPM.get(2), + GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorEV, 4)) + .fluidInputs(WerkstoffLoader.Xenon.getFluidOrGas(3000)) + .itemOutputs(Loaders.NeutronAccelerators[7].copy()) + .eut(TierEU.RECIPE_ZPM) + .duration(15 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, Loaders.NeutronAccelerators[7].copy()) + .metadata(RESEARCH_TIME, 16 * MINUTES) + .itemInputs( + ItemRefer.Inverter.get(4), + ItemList.Hull_UV.get(1L), + GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.NaquadahAlloy, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NetherStar, 2), + GT_OreDictUnificator.get(OrePrefixes.plateTriple, Materials.Polybenzimidazole, 4), + ItemList.ZPM_Coil.get(4), + GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.NickelZincFerrite, 16), + ItemList.ZPM_Coil.get(4), + ItemList.Electric_Motor_UV.get(2), + GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorLuV, 4)) + .fluidInputs(WerkstoffLoader.Oganesson.getFluidOrGas(3000)) + .itemOutputs(Loaders.NeutronAccelerators[8].copy()) + .eut(TierEU.RECIPE_UV) + .duration(15 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Casing_IV.get(1L), + ItemList.Cover_ActivityDetector.get(1L), + ItemList.Cover_Screen.get(1L), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.VibrantAlloy, 4), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Data, 1), + ItemList.Sensor_HV.get(2), + GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Helium.getGas(1000)) + .itemOutputs(Loaders.NS.copy()) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GT_ModHandler.addCraftingRecipe( + ItemRefer.Neutron_Source.get(1), + GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, + new Object[] { " P ", "PUP", " P ", 'P', + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Steel, 1), 'U', + ItemRefer.High_Density_Uranium.get(1) }); + + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { ItemRefer.HiC_T2.get(2), ItemList.Emitter_EV.get(2), ItemRefer.Neutron_Source.get(1) }, + new FluidStack[] { Materials.StainlessSteel.getMolten(576), Materials.TungstenCarbide.getMolten(144) }, + Loaders.NA.copy(), + 7680, + 100, + 1); + } + + public static void InitLoadRecipe() { + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Inverter.get(1), + ItemList.Hull_EV.get(1L), + GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 2), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StyreneButadieneRubber, 1), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.IronMagnetic, 4), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenCarbide, 2), + ItemList.Electric_Motor_EV.get(2)) + .itemOutputs(Loaders.NeutronAccelerators[4].copy()) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Inverter.get(1), + ItemList.Hull_IV.get(1L), + GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tungsten, 2), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Silicone, 1), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.SteelMagnetic, 4), + GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.TungstenCarbide, 2), + ItemList.Electric_Motor_IV.get(2)) + .itemOutputs(Loaders.NeutronAccelerators[5].copy()) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + // Al2O3 + 2N + 3C = 2AlN + 3CO + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sapphire, 5), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 3)) + .fluidInputs(FluidRegistry.getFluidStack("liquidnitrogen", 2000)) + .fluidOutputs(Materials.CarbonMonoxide.getGas(3000)) + .itemOutputs(ItemRefer.Aluminum_Nitride_Dust.get(2)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .metadata(COIL_HEAT, 4600) + .addTo(blastFurnaceRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GreenSapphire, 5), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 3)) + .fluidInputs(FluidRegistry.getFluidStack("liquidnitrogen", 2000)) + .fluidOutputs(Materials.CarbonMonoxide.getGas(3000)) + .itemOutputs(ItemRefer.Aluminum_Nitride_Dust.get(2)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .metadata(COIL_HEAT, 4600) + .addTo(blastFurnaceRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 5), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 3)) + .fluidInputs(FluidRegistry.getFluidStack("liquidnitrogen", 2000)) + .fluidOutputs(Materials.CarbonMonoxide.getGas(3000)) + .itemOutputs(ItemRefer.Aluminum_Nitride_Dust.get(2)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .metadata(COIL_HEAT, 4600) + .addTo(blastFurnaceRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 1), + GT_Utility.getIntegratedCircuit(1)) + .itemOutputs(MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.ingotHot)) + .duration(6 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .metadata(COIL_HEAT, 7000) + .addTo(blastFurnaceRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.ingotHot, 1)) + .itemOutputs(MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.ingot, 1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(vacuumFreezerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(MyMaterial.naquadahBasedFuelMkVIDepleted.getFluidOrGas(1000)) + .itemOutputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1)) + .outputChances(1000, 500, 400, 50, 20, 5) + .fluidOutputs(MyMaterial.metastableOganesson.getMolten(122)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LuV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(MyMaterial.naquadahBasedFuelMkVDepleted.getFluidOrGas(1000)) + .itemOutputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1)) + .outputChances(1000, 500, 400, 50, 20, 5) + .fluidOutputs(WerkstoffLoader.Oganesson.getFluidOrGas(182)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LuV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(MyMaterial.naquadahBasedFuelMkIVDepleted.getFluidOrGas(1000)) + .itemOutputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sunnarium, 32), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sunnarium, 32)) + .outputChances(9900, 9500, 9000, 8000, 5000, 3000) + .fluidOutputs(WerkstoffLoader.Oganesson.getFluidOrGas(864)) + .duration(2 * MINUTES + 5 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(MyMaterial.naquadahBasedFuelMkIIIDepleted.getFluidOrGas(1000)) + .itemOutputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bedrockium, 32), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bedrockium, 32), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bedrockium, 32)) + .outputChances(9500, 9000, 8000, 7000, 5000, 4000) + .fluidOutputs(WerkstoffLoader.Oganesson.getFluidOrGas(720)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(MyMaterial.naquadahBasedFuelMkIIDepleted.getFluidOrGas(1000)) + .itemOutputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 32), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Americium, 32), + WerkstoffLoader.Californium.get(OrePrefixes.dust, 32)) + .outputChances(9000, 8500, 5000, 4000, 2000) + .fluidOutputs(WerkstoffLoader.Oganesson.getFluidOrGas(144)) + .duration(6 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(MyMaterial.uraniumBasedLiquidFuelDepleted.getFluidOrGas(1000)) + .itemOutputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lead, 16L), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bismuth, 1L), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Barium, 6L)) + .outputChances(6000, 1000, 5000) + .fluidOutputs(WerkstoffLoader.Xenon.getFluidOrGas(10)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_EV / 2) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(MyMaterial.thoriumBasedLiquidFuelDepleted.getFluidOrGas(1000)) + .itemOutputs( + WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 64), + WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 16), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Praseodymium, 64), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Praseodymium, 32), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Boron, 2), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Indium, 4)) + .outputChances(10000, 8000, 10000, 8000, 3000, 5000) + .duration(1 * MINUTES + 15 * SECONDS) + .eut(TierEU.RECIPE_EV / 2) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(MyMaterial.plutoniumBasedLiquidFuelDepleted.getFluidOrGas(1000)) + .itemOutputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tritanium, 9), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cerium, 4), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 2)) + .outputChances(5000, 8000, 7500) + .fluidOutputs(WerkstoffLoader.Krypton.getFluidOrGas(144)) + .duration(2 * MINUTES + 5 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(MyMaterial.thoriumTetrafluoride.getFluidOrGas(1000)) + .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Thorium, 1)) + .fluidOutputs(MyMaterial.thorium232Tetrafluoride.getFluidOrGas(750)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(MyMaterial.naquadahEmulsion.getFluidOrGas(1000)) + .itemOutputs( + MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 4), + MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 2), + MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 1), + MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 1), + MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 1), + MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 1)) + .outputChances(8000, 7500, 5000, 2000, 500, 100) + .fluidOutputs(MyMaterial.naquadahSolution.getFluidOrGas(500)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(MyMaterial.naquadahBasedFuelMkIDepleted.getFluidOrGas(1000)) + .itemOutputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 48), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 32), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Neodymium, 32), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Europium, 32)) + .outputChances(9000, 8500, 5000, 4000, 2000) + .fluidOutputs(WerkstoffLoader.Xenon.getFluidOrGas(144)) + .duration(5 * MINUTES) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 4)) + .itemOutputs( + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 2), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1), + GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 1), + WerkstoffLoader.Tiberium.get(OrePrefixes.dust, 1)) + .outputChances(10000, 9500, 8000, 2500, 2000, 2000) + .fluidOutputs(Materials.Radon.getGas(20)) + .duration(45 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(centrifugeRecipes); + } + + public static void Fixer() { + MaterialFix.MaterialFluidExtractionFix(MyMaterial.atomicSeparationCatalyst); + MaterialFix.MaterialFluidExtractionFix(MyMaterial.extremelyUnstableNaquadah); + MaterialFix.MaterialFluidExtractionFix(MyMaterial.metastableOganesson); + MaterialFix.MaterialFluidExtractionFix(MyMaterial.shirabon); + } +} diff --git a/goodgen/src/main/java/goodgenerator/loader/RecipeLoader_02.java b/goodgen/src/main/java/goodgenerator/loader/RecipeLoader_02.java new file mode 100644 index 0000000000..70517fe781 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/loader/RecipeLoader_02.java @@ -0,0 +1,1772 @@ +package goodgenerator.loader; + +import static gregtech.api.enums.Mods.GTPlusPlus; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; +import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.cannerRecipes; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; +import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes; +import static gregtech.api.recipe.RecipeMaps.distilleryRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; +import static gregtech.api.recipe.RecipeMaps.fusionRecipes; +import static gregtech.api.recipe.RecipeMaps.mixerRecipes; +import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; +import static gregtech.api.recipe.RecipeMaps.plasmaForgeRecipes; +import static gregtech.api.recipe.RecipeMaps.unpackagerRecipes; +import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; +import static gregtech.api.util.GT_RecipeBuilder.HOURS; +import static gregtech.api.util.GT_RecipeBuilder.MINUTES; +import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GT_RecipeConstants.AssemblyLine; +import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; +import static gregtech.api.util.GT_RecipeConstants.FUSION_THRESHOLD; +import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM; +import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME; +import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; +import com.github.technus.tectech.recipe.TT_recipeAdder; + +import goodgenerator.items.MyMaterial; +import goodgenerator.util.CrackRecipeAdder; +import goodgenerator.util.ItemRefer; +import goodgenerator.util.MyRecipeAdder; +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GT_Utility; +import gtPlusPlus.core.item.chemistry.GenericChem; +import gtPlusPlus.core.material.ALLOY; +import gtPlusPlus.core.material.ELEMENT; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; +import ic2.core.Ic2Items; + +public class RecipeLoader_02 { + + public static void RecipeLoad() { + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.StainlessSteel, 1), + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlueAlloy, 1), + GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorHV, 32), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Beryllium, 32), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Elite, 1)) + .itemOutputs(ItemRefer.Speeding_Pipe.get(1)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + // Compact MK1 Fusion Disassembly Recipe + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Compact_Fusion_Coil_T0.get(1)) + .itemOutputs(ItemList.Casing_Coil_Superconductor.get(3)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + + // Compact MK2 Fusion Disassembly Recipe + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Compact_Fusion_Coil_T1.get(1)) + .itemOutputs(ItemList.Casing_Fusion_Coil.get(3)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + + // Compact MK3 Fusion Disassembly Recipe + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Compact_Fusion_Coil_T2.get(1)) + .itemOutputs(ItemList.Casing_Fusion_Coil.get(3)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.zircaloy2, 500, 480, 2800, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.zircaloy2, 513, 480, 2800, false); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.zircaloy4, 500, 480, 2800, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.zircaloy4, 513, 480, 2800, false); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.incoloy903, 2400, 1920, 3700, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.adamantiumAlloy, 2500, 1920, 5500, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.marM200, 200, 7680, 5000, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.marM200, 220, 7680, 5000, false); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.signalium, 1600, 30720, 4000, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.lumiium, 1600, 30720, 4000, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.artheriumSn, 500, 122880, 6500, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.titaniumBetaC, 400, 7680, 5300, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.dalisenite, 800, 491520, 8700, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.hikarium, 1200, 30720, 5400, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.tairitsu, 1200, 1966080, 7400, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.preciousMetalAlloy, 2400, 7864320, 10000, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.enrichedNaquadahAlloy, 2400, 7864320, 11000, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.metastableOganesson, 600, 7864320, 12000, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.shirabon, 600, 31457280, 13000, true); + CrackRecipeAdder.reAddBlastRecipe(MyMaterial.atomicSeparationCatalyst, 35000, 120, 5000, false); + + GT_ModHandler.removeFurnaceSmelting(MyMaterial.dalisenite.get(OrePrefixes.dust)); // :doom: + + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.dalisenite.get(OrePrefixes.ingotHot, 1)) + .itemOutputs(MyMaterial.dalisenite.get(OrePrefixes.ingot, 1)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(vacuumFreezerRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.shirabon.get(OrePrefixes.ingotHot, 1)) + .itemOutputs(MyMaterial.shirabon.get(OrePrefixes.ingot, 1)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_UHV) + .addTo(vacuumFreezerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + MyMaterial.zircaloy4.get(OrePrefixes.plate, 4), + MyMaterial.zircaloy2.get(OrePrefixes.ring, 2), + GT_Utility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Advanced_Fuel_Rod.get(1), ItemRefer.High_Density_Uranium.get(1)) + .itemOutputs(ItemRefer.Fuel_Rod_U_1.get(1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(cannerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_U_1.get(2), + MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GT_Utility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fuel_Rod_U_2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_U_2.get(2), + MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GT_Utility.getIntegratedCircuit(5)) + .itemOutputs(ItemRefer.Fuel_Rod_U_4.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_U_1.get(4), + MyMaterial.zircaloy2.get(OrePrefixes.stickLong, 6), + GT_Utility.getIntegratedCircuit(4)) + .itemOutputs(ItemRefer.Fuel_Rod_U_4.get(1)) + .duration(11 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Advanced_Fuel_Rod.get(1), ItemRefer.High_Density_Plutonium.get(1)) + .itemOutputs(ItemRefer.Fuel_Rod_Pu_1.get(1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(cannerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_Pu_1.get(2), + MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GT_Utility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fuel_Rod_Pu_2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_Pu_2.get(2), + MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GT_Utility.getIntegratedCircuit(5)) + .itemOutputs(ItemRefer.Fuel_Rod_Pu_4.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_Pu_1.get(4), + MyMaterial.zircaloy2.get(OrePrefixes.stickLong, 6), + GT_Utility.getIntegratedCircuit(4)) + .itemOutputs(ItemRefer.Fuel_Rod_Pu_4.get(1)) + .duration(11 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GT_ModHandler.addCraftingRecipe( + ItemRefer.YOTTank_Casing.get(1), + GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, + new Object[] { "BPB", "FOF", "BPB", 'B', + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackSteel, 1), 'P', + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.StainlessSteel, 1), 'F', + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1), 'O', + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackSteel, 1), }); + + GT_ModHandler.addCraftingRecipe( + ItemRefer.YOTTank.get(1), + GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, + new Object[] { "SPS", "ECE", "SLS", 'S', + GT_OreDictUnificator.get(OrePrefixes.screw, Materials.BlueSteel, 1), 'P', ItemList.Cover_Screen.get(1), + 'E', "circuitData", 'L', GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Enderium, 1), 'C', + ItemRefer.YOTTank_Casing.get(1) }); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Output_IV.get(1), + GT_ModHandler.getModItem("appliedenergistics2", "item.ItemMultiPart", 1, 440), + GT_OreDictUnificator.get(OrePrefixes.screw, Materials.CertusQuartz, 8), + GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Plastic.getMolten(144)) + .itemOutputs(Loaders.YFH) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Large_Fluid_Cell_Steel.get(12L), + GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.Tin, 4), + GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Plastic.getMolten(144)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T1.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Large_Fluid_Cell_Aluminium.get(3L), + GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.Tin, 4), + GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Plastic.getMolten(144)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T1.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Large_Fluid_Cell_StainlessSteel.get(2L), + GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.Tin, 4), + GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Plastic.getMolten(144)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T1.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Large_Fluid_Cell_Titanium.get(64L), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Titanium, 8), + GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.BlackSteel, 4), + GT_Utility.getIntegratedCircuit(2)) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2304)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Large_Fluid_Cell_TungstenSteel.get(18L), + GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.BlackSteel, 4), + GT_Utility.getIntegratedCircuit(2)) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2304)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Large_Fluid_Cell_Chrome.get(4L), + GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.BlackSteel, 4), + GT_Utility.getIntegratedCircuit(2)) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2304)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fluid_Storage_Core_T1.get(32), + ItemRefer.Fluid_Storage_Core_T1.get(32), + GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.BlackSteel, 16), + GT_Utility.getIntegratedCircuit(10)) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2304)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null + ? FluidRegistry.getFluid("molten.indalloy140") + : FluidRegistry.getFluid("molten.solderingalloy"); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T2.get(1)) + .metadata(RESEARCH_TIME, 17 * MINUTES) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.StainlessSteel, 4), + ItemList.Electric_Pump_HV.get(8), + ItemList.Quantum_Tank_LV.get(1), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Osmium, 8), + GT_ModHandler.getModItem("GalacticraftMars", "item.null", 1L, 6), + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Polycaprolactam, 32)) + .fluidInputs(new FluidStack(solderIndalloy, 2304), Materials.Lubricant.getFluid(4000)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T3.get(1)) + .eut(TierEU.RECIPE_LuV) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T3.get(1)) + .metadata(RESEARCH_TIME, 34 * MINUTES) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Titanium, 4), + ItemList.Electric_Pump_EV.get(8), + ItemList.Quantum_Tank_LV.get(4), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Europium, 8), + GT_ModHandler.getModItem("GalacticraftMars", "item.null", 4L, 6), + GT_OreDictUnificator.get(OrePrefixes.foil, Materials.StyreneButadieneRubber, 64), + GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.TungstenSteel, 64)) + .fluidInputs(new FluidStack(solderIndalloy, 18432), Materials.Lubricant.getFluid(16000)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T4.get(1)) + .eut(TierEU.RECIPE_ZPM) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T4.get(1)) + .metadata(RESEARCH_TIME, 1 * HOURS + 8 * MINUTES) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.MysteriousCrystal, 4), + ItemList.Electric_Pump_IV.get(8), + ItemList.Quantum_Tank_HV.get(8), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Neutronium, 8), + GT_ModHandler.getModItem("GalacticraftMars", "item.null", 16L, 6), + GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, Materials.Polycaprolactam, 24), + GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Titanium, 64)) + .fluidInputs( + Materials.Draconium.getMolten(2304), + Materials.Titanium.getMolten(288), + Materials.Lubricant.getFluid(64000)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T5.get(1)) + .eut(TierEU.RECIPE_UV) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T5.get(1)) + .metadata(RESEARCH_TIME, 2 * HOURS + 15 * MINUTES) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 4), + ItemList.Electric_Pump_LuV.get(8), + ItemList.Quantum_Tank_EV.get(16), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 16), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 16), + GT_ModHandler.getModItem("GalacticraftMars", "item.null", 64L, 6), + ItemList.Machine_IV_Compressor.get(64)) + .fluidInputs( + Materials.Draconium.getMolten(2304), + Materials.Titanium.getMolten(288), + Materials.Lubricant.getFluid(64000)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T6.get(1)) + .eut(TierEU.RECIPE_UHV) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T6.get(1)) + .metadata(RESEARCH_TIME, 4 * HOURS + 30 * MINUTES) + .itemInputs( + GT_ModHandler.getModItem("GalacticraftMars", "item.null", 64L, 6), + ItemList.Electric_Pump_ZPM.get(8), + GT_ModHandler.getModItem("Avaritia", "Neutronium_Compressor", 1L, 0), + ItemList.Quantum_Tank_EV.get(32), + GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 8), + GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, Materials.InfinityCatalyst, 8), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 16)) + .fluidInputs( + Materials.Draconium.getMolten(23040), + new FluidStack(solderIndalloy, 2304), + Materials.InfinityCatalyst.getMolten(1140)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T7.get(1)) + .eut(TierEU.RECIPE_UEV) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T7.get(1)) + .metadata(RESEARCH_TIME, 9 * HOURS) + .itemInputs( + GT_ModHandler.getModItem("GalacticraftMars", "item.null", 64L, 6), + ItemList.Electric_Pump_UV.get(8), + GT_ModHandler.getModItem("Avaritia", "Neutronium_Compressor", 2L, 0), + ItemList.Quantum_Tank_EV.get(64), + GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 16), + GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, Materials.Infinity, 24), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 16)) + .fluidInputs( + Materials.Draconium.getMolten(36864), + new FluidStack(solderIndalloy, 30240), + Materials.InfinityCatalyst.getMolten(5670)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T8.get(1)) + .eut(TierEU.RECIPE_UIV) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T8.get(1)) + .metadata(RESEARCH_TIME, 180 * HOURS) + .itemInputs( + GT_ModHandler.getModItem("GalacticraftMars", "item.null", 64L, 6), + ItemList.Electric_Pump_UHV.get(8), + GT_ModHandler.getModItem("Avaritia", "Neutronium_Compressor", 2L, 0), + ItemList.Quantum_Tank_IV.get(8), + GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 32), + GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, Materials.Infinity, 36), + GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 8)) + .fluidInputs( + Materials.Draconium.getMolten(36864), + new FluidStack(solderIndalloy, 30240), + MaterialsUEVplus.TranscendentMetal.getMolten(1440), + Materials.InfinityCatalyst.getMolten(5670)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T9.get(1)) + .eut(TierEU.RECIPE_UMV) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T9.get(1)) + .metadata(RESEARCH_TIME, 360 * HOURS) + .itemInputs( + GT_ModHandler.getModItem("GalacticraftMars", "item.null", 64L, 6), + ItemList.Electric_Pump_UEV.get(8), + GT_ModHandler.getModItem("Avaritia", "Neutronium_Compressor", 4L, 0), + ItemList.Quantum_Tank_IV.get(16), + GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 32), + GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, Materials.CosmicNeutronium, 24), + GT_OreDictUnificator.get(OrePrefixes.plateDouble, MaterialsUEVplus.SpaceTime, 4)) + .fluidInputs( + Materials.Draconium.getMolten(36864), + new FluidStack(solderIndalloy, 46080), + MaterialsUEVplus.TranscendentMetal.getMolten(4320), + Materials.InfinityCatalyst.getMolten(17010)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T10.get(1)) + .eut(TierEU.RECIPE_UXV) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackSteel, 1), + ItemRefer.Fluid_Storage_Core_T1.get(10), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 4), + ItemList.Electric_Pump_HV.get(8), + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.StainlessSteel, 4), + GT_Utility.getIntegratedCircuit(5)) + .fluidInputs(Materials.Plastic.getMolten(144)) + .itemOutputs(ItemRefer.YOTTank_Cell_T1.get(1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1), + ItemRefer.Fluid_Storage_Core_T2.get(10), + WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.plate, 4), + ItemList.Electric_Pump_EV.get(8), + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Enderium, 4), + GT_Utility.getIntegratedCircuit(5)) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(144)) + .itemOutputs(ItemRefer.YOTTank_Cell_T2.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T2.get(1)) + .metadata(RESEARCH_TIME, 17 * MINUTES) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Naquadah, 1), + ItemRefer.Fluid_Storage_Core_T3.get(10), + new Object[] { OrePrefixes.circuit.get(Materials.Master), 8 }, + ItemList.Electric_Pump_IV.get(8), + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.NiobiumTitanium, 8), + MyMaterial.adamantiumAlloy.get(OrePrefixes.plate, 32)) + .fluidInputs( + Materials.Quantium.getMolten(1440), + FluidRegistry.getFluidStack("ic2coolant", 8000), + Materials.Lubricant.getFluid(8000)) + .itemOutputs(ItemRefer.YOTTank_Cell_T3.get(1)) + .eut(TierEU.RECIPE_LuV) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T3.get(1)) + .metadata(RESEARCH_TIME, 34 * MINUTES) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1), + ItemRefer.Fluid_Storage_Core_T4.get(10), + new Object[] { OrePrefixes.circuit.get(Materials.Ultimate), 8 }, + ItemList.Electric_Pump_LuV.get(8), + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.MysteriousCrystal, 8), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.ElectrumFlux, 32)) + .fluidInputs( + Materials.Draconium.getMolten(1440), + FluidRegistry.getFluidStack("ic2coolant", 16000), + Materials.Lubricant.getFluid(16000)) + .itemOutputs(ItemRefer.YOTTank_Cell_T4.get(1)) + .eut(TierEU.RECIPE_ZPM) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T4.get(1)) + .metadata(RESEARCH_TIME, 1 * HOURS + 8 * MINUTES) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1), + ItemRefer.Fluid_Storage_Core_T5.get(10), + new Object[] { OrePrefixes.circuit.get(Materials.SuperconductorUHV), 8 }, + ItemList.Electric_Pump_ZPM.get(8), + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.DraconiumAwakened, 8), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 64)) + .fluidInputs( + Materials.Draconium.getMolten(1440), + FluidRegistry.getFluidStack("ic2coolant", 16000), + Materials.Lubricant.getFluid(16000)) + .itemOutputs(ItemRefer.YOTTank_Cell_T5.get(1)) + .eut(TierEU.RECIPE_UV) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T5.get(1)) + .metadata(RESEARCH_TIME, 2 * HOURS + 15 * MINUTES) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1), + ItemRefer.Fluid_Storage_Core_T6.get(2), + new Object[] { OrePrefixes.circuit.get(Materials.Infinite), 8L }, + ItemList.Electric_Pump_UV.get(8), + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.NetherStar, 8), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 64)) + .fluidInputs( + Materials.DraconiumAwakened.getMolten(1440), + FluidRegistry.getFluidStack("ic2coolant", 46080), + Materials.Lubricant.getFluid(32000)) + .itemOutputs(ItemRefer.YOTTank_Cell_T6.get(1)) + .eut(TierEU.RECIPE_UHV) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T6.get(1)) + .metadata(RESEARCH_TIME, 4 * HOURS + 30 * MINUTES) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1), + ItemRefer.Fluid_Storage_Core_T7.get(2), + new Object[] { OrePrefixes.circuit.get(Materials.Bio), 8L }, + ItemList.Electric_Pump_UHV.get(8), + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.NetherStar, 16), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 32), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 32)) + .fluidInputs( + Materials.DraconiumAwakened.getMolten(14400), + FluidRegistry.getFluidStack("supercoolant", 46080), + Materials.Lubricant.getFluid(46080)) + .itemOutputs(ItemRefer.YOTTank_Cell_T7.get(1)) + .eut(TierEU.RECIPE_UEV) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T7.get(1)) + .metadata(RESEARCH_TIME, 9 * HOURS) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1), + ItemRefer.Fluid_Storage_Core_T8.get(2), + new Object[] { OrePrefixes.circuit.get(Materials.Optical), 8L }, + ItemList.Electric_Pump_UEV.get(8), + GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.NetherStar, 12), + GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.CosmicNeutronium, 12), + GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.DraconiumAwakened, 12), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 64)) + .fluidInputs( + Materials.DraconiumAwakened.getMolten(14400), + FluidRegistry.getFluidStack("supercoolant", 46080), + Materials.Lubricant.getFluid(46080)) + .itemOutputs(ItemRefer.YOTTank_Cell_T8.get(1)) + .eut(TierEU.RECIPE_UIV) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + + if (NewHorizonsCoreMod.isModLoaded()) { + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T8.get(1)) + .metadata(RESEARCH_TIME, 18 * HOURS) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 2), + ItemRefer.Fluid_Storage_Core_T9.get(2), + new Object[] { OrePrefixes.circuit.get(Materials.Piko), 8L }, + ItemList.Electric_Pump_UIV.get(8), + GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.NetherStar, 12), + GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.CosmicNeutronium, 12), + GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.DraconiumAwakened, 12), + GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 64)) + .fluidInputs( + Materials.DraconiumAwakened.getMolten(14400), + FluidRegistry.getFluidStack("supercoolant", 46080), + Materials.Lubricant.getFluid(46080)) + .itemOutputs(ItemRefer.YOTTank_Cell_T9.get(1)) + .eut(TierEU.RECIPE_UMV) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T9.get(1)) + .metadata(RESEARCH_TIME, 36 * HOURS) + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 2), + ItemRefer.Fluid_Storage_Core_T10.get(2), + new Object[] { OrePrefixes.circuit.get(Materials.Quantum), 12L }, + ItemList.Electric_Pump_UMV.get(8), + GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.NetherStar, 64), + GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.CosmicNeutronium, 12), + GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.DraconiumAwakened, 12), + GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 10)) + .fluidInputs( + Materials.DraconiumAwakened.getMolten(14400), + MaterialsUEVplus.TranscendentMetal.getMolten(1440), + FluidRegistry.getFluidStack("supercoolant", 46080), + Materials.Lubricant.getFluid(46080)) + .itemOutputs(ItemRefer.YOTTank_Cell_T10.get(1)) + .eut(TierEU.RECIPE_UXV) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + } + + // Craft 2x64X Tier to 1X+1 Tier + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fluid_Storage_Core_T6.get(64), + ItemRefer.Fluid_Storage_Core_T6.get(64), + GT_Utility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T7.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fluid_Storage_Core_T7.get(64), + ItemRefer.Fluid_Storage_Core_T7.get(64), + GT_Utility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T8.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fluid_Storage_Core_T8.get(64), + ItemRefer.Fluid_Storage_Core_T8.get(64), + GT_Utility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T9.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fluid_Storage_Core_T9.get(64), + ItemRefer.Fluid_Storage_Core_T9.get(64), + GT_Utility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T10.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T1.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T1.get(10), + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackSteel, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T2.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T2.get(10), + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T3.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T3.get(10), + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Naquadah, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T4.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T4.get(10), + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T5.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T5.get(10), + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T6.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T6.get(2), + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T7.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T7.get(2), + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T8.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T8.get(2), + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T9.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T9.get(2), + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T10.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T10.get(2), + GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Tiberium.get(OrePrefixes.dust, 1)) + .itemOutputs( + WerkstoffLoader.Tiberium.get(OrePrefixes.gem, 1), + WerkstoffLoader.Tiberium.get(OrePrefixes.gem, 1)) + .outputChances(10000, 2000) + .fluidInputs(MyMaterial.naquadahGas.getFluidOrGas(250)) + .duration(400) + .eut(TierEU.RECIPE_HV) + .addTo(autoclaveRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(Materials.Firestone.getGems(1)) + .fluidInputs(MyMaterial.lightNaquadahFuel.getFluidOrGas(144)) + .itemOutputs(WerkstoffLoader.Tiberium.get(OrePrefixes.gem, 1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(chemicalBathRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(Materials.Diamond.getGems(1)) + .fluidInputs(MyMaterial.heavyNaquadahFuel.getFluidOrGas(144)) + .itemOutputs(WerkstoffLoader.Tiberium.get(OrePrefixes.gem, 1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(chemicalBathRecipes); + + GT_Values.RA.stdBuilder() + .fluidInputs(Materials.HeavyFuel.getFluid(1000)) + .fluidOutputs( + Materials.Toluene.getFluid(400), + Materials.Benzene.getFluid(400), + Materials.Phenol.getFluid(250)) + .duration(6 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(distillationTowerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(Materials.Coal.getGems(1)) + .itemOutputs(Materials.Ash.getDust(1)) + .outputChances(10) + .fluidOutputs(FluidRegistry.getFluidStack("fluid.coaltar", 250)) + .duration(3 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(fluidExtractionRecipes); + + if (OreDictionary.getOres("fuelCoke") + .size() > 0) { + GT_Values.RA.stdBuilder() + .itemInputs( + OreDictionary.getOres("fuelCoke") + .get(0)) + .itemOutputs(Materials.Ash.getDust(1)) + .outputChances(10) + .fluidOutputs(FluidRegistry.getFluidStack("fluid.coaltar", 250)) + .duration(3 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(fluidExtractionRecipes); + } + + if (GTPlusPlus.isModLoaded()) { + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(24)) + .fluidInputs(FluidRegistry.getFluidStack("fluid.coaltaroil", 100)) + .fluidOutputs(MyMaterial.cyclopentadiene.getFluidOrGas(30)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(distilleryRecipes); + } + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(24)) + .fluidInputs(Materials.WoodTar.getFluid(500)) + .fluidOutputs(MyMaterial.cyclopentadiene.getFluidOrGas(20)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(distilleryRecipes); + + // FeCl2 + Cl = FeCl3 + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.ferrousChloride.get(OrePrefixes.cell, 1), GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Chlorine.getGas(1000)) + .itemOutputs(Materials.IronIIIChloride.getCells(1)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // FeCl3 + H = FeCl2 + HCl + GT_Values.RA.stdBuilder() + .itemInputs(Materials.IronIIIChloride.getCells(1), GT_Utility.getIntegratedCircuit(7)) + .fluidInputs(Materials.Hydrogen.getGas(1000)) + .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000)) + .itemOutputs(MyMaterial.ferrousChloride.get(OrePrefixes.cell, 1)) + .duration(4 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(UniversalChemical); + + // NH3 + 2C2H6O = C4H11N + 2H2O + GT_Values.RA.stdBuilder() + .itemInputs(Materials.Ammonia.getCells(1), GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Ethanol.getFluid(2000)) + .fluidOutputs(Materials.Water.getFluid(2000)) + .itemOutputs(MyMaterial.diethylamine.get(OrePrefixes.cell, 1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(UniversalChemical); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(2)) + .fluidInputs( + MyMaterial.cyclopentadiene.getFluidOrGas(2000), + MyMaterial.ferrousChloride.getFluidOrGas(1000), + MyMaterial.diethylamine.getFluidOrGas(8000), + Materials.Ice.getSolid(4000)) + .fluidOutputs(MyMaterial.impureFerroceneMixture.getFluidOrGas(15000)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_MV) + .addTo(multiblockChemicalReactorRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.ether.get(OrePrefixes.cell, 1), GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(MyMaterial.impureFerroceneMixture.getFluidOrGas(7500)) + .itemOutputs(MyMaterial.ferroceneSolution.get(OrePrefixes.cell, 1)) + .fluidOutputs(MyMaterial.ferroceneWaste.getFluidOrGas(5000)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + CrackRecipeAdder.addUniversalDistillationRecipe( + MyMaterial.ferroceneWaste.getFluidOrGas(1000), + new FluidStack[] { Materials.Water.getFluid(400), MyMaterial.diethylamine.getFluidOrGas(800), + MyMaterial.ether.getFluidOrGas(500) }, + GT_Values.NI, + 30 * SECONDS, + TierEU.RECIPE_MV); + + CrackRecipeAdder.addUniversalDistillationRecipe( + MyMaterial.ferroceneSolution.getFluidOrGas(2000), + new FluidStack[] { MyMaterial.ether.getFluidOrGas(1000) }, + MyMaterial.ferrocene.get(OrePrefixes.dust, 1), + 30 * SECONDS, + TierEU.RECIPE_MV); + + if (GTPlusPlus.isModLoaded()) { + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.ferrocene.get(OrePrefixes.dust, 4), Materials.SodiumHydroxide.getDust(8)) + .fluidInputs( + FluidRegistry.getFluidStack("fluid.kerosene", 40000), + Materials.Naphtha.getFluid(3000), + MyMaterial.diethylamine.getFluidOrGas(1000)) + .fluidOutputs(MyMaterial.ironedKerosene.getFluidOrGas(44000)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_EV) + .addTo(multiblockChemicalReactorRecipes); + } + + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.ferrocene.get(OrePrefixes.dust, 4)) + .fluidInputs( + FluidRegistry.getFluidStack("combustionpromotor", 4000), + Materials.Naphtha.getFluid(40000), + Materials.LightFuel.getFluid(3000), + Materials.LPG.getFluid(1000), + Materials.Tetranitromethane.getFluid(2000)) + .fluidOutputs(MyMaterial.ironedFuel.getFluidOrGas(50000)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(multiblockChemicalReactorRecipes); + + GT_ModHandler.addCraftingRecipe( + ItemRefer.Combustion_Generator_EV.get(1), + GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, + new Object[] { "PCP", "MHM", "GWG", 'G', + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Titanium, 1), 'C', "circuitData", 'W', + GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 1), 'P', + ItemList.Electric_Piston_EV, 'H', ItemList.Hull_EV, 'M', ItemList.Electric_Motor_EV }); + + GT_ModHandler.addCraftingRecipe( + ItemRefer.Combustion_Generator_IV.get(1), + GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, + new Object[] { "PCP", "MHM", "GWG", 'G', + GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.TungstenSteel, 1), 'C', "circuitElite", 'W', + GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tungsten, 1), 'P', + ItemList.Electric_Piston_IV, 'H', ItemList.Hull_IV, 'M', ItemList.Electric_Motor_IV }); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Advanced_Fuel_Rod.get(1)) + .fluidInputs(MyMaterial.uraniumBasedLiquidFuelExcited.getFluidOrGas(250)) + .itemOutputs(ItemRefer.Fuel_Rod_LU_1.get(1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(fluidCannerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Advanced_Fuel_Rod.get(1)) + .fluidInputs(MyMaterial.plutoniumBasedLiquidFuelExcited.getFluidOrGas(250)) + .itemOutputs(ItemRefer.Fuel_Rod_LPu_1.get(1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(fluidCannerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_LPu_1.get(2), + MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GT_Utility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fuel_Rod_LPu_2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_LPu_2.get(2), + MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GT_Utility.getIntegratedCircuit(5)) + .itemOutputs(ItemRefer.Fuel_Rod_LPu_4.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_LPu_1.get(4), + MyMaterial.zircaloy2.get(OrePrefixes.stickLong, 6), + GT_Utility.getIntegratedCircuit(4)) + .itemOutputs(ItemRefer.Fuel_Rod_LPu_4.get(1)) + .duration(11 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_LU_1.get(2), + MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GT_Utility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fuel_Rod_LU_2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_LU_2.get(2), + MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GT_Utility.getIntegratedCircuit(5)) + .itemOutputs(ItemRefer.Fuel_Rod_LU_4.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_LU_1.get(4), + MyMaterial.zircaloy2.get(OrePrefixes.stickLong, 6), + GT_Utility.getIntegratedCircuit(4)) + .itemOutputs(ItemRefer.Fuel_Rod_LU_4.get(1)) + .duration(11 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + MyRecipeAdder.instance.addExtremeHeatExchangerRecipe( + FluidRegistry.getFluidStack("lava", 20000), + FluidRegistry.getFluidStack("ic2pahoehoelava", 20000), + FluidRegistry.getFluidStack("ic2distilledwater", 20000), + FluidRegistry.getFluidStack("steam", 3200000), + FluidRegistry.getFluidStack("ic2superheatedsteam", 1600000), + 10000); + + MyRecipeAdder.instance.addExtremeHeatExchangerRecipe( + FluidRegistry.getFluidStack("ic2hotcoolant", 16000), + FluidRegistry.getFluidStack("ic2coolant", 16000), + FluidRegistry.getFluidStack("ic2distilledwater", 20000), + FluidRegistry.getFluidStack("ic2superheatedsteam", 3200000), + FluidRegistry.getFluidStack("supercriticalsteam", 32000), + 8000); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Lepidolite, 1)) + .fluidInputs(Materials.HydrochloricAcid.getFluid(1000)) + .itemOutputs( + Materials.RockSalt.getDust(1), + MyMaterial.lithiumChloride.get(OrePrefixes.dust, 3), + Materials.Cryolite.getDust(4)) + .outputChances(8000, 8000, 8000) + .duration(7 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(chemicalBathRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(MyMaterial.marM200.get(OrePrefixes.ingot, 18), Materials.Cerium.getIngots(1)) + .fluidInputs(MyMaterial.lithiumChloride.getMolten(144)) + .itemOutputs(MyMaterial.marCeM200.get(OrePrefixes.ingotHot, 19)) + .duration(4 * MINUTES + 45 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .metadata(COIL_HEAT, 4500) + .addTo(blastFurnaceRecipes); + + GT_ModHandler.addCraftingRecipe( + ItemRefer.SC_Turbine_Casing.get(1), + GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, + new Object[] { "PhP", "GCG", "PwP", 'G', MyMaterial.marM200.get(OrePrefixes.gearGt, 1), 'C', + ItemList.Casing_Turbine.get(1), 'P', MyMaterial.marCeM200.get(OrePrefixes.plate, 1), }); + + GT_Values.RA.stdBuilder() + .itemInputs( + MyMaterial.marM200.get(OrePrefixes.gearGt, 2), + MyMaterial.marCeM200.get(OrePrefixes.plate, 4), + ItemList.Casing_Turbine.get(1)) + .itemOutputs(ItemRefer.SC_Turbine_Casing.get(1)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GT_ModHandler.addCraftingRecipe( + ItemRefer.SC_Fluid_Turbine.get(1), + GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, + new Object[] { "NPN", "GHG", "IPI", 'N', "circuitMaster", 'P', MyMaterial.marM200.get(OrePrefixes.plate, 1), + 'H', ItemList.Hull_IV.get(1), 'G', MyMaterial.marCeM200.get(OrePrefixes.gearGt, 1), 'I', + MyMaterial.incoloy903.get(OrePrefixes.pipeLarge, 1) }); + + GT_Values.RA.stdBuilder() + .itemInputs( + MyMaterial.marM200.get(OrePrefixes.plate, 2), + MyMaterial.marCeM200.get(OrePrefixes.gearGt, 2), + MyMaterial.incoloy903.get(OrePrefixes.pipeLarge, 2), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Master, 2), + ItemList.Hull_IV.get(1)) + .itemOutputs(ItemRefer.SC_Fluid_Turbine.get(1)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + MyMaterial.incoloy903.get(OrePrefixes.plate, 4), + MyMaterial.marCeM200.get(OrePrefixes.plate, 4), + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.NiobiumTitanium, 1), + GT_Utility.getIntegratedCircuit(8)) + .itemOutputs(ItemRefer.Pressure_Resistant_Wall.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GT_ModHandler.addCraftingRecipe( + ItemRefer.Extreme_Heat_Exchanger.get(1), + GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, + new Object[] { "EPE", "PHP", "SPS", 'P', + GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.TungstenSteel, 1), 'H', + ItemList.Hull_IV.get(1), 'S', MyMaterial.marM200.get(OrePrefixes.plate, 1), 'E', + GT_ModHandler.getIC2Item("reactorHeatSwitchDiamond", 1L, 1) }); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Salty_Root.get(1)) + .fluidInputs(GT_ModHandler.getWater(100)) + .itemOutputs(Materials.Salt.getDust(1), Materials.RockSalt.getDust(1), Materials.Saltpeter.getDust(1)) + .outputChances(9500, 8000, 5000) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(chemicalBathRecipes); + + if (NewHorizonsCoreMod.isModLoaded()) { + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Robot_Arm_IV.get(4), + ItemRefer.HiC_T1.get(4), + ItemList.Tool_DataOrb.get(3), + GT_OreDictUnificator.get(OrePrefixes.cableGt08, Materials.Titanium, 4), + MyMaterial.hikarium.get(OrePrefixes.gearGt, 4), + MyMaterial.marM200.get(OrePrefixes.plateDouble, 2), + ItemRefer.IC2_Ir_Plate.get(2), + MyMaterial.lumiium.get(OrePrefixes.bolt, 48)) + .fluidInputs(Materials.Palladium.getMolten(1152)) + .itemOutputs(ItemRefer.Precise_Assembler.get(1)) + .duration(1 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Casing_ZPM.get(3), + ItemList.Robot_Arm_EV.get(2), + GT_OreDictUnificator.get(OrePrefixes.cableGt04, MyMaterial.lumiium.getBridgeMaterial(), 2), + MyMaterial.marCeM200.get(OrePrefixes.plateDouble, 2), + ItemRefer.HiC_T1.get(1), + MyMaterial.signalium.get(OrePrefixes.bolt, 32), + MyMaterial.titaniumBetaC.get(OrePrefixes.gearGtSmall, 8)) + .fluidInputs(Materials.BlackSteel.getMolten(576)) + .itemOutputs(ItemRefer.Precise_Electronic_Unit_T1.get(2)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { ItemRefer.HiC_T1.get(2), + GT_ModHandler.getModItem("dreamcraft", "item.EngravedDiamondCrystalChip", 8), + ItemList.Circuit_Chip_NAND.get(16), GT_ModHandler.getIC2Item("reactorVentCore", 1L, 1) }, + new FluidStack[] { Materials.Plastic.getMolten(288), MyMaterial.signalium.getMolten(144), + MyMaterial.lumiium.getMolten(72), Materials.Enderium.getMolten(72) }, + ItemRefer.HiC_T2.get(1), + 30720, + 100, + 1); + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { ItemRefer.HiC_T1.get(2), + GT_ModHandler.getModItem("dreamcraft", "item.EngravedDiamondCrystalChip", 8), + ItemList.Circuit_Chip_NAND.get(16), + GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Aluminium, 2) }, + new FluidStack[] { Materials.Plastic.getMolten(288), MyMaterial.signalium.getMolten(144), + MyMaterial.lumiium.getMolten(72), Materials.Enderium.getMolten(72) }, + ItemRefer.HiC_T2.get(1), + 30720, + 100, + 1); + + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { ItemRefer.HiC_T2.get(2), ItemList.Circuit_Parts_Crystal_Chip_Master.get(8), + ItemList.Circuit_Chip_CrystalSoC2.get(1), GT_ModHandler.getIC2Item("reactorVentDiamond", 1L, 1) }, + new FluidStack[] { MyMaterial.adamantiumAlloy.getMolten(576), MyMaterial.signalium.getMolten(288), + MyMaterial.lumiium.getMolten(144), Materials.TungstenCarbide.getMolten(72) }, + ItemRefer.HiC_T3.get(1), + 122880, + 100, + 2); + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { ItemRefer.HiC_T2.get(2), ItemList.Circuit_Parts_Crystal_Chip_Master.get(8), + ItemList.Circuit_Chip_CrystalSoC2.get(1), + GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.StainlessSteel, 2) }, + new FluidStack[] { MyMaterial.adamantiumAlloy.getMolten(576), MyMaterial.signalium.getMolten(288), + MyMaterial.lumiium.getMolten(144), Materials.TungstenCarbide.getMolten(72) }, + ItemRefer.HiC_T3.get(1), + 122880, + 100, + 2); + + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { ItemRefer.HiC_T3.get(2), + GT_ModHandler.getModItem("dreamcraft", "item.EngravedEnergyChip", 8), + ItemList.Circuit_Chip_QuantumCPU.get(16), GT_ModHandler.getIC2Item("reactorVentGold", 1L, 1) }, + new FluidStack[] { MyMaterial.marM200.getMolten(1152), MyMaterial.signalium.getMolten(576), + MyMaterial.lumiium.getMolten(288), MyMaterial.artheriumSn.getMolten(144) }, + ItemRefer.HiC_T4.get(1), + 491520, + 100, + 3); + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { ItemRefer.HiC_T3.get(2), + GT_ModHandler.getModItem("dreamcraft", "item.EngravedEnergyChip", 8), + ItemList.Circuit_Chip_QuantumCPU.get(16), + GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.EnergeticAlloy, 2) }, + new FluidStack[] { MyMaterial.marM200.getMolten(1152), MyMaterial.signalium.getMolten(576), + MyMaterial.lumiium.getMolten(288), MyMaterial.artheriumSn.getMolten(144) }, + ItemRefer.HiC_T4.get(1), + 491520, + 100, + 3); + + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { ItemRefer.HiC_T4.get(2), + GT_ModHandler.getModItem("dreamcraft", "item.EngravedManyullynCrystalChip", 8), + ItemList.Circuit_Chip_BioCPU.get(1), Ic2Items.reactorVentSpread }, + new FluidStack[] { MyMaterial.titaniumBetaC.getMolten(1728), MyMaterial.signalium.getMolten(1152), + MyMaterial.lumiium.getMolten(576), MyMaterial.dalisenite.getMolten(288) }, + ItemRefer.HiC_T5.get(1), + 1966080, + 100, + 3); + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { ItemRefer.HiC_T4.get(2), + GT_ModHandler.getModItem("dreamcraft", "item.EngravedManyullynCrystalChip", 8), + ItemList.Circuit_Chip_BioCPU.get(1), + GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.TungstenCarbide, 2) }, + new FluidStack[] { MyMaterial.titaniumBetaC.getMolten(1728), MyMaterial.signalium.getMolten(1152), + MyMaterial.lumiium.getMolten(576), MyMaterial.dalisenite.getMolten(288) }, + ItemRefer.HiC_T5.get(1), + 1966080, + 100, + 3); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Casing_UV.get(3), + ItemList.Robot_Arm_LuV.get(2), + GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.ElectrumFlux, 4), + ItemRefer.HiC_T2.get(1), + ItemRefer.Precise_Electronic_Unit_T1.get(1), + MyMaterial.marCeM200.get(OrePrefixes.bolt, 32), + MyMaterial.artheriumSn.get(OrePrefixes.gearGtSmall, 8)) + .fluidInputs(MyMaterial.adamantiumAlloy.getMolten(1152)) + .itemOutputs(ItemRefer.Precise_Electronic_Unit_T2.get(4)) + .duration(4 * MINUTES) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.Casing_MAX.get(3), + ItemList.Field_Generator_ZPM.get(2), + GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 4), + ItemRefer.HiC_T3.get(1), + ItemRefer.Precise_Electronic_Unit_T2.get(1), + MyMaterial.titaniumBetaC.get(OrePrefixes.bolt, 32), + MyMaterial.dalisenite.get(OrePrefixes.gearGtSmall, 8)) + .fluidInputs(MyMaterial.artheriumSn.getMolten(1152)) + .itemOutputs(ItemRefer.Precise_Electronic_Unit_T3.get(4)) + .duration(4 * MINUTES) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + } + + // Compact MK1 Fusion Coil + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { ItemList.Casing_Coil_Superconductor.get(3), ItemRefer.HiC_T2.get(1), + ItemRefer.Special_Ceramics_Plate.get(2) }, + new FluidStack[] { MyMaterial.marM200.getMolten(1152), MyMaterial.zircaloy4.getMolten(288) }, + ItemRefer.Compact_Fusion_Coil_T0.get(1), + 9001, + 1200, + 1); + + // Compact MK2 Fusion Coil + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { ItemList.Casing_Fusion_Coil.get(3), ItemRefer.Quartz_Crystal_Resonator.get(2), + ItemRefer.HiC_T3.get(1), }, + new FluidStack[] { MyMaterial.artheriumSn.getMolten(576), MyMaterial.titaniumBetaC.getMolten(144) }, + ItemRefer.Compact_Fusion_Coil_T1.get(1), + 14000, + 800, + 2); + + // Compact MK3 Fusion Coil + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { ItemList.Casing_Fusion_Coil.get(3), ItemRefer.Radiation_Protection_Plate.get(2), + ItemList.QuantumStar.get(4), ItemRefer.HiC_T4.get(1) }, + new FluidStack[] { MyMaterial.dalisenite.getMolten(576), MyMaterial.hikarium.getMolten(144) }, + ItemRefer.Compact_Fusion_Coil_T2.get(1), + 114514, + 800, + 3); + + GT_Values.RA.stdBuilder() + .itemInputs( + ItemList.FusionComputer_LuV.get(48), + ItemRefer.HiC_T1.get(8), + MyMaterial.marCeM200.get(OrePrefixes.plate, 32), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Master, 8), + ItemList.Circuit_Wafer_HPIC.get(16), + ItemList.Field_Generator_LuV.get(4), + MyMaterial.marM200.get(OrePrefixes.stickLong, 8)) + .fluidInputs(MyMaterial.adamantiumAlloy.getMolten(9216)) + .itemOutputs(ItemRefer.Compact_Fusion_MK1.get(1)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Compact_Fusion_MK1.get(1)) + .metadata(RESEARCH_TIME, 20 * MINUTES) + .itemInputs( + ItemList.FusionComputer_ZPMV.get(48), + new Object[] { "circuitUltimate", 1 }, + new Object[] { "circuitUltimate", 1 }, + new Object[] { "circuitUltimate", 1 }, + new Object[] { "circuitUltimate", 1 }, + ItemList.Circuit_Wafer_UHPIC.get(32), + ItemList.ZPM_Coil.get(16), + ItemList.Neutron_Reflector.get(4), + ItemRefer.HiC_T2.get(8), + ItemList.Field_Generator_ZPM.get(8), + MyMaterial.artheriumSn.get(OrePrefixes.gearGtSmall, 32)) + .fluidInputs( + MyMaterial.marCeM200.getMolten(2304), + WerkstoffLoader.HDCS.getMolten(1152), + MyMaterial.artheriumSn.getMolten(288)) + .itemOutputs(ItemRefer.Compact_Fusion_MK2.get(1)) + .eut(TierEU.RECIPE_ZPM / 2) + .duration(5 * MINUTES) + .addTo(AssemblyLine); + + GT_Values.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Compact_Fusion_MK2.get(1)) + .metadata(RESEARCH_TIME, 20 * MINUTES) + .itemInputs( + ItemList.FusionComputer_UV.get(48), + new Object[] { "circuitSuperconductor", 1 }, + new Object[] { "circuitSuperconductor", 1 }, + new Object[] { "circuitSuperconductor", 1 }, + new Object[] { "circuitSuperconductor", 1 }, + ItemList.Circuit_Wafer_NPIC.get(64), + ItemList.UV_Coil.get(16), + ItemRefer.Advanced_Radiation_Protection_Plate.get(8), + ItemRefer.HiC_T3.get(8), + ItemList.Field_Generator_UV.get(8), + WerkstoffLoader.HDCS.get(OrePrefixes.gearGtSmall, 64)) + .fluidInputs( + MyMaterial.titaniumBetaC.getMolten(2304), + MyMaterial.dalisenite.getMolten(1152), + Materials.Americium.getMolten(288)) + .itemOutputs(ItemRefer.Compact_Fusion_MK3.get(1)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * MINUTES) + .addTo(AssemblyLine); + + // Compact MK4 Fusion Coil + if (GTPlusPlus.isModLoaded()) { + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { GT_ModHandler.getModItem("miscutils", "gtplusplus.blockcasings.3", 3, 13), + ItemRefer.HiC_T5.get(1), GT_ModHandler.getModItem("miscutils", "item.itemBufferCore4", 1), }, + new FluidStack[] { FluidRegistry.getFluidStack("molten.energycrystal", 1152), + FluidRegistry.getFluidStack("molten.laurenium", 144) }, + ItemRefer.Compact_Fusion_Coil_T3.get(1), + 520000, + 2000, + 3); + + // Compact MK4 Fusion Disassembly Recipe + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Compact_Fusion_Coil_T3.get(1)) + .itemOutputs(GregtechItemList.Casing_Fusion_Internal.get(3)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + + TT_recipeAdder.addResearchableAssemblylineRecipe( + ItemRefer.Compact_Fusion_MK3.get(1), + 2_560_000, + 4_096, + (int) TierEU.RECIPE_UHV, + 256, + new Object[] { GregtechItemList.FusionComputer_UV2.get(48), new Object[] { "circuitInfinite", 1 }, + new Object[] { "circuitInfinite", 1 }, new Object[] { "circuitInfinite", 1 }, + new Object[] { "circuitInfinite", 1 }, ItemList.Circuit_Wafer_PPIC.get(64), + ItemList.UHV_Coil.get(16), ALLOY.TITANSTEEL.getPlateDense(8), ItemRefer.HiC_T4.get(8), + ItemList.Field_Generator_UHV.get(8), + MyMaterial.enrichedNaquadahAlloy.get(OrePrefixes.gearGtSmall, 64) }, + new FluidStack[] { GenericChem.TEFLON.getFluidStack(2304), MyMaterial.dalisenite.getMolten(1152), + ALLOY.BOTMIUM.getFluidStack(288) }, + ItemRefer.Compact_Fusion_MK4.get(1), + 6000, + (int) TierEU.RECIPE_UV); + + // Compact MK5 Fusion Coil + MyRecipeAdder.instance.addPreciseAssemblerRecipe( + new ItemStack[] { GregtechItemList.Casing_Fusion_Internal2.get(3), + GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.Bio, 1), ItemRefer.HiC_T5.get(4), + CI.getEnergyCore(5, 1), }, + new FluidStack[] { ALLOY.BLACK_TITANIUM.getFluidStack(1152), + MyMaterial.metastableOganesson.getMolten(576) }, + ItemRefer.Compact_Fusion_Coil_T4.get(1), + (int) TierEU.RECIPE_UHV, + 2000, + 3); + + // Compact MK5 Computer + TT_recipeAdder.addResearchableAssemblylineRecipe( + ItemRefer.Compact_Fusion_MK4.get(1), + 10_240_000, + 16_384, + (int) TierEU.RECIPE_UEV, + 256, + new Object[] { GregtechItemList.FusionComputer_UV3.get(48), new Object[] { "circuitBio", 1 }, + new Object[] { "circuitBio", 1 }, new Object[] { "circuitBio", 1 }, + new Object[] { "circuitBio", 1 }, ItemList.Circuit_Wafer_QPIC.get(64), ItemList.UHV_Coil.get(64), + ELEMENT.STANDALONE.HYPOGEN.getPlateDense(8), ItemRefer.HiC_T5.get(8), + ItemList.Field_Generator_UEV.get(8), + MyMaterial.metastableOganesson.get(OrePrefixes.gearGtSmall, 64) }, + new FluidStack[] { MyMaterial.tairitsu.getMolten(2304), ALLOY.OCTIRON.getFluidStack(1152), + ELEMENT.STANDALONE.RHUGNOR.getFluidStack(288) }, + ItemRefer.Compact_Fusion_MK5.get(1), + 6000, + (int) TierEU.RECIPE_UHV); + + // Compact MK5 Fusion Disassembly Recipe + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Compact_Fusion_Coil_T4.get(1)) + .itemOutputs(GregtechItemList.Casing_Fusion_Internal2.get(3)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + } + + GT_Values.RA.stdBuilder() + .itemInputs(Materials.Antimony.getDust(8), GT_Utility.getIntegratedCircuit(24)) + .fluidInputs( + MyMaterial.ether.getFluidOrGas(1000), + Materials.Fluorine.getGas(40000), + Materials.Ice.getSolid(8000)) + .fluidOutputs(MyMaterial.antimonyPentafluorideSolution.getFluidOrGas(8000)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(multiblockChemicalReactorRecipes); + + CrackRecipeAdder.addUniversalDistillationRecipe( + MyMaterial.antimonyPentafluorideSolution.getFluidOrGas(4000), + new FluidStack[] { MyMaterial.antimonyPentafluoride.getFluidOrGas(4000), + MyMaterial.ether.getFluidOrGas(500) }, + GT_Values.NI, + 5 * SECONDS, + TierEU.RECIPE_MV); + + GT_Values.RA.stdBuilder() + .itemInputs( + GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Plastic, 2), + GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1), + GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Concrete.getMolten(2304)) + .itemOutputs(ItemRefer.Coolant_Tower.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + } + + public static void InitLoadRecipe() { + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_U_Depleted_1.get(1)) + .itemOutputs( + ItemRefer.Advanced_Fuel_Rod.get(1), + Materials.Uranium.getDust(8), + Materials.Plutonium.getDust(2), + Materials.Graphite.getDust(8), + Materials.Uranium235.getDust(1), + Materials.Plutonium241.getDust(1)) + .outputChances(10000, 10000, 10000, 9000, 5000, 3000) + .fluidOutputs(WerkstoffLoader.Neon.getFluidOrGas(32)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_U_Depleted_2.get(1)) + .itemOutputs( + ItemRefer.Advanced_Fuel_Rod.get(2), + Materials.Uranium.getDust(16), + Materials.Plutonium.getDust(4), + Materials.Graphite.getDust(16), + Materials.Uranium235.getDust(2), + Materials.Plutonium241.getDust(2)) + .outputChances(10000, 10000, 10000, 9000, 5000, 3000) + .fluidOutputs(WerkstoffLoader.Neon.getFluidOrGas(64)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_U_Depleted_4.get(1)) + .itemOutputs( + ItemRefer.Advanced_Fuel_Rod.get(4), + Materials.Uranium.getDust(32), + Materials.Plutonium.getDust(8), + Materials.Graphite.getDust(32), + Materials.Uranium235.getDust(4), + Materials.Plutonium241.getDust(4)) + .outputChances(10000, 10000, 10000, 9000, 5000, 3000) + .fluidOutputs(WerkstoffLoader.Neon.getFluidOrGas(128)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_Pu_Depleted_1.get(1)) + .itemOutputs( + ItemRefer.Advanced_Fuel_Rod.get(1), + Materials.Plutonium.getDust(5), + Materials.Plutonium241.getDust(2), + Materials.Carbon.getDust(2), + Materials.Uranium.getDust(1), + Materials.Uranium235.getDust(1)) + .outputChances(10000, 10000, 10000, 9000, 5000, 3000) + .fluidOutputs(Materials.Argon.getGas(32)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_Pu_Depleted_2.get(1)) + .itemOutputs( + ItemRefer.Advanced_Fuel_Rod.get(2), + Materials.Plutonium.getDust(10), + Materials.Plutonium241.getDust(4), + Materials.Carbon.getDust(4), + Materials.Uranium.getDust(2), + Materials.Uranium235.getDust(2)) + .outputChances(10000, 10000, 10000, 9000, 5000, 3000) + .fluidOutputs(Materials.Argon.getGas(64)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_Pu_Depleted_4.get(1)) + .itemOutputs( + ItemRefer.Advanced_Fuel_Rod.get(4), + Materials.Plutonium.getDust(20), + Materials.Plutonium241.getDust(8), + Materials.Carbon.getDust(8), + Materials.Uranium.getDust(4), + Materials.Uranium235.getDust(4)) + .outputChances(10000, 10000, 10000, 9000, 5000, 3000) + .fluidOutputs(Materials.Argon.getGas(128)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_LPu_Depleted_1.get(1)) + .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(1)) + .fluidOutputs(MyMaterial.plutoniumBasedLiquidFuelDepleted.getFluidOrGas(250)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_LPu_Depleted_2.get(1)) + .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(2)) + .fluidOutputs(MyMaterial.plutoniumBasedLiquidFuelDepleted.getFluidOrGas(500)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_LPu_Depleted_4.get(1)) + .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(4)) + .fluidOutputs(MyMaterial.plutoniumBasedLiquidFuelDepleted.getFluidOrGas(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_LU_Depleted_1.get(1)) + .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(1)) + .fluidOutputs(MyMaterial.uraniumBasedLiquidFuelDepleted.getFluidOrGas(250)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_LU_Depleted_2.get(1)) + .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(2)) + .fluidOutputs(MyMaterial.uraniumBasedLiquidFuelDepleted.getFluidOrGas(500)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_LU_Depleted_4.get(1)) + .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(4)) + .fluidOutputs(MyMaterial.uraniumBasedLiquidFuelDepleted.getFluidOrGas(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + Materials.Glowstone.getDust(4), + Materials.Redstone.getDust(2), + Materials.Aluminium.getDust(1), + GT_Utility.getIntegratedCircuit(3)) + .itemOutputs(ItemRefer.High_Energy_Mixture.get(4)) + .duration(12 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.High_Energy_Mixture.get(2)) + .fluidInputs(Materials.PhosphoricAcid.getFluid(4000)) + .itemOutputs(MyMaterial.lumiinessence.get(OrePrefixes.dust, 1)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV / 2) + .addTo(fluidSolidifierRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + Materials.AnnealedCopper.getDust(4), + Materials.Ardite.getDust(2), + Materials.RedAlloy.getDust(2), + GT_Utility.getIntegratedCircuit(4)) + .fluidInputs(Materials.Redstone.getMolten(288)) + .itemOutputs(MyMaterial.signalium.get(OrePrefixes.dust, 1)) + .duration(12 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs( + Materials.TinAlloy.getDust(4), + Materials.SterlingSilver.getDust(2), + MyMaterial.lumiinessence.get(OrePrefixes.dust, 2), + GT_Utility.getIntegratedCircuit(4)) + .fluidInputs(Materials.Glowstone.getMolten(288)) + .itemOutputs(MyMaterial.lumiium.get(OrePrefixes.dust, 1)) + .duration(12 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + GT_Values.RA.stdBuilder() + .fluidInputs(MyMaterial.enrichedNaquadahAlloy.getMolten(144), WerkstoffLoader.Oganesson.getFluidOrGas(250)) + .fluidOutputs(MyMaterial.metastableOganesson.getMolten(36)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_UV) + .metadata(FUSION_THRESHOLD, 1000000000) + .addTo(fusionRecipes); + + MyRecipeAdder.instance.addNeutronActivatorRecipe( + null, + new ItemStack[] { MyMaterial.metastableOganesson.get(OrePrefixes.dust) }, + new FluidStack[] { WerkstoffLoader.Oganesson.getFluidOrGas(250) }, + null, + 2000, + 1100, + 1000); + + GT_Values.RA.stdBuilder() + .itemInputs(ItemRefer.HiC_T5.get(0)) + .fluidInputs( + MyMaterial.metastableOganesson.getMolten(1152), + MyMaterial.preciousMetalAlloy.getMolten(2304), + MaterialsUEVplus.SpaceTime.getMolten(288), + MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(5000)) + .fluidOutputs(MyMaterial.shirabon.getMolten(144)) + .duration(10 * SECONDS) + .eut(1500000000) + .metadata(COIL_HEAT, 13500) + .addTo(plasmaForgeRecipes); + } + + public static void FinishLoadRecipe() { + for (GT_Recipe plasmaFuel : RecipeMaps.plasmaFuels.getAllRecipes()) { + FluidStack tPlasma = GT_Utility.getFluidForFilledItem(plasmaFuel.mInputs[0], true); + if (tPlasma == null) { + continue; + } + int tUnit = plasmaFuel.mSpecialValue; + if (tUnit > 200_000) { + tPlasma.amount = 1500; + } else if (tUnit > 100_000) { + tPlasma.amount = 1000; + } else if (tUnit > 50_000) { + tPlasma.amount = 800; + } else if (tUnit > 10_000) { + tPlasma.amount = 500; + } else { + tPlasma.amount = 100; + } + + String tPlasmaName = FluidRegistry.getFluidName(tPlasma); + + if (tPlasmaName.split("\\.", 2).length == 2) { + String tOutName = tPlasmaName.split("\\.", 2)[1]; + FluidStack output = FluidRegistry.getFluidStack(tOutName, tPlasma.amount); + if (output == null) output = FluidRegistry.getFluidStack("molten." + tOutName, tPlasma.amount); + if (output != null) { + long waterAmount = (long) tUnit * 3 * tPlasma.amount / 160; + long criticalSteamAmount = (long) tUnit * 3 * tPlasma.amount / 100; + MyRecipeAdder.instance.addExtremeHeatExchangerRecipe( + tPlasma, + output, + FluidRegistry.getFluidStack("ic2distilledwater", (int) waterAmount), + FluidRegistry.getFluidStack("ic2superheatedsteam", 0), // Plasma always outputs SC steam. + FluidRegistry.getFluidStack("supercriticalsteam", (int) criticalSteamAmount), + 1); + } + } + } + } +} diff --git a/goodgen/src/main/java/goodgenerator/main/GG_Config_Loader.java b/goodgen/src/main/java/goodgenerator/main/GG_Config_Loader.java new file mode 100644 index 0000000000..bfa4526167 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/main/GG_Config_Loader.java @@ -0,0 +1,118 @@ +package goodgenerator.main; + +import java.io.File; + +import net.minecraftforge.common.config.Configuration; + +import cpw.mods.fml.relauncher.FMLInjectionData; + +public class GG_Config_Loader { + + public static final Configuration GG_Config = new Configuration( + new File(new File((File) FMLInjectionData.data()[6], "config"), "GoodGenerator.cfg")); + + public static int LiquidAirConsumptionPerSecond = 2400; + public static int[] NaquadahFuelVoltage = new int[] { 12960, 2200, 32400, 975000, 2300000, 9511000, 88540000, + 399576000, 2077795200 }; + public static int[] NaquadahFuelTime = new int[] { 100, 500, 150, 60, 70, 80, 100, 160, 240 }; + public static int[] CoolantEfficiency = new int[] { 500, 275, 150, 105 }; + public static int[] ExcitedLiquidCoe = new int[] { 64, 16, 4, 3, 2 }; + public static boolean EnableNaquadahRework = true; + + public static void run() { + loadCategory(); + loadProperty(); + } + + private static void loadProperty() { + NaquadahFuelVoltage[0] = GG_Config + .get("LargeNaquadahReactor", "Uranium Based Liquid Fuel Basic Output Voltage", NaquadahFuelVoltage[0]) + .getInt(); + NaquadahFuelTime[0] = GG_Config + .get("LargeNaquadahReactor", "Uranium Based Liquid Fuel Burning Time", NaquadahFuelTime[0]) + .getInt(); + NaquadahFuelVoltage[1] = GG_Config + .get("LargeNaquadahReactor", "Thorium Based Liquid Fuel Basic Output Voltage", NaquadahFuelVoltage[1]) + .getInt(); + NaquadahFuelTime[1] = GG_Config + .get("LargeNaquadahReactor", "Thorium Based Liquid Fuel Burning Time", NaquadahFuelTime[1]) + .getInt(); + NaquadahFuelVoltage[2] = GG_Config + .get("LargeNaquadahReactor", "Plutonium Based Liquid Fuel Basic Output Voltage", NaquadahFuelVoltage[2]) + .getInt(); + NaquadahFuelTime[2] = GG_Config + .get("LargeNaquadahReactor", "Plutonium Based Liquid Fuel Burning Time", NaquadahFuelTime[2]) + .getInt(); + NaquadahFuelVoltage[3] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkI Basic Output Voltage", NaquadahFuelVoltage[3]) + .getInt(); + NaquadahFuelTime[3] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkI Burning Time", NaquadahFuelTime[3]) + .getInt(); + NaquadahFuelVoltage[4] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkII Basic Output Voltage", NaquadahFuelVoltage[4]) + .getInt(); + NaquadahFuelTime[4] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkII Burning Time", NaquadahFuelTime[4]) + .getInt(); + NaquadahFuelVoltage[5] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkIII Basic Output Voltage", NaquadahFuelVoltage[5]) + .getInt(); + NaquadahFuelTime[5] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkIII Burning Time", NaquadahFuelTime[5]) + .getInt(); + NaquadahFuelVoltage[6] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkIV Basic Output Voltage", NaquadahFuelVoltage[6]) + .getInt(); + NaquadahFuelTime[6] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkIV Burning Time", NaquadahFuelTime[6]) + .getInt(); + NaquadahFuelVoltage[7] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkV Basic Output Voltage", NaquadahFuelVoltage[7]) + .getInt(); + NaquadahFuelTime[7] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkV Burning Time", NaquadahFuelTime[7]) + .getInt(); + NaquadahFuelVoltage[8] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkVI Basic Output Voltage", NaquadahFuelVoltage[8]) + .getInt(); + NaquadahFuelTime[8] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkVI Burning Time", NaquadahFuelTime[8]) + .getInt(); + CoolantEfficiency[0] = GG_Config.get("LargeNaquadahReactor", "Tachyon Fluid Efficiency", CoolantEfficiency[0]) + .getInt(); + CoolantEfficiency[1] = GG_Config.get("LargeNaquadahReactor", "Cryotheum Efficiency", CoolantEfficiency[1]) + .getInt(); + CoolantEfficiency[2] = GG_Config.get("LargeNaquadahReactor", "Super Coolant Efficiency", CoolantEfficiency[2]) + .getInt(); + CoolantEfficiency[3] = GG_Config.get("LargeNaquadahReactor", "IC2 Coolant Efficiency", CoolantEfficiency[3]) + .getInt(); + ExcitedLiquidCoe[0] = GG_Config + .get("LargeNaquadahReactor", "Spatially Enlarged Fluid Magnification", ExcitedLiquidCoe[0]) + .getInt(); + ExcitedLiquidCoe[1] = GG_Config + .get("LargeNaquadahReactor", "Atomic Separation Catalyst Magnification", ExcitedLiquidCoe[1]) + .getInt(); + ExcitedLiquidCoe[2] = GG_Config.get("LargeNaquadahReactor", "Naquadah Magnification", ExcitedLiquidCoe[2]) + .getInt(); + ExcitedLiquidCoe[3] = GG_Config.get("LargeNaquadahReactor", "Uranium-235 Magnification", ExcitedLiquidCoe[3]) + .getInt(); + ExcitedLiquidCoe[4] = GG_Config.get("LargeNaquadahReactor", "Caesium Magnification", ExcitedLiquidCoe[4]) + .getInt(); + LiquidAirConsumptionPerSecond = Math.max( + GG_Config.get("LargeNaquadahReactor", "Liquid Air Consumption Per Second", LiquidAirConsumptionPerSecond) + .getInt(), + 0); + + EnableNaquadahRework = GG_Config.get("NaquadahRework", "Enable Naquadah Rework", EnableNaquadahRework) + .getBoolean(); + + if (GG_Config.hasChanged()) GG_Config.save(); + } + + private static void loadCategory() { + GG_Config + .addCustomCategoryComment("LargeNaquadahReactor", "Set fuel value, coolant or excited liquid property."); + GG_Config.addCustomCategoryComment("NaquadahRework", "About the naquadah line"); + } +} diff --git a/goodgen/src/main/java/goodgenerator/main/GoodGenerator.java b/goodgen/src/main/java/goodgenerator/main/GoodGenerator.java new file mode 100644 index 0000000000..ad2c3eb0e9 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/main/GoodGenerator.java @@ -0,0 +1,86 @@ +package goodgenerator.main; + +import net.minecraft.creativetab.CreativeTabs; + +import com.github.bartimaeusnek.bartworks.API.WerkstoffAdderRegistry; + +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.SidedProxy; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLLoadCompleteEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.network.NetworkRegistry; +import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; +import goodgenerator.Tags; +import goodgenerator.common.CommonProxy; +import goodgenerator.crossmod.thaumcraft.Research; +import goodgenerator.items.MyMaterial; +import goodgenerator.loader.Loaders; +import goodgenerator.loader.NaquadahReworkRecipeLoader; +import goodgenerator.tabs.MyTabs; + +@SuppressWarnings("ALL") +@Mod( + modid = GoodGenerator.MOD_ID, + version = GoodGenerator.VERSION, + dependencies = "required-after:IC2; " + "required-after:gregtech; " + + "required-after:bartworks; " + + "required-after:tectech; " + + "required-after:structurelib; " + + "before:miscutils; " + + "after:dreamcraft;") +public final class GoodGenerator { + + public static final String MOD_ID = "GoodGenerator"; + public static final String MOD_NAME = "Good Generator"; + public static final String VERSION = Tags.VERSION; + + public static final CreativeTabs GG = new MyTabs("Good Generator"); + + @SidedProxy(clientSide = "goodgenerator.client.ClientProxy", serverSide = "goodgenerator.common.CommonProxy") + public static CommonProxy proxy; + + public static SimpleNetworkWrapper CHANNEL = NetworkRegistry.INSTANCE.newSimpleChannel(MOD_ID); + + static {} + + @Mod.Instance(GoodGenerator.MOD_ID) + public static GoodGenerator instance; + + @Mod.EventHandler + public static void preInit(FMLPreInitializationEvent event) { + GG_Config_Loader.run(); + WerkstoffAdderRegistry.addWerkstoffAdder(new MyMaterial()); + // WerkstoffAdderRegistry.addWerkstoffAdder(new IsotopeMaterialLoader()); + Loaders.preInitLoad(); + proxy.preInit(event); + } + + @Mod.EventHandler + public static void init(FMLInitializationEvent event) { + Loaders.initLoad(); + proxy.init(event); + } + + @Mod.EventHandler + public static void postInit(FMLPostInitializationEvent event) { + Loaders.postInitLoad(); + crossMod(); + proxy.postInit(event); + } + + @Mod.EventHandler + public void onLoadComplete(FMLLoadCompleteEvent event) { + // NaquadahReworkRecipeLoader.SmallRecipeChange(); + NaquadahReworkRecipeLoader.Remover(); + Loaders.completeLoad(); + } + + public static void crossMod() { + if (Loader.isModLoaded("Thaumcraft")) { + Research.addResearch(); + } + } +} diff --git a/goodgen/src/main/java/goodgenerator/network/MessageMTEBase.java b/goodgen/src/main/java/goodgenerator/network/MessageMTEBase.java new file mode 100644 index 0000000000..4a9982d8d8 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/network/MessageMTEBase.java @@ -0,0 +1,88 @@ +/* + * MIT License Copyright (c) 2021 Glease Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +package goodgenerator.network; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +import com.github.technus.tectech.TecTech; + +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import cpw.mods.fml.relauncher.Side; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import io.netty.buffer.ByteBuf; + +public abstract class MessageMTEBase implements IMessage { + + protected int w; + protected int x; + protected short y; + protected int z; + + public MessageMTEBase() {} + + public MessageMTEBase(IGregTechTileEntity tile) { + this.w = tile.getWorld().provider.dimensionId; + this.x = tile.getXCoord(); + this.y = tile.getYCoord(); + this.z = tile.getZCoord(); + } + + @Override + public void fromBytes(ByteBuf buf) { + x = buf.readInt(); + y = buf.readShort(); + z = buf.readInt(); + w = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(x); + buf.writeShort(y); + buf.writeInt(z); + buf.writeInt(w); + } + + public abstract static class Handler<REQ extends MessageMTEBase, REPLY extends IMessage> + implements IMessageHandler<REQ, REPLY> { + + protected abstract REPLY onError(REQ message, MessageContext ctx); + + protected abstract REPLY onSuccess(REQ message, MessageContext ctx, IMetaTileEntity mte); + + @Override + public REPLY onMessage(REQ message, MessageContext ctx) { + World world; + if (ctx.side == Side.SERVER) { + world = DimensionManager.getWorld(message.w); + } else { + world = TecTech.proxy.getClientWorld(); + if (world.provider.dimensionId != message.w) return onError(message, ctx); + } + if (world == null) return onError(message, ctx); + if (world.blockExists(message.x, message.y, message.z)) { + TileEntity te = world.getTileEntity(message.x, message.y, message.z); + if (te instanceof IGregTechTileEntity && !((IGregTechTileEntity) te).isInvalidTileEntity()) { + IMetaTileEntity mte = ((IGregTechTileEntity) te).getMetaTileEntity(); + if (mte != null) return onSuccess(message, ctx, mte); + } + } + return onError(message, ctx); + } + } +} diff --git a/goodgen/src/main/java/goodgenerator/tabs/MyTabs.java b/goodgen/src/main/java/goodgenerator/tabs/MyTabs.java new file mode 100644 index 0000000000..3493abbe3b --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/tabs/MyTabs.java @@ -0,0 +1,18 @@ +package goodgenerator.tabs; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +import goodgenerator.loader.Loaders; + +public class MyTabs extends CreativeTabs { + + public MyTabs(String name) { + super(name); + } + + @Override + public Item getTabIconItem() { + return Loaders.radiationProtectionPlate; + } +} diff --git a/goodgen/src/main/java/goodgenerator/tabs/NuclearTab.java b/goodgen/src/main/java/goodgenerator/tabs/NuclearTab.java new file mode 100644 index 0000000000..867e1c9141 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/tabs/NuclearTab.java @@ -0,0 +1,16 @@ +package goodgenerator.tabs; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +public class NuclearTab extends CreativeTabs { + + public NuclearTab() { + super("Nuclear Items"); + } + + @Override + public Item getTabIconItem() { + return null; + } +} diff --git a/goodgen/src/main/java/goodgenerator/util/CharExchanger.java b/goodgen/src/main/java/goodgenerator/util/CharExchanger.java new file mode 100644 index 0000000000..96019eecd1 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/util/CharExchanger.java @@ -0,0 +1,52 @@ +package goodgenerator.util; + +import net.minecraft.util.EnumChatFormatting; + +public class CharExchanger { + + public static final String[] tierName = new String[] { EnumChatFormatting.RED + "ULV" + EnumChatFormatting.RESET, + EnumChatFormatting.GRAY + "LV" + EnumChatFormatting.RESET, + EnumChatFormatting.AQUA + "MV" + EnumChatFormatting.RESET, + EnumChatFormatting.GOLD + "HV" + EnumChatFormatting.RESET, + EnumChatFormatting.DARK_PURPLE + "EV" + EnumChatFormatting.RESET, + EnumChatFormatting.DARK_BLUE + "IV" + EnumChatFormatting.RESET, + EnumChatFormatting.LIGHT_PURPLE + "LuV" + EnumChatFormatting.RESET, + EnumChatFormatting.WHITE + "ZPM" + EnumChatFormatting.RESET, + EnumChatFormatting.DARK_AQUA + "UV" + EnumChatFormatting.RESET, + EnumChatFormatting.DARK_RED + "UHV" + EnumChatFormatting.RESET, + EnumChatFormatting.GREEN + "UEV" + EnumChatFormatting.RESET, }; + + public static char shifter(int unicode) { + return (char) unicode; + } + + public static String formatNumber(String exp) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < exp.length(); ++i) { + if (Character.isDigit(exp.charAt(i))) { + int cnt = 0, prt = i; + while (i < exp.length() && Character.isDigit(exp.charAt(i))) { + i++; + cnt++; + } + while (prt < exp.length() && Character.isDigit(exp.charAt(prt))) { + sb.append(exp.charAt(prt)); + prt++; + cnt--; + if (cnt % 3 == 0 && cnt != 0) sb.append(","); + } + } + if (i < exp.length()) sb.append(exp.charAt(i)); + } + return sb.toString(); + } + + public static String[] genString(String content, int len) { + String[] ret = new String[len]; + while (len > 0) { + len--; + ret[len] = content; + } + return ret; + } +} diff --git a/goodgen/src/main/java/goodgenerator/util/CrackRecipeAdder.java b/goodgen/src/main/java/goodgenerator/util/CrackRecipeAdder.java new file mode 100644 index 0000000000..dddb7fe69d --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/util/CrackRecipeAdder.java @@ -0,0 +1,624 @@ +package goodgenerator.util; + +import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.crackingRecipes; +import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes; +import static gregtech.api.recipe.RecipeMaps.distilleryRecipes; +import static gregtech.api.recipe.RecipeMaps.extruderRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; +import static gregtech.api.recipe.RecipeMaps.wiremillRecipes; +import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GT_RecipeBuilder.TICKS; +import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; + +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; +import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Fluid; +import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GT_RecipeBuilder; +import gregtech.api.util.GT_Utility; + +public class CrackRecipeAdder { + + static float[] coe1 = { 1.25f, 1.2f, 1.1f, 0.9f, 0.85f, 0.8f, 0.75f }; + static float[] coe2 = { 1.4f, 1.25f, 1.2f, 0.8f, 0.75f, 0.7f, 0.65f }; + static float[] coe3 = { 1.6f, 1.5f, 1.45f, 0.7f, 0.6f, 0.55f, 0.45f }; + + public static void crackerAdder(FluidStack inputFluid, FluidStack cracker, FluidStack[] outputFluids, + ItemStack outputItem, int num, int EUt, int Duration) { + + String name; + FluidStack[] actOutput = new FluidStack[num]; + name = inputFluid.getFluid() + .getName() + .replaceAll(" ", ""); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(1)) + .fluidInputs(inputFluid, cracker) + .fluidOutputs(FluidRegistry.getFluidStack("lightlycracked" + name, 1000)) + .duration(Math.max((long) (Duration * 0.8), 1L) * TICKS) + .eut(EUt) + .addTo(crackingRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(2)) + .fluidInputs(inputFluid, cracker) + .fluidOutputs(FluidRegistry.getFluidStack("moderatelycracked" + name, 1000)) + .duration(Math.max((long) (Duration), 1L) * TICKS) + .eut(EUt) + .addTo(crackingRecipes); + + GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(3)) + .fluidInputs(inputFluid, cracker) + .fluidOutputs(FluidRegistry.getFluidStack("heavilycracked" + name, 1000)) + .duration(Math.max((long) (Duration * 1.2), 1L) * TICKS) + .eut(EUt) + .addTo(crackingRecipes); + + for (int i = num - 1, j = 0; i >= 0; i--, j++) { + Fluid tmp1 = outputFluids[i].getFluid(); + int tmp2 = (int) (outputFluids[i].amount * coe1[i]); + actOutput[j] = new FluidStack(tmp1, tmp2); + } + + addUniversalDistillationRecipe( + FluidRegistry.getFluidStack("lightlycracked" + name, 1000), + actOutput, + outputItem, + Duration / 2, + EUt / 3); + + for (int i = num - 1, j = 0; i >= 0; i--, j++) { + Fluid tmp1 = outputFluids[i].getFluid(); + int tmp2 = (int) (outputFluids[i].amount * coe2[i]); + actOutput[j] = new FluidStack(tmp1, tmp2); + } + + addUniversalDistillationRecipe( + FluidRegistry.getFluidStack("moderatelycracked" + name, 1000), + actOutput, + outputItem, + Duration / 2, + EUt / 3); + + for (int i = num - 1, j = 0; i >= 0; i--, j++) { + Fluid tmp1 = outputFluids[i].getFluid(); + int tmp2 = (int) (outputFluids[i].amount * coe3[i]); + actOutput[j] = new FluidStack(tmp1, tmp2); + } + + addUniversalDistillationRecipe( + FluidRegistry.getFluidStack("heavilycracked" + name, 1000), + actOutput, + outputItem, + Duration / 2, + EUt / 3); + } + + public static void reAddBlastRecipe(Werkstoff material, int duration, int EUt, int level, boolean gas) { + ItemStack input = material.get(OrePrefixes.dust, 1); + ItemStack output = level > 1750 ? material.get(OrePrefixes.ingotHot, 1) : material.get(OrePrefixes.ingot, 1); + if (gas) { + GT_Values.RA.stdBuilder() + .itemInputs(input, GT_Utility.getIntegratedCircuit(11)) + .fluidInputs(Materials.Helium.getGas(1000)) + .itemOutputs(output) + .duration(duration * TICKS) + .eut(EUt) + .metadata(COIL_HEAT, level) + .addTo(blastFurnaceRecipes); + } else { + GT_Values.RA.stdBuilder() + .itemInputs(input, GT_Utility.getIntegratedCircuit(1)) + .itemOutputs(output) + .duration(duration * TICKS) + .eut(EUt) + .metadata(COIL_HEAT, level) + .addTo(blastFurnaceRecipes); + } + } + + public static void addUniversalDistillationRecipewithCircuit(FluidStack aInput, ItemStack[] aCircuit, + FluidStack[] aOutputs, ItemStack aOutput2, int aDuration, long aEUt) { + for (int i = 0; i < Math.min(aOutputs.length, 11); i++) { + GT_RecipeBuilder buildDistillation = GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(i + 1)); + if (aOutput2 != GT_Values.NI) { + buildDistillation.itemOutputs(aOutput2); + } + buildDistillation.fluidInputs(aInput) + .fluidOutputs(aOutputs[i]) + .duration(2 * aDuration) + .eut(aEUt / 4) + .addTo(distilleryRecipes); + } + GT_RecipeBuilder buildDT = GT_Values.RA.stdBuilder() + .itemInputs(aCircuit); + if (aOutput2 != GT_Values.NI) { + buildDT.itemOutputs(aOutput2); + } + buildDT.fluidInputs(aInput) + .fluidOutputs(aOutputs) + .duration(aDuration) + .eut(aEUt) + .addTo(distillationTowerRecipes); + } + + public static void addUniversalDistillationRecipe(FluidStack aInput, FluidStack[] aOutputs, ItemStack aOutput2, + int aDuration, long aEUt) { + for (int i = 0; i < Math.min(aOutputs.length, 11); i++) { + GT_RecipeBuilder buildDistillation = GT_Values.RA.stdBuilder() + .itemInputs(GT_Utility.getIntegratedCircuit(i + 1)); + if (aOutput2 != GT_Values.NI) { + buildDistillation.itemOutputs(aOutput2); + } + buildDistillation.fluidInputs(aInput) + .fluidOutputs(aOutputs[i]) + .duration(2 * aDuration) + .eut(aEUt / 4) + .addTo(distilleryRecipes); + } + GT_RecipeBuilder buildDT = GT_Values.RA.stdBuilder(); + if (aOutput2 != GT_Values.NI) { + buildDT.itemOutputs(aOutput2); + } + buildDT.fluidInputs(aInput) + .fluidOutputs(aOutputs) + .duration(aDuration) + .eut(aEUt) + .addTo(distillationTowerRecipes); + } + + public static FluidStack copyFluidWithAmount(FluidStack fluid, int amount) { + if (fluid == null || amount <= 0) return null; + return new FluidStack(fluid.getFluid(), amount); + } + + public static void registerPipe(int ID, Werkstoff material, int flow, int temp, boolean gas) { + String unName = material.getDefaultName() + .replace(" ", "_"); + String Name = material.getDefaultName(); + GT_OreDictUnificator.registerOre( + OrePrefixes.pipeTiny.get(material.getBridgeMaterial()), + new GT_MetaPipeEntity_Fluid( + ID, + "GT_Pipe_" + unName + "_Tiny", + "Tiny " + Name + " Fluid Pipe", + 0.25F, + material.getBridgeMaterial(), + flow / 6, + temp, + gas).getStackForm(1L)); + GT_OreDictUnificator.registerOre( + OrePrefixes.pipeSmall.get(material.getBridgeMaterial()), + new GT_MetaPipeEntity_Fluid( + ID + 1, + "GT_Pipe_" + unName + "_Small", + "Small " + Name + " Fluid Pipe", + 0.375F, + material.getBridgeMaterial(), + flow / 3, + temp, + gas).getStackForm(1L)); + GT_OreDictUnificator.registerOre( + OrePrefixes.pipeMedium.get(material.getBridgeMaterial()), + new GT_MetaPipeEntity_Fluid( + ID + 2, + "GT_Pipe_" + unName, + Name + " Fluid Pipe", + 0.5F, + material.getBridgeMaterial(), + flow, + temp, + gas).getStackForm(1L)); + GT_OreDictUnificator.registerOre( + OrePrefixes.pipeLarge.get(material.getBridgeMaterial()), + new GT_MetaPipeEntity_Fluid( + ID + 3, + "GT_Pipe_" + unName + "_Large", + "Large " + Name + " Fluid Pipe", + 0.75F, + material.getBridgeMaterial(), + flow * 2, + temp, + gas).getStackForm(1L)); + GT_OreDictUnificator.registerOre( + OrePrefixes.pipeHuge.get(material.getBridgeMaterial()), + new GT_MetaPipeEntity_Fluid( + ID + 4, + "GT_Pipe_" + unName + "_Huge", + "Huge " + Name + " Fluid Pipe", + 0.875F, + material.getBridgeMaterial(), + flow * 4, + temp, + gas).getStackForm(1L)); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 1), ItemList.Shape_Extruder_Pipe_Tiny.get(0)) + .itemOutputs(material.get(OrePrefixes.pipeTiny, 2)) + .duration( + material.getStats() + .getMass() * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(extruderRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 1), ItemList.Shape_Extruder_Pipe_Small.get(0)) + .itemOutputs(material.get(OrePrefixes.pipeSmall, 1)) + .duration( + material.getStats() + .getMass() * 2 + * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(extruderRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 3), ItemList.Shape_Extruder_Pipe_Medium.get(0)) + .itemOutputs(material.get(OrePrefixes.pipeMedium, 1)) + .duration( + material.getStats() + .getMass() * 6 + * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(extruderRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 6), ItemList.Shape_Extruder_Pipe_Large.get(0)) + .itemOutputs(material.get(OrePrefixes.pipeLarge, 1)) + .duration( + material.getStats() + .getMass() * 12 + * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(extruderRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 12), ItemList.Shape_Extruder_Pipe_Huge.get(0)) + .itemOutputs(material.get(OrePrefixes.pipeHuge, 1)) + .duration( + material.getStats() + .getMass() * 24 + * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(extruderRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Pipe_Tiny.get(0)) + .fluidInputs(material.getMolten(72)) + .itemOutputs(material.get(OrePrefixes.pipeTiny, 1)) + .duration( + material.getStats() + .getMass() * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(fluidSolidifierRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Pipe_Small.get(0)) + .fluidInputs(material.getMolten(144)) + .itemOutputs(material.get(OrePrefixes.pipeSmall, 1)) + .duration( + material.getStats() + .getMass() * 2 + * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(fluidSolidifierRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Pipe_Medium.get(0)) + .fluidInputs(material.getMolten(432)) + .itemOutputs(material.get(OrePrefixes.pipeMedium, 1)) + .duration( + material.getStats() + .getMass() * 6 + * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(fluidSolidifierRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Pipe_Large.get(0)) + .fluidInputs(material.getMolten(864)) + .itemOutputs(material.get(OrePrefixes.pipeLarge, 1)) + .duration( + material.getStats() + .getMass() * 12 + * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(fluidSolidifierRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Pipe_Huge.get(0)) + .fluidInputs(material.getMolten(1728)) + .itemOutputs(material.get(OrePrefixes.pipeHuge, 1)) + .duration( + material.getStats() + .getMass() * 24 + * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(fluidSolidifierRecipes); + } + + public static void registerWire(int ID, Werkstoff material, int aAmperage, int aVoltage, int aLoss, boolean cover) { + String unName = material.getDefaultName() + .replace(" ", "_") + .toLowerCase(); + String Name = material.getDefaultName(); + String aTextWire1 = "wire."; + String aTextCable1 = "cable."; + String aTextWire2 = " Wire"; + String aTextCable2 = " Cable"; + int aLossInsulated = aLoss / 4; + GT_OreDictUnificator.registerOre( + OrePrefixes.wireGt01, + material.getBridgeMaterial(), + new GT_MetaPipeEntity_Cable( + ID + 0, + aTextWire1 + unName + ".01", + "1x " + Name + aTextWire2, + 0.125F, + material.getBridgeMaterial(), + aLoss, + 1L * aAmperage, + aVoltage, + false, + true).getStackForm(1L)); + GT_OreDictUnificator.registerOre( + OrePrefixes.wireGt02, + material.getBridgeMaterial(), + new GT_MetaPipeEntity_Cable( + ID + 1, + aTextWire1 + unName + ".02", + "2x " + Name + aTextWire2, + 0.25F, + material.getBridgeMaterial(), + aLoss, + 2L * aAmperage, + aVoltage, + false, + true).getStackForm(1L)); + GT_OreDictUnificator.registerOre( + OrePrefixes.wireGt04, + material.getBridgeMaterial(), + new GT_MetaPipeEntity_Cable( + ID + 2, + aTextWire1 + unName + ".04", + "4x " + Name + aTextWire2, + 0.375F, + material.getBridgeMaterial(), + aLoss, + 4L * aAmperage, + aVoltage, + false, + true).getStackForm(1L)); + GT_OreDictUnificator.registerOre( + OrePrefixes.wireGt08, + material.getBridgeMaterial(), + new GT_MetaPipeEntity_Cable( + ID + 3, + aTextWire1 + unName + ".08", + "8x " + Name + aTextWire2, + 0.5F, + material.getBridgeMaterial(), + aLoss, + 8L * aAmperage, + aVoltage, + false, + true).getStackForm(1L)); + GT_OreDictUnificator.registerOre( + OrePrefixes.wireGt12, + material.getBridgeMaterial(), + new GT_MetaPipeEntity_Cable( + ID + 4, + aTextWire1 + unName + ".12", + "12x " + Name + aTextWire2, + 0.625F, + material.getBridgeMaterial(), + aLoss, + 12L * aAmperage, + aVoltage, + false, + true).getStackForm(1L)); + GT_OreDictUnificator.registerOre( + OrePrefixes.wireGt16, + material.getBridgeMaterial(), + new GT_MetaPipeEntity_Cable( + ID + 5, + aTextWire1 + unName + ".16", + "16x " + Name + aTextWire2, + 0.75F, + material.getBridgeMaterial(), + aLoss, + 16L * aAmperage, + aVoltage, + false, + true).getStackForm(1L)); + if (cover) { + GT_OreDictUnificator.registerOre( + OrePrefixes.cableGt01, + material.getBridgeMaterial(), + new GT_MetaPipeEntity_Cable( + ID + 6, + aTextCable1 + unName + ".01", + "1x " + Name + aTextCable2, + 0.25F, + material.getBridgeMaterial(), + aLossInsulated, + 1L * aAmperage, + aVoltage, + true, + false).getStackForm(1L)); + GT_OreDictUnificator.registerOre( + OrePrefixes.cableGt02, + material.getBridgeMaterial(), + new GT_MetaPipeEntity_Cable( + ID + 7, + aTextCable1 + unName + ".02", + "2x " + Name + aTextCable2, + 0.375F, + material.getBridgeMaterial(), + aLossInsulated, + 2L * aAmperage, + aVoltage, + true, + false).getStackForm(1L)); + GT_OreDictUnificator.registerOre( + OrePrefixes.cableGt04, + material.getBridgeMaterial(), + new GT_MetaPipeEntity_Cable( + ID + 8, + aTextCable1 + unName + ".04", + "4x " + Name + aTextCable2, + 0.5F, + material.getBridgeMaterial(), + aLossInsulated, + 4L * aAmperage, + aVoltage, + true, + false).getStackForm(1L)); + GT_OreDictUnificator.registerOre( + OrePrefixes.cableGt08, + material.getBridgeMaterial(), + new GT_MetaPipeEntity_Cable( + ID + 9, + aTextCable1 + unName + ".08", + "8x " + Name + aTextCable2, + 0.625F, + material.getBridgeMaterial(), + aLossInsulated, + 8L * aAmperage, + aVoltage, + true, + false).getStackForm(1L)); + GT_OreDictUnificator.registerOre( + OrePrefixes.cableGt12, + material.getBridgeMaterial(), + new GT_MetaPipeEntity_Cable( + ID + 10, + aTextCable1 + unName + ".12", + "12x " + Name + aTextCable2, + 0.75F, + material.getBridgeMaterial(), + aLossInsulated, + 12L * aAmperage, + aVoltage, + true, + false).getStackForm(1L)); + GT_OreDictUnificator.registerOre( + OrePrefixes.cableGt16, + material.getBridgeMaterial(), + new GT_MetaPipeEntity_Cable( + ID + 11, + aTextCable1 + unName + ".16", + "16x " + Name + aTextCable2, + 0.875F, + material.getBridgeMaterial(), + aLossInsulated, + 16L * aAmperage, + aVoltage, + true, + false).getStackForm(1L)); + } + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 1), GT_Utility.getIntegratedCircuit(1)) + .itemOutputs(material.get(OrePrefixes.wireGt01, 2)) + .duration(5 * SECONDS) + .eut(4) + .addTo(wiremillRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 1), GT_Utility.getIntegratedCircuit(2)) + .itemOutputs(material.get(OrePrefixes.wireGt02, 1)) + .duration(7 * SECONDS + 10 * TICKS) + .eut(4) + .addTo(wiremillRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 2), GT_Utility.getIntegratedCircuit(4)) + .itemOutputs(material.get(OrePrefixes.wireGt04, 1)) + .duration(10 * SECONDS) + .eut(4) + .addTo(wiremillRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 4), GT_Utility.getIntegratedCircuit(8)) + .itemOutputs(material.get(OrePrefixes.wireGt08, 1)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(4) + .addTo(wiremillRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 6), GT_Utility.getIntegratedCircuit(12)) + .itemOutputs(material.get(OrePrefixes.wireGt12, 1)) + .duration(15 * SECONDS) + .eut(4) + .addTo(wiremillRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 8), GT_Utility.getIntegratedCircuit(16)) + .itemOutputs(material.get(OrePrefixes.wireGt16, 1)) + .duration(17 * SECONDS + 10 * TICKS) + .eut(4) + .addTo(wiremillRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick, 1), GT_Utility.getIntegratedCircuit(1)) + .itemOutputs(material.get(OrePrefixes.wireGt01, 1)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(4) + .addTo(wiremillRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick, 2), GT_Utility.getIntegratedCircuit(2)) + .itemOutputs(material.get(OrePrefixes.wireGt02, 1)) + .duration(5 * SECONDS) + .eut(4) + .addTo(wiremillRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick, 4), GT_Utility.getIntegratedCircuit(4)) + .itemOutputs(material.get(OrePrefixes.wireGt04, 1)) + .duration(7 * SECONDS + 10 * TICKS) + .eut(4) + .addTo(wiremillRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick, 8), GT_Utility.getIntegratedCircuit(8)) + .itemOutputs(material.get(OrePrefixes.wireGt08, 1)) + .duration(10 * SECONDS) + .eut(4) + .addTo(wiremillRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick, 12), GT_Utility.getIntegratedCircuit(12)) + .itemOutputs(material.get(OrePrefixes.wireGt12, 1)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(4) + .addTo(wiremillRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick, 16), GT_Utility.getIntegratedCircuit(16)) + .itemOutputs(material.get(OrePrefixes.wireGt16, 1)) + .duration(15 * SECONDS) + .eut(4) + .addTo(wiremillRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 1), GT_Utility.getIntegratedCircuit(3)) + .itemOutputs(material.get(OrePrefixes.wireFine, 8)) + .duration(5 * SECONDS) + .eut(4) + .addTo(wiremillRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick, 1), GT_Utility.getIntegratedCircuit(3)) + .itemOutputs(material.get(OrePrefixes.wireFine, 4)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(4) + .addTo(wiremillRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.wireGt01, 1), GT_Utility.getIntegratedCircuit(1)) + .itemOutputs(material.get(OrePrefixes.wireFine, 4)) + .duration(10 * SECONDS) + .eut(8) + .addTo(wiremillRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 1), ItemList.Shape_Extruder_Wire.get(0)) + .itemOutputs(material.get(OrePrefixes.wireGt01, 2)) + .duration( + material.getStats() + .getMass() * 8 + * TICKS) + .eut(TierEU.RECIPE_HV) + .addTo(extruderRecipes); + } +} diff --git a/goodgen/src/main/java/goodgenerator/util/DescTextLocalization.java b/goodgen/src/main/java/goodgenerator/util/DescTextLocalization.java new file mode 100644 index 0000000000..3470737d6b --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/util/DescTextLocalization.java @@ -0,0 +1,22 @@ +package goodgenerator.util; + +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; + +public class DescTextLocalization { + + public static final String BLUE_PRINT_INFO = "Follow the" + EnumChatFormatting.BLUE + + " Structure" + + EnumChatFormatting.DARK_BLUE + + "Lib" + + EnumChatFormatting.GRAY + + " hologram projector to build the main structure."; + + public static String[] addText(String preFix, int length) { + String[] text = new String[length]; + for (int i = 0; i < length; i++) { + text[i] = StatCollector.translateToLocal(preFix + "." + i); + } + return text; + } +} diff --git a/goodgen/src/main/java/goodgenerator/util/ItemRefer.java b/goodgen/src/main/java/goodgenerator/util/ItemRefer.java new file mode 100644 index 0000000000..400199ef03 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/util/ItemRefer.java @@ -0,0 +1,221 @@ +package goodgenerator.util; + +import static goodgenerator.loader.FuelRodLoader.*; +import static goodgenerator.loader.Loaders.*; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import gregtech.api.util.GT_Utility; +import ic2.core.Ic2Items; + +public final class ItemRefer { + + public static ItemRefer NULL = getItemStack(_null_); + + public static ItemRefer Radiation_Protection_Plate = getItemStack(radiationProtectionPlate); + public static ItemRefer Wrapped_Uranium_Ingot = getItemStack(wrappedUraniumIngot); + public static ItemRefer High_Density_Uranium_Nugget = getItemStack(highDensityUraniumNugget); + public static ItemRefer High_Density_Uranium = getItemStack(highDensityUranium); + public static ItemRefer Wrapped_Thorium_Ingot = getItemStack(wrappedThoriumIngot); + public static ItemRefer High_Density_Thorium_Nugget = getItemStack(highDensityThoriumNugget); + public static ItemRefer High_Density_Thorium = getItemStack(highDensityThorium); + public static ItemRefer Wrapped_Plutonium_Ingot = getItemStack(wrappedPlutoniumIngot); + public static ItemRefer High_Density_Plutonium_Nugget = getItemStack(highDensityPlutoniumNugget); + public static ItemRefer High_Density_Plutonium = getItemStack(highDensityPlutonium); + public static ItemRefer Raw_Atomic_Separation_Catalyst = getItemStack(rawAtomicSeparationCatalyst); + public static ItemRefer Advanced_Radiation_Protection_Plate = getItemStack(advancedRadiationProtectionPlate); + public static ItemRefer Aluminum_Nitride_Dust = getItemStack(aluminumNitride); + public static ItemRefer Special_Ceramics_Dust = getItemStack(specialCeramics); + public static ItemRefer Special_Ceramics_Plate = getItemStack(specialCeramicsPlate); + public static ItemRefer Radioactive_Waste = getItemStack(radioactiveWaste); + public static ItemRefer Plastic_Case = getItemStack(plasticCase); + public static ItemRefer Quartz_Wafer = getItemStack(quartzWafer); + public static ItemRefer Micro_Heater = getItemStack(microHeater); + public static ItemRefer Quartz_Crystal_Resonator = getItemStack(quartzCrystalResonator); + public static ItemRefer Inverter = getItemStack(inverter); + public static ItemRefer Neutron_Source = getItemStack(neutronSource); + public static ItemRefer Naquadah_Mass = getItemStack(naquadahMass); + public static ItemRefer Enriched_Naquadah_Mass = getItemStack(enrichedNaquadahMass); + public static ItemRefer Naquadria_Mass = getItemStack(naquadriaMass); + public static ItemRefer Advanced_Fuel_Rod = getItemStack(advancedFuelRod); + public static ItemRefer Fuel_Rod_U_Depleted_1 = getItemStack(rodCompressedUraniumDepleted); + public static ItemRefer Fuel_Rod_U_Depleted_2 = getItemStack(rodCompressedUraniumDepleted_2); + public static ItemRefer Fuel_Rod_U_Depleted_4 = getItemStack(rodCompressedUraniumDepleted_4); + public static ItemRefer Fuel_Rod_U_1 = getItemStack(rodCompressedUranium); + public static ItemRefer Fuel_Rod_U_2 = getItemStack(rodCompressedUranium_2); + public static ItemRefer Fuel_Rod_U_4 = getItemStack(rodCompressedUranium_4); + public static ItemRefer Fuel_Rod_Pu_Depleted_1 = getItemStack(rodCompressedPlutoniumDepleted); + public static ItemRefer Fuel_Rod_Pu_Depleted_2 = getItemStack(rodCompressedPlutoniumDepleted_2); + public static ItemRefer Fuel_Rod_Pu_Depleted_4 = getItemStack(rodCompressedPlutoniumDepleted_4); + public static ItemRefer Fuel_Rod_Pu_1 = getItemStack(rodCompressedPlutonium); + public static ItemRefer Fuel_Rod_Pu_2 = getItemStack(rodCompressedPlutonium_2); + public static ItemRefer Fuel_Rod_Pu_4 = getItemStack(rodCompressedPlutonium_4); + public static ItemRefer Fuel_Rod_LU_Depleted_1 = getItemStack(rodLiquidUraniumDepleted); + public static ItemRefer Fuel_Rod_LU_Depleted_2 = getItemStack(rodLiquidUraniumDepleted_2); + public static ItemRefer Fuel_Rod_LU_Depleted_4 = getItemStack(rodLiquidUraniumDepleted_4); + public static ItemRefer Fuel_Rod_LU_1 = getItemStack(rodLiquidUranium); + public static ItemRefer Fuel_Rod_LU_2 = getItemStack(rodLiquidUranium_2); + public static ItemRefer Fuel_Rod_LU_4 = getItemStack(rodLiquidUranium_4); + public static ItemRefer Fuel_Rod_LPu_Depleted_1 = getItemStack(rodLiquidPlutoniumDepleted); + public static ItemRefer Fuel_Rod_LPu_Depleted_2 = getItemStack(rodLiquidPlutoniumDepleted_2); + public static ItemRefer Fuel_Rod_LPu_Depleted_4 = getItemStack(rodLiquidPlutoniumDepleted_4); + public static ItemRefer Fuel_Rod_LPu_1 = getItemStack(rodLiquidPlutonium); + public static ItemRefer Fuel_Rod_LPu_2 = getItemStack(rodLiquidPlutonium_2); + public static ItemRefer Fuel_Rod_LPu_4 = getItemStack(rodLiquidPlutonium_4); + public static ItemRefer Fluid_Storage_Core_T1 = getItemStack(fluidCore, 0); + public static ItemRefer Fluid_Storage_Core_T2 = getItemStack(fluidCore, 1); + public static ItemRefer Fluid_Storage_Core_T3 = getItemStack(fluidCore, 2); + public static ItemRefer Fluid_Storage_Core_T4 = getItemStack(fluidCore, 3); + public static ItemRefer Fluid_Storage_Core_T5 = getItemStack(fluidCore, 4); + public static ItemRefer Fluid_Storage_Core_T6 = getItemStack(fluidCore, 5); + public static ItemRefer Fluid_Storage_Core_T7 = getItemStack(fluidCore, 6); + public static ItemRefer Fluid_Storage_Core_T8 = getItemStack(fluidCore, 7); + public static ItemRefer Fluid_Storage_Core_T9 = getItemStack(fluidCore, 8); + public static ItemRefer Fluid_Storage_Core_T10 = getItemStack(fluidCore, 9); + public static ItemRefer Essentia_Upgrade_Empty = getItemStack(upgradeEssentia, 0); + public static ItemRefer Essentia_Upgrade_Air = getItemStack(upgradeEssentia, 1); + public static ItemRefer Essentia_Upgrade_Thermal = getItemStack(upgradeEssentia, 2); + public static ItemRefer Essentia_Upgrade_Unstable = getItemStack(upgradeEssentia, 3); + public static ItemRefer Essentia_Upgrade_Victus = getItemStack(upgradeEssentia, 4); + public static ItemRefer Essentia_Upgrade_Tainted = getItemStack(upgradeEssentia, 5); + public static ItemRefer Essentia_Upgrade_Mechanics = getItemStack(upgradeEssentia, 6); + public static ItemRefer Essentia_Upgrade_Spirit = getItemStack(upgradeEssentia, 7); + public static ItemRefer Essentia_Upgrade_Radiation = getItemStack(upgradeEssentia, 8); + public static ItemRefer Essentia_Upgrade_Electric = getItemStack(upgradeEssentia, 9); + public static ItemRefer High_Energy_Mixture = getItemStack(highEnergyMixture); + public static ItemRefer Salty_Root = getItemStack(saltyRoot); + public static ItemRefer HiC_T1 = getItemStack(huiCircuit, 0); + public static ItemRefer HiC_T2 = getItemStack(huiCircuit, 1); + public static ItemRefer HiC_T3 = getItemStack(huiCircuit, 2); + public static ItemRefer HiC_T4 = getItemStack(huiCircuit, 3); + public static ItemRefer HiC_T5 = getItemStack(huiCircuit, 4); + public static ItemRefer IC2_Ir_Plate = getItemStack(Ic2Items.iridiumPlate); + public static ItemRefer IC2_Glass = getItemStack(Ic2Items.reinforcedGlass); + + public static ItemRefer Field_Restriction_Casing = getItemStack(MAR_Casing); + public static ItemRefer Naquadah_Fuel_Refinery_Casing = getItemStack(FRF_Casings); + public static ItemRefer Field_Restriction_Coil_T1 = getItemStack(FRF_Coil_1); + public static ItemRefer Field_Restriction_Coil_T2 = getItemStack(FRF_Coil_2); + public static ItemRefer Field_Restriction_Coil_T3 = getItemStack(FRF_Coil_3); + public static ItemRefer Field_Restriction_Coil_T4 = getItemStack(FRF_Coil_4); + public static ItemRefer Radiation_Proof_Steel_Frame_Box = getItemStack(radiationProtectionSteelFrame); + public static ItemRefer Field_Restriction_Glass = getItemStack(fieldRestrictingGlass); + public static ItemRefer Raw_Cylinder = getItemStack(rawCylinder); + public static ItemRefer Titanium_Plated_Cylinder = getItemStack(titaniumPlatedCylinder); + public static ItemRefer Magic_Casing = getItemStack(magicCasing); + public static ItemRefer Speeding_Pipe = getItemStack(speedingPipe); + public static ItemRefer Essentia_Cell_T1 = getItemStack(essentiaCell, 0); + public static ItemRefer Essentia_Cell_T2 = getItemStack(essentiaCell, 1); + public static ItemRefer Essentia_Cell_T3 = getItemStack(essentiaCell, 2); + public static ItemRefer Essentia_Cell_T4 = getItemStack(essentiaCell, 3); + public static ItemRefer Essentia_Hatch = getItemStack(essentiaHatch); + public static ItemRefer YOTTank_Casing = getItemStack(yottaFluidTankCasing); + public static ItemRefer YOTTank_Cell_T1 = getItemStack(yottaFluidTankCell, 0); + public static ItemRefer YOTTank_Cell_T2 = getItemStack(yottaFluidTankCell, 1); + public static ItemRefer YOTTank_Cell_T3 = getItemStack(yottaFluidTankCell, 2); + public static ItemRefer YOTTank_Cell_T4 = getItemStack(yottaFluidTankCell, 3); + public static ItemRefer YOTTank_Cell_T5 = getItemStack(yottaFluidTankCell, 4); + public static ItemRefer YOTTank_Cell_T6 = getItemStack(yottaFluidTankCell, 5); + public static ItemRefer YOTTank_Cell_T7 = getItemStack(yottaFluidTankCell, 6); + public static ItemRefer YOTTank_Cell_T8 = getItemStack(yottaFluidTankCell, 7); + public static ItemRefer YOTTank_Cell_T9 = getItemStack(yottaFluidTankCell, 8); + public static ItemRefer YOTTank_Cell_T10 = getItemStack(yottaFluidTankCell, 9); + public static ItemRefer SC_Turbine_Casing = getItemStack(supercriticalFluidTurbineCasing); + public static ItemRefer Pressure_Resistant_Wall = getItemStack(pressureResistantWalls); + public static ItemRefer Precise_Electronic_Unit_T1 = getItemStack(preciseUnitCasing, 0); + public static ItemRefer Precise_Electronic_Unit_T2 = getItemStack(preciseUnitCasing, 1); + public static ItemRefer Precise_Electronic_Unit_T3 = getItemStack(preciseUnitCasing, 2); + public static ItemRefer Compact_Fusion_Coil_T0 = getItemStack(compactFusionCoil, 0); + public static ItemRefer Compact_Fusion_Coil_T1 = getItemStack(compactFusionCoil, 1); + public static ItemRefer Compact_Fusion_Coil_T2 = getItemStack(compactFusionCoil, 2); + public static ItemRefer Compact_Fusion_Coil_T3 = getItemStack(compactFusionCoil, 3); + public static ItemRefer Compact_Fusion_Coil_T4 = getItemStack(compactFusionCoil, 4); + public static ItemRefer Essentia_Filter_Casing = getItemStack(essentiaFilterCasing); + public static ItemRefer Essentia_Output_Hatch = getItemStack(essentiaOutputHatch); + public static ItemRefer Essentia_Output_Hatch_ME = getItemStack(essentiaOutputHatch_ME); + + public static ItemRefer Large_Naquadah_Reactor = getItemStack(MAR); + public static ItemRefer Naquadah_Fuel_Refinery = getItemStack(FRF); + public static ItemRefer Universal_Chemical_Fuel_Engine = getItemStack(UCFE); + public static ItemRefer Large_Essentia_Generator = getItemStack(LEG); + public static ItemRefer YOTTank = getItemStack(YFT); + public static ItemRefer Combustion_Generator_EV = getItemStack(Generator_Diesel[0]); + public static ItemRefer Combustion_Generator_IV = getItemStack(Generator_Diesel[1]); + public static ItemRefer SC_Fluid_Turbine = getItemStack(SCTurbine); + public static ItemRefer Extreme_Heat_Exchanger = getItemStack(XHE); + public static ItemRefer Precise_Assembler = getItemStack(PA); + public static ItemRefer Compact_Fusion_MK1 = getItemStack(LFC[0]); + public static ItemRefer Compact_Fusion_MK2 = getItemStack(LFC[1]); + public static ItemRefer Compact_Fusion_MK3 = getItemStack(LFC[2]); + public static ItemRefer Compact_Fusion_MK4 = getItemStack(LFC[3]); + public static ItemRefer Compact_Fusion_MK5 = getItemStack(LFC[4]); + public static ItemRefer Large_Essentia_Smeltery = getItemStack(LES); + public static ItemRefer Coolant_Tower = getItemStack(CT); + public static ItemRefer Component_Assembly_Line = getItemStack(CompAssline); + + public static ItemRefer Compassline_Casing_LV = getItemStack(componentAssemblylineCasing, 0); + public static ItemRefer Compassline_Casing_MV = getItemStack(componentAssemblylineCasing, 1); + public static ItemRefer Compassline_Casing_HV = getItemStack(componentAssemblylineCasing, 2); + public static ItemRefer Compassline_Casing_EV = getItemStack(componentAssemblylineCasing, 3); + public static ItemRefer Compassline_Casing_IV = getItemStack(componentAssemblylineCasing, 4); + public static ItemRefer Compassline_Casing_LuV = getItemStack(componentAssemblylineCasing, 5); + public static ItemRefer Compassline_Casing_ZPM = getItemStack(componentAssemblylineCasing, 6); + public static ItemRefer Compassline_Casing_UV = getItemStack(componentAssemblylineCasing, 7); + public static ItemRefer Compassline_Casing_UHV = getItemStack(componentAssemblylineCasing, 8); + public static ItemRefer Compassline_Casing_UEV = getItemStack(componentAssemblylineCasing, 9); + public static ItemRefer Compassline_Casing_UIV = getItemStack(componentAssemblylineCasing, 10); + public static ItemRefer Compassline_Casing_UMV = getItemStack(componentAssemblylineCasing, 11); + public static ItemRefer Compassline_Casing_UXV = getItemStack(componentAssemblylineCasing, 12); + public static ItemRefer Compassline_Casing_MAX = getItemStack(componentAssemblylineCasing, 13); + + private Item mItem = null; + private Block mBlock = null; + private ItemStack mItemStack = null; + private int mMeta = 0; + + private static ItemRefer getItemStack(ItemStack itemStack) { + if (itemStack == null) return NULL; + return new ItemRefer(itemStack); + } + + private static ItemRefer getItemStack(Item item) { + return getItemStack(item, 0); + } + + private static ItemRefer getItemStack(Item item, int meta) { + if (item == null) return NULL; + return new ItemRefer(item, meta); + } + + private static ItemRefer getItemStack(Block block) { + return getItemStack(block, 0); + } + + private static ItemRefer getItemStack(Block block, int meta) { + if (block == null) return NULL; + return new ItemRefer(block, meta); + } + + private ItemRefer(Item item, int meta) { + mItem = item; + mMeta = meta; + } + + private ItemRefer(Block block, int meta) { + mBlock = block; + mMeta = meta; + } + + private ItemRefer(ItemStack itemStack) { + mItemStack = itemStack; + } + + public ItemStack get(int amount) { + if (mItem != null) return new ItemStack(mItem, amount, mMeta); + if (mBlock != null) return new ItemStack(mBlock, amount, mMeta); + if (mItemStack != null) return GT_Utility.copyAmount(amount, mItemStack); + return new ItemStack(_null_, amount, 0); + } +} diff --git a/goodgen/src/main/java/goodgenerator/util/Log.java b/goodgen/src/main/java/goodgenerator/util/Log.java new file mode 100644 index 0000000000..4cf9e40484 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/util/Log.java @@ -0,0 +1,9 @@ +package goodgenerator.util; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class Log { + + public static final Logger LOGGER = LogManager.getLogger("GoodGenerator"); +} diff --git a/goodgen/src/main/java/goodgenerator/util/MaterialFix.java b/goodgen/src/main/java/goodgenerator/util/MaterialFix.java new file mode 100644 index 0000000000..32827b18b2 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/util/MaterialFix.java @@ -0,0 +1,393 @@ +package goodgenerator.util; + +import static gregtech.api.recipe.RecipeMaps.benderRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; +import static gregtech.api.recipe.RecipeMaps.hammerRecipes; +import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GT_RecipeBuilder.TICKS; + +import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; + +import gregtech.api.enums.GT_Values; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GT_Utility; + +public class MaterialFix { + + public static void MaterialFluidExtractionFix(Werkstoff material) { + if (material.hasItemType(OrePrefixes.ingot)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot)) + .fluidOutputs(material.getMolten(144)) + .duration(1 * SECONDS + 12 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Ingot.get(0)) + .fluidInputs(material.getMolten(144)) + .itemOutputs(material.get(OrePrefixes.ingot)) + .duration(1 * SECONDS + 12 * TICKS) + .eut(TierEU.RECIPE_MV / 2) + .addTo(fluidSolidifierRecipes); + } + if (material.hasItemType(OrePrefixes.plate)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.plate)) + .fluidOutputs(material.getMolten(144)) + .duration(1 * SECONDS + 12 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Plate.get(0)) + .fluidInputs(material.getMolten(144)) + .itemOutputs(material.get(OrePrefixes.plate)) + .duration(1 * SECONDS + 12 * TICKS) + .eut(TierEU.RECIPE_MV / 2) + .addTo(fluidSolidifierRecipes); + } + if (material.hasItemType(OrePrefixes.gearGtSmall)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.gearGtSmall)) + .fluidOutputs(material.getMolten(144)) + .duration(1 * SECONDS + 12 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.stickLong)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stickLong)) + .fluidOutputs(material.getMolten(144)) + .duration(1 * SECONDS + 12 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.spring)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.spring)) + .fluidOutputs(material.getMolten(144)) + .duration(1 * SECONDS + 12 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.stick)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick)) + .fluidOutputs(material.getMolten(72)) + .duration(16 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.itemCasing)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.itemCasing)) + .fluidOutputs(material.getMolten(72)) + .duration(16 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.wireGt01)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.wireGt01)) + .fluidOutputs(material.getMolten(72)) + .duration(16 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.cableGt01)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.cableGt01)) + .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Ash, 2)) + .fluidOutputs(material.getMolten(72)) + .duration(16 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.foil)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.foil)) + .fluidOutputs(material.getMolten(36)) + .duration(8 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.springSmall)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.springSmall)) + .fluidOutputs(material.getMolten(36)) + .duration(8 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.ring)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ring)) + .fluidOutputs(material.getMolten(36)) + .duration(8 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.bolt)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.bolt)) + .fluidOutputs(material.getMolten(18)) + .duration(4 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.wireFine)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.wireFine)) + .fluidOutputs(material.getMolten(18)) + .duration(4 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.round)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.round)) + .fluidOutputs(material.getMolten(16)) + .duration(4 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.screw)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.screw)) + .fluidOutputs(material.getMolten(16)) + .duration(4 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.nugget)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.nugget)) + .fluidOutputs(material.getMolten(16)) + .duration(4 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.rotor)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.rotor)) + .fluidOutputs(material.getMolten(612)) + .duration(136 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + if (material.hasItemType(OrePrefixes.gearGt)) { + GT_Values.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.gearGt)) + .fluidOutputs(material.getMolten(576)) + .duration(128 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + } + + public static void addRecipeForMultiItems() { + for (Werkstoff tMaterial : Werkstoff.werkstoffHashSet) { + if (tMaterial == null) continue; + if (tMaterial.hasItemType(OrePrefixes.plateDouble) && tMaterial.hasItemType(OrePrefixes.ingotDouble)) { + GT_Values.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.plate, 2), GT_Utility.getIntegratedCircuit(2)) + .itemOutputs(tMaterial.get(OrePrefixes.plateDouble, 1)) + .duration( + Math.max( + tMaterial.getStats() + .getMass() * 2, + 1L) * TICKS) + .eut(TierEU.RECIPE_MV / 2) + .addTo(benderRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.ingotDouble, 1), GT_Utility.getIntegratedCircuit(1)) + .itemOutputs(tMaterial.get(OrePrefixes.plateDouble, 1)) + .duration( + Math.max( + tMaterial.getStats() + .getMass(), + 1L) * TICKS) + .eut(TierEU.RECIPE_MV / 2) + .addTo(benderRecipes); + GT_ModHandler.addCraftingRecipe( + tMaterial.get(OrePrefixes.plateDouble, 1), + new Object[] { "P", "P", "h", 'P', tMaterial.get(OrePrefixes.plate, 1) }); + GT_ModHandler.addCraftingRecipe( + tMaterial.get(OrePrefixes.ingotDouble, 1), + new Object[] { "P", "P", "h", 'P', tMaterial.get(OrePrefixes.ingot, 1) }); + } + if (tMaterial.hasItemType(OrePrefixes.plateTriple) && tMaterial.hasItemType(OrePrefixes.ingotTriple)) { + GT_Values.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.plate, 3), GT_Utility.getIntegratedCircuit(3)) + .itemOutputs(tMaterial.get(OrePrefixes.plateTriple, 1)) + .duration( + Math.max( + tMaterial.getStats() + .getMass() * 3, + 1L) * TICKS) + .eut(TierEU.RECIPE_MV / 2) + .addTo(benderRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.ingot, 3), GT_Utility.getIntegratedCircuit(3)) + .itemOutputs(tMaterial.get(OrePrefixes.plateTriple, 1)) + .duration( + Math.max( + tMaterial.getStats() + .getMass() * 3, + 1L) * TICKS) + .eut(TierEU.RECIPE_MV / 2) + .addTo(benderRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.ingotTriple, 1), GT_Utility.getIntegratedCircuit(1)) + .itemOutputs(tMaterial.get(OrePrefixes.plateTriple, 1)) + .duration( + Math.max( + tMaterial.getStats() + .getMass(), + 1L) * TICKS) + .eut(TierEU.RECIPE_MV / 2) + .addTo(benderRecipes); + GT_ModHandler.addCraftingRecipe( + tMaterial.get(OrePrefixes.plateTriple, 1), + new Object[] { "B", "P", "h", 'P', tMaterial.get(OrePrefixes.plate, 1), 'B', + tMaterial.get(OrePrefixes.plateDouble, 1) }); + GT_ModHandler.addCraftingRecipe( + tMaterial.get(OrePrefixes.ingotTriple, 1), + new Object[] { "B", "P", "h", 'P', tMaterial.get(OrePrefixes.ingot, 1), 'B', + tMaterial.get(OrePrefixes.ingotDouble, 1) }); + } + if (tMaterial.hasItemType(OrePrefixes.plateDense)) { + GT_Values.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.plate, 9), GT_Utility.getIntegratedCircuit(9)) + .itemOutputs(tMaterial.get(OrePrefixes.plateDense, 1)) + .duration( + Math.max( + tMaterial.getStats() + .getMass() * 9, + 1L) * TICKS) + .eut(TierEU.RECIPE_MV / 2) + .addTo(benderRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.ingot, 9), GT_Utility.getIntegratedCircuit(9)) + .itemOutputs(tMaterial.get(OrePrefixes.plateDense, 1)) + .duration( + Math.max( + tMaterial.getStats() + .getMass() * 9, + 1L) * TICKS) + .eut(TierEU.RECIPE_MV / 2) + .addTo(benderRecipes); + + if (tMaterial.hasItemType(OrePrefixes.plateTriple) && tMaterial.hasItemType(OrePrefixes.ingotTriple)) { + GT_Values.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.plateTriple, 3), GT_Utility.getIntegratedCircuit(3)) + .itemOutputs(tMaterial.get(OrePrefixes.plateDense, 1)) + .duration( + Math.max( + tMaterial.getStats() + .getMass() * 3, + 1L) * TICKS) + .eut(TierEU.RECIPE_MV / 2) + .addTo(benderRecipes); + GT_Values.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.ingotTriple, 3), GT_Utility.getIntegratedCircuit(3)) + .itemOutputs(tMaterial.get(OrePrefixes.plateDense, 1)) + .duration( + Math.max( + tMaterial.getStats() + .getMass() * 3, + 1L) * TICKS) + .eut(TierEU.RECIPE_MV / 2) + .addTo(benderRecipes); + } + } + if (tMaterial.hasItemType(OrePrefixes.stick)) { + if (tMaterial.hasItemType(OrePrefixes.cellMolten)) { + GT_Values.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Rod.get(0)) + .fluidInputs(tMaterial.getMolten(72)) + .itemOutputs(tMaterial.get(OrePrefixes.stick, 1)) + .duration( + Math.max( + tMaterial.getStats() + .getMass() >> 1, + 1L) * TICKS) + .eut(TierEU.RECIPE_HV) + .addTo(fluidSolidifierRecipes); + } + } + if (tMaterial.hasItemType(OrePrefixes.stickLong)) { + if (tMaterial.hasItemType(OrePrefixes.cellMolten)) { + GT_Values.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Rod_Long.get(0)) + .fluidInputs(tMaterial.getMolten(144)) + .itemOutputs(tMaterial.get(OrePrefixes.stickLong, 1)) + .duration( + Math.max( + tMaterial.getStats() + .getMass(), + 1L) * TICKS) + .eut(TierEU.RECIPE_HV) + .addTo(fluidSolidifierRecipes); + } + if (tMaterial.hasItemType(OrePrefixes.stick)) { + GT_ModHandler.addCraftingRecipe( + tMaterial.get(OrePrefixes.stickLong, 1), + new Object[] { "PhP", 'P', tMaterial.get(OrePrefixes.stick, 1) }); + GT_Values.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.stick, 2)) + .itemOutputs(tMaterial.get(OrePrefixes.stickLong, 1)) + .duration( + Math.max( + tMaterial.getStats() + .getMass(), + 1L) * TICKS) + .eut(TierEU.RECIPE_LV / 2) + .addTo(hammerRecipes); + } + } + if (tMaterial.hasItemType(OrePrefixes.spring)) { + GT_ModHandler.addCraftingRecipe( + tMaterial.get(OrePrefixes.spring, 1), + new Object[] { " s ", "fPx", " P ", 'P', tMaterial.get(OrePrefixes.stickLong, 1) }); + GT_Values.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.stickLong, 1), GT_Utility.getIntegratedCircuit(1)) + .itemOutputs(tMaterial.get(OrePrefixes.spring, 1)) + .duration( + Math.max( + tMaterial.getStats() + .getMass() * 2, + 1L) * TICKS) + .eut(TierEU.RECIPE_LV / 2) + .addTo(benderRecipes); + } + if (tMaterial.hasItemType(OrePrefixes.springSmall)) { + GT_ModHandler.addCraftingRecipe( + tMaterial.get(OrePrefixes.springSmall, 1), + new Object[] { " s ", "fPx", 'P', tMaterial.get(OrePrefixes.stick, 1) }); + GT_Values.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.stick, 1), GT_Utility.getIntegratedCircuit(1)) + .itemOutputs(tMaterial.get(OrePrefixes.springSmall, 1)) + .duration( + Math.max( + tMaterial.getStats() + .getMass(), + 1L) * TICKS) + .eut(TierEU.RECIPE_LV / 2) + .addTo(benderRecipes); + } + } + Materials tUHV = Materials.Longasssuperconductornameforuhvwire; + GT_Values.RA.stdBuilder() + .itemInputs(GT_OreDictUnificator.get(OrePrefixes.stick, tUHV, 2)) + .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stickLong, tUHV, 1)) + .duration(Math.max(tUHV.getMass(), 1L) * TICKS) + .eut(TierEU.RECIPE_LV / 2) + .addTo(hammerRecipes); + } +} diff --git a/goodgen/src/main/java/goodgenerator/util/MyRecipeAdder.java b/goodgen/src/main/java/goodgenerator/util/MyRecipeAdder.java new file mode 100644 index 0000000000..6cc0eb585c --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/util/MyRecipeAdder.java @@ -0,0 +1,72 @@ +package goodgenerator.util; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import goodgenerator.api.recipe.ExtremeHeatExchangerRecipe; +import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; + +public class MyRecipeAdder { + + public static final MyRecipeAdder instance = new MyRecipeAdder(); + + public void addLiquidMentalFuel(FluidStack input, FluidStack output, int EUt, int ticks) { + GoodGeneratorRecipeMaps.naquadahReactorFuels + .addRecipe(true, null, null, null, new FluidStack[] { input }, new FluidStack[] { output }, ticks, 0, EUt); + } + + public void addNaquadahFuelRefineRecipe(FluidStack[] input1, ItemStack[] input2, FluidStack output, int EUt, + int ticks, int tier) { + GoodGeneratorRecipeMaps.naquadahFuelRefineFactoryRecipes + .addRecipe(false, input2, null, null, input1, new FluidStack[] { output }, ticks, EUt, tier); + } + + public void addNeutronActivatorRecipe(FluidStack[] input1, ItemStack[] input2, FluidStack[] output1, + ItemStack[] output2, int ticks, int maxNKE, int minNKE) { + if (maxNKE <= 0) maxNKE = 1; + if (maxNKE >= 1100) maxNKE = 1100; + if (minNKE < 0) minNKE = 0; + if (minNKE >= maxNKE) minNKE = maxNKE - 1; + GoodGeneratorRecipeMaps.neutronActivatorRecipes + .addRecipe(false, input2, output2, null, input1, output1, ticks, 0, maxNKE * 10000 + minNKE); + } + + public void addExtremeHeatExchangerRecipe(FluidStack HotFluid, FluidStack ColdFluid, FluidStack WorkFluid, + FluidStack HeatedWorkFluid, FluidStack OverHeatedWorkFluid, int Threshold) { + GoodGeneratorRecipeMaps.extremeHeatExchangerFuels.addRecipe( + new ExtremeHeatExchangerRecipe( + new FluidStack[] { HotFluid, WorkFluid }, + new FluidStack[] { HeatedWorkFluid, OverHeatedWorkFluid, ColdFluid }, + Threshold)); + } + + public void addPreciseAssemblerRecipe(ItemStack[] aItemInputs, FluidStack[] aFluidInputs, ItemStack aOutput, + int aEUt, int aDuration, int aTier) { + if (aOutput == null) return; + GoodGeneratorRecipeMaps.preciseAssemblerRecipes.addRecipe( + false, + aItemInputs, + new ItemStack[] { aOutput }, + null, + null, + aFluidInputs, + null, + aDuration, + aEUt, + aTier); + } + + public void addComponentAssemblyLineRecipe(ItemStack[] ItemInputArray, FluidStack[] FluidInputArray, + ItemStack OutputItem, int aDuration, int aEUt, int casingLevel) { + GoodGeneratorRecipeMaps.componentAssemblyLineRecipes.addRecipe( + false, + ItemInputArray, + new ItemStack[] { OutputItem }, + null, + FluidInputArray, + null, + aDuration, + aEUt, + casingLevel); + } +} diff --git a/goodgen/src/main/java/goodgenerator/util/StackUtils.java b/goodgen/src/main/java/goodgenerator/util/StackUtils.java new file mode 100644 index 0000000000..2784828117 --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/util/StackUtils.java @@ -0,0 +1,143 @@ +package goodgenerator.util; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import appeng.api.AEApi; +import appeng.api.storage.data.IAEFluidStack; +import goodgenerator.items.MyMaterial; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.util.GT_Utility; + +public class StackUtils { + + /** + * Multiplies one ItemStack by a multiplier, and splits it into as many full stacks as it needs to. + * + * @param stack The ItemStack you want to multiply + * @param multiplier The number the stack is multiplied by + * @return A List of stacks that, in total, are the same as the input ItemStack after it has been multiplied. + */ + public static List<ItemStack> multiplyAndSplitIntoStacks(ItemStack stack, int multiplier) { + int totalItems = stack.stackSize * multiplier; + ArrayList<ItemStack> stacks = new ArrayList<>(); + if (totalItems >= 64) { + for (int i = 0; i < totalItems / 64; i++) { + stacks.add(GT_Utility.copyAmount(64, stack)); + } + } + if (totalItems % 64 > 0) { + stacks.add(GT_Utility.copyAmount(totalItems % 64, stack)); + } + return stacks; + } + + /** + * Merges the ItemStacks in the array into full stacks. + */ + public static ArrayList<ItemStack> mergeStacks(List<ItemStack> stacks) { + ArrayList<ItemStack> output = new ArrayList<>(); + for (int index = 0; index < stacks.size(); index++) { + ItemStack i = stacks.get(index); + int newSize = i.stackSize; + for (int j = index + 1; j < stacks.size(); j++) { + ItemStack is2 = stacks.get(j); + if (GT_Utility.areStacksEqual(i, is2)) { + newSize += is2.stackSize; + stacks.remove(j); + j--; + } + } + output.add(GT_Utility.copyAmountUnsafe(newSize, i)); + } + return output; + } + + /** + * Turns the {@code items} List into a {@code HashMap} containing each unique {@code ItemStack} as the key, and a + * value representing the total amount of the respective {@code ItemStack} in the List. + */ + public static HashMap<ItemStack, Integer> getTotalItems(List<ItemStack> items) { + HashMap<ItemStack, Integer> totals = new HashMap<>(); + itemLoop: for (ItemStack item : items) { + int t = items.stream() + .filter(i2 -> GT_Utility.areStacksEqual(item, i2)) + .mapToInt(i -> i.stackSize) + .sum(); + for (ItemStack i2 : totals.keySet()) if (GT_Utility.areStacksEqual(item, i2)) continue itemLoop; + totals.put(GT_Utility.copyAmount(1, item), t); + } + return totals; + } + + /** + * Turns the {@code items} Array into a {@code HashMap} containing each unique {@code ItemStack} as the key, and a + * value representing the total amount of the respective {@code ItemStack} in the Array. + */ + public static HashMap<ItemStack, Integer> getTotalItems(ItemStack[] items) { + return getTotalItems(Arrays.asList(items)); + } + + public static FluidStack getTieredFluid(int aTier, int aAmount) { + switch (aTier) { + case 0: // ULV + return Materials.RedAlloy.getMolten(aAmount); + case 1: // LV + return Materials.TinAlloy.getMolten(aAmount); + case 2: // MV + return Materials.RoseGold.getMolten(aAmount); + case 3: // HV + return MyMaterial.zircaloy4.getMolten(aAmount); + case 4: // EV + return MyMaterial.incoloy903.getMolten(aAmount); + case 5: // IV + return MyMaterial.titaniumBetaC.getMolten(aAmount); + case 6: // LuV + return MyMaterial.artheriumSn.getMolten(aAmount); + case 7: // ZPM + return MyMaterial.dalisenite.getMolten(aAmount); + case 8: // UV + return MyMaterial.tairitsu.getMolten(aAmount); + case 9: // UHV + return MyMaterial.preciousMetalAlloy.getMolten(aAmount); + case 10: // UEV + return MyMaterial.enrichedNaquadahAlloy.getMolten(aAmount); + case 11: // UIV + return MyMaterial.metastableOganesson.getMolten(aAmount); + case 12: // UMV + return MaterialsUEVplus.SpaceTime.getMolten(aAmount); + default: + return MyMaterial.shirabon.getMolten(aAmount); + } + } + + // === Copied from AE2FC to avoid hard dep === + + public static IAEFluidStack createAEFluidStack(Fluid fluid) { + return createAEFluidStack(new FluidStack(fluid, FluidContainerRegistry.BUCKET_VOLUME)); + } + + public static IAEFluidStack createAEFluidStack(Fluid fluid, long amount) { + return createAEFluidStack(fluid.getID(), amount); + } + + public static IAEFluidStack createAEFluidStack(FluidStack fluid) { + return AEApi.instance() + .storage() + .createFluidStack(fluid); + } + + public static IAEFluidStack createAEFluidStack(int fluidId, long amount) { + return createAEFluidStack(new FluidStack(FluidRegistry.getFluid(fluidId), 1)).setStackSize(amount); + } + +} diff --git a/goodgen/src/main/java/goodgenerator/util/StructureHelper.java b/goodgen/src/main/java/goodgenerator/util/StructureHelper.java new file mode 100644 index 0000000000..e66ac9f9ee --- /dev/null +++ b/goodgen/src/main/java/goodgenerator/util/StructureHelper.java @@ -0,0 +1,117 @@ +package goodgenerator.util; + +import java.util.Arrays; +import java.util.function.BiConsumer; +import java.util.function.BiPredicate; +import java.util.function.Function; + +import net.minecraft.block.Block; +import net.minecraft.init.Items; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.structure.IStructureElement; + +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Frame; +import gregtech.api.util.GT_OreDictUnificator; + +public class StructureHelper { + + public static <T> IStructureElement<T> addFrame(Materials aMaterials) { + return new IStructureElement<T>() { + + private IIcon[] mIcons; + + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tBlock = world.getTileEntity(x, y, z); + if (tBlock instanceof BaseMetaPipeEntity) { + BaseMetaPipeEntity tFrame = (BaseMetaPipeEntity) tBlock; + if (tFrame.isInvalidTileEntity()) return false; + if (tFrame.getMetaTileEntity() instanceof GT_MetaPipeEntity_Frame) { + return ((GT_MetaPipeEntity_Frame) tFrame.getMetaTileEntity()).mMaterial == aMaterials; + } + } + return false; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + if (mIcons == null) { + mIcons = new IIcon[6]; + Arrays.fill(mIcons, aMaterials.mIconSet.mTextures[OrePrefixes.frameGt.mTextureIndex].getIcon()); + } + StructureLibAPI.hintParticleTinted(world, x, y, z, mIcons, aMaterials.mRGBa); + return true; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + ItemStack tFrame = GT_OreDictUnificator.get(OrePrefixes.frameGt, aMaterials, 1); + if (tFrame.getItem() instanceof ItemBlock) { + ItemBlock tFrameStackItem = (ItemBlock) tFrame.getItem(); + return tFrameStackItem + .placeBlockAt(tFrame, null, world, x, y, z, 6, 0, 0, 0, Items.feather.getDamage(tFrame)); + } + return false; + } + }; + } + + // Only support to use meta to tier + public static <T> IStructureElement<T> addTieredBlock(Block aBlock, BiConsumer<T, Integer> aSetTheFuckingMeta, + Function<T, Integer> aGetTheFuckingMeta, int maxMeta) { + return addTieredBlock(aBlock, (t, i) -> { + aSetTheFuckingMeta.accept(t, i); + return true; + }, aGetTheFuckingMeta, maxMeta); + } + + public static <T> IStructureElement<T> addTieredBlock(Block aBlock, BiPredicate<T, Integer> aSetTheFuckingMeta, + Function<T, Integer> aGetTheFuckingMeta, int maxMeta) { + + return new IStructureElement<T>() { + + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block tBlock = world.getBlock(x, y, z); + if (aBlock == tBlock) { + Integer currentMeta = aGetTheFuckingMeta.apply(t); + int newMeta = tBlock.getDamageValue(world, x, y, z) + 1; + if (newMeta > maxMeta) return false; + if (currentMeta == 0) { + return aSetTheFuckingMeta.test(t, newMeta); + } else { + return currentMeta == newMeta; + } + } + return false; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, aBlock, getMeta(trigger)); + return true; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return world.setBlock(x, y, z, aBlock, getMeta(trigger), 3); + } + + private int getMeta(ItemStack trigger) { + int meta = trigger.stackSize - 1; + if (meta <= 0) meta = 0; + if (meta >= maxMeta) meta = maxMeta - 1; + return meta; + } + }; + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/data/essentia.json b/goodgen/src/main/resources/assets/goodgenerator/data/essentia.json new file mode 100644 index 0000000000..f718e9a629 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/data/essentia.json @@ -0,0 +1,418 @@ +{ + "Essentia": [ + { + "name": "Aer", + "fuelValue": 1000, + "category": "AIR", + "consumeCeo": 1.0 + }, + { + "name": "Terra", + "fuelValue": 800, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Ignis", + "fuelValue": 16000, + "category": "THERMAL", + "consumeCeo": 1.0 + }, + { + "name": "Aqua", + "fuelValue": 5000, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Ordo", + "fuelValue": 12000, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Perditio", + "fuelValue": 4500, + "category": "UNSTABLE", + "consumeCeo": 1.0 + }, + { + "name": "Vacuos", + "fuelValue": 8200, + "category": "UNSTABLE", + "consumeCeo": 1.5 + }, + { + "name": "Lux", + "fuelValue": 13000, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Lux", + "fuelValue": 13000, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Tempestas", + "fuelValue": 61200, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Motus", + "fuelValue": 20000, + "category": "AIR", + "consumeCeo": 0.5 + }, + { + "name": "Gelum", + "fuelValue": 3900, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Vitreus", + "fuelValue": 2000, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Victus", + "fuelValue": 20000, + "category": "VICTUS", + "consumeCeo": 1.0 + }, + { + "name": "Venenum", + "fuelValue": 17000, + "category": "UNSTABLE", + "consumeCeo": 2.0 + }, + { + "name": "Potentia", + "fuelValue": 25600, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Permutatio", + "fuelValue": 6000, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Metallum", + "fuelValue": 2600, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Mortuus", + "fuelValue": 7200, + "category": "TAINTED", + "consumeCeo": 1.0 + }, + { + "name": "Volatus", + "fuelValue": 56000, + "category": "AIR", + "consumeCeo": 2.0 + }, + { + "name": "Tenebrae", + "fuelValue": 9000, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Spiritus", + "fuelValue": 37600, + "category": "VICTUS", + "consumeCeo": 0.7 + }, + { + "name": "Sano", + "fuelValue": 24600, + "category": "VICTUS", + "consumeCeo": 1.2 + }, + { + "name": "Iter", + "fuelValue": 16000, + "category": "MECHANICS", + "consumeCeo": 1.0 + }, + { + "name": "Alienis", + "fuelValue": 9700, + "category": "TAINTED", + "consumeCeo": 1.7 + }, + { + "name": "Praecantatio", + "fuelValue": 36000, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Auram", + "fuelValue": 42000, + "category": "AIR", + "consumeCeo": 2.7 + }, + { + "name": "Vitium", + "fuelValue": 4700, + "category": "TAINTED", + "consumeCeo": 10.0 + }, + { + "name": "Limus", + "fuelValue": 11800, + "category": "MECHANICS", + "consumeCeo": 1.0 + }, + { + "name": "Herba", + "fuelValue": 2600, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Arbor", + "fuelValue": 4500, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Bestia", + "fuelValue": 1000, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Corpus", + "fuelValue": 5200, + "category": "VICTUS", + "consumeCeo": 0.9 + }, + { + "name": "Corpus", + "fuelValue": 5200, + "category": "VICTUS", + "consumeCeo": 0.9 + }, + { + "name": "Exanimis", + "fuelValue": 9000, + "category": "TAINTED", + "consumeCeo": 1.2 + }, + { + "name": "Cognitio", + "fuelValue": 2200, + "category": "SPRITE", + "consumeCeo": 1.2 + }, + { + "name": "Sensus", + "fuelValue": 1400, + "category": "SPRITE", + "consumeCeo": 0.7 + }, + { + "name": "Humanus", + "fuelValue": 16700, + "category": "VICTUS", + "consumeCeo": 1.3 + }, + { + "name": "Messis", + "fuelValue": 9800, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Perfodio", + "fuelValue": 1300, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Instrumentum", + "fuelValue": 1200, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Meto", + "fuelValue": 3600, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Telum", + "fuelValue": 14200, + "category": "UNSTABLE", + "consumeCeo": 2.5 + }, + { + "name": "Tutamen", + "fuelValue": 6200, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Fames", + "fuelValue": 17600, + "category": "VICTUS", + "consumeCeo": 1.1 + }, + { + "name": "Lucrum", + "fuelValue": 6000, + "category": "SPRITE", + "consumeCeo": 2.0 + }, + { + "name": "Fabrico", + "fuelValue": 1100, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Pannus", + "fuelValue": 600, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Machina", + "fuelValue": 61200, + "category": "MECHANICS", + "consumeCeo": 1.0 + }, + { + "name": "Vinculum", + "fuelValue": 500, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Strontio", + "fuelValue": 200, + "category": "SPRITE", + "consumeCeo": 0.03 + }, + { + "name": "Nebrisum", + "fuelValue": 24300, + "category": "SPRITE", + "consumeCeo": 2.0 + }, + { + "name": "Electrum", + "fuelValue": 8, + "category": "ELECTRIC", + "consumeCeo": 0.0 + }, + { + "name": "Magneto", + "fuelValue": 108000, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Radio", + "fuelValue": 238000, + "category": "RADIATION", + "consumeCeo": 1.0 + }, + { + "name": "Custom1", + "fuelValue": 300000, + "category": "THERMAL", + "consumeCeo": 7.0 + }, + { + "name": "Custom2", + "fuelValue": 1, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Custom3", + "fuelValue": 217000, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Custom4", + "fuelValue": 118000, + "category": "RADIATION", + "consumeCeo": 0.5 + }, + { + "name": "Custom5", + "fuelValue": 120000, + "category": "VICTUS", + "consumeCeo": 0.6 + }, + { + "name": "Luxuria", + "fuelValue": 79200, + "category": "SPRITE", + "consumeCeo": 3.7 + }, + { + "name": "Infernus", + "fuelValue": 35700, + "category": "THERMAL", + "consumeCeo": 3.0 + }, + { + "name": "Superbia", + "fuelValue": 10900, + "category": "SPRITE", + "consumeCeo": 2.1 + }, + { + "name": "Gula", + "fuelValue": 64000, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Invidia", + "fuelValue": 7700, + "category": "SPRITE", + "consumeCeo": 1.0 + }, + { + "name": "Desidia", + "fuelValue": 600, + "category": "SPRITE", + "consumeCeo": 0.1 + }, + { + "name": "Ira", + "fuelValue": 86200, + "category": "THERMAL", + "consumeCeo": 5.0 + }, + { + "name": "Tempus", + "fuelValue": 142857, + "category": "NORMAL", + "consumeCeo": 0.0 + }, + { + "name": "Terminus", + "fuelValue": 300000, + "category": "UNSTABLE", + "consumeCeo": 10.0 + } + ] +}
\ No newline at end of file diff --git a/goodgen/src/main/resources/assets/goodgenerator/lang/en_US.lang b/goodgen/src/main/resources/assets/goodgenerator/lang/en_US.lang new file mode 100644 index 0000000000..3a5f05ed46 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/lang/en_US.lang @@ -0,0 +1,561 @@ +#This is the lang file for GoodGenerator! + +#Blocks +MAR_Casing.0.name=Field Restriction Casing +radiationProtectionSteelFrame.0.name=Radiation Proof Steel Frame Box +fieldRestrictingGlass.0.name=Field Restriction Glass +FRF_Coil_1.0.name=Field Restriction Coil +FRF_Coil_2.0.name=Advanced Field Restriction Coil +FRF_Coil_3.0.name=Ultimate Field Restriction Coil +FRF_Coil_4.0.name=Temporal Field Restriction Coil +FRF_Casing.0.name=Naquadah Fuel Refinery Casing +rawCylinder.0.name=Raw Cylinder +titaniumPlatedCylinder.0.name=Titanium Plated Cylinder +magicCasing.0.name=Magic Casing +essentiaCell.0.name=Novice Essentia Diffusion Cell +essentiaCell.1.name=Adept Essentia Diffusion Cell +essentiaCell.2.name=Master Essentia Diffusion Cell +essentiaCell.3.name=Grandmaster Essentia Diffusion Cell +essentiaHatch.0.name=Essentia Input Hatch +speedingPipe.0.name=Speeding Pipe Casing +yottaFluidTankCasing.0.name=YOTTank Casing +yottaFluidTankCell.0.name=Fluid Cell Block T1 +yottaFluidTankCell.1.name=Fluid Cell Block T2 +yottaFluidTankCell.2.name=Fluid Cell Block T3 +yottaFluidTankCell.3.name=Fluid Cell Block T4 +yottaFluidTankCell.4.name=Fluid Cell Block T5 +yottaFluidTankCell.5.name=Fluid Cell Block T6 +yottaFluidTankCell.6.name=Fluid Cell Block T7 +yottaFluidTankCell.7.name=Fluid Cell Block T8 +yottaFluidTankCell.8.name=Fluid Cell Block T9 +yottaFluidTankCell.9.name=Fluid Cell Block T10 +supercriticalFluidTurbineCasing.0.name=SC Turbine Casing +pressureResistantWalls.0.name=Pressure Resistant Wall +preciseUnitCasing.0.name=Precise Electronic Unit Casing MK-I +preciseUnitCasing.1.name=Precise Electronic Unit Casing MK-II +preciseUnitCasing.2.name=Precise Electronic Unit Casing MK-III +compactFusionCoil.0.name=Ameliorated Superconduct Coil +compactFusionCoil.1.name=Compact Fusion Coil +compactFusionCoil.2.name=Advanced Compact Fusion Coil +compactFusionCoil.3.name=Compact Fusion Coil MK-II Prototype +compactFusionCoil.4.name=Compact Fusion Coil MK-II Finaltype +essentiaFilterCasing.0.name=Essentia Filter Casing +essentiaOutputHatch.0.name=Essentia Output Hatch +essentiaOutputHatch_ME.0.name=Essentia Output Hatch (ME) +componentAssemblyLineCasing.0.name=Component Assembly Line Casing (LV) +componentAssemblyLineCasing.1.name=Component Assembly Line Casing (MV) +componentAssemblyLineCasing.2.name=Component Assembly Line Casing (HV) +componentAssemblyLineCasing.3.name=Component Assembly Line Casing (EV) +componentAssemblyLineCasing.4.name=Component Assembly Line Casing (IV) +componentAssemblyLineCasing.5.name=Component Assembly Line Casing (LuV) +componentAssemblyLineCasing.6.name=Component Assembly Line Casing (ZPM) +componentAssemblyLineCasing.7.name=Component Assembly Line Casing (UV) +componentAssemblyLineCasing.8.name=Component Assembly Line Casing (UHV) +componentAssemblyLineCasing.9.name=Component Assembly Line Casing (UEV) +componentAssemblyLineCasing.10.name=Component Assembly Line Casing (UIV) +componentAssemblyLineCasing.11.name=Component Assembly Line Casing (UMV) +componentAssemblyLineCasing.12.name=Component Assembly Line Casing (UXV) +componentAssemblyLineCasing.13.name=Component Assembly Line Casing (MAX) + +#Items +item.radiationProtectionPlate.name=Radiation Proof Plate +item.wrappedUraniumIngot.name=Wrapped Uranium Ingot +item.highDensityUraniumNugget.name=High Density Uranium Nugget +item.highDensityUranium.name=High Density Uranium +item.wrappedThoriumIngot.name=Wrapped Thorium Ingot +item.highDensityThoriumNugget.name=High Density Thorium Nugget +item.highDensityThorium.name=High Density Thorium +item.wrappedPlutoniumIngot.name=Wrapped Plutonium Ingot +item.highDensityPlutoniumNugget.name=High Density Plutonium Nugget +item.highDensityPlutonium.name=High Density Plutonium +item.rawAtomicSeparationCatalyst.name=Raw Atomic Separation Catalyst +item.advancedRadiationProtectionPlate.name=Advanced Radiation Proof Plate +item.chromaticGem.name=Chromatic Gem +item.aluminumNitride.name=Aluminium Nitride Dust +item.specialCeramics.name=Special Ceramics Dust +item.specialCeramicsPlate.name=Special Ceramics Plate +item.radioactiveWaste.name=Radioactive Waste +item.plasticCase.name=Plastic Case +item.quartzWafer.name=Quartz Wafer +item.microHeater.name=Micro-Heater +item.quartzCrystalResonator.name=Quartz Crystal Resonator +item.inverter.name=Inverter +item.neutronSource.name=Neutron Source +item.naquadahMass.name=Naquadah Mass +item.enrichedNaquadahMass.name=Enriched Naquadah Mass +item.naquadriaMass.name=Naquadria Mass +item.rodCompressedUraniumDepleted.name=Fuel Rod (Depleted High Density Uranium) +item.rodCompressedUraniumDepleted2.name=Dual Fuel Rod (Depleted High Density Uranium) +item.rodCompressedUraniumDepleted4.name=Quad Fuel Rod (Depleted High Density Uranium) +item.rodCompressedUranium.name=Fuel Rod (High Density Uranium) +item.rodCompressedUranium2.name=Dual Fuel Rod (High Density Uranium) +item.rodCompressedUranium4.name=Quad Fuel Rod (High Density Uranium) +item.rodCompressedPlutoniumDepleted.name=Fuel Rod (Depleted High Density Plutonium) +item.rodCompressedPlutoniumDepleted2.name=Dual Fuel Rod (Depleted High Density Plutonium) +item.rodCompressedPlutoniumDepleted4.name=Quad Fuel Rod (Depleted High Density Plutonium) +item.rodCompressedPlutonium.name=Fuel Rod (High Density Plutonium) +item.rodCompressedPlutonium2.name=Dual Fuel Rod (High Density Plutonium) +item.rodCompressedPlutonium4.name=Quad Fuel Rod (High Density Plutonium) +item.rodLiquidUraniumDepleted.name=Fuel Rod (Depleted Excited Uranium) +item.rodLiquidUraniumDepleted2.name=Dual Fuel Rod (Depleted Excited Uranium) +item.rodLiquidUraniumDepleted4.name=Quad Fuel Rod (Depleted Excited Uranium) +item.rodLiquidUranium.name=Fuel Rod (Excited Uranium) +item.rodLiquidUranium2.name=Dual Fuel Rod (Excited Uranium) +item.rodLiquidUranium4.name=Quad Fuel Rod (Excited Uranium) +item.rodLiquidPlutoniumDepleted.name=Fuel Rod (Depleted Excited Plutonium) +item.rodLiquidPlutoniumDepleted2.name=Dual Fuel Rod (Depleted Excited Plutonium) +item.rodLiquidPlutoniumDepleted4.name=Quad Fuel Rod (Depleted Excited Plutonium) +item.rodLiquidPlutonium.name=Fuel Rod (Excited Plutonium) +item.rodLiquidPlutonium2.name=Dual Fuel Rod (Excited Plutonium) +item.rodLiquidPlutonium4.name=Quad Fuel Rod (Excited Plutonium) +item.advancedFuelRod.name=Advanced Fuel Rod (Empty) +item.fluidCore.0.name=Fluid Storage Core T1 +item.fluidCore.1.name=Fluid Storage Core T2 +item.fluidCore.2.name=Fluid Storage Core T3 +item.fluidCore.3.name=Fluid Storage Core T4 +item.fluidCore.4.name=Fluid Storage Core T5 +item.fluidCore.5.name=Fluid Storage Core T6 +item.fluidCore.6.name=Fluid Storage Core T7 +item.fluidCore.7.name=Fluid Storage Core T8 +item.fluidCore.8.name=Fluid Storage Core T9 +item.fluidCore.9.name=Fluid Storage Core T10 +item.upgradeEssentia.0.name=Essentia Generator: Empty +item.upgradeEssentia.1.name=§eEssentia Generator: Air§r +item.upgradeEssentia.2.name=§cEssentia Generator: Thermal§r +item.upgradeEssentia.3.name=§8Essentia Generator: Unstable§r +item.upgradeEssentia.4.name=§dEssentia Generator: Victus§r +item.upgradeEssentia.5.name=§5Essentia Generator: Tainted§r +item.upgradeEssentia.6.name=§bEssentia Generator: Mechanics§r +item.upgradeEssentia.7.name=§6Essentia Generator: Spirit§r +item.upgradeEssentia.8.name=§aEssentia Generator: Radiation§r +item.upgradeEssentia.9.name=§3Essentia Generator: Electric§r +item.highEnergyMixture.0.name=High Energy Mixture +item.saltyRoot.0.name=Salty Root +item.huiCircuit.0.name=Hi-Computation Station MK-I +item.huiCircuit.1.name=Hi-Computation Station MK-II +item.huiCircuit.2.name=Hi-Computation Station MK-III +item.huiCircuit.3.name=Hi-Computation Station MK-IV Prototype +item.huiCircuit.4.name=Hi-Computation Station MK-V Finaltype +item.nuclearStar.name=Nuclear Star +item.circuitWrap.0.name=Wrap of ULV Circuits +item.circuitWrap.1.name=Wrap of LV Circuits +item.circuitWrap.2.name=Wrap of MV Circuits +item.circuitWrap.3.name=Wrap of HV Circuits +item.circuitWrap.4.name=Wrap of EV Circuits +item.circuitWrap.5.name=Wrap of IV Circuits +item.circuitWrap.6.name=Wrap of LuV Circuits +item.circuitWrap.7.name=Wrap of ZPM Circuits +item.circuitWrap.8.name=Wrap of UV Circuits +item.circuitWrap.9.name=Wrap of UHV Circuits +item.circuitWrap.10.name=Wrap of UEV Circuits +item.circuitWrap.11.name=Wrap of UIV Circuits +item.circuitWrap.12.name=Wrap of UMV Circuits +item.circuitWrap.13.name=Wrap of UXV Circuits +item.circuitWrap.14.name=Wrap of MAX Circuits + +#Crops +crops.saltroot=Salty Root + +#Tooltip +inverter.tooltip.0=Turn DC into AC. +naquadahMass.tooltip.0=FAR from PURE. +enrichedNaquadahMass.tooltip.0=An intense to satisfaction in the world. +naquadriaMass.tooltip.0=What? +EssentiaHatch.tooltip.0=You can right click it with an Essentia Jar to set Essentia Filter. +EssentiaHatch.tooltip.1=Right click it with empty hands to clear the Filter. +fuelrod.tooltip.0=Durability: %s/%s +fuelrodheat.tooltip.0=Has the same heat output as uranium +fuelrodheat.tooltip.1=The heat output is %s times than uranium +fuelrodheat.tooltip.2=Has Mox Behaviour +depletedfuelrod.tooltip.0=Depleted +YOTTankCell.tooltip.0=Capacity: +YOTTankCell.tooltip.1=Fluid cell for the YOTTank +hatchTier.tooltip.0=Hatch Tier: +huiCircuit.tooltip.0=§b93015 TFlops§r +huiCircuit.tooltip.1=§e76M Processor Units§r +huiCircuit.tooltip.2=§aInvalidate RSA§r +huiCircuit.tooltip.3=§c56th Mersenne Prime§r +huiCircuit.tooltip.4=§5Paradox§r +EssentiaOutputHatch.tooltip.0=Shift right click it with empty hands to clear the container. +EssentiaOutputHatch.tooltip.1=Capacity: + +#Fluids +fluid.lightlyCrackedNaquadahGas=Lightly Cracked Naquadah Gas +fluid.moderatelyCrackedNaquadahGas=Moderately Cracked Naquadah Gas +fluid.heavilyCrackedNaquadahGas=Severely Cracked Naquadah Gas +fluid.lightlyCrackedLightNaquadahFuel=Lightly Cracked Light Naquadah Fuel +fluid.moderatelyCrackedLightNaquadahFuel=Moderately Cracked Light Naquadah Fuel +fluid.heavilyCrackedLightNaquadahFuel=Severely Cracked Light Naquadah Fuel +fluid.lightlyCrackedHeavyNaquadahFuel=Lightly Cracked Heavy Naquadah Fuel +fluid.moderatelyCrackedHeavyNaquadahFuel=Moderately Cracked Heavy Naquadah Fuel +fluid.heavilyCrackedHeavyNaquadahFuel=Severely Cracked Heavy Naquadah Fuel +fluid.lightlyCrackedNaquadahAsphalt=Lightly Cracked Naquadah Asphalt +fluid.moderatelyCrackedNaquadahAsphalt=Moderately Cracked Naquadah Asphalt +fluid.heavilyCrackedNaquadahAsphalt=Severely Cracked Naquadah Asphalt +fluid.combustionPromotor=Combustion Promoter +fluid.fluid.coalTar=Coal Tar +fluid.supercriticalSteam=Supercritical Steam +fluid.Naquadah Based Liquid Fuel MkI (Depleted)=Naquadah Based Liquid Fuel MkI (Depleted) +fluid.Acid Naquadah Emulsion=Acid Naquadah Emulsion +fluid.Antimony Pentafluoride=Antimony Pentafluoride +fluid.Naquadah Solution=Naquadah Solution +fluid.Thorium Based Liquid Fuel (Excited State)=Thorium Based Liquid Fuel (Excited State) +fluid.Naquadah Based Liquid Fuel MkV=Naquadah Based Liquid Fuel MkV +fluid.Fluoroantimonic Acid=Fluoroantimonic Acid +fluid.Thorium Tetrafluoride=Thorium Tetrafluoride +fluid.Thorium-232 Tetrafluoride=Thorium-232 Tetrafluoride +fluid.Naquadah Based Liquid Fuel MkII (Depleted)=Naquadah Based Liquid Fuel MkII (Depleted) +fluid.Ether=Ether +fluid.Naquadah Based Liquid Fuel MkIV=Naquadah Based Liquid Fuel MkIV +fluid.Thorium Based Liquid Fuel=Thorium Based Liquid Fuel +fluid.Antimony Pentachloride Solution=Antimony Pentachloride Solution +fluid.Naquadah Based Liquid Fuel MkIII (Depleted)=Naquadah Based Liquid Fuel MkIII (Depleted) +fluid.Naquadah Based Liquid Fuel MkV (Depleted)=Naquadah Based Liquid Fuel MkV (Depleted) +fluid.Heavy Naquadah Fuel=Heavy Naquadah Fuel +fluid.Antimony Pentachloride=Antimony Pentachloride +fluid.Light Naquadah Fuel=Light Naquadah Fuel +fluid.Plutonium Based Liquid Fuel (Excited State)=Plutonium Based Liquid Fuel (Excited State) +fluid.Uranium Based Liquid Fuel (Depleted)=Uranium Based Liquid Fuel (Depleted) +fluid.Thorium Nitrate=Thorium Nitrate +fluid.Naquadah Based Liquid Fuel MkIII=Naquadah Based Liquid Fuel MkIII +fluid.Naquadah Asphalt=Naquadah Asphalt +fluid.Naquadah Based Liquid Fuel MkI=Naquadah Based Liquid Fuel MkI +fluid.Antimony Trichloride Solution=Antimony Trichloride Solution +fluid.Naquadah Gas=Naquadah Gas +fluid.Naquadah Based Liquid Fuel MkII=Naquadah Based Liquid Fuel MkII +fluid.Oxalate=Oxalate +fluid.Uranium Based Liquid Fuel=Uranium Based Liquid Fuel +fluid.Naquadah Emulsion=Naquadah Emulsion +fluid.Plutonium Based Liquid Fuel=Plutonium Based Liquid Fuel +fluid.Plutonium Based Liquid Fuel (Depleted)=Plutonium Based Liquid Fuel (Depleted) +fluid.Naquadah Based Liquid Fuel MkIV (Depleted)=Naquadah Based Liquid Fuel MkIV (Depleted) +fluid.Thorium Based Liquid Fuel (Depleted)=Thorium Based Liquid Fuel (Depleted) +fluid.thorium Tetrachloride=Thorium Tetrachloride +fluid.Uranium Based Liquid Fuel (Excited State)=Uranium Based Liquid Fuel (Excited State) +fluid.Low Quality Naquadah Emulsion=Low Quality Naquadah Emulsion +fluid.2-Ethyl-1-Hexanol=2-Ethyl-1-Hexanol +fluid.P-507=P-507 +fluid.Naquadah-Adamantium Solution=Naquadah-Adamantium Solution +fluid.Naquadah-Rich Solution=Naquadah-Rich Solution +fluid.Fluorine-Rich Waste Liquid=Fluorine-Rich Waste Liquid +fluid.Waste Liquid=Waste Liquid +fluid.Enriched-Naquadah-Rich Solution=Enriched-Naquadah-Rich Solution +fluid.Naquadria-Rich Solution=Naquadria-Rich Solution +fluid.Low Quality Naquadria Sulphate=Low Quality Naquadria Sulphate +fluid.Naquadah Goo=Naquadah Goo +fluid.Enriched Naquadah Goo=Enriched Naquadah Goo +fluid.Naquadria Goo=Naquadria Goo +fluid.Diethylamine=Diethylamine +fluid.Cyclopentadiene=Cyclopentadiene +fluid.Jet Fuel No.3=Jet Fuel No.3 +fluid.Ferrocene Solution=Ferrocene Solution +fluid.Impure Ferrocene Mixture=Impure Ferrocene Mixture +fluid.Ethanol Gasoline=Ethanol Gasoline +fluid.Iron II Chloride=Iron II Chloride +fluid.Low Quality Naquadah Solution=Low Quality Naquadah Solution +fluid.Ferrocene Waste=Ferrocene Waste +fluid.Jet Fuel A=Jet Fuel A +fluid.Thorium Tetrachloride=Thorium Tetrachloride + +#Fluid Tiles +tile.lightlyCrackedNaquadahGas.name=Lightly Cracked Naquadah Gas +tile.moderatelyCrackedNaquadahGas.name=Moderately Cracked Naquadah Gas +tile.heavilyCrackedNaquadahGas.name=Severely Cracked Naquadah Gas +tile.lightlyCrackedLightNaquadahFuel.name=Lightly Cracked Light Naquadah Fuel +tile.moderatelyCrackedLightNaquadahFuel.name=Moderately Cracked Light Naquadah Fuel +tile.heavilyCrackedLightNaquadahFuel.name=Severely Cracked Light Naquadah Fuel +tile.lightlyCrackedHeavyNaquadahFuel.name=Lightly Cracked Heavy Naquadah Fuel +tile.moderatelyCrackedHeavyNaquadahFuel.name=Moderately Cracked Heavy Naquadah Fuel +tile.heavilyCrackedHeavyNaquadahFuel.name=Severely Cracked Heavy Naquadah Fuel +tile.lightlyCrackedNaquadahAsphalt.name=Lightly Cracked Naquadah Asphalt +tile.moderatelyCrackedNaquadahAsphalt.name=Moderately Cracked Naquadah Asphalt +tile.heavilyCrackedNaquadahAsphalt.name=Severely Cracked Naquadah Asphalt +tile.combustionPromotor.name=Combustion Promoter +tile.coalTar.name=Coal Tar +tile.supercriticalSteam.name=Supercritical Steam + +#Tab Name +itemGroup.Good Generator=Good Generator +itemGroup.Nuclear Items=[GG] Multi Nuclear Reactor + +#Scanner Info +scanner.info.FRF=Coil Tier: +scanner.info.NA=Current Neutron Kinetic Energy: +scanner.info.YOTTank.0=Current Capacity: +scanner.info.YOTTank.1=Fluid Name: +scanner.info.YOTTank.2=Current Used: +scanner.info.YOTTank.3=Locked to: +scanner.info.YOTTank.none=None +scanner.info.YOTTank.empty=Empty +scanner.info.YOTTank.next=None. Will lock to next fluid +scanner.info.XHE.0=Steam Output is equal to +scanner.info.XHE.1=Overheated Threshold: +scanner.info.UX.0=Running Parallel +scanner.info.CASS.tier=Casing Tier: + +#GUI Info +GT5U.gui.text.node_too_small=§7Node too small + +gui.NeutronSensor.0=Input the value of Neutron Kinetic Energy. +gui.NeutronSensor.1=e.g. >5000KeV, <=30MeV . . . +gui.NeutronSensor.2=Valid +gui.NeutronSensor.3=Invalid +gui.NeutronSensor.4=eV threshold +gui.NeutronActivator.0=Current Neutron Kinetic Energy: +gui.NeutronActivator.1=Input: +gui.YOTTank.0=Capacity: +gui.YOTTank.1=Fluid: +gui.YOTTank.2=Stored: +gui.YOTTank.3=Locked: +gui.YOTTank.button.void=Void Excess +gui.YOTTank.button.locking=Fluid locking +gui.LargeFusion.0=Energy Capacity: +gui.LargeFusion.1=Stored Energy: +gt.blockmachines.LargeFusionComputerPP.cfgi.0=Batch Size + +# RecipeMaps +gg.recipe.naquadah_reactor=Large Naquadah Reactor +gg.recipe.naquadah_fuel_refine_factory=Naquadah Fuel Refine Factory +gg.recipe.neutron_activator=Neutron Activator +gg.recipe.extreme_heat_exchanger=Extreme Heat Exchanger +gg.recipe.precise_assembler=Precise Assembler +gg.recipe.componentassemblyline=Component Assembly Line + +#NEI Info +value.naquadah_reactor=Basic Output Voltage: %s EU/t +value.naquadah_fuel_refine_factory=Need Tier %s Coil +value.neutron_activator.0=Minimum Neutron Kinetic Energy: +value.neutron_activator.1=Maximum Neutron Kinetic Energy: +value.neutron_activator.2= MeV +value.extreme_heat_exchanger.0=Max Hot Fluid Input: +value.extreme_heat_exchanger.1=Max Distilled Water Input(Normal): +value.extreme_heat_exchanger.2=Max Distilled Water Input(OverHeated): +value.extreme_heat_exchanger.4=Threshold: +value.precise_assembler=Need MK-%s Casing +value.component_assembly_line=Casing Tier: %s + +#TecTech Structure Info +FuelRefineFactory.hint.0=8x Field Restriction Glasses +FuelRefineFactory.hint.1=32x Field Restriction Coils of any tier +FuelRefineFactory.hint.2=At least 104x Naquadah Fuel Refinery Casings +FuelRefineFactory.hint.3=1~16x Input Hatch +FuelRefineFactory.hint.4=1~16x Output Hatch +FuelRefineFactory.hint.5=1~16x Input Bus +FuelRefineFactory.hint.6=1~16x Energy Hatch +FuelRefineFactory.hint.7=All the hatches should adjoin the field restriction glass +MultiNqGenerator.hint.0=6x TungstenSteel Pipe Casings +MultiNqGenerator.hint.1=48x Field Restriction Casings +MultiNqGenerator.hint.2=36x Radiation Proof Steel Frame Boxes +MultiNqGenerator.hint.3=At least 77x Radiation Proof Machine Casings +MultiNqGenerator.hint.4=1~4x Input Hatch +MultiNqGenerator.hint.5=0~1x Output Hatch +MultiNqGenerator.hint.6=1x Maintenance Hatch +MultiNqGenerator.hint.7=1x Dynamo Hatch +UniversalChemicalFuelEngine.hint.0=93x Stable Titanium Machine Casings +UniversalChemicalFuelEngine.hint.1=14x Titanium Pipe Casings +UniversalChemicalFuelEngine.hint.2=14x Titanium Gear Box Casings +UniversalChemicalFuelEngine.hint.3=14x Titanium Plated Cylinders +UniversalChemicalFuelEngine.hint.4=14x Engine Intake Casings +UniversalChemicalFuelEngine.hint.5=0 - Air +UniversalChemicalFuelEngine.hint.6=1 - Maintenance Hatch +UniversalChemicalFuelEngine.hint.7=2 - Muffler Hatch +UniversalChemicalFuelEngine.hint.8=3 - Input Hatch +UniversalChemicalFuelEngine.hint.9=4 - Dynamo Hatch +UniversalChemicalFuelEngine.hint.10=Support TecTech Dynamo/Laser Hatch +LargeEssentiaGenerator.hint.0=25x Any Essentia Cell +LargeEssentiaGenerator.hint.1=4x Amber Bricks +LargeEssentiaGenerator.hint.2=24x Arcane Stone Bricks +LargeEssentiaGenerator.hint.3=At least 53x Magic Casings +LargeEssentiaGenerator.hint.4=1x Dynamo Hatch +LargeEssentiaGenerator.hint.5=1 - Maintenance Hatch/Input Hatch/Dynamo Hatch/Essentia Input Hatch +NeutronActivator.hint.0=16x Steel Frame Boxes +NeutronActivator.hint.1=18x Processor Machine Casings +NeutronActivator.hint.2=4x Speeding Pipe Casing +NeutronActivator.hint.3=At least 7x Clean Stainless Steel Machine Casings +NeutronActivator.hint.4=1 - Input Hatch/Input Bus/Clean Stainless Steel Machine Casing +NeutronActivator.hint.5=2 - Output Hatch/Output Bus/Maintenance Hatch/Neutron Accelerator/Neutron Sensor/Clean Stainless Steel Machine Casing +NeutronActivator.hint.6=3 - EV+ Tier Glass +YOTTank.hint.0=At least 47x YOTTank Casing +YOTTank.hint.1=16x Steel Frame Box +YOTTank.hint.2=16x Borosilicate Glass Block of the same tier for every layer +YOTTank.hint.3=9x Fluid Cell Block for every layer +YOTTank.hint.4=1 - Input Hatch/YOTTank Casing +YOTTank.hint.5=2 - Maintenance Hatch/YOTTank Casing +YOTTank.hint.6=3 - Output Hatch/YOTHatch/YOTTank Casing +YOTTank.hint.7=Only one YOTHatch allowed per YOTTank. +ExtremeHeatExchanger.hint.0=At least 25x Robust Tungstensteel Machine Casings +ExtremeHeatExchanger.hint.1=1 - Input hatch for distilled water +ExtremeHeatExchanger.hint.2=2 - Output hatch for SC Steam/SH Steam/Steam +ExtremeHeatExchanger.hint.3=3 - Input hatch for hot fluid +ExtremeHeatExchanger.hint.4=4 - Output hatch for cold fluid +ExtremeHeatExchanger.hint.5=Any Casing - Maintenance Hatch +PreciseAssembler.hint.0=At least 42x Precise Electronic Unit Casings +PreciseAssembler.hint.1=12x Tungstensteel Frame Box +PreciseAssembler.hint.2=42x Reinforced Glasses +PreciseAssembler.hint.3=21x Machine Casing (Not Machine Hull!) +PreciseAssembler.hint.4=1 - Any Hatch/Precise Electronic Unit Casing +PreciseAssembler.hint.5=2 - EV+ Tier Glass +PreciseAssembler.hint.6=Support TecTech Energy Hatches! +LargeFusion1.hint.0=At least 1666x LuV Machine Casings +LargeFusion1.hint.1=At least 63x Chrome Reinforced Borosilicate Glass Blocks +LargeFusion1.hint.2=558x Ameliorated Superconduct Coils +LargeFusion1.hint.3=128x Naquadah Alloy Frame Boxes +LargeFusion1.hint.4=1 - Input Hatch +LargeFusion1.hint.5=1 - Output Hatch +LargeFusion1.hint.6=2 - Energy Hatch +LargeFusion1.hint.7=All Hatches must be LuV or better. +LargeFusion1.hint.8=Support TecTech Hatches. +LargeFusion2.hint.0=At least 1666x Fusion Machine Casings +LargeFusion2.hint.1=At least 63x Iridium Reinforced Borosilicate Glass Blocks +LargeFusion2.hint.2=558x Compact Fusion Coils +LargeFusion2.hint.3=128x Duranium Frame Boxes +LargeFusion2.hint.4=1 - Input Hatch +LargeFusion2.hint.5=1 - Output Hatch +LargeFusion2.hint.6=2 - Energy Hatch +LargeFusion2.hint.7=All Hatches must be ZPM or better. +LargeFusion2.hint.8=Support TecTech Hatches. +LargeFusion3.hint.0=At least 1666x Fusion Machine Casing MK II +LargeFusion3.hint.1=At least 63x Osmium Reinforced Borosilicate Glass Blocks +LargeFusion3.hint.2=558x Advanced Compact Fusion Coils +LargeFusion3.hint.3=128x Neutronium Frame Boxes +LargeFusion3.hint.4=1 - Input Hatch +LargeFusion3.hint.5=1 - Output Hatch +LargeFusion3.hint.6=2 - Energy Hatch +LargeFusion3.hint.7=All Hatches must be UV or better. +LargeFusion3.hint.8=Support TecTech Hatches. +LargeFusion4.hint.0=At least 1666x Fusion Machine Casing MK III +LargeFusion4.hint.1=At least 63x Uranium Reinforced Borosilicate Glass Blocks +LargeFusion4.hint.2=558x Compact Fusion Coil MK-II Prototype +LargeFusion4.hint.3=128x Infinity Catalyst Frame Boxes +LargeFusion4.hint.4=1 - Input Hatch +LargeFusion4.hint.5=1 - Output Hatch +LargeFusion4.hint.6=2 - Energy Hatch +LargeFusion4.hint.7=All Hatches must be UHV or better. +LargeFusion4.hint.8=Support TecTech Hatches. +LargeFusion5.hint.0=At least 1666x Fusion Machine Casing MK IV +LargeFusion5.hint.1=At least 63x Europium Reinforced Borosilicate Glass Blocks +LargeFusion5.hint.2=558x Compact Fusion Coil MK-II Finaltype +LargeFusion5.hint.3=128x Infinity Frame Boxes +LargeFusion5.hint.4=1 - Input Hatch +LargeFusion5.hint.5=1 - Output Hatch +LargeFusion5.hint.6=2 - Energy Hatch +LargeFusion5.hint.7=All Hatches must be UEV or better. +LargeFusion5.hint.8=Support TecTech Hatches. +LargeEssentiaSmeltery.hint.0=At least 24x Magic Casings +LargeEssentiaSmeltery.hint.1=At least 12x Essentia Diffusion Cells +LargeEssentiaSmeltery.hint.2=At least 3x Advanced Alchemical Furnace Blocks +LargeEssentiaSmeltery.hint.3=At least 3x Essentia Filter Casings +LargeEssentiaSmeltery.hint.4=0 - Air +LargeEssentiaSmeltery.hint.5=1 - Basic Hatch/Magic Casing +LargeEssentiaSmeltery.hint.6=2 - Muffler Hatch +LargeEssentiaSmeltery.hint.7=Support TecTech Hatches. +CoolantTower.hint.0=Any kind of GT concrete +CoolantTower.hint.1=28x Tungstencarbide Frame Boxes +CoolantTower.hint.2=1 - Input/Output Hatch + +#Chat +largeessentiagenerator.chat= Installed! +essentiahatch.chat.0=Successfully locked to %s. +essentiahatch.chat.1=Cleared. +yothatch.chat.0=Set storage priority to %s. +yothatch.chat.1=Set to %s mode +yottank.chat.0=Locked fluid cleared +yottank.chat.1=Locked to %s +yottank.chat.2=Will lock to next input fluid +yottank.chat.voidExcessEnabled=Void Excess Enabled +yottank.chat.voidExcessDisabled=Void Excess Disabled +preciseassembler.chat.0=Precise Mode +preciseassembler.chat.1=Normal Mode +essentiaoutputhatch.chat.0=Cleared. + +#Achievement +achievement.gt.blockmachines.nag=Large Naquadah Reactor +achievement.gt.blockmachines.nag.desc=Pickup this item to see the recipe in NEI +achievement.gt.blockmachines.frf=Naquadah Fuel Refine Factory +achievement.gt.blockmachines.frf.desc=Pickup this item to see the recipe in NEI +achievement.FRF_Casing.0=Naquadah Fuel Refine Factory Casing +achievement.FRF_Casing.0.desc=Pickup this item to see the recipe in NEI +achievement.FRF_Coil_1.0=Field Restriction Coil +achievement.FRF_Coil_1.0.desc=Pickup this item to see the recipe in NEI +achievement.FRF_Coil_2.0=Advanced Field Restriction Coil +achievement.FRF_Coil_2.0.desc=Pickup this item to see the recipe in NEI +achievement.FRF_Coil_3.0=Ultimate Field Restriction Coil +achievement.FRF_Coil_3.0.desc=Pickup this item to see the recipe in NEI +achievement.FRF_Coil_4.0=Temporal Field Restriction Coil +achievement.FRF_Coil_4.0.desc=Pickup this item to see the recipe in NEI +achievement.gt.blockmachines.neutron_accelerator_luv=Neutron Accelerator Luv +achievement.gt.blockmachines.neutron_accelerator_luv.desc=Do you really want it? +achievement.item.fluidCore.1=Fluid Storage Core T2 +achievement.item.fluidCore.1.desc=Pickup this item to see the recipe in NEI +achievement.item.fluidCore.2=Fluid Storage Core T3 +achievement.item.fluidCore.2.desc=Pickup this item to see the recipe in NEI +achievement.item.fluidCore.3=Fluid Storage Core T4 +achievement.item.fluidCore.3.desc=Pickup this item to see the recipe in NEI +achievement.item.fluidCore.4=Fluid Storage Core T5 +achievement.item.fluidCore.4.desc=Pickup this item to see the recipe in NEI +achievement.item.fluidCore.5=Fluid Storage Core T6 +achievement.item.fluidCore.5.desc=Pickup this item to see the recipe in NEI +achievement.yottaFluidTankCell.2=Fluid Cell Block T3 +achievement.yottaFluidTankCell.2.desc=Pickup this item to see the recipe in NEI +achievement.yottaFluidTankCell.3=Fluid Cell Block T4 +achievement.yottaFluidTankCell.3.desc=Pickup this item to see the recipe in NEI +achievement.yottaFluidTankCell.4=Fluid Cell Block T5 +achievement.yottaFluidTankCell.4.desc=Pickup this item to see the recipe in NEI +achievement.yottaFluidTankCell.5=Fluid Cell Block T6 +achievement.yottaFluidTankCell.5.desc=Pickup this item to see the recipe in NEI +achievement.yottaFluidTankCell.6=Fluid Cell Block T7 +achievement.yottaFluidTankCell.6.desc=Pickup this item to see the recipe in NEI +achievement.yottaFluidTankCell.7=Fluid Cell Block T8 +achievement.yottaFluidTankCell.7.desc=Pickup this item to see the recipe in NEI +achievement.yottaFluidTankCell.8=Fluid Cell Block T9 +achievement.yottaFluidTankCell.8.desc=Pickup this item to see the recipe in NEI +achievement.yottaFluidTankCell.9=Fluid Cell Block T10 +achievement.yottaFluidTankCell.9.desc=The T10 Core of the YOTTANK. The rainbow comes out. +achievement.gt.blockmachines.largefusioncomputer2=Not Enough Fusions +achievement.gt.blockmachines.largefusioncomputer2.desc=Pickup this item to see the recipe in NEI +achievement.gt.blockmachines.largefusioncomputer3=PROJECT MOISS +achievement.gt.blockmachines.largefusioncomputer3.desc=Pickup this item to see the recipe in NEI +achievement.gt.blockmachines.largefusioncomputer4=イワシがつちからはえてくるんだ +achievement.gt.blockmachines.largefusioncomputer4.desc=Pickup this item to see the recipe in NEI +achievement.gt.blockmachines.largefusioncomputer5=XXXX +achievement.gt.blockmachines.largefusioncomputer5.desc=Pickup this item to see the recipe in NEI +achievement.item.advancedRadiationProtectionPlate=Advanced Radiation Proof Plate +achievement.item.advancedRadiationProtectionPlate.desc=Pickup this item to see the recipe in NEI + +#Thaumcraft Research Context +research.ESSENTIA_GENERATOR.page.0=You have found that Essentia contains much more power than you thought. Is there a way to generate electricity from these Essentia?<BR><BR>The LEG(Large Essentia Generator) will automatically adapt its output voltage according to its dynamo hatch. The the Diffusion Cell determines the highest hatch tier that LEG can accept. +research.ESSENTIA_GENERATOR.page.1=Currently, only these Aspects can be converted into power directly without upgrades:<BR><BR>Terra: 800EU<BR><BR>Aqua: 5000EU<BR><BR>Ordo: 12000EU<BR><BR>Lux: 13000EU<BR><BR>Tempestas: 61200EU<BR><BR>Gelum: 3900EU<BR><BR>Vitreus: 2000EU<BR><BR>Potentia: 25600EU<BR><BR>Permutatio: 6000EU<BR><BR>Metallum: 2600EU +research.ESSENTIA_GENERATOR.page.2=Tenebrae: 9000EU<BR><BR>Praecantatio: 36000EU<BR><BR>Herba: 2600EU<BR><BR>Arbor: 4500EU<BR><BR>Bestia: 1000EU<BR><BR>Messis: 9800EU<BR><BR>Perfodio: 1300EU<BR><BR>Instrumentum: 1200EU<BR><BR>Meto: 3600EU<BR><BR>Tutamen: 6200EU<BR><BR>Fabrico: 1100EU +research.ESSENTIA_GENERATOR.page.3=Pannus: 600EU<BR><BR>Vinculum: 500EU<BR><BR>Magneto: 108000EU<BR><BR>Vesania: 1EU<BR><BR>Primordium: 217000<BR><BR>Gula: 64000EU<BR><BR>Tempus: 142857EU<BR><BR>You need to install upgrades on the generator if you want to use other kinds of Essentia as fuel. +research.ESSENTIA_CELL.page.0=The Novice Cell has such low efficiency that you can't bear it. So you discovered a new way to make some better Cells<BR><BR>The Novice Cell only provides 1 StablePoint, the Adept one provides 2 StablePoint, the Master one provides 5 StablePoint, and the Grandmaster one provides 10 StablePoint!<BR><BR>With higher StablePoint, the generator can create more electricity from pre Essential.<BR><BR>They also allow you to use better hatches. +research.ESSENTIA_UPGRADE_BLANK.page.0=A blank upgrade! I bet it has infinity possibility.<BR><BR>Except few kinds of Essentia, most Essentia needs external fluid to help them diffuse in the cell or increase the efficiency. Without these special fluids, the Essentia will block up the crevice of cells, resulting in lower efficiency or even no output. You can install multiple upgrades in one LEG.<BR><BR>The formula to calculate the fluid consuming speed:<BR>Basic consuming speed * Essentia coefficient * consumed Essentia amount +research.ESSENTIA_UPGRADE_AIR.page.0=This kind of Essentia has a high affinity for air and requires air to assist it to diffuse.<BR><BR>We can use liquid air which is more concentrated to further increase the efficiency of Essentia.<BR><BR>The basic consuming speed is 160L/sec. +research.ESSENTIA_UPGRADE_AIR.page.1=Acceptable Aspects:<BR><BR>Aer: 10000EU Coefficient:x1.0<BR><BR>Motus: 20000EU Coefficient:x0.5<BR><BR>Volatus: 56000EU Coefficient:x2.0<BR><BR>Auram: 42000EU Coefficient:x2.7<BR><BR>Required Liquid:<BR><BR>Air: Efficiency:x1.0<BR><BR>Liquid Air: Efficiency:x1.5 +research.ESSENTIA_UPGRADE_THERMAL.page.0=The energy from this kind of Essentia cannot be fully converted into electricity, and some of it is converted into heat that heats up the diffusion cell.<BR><BR>Coolants are needed to keep the generator running steadily and better coolants allow Essentia to release more energy safely.<BR><BR>The basic consuming speed is 40L/sec. +research.ESSENTIA_UPGRADE_THERMAL.page.1=Acceptable Aspects:<BR><BR>Ignis: 16000EU Coefficient:x1.0<BR><BR>Aequalitas: 300000EU Coefficient:x7.0<BR><BR>Volatus: 56000EU Coefficient:x2.0<BR><BR>Infernus: 35700EU Coefficient:x3.0<BR><BR>Ira: 82600EU Coefficient:x5.0 +research.ESSENTIA_UPGRADE_THERMAL.page.2=Required Liquid:<BR><BR>Water: Efficiency:x0.5<BR><BR>Distilled Water: Efficiency:x1.0<BR><BR>Crushed Ice: Efficiency:x1.2<BR><BR>IC2 Coolant: Efficiency:x1.5<BR><BR>Cryotheum: Efficiency:x5.0<BR><BR>Super Coolant: Efficiency:x9.0 +research.ESSENTIA_UPGRADE_UNSTABLE.page.0=This kind of Essentia tends to damage the diffusion cell or reacts with air easily.<BR><BR>Inert gases are needed to protect the diffusion cell.<BR><BR>The more inert the gas, the more energy can be safely released from the Essentia.<BR><BR>The basic consuming speed is 80L/sec. +research.ESSENTIA_UPGRADE_UNSTABLE.page.1=Acceptable Aspects:<BR><BR>Perditio: 4500EU Coefficient:x1.0<BR><BR>Vacuos: 8200EU Coefficient:x1.5<BR><BR>Venenum: 17000EU Coefficient:x2.0<BR><BR>Telum: 14200EU Coefficient:x2.5<BR><BR>Terminus: 300000EU Coefficient:x10.0 +research.ESSENTIA_UPGRADE_UNSTABLE.page.2=Required Liquid:<BR><BR>Nitrogen: Efficiency:x1.0<BR><BR>Helium: Efficiency:x2.0<BR><BR>Neon: Efficiency:x2.2<BR><BR>Argon: Efficiency:x2.5<BR><BR>Krypton: Efficiency:x3.0<BR><BR>Xenon: Efficiency:x4.0 +research.ESSENTIA_UPGRADE_VICTUS.page.0=This kind of Essentia contains the essence of life.<BR><BR>Most of them can't be converted into much energy directly, but you can provide them with Life Essence, enhancing the power they generate greatly.<BR><BR>The basic consuming speed is 360L/sec. +research.ESSENTIA_UPGRADE_VICTUS.page.1=Acceptable Aspects:<BR><BR>Victus: 20000EU Coefficient:x1.0<BR><BR>Spiritus: 37600EU Coefficient:x0.7<BR><BR>Sano: 24600EU Coefficient:x1.2<BR><BR>Corpus: 5200EU Coefficient:x0.9<BR><BR>Humanus: 16700EU Coefficient:x1.3<BR><BR>Fames: 17600EU Coefficient:x1.1<BR><BR>Gloria: 120000EU Coefficient:x0.6 +research.ESSENTIA_UPGRADE_VICTUS.page.2=Optional Liquid:<BR><BR>Liquid XP: Efficiency:x2.0<BR><BR>Life Essence: Efficiency:x6.0 +research.ESSENTIA_UPGRADE_TAINTED.page.0=This kind of Essentia contains dark powers. It may cause flux pollution when running.<BR><BR>You can provide these Essentia with Purifying Fluid or Liquid Death...... resulting two different effects.<BR><BR>The Purifying Fluid can purify and greatly enhances the energy outputted by the Essentia, and also prevents the flux pollution.<BR><BR>The Water of Death does not dissolve Essentia, but adding it to diffused Essentia can have a wonderful effect. The lower the basic fuel value of the Essentia, the more the dark energy can be released. +research.ESSENTIA_UPGRADE_TAINTED.page.1=The basic consuming speed is 60L/sec. +research.ESSENTIA_UPGRADE_TAINTED.page.2=Acceptable Aspects:<BR><BR>Mortuus: 7200EU Coefficient:x1.0<BR><BR>Alienis: 9700EU Coefficient:x1.7<BR><BR>Vitium: 4700EU Coefficient:x10.0<BR><BR>Exanimis: 9000EU Coefficient:x1.2 +research.ESSENTIA_UPGRADE_TAINTED.page.3=Optional Liquid:<BR><BR>Purifying Fluid: Efficiency:x60.0<BR><BR>Liquid Death: Efficiency:x (25000/Basic Fuel Value)^4 +research.ESSENTIA_UPGRADE_MECHANICS.page.0=This kind of Essentia must flow quickly in order to release energy.<BR><BR>Lubricants are needed to provide sufficient fluidity to the Essentia.<BR><BR>The basic consuming speed is 400L/sec. +research.ESSENTIA_UPGRADE_MECHANICS.page.1=Acceptable Aspects:<BR><BR>Iter: 16000EU<BR><BR>Machina: 61200EU<BR><BR>Limus: 11800EU<BR><BR>The Coefficient is always x1.0 +research.ESSENTIA_UPGRADE_MECHANICS.page.2=Required Liquid:<BR><BR>Lubricant: Efficiency:x1.0 +research.ESSENTIA_UPGRADE_SPRITE.page.0=The power directly generated from spiritual Essentia is very low. It is only when activated with Flowing Spirit or Hollow Tears that these Essentia can show their true power.<BR><BR>When the stable point of Diffusion Cell is low, Hollow Tears can stimulate more energy from Essentia. But when the stable point of Diffusion Cell becomes higher, only using Flowing Spirit can awaken the true power of Essentia.<BR><BR>The basic consuming speed is 40L/sec. +research.ESSENTIA_UPGRADE_SPRITE.page.1=Acceptable Aspects:<BR><BR>Cognitio: 2200EU Coefficient:x1.2<BR><BR>Sensus: 1400EU Coefficient:x0.7<BR><BR>Lucrum: 6000EU Coefficient:x2.0<BR><BR>Strontio: 200EU Coefficient:x0.03<BR><BR>Nebrisum: 24300EU Coefficient:x2.0<BR><BR>Luxuria: 79200EU Coefficient:x3.7<BR><BR>Superbia: 10900EU Coefficient:x2.1<BR><BR>Invidia: 7700EU Coefficient:x1.0<BR><BR>Desidia: 600EU Coefficient:x0.1 +research.ESSENTIA_UPGRADE_SPRITE.page.2=Optional Liquid:<BR><BR>Hollow Tears: Efficiency:x 15x(1+100/Stable Point)<BR><BR>Flowing Spirit Efficiency:x 10x(1+Stable Point/100)<BR><BR>This means Flowing Spirit is more efficient when stable point is over 150. +research.ESSENTIA_UPGRADE_RADIATION.page.0=The use of this Essentia for power generation is similar to the use of nuclear fuel, except that the Essentia represents a purely "radioactive" property rather than a specific nuclear fuel.<BR><BR>However, the method of boosting nuclear fuel power still applies here, and it will directly result in more energy being released from Essentia.<BR><BR>The basic consuming speed is 120L/sec. +research.ESSENTIA_UPGRADE_RADIATION.page.1=Acceptable Aspects:<BR><BR>Radio: 238000EU Coefficient:x1.0<BR><BR>Astrum: 118000EU Coefficient:x0.5 +research.ESSENTIA_UPGRADE_RADIATION.page.2=Optional Liquid:<BR><BR>Molten Caesium: Efficiency:x2.0<BR><BR>Molten Uranium-235: Efficiency:x3.0<BR><BR>Molten Naquadah: Efficiency:x4.0<BR><BR>Molten Atomic Separation Catalyst: Efficiency:x16.0 +research.ESSENTIA_UPGRADE_ELECTRIC.page.0=The ELECTRUM Essentia itself represents electricity!<BR><BR>The higher the voltage of the generator dynamo hatch, the more ELECTRUM will be affected by potential difference and increase the amount of energy. +research.ESSENTIA_UPGRADE_ELECTRIC.page.1=Acceptable Aspects: Electrum<BR><BR>The formula to calculate its power:<BR>8x(3.0^Dynamo Hatch Tier)EU +research.ESSENTIA_SMELTERY.page.0=The Advanced Alchemical Furnace is no longer enough to support your Essentia production...<BR><BR>The LES(Large Essentia Smeltery) is an advanced version of the Advanced Alchemical Furnace, which consumes electricity and cent-vis to smelt Essentia. +research.ESSENTIA_SMELTERY.page.1=Ignis and Aqua are the basic conditions for the operation of LES. The minimum demand is about the highest Energy Hatch tier^2*1.15cv/work, and the machine can run only after it is satisfied.<BR><BR>Ordo affects the pollution and the generation of Flux Gas (randomly exhaust Flux Gas at the facing of the muffler when smelting Essentia).<BR><BR>Perditio can speed up machine work, up to 200% (100cv/5t). +research.ESSENTIA_SMELTERY.page.2=The Essentia Diffusion Cell tier and structure size only affect the machine parallel, and the max parallel is 64x.<BR><BR>Items without Essentia will be smelted to 1 point of perditio. +research.ESSENTIA_OUTPUT_HATCH_ME.page.0=Someday you will use it...<BR><BR>Be sure to connect to the network. It has no cache! diff --git a/goodgen/src/main/resources/assets/goodgenerator/lang/zh_CN.lang b/goodgen/src/main/resources/assets/goodgenerator/lang/zh_CN.lang new file mode 100644 index 0000000000..1572a2f5ac --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/lang/zh_CN.lang @@ -0,0 +1,492 @@ +#This is the lang file for GoodGenerator! + +#Blocks +MAR_Casing.0.name=力场约束机械方块 +radiationProtectionSteelFrame.0.name=防辐射钢框架 +fieldRestrictingGlass.0.name=力场约束玻璃 +FRF_Coil_1.0.name=力场约束线圈 +FRF_Coil_2.0.name=进阶力场约束线圈 +FRF_Coil_3.0.name=终极力场约束线圈 +FRF_Casing.0.name=硅岩燃料精炼机械方块 +rawCylinder.0.name=粗制气缸 +titaniumPlatedCylinder.0.name=镀钛气缸 +magicCasing.0.name=魔法机械方块 +essentiaCell.0.name=新手源质扩散单元 +essentiaCell.1.name=学徒源质扩散单元 +essentiaCell.2.name=大师源质扩散单元 +essentiaCell.3.name=宗师源质扩散单元 +essentiaHatch.0.name=源质输入仓 +speedingPipe.0.name=高速管道方块 +yottaFluidTankCasing.0.name=YOT机械方块 +yottaFluidTankCell.0.name=流体单元方块T1 +yottaFluidTankCell.1.name=流体单元方块T2 +yottaFluidTankCell.2.name=流体单元方块T3 +yottaFluidTankCell.3.name=流体单元方块T4 +yottaFluidTankCell.4.name=流体单元方块T5 +yottaFluidTankCell.5.name=流体单元方块T6 +yottaFluidTankCell.6.name=流体单元方块T7 +yottaFluidTankCell.7.name=流体单元方块T8 +yottaFluidTankCell.8.name=流体单元方块T9 +yottaFluidTankCell.9.name=流体单元方块T10 +supercriticalFluidTurbineCasing.0.name=超临界蒸汽涡轮机械方块 +pressureResistantWalls.0.name=耐压墙 +preciseUnitCasing.0.name=精密电子单元机械方块 MK-I +preciseUnitCasing.1.name=精密电子单元机械方块 MK-II +preciseUnitCasing.2.name=精密电子单元机械方块 MK-III +compactFusionCoil.0.name=改良型超导线圈方块 +compactFusionCoil.1.name=压缩聚变线圈方块 +compactFusionCoil.2.name=进阶压缩聚变线圈方块 +compactFusionCoil.3.name=压缩聚变线圈方块MK-II原型 +compactFusionCoil.4.name=压缩聚变线圈方块MK-II +essentiaFilterCasing.0.name=源质过滤方块 +essentiaOutputHatch.0.name=源质输出仓 +essentiaOutputHatch_ME.0.name=源质输出仓 (ME) + +#Items +item.radiationProtectionPlate.name=防辐射板 +item.wrappedUraniumIngot.name=封装铀锭 +item.highDensityUraniumNugget.name=浓缩铀粒 +item.highDensityUranium.name=浓缩铀 +item.wrappedThoriumIngot.name=封装钍锭 +item.highDensityThoriumNugget.name=浓缩钍粒 +item.highDensityThorium.name=浓缩钍 +item.wrappedPlutoniumIngot.name=封装钚锭 +item.highDensityPlutoniumNugget.name=浓缩钚粒 +item.highDensityPlutonium.name=浓缩钚 +item.rawAtomicSeparationCatalyst.name=粗制原子分离催化剂 +item.advancedRadiationProtectionPlate.name=进阶防辐射板 +item.chromaticGem.name=彩色宝石 +item.aluminumNitride.name=氮化铝粉 +item.specialCeramics.name=特种陶瓷粉 +item.specialCeramicsPlate.name=特种陶瓷板 +item.radioactiveWaste.name=放射性废料 +item.plasticCase.name=塑料外壳 +item.quartzWafer.name=石英晶元 +item.microHeater.name=微型加热器 +item.quartzCrystalResonator.name=石英晶体谐振器 +item.inverter.name=逆变器 +item.neutronSource.name=中子源 +item.naquadahMass.name=硅岩团 +item.enrichedNaquadahMass.name=富集硅岩团 +item.naquadriaMass.name=超能硅岩团 +item.rodCompressedUraniumDepleted.name=枯竭燃料棒(浓缩铀) +item.rodCompressedUraniumDepleted2.name=枯竭二联燃料棒(浓缩铀) +item.rodCompressedUraniumDepleted4.name=枯竭四联燃料棒(浓缩铀) +item.rodCompressedUranium.name=燃料棒(浓缩铀) +item.rodCompressedUranium2.name=二联燃料棒(浓缩铀) +item.rodCompressedUranium4.name=四联燃料棒(浓缩铀) +item.rodCompressedPlutoniumDepleted.name=枯竭燃料棒(浓缩钚) +item.rodCompressedPlutoniumDepleted2.name=枯竭二联燃料棒(浓缩钚) +item.rodCompressedPlutoniumDepleted4.name=枯竭四联燃料棒(浓缩钚) +item.rodCompressedPlutonium.name=燃料棒(浓缩钚) +item.rodCompressedPlutonium2.name=二联燃料棒(浓缩钚) +item.rodCompressedPlutonium4.name=四联燃料棒(浓缩钚) +item.rodLiquidUraniumDepleted.name=枯竭燃料棒(激发铀) +item.rodLiquidUraniumDepleted2.name=枯竭二联燃料棒(激发铀) +item.rodLiquidUraniumDepleted4.name=枯竭四联燃料棒(激发铀) +item.rodLiquidUranium.name=燃料棒(激发铀) +item.rodLiquidUranium2.name=二联燃料棒(激发铀) +item.rodLiquidUranium4.name=四联燃料棒(激发铀) +item.rodLiquidPlutoniumDepleted.name=枯竭燃料棒(激发钚) +item.rodLiquidPlutoniumDepleted2.name=枯竭二联燃料棒(激发钚) +item.rodLiquidPlutoniumDepleted4.name=枯竭四联燃料棒(激发钚) +item.rodLiquidPlutonium.name=燃料棒(激发钚) +item.rodLiquidPlutonium2.name=二联燃料棒(激发钚) +item.rodLiquidPlutonium4.name=四联燃料棒(激发钚) +item.advancedFuelRod.name=高级燃料棒(空) +item.fluidCore.0.name=流体存储核心T1 +item.fluidCore.1.name=流体存储核心T2 +item.fluidCore.2.name=流体存储核心T3 +item.fluidCore.3.name=流体存储核心T4 +item.fluidCore.4.name=流体存储核心T5 +item.fluidCore.5.name=流体存储核心T6 +item.upgradeEssentia.0.name=源质发电机:Empty +item.upgradeEssentia.1.name=§e源质发电机:Air§r +item.upgradeEssentia.2.name=§c源质发电机:Thermal§r +item.upgradeEssentia.3.name=§8源质发电机:Unstable§r +item.upgradeEssentia.4.name=§d源质发电机:Victus§r +item.upgradeEssentia.5.name=§5源质发电机:Tainted§r +item.upgradeEssentia.6.name=§b源质发电机:Mechanics§r +item.upgradeEssentia.7.name=§6源质发电机:Spirit§r +item.upgradeEssentia.8.name=§a源质发电机:Radiation§r +item.upgradeEssentia.9.name=§3源质发电机:Electric§r +item.highEnergyMixture.0.name=高能混合物 +item.saltyRoot.0.name=盐根 +item.huiCircuit.0.name=高算力工作站 MK-I +item.huiCircuit.1.name=高算力工作站 MK-II +item.huiCircuit.2.name=高算力工作站 MK-III +item.huiCircuit.3.name=高算力工作站 MK-IV +item.huiCircuit.4.name=高算力工作站 MK-V + +#Crops +crops.saltroot=盐根 + +#Tooltip +inverter.tooltip.0=将直流电转化为交流电. +naquadahMass.tooltip.0=远不够纯. +enrichedNaquadahMass.tooltip.0=一种强烈的满足感. +naquadriaMass.tooltip.0=什么? +EssentiaHatch.tooltip.0=手持源质罐子右键以设置过滤. +EssentiaHatch.tooltip.1=空手Shift右键以重置过滤. +fuelrod.tooltip.0=耐久:%s/%s +fuelrodheat.tooltip.0=具有与铀相同的发热量 +fuelrodheat.tooltip.1=发热量是铀的%s倍 +fuelrodheat.tooltip.2=具有MOX特性 +depletedfuelrod.tooltip.0=枯竭 +YOTTankCell.tooltip.0=容量: +YOTTankCell.tooltip.1=用于YOT储罐的流体单元 +hatchTier.tooltip.0=仓室等级: +huiCircuit.tooltip.0=§b93015-T浮点运算/秒§r +huiCircuit.tooltip.1=§e76M处理单元§r +huiCircuit.tooltip.2=§a无效RSA算法§r +huiCircuit.tooltip.3=§c第56梅森素数§r +huiCircuit.tooltip.4=§5佯谬§r +EssentiaOutputHatch.tooltip.0=空手右键清空容器. +EssentiaOutputHatch.tooltip.1=容量: + +#Fluids +fluid.lightlyCrackedNaquadahGas=轻度裂化硅岩气 +fluid.moderatelyCrackedNaquadahGas=中度裂化硅岩气 +fluid.heavilyCrackedNaquadahGas=重度裂化硅岩气 +fluid.lightlyCrackedLightNaquadahFuel=轻度裂化轻质硅岩燃料 +fluid.moderatelyCrackedLightNaquadahFuel=中度裂化轻质硅岩燃料 +fluid.heavilyCrackedLightNaquadahFuel=重度裂化轻质硅岩燃料 +fluid.lightlyCrackedHeavyNaquadahFuel=轻度裂化重质硅岩燃料 +fluid.moderatelyCrackedHeavyNaquadahFuel=中度裂化重质硅岩燃料 +fluid.heavilyCrackedHeavyNaquadahFuel=重度裂化重质硅岩燃料 +fluid.lightlyCrackedNaquadahAsphalt=轻度裂化硅岩沥青 +fluid.moderatelyCrackedNaquadahAsphalt=中度裂化硅岩沥青 +fluid.heavilyCrackedNaquadahAsphalt=重度裂化硅岩沥青 +fluid.combustionPromotor=助燃剂 +fluid.fluid.coalTar=煤焦 +fluid.supercriticalSteam=超临界蒸汽 +fluid.Naquadah Based Liquid Fuel MkI (Depleted)=硅岩基流体燃料-MkI(枯竭的) +fluid.Acid Naquadah Emulsion=酸性硅岩乳液 +fluid.Antimony Pentafluoride=五氟化锑 +fluid.Naquadah Solution=硅岩溶液 +fluid.Thorium Based Liquid Fuel (Excited State)=钍基流体燃料(激发态) +fluid.Naquadah Based Liquid Fuel MkV=硅岩基流体燃料-MkV +fluid.Fluoroantimonic Acid=氟锑酸 +fluid.Thorium Tetrafluoride=四氟化钍 +fluid.Thorium-232 Tetrafluoride=四氟化钍-232 +fluid.Naquadah Based Liquid Fuel MkII (Depleted)=硅岩基流体燃料-MkII(枯竭的) +fluid.Ether=乙醚 +fluid.Naquadah Based Liquid Fuel MkIV=硅岩基流体燃料-MkIV +fluid.Thorium Based Liquid Fuel=钍基流体燃料 +fluid.Antimony Pentachloride Solution=五氯化锑溶液 +fluid.Naquadah Based Liquid Fuel MkIII (Depleted)=硅岩基流体燃料-MkIII(枯竭的) +fluid.Naquadah Based Liquid Fuel MkV (Depleted)=硅岩基流体燃料-MkV(枯竭的) +fluid.Heavy Naquadah Fuel=重质硅岩燃料 +fluid.Antimony Pentachloride=五氯化锑 +fluid.Light Naquadah Fuel=轻质硅岩燃料 +fluid.Plutonium Based Liquid Fuel (Excited State)=钚基流体燃料(激发态) +fluid.Uranium Based Liquid Fuel (Depleted)=铀基流体燃料(枯竭的) +fluid.Thorium Nitrate=硝酸钍 +fluid.Naquadah Based Liquid Fuel MkIII=硅岩基流体燃料-MkIII +fluid.Naquadah Asphalt=硅岩沥青 +fluid.Naquadah Based Liquid Fuel MkI=硅岩基流体燃料-MkI +fluid.Antimony Trichloride Solution=三氯化锑溶液 +fluid.Naquadah Gas=硅岩气 +fluid.Naquadah Based Liquid Fuel MkII=硅岩基流体燃料-MkII +fluid.Oxalate=草酸 +fluid.Uranium Based Liquid Fuel=铀基流体燃料 +fluid.Naquadah Emulsion=硅岩乳液 +fluid.Plutonium Based Liquid Fuel=钚基流体燃料 +fluid.Plutonium Based Liquid Fuel (Depleted)=钚基流体燃料(枯竭的) +fluid.Naquadah Based Liquid Fuel MkIV (Depleted)=硅岩基流体燃料-MkIV(枯竭的) +fluid.Thorium Based Liquid Fuel (Depleted)=钍基流体燃料(枯竭的) +fluid.thorium Tetrachloride=四氯化钍 +fluid.Uranium Based Liquid Fuel (Excited State)=铀基流体燃料(激发态) +fluid.Low Quality Naquadah Emulsion=低纯硅岩乳液 +fluid.2-Ethyl-1-Hexanol=2-乙基己醇 +fluid.P-507=P-507 +fluid.Naquadah-Adamantium Solution=硅岩-精金溶液 +fluid.Naquadah-Rich Solution=高纯硅岩溶液 +fluid.Fluorine-Rich Waste Liquid=富氟废液 +fluid.Waste Liquid=废液 +fluid.Enriched-Naquadah-Rich Solution=高纯富集硅岩溶液 +fluid.Naquadria-Rich Solution=高纯超能硅岩溶液 +fluid.Low Quality Naquadria Sulphate=低纯硫酸超能硅岩 +fluid.Naquadah Goo=硅岩粘浆 +fluid.Enriched Naquadah Goo=富集硅岩粘浆 +fluid.Naquadria Goo=超能硅岩粘浆 +fluid.Diethylamine=二乙胺 +fluid.Cyclopentadiene=环戊二烯 +fluid.Jet Fuel No.3=航空煤油#3 +fluid.Ferrocene Solution=二茂铁溶液 +fluid.Impure Ferrocene Mixture=不纯二茂铁混合物 +fluid.Ethanol Gasoline=乙醇汽油 +fluid.Iron II Chloride=氯化亚铁 +fluid.Low Quality Naquadah Solution=低纯硅岩溶液 +fluid.Ferrocene Waste=二茂铁废水 +fluid.Jet Fuel A=航空煤油A +fluid.Thorium Tetrachloride=四氯化钍 + +#Fluid Tiles +tile.lightlyCrackedNaquadahGas.name=轻度裂化硅岩气 +tile.moderatelyCrackedNaquadahGas.name=中度裂化硅岩气 +tile.heavilyCrackedNaquadahGas.name=重度裂化硅岩气 +tile.lightlyCrackedLightNaquadahFuel.name=轻度裂化轻质硅岩燃料 +tile.moderatelyCrackedLightNaquadahFuel.name=中度裂化轻质硅岩燃料 +tile.heavilyCrackedLightNaquadahFuel.name=重度裂化轻质硅岩燃料 +tile.lightlyCrackedHeavyNaquadahFuel.name=轻度裂化重质硅岩燃料 +tile.moderatelyCrackedHeavyNaquadahFuel.name=中度裂化重质硅岩燃料 +tile.heavilyCrackedHeavyNaquadahFuel.name=重度裂化重质硅岩燃料 +tile.lightlyCrackedNaquadahAsphalt.name=轻度裂化硅岩沥青 +tile.moderatelyCrackedNaquadahAsphalt.name=中度裂化硅岩沥青 +tile.heavilyCrackedNaquadahAsphalt.name=重度裂化硅岩沥青 +tile.combustionPromotor.name=助燃剂 +tile.coalTar.name=煤焦 +tile.supercriticalSteam.name=超临界蒸汽 + +#Tab Name +itemGroup.Good Generator=更多发电机 +itemGroup.Nuclear Items=[GG]多方块核反应堆 + +#Scanner Info +scanner.info.FRF=线圈等级: +scanner.info.NA=当前中子动能: +scanner.info.YOTTank.0=当前容量: +scanner.info.YOTTank.1=流体名: +scanner.info.YOTTank.2=当前已用: +scanner.info.XHE.0=输出蒸汽量: +scanner.info.XHE.1=超临界阈值: +scanner.info.UX.0=并行运行: + +#GUI Info +gui.NeutronSensor.0=输入中子动能值. +gui.NeutronSensor.1=例如 >5000KeV, <=30MeV . . . +gui.NeutronSensor.2=有效 +gui.NeutronSensor.3=无效 +gui.NeutronActivator.0=当前中子动能: +gui.NeutronActivator.1=输入: +gui.YOTTank.0=容量: +gui.YOTTank.1=流体: +gui.YOTTank.2=已存储: +gui.LargeFusion.0=能量容量: +gui.LargeFusion.1=储存能量: + +# RecipeMaps +gg.recipe.naquadah_reactor=大型硅岩反应堆 +gg.recipe.naquadah_fuel_refine_factory=硅岩燃料精炼厂 +gg.recipe.neutron_activator=中子活化器 +gg.recipe.extreme_heat_exchanger=超级热交换机 +gg.recipe.precise_assembler=精密组装机 + +#NEI Info +value.naquadah_reactor=基础输出电压: %s EU/t +value.naquadah_fuel_refine_factory=要求等级 %s 线圈 +value.neutron_activator.0=最低中子动能: +value.neutron_activator.1=最高中子动能: +value.neutron_activator.2= MeV +value.extreme_heat_exchanger.0=最大热流体输入: +value.extreme_heat_exchanger.1=最大工质输入: +value.extreme_heat_exchanger.2=最大热工质输出: +value.extreme_heat_exchanger.4=阈值: +value.precise_assembler=要求 MK-%s 机械方块 + +#TecTech Structure Info +FuelRefineFactory.hint.0=8x力场约束玻璃 +FuelRefineFactory.hint.1=32x力场约束线圈(任意等级) +FuelRefineFactory.hint.2=104x硅岩燃料精炼机械方块(至少!) +FuelRefineFactory.hint.3=1~16x输入仓 +FuelRefineFactory.hint.4=1~16x输出仓 +FuelRefineFactory.hint.5=1~16x输入总线 +FuelRefineFactory.hint.6=1~16x能源仓 +FuelRefineFactory.hint.7=所有仓室必须与力场约束玻璃相邻 +MultiNqGenerator.hint.0=6x钨钢管道方块 +MultiNqGenerator.hint.1=48x力场约束机械方块 +MultiNqGenerator.hint.2=36x防辐射钢框架 +MultiNqGenerator.hint.3=77x防辐射机械方块(至少!) +MultiNqGenerator.hint.4=1~4x输入仓 +MultiNqGenerator.hint.5=0~1x输出仓 +MultiNqGenerator.hint.6=1x维护仓 +MultiNqGenerator.hint.7=1x动力仓 +UniversalChemicalFuelEngine.hint.0=93x加强钛机械方块 +UniversalChemicalFuelEngine.hint.1=14x钛管道方块 +UniversalChemicalFuelEngine.hint.2=14x钛齿轮机械方块 +UniversalChemicalFuelEngine.hint.3=14x镀钛气缸 +UniversalChemicalFuelEngine.hint.4=14x引擎进气机械方块 +UniversalChemicalFuelEngine.hint.5=0 - 空气 +UniversalChemicalFuelEngine.hint.6=1 - 维护仓 +UniversalChemicalFuelEngine.hint.7=2 - 消声仓 +UniversalChemicalFuelEngine.hint.8=3 - 输入仓 +UniversalChemicalFuelEngine.hint.9=4 - 动力仓 +UniversalChemicalFuelEngine.hint.10=支持TecTech动力仓 +LargeEssentiaGenerator.hint.0=25x任意源质扩散单元 +LargeEssentiaGenerator.hint.1=4x琥珀砖块 +LargeEssentiaGenerator.hint.2=24x奥术石砖 +LargeEssentiaGenerator.hint.3=53x魔法机械方块(至少!) +LargeEssentiaGenerator.hint.4=1x动力仓 +LargeEssentiaGenerator.hint.5=1 - 维护仓/输入仓/动力仓/源质输入仓 +NeutronActivator.hint.0=16x钢框架 +NeutronActivator.hint.1=18x处理器机械方块 +NeutronActivator.hint.2=4x高速管道方块 +NeutronActivator.hint.3=7x洁净不锈钢机械方块(至少!) +NeutronActivator.hint.4=1 - 输入仓/输入总线/洁净不锈钢机械方块 +NeutronActivator.hint.5=2 - 输出仓/输出总线/维护仓/中子加速器/中子传感器/洁净不锈钢机械方块 +NeutronActivator.hint.6=3 - EV+ Tier Glass +YOTTank.hint.0=47xYOT机械方块(至少!) +YOTTank.hint.1=16x钢框架 +YOTTank.hint.2=16x同级硼玻璃方块(每层) +YOTTank.hint.3=9x流体单元方块(每层) +YOTTank.hint.4=1 - 输入仓/YOT机械方块 +YOTTank.hint.5=2 - 维护仓/YOT机械方块 +YOTTank.hint.6=3 - 输出仓/YOT仓 +YOTTank.hint.7=每台YOT储罐只接受一个YOT仓. +ExtremeHeatExchanger.hint.0=25x强化钨钢机械方块(至少!) +ExtremeHeatExchanger.hint.1=1 - 输入仓(蒸馏水) +ExtremeHeatExchanger.hint.2=2 - 输出仓(超临界蒸汽/过热蒸汽/蒸汽) +ExtremeHeatExchanger.hint.3=3 - 输入仓(热流体) +ExtremeHeatExchanger.hint.4=4 - 输出仓(冷流体) +ExtremeHeatExchanger.hint.5=任意机械方块 - 维护仓 +PreciseAssembler.hint.0=12x精密电子单元机械方块(至少!) +PreciseAssembler.hint.1=12x钨钢框架 +PreciseAssembler.hint.2=42x防爆玻璃 +PreciseAssembler.hint.3=21x机械方块(不是机器外壳!) +PreciseAssembler.hint.4=1 - 输入仓/输入总线/输出总线/精密电子单元机械方块 +PreciseAssembler.hint.6=支持 TecTech能源仓! +LargeFusion1.hint.0=1666xLuV机械方块(至少!) +LargeFusion1.hint.1=63x铬强化硼玻璃方块(至少!) +LargeFusion1.hint.2=558x改良型超导线圈方块 +LargeFusion1.hint.3=128x硅岩合金框架 +LargeFusion1.hint.4=1 - 输入仓 +LargeFusion1.hint.5=2 - 输出仓 +LargeFusion1.hint.6=3 - 能源仓 +LargeFusion1.hint.7=所有仓室必须为LuV以上 +LargeFusion1.hint.8=支持TecTech能源仓. +LargeFusion2.hint.0=1666x聚变机械方块(至少!) +LargeFusion2.hint.1=63x铱强化硼玻璃方块(至少!) +LargeFusion2.hint.2=558x压缩聚变线圈方块 +LargeFusion2.hint.3=128x铿铀框架 +LargeFusion2.hint.4=1 - 输入仓 +LargeFusion2.hint.5=2 - 输出仓 +LargeFusion2.hint.6=3 - 能源仓 +LargeFusion2.hint.7=所有仓室必须为ZPM以上 +LargeFusion2.hint.8=支持TecTech能源仓. +LargeFusion3.hint.0=1666x聚变机械方块MK II(至少!) +LargeFusion3.hint.1=63x锇强化硼玻璃方块(至少!) +LargeFusion3.hint.2=558x进阶压缩聚变线圈方块 +LargeFusion3.hint.3=128x中子锭框架 +LargeFusion3.hint.4=1 - 输入仓 +LargeFusion3.hint.5=2 - 输出仓 +LargeFusion3.hint.6=3 - 能源仓 +LargeFusion3.hint.7=所有仓室必须为UV以上 +LargeFusion3.hint.8=支持TecTech能源仓. +LargeFusion4.hint.0=1666x聚变机械方块MK III(至少!) +LargeFusion4.hint.1=63x铀强化硼玻璃方块(至少!) +LargeFusion4.hint.2=558x压缩聚变线圈方块MK-II原型 +LargeFusion4.hint.3=128x无尽催化剂框架 +LargeFusion4.hint.4=1 - 输入仓 +LargeFusion4.hint.5=2 - 输出仓 +LargeFusion4.hint.6=3 - 能源仓 +LargeFusion4.hint.7=所有仓室必须为UHV以上 +LargeFusion4.hint.8=支持TecTech能源仓. +LargeFusion5.hint.0=1666x聚变机械方块MK IV(至少!) +LargeFusion5.hint.1=63x铕强化硼玻璃方块(至少!) +LargeFusion5.hint.2=558x压缩聚变线圈方块MK-II +LargeFusion5.hint.3=128x无尽框架 +LargeFusion5.hint.4=1 - 输入仓 +LargeFusion5.hint.5=2 - 输出仓 +LargeFusion5.hint.6=3 - 能源仓 +LargeFusion5.hint.7=所有仓室必须为UEV以上 +LargeFusion5.hint.8=支持TecTech能源仓. +LargeEssentiaSmeltery.hint.0=24x魔法机械方块(至少!) +LargeEssentiaSmeltery.hint.1=12x源质扩散单元(至少!) +LargeEssentiaSmeltery.hint.2=3x高级炼金炉(至少!) +LargeEssentiaSmeltery.hint.3=3x源质过滤方块(至少!) +LargeEssentiaSmeltery.hint.4=0 - 空气 +LargeEssentiaSmeltery.hint.5=1 - 基础仓室/魔法机械方块 +LargeEssentiaSmeltery.hint.6=2 - 消声仓 +LargeEssentiaSmeltery.hint.7=支持TecTech能源仓. + +#Chat +largeessentiagenerator.chat= 已安装! +essentiahatch.chat.0=成功锁定为 %s. +essentiahatch.chat.1=已清除. +yothatch.chat.0=存储优先级设为 %s. +yothatch.chat.1=设置为 %s 模式 +yottank.chat.0=清空锁定过滤器 +yottank.chat.1=锁定为 %s +preciseassembler.chat.0=精密模式 +preciseassembler.chat.1=普通模式 + +#Achievement +achievement.gt.blockmachines.nag=大型硅岩反应堆 +achievement.gt.blockmachines.nag.desc=捡起这个物品以在NEI内查看配方 +achievement.gt.blockmachines.frf=硅岩燃料精炼厂 +achievement.gt.blockmachines.frf.desc=捡起这个物品以在NEI内查看配方 +achievement.FRF_Casing.0=硅岩燃料精炼机械方块 +achievement.FRF_Casing.0.desc=捡起这个物品以在NEI内查看配方 +achievement.FRF_Coil_1.0=力场约束线圈 +achievement.FRF_Coil_1.0.desc=捡起这个物品以在NEI内查看配方 +achievement.FRF_Coil_2.0=进阶力场约束线圈 +achievement.FRF_Coil_2.0.desc=捡起这个物品以在NEI内查看配方 +achievement.FRF_Coil_3.0=终极力场约束线圈 +achievement.FRF_Coil_3.0.desc=捡起这个物品以在NEI内查看配方 +achievement.gt.blockmachines.neutron_accelerator_luv=Luv中子加速器 +achievement.gt.blockmachines.neutron_accelerator_luv.desc=你真的想要它吗? +achievement.item.fluidCore.1=流体存储核心T2 +achievement.item.fluidCore.1.desc=捡起这个物品以在NEI内查看配方 +achievement.item.fluidCore.2=流体存储核心T3 +achievement.item.fluidCore.2.desc=捡起这个物品以在NEI内查看配方 +achievement.item.fluidCore.3=流体存储核心T4 +achievement.item.fluidCore.3.desc=捡起这个物品以在NEI内查看配方 +achievement.item.fluidCore.4=流体存储核心T5 +achievement.item.fluidCore.4.desc=捡起这个物品以在NEI内查看配方 +achievement.item.fluidCore.5=流体存储核心T6 +achievement.item.fluidCore.5.desc=捡起这个物品以在NEI内查看配方 +achievement.yottaFluidTankCell.2=流体单元方块T3 +achievement.yottaFluidTankCell.2.desc=捡起这个物品以在NEI内查看配方 +achievement.yottaFluidTankCell.3=流体单元方块T4 +achievement.yottaFluidTankCell.3.desc=捡起这个物品以在NEI内查看配方 +achievement.yottaFluidTankCell.4=流体单元方块T5 +achievement.yottaFluidTankCell.4.desc=捡起这个物品以在NEI内查看配方 +achievement.yottaFluidTankCell.5=流体单元方块T6 +achievement.yottaFluidTankCell.5.desc=捡起这个物品以在NEI内查看配方 +achievement.gt.blockmachines.largefusioncomputer2=聚变不嫌多 +achievement.gt.blockmachines.largefusioncomputer2.desc=捡起这个物品以在NEI内查看配方 +achievement.gt.blockmachines.largefusioncomputer3=PROJECT MOISS +achievement.gt.blockmachines.largefusioncomputer3.desc=捡起这个物品以在NEI内查看配方 +achievement.gt.blockmachines.largefusioncomputer4=イワシがつちからはえてくるんだ +achievement.gt.blockmachines.largefusioncomputer4.desc=捡起这个物品以在NEI内查看配方 +achievement.gt.blockmachines.largefusioncomputer5=XXXX +achievement.gt.blockmachines.largefusioncomputer5.desc=捡起这个物品以在NEI内查看配方 + +#Thaumcraft Research Context +research.ESSENTIA_GENERATOR.page.0=你发现源质内蕴含的能量超乎你的想象.有没有用这些源质发电的方法呢?<BR><BR>LEG(大型源质发电机)可以根据动力仓自动调整其输出电压. 扩散单元决定了LEG可接受的最高仓室等级. +research.ESSENTIA_GENERATOR.page.1=目前只有以下源质可以无需升级,直接转化为能量:<BR><BR>Terra:800EU<BR><BR>Aqua:5000EU<BR><BR>Ordo:12000EU<BR><BR>Lux:13000EU<BR><BR>Tempestas:61200EU<BR><BR>Gelum:3900EU<BR><BR>Vitreus:2000EU<BR><BR>Potentia:25600EU<BR><BR>Permutatio:6000EU<BR><BR>Metallum:2600EU +research.ESSENTIA_GENERATOR.page.2=Tenebrae:9000EU<BR><BR>Praecantatio:36000EU<BR><BR>Herba:2600EU<BR><BR>Arbor:4500EU<BR><BR>Bestia:1000EU<BR><BR>Messis:9800EU<BR><BR>Perfodio:1300EU<BR><BR>Instrumentum:1200EU<BR><BR>Meto:3600EU<BR><BR>Tutamen:6200EU<BR><BR>Fabrico:1100EU +research.ESSENTIA_GENERATOR.page.3=Pannus:600EU<BR><BR>Vinculum:500EU<BR><BR>Magneto:108000EU<BR><BR>Vesania:1EU<BR><BR>Primordium:217000<BR><BR>Gula:64000EU<BR><BR>Tempus:142857EU<BR><BR>如果想用其他源质作为燃料,你需要为你的发电机加装相应升级. +research.ESSENTIA_CELL.page.0=新手源质扩散单元的效率实在太低,你完全不能忍受. 所以你研发了一些新的源质扩散单元<BR><BR>新手源质扩散单元只提供1稳定点,学徒级的单元可以提供2稳定点,大师级的单元可以提供5稳定点,而宗师级的单元可以提供足足10稳定点!<BR><BR>随着稳定点越高,每点源质在发电机中产生的能量就越多.<BR><BR>同时也可以解锁更好的仓室. +research.ESSENTIA_UPGRADE_BLANK.page.0=空白升级!我感觉它有无限可能.<BR><BR>除了几种特殊源质,大部分源质需要额外流体帮助其在单元中扩散或提高燃烧效率.而没有这些特殊流体,源质将阻塞单元的缝隙,造成效率低下甚至无法输出.你可以为一台大型源质发电机安装多种升级.<BR><BR>计算流体消耗速度的公式如下:<BR>基础消耗速度*源质系数*已消耗源质量 +research.ESSENTIA_UPGRADE_AIR.page.0=这类源质与空气具有很高的亲和性,需要空气辅助其扩散.<BR><BR>我们可以使用更浓缩的液态空气以进一步提高源质效率.<BR><BR>基础消耗速度为160L/秒. +research.ESSENTIA_UPGRADE_AIR.page.1=可用源质:<BR><BR>Aer:10000EU;系数:x1.0<BR><BR>Motus:20000EU;系数:x0.5<BR><BR>Volatus:56000EU;系数:x2.0<BR><BR>Auram:42000EU;系数:x2.7<BR><BR>需要流体:<BR><BR>空气:效率:x1.0<BR><BR>液态空气:效率:x1.5 +research.ESSENTIA_UPGRADE_THERMAL.page.0=来自这类源质的能量无法完全被转化为电能,部分能量会被转化为热能,并加热扩散单元.<BR><BR>所以需要冷却液以保证发电机的稳定运行,而更好的冷却液可以使源质安全地释放更多能量.<BR><BR>基础消耗速度为40L/秒. +research.ESSENTIA_UPGRADE_THERMAL.page.1=可用源质:<BR><BR>Ignis:16000EU;系数:x1.0<BR><BR>Aequalitas:300000EU;系数:x7.0<BR><BR>Volatus:56000EU;系数:x2.0<BR><BR>Infernus:35700EU;系数:x3.0<BR><BR>Ira:82600EU;系数:x5.0 +research.ESSENTIA_UPGRADE_THERMAL.page.2=需要流体:<BR><BR>水:效率:x0.5<BR><BR>蒸馏水:效率:x1.0<BR><BR>碎冰:效率:x1.2<BR><BR>IC2冷却液:效率:x1.5<BR><BR>极寒之凛冰:效率:x5.0<BR><BR>超级冷却液:效率:x9.0 +research.ESSENTIA_UPGRADE_UNSTABLE.page.0=这类源质易与空气发生反应,往往会破坏扩散单元.<BR><BR>所以需要使用惰性气体保护扩散单元.<BR><BR>气体惰性越高,源质就能安全地释放越多能量.<BR><BR>基础消耗速度为80L/秒. +research.ESSENTIA_UPGRADE_UNSTABLE.page.1=可用源质:<BR><BR>Perditio:4500EU;系数:x1.0<BR><BR>Vacuos:8200EU;系数:x1.5<BR><BR>Venenum:17000EU;系数:x2.0<BR><BR>Telum:14200EU;系数:x2.5<BR><BR>Terminus:300000EU;系数:x10.0 +research.ESSENTIA_UPGRADE_UNSTABLE.page.2=需要流体:<BR><BR>氮:效率:x1.0<BR><BR>氦:效率:x2.0<BR><BR>氖:效率:x2.2<BR><BR>氩:效率:x2.5<BR><BR>氪:效率:x3.0<BR><BR>氙:效率:x4.0 +research.ESSENTIA_UPGRADE_VICTUS.page.0=这类源质蕴含生命的本质.<BR><BR>大部分无法直接转化为能量,但你可以为其提供生命本质,大大增强它们的转化率.<BR><BR>基础消耗速度为360L/秒. +research.ESSENTIA_UPGRADE_VICTUS.page.1=可用源质:<BR><BR>Victus:20000EU;系数:x1.0<BR><BR>Spiritus:37600EU;系数:x0.7<BR><BR>Sano:24600EU;系数:x1.2<BR><BR>Corpus:5200EU;系数:x0.9<BR><BR>Humanus:16700EU;系数:x1.3<BR><BR>Fames:17600EU;系数:x1.1<BR><BR>Gloria:120000EU;系数:x0.6 +research.ESSENTIA_UPGRADE_VICTUS.page.2=可选流体:<BR><BR>液态XP:效率:x2.0<BR><BR>生命本质:效率:x6.0 +research.ESSENTIA_UPGRADE_TAINTED.page.0=这类源质内含黑暗的能量.运行时可能产生咒波污染.<BR><BR>你可以为其提供净化之水或死亡之水...这会产生两种不同的效果.<BR><BR>净化之水可以净化源质,大大提升输出能量,且不会产生咒波污染.<BR><BR>死亡之水无法溶解源质,但将其加入已扩散的源质可以产生很棒的效果:源质的基础燃值越低,释放的黑暗能量越多. +research.ESSENTIA_UPGRADE_TAINTED.page.1=基础消耗速度为60L/秒. +research.ESSENTIA_UPGRADE_TAINTED.page.2=可用源质:<BR><BR>Mortuus:7200EU;系数:x1.0<BR><BR>Alienis:9700EU;系数:x1.7<BR><BR>Vitium:4700EU;系数:x10.0<BR><BR>Exanimis:9000EU;系数:x1.2 +research.ESSENTIA_UPGRADE_TAINTED.page.3=可选流体:<BR><BR>净化之水:效率:x60.0<BR><BR>死亡之水:效率:x(25000/基础燃值)^4 +research.ESSENTIA_UPGRADE_MECHANICS.page.0=这类源质必须处于快速流动中才能释放能量.<BR><BR>需要润滑油来为源质提供足够的流动性<BR><BR>基础消耗速度为400L/秒. +research.ESSENTIA_UPGRADE_MECHANICS.page.1=可用源质:<BR><BR>Iter:16000EU<BR><BR>Machina:61200EU<BR><BR>Limus:11800EU<BR><BR>系数均为x1.0 +research.ESSENTIA_UPGRADE_MECHANICS.page.2=需要流体:<BR><BR>润滑油:效率:x1.0 +research.ESSENTIA_UPGRADE_SPRITE.page.0=精神类的源质的直接产能很低.只有用水心或虚伪泪水激活后,它们才能展示正在的能量.<BR><BR>当扩散单元的稳定点较低时,虚伪泪水可以从源质中激发出更多能量.而稳定点较高时,只能用水心才能激发出源质的真正能量.<BR><BR>基础消耗速度为40L/秒. +research.ESSENTIA_UPGRADE_SPRITE.page.1=可用源质:<BR><BR>Cognitio:2200EU;系数:x1.2<BR><BR>Sensus:1400EU;系数:x0.7<BR><BR>Lucrum:6000EU;系数:x2.0<BR><BR>Strontio:200EU;系数:x0.03<BR><BR>Nebrisum:24300EU;系数:x2.0<BR><BR>Luxuria:79200EU;系数:x3.7<BR><BR>Superbia:10900EU;系数:x2.1<BR><BR>Invidia:7700EU;系数:x1.0<BR><BR>Desidia:600EU;系数:x0.1 +research.ESSENTIA_UPGRADE_SPRITE.page.2=可选流体:<BR><BR>虚伪泪水:效率:x15x(1+100/稳定点)<BR><BR>水心:效率:x10x(1+稳定点/100)<BR><BR>简而言之,稳定点超过150后,水心的效率更高. +research.ESSENTIA_UPGRADE_RADIATION.page.0=用这类源质发电类似于用核燃料发电,不同之处在于源质是纯粹的"放射性"属性,而核燃料还有些乱七八糟的东西.<BR><BR>但是,提升核燃料输出的方法同样适用于此,可以直接提升源质释放的能量.<BR><BR>基础消耗速度为120L/秒. +research.ESSENTIA_UPGRADE_RADIATION.page.1=可用源质:<BR><BR>Radio:238000EU;系数:x1.0<BR><BR>Astrum:118000EU;系数:x0.5 +research.ESSENTIA_UPGRADE_RADIATION.page.2=可选流体:<BR><BR>熔融铯:效率:x2.0<BR><BR>熔融铀-235:效率:x3.0<BR><BR>熔融硅岩:效率:x4.0<BR><BR>熔融原子分离催化剂:效率:x16.0 +research.ESSENTIA_UPGRADE_ELECTRIC.page.0=ELECTRUM源质本身就代表了电力!<BR><BR>发电机的动力仓电压越高,ELECTRUM源质被越强的电势差影响,发电量就越高. +research.ESSENTIA_UPGRADE_ELECTRIC.page.1=可用源质:Electrum<BR><BR>能量公式:<BR>8x(3.0^动力仓等级)EU +research.ESSENTIA_SMELTERY.page.0=荒古炼金炉已经不足以支撑你的源质生产了...<BR><BR>LES(大型源质冶炼厂)是荒古炼金炉的进阶版,消耗电力和cent-vis冶炼源质. +research.ESSENTIA_SMELTERY.page.1=Ignis与Aqua是LES运行的基本条件,最低需求约为最高能源仓等级^2*1.15cv/每次工作,满足后机器才能运行.<BR><BR>Ordo影响污染、咒波瓦斯生成概率(冶炼源质时随机在消声仓仓口排出咒波瓦斯).<BR><BR>Perditio可以加速机器工作,最高200%(100cv/5t). +research.ESSENTIA_SMELTERY.page.2=扩散单元等级及结构大小仅影响机器并行,最大并行为64x.<BR><BR>不含源质的物品会冶炼出1点perditio. +research.ESSENTIA_OUTPUT_HATCH_ME.page.0=总有一天你会用到它...<BR><BR>务必连接网络使用,它没有缓存! diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/FRF_Coils/1.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/FRF_Coils/1.png Binary files differnew file mode 100644 index 0000000000..8c0ff16264 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/FRF_Coils/1.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/FRF_Coils/2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/FRF_Coils/2.png Binary files differnew file mode 100644 index 0000000000..a299ca6bfd --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/FRF_Coils/2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/FRF_Coils/3.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/FRF_Coils/3.png Binary files differnew file mode 100644 index 0000000000..25dd302112 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/FRF_Coils/3.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/FRF_Coils/4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/FRF_Coils/4.png Binary files differnew file mode 100644 index 0000000000..a1410731e6 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/FRF_Coils/4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/MAR_Casing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/MAR_Casing.png Binary files differnew file mode 100644 index 0000000000..c59b86c91a --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/MAR_Casing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/MagicCasing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/MagicCasing.png Binary files differnew file mode 100644 index 0000000000..7506fe8cc9 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/MagicCasing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/0.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/0.png Binary files differnew file mode 100644 index 0000000000..24ca2d49cd --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/0.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/1.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/1.png Binary files differnew file mode 100644 index 0000000000..a7422006a5 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/1.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/10.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/10.png Binary files differnew file mode 100644 index 0000000000..f87e748701 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/10.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/11.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/11.png Binary files differnew file mode 100644 index 0000000000..a1f0aab3e4 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/11.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/12.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/12.png Binary files differnew file mode 100644 index 0000000000..fd2c08ec9e --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/12.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/13.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/13.png Binary files differnew file mode 100644 index 0000000000..74a9f9b0d9 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/13.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/2.png Binary files differnew file mode 100644 index 0000000000..d7ba583b6d --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/3.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/3.png Binary files differnew file mode 100644 index 0000000000..cd2f9870df --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/3.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/4.png Binary files differnew file mode 100644 index 0000000000..ec6c14210f --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/5.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/5.png Binary files differnew file mode 100644 index 0000000000..6f26a6ad1b --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/5.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/6.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/6.png Binary files differnew file mode 100644 index 0000000000..a1d7057330 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/6.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/7.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/7.png Binary files differnew file mode 100644 index 0000000000..913bcc4e83 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/7.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/8.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/8.png Binary files differnew file mode 100644 index 0000000000..3154df6ade --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/8.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/9.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/9.png Binary files differnew file mode 100644 index 0000000000..6f933cc98e --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/compAsslineCasing/9.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/crops/saltroot.1.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/crops/saltroot.1.png Binary files differnew file mode 100644 index 0000000000..7a42648994 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/crops/saltroot.1.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/crops/saltroot.2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/crops/saltroot.2.png Binary files differnew file mode 100644 index 0000000000..ee47afdea5 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/crops/saltroot.2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/crops/saltroot.3.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/crops/saltroot.3.png Binary files differnew file mode 100644 index 0000000000..1ef46580b7 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/crops/saltroot.3.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaCell/1.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaCell/1.png Binary files differnew file mode 100644 index 0000000000..21bc344c9c --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaCell/1.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaCell/2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaCell/2.png Binary files differnew file mode 100644 index 0000000000..fd6f9d0d4b --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaCell/2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaCell/3.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaCell/3.png Binary files differnew file mode 100644 index 0000000000..c3a976cc13 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaCell/3.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaCell/4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaCell/4.png Binary files differnew file mode 100644 index 0000000000..2f5df7876d --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaCell/4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaFilterCasing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaFilterCasing.png Binary files differnew file mode 100644 index 0000000000..fc88af0128 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaFilterCasing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaHatch.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaHatch.png Binary files differnew file mode 100644 index 0000000000..9c4bc26458 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaHatch.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaOutputHatch.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaOutputHatch.png Binary files differnew file mode 100644 index 0000000000..cb8ae2931d --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaOutputHatch.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaOutputHatch_ME.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaOutputHatch_ME.png Binary files differnew file mode 100644 index 0000000000..58768ded09 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/essentiaOutputHatch_ME.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fieldRestrictingGlass.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fieldRestrictingGlass.png Binary files differnew file mode 100644 index 0000000000..e051ffdb10 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fieldRestrictingGlass.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/coalTar.flowing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/coalTar.flowing.png Binary files differnew file mode 100644 index 0000000000..891733b524 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/coalTar.flowing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/coalTar.flowing.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/coalTar.flowing.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/coalTar.flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/coalTar.still.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/coalTar.still.png Binary files differnew file mode 100644 index 0000000000..891733b524 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/coalTar.still.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/coalTar.still.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/coalTar.still.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/coalTar.still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/combustionPromotor.flowing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/combustionPromotor.flowing.png Binary files differnew file mode 100644 index 0000000000..fa65b1a41a --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/combustionPromotor.flowing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/combustionPromotor.flowing.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/combustionPromotor.flowing.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/combustionPromotor.flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/combustionPromotor.still.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/combustionPromotor.still.png Binary files differnew file mode 100644 index 0000000000..fa65b1a41a --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/combustionPromotor.still.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/combustionPromotor.still.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/combustionPromotor.still.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/combustionPromotor.still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedHeavyNaquadahFuel.flowing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedHeavyNaquadahFuel.flowing.png Binary files differnew file mode 100644 index 0000000000..2578680085 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedHeavyNaquadahFuel.flowing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedHeavyNaquadahFuel.flowing.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedHeavyNaquadahFuel.flowing.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedHeavyNaquadahFuel.flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedHeavyNaquadahFuel.still.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedHeavyNaquadahFuel.still.png Binary files differnew file mode 100644 index 0000000000..2578680085 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedHeavyNaquadahFuel.still.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedHeavyNaquadahFuel.still.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedHeavyNaquadahFuel.still.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedHeavyNaquadahFuel.still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedLightNaquadahFuel.flowing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedLightNaquadahFuel.flowing.png Binary files differnew file mode 100644 index 0000000000..068cab470c --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedLightNaquadahFuel.flowing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedLightNaquadahFuel.flowing.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedLightNaquadahFuel.flowing.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedLightNaquadahFuel.flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedLightNaquadahFuel.still.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedLightNaquadahFuel.still.png Binary files differnew file mode 100644 index 0000000000..068cab470c --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedLightNaquadahFuel.still.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedLightNaquadahFuel.still.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedLightNaquadahFuel.still.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedLightNaquadahFuel.still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahAsphalt.flowing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahAsphalt.flowing.png Binary files differnew file mode 100644 index 0000000000..b5508371ed --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahAsphalt.flowing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahAsphalt.flowing.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahAsphalt.flowing.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahAsphalt.flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahAsphalt.still.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahAsphalt.still.png Binary files differnew file mode 100644 index 0000000000..b5508371ed --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahAsphalt.still.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahAsphalt.still.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahAsphalt.still.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahAsphalt.still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahGas.flowing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahGas.flowing.png Binary files differnew file mode 100644 index 0000000000..da52d92df9 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahGas.flowing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahGas.flowing.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahGas.flowing.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahGas.flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahGas.still.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahGas.still.png Binary files differnew file mode 100644 index 0000000000..da52d92df9 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahGas.still.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahGas.still.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahGas.still.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/heavilyCrackedNaquadahGas.still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedHeavyNaquadahFuel.flowing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedHeavyNaquadahFuel.flowing.png Binary files differnew file mode 100644 index 0000000000..2578680085 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedHeavyNaquadahFuel.flowing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedHeavyNaquadahFuel.flowing.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedHeavyNaquadahFuel.flowing.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedHeavyNaquadahFuel.flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedHeavyNaquadahFuel.still.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedHeavyNaquadahFuel.still.png Binary files differnew file mode 100644 index 0000000000..2578680085 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedHeavyNaquadahFuel.still.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedHeavyNaquadahFuel.still.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedHeavyNaquadahFuel.still.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedHeavyNaquadahFuel.still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedLightNaquadahFuel.flowing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedLightNaquadahFuel.flowing.png Binary files differnew file mode 100644 index 0000000000..068cab470c --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedLightNaquadahFuel.flowing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedLightNaquadahFuel.flowing.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedLightNaquadahFuel.flowing.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedLightNaquadahFuel.flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedLightNaquadahFuel.still.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedLightNaquadahFuel.still.png Binary files differnew file mode 100644 index 0000000000..068cab470c --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedLightNaquadahFuel.still.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedLightNaquadahFuel.still.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedLightNaquadahFuel.still.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedLightNaquadahFuel.still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahAsphalt.flowing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahAsphalt.flowing.png Binary files differnew file mode 100644 index 0000000000..b5508371ed --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahAsphalt.flowing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahAsphalt.flowing.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahAsphalt.flowing.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahAsphalt.flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahAsphalt.still.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahAsphalt.still.png Binary files differnew file mode 100644 index 0000000000..b5508371ed --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahAsphalt.still.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahAsphalt.still.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahAsphalt.still.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahAsphalt.still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahGas.flowing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahGas.flowing.png Binary files differnew file mode 100644 index 0000000000..da52d92df9 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahGas.flowing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahGas.flowing.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahGas.flowing.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahGas.flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahGas.still.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahGas.still.png Binary files differnew file mode 100644 index 0000000000..da52d92df9 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahGas.still.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahGas.still.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahGas.still.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/lightlyCrackedNaquadahGas.still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedHeavyNaquadahFuel.flowing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedHeavyNaquadahFuel.flowing.png Binary files differnew file mode 100644 index 0000000000..2578680085 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedHeavyNaquadahFuel.flowing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedHeavyNaquadahFuel.flowing.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedHeavyNaquadahFuel.flowing.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedHeavyNaquadahFuel.flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedHeavyNaquadahFuel.still.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedHeavyNaquadahFuel.still.png Binary files differnew file mode 100644 index 0000000000..2578680085 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedHeavyNaquadahFuel.still.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedHeavyNaquadahFuel.still.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedHeavyNaquadahFuel.still.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedHeavyNaquadahFuel.still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedLightNaquadahFuel.flowing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedLightNaquadahFuel.flowing.png Binary files differnew file mode 100644 index 0000000000..068cab470c --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedLightNaquadahFuel.flowing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedLightNaquadahFuel.flowing.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedLightNaquadahFuel.flowing.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedLightNaquadahFuel.flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedLightNaquadahFuel.still.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedLightNaquadahFuel.still.png Binary files differnew file mode 100644 index 0000000000..068cab470c --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedLightNaquadahFuel.still.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedLightNaquadahFuel.still.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedLightNaquadahFuel.still.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedLightNaquadahFuel.still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahAsphalt.flowing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahAsphalt.flowing.png Binary files differnew file mode 100644 index 0000000000..b5508371ed --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahAsphalt.flowing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahAsphalt.flowing.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahAsphalt.flowing.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahAsphalt.flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahAsphalt.still.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahAsphalt.still.png Binary files differnew file mode 100644 index 0000000000..b5508371ed --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahAsphalt.still.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahAsphalt.still.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahAsphalt.still.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahAsphalt.still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahGas.flowing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahGas.flowing.png Binary files differnew file mode 100644 index 0000000000..da52d92df9 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahGas.flowing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahGas.flowing.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahGas.flowing.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahGas.flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahGas.still.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahGas.still.png Binary files differnew file mode 100644 index 0000000000..da52d92df9 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahGas.still.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahGas.still.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahGas.still.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/moderatelyCrackedNaquadahGas.still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/supercriticalSteam.flowing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/supercriticalSteam.flowing.png Binary files differnew file mode 100644 index 0000000000..82b938d8ce --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/supercriticalSteam.flowing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/supercriticalSteam.flowing.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/supercriticalSteam.flowing.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/supercriticalSteam.flowing.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/supercriticalSteam.still.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/supercriticalSteam.still.png Binary files differnew file mode 100644 index 0000000000..82b938d8ce --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/supercriticalSteam.still.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/supercriticalSteam.still.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/supercriticalSteam.still.png.mcmeta new file mode 100644 index 0000000000..83e994c588 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fluids/supercriticalSteam.still.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +} diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fuison/1.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fuison/1.png Binary files differnew file mode 100644 index 0000000000..4f31906248 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fuison/1.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fuison/2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fuison/2.png Binary files differnew file mode 100644 index 0000000000..e4db433a78 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fuison/2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fuison/3.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fuison/3.png Binary files differnew file mode 100644 index 0000000000..82feefcfbe --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fuison/3.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fuison/4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fuison/4.png Binary files differnew file mode 100644 index 0000000000..8169a29aee --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fuison/4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fuison/5.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fuison/5.png Binary files differnew file mode 100644 index 0000000000..e58da1b6f6 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/fuison/5.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/preciseUnitCasing/1.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/preciseUnitCasing/1.png Binary files differnew file mode 100644 index 0000000000..06869c79dc --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/preciseUnitCasing/1.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/preciseUnitCasing/2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/preciseUnitCasing/2.png Binary files differnew file mode 100644 index 0000000000..a3c502e5a3 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/preciseUnitCasing/2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/preciseUnitCasing/3.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/preciseUnitCasing/3.png Binary files differnew file mode 100644 index 0000000000..bf1279634c --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/preciseUnitCasing/3.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/pressureResistantWalls.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/pressureResistantWalls.png Binary files differnew file mode 100644 index 0000000000..61de442118 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/pressureResistantWalls.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/radiationProtectionSteelFrame.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/radiationProtectionSteelFrame.png Binary files differnew file mode 100644 index 0000000000..c32447ca5f --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/radiationProtectionSteelFrame.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/rawCylinder.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/rawCylinder.png Binary files differnew file mode 100644 index 0000000000..d7eb7f4235 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/rawCylinder.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/speedingPipe_SIDE.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/speedingPipe_SIDE.png Binary files differnew file mode 100644 index 0000000000..833451eb11 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/speedingPipe_SIDE.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/speedingPipe_TOP.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/speedingPipe_TOP.png Binary files differnew file mode 100644 index 0000000000..28b9aae6eb --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/speedingPipe_TOP.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/supercriticalFluidTurbineCasing.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/supercriticalFluidTurbineCasing.png Binary files differnew file mode 100644 index 0000000000..c654bbe779 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/supercriticalFluidTurbineCasing.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/titaniumPlatedCylinder.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/titaniumPlatedCylinder.png Binary files differnew file mode 100644 index 0000000000..c15c004a2b --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/titaniumPlatedCylinder.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCasing_SIDE.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCasing_SIDE.png Binary files differnew file mode 100644 index 0000000000..c8327cf80f --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCasing_SIDE.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCasing_TOP.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCasing_TOP.png Binary files differnew file mode 100644 index 0000000000..05e8e449c8 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCasing_TOP.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/1.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/1.png Binary files differnew file mode 100644 index 0000000000..26d772245b --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/1.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/10.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/10.png Binary files differnew file mode 100644 index 0000000000..a1811157ac --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/10.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/2.png Binary files differnew file mode 100644 index 0000000000..4f046c227d --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/3.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/3.png Binary files differnew file mode 100644 index 0000000000..f464b9002d --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/3.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/4.png Binary files differnew file mode 100644 index 0000000000..be2682c782 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/5.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/5.png Binary files differnew file mode 100644 index 0000000000..3929c435ca --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/5.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/6.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/6.png Binary files differnew file mode 100644 index 0000000000..721375b105 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/6.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/7.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/7.png Binary files differnew file mode 100644 index 0000000000..b8045b839f --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/7.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/8.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/8.png Binary files differnew file mode 100644 index 0000000000..defad85d34 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/8.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/9.png b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/9.png Binary files differnew file mode 100644 index 0000000000..a9fc537f0c --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/blocks/yottaFluidTankCell/9.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/gui/overlay_button/assembler_mode.png b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/overlay_button/assembler_mode.png Binary files differnew file mode 100644 index 0000000000..d7132dcfba --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/overlay_button/assembler_mode.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/gui/overlay_button/lock_off.png b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/overlay_button/lock_off.png Binary files differnew file mode 100644 index 0000000000..20dceacc7a --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/overlay_button/lock_off.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/gui/overlay_button/lock_on.png b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/overlay_button/lock_on.png Binary files differnew file mode 100644 index 0000000000..ddd07319cb --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/overlay_button/lock_on.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/gui/overlay_button/precise_mode.png b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/overlay_button/precise_mode.png Binary files differnew file mode 100644 index 0000000000..a8d30a022e --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/overlay_button/precise_mode.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/gui/picture/component_assline.png b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/picture/component_assline.png Binary files differnew file mode 100644 index 0000000000..24d76af699 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/picture/component_assline.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/gui/picture/extreme_heat_exchanger.png b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/picture/extreme_heat_exchanger.png Binary files differnew file mode 100644 index 0000000000..3aa19cd3de --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/picture/extreme_heat_exchanger.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/gui/picture/naquadah_reactor.png b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/picture/naquadah_reactor.png Binary files differnew file mode 100644 index 0000000000..cc25723ec5 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/picture/naquadah_reactor.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/gui/picture/neutron_activator.png b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/picture/neutron_activator.png Binary files differnew file mode 100644 index 0000000000..a78ba3f6c9 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/gui/picture/neutron_activator.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/_null_.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/_null_.png Binary files differnew file mode 100644 index 0000000000..91048717ee --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/_null_.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/advancedFuelRod.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/advancedFuelRod.png Binary files differnew file mode 100644 index 0000000000..0f2a62d9a1 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/advancedFuelRod.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/advancedRadiationProtectionPlate.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/advancedRadiationProtectionPlate.png Binary files differnew file mode 100644 index 0000000000..6b1eb7bb4c --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/advancedRadiationProtectionPlate.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/aluminumNitride.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/aluminumNitride.png Binary files differnew file mode 100644 index 0000000000..29d5ef9e0d --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/aluminumNitride.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/chromaticGem.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/chromaticGem.png Binary files differnew file mode 100644 index 0000000000..8a7c65a313 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/chromaticGem.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/chromaticGem.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/items/chromaticGem.png.mcmeta new file mode 100644 index 0000000000..97596ba817 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/chromaticGem.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":2 + } +}
\ No newline at end of file diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/ciruits/1.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/ciruits/1.png Binary files differnew file mode 100644 index 0000000000..356912ae9f --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/ciruits/1.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/ciruits/2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/ciruits/2.png Binary files differnew file mode 100644 index 0000000000..734adfd0be --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/ciruits/2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/ciruits/3.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/ciruits/3.png Binary files differnew file mode 100644 index 0000000000..f1174a53fd --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/ciruits/3.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/ciruits/4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/ciruits/4.png Binary files differnew file mode 100644 index 0000000000..38e6888676 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/ciruits/4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/ciruits/5.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/ciruits/5.png Binary files differnew file mode 100644 index 0000000000..c6a8210a03 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/ciruits/5.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/enrichedNaquadahMass.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/enrichedNaquadahMass.png Binary files differnew file mode 100644 index 0000000000..c0f3988d3e --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/enrichedNaquadahMass.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/1.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/1.png Binary files differnew file mode 100644 index 0000000000..83a9942010 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/1.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/10.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/10.png Binary files differnew file mode 100644 index 0000000000..df9f4945f2 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/10.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/10.png.mcmeta b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/10.png.mcmeta new file mode 100644 index 0000000000..b3b9810f7b --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/10.png.mcmeta @@ -0,0 +1,6 @@ +{ + "animation":{ + "frametime":2 + + } +}
\ No newline at end of file diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/2.png Binary files differnew file mode 100644 index 0000000000..9741eb7c61 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/3.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/3.png Binary files differnew file mode 100644 index 0000000000..a6aa0780a8 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/3.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/4.png Binary files differnew file mode 100644 index 0000000000..e2e637dbcb --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/5.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/5.png Binary files differnew file mode 100644 index 0000000000..4085202dc3 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/5.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/6.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/6.png Binary files differnew file mode 100644 index 0000000000..8a96decc84 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/6.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/7.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/7.png Binary files differnew file mode 100644 index 0000000000..db313adf79 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/7.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/8.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/8.png Binary files differnew file mode 100644 index 0000000000..fce1d1a02e --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/8.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/9.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/9.png Binary files differnew file mode 100644 index 0000000000..9fe3454e55 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/fluidCore/9.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityPlutonium.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityPlutonium.png Binary files differnew file mode 100644 index 0000000000..bc1dc4f7bf --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityPlutonium.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityPlutoniumNugget.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityPlutoniumNugget.png Binary files differnew file mode 100644 index 0000000000..556f999761 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityPlutoniumNugget.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityThorium.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityThorium.png Binary files differnew file mode 100644 index 0000000000..5b56a5d174 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityThorium.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityThoriumNugget.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityThoriumNugget.png Binary files differnew file mode 100644 index 0000000000..5e3b944ab9 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityThoriumNugget.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityUranium.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityUranium.png Binary files differnew file mode 100644 index 0000000000..9e1af717b5 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityUranium.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityUraniumNugget.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityUraniumNugget.png Binary files differnew file mode 100644 index 0000000000..a82f376549 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/highDensityUraniumNugget.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/highEnergyMixture.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/highEnergyMixture.png Binary files differnew file mode 100644 index 0000000000..c8932c8a27 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/highEnergyMixture.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/inverter.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/inverter.png Binary files differnew file mode 100644 index 0000000000..0e31bd991f --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/inverter.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/microHeater.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/microHeater.png Binary files differnew file mode 100644 index 0000000000..39ac6744d1 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/microHeater.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/naquadahMass.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/naquadahMass.png Binary files differnew file mode 100644 index 0000000000..22419a39fd --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/naquadahMass.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/naquadriaMass.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/naquadriaMass.png Binary files differnew file mode 100644 index 0000000000..0f7fd09925 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/naquadriaMass.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/neutronSource.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/neutronSource.png Binary files differnew file mode 100644 index 0000000000..89f7790f5b --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/neutronSource.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/plasticCase.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/plasticCase.png Binary files differnew file mode 100644 index 0000000000..a5fd1f9b97 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/plasticCase.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/quartzCrystalResonator.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/quartzCrystalResonator.png Binary files differnew file mode 100644 index 0000000000..0844d39d62 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/quartzCrystalResonator.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/quartzWafer.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/quartzWafer.png Binary files differnew file mode 100644 index 0000000000..691600adee --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/quartzWafer.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/radiationProtectionPlate.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/radiationProtectionPlate.png Binary files differnew file mode 100644 index 0000000000..2a120eb72a --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/radiationProtectionPlate.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/radioactiveWaste.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/radioactiveWaste.png Binary files differnew file mode 100644 index 0000000000..5f621babd9 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/radioactiveWaste.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rawAtomicSeparationCatalyst.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rawAtomicSeparationCatalyst.png Binary files differnew file mode 100644 index 0000000000..62aaad4fcc --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rawAtomicSeparationCatalyst.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutonium.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutonium.png Binary files differnew file mode 100644 index 0000000000..d298e9386b --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutonium.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutonium2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutonium2.png Binary files differnew file mode 100644 index 0000000000..322c3a4ef6 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutonium2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutonium4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutonium4.png Binary files differnew file mode 100644 index 0000000000..cda19212aa --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutonium4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutoniumDepleted.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutoniumDepleted.png Binary files differnew file mode 100644 index 0000000000..59f289b8a0 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutoniumDepleted.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutoniumDepleted2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutoniumDepleted2.png Binary files differnew file mode 100644 index 0000000000..d4bde7c9d2 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutoniumDepleted2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutoniumDepleted4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutoniumDepleted4.png Binary files differnew file mode 100644 index 0000000000..38d6ec643d --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedPlutoniumDepleted4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUranium.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUranium.png Binary files differnew file mode 100644 index 0000000000..d8878dc82d --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUranium.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUranium2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUranium2.png Binary files differnew file mode 100644 index 0000000000..7fca20e67a --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUranium2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUranium4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUranium4.png Binary files differnew file mode 100644 index 0000000000..d111499404 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUranium4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUraniumDepleted.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUraniumDepleted.png Binary files differnew file mode 100644 index 0000000000..9d2bbee939 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUraniumDepleted.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUraniumDepleted2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUraniumDepleted2.png Binary files differnew file mode 100644 index 0000000000..494c23cd82 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUraniumDepleted2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUraniumDepleted4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUraniumDepleted4.png Binary files differnew file mode 100644 index 0000000000..4e8e0c717e --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodCompressedUraniumDepleted4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutonium.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutonium.png Binary files differnew file mode 100644 index 0000000000..5aebe480da --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutonium.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutonium2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutonium2.png Binary files differnew file mode 100644 index 0000000000..ad6a1b0320 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutonium2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutonium4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutonium4.png Binary files differnew file mode 100644 index 0000000000..250c04be35 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutonium4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutoniumDepleted.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutoniumDepleted.png Binary files differnew file mode 100644 index 0000000000..190706d6fb --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutoniumDepleted.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutoniumDepleted2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutoniumDepleted2.png Binary files differnew file mode 100644 index 0000000000..c7b7b42151 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutoniumDepleted2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutoniumDepleted4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutoniumDepleted4.png Binary files differnew file mode 100644 index 0000000000..8337949878 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidPlutoniumDepleted4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUranium.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUranium.png Binary files differnew file mode 100644 index 0000000000..a75ba535b9 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUranium.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUranium2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUranium2.png Binary files differnew file mode 100644 index 0000000000..1fb3b13fd3 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUranium2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUranium4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUranium4.png Binary files differnew file mode 100644 index 0000000000..4534709574 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUranium4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUraniumDepleted.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUraniumDepleted.png Binary files differnew file mode 100644 index 0000000000..96a1311256 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUraniumDepleted.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUraniumDepleted2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUraniumDepleted2.png Binary files differnew file mode 100644 index 0000000000..c44a82cefa --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUraniumDepleted2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUraniumDepleted4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUraniumDepleted4.png Binary files differnew file mode 100644 index 0000000000..259b15c23d --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/rodLiquidUraniumDepleted4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/saltyRoot.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/saltyRoot.png Binary files differnew file mode 100644 index 0000000000..195a43023d --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/saltyRoot.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/specialCeramics.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/specialCeramics.png Binary files differnew file mode 100644 index 0000000000..2d322a6212 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/specialCeramics.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/specialCeramicsPlate.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/specialCeramicsPlate.png Binary files differnew file mode 100644 index 0000000000..65e07cf5db --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/specialCeramicsPlate.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/air.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/air.png Binary files differnew file mode 100644 index 0000000000..8562f123fc --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/air.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/electric.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/electric.png Binary files differnew file mode 100644 index 0000000000..79b5290620 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/electric.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/mechanics.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/mechanics.png Binary files differnew file mode 100644 index 0000000000..5322aa6b83 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/mechanics.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/null.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/null.png Binary files differnew file mode 100644 index 0000000000..8f3be697df --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/null.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/radiation.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/radiation.png Binary files differnew file mode 100644 index 0000000000..2d791b1869 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/radiation.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/spirit.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/spirit.png Binary files differnew file mode 100644 index 0000000000..edd4edd270 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/spirit.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/tainted.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/tainted.png Binary files differnew file mode 100644 index 0000000000..71c108b312 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/tainted.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/thermal.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/thermal.png Binary files differnew file mode 100644 index 0000000000..4ccd9d6eec --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/thermal.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/unstable.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/unstable.png Binary files differnew file mode 100644 index 0000000000..27a78c9bb4 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/unstable.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/victus.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/victus.png Binary files differnew file mode 100644 index 0000000000..fa6bba84bc --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/upgradeEssentia/victus.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wrappedPlutoniumIngot.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wrappedPlutoniumIngot.png Binary files differnew file mode 100644 index 0000000000..b353cf4d72 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wrappedPlutoniumIngot.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wrappedThoriumIngot.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wrappedThoriumIngot.png Binary files differnew file mode 100644 index 0000000000..d19db03211 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wrappedThoriumIngot.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wrappedUraniumIngot.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wrappedUraniumIngot.png Binary files differnew file mode 100644 index 0000000000..a5f3625aef --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wrappedUraniumIngot.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/0.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/0.png Binary files differnew file mode 100644 index 0000000000..3e9501abc1 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/0.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/1.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/1.png Binary files differnew file mode 100644 index 0000000000..fe258942ae --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/1.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/10.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/10.png Binary files differnew file mode 100644 index 0000000000..a10d3af767 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/10.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/11.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/11.png Binary files differnew file mode 100644 index 0000000000..9757a1047e --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/11.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/12.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/12.png Binary files differnew file mode 100644 index 0000000000..aac60e58fd --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/12.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/13.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/13.png Binary files differnew file mode 100644 index 0000000000..893e7f3017 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/13.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/14.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/14.png Binary files differnew file mode 100644 index 0000000000..1be71e3d71 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/14.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/2.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/2.png Binary files differnew file mode 100644 index 0000000000..c328d738a1 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/2.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/3.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/3.png Binary files differnew file mode 100644 index 0000000000..32411af565 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/3.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/4.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/4.png Binary files differnew file mode 100644 index 0000000000..840b2c8b27 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/4.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/5.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/5.png Binary files differnew file mode 100644 index 0000000000..052e61d09e --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/5.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/6.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/6.png Binary files differnew file mode 100644 index 0000000000..8a37a18715 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/6.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/7.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/7.png Binary files differnew file mode 100644 index 0000000000..8aeba93ef9 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/7.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/8.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/8.png Binary files differnew file mode 100644 index 0000000000..b3850aae70 --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/8.png diff --git a/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/9.png b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/9.png Binary files differnew file mode 100644 index 0000000000..bd18dcbeda --- /dev/null +++ b/goodgen/src/main/resources/assets/goodgenerator/textures/items/wraps/9.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/LargeEssentiaSmeltery_Off.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/LargeEssentiaSmeltery_Off.png Binary files differnew file mode 100644 index 0000000000..438daa3b97 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/LargeEssentiaSmeltery_Off.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/LargeEssentiaSmeltery_Off_GLOW.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/LargeEssentiaSmeltery_Off_GLOW.png Binary files differnew file mode 100644 index 0000000000..1ee835a005 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/LargeEssentiaSmeltery_Off_GLOW.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/LargeEssentiaSmeltery_On.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/LargeEssentiaSmeltery_On.png Binary files differnew file mode 100644 index 0000000000..36e9220301 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/LargeEssentiaSmeltery_On.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/LargeEssentiaSmeltery_On_GLOW.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/LargeEssentiaSmeltery_On_GLOW.png Binary files differnew file mode 100644 index 0000000000..4b9712aa19 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/LargeEssentiaSmeltery_On_GLOW.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_Off.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_Off.png Binary files differnew file mode 100644 index 0000000000..ed6b99fcd8 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_Off.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_Off.png.mcmeta b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_Off.png.mcmeta new file mode 100644 index 0000000000..5e86a7cd5f --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_Off.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":8 + } +}
\ No newline at end of file diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_Off_GLOW.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_Off_GLOW.png Binary files differnew file mode 100644 index 0000000000..dbd2e0feaa --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_Off_GLOW.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_Off_GLOW.png.mcmeta b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_Off_GLOW.png.mcmeta new file mode 100644 index 0000000000..5e86a7cd5f --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_Off_GLOW.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":8 + } +}
\ No newline at end of file diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_On.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_On.png Binary files differnew file mode 100644 index 0000000000..c97e6f1a2d --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_On.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_On.png.mcmeta b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_On.png.mcmeta new file mode 100644 index 0000000000..5e86a7cd5f --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_On.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":8 + } +}
\ No newline at end of file diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_On_GLOW.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_On_GLOW.png Binary files differnew file mode 100644 index 0000000000..14bbc09368 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_On_GLOW.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_On_GLOW.png.mcmeta b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_On_GLOW.png.mcmeta new file mode 100644 index 0000000000..5e86a7cd5f --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronActivator_On_GLOW.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation":{ + "frametime":8 + } +}
\ No newline at end of file diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronSensorFont.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronSensorFont.png Binary files differnew file mode 100644 index 0000000000..e849b26703 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronSensorFont.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronSensorFont_GLOW.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronSensorFont_GLOW.png Binary files differnew file mode 100644 index 0000000000..36dd0187dd --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/NeutronSensorFont_GLOW.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/YOTTAHatch.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/YOTTAHatch.png Binary files differnew file mode 100644 index 0000000000..4e1c1963e2 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/YOTTAHatch.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/supercriticalFluidTurbineCasing.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/supercriticalFluidTurbineCasing.png Binary files differnew file mode 100644 index 0000000000..c654bbe779 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/supercriticalFluidTurbineCasing.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_01.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_01.png Binary files differnew file mode 100644 index 0000000000..c33f97fcb1 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_01.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_01.png.mcmeta b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_01.png.mcmeta new file mode 100644 index 0000000000..dd1bedb120 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_01.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_02.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_02.png Binary files differnew file mode 100644 index 0000000000..1b88cbbc37 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_02.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_02.png.mcmeta b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_02.png.mcmeta new file mode 100644 index 0000000000..dd1bedb120 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_02.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_03.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_03.png Binary files differnew file mode 100644 index 0000000000..d11072497e --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_03.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_03.png.mcmeta b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_03.png.mcmeta new file mode 100644 index 0000000000..dd1bedb120 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_03.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_04.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_04.png Binary files differnew file mode 100644 index 0000000000..1b07941c76 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_04.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_04.png.mcmeta b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_04.png.mcmeta new file mode 100644 index 0000000000..dd1bedb120 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_04.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_05.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_05.png Binary files differnew file mode 100644 index 0000000000..f863ec49e6 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_05.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_05.png.mcmeta b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_05.png.mcmeta new file mode 100644 index 0000000000..dd1bedb120 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_05.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_06.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_06.png Binary files differnew file mode 100644 index 0000000000..cc92aa40f7 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_06.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_06.png.mcmeta b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_06.png.mcmeta new file mode 100644 index 0000000000..dd1bedb120 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_06.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_07.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_07.png Binary files differnew file mode 100644 index 0000000000..1c741123ea --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_07.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_07.png.mcmeta b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_07.png.mcmeta new file mode 100644 index 0000000000..dd1bedb120 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_07.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_08.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_08.png Binary files differnew file mode 100644 index 0000000000..8b41521af6 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_08.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_08.png.mcmeta b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_08.png.mcmeta new file mode 100644 index 0000000000..dd1bedb120 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_08.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_09.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_09.png Binary files differnew file mode 100644 index 0000000000..eb1d3249e9 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_09.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_09.png.mcmeta b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_09.png.mcmeta new file mode 100644 index 0000000000..dd1bedb120 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_09.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_11.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_11.png Binary files differnew file mode 100644 index 0000000000..3a9251d1d4 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_11.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_12.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_12.png Binary files differnew file mode 100644 index 0000000000..0ed41fb186 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_12.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_13.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_13.png Binary files differnew file mode 100644 index 0000000000..7dff9f8df9 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_13.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_14.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_14.png Binary files differnew file mode 100644 index 0000000000..94c05e196e --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_14.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_15.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_15.png Binary files differnew file mode 100644 index 0000000000..2df8810e94 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_15.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_16.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_16.png Binary files differnew file mode 100644 index 0000000000..1a3f663ba4 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_16.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_17.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_17.png Binary files differnew file mode 100644 index 0000000000..63a8e2aa2e --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_17.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_18.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_18.png Binary files differnew file mode 100644 index 0000000000..1f874e9551 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_18.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_19.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_19.png Binary files differnew file mode 100644 index 0000000000..680602567a --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_19.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_21.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_21.png Binary files differnew file mode 100644 index 0000000000..6dfe02c900 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_21.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_22.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_22.png Binary files differnew file mode 100644 index 0000000000..d17025d36c --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_22.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_23.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_23.png Binary files differnew file mode 100644 index 0000000000..4e15ac17bf --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_23.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_24.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_24.png Binary files differnew file mode 100644 index 0000000000..7f8e9b6ca4 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_24.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_25.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_25.png Binary files differnew file mode 100644 index 0000000000..ede77ea0da --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_25.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_26.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_26.png Binary files differnew file mode 100644 index 0000000000..f180bd97d9 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_26.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_27.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_27.png Binary files differnew file mode 100644 index 0000000000..c74d284042 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_27.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_28.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_28.png Binary files differnew file mode 100644 index 0000000000..5e975dfd26 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_28.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_29.png b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_29.png Binary files differnew file mode 100644 index 0000000000..333720cdce --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/blocks/icons/turbines/TURBINE_29.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/stable1.png b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/stable1.png Binary files differnew file mode 100644 index 0000000000..2e4cc7f714 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/stable1.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/stable1tiny.png b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/stable1tiny.png Binary files differnew file mode 100644 index 0000000000..594bee8e1a --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/stable1tiny.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/stable2.png b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/stable2.png Binary files differnew file mode 100644 index 0000000000..8ea085b73c --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/stable2.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/stable2tiny.png b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/stable2tiny.png Binary files differnew file mode 100644 index 0000000000..b75fc700e4 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/stable2tiny.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable1.png b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable1.png Binary files differnew file mode 100644 index 0000000000..f2bab94320 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable1.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable1tiny.png b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable1tiny.png Binary files differnew file mode 100644 index 0000000000..b35ada27f9 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable1tiny.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable2.png b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable2.png Binary files differnew file mode 100644 index 0000000000..81d7b350cd --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable2.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable2tiny.png b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable2tiny.png Binary files differnew file mode 100644 index 0000000000..d0291d81eb --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable2tiny.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable3.png b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable3.png Binary files differnew file mode 100644 index 0000000000..c2377efe04 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable3.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable3tiny.png b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable3tiny.png Binary files differnew file mode 100644 index 0000000000..e7b65c0895 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable3tiny.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable4.png b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable4.png Binary files differnew file mode 100644 index 0000000000..184819817d --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable4.png diff --git a/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable4tiny.png b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable4tiny.png Binary files differnew file mode 100644 index 0000000000..0699e4ef39 --- /dev/null +++ b/goodgen/src/main/resources/assets/gregtech/textures/items/icons/isotope/unstable4tiny.png diff --git a/goodgen/src/main/resources/mcmod.info b/goodgen/src/main/resources/mcmod.info new file mode 100644 index 0000000000..4d3f0f4d79 --- /dev/null +++ b/goodgen/src/main/resources/mcmod.info @@ -0,0 +1,19 @@ +{ + "modListVersion": 2, + "modList": [{ + "modid": "GoodGenerator", + "name": "Good Generator", + "description": "Add some powerful generators", + "version": "${modVersion}", + "mcversion": "${minecraftVersion}", + "url": "", + "updateUrl": "", + "authorList": ["GlodBlock"], + "credits": "", + "logoFile": "", + "screenshots": [], + "requiredMods": ["Forge", "IC2", "gregtech", "bartworks", "tectech", "structurelib"], + "dependencies": ["IC2", "gregtech", "bartworks", "tectech", "structurelib", "dreamcraft"], + "useDependencyInformation": true + }] +} |