diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
new file mode 100644
index 0000000..0ba8359
--- /dev/null
+++ b/.git-blame-ignore-revs
@@ -0,0 +1,2 @@
+# Ignore spotlessApply reformat
+4407b867ca1a5235152cd4b78ee13160930e599b
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..fd2792b
--- /dev/null
+++ b/.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/.github/scripts/test-no-error-reports.sh b/.github/scripts/test-no-error-reports.sh
new file mode 100644
index 0000000..e387660
--- /dev/null
+++ b/.github/scripts/test-no-error-reports.sh
@@ -0,0 +1,27 @@
+if [[ -d "run/crash-reports" ]]; then
+ echo "Crash reports detected:"
+ cat $directory/*
+ exit 1
+fi
+
+if grep --quiet "Fatal errors were detected" server.log; then
+ echo "Fatal errors detected:"
+ cat server.log
+ exit 1
+fi
+
+if grep --quiet "The state engine was in incorrect state ERRORED and forced into state SERVER_STOPPED" server.log; then
+ echo "Server force stopped:"
+ cat server.log
+ exit 1
+fi
+
+if grep --quiet 'Done .+ For help, type "help" or "?"' server.log; then
+ echo "Server didn't finish startup:"
+ cat server.log
+ exit 1
+fi
+
+echo "No crash reports detected"
+exit 0
+
diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml
new file mode 100644
index 0000000..3ee2f68
--- /dev/null
+++ b/.github/workflows/build-and-test.yml
@@ -0,0 +1,13 @@
+
+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
diff --git a/.github/workflows/release-tags.yml b/.github/workflows/release-tags.yml
new file mode 100644
index 0000000..e4c0be6
--- /dev/null
+++ b/.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/.gitignore b/.gitignore
index 73f9454..75c41f6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,14 +1,31 @@
-.gradle/
-build/
-out/
-run/
-server/
-eclipse/
-src/META-INF/
-/*.iws
-/*.ipr
-/*.iml
-bin/
+.gradle
+.settings
+/.idea/
+/run/
+/build/
+/eclipse/
.classpath
.project
-.settings/
\ No newline at end of file
+/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
diff --git a/CODEOWNERS b/CODEOWNERS
new file mode 100644
index 0000000..a6b5f68
--- /dev/null
+++ b/CODEOWNERS
@@ -0,0 +1,3 @@
+# Any Github changes require admin approval
+/.github/** @GTNewHorizons/admin
+
diff --git a/README.md b/README.md
index 5f98765..d894fcd 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,10 @@
# Universal Singularities
-The Official Github Repository of the Mod, Universal Singularities!
+The Unofficial Github Repository of the Mod (Universal Singularities](https://minecraft.curseforge.com/projects/universal-singularities) (GTNH Fork)!
-Made and Maintained By:
-Wealthyturtle and WanionCane
+Originally made by [Wealthyturtle](https://github.com/Wealthyturtle) and [WanionCane](https://github.com/Wanioncane)
+
+# Fork
+
+This mod was forked by the GTNH Team to continue the development of the 1.7.10 Branch. The up-to-date Master branch can be found on our [Jenkins](http://jenkins.usrv.eu:8080/job/Universal-Singularities/).
+
+[Permission](permission.png) was kindly granted to maintain and release.
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index c270575..e57a16f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,66 +1,5 @@
-buildscript {
- repositories {
- mavenCentral()
- maven {
- name = "forge"
- url = "http://files.minecraftforge.net/maven"
- }
- maven {
- name = "sonatype"
- url = "https://oss.sonatype.org/content/repositories/snapshots/"
- }
- }
- dependencies {
- classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
- }
-}
-
-apply plugin: 'forge'
-
-version = "1.7.10-8.0"
-group= "wealthyturtle.uiesingularities" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
-archivesBaseName = "Universal Singularities"
-
-minecraft {
- version = "1.7.10-10.13.4.1614-1.7.10"
- runDir = "eclipse"
-}
-
-sourceCompatibility = 1.8
-targetCompatibility = 1.8
-
-dependencies {
- // you may put jars on which you depend on in ./libs
- // or you may define them like so..
- //compile "some.group:artifact:version:classifier"
- //compile "some.group:artifact:version"
-
- // real examples
- //compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env
- //compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env
-
- // for more info...
- // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
- // http://www.gradle.org/docs/current/userguide/dependency_management.html
-
-}
-
-processResources
-{
- // this will ensure that this task is redone when the versions change.
- inputs.property "version", project.version
- inputs.property "mcversion", project.minecraft.version
+//version: 1707058017
- // replace stuff in mcmod.info, nothing else
- from(sourceSets.main.resources.srcDirs) {
- include 'mcmod.info'
-
- // replace version and mcversion
- expand 'version':project.version, 'mcversion':project.minecraft.version
- }
-
- // copy everything else, thats not the mcmod.info
- from(sourceSets.main.resources.srcDirs) {
- exclude 'mcmod.info'
- }
+plugins {
+ id 'com.gtnewhorizons.gtnhconvention'
}
diff --git a/dependencies.gradle b/dependencies.gradle
new file mode 100644
index 0000000..98ca644
--- /dev/null
+++ b/dependencies.gradle
@@ -0,0 +1,6 @@
+// Add your dependencies here
+
+dependencies {
+ api 'com.github.GTNewHorizons:Avaritia:1.59:dev'
+ compileOnly 'com.github.GTNewHorizons:NotEnoughItems:2.7.11-GTNH:dev'
+}
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..15130e2
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,203 @@
+# 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.0
+
+# Human-readable mod name, available for mcmod.info population.
+modName = UniversalSingularities
+
+# Case-sensitive identifier string, available for mcmod.info population and used for automatic mixin JSON generation.
+# Conventionally lowercase.
+modId = universalsingularities
+
+# Root package of the mod, used to find various classes in other properties,
+# mcmod.info substitution, enabling assertions in run tasks, etc.
+modGroup = wealthyturtle.uiesingularities
+
+# 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 = false
+
+# Enables injecting missing generics into the decompiled source code for a better coding experience.
+# Turns most publicly visible List, Map, etc. into proper List, Map 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 =
+
+# Name of the token containing the project's current version to generate/replace.
+gradleTokenVersion = GRADLETOKEN_VERSION
+
+# [DEPRECATED] Mod ID replacement token.
+gradleTokenModId = GRADLETOKEN_MODID
+
+# [DEPRECATED] Mod name replacement token.
+gradleTokenModName = GRADLETOKEN_MODNAME
+
+# [DEPRECATED] Mod Group replacement token.
+gradleTokenGroupName =
+
+# [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 = Reference.java
+
+# 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
+
+# Set to a non-empty string to configure mixins in a separate source set under src/VALUE, instead of src/main.
+# This can speed up compile times thanks to not running the mixin annotation processor on all input sources.
+# Mixin classes will have access to "main" classes, but not the other way around.
+separateMixinSourceSet =
+
+# 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 CurseMaven, Modrinth, and some more well-known 1.7.10 repositories.
+includeWellKnownRepositories = true
+
+# A list of repositories to exclude from the includeWellKnownRepositories setting. Should be a space separated
+# list of strings, with the acceptable keys being(case does not matter):
+# cursemaven
+# modrinth
+excludeWellKnownRepositories =
+
+# 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 = Universal-Singularities
+
+# 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/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index b761216..a4b76b9 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 678d9d8..e2847c8 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,7 @@
-#Wed Jul 02 15:54:47 CDT 2014
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.0-bin.zip
diff --git a/gradlew b/gradlew
old mode 100644
new mode 100755
index 91a7e26..f5feea6
--- a/gradlew
+++ b/gradlew
@@ -1,79 +1,130 @@
-#!/usr/bin/env bash
+#!/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.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
##############################################################################
-##
-## Gradle start up script for UN*X
-##
+#
+# 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/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
##############################################################################
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
+# 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
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
+# 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 -P "${APP_HOME:-./}" > /dev/null && printf '%s
+' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
+MAX_FD=maximum
-warn ( ) {
+warn () {
echo "$*"
-}
+} >&2
-die ( ) {
+die () {
echo
echo "$*"
echo
exit 1
-}
+} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
esac
-# For Cygwin, ensure paths are in UNIX format before anything is touched.
-if $cygwin ; then
- [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-fi
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >&-
-APP_HOME="`pwd -P`"
-cd "$SAVED" >&-
-
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"
+ JAVACMD=$JAVA_HOME/jre/sh/java
else
- JAVACMD="$JAVA_HOME/bin/java"
+ JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@@ -82,83 +133,120 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+ 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" = "false" -a "$darwin" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
+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
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-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" )
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
+ 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
- i=$((i+1))
+ # 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
- case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
fi
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
- JVM_OPTS=("$@")
-}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
+# 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/gradlew.bat b/gradlew.bat
index 8a0b282..9d21a21 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -1,4 +1,22 @@
-@if "%DEBUG%" == "" @echo off
+@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
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
+
+@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@@ -8,26 +26,30 @@
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
-@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=
-
set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
+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%" == "0" goto init
+if %ERRORLEVEL% equ 0 goto execute
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+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
@@ -35,54 +57,36 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-if exist "%JAVA_EXE%" goto init
+if exist "%JAVA_EXE%" goto execute
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+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
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
: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 %CMD_LINE_ARGS%
+"%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%"=="0" goto mainEnd
+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!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
+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
diff --git a/jitpack.yml b/jitpack.yml
new file mode 100644
index 0000000..09bbb51
--- /dev/null
+++ b/jitpack.yml
@@ -0,0 +1,2 @@
+before_install:
+ - ./gradlew setupCIWorkspace
\ No newline at end of file
diff --git a/libs/Avaritia-1.11-unofficial-dev.jar b/libs/Avaritia-1.11-unofficial-dev.jar
deleted file mode 100644
index 0079e4b..0000000
Binary files a/libs/Avaritia-1.11-unofficial-dev.jar and /dev/null differ
diff --git a/libs/CodeChickenCore-1.7.10-1.0.7.47-dev.jar b/libs/CodeChickenCore-1.7.10-1.0.7.47-dev.jar
deleted file mode 100644
index c7ecc2a..0000000
Binary files a/libs/CodeChickenCore-1.7.10-1.0.7.47-dev.jar and /dev/null differ
diff --git a/libs/CodeChickenLib-1.7.10-1.1.3.138-dev.jar b/libs/CodeChickenLib-1.7.10-1.1.3.138-dev.jar
deleted file mode 100644
index 6d3bb67..0000000
Binary files a/libs/CodeChickenLib-1.7.10-1.1.3.138-dev.jar and /dev/null differ
diff --git a/libs/NotEnoughItems-1.7.10-1.0.5.120-dev.jar b/libs/NotEnoughItems-1.7.10-1.0.5.120-dev.jar
deleted file mode 100644
index 0bb0483..0000000
Binary files a/libs/NotEnoughItems-1.7.10-1.0.5.120-dev.jar and /dev/null differ
diff --git a/permission.png b/permission.png
new file mode 100644
index 0000000..e5cbf6f
Binary files /dev/null and b/permission.png differ
diff --git a/repositories.gradle b/repositories.gradle
new file mode 100644
index 0000000..c227b16
--- /dev/null
+++ b/repositories.gradle
@@ -0,0 +1,4 @@
+// Add any additional repositories for your dependencies here
+
+repositories {
+}
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..0147a99
--- /dev/null
+++ b/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.30'
+}
+
+
diff --git a/src/main/java/wealthyturtle/uiesingularities/NEI.java b/src/main/java/wealthyturtle/uiesingularities/NEI.java
index 621d062..85d6cd3 100644
--- a/src/main/java/wealthyturtle/uiesingularities/NEI.java
+++ b/src/main/java/wealthyturtle/uiesingularities/NEI.java
@@ -1,16 +1,16 @@
package wealthyturtle.uiesingularities;
-import codechicken.nei.api.API;
+import javax.annotation.Nonnull;
+
import net.minecraft.item.ItemStack;
-import javax.annotation.Nonnull;
+import codechicken.nei.api.API;
+
+public final class NEI {
-public final class NEI
-{
- private NEI() {}
+ private NEI() {}
- public static void hide(@Nonnull final ItemStack itemStack)
- {
- API.hideItem(itemStack);
- }
-}
\ No newline at end of file
+ public static void hide(@Nonnull final ItemStack itemStack) {
+ API.hideItem(itemStack);
+ }
+}
diff --git a/src/main/java/wealthyturtle/uiesingularities/Reference.java b/src/main/java/wealthyturtle/uiesingularities/Reference.java
index d4c568e..ddb6db5 100644
--- a/src/main/java/wealthyturtle/uiesingularities/Reference.java
+++ b/src/main/java/wealthyturtle/uiesingularities/Reference.java
@@ -1,13 +1,13 @@
package wealthyturtle.uiesingularities;
-public final class Reference
-{
- public static final String MOD_ID = "universalsingularities";
- public static final String MOD_NAME = "UniversalSingularities";
- public static final String MOD_VERSION = "1.7.10-8.0";
- public static final String MC_VERSION = "[1.7.10]";
- static final String COMMON_PROXY = "wealthyturtle.uiesingularities.proxy.CommonProxy";
- static final String CLIENT_PROXY = "wealthyturtle.uiesingularities.proxy.ClientProxy";
+public final class Reference {
- private Reference() {}
+ public static final String MOD_ID = "GRADLETOKEN_MODID";
+ public static final String MOD_NAME = "GRADLETOKEN_MODNAME";
+ public static final String MOD_VERSION = "GRADLETOKEN_VERSION";
+ public static final String MC_VERSION = "[1.7.10]";
+ static final String COMMON_PROXY = "wealthyturtle.uiesingularities.proxy.CommonProxy";
+ static final String CLIENT_PROXY = "wealthyturtle.uiesingularities.proxy.ClientProxy";
+
+ private Reference() {}
}
diff --git a/src/main/java/wealthyturtle/uiesingularities/UniversalSingularity.java b/src/main/java/wealthyturtle/uiesingularities/UniversalSingularity.java
index 58203a7..963f531 100644
--- a/src/main/java/wealthyturtle/uiesingularities/UniversalSingularity.java
+++ b/src/main/java/wealthyturtle/uiesingularities/UniversalSingularity.java
@@ -1,16 +1,17 @@
package wealthyturtle.uiesingularities;
-import javax.annotation.Nonnull;
import java.util.List;
-public final class UniversalSingularity
-{
- public final String name;
- public final List singularities;
+import javax.annotation.Nonnull;
+
+public final class UniversalSingularity {
+
+ public final String name;
+ public final List singularities;
- public UniversalSingularity(@Nonnull final String name, @Nonnull final List singularities)
- {
- this.name = name;
- this.singularities = singularities;
- }
-}
\ No newline at end of file
+ public UniversalSingularity(@Nonnull final String name,
+ @Nonnull final List singularities) {
+ this.name = name;
+ this.singularities = singularities;
+ }
+}
diff --git a/src/main/java/wealthyturtle/uiesingularities/UniversalSingularityItem.java b/src/main/java/wealthyturtle/uiesingularities/UniversalSingularityItem.java
index 1d632b2..aba6793 100644
--- a/src/main/java/wealthyturtle/uiesingularities/UniversalSingularityItem.java
+++ b/src/main/java/wealthyturtle/uiesingularities/UniversalSingularityItem.java
@@ -1,54 +1,52 @@
package wealthyturtle.uiesingularities;
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import fox.spiteful.avaritia.items.ItemSingularity;
+import java.util.List;
+
+import javax.annotation.Nonnull;
+
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.MathHelper;
-import javax.annotation.Nonnull;
-import java.util.List;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import fox.spiteful.avaritia.items.ItemSingularity;
-public final class UniversalSingularityItem extends ItemSingularity
-{
- public final String name;
- public final List universalSingularities;
-
- public UniversalSingularityItem(@Nonnull final String name, @Nonnull final List universalSingularities)
- {
- super();
- this.name = name;
- this.universalSingularities = universalSingularities;
- }
-
- @SideOnly(Side.CLIENT)
- @Override
- public int getColorFromItemStack(final ItemStack itemstack, final int renderPass)
- {
- final int metadata = getDamage(itemstack);
- return renderPass == 0 ? universalSingularities.get(metadata).dColor : universalSingularities.get(metadata).cColor;
- }
-
- @Override
- public String getUnlocalizedName(final ItemStack stack)
- {
- return "item.universalSingularities." + name + "." + universalSingularities.get(getDamage(stack)).name;
- }
-
- @Override
- public int getDamage(final ItemStack itemStack)
- {
- return MathHelper.clamp_int(super.getDamage(itemStack), 0, universalSingularities.size() - 1);
- }
-
- @SuppressWarnings({"unchecked", "rawtypes"})
- @SideOnly(Side.CLIENT)
- @Override
- public void getSubItems(final Item item, final CreativeTabs tab, final List list)
- {
- for (int i = 0; i < universalSingularities.size(); i++)
- list.add(new ItemStack(item, 1, i));
- }
-}
\ No newline at end of file
+public final class UniversalSingularityItem extends ItemSingularity {
+
+ public final String name;
+ public final List universalSingularities;
+
+ public UniversalSingularityItem(@Nonnull final String name,
+ @Nonnull final List universalSingularities) {
+ super();
+ this.name = name;
+ this.universalSingularities = universalSingularities;
+ }
+
+ @SideOnly(Side.CLIENT)
+ @Override
+ public int getColorFromItemStack(final ItemStack itemstack, final int renderPass) {
+ final int metadata = getDamage(itemstack);
+ return renderPass == 0 ? universalSingularities.get(metadata).dColor
+ : universalSingularities.get(metadata).cColor;
+ }
+
+ @Override
+ public String getUnlocalizedName(final ItemStack stack) {
+ return "item.universalSingularities." + name + "." + universalSingularities.get(getDamage(stack)).name;
+ }
+
+ @Override
+ public int getDamage(final ItemStack itemStack) {
+ return MathHelper.clamp_int(super.getDamage(itemStack), 0, universalSingularities.size() - 1);
+ }
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ @SideOnly(Side.CLIENT)
+ @Override
+ public void getSubItems(final Item item, final CreativeTabs tab, final List list) {
+ for (int i = 0; i < universalSingularities.size(); i++) list.add(new ItemStack(item, 1, i));
+ }
+}
diff --git a/src/main/java/wealthyturtle/uiesingularities/UniversalSingularityMod.java b/src/main/java/wealthyturtle/uiesingularities/UniversalSingularityMod.java
index b94d251..38b7c97 100644
--- a/src/main/java/wealthyturtle/uiesingularities/UniversalSingularityMod.java
+++ b/src/main/java/wealthyturtle/uiesingularities/UniversalSingularityMod.java
@@ -1,5 +1,12 @@
package wealthyturtle.uiesingularities;
+import static wealthyturtle.uiesingularities.Reference.CLIENT_PROXY;
+import static wealthyturtle.uiesingularities.Reference.COMMON_PROXY;
+import static wealthyturtle.uiesingularities.Reference.MC_VERSION;
+import static wealthyturtle.uiesingularities.Reference.MOD_ID;
+import static wealthyturtle.uiesingularities.Reference.MOD_NAME;
+import static wealthyturtle.uiesingularities.Reference.MOD_VERSION;
+
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
@@ -7,33 +14,33 @@
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import wealthyturtle.uiesingularities.proxy.CommonProxy;
-import static wealthyturtle.uiesingularities.Reference.*;
-
@SuppressWarnings("unused")
-@Mod(modid = MOD_ID, name = MOD_NAME, version = MOD_VERSION, acceptedMinecraftVersions = MC_VERSION, dependencies = "required-after:Avaritia")
-public class UniversalSingularityMod
-{
- @Mod.Instance(MOD_ID)
- public static UniversalSingularityMod instance;
-
- @SidedProxy(serverSide = COMMON_PROXY, clientSide = CLIENT_PROXY)
- public static CommonProxy proxy;
-
- @Mod.EventHandler
- public void preInit(final FMLPreInitializationEvent event)
- {
- proxy.preInit();
- }
-
- @Mod.EventHandler
- public void init(final FMLInitializationEvent event)
- {
- proxy.init();
- }
-
- @Mod.EventHandler
- public void postInit(final FMLPostInitializationEvent event)
- {
- proxy.postInit();
- }
-}
\ No newline at end of file
+@Mod(
+ modid = MOD_ID,
+ name = MOD_NAME,
+ version = MOD_VERSION,
+ acceptedMinecraftVersions = MC_VERSION,
+ dependencies = "required-after:Avaritia")
+public class UniversalSingularityMod {
+
+ @Mod.Instance(MOD_ID)
+ public static UniversalSingularityMod instance;
+
+ @SidedProxy(serverSide = COMMON_PROXY, clientSide = CLIENT_PROXY)
+ public static CommonProxy proxy;
+
+ @Mod.EventHandler
+ public void preInit(final FMLPreInitializationEvent event) {
+ proxy.preInit();
+ }
+
+ @Mod.EventHandler
+ public void init(final FMLInitializationEvent event) {
+ proxy.init();
+ }
+
+ @Mod.EventHandler
+ public void postInit(final FMLPostInitializationEvent event) {
+ proxy.postInit();
+ }
+}
diff --git a/src/main/java/wealthyturtle/uiesingularities/UniversalSingularityWrapper.java b/src/main/java/wealthyturtle/uiesingularities/UniversalSingularityWrapper.java
index 65e8f48..d795024 100644
--- a/src/main/java/wealthyturtle/uiesingularities/UniversalSingularityWrapper.java
+++ b/src/main/java/wealthyturtle/uiesingularities/UniversalSingularityWrapper.java
@@ -2,32 +2,32 @@
import javax.annotation.Nonnull;
-public final class UniversalSingularityWrapper
-{
- public final String name;
- public final String oreName;
- public final int recipeBaseValue;
- public final int cColor;
- public final int dColor;
- public final boolean enabled;
+public final class UniversalSingularityWrapper {
- public UniversalSingularityWrapper(@Nonnull final String name, @Nonnull final String oreName, final int recipeBaseValue, final int cColor, final int dColor)
- {
- this.name = name;
- this.oreName = oreName;
- this.recipeBaseValue = recipeBaseValue;
- this.cColor = cColor;
- this.dColor = dColor;
- this.enabled = true;
- }
+ public final String name;
+ public final String oreName;
+ public final int recipeBaseValue;
+ public final int cColor;
+ public final int dColor;
+ public final boolean enabled;
- public UniversalSingularityWrapper(@Nonnull final String name, @Nonnull final String oreName, final int recipeBaseValue, final int cColor, final int dColor, final boolean enabled)
- {
- this.name = name;
- this.oreName = oreName;
- this.recipeBaseValue = recipeBaseValue;
- this.cColor = cColor;
- this.dColor = dColor;
- this.enabled = enabled;
- }
-}
\ No newline at end of file
+ public UniversalSingularityWrapper(@Nonnull final String name, @Nonnull final String oreName,
+ final int recipeBaseValue, final int cColor, final int dColor) {
+ this.name = name;
+ this.oreName = oreName;
+ this.recipeBaseValue = recipeBaseValue;
+ this.cColor = cColor;
+ this.dColor = dColor;
+ this.enabled = true;
+ }
+
+ public UniversalSingularityWrapper(@Nonnull final String name, @Nonnull final String oreName,
+ final int recipeBaseValue, final int cColor, final int dColor, final boolean enabled) {
+ this.name = name;
+ this.oreName = oreName;
+ this.recipeBaseValue = recipeBaseValue;
+ this.cColor = cColor;
+ this.dColor = dColor;
+ this.enabled = enabled;
+ }
+}
diff --git a/src/main/java/wealthyturtle/uiesingularities/proxy/ClientProxy.java b/src/main/java/wealthyturtle/uiesingularities/proxy/ClientProxy.java
index 04bb006..2745eb1 100644
--- a/src/main/java/wealthyturtle/uiesingularities/proxy/ClientProxy.java
+++ b/src/main/java/wealthyturtle/uiesingularities/proxy/ClientProxy.java
@@ -1,14 +1,14 @@
package wealthyturtle.uiesingularities.proxy;
-import fox.spiteful.avaritia.render.FancyHaloRenderer;
import net.minecraftforge.client.MinecraftForgeClient;
-public final class ClientProxy extends CommonProxy
-{
- @Override
- public void init()
- {
- final FancyHaloRenderer fancyHaloRenderer = new FancyHaloRenderer();
- singularities.forEach(singularity -> MinecraftForgeClient.registerItemRenderer(singularity, fancyHaloRenderer));
- }
+import fox.spiteful.avaritia.render.FancyHaloRenderer;
+
+public final class ClientProxy extends CommonProxy {
+
+ @Override
+ public void init() {
+ final FancyHaloRenderer fancyHaloRenderer = new FancyHaloRenderer();
+ singularities.forEach(singularity -> MinecraftForgeClient.registerItemRenderer(singularity, fancyHaloRenderer));
+ }
}
diff --git a/src/main/java/wealthyturtle/uiesingularities/proxy/CommonProxy.java b/src/main/java/wealthyturtle/uiesingularities/proxy/CommonProxy.java
index 095ad24..55ac937 100644
--- a/src/main/java/wealthyturtle/uiesingularities/proxy/CommonProxy.java
+++ b/src/main/java/wealthyturtle/uiesingularities/proxy/CommonProxy.java
@@ -1,257 +1,702 @@
package wealthyturtle.uiesingularities.proxy;
-import cpw.mods.fml.common.IFuelHandler;
-import cpw.mods.fml.common.Loader;
-import fox.spiteful.avaritia.crafting.CompressorManager;
-import fox.spiteful.avaritia.crafting.Grinder;
-import gnu.trove.list.TIntList;
-import gnu.trove.list.array.TIntArrayList;
+import static fox.spiteful.avaritia.Config.craftingOnly;
+import static java.io.File.separatorChar;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Nonnull;
+
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
-import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.oredict.OreDictionary;
+
+import cpw.mods.fml.common.IFuelHandler;
+import cpw.mods.fml.common.Loader;
+import cpw.mods.fml.common.registry.GameRegistry;
+import fox.spiteful.avaritia.crafting.CompressorManager;
+import fox.spiteful.avaritia.crafting.Grinder;
import wealthyturtle.uiesingularities.NEI;
import wealthyturtle.uiesingularities.UniversalSingularity;
import wealthyturtle.uiesingularities.UniversalSingularityItem;
import wealthyturtle.uiesingularities.UniversalSingularityWrapper;
-import javax.annotation.Nonnull;
+public class CommonProxy {
-import cpw.mods.fml.common.registry.GameRegistry;
-
-import java.io.File;
-import java.util.*;
+ private final boolean hideDisabledSingularities;
+ protected final List singularities = new ArrayList<>();
-import static fox.spiteful.avaritia.Config.craftingOnly;
-import static fox.spiteful.avaritia.Config.silver;
-import static java.io.File.separatorChar;
+ private final Map> allowed = new HashMap<>();
+ private final boolean coalSingularityEasterEgg;
-public class CommonProxy
-{
- private final boolean hideDisabledSingularities;
- protected final List singularities = new ArrayList<>();
+ // Base Values were Generated by random.org [Min: 65, Max: 95]
+ /*
+ * Instructions on Base Values: 1) Generate Random Numbers. 2) Fill Up the Entire Section's Base Values. 3) [Only
+ * Applicable if the Section has 1+ Singularities in it] Check for Any Duplicate Base Values. 4) [Only Applicable if
+ * the Section has 1+ Singularities in it] [If there are Any Duplicate Base Values] Re-roll Using the Random Number
+ * Generator, and Repeat from Step 3 Onwards.
+ */
+ // Structure of Data: Name, Block Name, Base Value, Lighter Colour Value, Darker Colour Value
+ public CommonProxy() {
+ final List universalSingularities = Arrays.asList(
+ // Vanilla Singularities
+ new UniversalSingularity(
+ "vanilla",
+ Arrays.asList(
+ new UniversalSingularityWrapper("coal", "blockCoal", 3648, 0x282828, 0x0C0C0C, false),
+ new UniversalSingularityWrapper(
+ "emerald",
+ "blockEmerald",
+ 729,
+ 0x60DB83,
+ 0x2CA746,
+ false),
+ new UniversalSingularityWrapper(
+ "diamond",
+ "blockDiamond",
+ 729,
+ 0x4AEDD1,
+ 0x30DBBD,
+ false))),
+ // General (Not Mod Specific)
+ new UniversalSingularity(
+ "general",
+ Arrays.asList(
+ new UniversalSingularityWrapper(
+ "aluminum",
+ "blockAluminum",
+ 1824,
+ 0xEDEDED,
+ 0xC5C5C5,
+ false),
+ new UniversalSingularityWrapper("brass", "blockBrass", 1824, 0xD89634, 0x8B5F1B, false),
+ new UniversalSingularityWrapper(
+ "bronze",
+ "blockBronze",
+ 1824,
+ 0xCA904E,
+ 0xC97A25,
+ false),
+ new UniversalSingularityWrapper(
+ "charcoal",
+ "blockCharcoal",
+ 7296,
+ 0x605543,
+ 0x100E0B,
+ false),
+ new UniversalSingularityWrapper(
+ "electrum",
+ "blockElectrum",
+ 912,
+ 0xFDEF5A,
+ 0xEFE252,
+ false),
+ new UniversalSingularityWrapper("invar", "blockInvar", 1824, 0xD0D7CE, 0xACB4B1, false),
+ new UniversalSingularityWrapper(
+ "magnesium",
+ "blockMagnesium",
+ 3648,
+ 0x937C6C,
+ 0x776457),
+ new UniversalSingularityWrapper(
+ "osmium",
+ "blockOsmium",
+ 406,
+ 0x495dec,
+ 0x2b32af,
+ false),
+ new UniversalSingularityWrapper(
+ "peridot",
+ "blockPeridot",
+ 608,
+ 0x58A52B,
+ 0x4E9226,
+ false),
+ new UniversalSingularityWrapper("ruby", "blockRuby", 608, 0xB44848, 0x993D3D, false),
+ new UniversalSingularityWrapper(
+ "sapphire",
+ "blockSapphire",
+ 608,
+ 0x5173D1,
+ 0x466ACE,
+ false),
+ new UniversalSingularityWrapper("steel", "blockSteel", 912, 0x9F9F9F, 0x888888, false),
+ new UniversalSingularityWrapper(
+ "titanium",
+ "blockTitanium",
+ 2024,
+ 0xdbb9da,
+ 0x462b47,
+ false),
+ new UniversalSingularityWrapper(
+ "tungsten",
+ "blockTungsten",
+ 244,
+ 0x8b8b8b,
+ 0x161616,
+ false),
+ new UniversalSingularityWrapper(
+ "uranium",
+ "blockUranium",
+ 507,
+ 0x00CB40,
+ 0x00C43E,
+ false),
+ new UniversalSingularityWrapper("zinc", "blockZinc", 3648, 0xdbd4d4, 0x636161, false),
+ new UniversalSingularityWrapper(
+ "tricalciumphosphate",
+ "blockTricalciumPhosphate",
+ 365,
+ 0xfaef01,
+ 0x696501,
+ false),
+ new UniversalSingularityWrapper(
+ "palladium",
+ "blockPalladium",
+ 136,
+ 0xF0F0F0,
+ 0xE2E2E2,
+ false),
+ new UniversalSingularityWrapper(
+ "damascusSteel",
+ "blockDamascusSteel",
+ 153,
+ 0x9F9F9F,
+ 0x888888,
+ false),
+ new UniversalSingularityWrapper(
+ "blackSteel",
+ "blockBlackSteel",
+ 304,
+ 0x909090,
+ 0x3f3f3f,
+ false),
+ new UniversalSingularityWrapper(
+ "electrumFlux",
+ "blockElectrumFlux",
+ 16,
+ 0xD0B64D,
+ 0xA40606,
+ false),
+ new UniversalSingularityWrapper(
+ "quicksilver",
+ "blockQuicksilver",
+ 1824,
+ 0x7CD3C7,
+ 0x2B8073,
+ false),
+ new UniversalSingularityWrapper(
+ "shadowSteel",
+ "blockShadowSteel",
+ 406,
+ 0x887362,
+ 0x766354,
+ false),
+ new UniversalSingularityWrapper(
+ "iridium",
+ "blockIridium",
+ 62,
+ 0xffffff,
+ 0x6a6a6a,
+ false),
+ new UniversalSingularityWrapper(
+ "netherstar",
+ "blockNetherStar",
+ 512,
+ 0xffffff,
+ 0x8884bc,
+ false),
+ new UniversalSingularityWrapper(
+ "platinum",
+ "blockPlatinum",
+ 406,
+ 0xf6f3e7,
+ 0xbcbc93,
+ false),
+ new UniversalSingularityWrapper(
+ "naquadria",
+ "blockNaquadria",
+ 66,
+ 0xffffff,
+ 0x000000,
+ false),
+ new UniversalSingularityWrapper(
+ "plutonium",
+ "blockPlutonium",
+ 244,
+ 0xcb2a2a,
+ 0x6d100d,
+ false),
+ new UniversalSingularityWrapper(
+ "meteoricIron",
+ "blockMeteoricIron",
+ 912,
+ 0x272727,
+ 0x000000,
+ false),
+ new UniversalSingularityWrapper("desh", "blockDesh", 203, 0x383838, 0x000000, false),
+ new UniversalSingularityWrapper(
+ "europium",
+ "blockEuropium",
+ 62,
+ 0x3dadada,
+ 0x555555,
+ false),
+ new UniversalSingularityWrapper(
+ "gangue",
+ "blockGangue",
+ 444444,
+ 0x383838,
+ 0x5A3E25,
+ false),
+ new UniversalSingularityWrapper(
+ "roseGold",
+ "blockRoseGold",
+ 1824,
+ 0xFFE61E,
+ 0xDEC921,
+ false))),
- private final Map> allowed = new HashMap<>();
- private final boolean coalSingularityEasterEgg;
+ // Big Reactors Singularities
+ new UniversalSingularity(
+ "bigReactors",
+ Arrays.asList(
+ new UniversalSingularityWrapper(
+ "blutonium",
+ "blockBlutonium",
+ 9999,
+ 0x4642D6,
+ 0x1B00E6,
+ false),
+ new UniversalSingularityWrapper(
+ "cyanite",
+ "blockCyanite",
+ 9999,
+ 0x5CAFDB,
+ 0x0087EF,
+ false),
+ new UniversalSingularityWrapper(
+ "graphite",
+ "blockGraphite",
+ 9999,
+ 0x5D5D5D,
+ 0x444444,
+ false),
+ new UniversalSingularityWrapper(
+ "ludicrite",
+ "blockLudicrite",
+ 9999,
+ 0xF001E8,
+ 0xF103B1,
+ false),
+ new UniversalSingularityWrapper(
+ "yellorium",
+ "blockYellorium",
+ 9999,
+ 0xD9DB5C,
+ 0xEBFF3D,
+ false))),
+ // Draconic Evolution Singularities
+ new UniversalSingularity(
+ "draconicEvolution",
+ Arrays.asList(
+ new UniversalSingularityWrapper(
+ "draconium",
+ "blockDraconium",
+ 1296,
+ 0x8E5CC0,
+ 0x7C4AAE,
+ false),
+ new UniversalSingularityWrapper(
+ "draconiumAwakened",
+ "blockDraconiumAwakened",
+ 760,
+ 0xFF7200,
+ 0xFF6600,
+ false))),
+ // Ender IO Singularities
+ new UniversalSingularity(
+ "enderIO",
+ Arrays.asList(
+ new UniversalSingularityWrapper(
+ "conductiveIron",
+ "blockConductiveIron",
+ 912,
+ 0xCA9D9D,
+ 0xC39499,
+ false),
+ new UniversalSingularityWrapper(
+ "electricalSteel",
+ "blockElectricalSteel",
+ 912,
+ 0x949494,
+ 0x8D8D8D,
+ false),
+ new UniversalSingularityWrapper(
+ "energeticAlloy",
+ "blockEnergeticAlloy",
+ 191,
+ 0xFFA638,
+ 0xFF9C21,
+ false),
+ new UniversalSingularityWrapper(
+ "darkSteel",
+ "blockDarkSteel",
+ 912,
+ 0x3C3C3C,
+ 0x383838,
+ false),
+ new UniversalSingularityWrapper(
+ "pulsatingIron",
+ "blockPulsatingIron",
+ 912,
+ 0x82FA9E,
+ 0x69EA88,
+ false),
+ new UniversalSingularityWrapper(
+ "redstoneAlloy",
+ "blockRedstoneAlloy",
+ 912,
+ 0xF25757,
+ 0xD63C3C,
+ false),
+ new UniversalSingularityWrapper(
+ "soularium",
+ "blockSoularium",
+ 456,
+ 0x5C4527,
+ 0x5A3E25,
+ false),
+ new UniversalSingularityWrapper(
+ "vibrantAlloy",
+ "blockVibrantAlloy",
+ 145,
+ 0xA7CA52,
+ 0x98BB40,
+ false))),
+ // ExtraPlanets Singularities
+ new UniversalSingularity(
+ "extraPlanets",
+ Arrays.asList(
+ new UniversalSingularityWrapper(
+ "blueGem",
+ "blockBlueGem",
+ 95,
+ 0x38D7FF,
+ 0x03C6F6,
+ false),
+ new UniversalSingularityWrapper("carbon", "blockCarbon", 66, 0x1D1D1D, 0x0F0F0F, false),
+ new UniversalSingularityWrapper(
+ "crystal",
+ "blockCrystal",
+ 78,
+ 0xE2E2E2,
+ 0xC1C1C1,
+ false),
+ new UniversalSingularityWrapper("redGem", "blockRedGem", 68, 0xFF3B0C, 0xF93100, false),
+ new UniversalSingularityWrapper(
+ "whiteGem",
+ "blockWhiteGem",
+ 70,
+ 0xC6C6C6,
+ 0xA5A5A5,
+ false))),
+ // ExtraTiC Singularities
+ new UniversalSingularity(
+ "extraTiC",
+ Arrays.asList(
+ new UniversalSingularityWrapper("fairy", "blockFairy", 90, 0xFF83C3, 0xFF65B4, false),
+ new UniversalSingularityWrapper(
+ "pokefennium",
+ "blockPokefennium",
+ 71,
+ 0x436B73,
+ 0x485361,
+ false))),
+ // Extra Utilities Singularities
+ new UniversalSingularity(
+ "extraUtilities",
+ Arrays.asList(
+ new UniversalSingularityWrapper(
+ "unstable",
+ "blockUnstable",
+ 66,
+ 0xC5C5C5,
+ 0xB1B1B1,
+ false))),
+ // Mekanism Singularities
+ new UniversalSingularity(
+ "mekanism",
+ Arrays.asList(
+ new UniversalSingularityWrapper(
+ "refinedGlowstone",
+ "blockRefinedGlowstone",
+ 67,
+ 0xF4D036,
+ 0xDBA622,
+ false),
+ new UniversalSingularityWrapper(
+ "refinedObsidian",
+ "blockRefinedObsidian",
+ 82,
+ 0x57456F,
+ 0x53426A,
+ false))),
+ // Metallurgy Singularities
+ new UniversalSingularity(
+ "metallurgy",
+ Arrays.asList(
+ // Utility
+ new UniversalSingularityWrapper(
+ "bitumen",
+ "blockBitumen",
+ 93,
+ 0x242424,
+ 0x313131,
+ false),
+ new UniversalSingularityWrapper("potash", "blockPotash", 85, 0xEF9103, 0xDA8403, false),
+ // Alloys - Base
+ new UniversalSingularityWrapper(
+ "angmallen",
+ "blockAngmallen",
+ 65,
+ 0xE1D78A,
+ 0xD6C761,
+ false),
+ new UniversalSingularityWrapper(
+ "hepatizon",
+ "blockHepatizon",
+ 82,
+ 0x755E75,
+ 0x614E61,
+ false),
+ // Alloys - Ender
+ new UniversalSingularityWrapper(
+ "desichalkos",
+ "blockDesichalkos",
+ 88,
+ 0x722FA8,
+ 0x502176,
+ false),
+ // Alloys - Fantasy
+ new UniversalSingularityWrapper(
+ "celenegil",
+ "blockCelenegil",
+ 81,
+ 0x94CC48,
+ 0x649128,
+ false),
+ new UniversalSingularityWrapper(
+ "haderoth",
+ "blockHaderoth",
+ 72,
+ 0x77341E,
+ 0x592817,
+ false),
+ new UniversalSingularityWrapper(
+ "tartarite",
+ "blockTartarite",
+ 83,
+ 0xAE3400,
+ 0x792400,
+ false),
+ // Alloys - Nether
+ new UniversalSingularityWrapper(
+ "amordrine",
+ "blockAmordrine",
+ 68,
+ 0xA98DB1,
+ 0x8F6B9A,
+ false),
+ new UniversalSingularityWrapper(
+ "inolashite",
+ "blockInolashite",
+ 67,
+ 0x40AA7D,
+ 0x338864,
+ false)
+ /*
+ * Important Note: The Rest of the Metallurgy Singularities (That are Non-Utility and Non-Alloy)
+ * Can be Found if AOBD Singularities is Used. For the Other Metallurgy Singularities to be
+ * Added, Use AOBD Singularities, with Metallurgy. (Yes, this is a Shoutout and
+ * Semi-Collaboration with RCXcrafter, the Creator of AOBD Singularities, lol.)
+ */
+ )),
+ // PneumaticCraft Singularities
+ new UniversalSingularity(
+ "pneumaticCraft",
+ Collections.singletonList(
+ new UniversalSingularityWrapper(
+ "compressedIron",
+ "blockIronCompressed",
+ 93,
+ 0x636363,
+ 0x515151,
+ false))),
+ // ProjectRed Singularities
+ new UniversalSingularity(
+ "projectRed",
+ Collections.singletonList(
+ new UniversalSingularityWrapper(
+ "electrotine",
+ "blockElectrotine",
+ 1215,
+ 0x0F4985,
+ 0x0D3F72,
+ false))),
+ // Redstone Arsenal Singularities
+ new UniversalSingularity(
+ "redstoneArsenal",
+ Arrays.asList(
+ new UniversalSingularityWrapper(
+ "crystalFlux",
+ "blockCrystalFlux",
+ 76,
+ 0xFE333A,
+ 0xE8111A,
+ false))),
+ // Tinkers' Construct Singularities
+ new UniversalSingularity(
+ "tinkersConstruct",
+ Arrays.asList(
+ new UniversalSingularityWrapper(
+ "aluminumBrass",
+ "blockAluminumBrass",
+ 1824,
+ 0xE2BE4E,
+ 0xD4B148,
+ false),
+ new UniversalSingularityWrapper(
+ "alumite",
+ "blockAlumite",
+ 229,
+ 0xE9ADDA,
+ 0xE298D1,
+ false),
+ new UniversalSingularityWrapper(
+ "ardite",
+ "blockArdite",
+ 304,
+ 0xD24900,
+ 0x960000,
+ false),
+ new UniversalSingularityWrapper(
+ "cobalt",
+ "blockCobalt",
+ 1824,
+ 0x2376DD,
+ 0x023C9B,
+ false),
+ new UniversalSingularityWrapper(
+ "ender",
+ "blockEnderPearl",
+ 608,
+ 0x00B293,
+ 0x00927C,
+ false), // Not TC, but moving changes the meta #s
+ new UniversalSingularityWrapper("glue", "blockGlue", 912, 0xDBD0D0, 0xCEBFBF, false),
+ new UniversalSingularityWrapper(
+ "manyullyn",
+ "blockManyullyn",
+ 380,
+ 0xA97DE0,
+ 0x926AC3,
+ false)))
+ /*
+ * Removed new UniversalSingularityWrapper("salt", "blockSalt", 87, 0xEFEFEF, 0xDDE7E8), new
+ * UniversalSingularityWrapper("red_aurum", "blockRed_aurum", 78, 0xFF4809, 0xFF3D09)
+ */
+ );
+ final Configuration config = new Configuration(
+ new File("." + separatorChar + "config" + separatorChar + "UniversalSingularities.cfg"));
+ hideDisabledSingularities = config.get(Configuration.CATEGORY_GENERAL, "hideDisabledSingularitiesInNei", true)
+ .getBoolean() && Loader.isModLoaded("NotEnoughItems");
+ universalSingularities.forEach(universalSingularity -> {
+ if (config.get(universalSingularity.name, "enabled", true).getBoolean()) {
+ for (int i = 0; i < universalSingularity.singularities.size(); i++) {
+ final UniversalSingularityWrapper universalSingularityWrapper = universalSingularity.singularities
+ .get(i);
+ if (config.get(
+ universalSingularity.name,
+ universalSingularityWrapper.name,
+ universalSingularityWrapper.enabled).getBoolean()) {
+ if (!allowed.containsKey(universalSingularity.name))
+ allowed.put(universalSingularity.name, new HashSet<>());
+ allowed.get(universalSingularity.name).add(universalSingularityWrapper.name);
+ }
+ }
+ singularities.add(
+ new UniversalSingularityItem(universalSingularity.name, universalSingularity.singularities));
+ }
+ });
+ coalSingularityEasterEgg = config.get(Configuration.CATEGORY_GENERAL, "coalSingularityEasterEgg", true)
+ .getBoolean();
+ if (config.hasChanged()) config.save();
+ }
- //Base Values were Generated by random.org [Min: 65, Max: 95]
- /*Instructions on Base Values:
- * 1) Generate Random Numbers.
- * 2) Fill Up the Entire Section's Base Values.
- * 3) [Only Applicable if the Section has 1+ Singularities in it] Check for Any Duplicate Base Values.
- * 4) [Only Applicable if the Section has 1+ Singularities in it] [If there are Any Duplicate Base Values] Re-roll Using the Random Number Generator, and Repeat from Step 3 Onwards.
- */
- //Structure of Data: Name, Block Name, Base Value, Lighter Colour Value, Darker Colour Value
- public CommonProxy()
- {
- final List universalSingularities = Arrays.asList(
- // Vanilla Singularities
- new UniversalSingularity("vanilla", Arrays.asList(
- new UniversalSingularityWrapper("coal", "blockCoal", 90, 0x282828, 0x0C0C0C),
- new UniversalSingularityWrapper("emerald", "blockEmerald", 81, 0x60DB83, 0x2CA746),
- new UniversalSingularityWrapper("diamond", "blockDiamond", 76, 0x4AEDD1, 0x30DBBD)
- )),
- // General (Not Mod Specific)
- new UniversalSingularity("general", Arrays.asList(
- new UniversalSingularityWrapper("aluminum", "blockAluminum", 92, 0xEDEDED, 0xC5C5C5),
- new UniversalSingularityWrapper("brass", "blockBrass", 67, 0xD89634, 0x8B5F1B),
- new UniversalSingularityWrapper("bronze", "blockBronze", 90, 0xCA904E, 0xC97A25),
- new UniversalSingularityWrapper("charcoal", "blockCharcoal", 81, 0x605543, 0x100E0B),
- new UniversalSingularityWrapper("electrum", "blockElectrum", 94, 0xFDEF5A, 0xEFE252),
- new UniversalSingularityWrapper("invar", "blockInvar", 95, 0xD0D7CE, 0xACB4B1),
- new UniversalSingularityWrapper("magnesium", "blockMagnesium", 77, 0x937C6C, 0x776457),
- new UniversalSingularityWrapper("osmium", "blockOsmium", 69, 0xAABACE, 0x9BABC4),
- new UniversalSingularityWrapper("peridot", "blockPeridot", 95, 0x58A52B, 0x4E9226),
- new UniversalSingularityWrapper("ruby", "blockRuby", 91, 0xB44848, 0x993D3D),
- new UniversalSingularityWrapper("sapphire", "blockSapphire", 86, 0x5173D1, 0x466ACE),
- new UniversalSingularityWrapper("steel", "blockSteel", 88, 0x9F9F9F, 0x888888),
- new UniversalSingularityWrapper("titanium", "blockTitanium", 90, 0x1C242E, 0x192029, false),
- new UniversalSingularityWrapper("tungsten", "blockTungsten", 79, 0xD6D6D6, 0xCACACA, false),
- new UniversalSingularityWrapper("uranium", "blockUranium", 75, 0x00CB40, 0x00C43E, false),
- new UniversalSingularityWrapper("zinc", "blockZinc", 76, 0xBFC55C, 0x939836)
- )),
- // Big Reactors Singularities
- new UniversalSingularity("bigReactors", Arrays.asList(
- new UniversalSingularityWrapper("blutonium", "blockBlutonium", 68, 0x4642D6, 0x1B00E6),
- new UniversalSingularityWrapper("cyanite", "blockCyanite", 86, 0x5CAFDB, 0x0087EF),
- new UniversalSingularityWrapper("graphite", "blockGraphite", 94, 0x5D5D5D, 0x444444),
- new UniversalSingularityWrapper("ludicrite", "blockLudicrite", 88, 0xF001E8, 0xF103B1),
- new UniversalSingularityWrapper("yellorium", "blockYellorium", 75, 0xD9DB5C, 0xEBFF3D)
- )),
- // Draconic Evolution Singularities
- new UniversalSingularity("draconicEvolution", Arrays.asList(
- new UniversalSingularityWrapper("draconium", "blockDraconium", 89, 0x8E5CC0, 0x7C4AAE),
- new UniversalSingularityWrapper("draconiumAwakened", "blockDraconiumAwakened", 83, 0xFF7200, 0xFF6600, false)
- )),
- // Ender IO Singularities
- new UniversalSingularity("enderIO", Arrays.asList(
- new UniversalSingularityWrapper("conductiveIron", "blockConductiveIron", 65, 0xCA9D9D, 0xC39499),
- new UniversalSingularityWrapper("electricalSteel", "blockElectricalSteel", 91, 0x949494, 0x8D8D8D),
- new UniversalSingularityWrapper("energeticAlloy", "blockEnergeticAlloy", 83, 0xFFA638, 0xFF9C21),
- new UniversalSingularityWrapper("darkSteel", "blockDarkSteel", 77, 0x3C3C3C, 0x383838),
- new UniversalSingularityWrapper("pulsatingIron", "blockPulsatingIron", 74, 0x82FA9E, 0x69EA88),
- new UniversalSingularityWrapper("redstoneAlloy", "blockRedstoneAlloy", 89, 0xF25757, 0xD63C3C),
- new UniversalSingularityWrapper("soularium", "blockSoularium", 73, 0x5C4527, 0x5A3E25),
- new UniversalSingularityWrapper("vibrantAlloy", "blockVibrantAlloy", 74, 0xA7CA52, 0x98BB40)
- )),
- // ExtraPlanets Singularities
- new UniversalSingularity("extraPlanets", Arrays.asList(
- new UniversalSingularityWrapper("blueGem", "blockBlueGem", 95, 0x38D7FF, 0x03C6F6, false),
- new UniversalSingularityWrapper("carbon", "blockCarbon", 66, 0x1D1D1D, 0x0F0F0F, false),
- new UniversalSingularityWrapper("crystal", "blockCrystal", 78, 0xE2E2E2, 0xC1C1C1, false),
- new UniversalSingularityWrapper("palladium", "blockPalladium", 93, 0xF0F0F0, 0xE2E2E2, false),
- new UniversalSingularityWrapper("redGem", "blockRedGem", 68, 0xFF3B0C, 0xF93100, false),
- new UniversalSingularityWrapper("whiteGem", "blockWhiteGem", 70, 0xC6C6C6, 0xA5A5A5, false)
- )),
- // ExtraTiC Singularities
- new UniversalSingularity("extraTiC", Arrays.asList(
- new UniversalSingularityWrapper("fairy", "blockFairy", 90, 0xFF83C3, 0xFF65B4),
- new UniversalSingularityWrapper("pokefennium", "blockPokefennium", 71, 0x436B73, 0x485361)
- )),
- // Extra Utilities Singularities
- new UniversalSingularity("extraUtilities", Collections.singletonList(
- new UniversalSingularityWrapper("unstable", "blockUnstable", 67, 0xC5C5C5, 0xB1B1B1)
- )),
- // Mekanism Singularities
- new UniversalSingularity("mekanism", Arrays.asList(
- new UniversalSingularityWrapper("refinedGlowstone", "blockRefinedGlowstone", 67, 0xF4D036, 0xDBA622),
- new UniversalSingularityWrapper("refinedObsidian", "blockRefinedObsidian", 82, 0x57456F, 0x53426A)
- )),
- // Metallurgy Singularities
- new UniversalSingularity("metallurgy", Arrays.asList(
- //Utility
- new UniversalSingularityWrapper("bitumen", "blockBitumen", 93, 0x242424, 0x313131),
- new UniversalSingularityWrapper("phosphorus", "blockPhosphorus", 87, 0xA27777, 0x8B5F5F),
- new UniversalSingularityWrapper("potash", "blockPotash", 85, 0xEF9103, 0xDA8403),
- new UniversalSingularityWrapper("saltpeter", "blockSaltpeter", 71, 0xF0F0F0, 0xE1E1E1),
- new UniversalSingularityWrapper("sulfur", "blockSulfur", 66, 0xFFF200, 0xFCD703),
- //Alloys - Base
- new UniversalSingularityWrapper("angmallen", "blockAngmallen", 65, 0xE1D78A, 0xD6C761, false),
- new UniversalSingularityWrapper("damascusSteel", "blockDamascusSteel", 84, 0x996D4D, 0x583F2C, false),
- new UniversalSingularityWrapper("hepatizon", "blockHepatizon", 82, 0x755E75, 0x614E61, false),
- //Alloys - Ender
- new UniversalSingularityWrapper("desichalkos", "blockDesichalkos", 88, 0x722FA8, 0x502176, false),
- //Alloys - Fantasy
- new UniversalSingularityWrapper("blackSteel", "blockBlackSteel", 70, 0x395679, 0x314966, false),
- new UniversalSingularityWrapper("celenegil", "blockCelenegil", 81, 0x94CC48, 0x649128, false),
- new UniversalSingularityWrapper("haderoth", "blockHaderoth", 72, 0x77341E, 0x592817, false),
- new UniversalSingularityWrapper("quicksilver", "blockQuicksilver", 79, 0x7CD3C7, 0x2B8073, false),
- new UniversalSingularityWrapper("tartarite", "blockTartarite", 83, 0xAE3400, 0x792400, false),
- //Alloys - Nether
- new UniversalSingularityWrapper("amordrine", "blockAmordrine", 68, 0xA98DB1, 0x8F6B9A, false),
- new UniversalSingularityWrapper("inolashite", "blockInolashite", 67, 0x40AA7D, 0x338864, false),
- new UniversalSingularityWrapper("shadowSteel", "blockShadowSteel", 77, 0x887362, 0x766354, false)
- /*Important Note:
- * The Rest of the Metallurgy Singularities (That are Non-Utility and Non-Alloy) Can be Found if AOBD Singularities is Used.
- * For the Other Metallurgy Singularities to be Added, Use AOBD Singularities, with Metallurgy.
- * (Yes, this is a Shoutout and Semi-Collaboration with RCXcrafter, the Creator of AOBD Singularities, lol.)
- */
- )),
- // PneumaticCraft Singularities
- new UniversalSingularity("pneumaticCraft", Collections.singletonList(
- new UniversalSingularityWrapper("compressedIron", "blockIronCompressed", 93, 0x636363, 0x515151, false)
- )),
- // ProjectRed Singularities
- new UniversalSingularity("projectRed", Collections.singletonList(
- new UniversalSingularityWrapper("electrotine", "blockElectrotine", 67, 0x0F4985, 0x0D3F72)
- )),
- // Redstone Arsenal Singularities
- new UniversalSingularity("redstoneArsenal", Arrays.asList(
- new UniversalSingularityWrapper("electrumFlux", "blockElectrumFlux", 77, 0xD0B64D, 0xA40606, false),
- new UniversalSingularityWrapper("crystalFlux", "blockCrystalFlux", 76, 0xFE333A, 0xE8111A)
- )),
- // Tinkers' Construct Singularities
- new UniversalSingularity("tinkersConstruct", Arrays.asList(
- new UniversalSingularityWrapper("aluminumBrass", "blockAluminumBrass", 88, 0xE2BE4E, 0xD4B148),
- new UniversalSingularityWrapper("alumite", "blockAlumite", 84, 0xE9ADDA, 0xE298D1),
- new UniversalSingularityWrapper("ardite", "blockArdite", 86, 0xD24900, 0x960000),
- new UniversalSingularityWrapper("cobalt", "blockCobalt", 67, 0x2376DD, 0x023C9B),
- new UniversalSingularityWrapper("ender", "blockEnder", 74, 0x00B293, 0x00927C),
- new UniversalSingularityWrapper("glue", "blockGlue", 85, 0xDBD0D0, 0xCEBFBF, false),
- new UniversalSingularityWrapper("manyullyn", "blockManyullyn", 73, 0xA97DE0, 0x926AC3)
- ))
- /*Removed
- * new UniversalSingularityWrapper("salt", "blockSalt", 87, 0xEFEFEF, 0xDDE7E8),
- * new UniversalSingularityWrapper("red_aurum", "blockRed_aurum", 78, 0xFF4809, 0xFF3D09)
- */
- );
- final Configuration config = new Configuration(new File("." + separatorChar + "config" + separatorChar + "UniversalSingularities.cfg"));
- hideDisabledSingularities = config.get(Configuration.CATEGORY_GENERAL, "hideDisabledSingularitiesInNei", true).getBoolean() && Loader.isModLoaded("NotEnoughItems");
- universalSingularities.forEach(universalSingularity -> {
- if (config.get(universalSingularity.name, "enabled", true).getBoolean()) {
- for (int i = 0; i < universalSingularity.singularities.size(); i++) {
- final UniversalSingularityWrapper universalSingularityWrapper = universalSingularity.singularities.get(i);
- if (config.get(universalSingularity.name, universalSingularityWrapper.name, universalSingularityWrapper.enabled).getBoolean()) {
- if (!allowed.containsKey(universalSingularity.name))
- allowed.put(universalSingularity.name, new HashSet<>());
- allowed.get(universalSingularity.name).add(universalSingularityWrapper.name);
- }
- }
- singularities.add(new UniversalSingularityItem(universalSingularity.name, universalSingularity.singularities));
- }
- });
- coalSingularityEasterEgg = config.get(Configuration.CATEGORY_GENERAL, "coalSingularityEasterEgg", true).getBoolean();
- if (config.hasChanged())
- config.save();
- }
+ public final void preInit() {
+ singularities.forEach(
+ singularity -> GameRegistry
+ .registerItem(singularity, "universal." + singularity.name + ".singularity"));
+ }
- public final void preInit()
- {
- singularities.forEach(singularity -> GameRegistry.registerItem(singularity, "universal." + singularity.name + ".singularity"));
- }
+ public void init() {}
- public void init() {}
+ public final void postInit() {
+ if (craftingOnly) return;
+ addToRecipeInput();
+ }
- public final void postInit()
- {
- if (craftingOnly)
- return;
- addToRecipeInput();
- }
+ private void addToRecipeInput() {
+ singularities.forEach(singularity -> {
+ for (int i = 0; i < singularity.universalSingularities.size(); i++) {
+ final UniversalSingularityWrapper universalSingularityWrapper = singularity.universalSingularities
+ .get(i);
+ if (allowed.containsKey(singularity.name)
+ && allowed.get(singularity.name).contains(universalSingularityWrapper.name)) {
+ final List oreList = OreDictionary.getOres(universalSingularityWrapper.oreName, false);
+ if (oreList != null && !oreList.isEmpty()) {
+ CompressorManager.addOreRecipe(
+ new ItemStack(singularity, 1, i),
+ universalSingularityWrapper.recipeBaseValue,
+ universalSingularityWrapper.oreName);
+ Grinder.catalyst.getInput().add(new ItemStack(singularity, 1, i));
+ } else if (hideDisabledSingularities) NEI.hide(new ItemStack(singularity, 1, i));
+ } else if (hideDisabledSingularities) NEI.hide(new ItemStack(singularity, 1, i));
+ }
+ });
+ if (coalSingularityEasterEgg && allowed.containsKey("vanilla") && allowed.get("vanilla").contains("coal"))
+ GameRegistry.registerFuelHandler(new CoalSingularityFuelHandler(getSingularityByName("vanilla")));
+ }
- private void addToRecipeInput()
- {
- singularities.forEach(singularity -> {
- for (int i = 0; i < singularity.universalSingularities.size(); i++) {
- final UniversalSingularityWrapper universalSingularityWrapper = singularity.universalSingularities.get(i);
- if (allowed.containsKey(singularity.name) && allowed.get(singularity.name).contains(universalSingularityWrapper.name)) {
- final List oreList = OreDictionary.getOres(universalSingularityWrapper.oreName, false);
- if (oreList != null && !oreList.isEmpty()) {
- CompressorManager.addOreRecipe(new ItemStack(singularity, 1, i), universalSingularityWrapper.recipeBaseValue, universalSingularityWrapper.oreName);
- Grinder.catalyst.getInput().add(new ItemStack(singularity, 1, i));
- } else if (hideDisabledSingularities)
- NEI.hide(new ItemStack(singularity, 1, i));
- } else if (hideDisabledSingularities)
- NEI.hide(new ItemStack(singularity, 1, i));
- }
- });
- if (coalSingularityEasterEgg && allowed.containsKey("vanilla") && allowed.get("vanilla").contains("coal"))
- GameRegistry.registerFuelHandler(new CoalSingularityFuelHandler(getSingularityByName("vanilla")));
- }
+ public UniversalSingularityItem getSingularityByName(@Nonnull final String name) {
+ for (final UniversalSingularityItem singularity : singularities)
+ if (singularity.name.equals(name)) return singularity;
+ return null;
+ }
- public UniversalSingularityItem getSingularityByName(@Nonnull final String name)
- {
- for (final UniversalSingularityItem singularity : singularities)
- if (singularity.name.equals(name))
- return singularity;
- return null;
- }
+ private static class CoalSingularityFuelHandler implements IFuelHandler {
- private static class CoalSingularityFuelHandler implements IFuelHandler
- {
- private final UniversalSingularityItem vanillaSingularity;
- private final int burnTime;
+ private final UniversalSingularityItem vanillaSingularity;
+ private final int burnTime;
- private CoalSingularityFuelHandler(@Nonnull final UniversalSingularityItem vanillaSingularity)
- {
- this.vanillaSingularity = vanillaSingularity;
- this.burnTime = 16000 * CompressorManager.getCost(new ItemStack(Blocks.coal_block));
- }
+ private CoalSingularityFuelHandler(@Nonnull final UniversalSingularityItem vanillaSingularity) {
+ this.vanillaSingularity = vanillaSingularity;
+ this.burnTime = 16000 * CompressorManager.getCost(new ItemStack(Blocks.coal_block));
+ }
- @Override
- public int getBurnTime(final ItemStack fuel)
- {
- return fuel != null && fuel.getItem() == vanillaSingularity && fuel.getItemDamage() == 0 ? burnTime : 0;
- }
- }
+ @Override
+ public int getBurnTime(final ItemStack fuel) {
+ return fuel != null && fuel.getItem() == vanillaSingularity && fuel.getItemDamage() == 0 ? burnTime : 0;
+ }
+ }
+}
diff --git a/src/main/resources/assets/uiesingularities/lang/en_US.lang b/src/main/resources/assets/uiesingularities/lang/en_US.lang
index 92caf1d..8a47c70 100644
--- a/src/main/resources/assets/uiesingularities/lang/en_US.lang
+++ b/src/main/resources/assets/uiesingularities/lang/en_US.lang
@@ -11,6 +11,7 @@ item.universalSingularities.vanilla.emerald.name=Emerald Singularity
//Vanilla
//General
+item.avaritia_singularity.name=Singularity
item.universalSingularities.general.aluminum.name=Aluminum Singularity
item.universalSingularities.general.brass.name=Brass Singularity
item.universalSingularities.general.bronze.name=Bronze Singularity
@@ -27,6 +28,25 @@ item.universalSingularities.general.titanium.name=Titanium Singularity
item.universalSingularities.general.tungsten.name=Tungsten Singularity
item.universalSingularities.general.uranium.name=Uranium Singularity
item.universalSingularities.general.zinc.name=Zinc Singularity
+item.universalSingularities.general.palladium.name=Palladium Singularity
+item.universalSingularities.general.saltpeter.name=Saltpeter Singularity
+item.universalSingularities.general.quicksilver.name=Quicksilver Singularity
+item.universalSingularities.general.blackSteel.name=Black Steel Singularity
+item.universalSingularities.general.damascusSteel.name=Damascus Steel Singularity
+item.universalSingularities.general.tricalciumphosphate.name=Tricalcium Phosphate Singularity
+item.universalSingularities.general.shadowSteel.name=Shadow Steel Singularity
+item.universalSingularities.general.sulfur.name=Sulfur Singularity
+item.universalSingularities.general.iridium.name=Iridium Singularity
+item.universalSingularities.general.netherstar.name=Nether Star Singularity
+item.universalSingularities.general.platinum.name=Platinum Singularity
+item.universalSingularities.general.electrumFlux.name=Fluxed Electrum Singularity
+item.universalSingularities.general.naquadria.name=Naquadria Singularity
+item.universalSingularities.general.plutonium.name=Plutonium Singularity
+item.universalSingularities.general.desh.name=Desh Singularity
+item.universalSingularities.general.meteoricIron.name=Meteoric Iron Singularity
+item.universalSingularities.general.europium.name=Europium Singularity
+item.universalSingularities.general.gangue.name=Gangue Singularity
+item.universalSingularities.general.roseGold.name=Rose Gold Singularity
//General
//Big Reactors
@@ -57,7 +77,6 @@ item.universalSingularities.enderIO.vibrantAlloy.name=Vibrant Alloy Singularity
item.universalSingularities.extraPlanets.blueGem.name=Blue Gem Singularity
item.universalSingularities.extraPlanets.carbon.name=Carbon Singularity
item.universalSingularities.extraPlanets.crystal.name=Crystal Singularity
-item.universalSingularities.extraPlanets.palladium.name=Palladium Singularity
item.universalSingularities.extraPlanets.redGem.name=Red Gem Singularity
item.universalSingularities.extraPlanets.whiteGem.name=White Gem Singularity
//ExtraPlanets
@@ -79,26 +98,19 @@ item.universalSingularities.mekanism.refinedObsidian.name=Refined Obsidian Singu
//Metallurgy 4
//Utility
item.universalSingularities.metallurgy.bitumen.name=Bitumen Singularity
-item.universalSingularities.metallurgy.phosphorus.name=Phosphorus Singularity
item.universalSingularities.metallurgy.potash.name=Potash Singularity
-item.universalSingularities.metallurgy.saltpeter.name=Saltpeter Singularity
-item.universalSingularities.metallurgy.sulfur.name=Sulfur Singularity
//Alloys - Base
item.universalSingularities.metallurgy.angmallen.name=Angmallen Singularity
-item.universalSingularities.metallurgy.damascusSteel.name=Damascus Steel Singularity
item.universalSingularities.metallurgy.hepatizon.name=Hepatizon Singularity
//Alloys - Ender
item.universalSingularities.metallurgy.desichalkos.name=Desichalkos Singularity
//Alloys - Fantasy
-item.universalSingularities.metallurgy.blackSteel.name=Black Steel Singularity
item.universalSingularities.metallurgy.celenegil.name=Celenegil Singularity
item.universalSingularities.metallurgy.haderoth.name=Haderoth Singularity
-item.universalSingularities.metallurgy.quicksilver.name=Quicksilver Singularity
item.universalSingularities.metallurgy.tartarite.name=Tartarite Singularity
//Alloys - Nether
item.universalSingularities.metallurgy.amordrine.name=Amordrine Singularity
item.universalSingularities.metallurgy.inolashite.name=Inolashite Singularity
-item.universalSingularities.metallurgy.shadowSteel.name=Shadow Steel Singularity
//Metallurgy 4
//PneumaticCraft
@@ -110,7 +122,6 @@ item.universalSingularities.projectRed.electrotine.name=Electrotine Singularity
//ProjectRed
//Redstone Arsenal
-item.universalSingularities.redstoneArsenal.electrumFlux.name=Fluxed Electrum Singularity
item.universalSingularities.redstoneArsenal.crystalFlux.name=Flux Crystal Singularity
//Redstone Arsenal
diff --git a/src/main/resources/assets/uiesingularities/lang/zh_CN.lang b/src/main/resources/assets/uiesingularities/lang/zh_CN.lang
new file mode 100644
index 0000000..f775eaf
--- /dev/null
+++ b/src/main/resources/assets/uiesingularities/lang/zh_CN.lang
@@ -0,0 +1,139 @@
+//en_US Localization File - Universal Singularities
+//Creator of Localization File: Wealthyturtle
+//Localization File Version: 8.0
+
+//Contact Wealthyturtle/WanionCane If You Would Like to Volunteer to Create a Localization File for Another Language.
+
+//Vanilla
+item.universalSingularities.vanilla.coal.name=煤炭奇点
+item.universalSingularities.vanilla.diamond.name=钻石奇点
+item.universalSingularities.vanilla.emerald.name=绿宝石奇点
+//Vanilla
+
+//General
+item.universalSingularities.general.aluminum.name=铝奇点
+item.universalSingularities.general.brass.name=黄铜奇点
+item.universalSingularities.general.bronze.name=青铜奇点
+item.universalSingularities.general.charcoal.name=木炭奇点
+item.universalSingularities.general.electrum.name=琥珀金奇点
+item.universalSingularities.general.invar.name=殷钢奇点
+item.universalSingularities.general.magnesium.name=镁奇点
+item.universalSingularities.general.osmium.name=锇奇点
+item.universalSingularities.general.peridot.name=橄榄石奇点
+item.universalSingularities.general.ruby.name=红宝石奇点
+item.universalSingularities.general.sapphire.name=蓝宝石奇点
+item.universalSingularities.general.steel.name=钢奇点
+item.universalSingularities.general.titanium.name=钛奇点
+item.universalSingularities.general.tungsten.name=钨奇点
+item.universalSingularities.general.uranium.name=铀奇点
+item.universalSingularities.general.zinc.name=锌奇点
+item.universalSingularities.general.palladium.name=钯奇点
+item.universalSingularities.general.saltpeter.name=硝石奇点
+item.universalSingularities.general.quicksilver.name=水银奇点
+item.universalSingularities.general.blackSteel.name=黑钢奇点
+item.universalSingularities.general.damascusSteel.name=大马士革钢奇点
+item.universalSingularities.general.phosphorus.name=磷奇点
+item.universalSingularities.general.shadowSteel.name=暗影钢奇点
+item.universalSingularities.general.sulfur.name=硫奇点
+item.universalSingularities.general.iridium.name=铱奇点
+item.universalSingularities.general.netherstar.name=下界之星奇点
+item.universalSingularities.general.platinum.name=铂奇点
+item.universalSingularities.general.electrumFlux.name=流体琥珀金奇点
+item.universalSingularities.general.naquadria.name=超能硅岩奇点
+item.universalSingularities.general.plutonium.name=钚奇点
+item.universalSingularities.general.desh.name=戴斯奇点
+item.universalSingularities.general.meteoricIron.name=陨铁奇点
+item.universalSingularities.general.europium.name=铕奇点
+//General
+
+//Big Reactors
+item.universalSingularities.bigReactors.blutonium.name=蓝钚奇点
+item.universalSingularities.bigReactors.cyanite.name=蓝晶奇点
+item.universalSingularities.bigReactors.graphite.name=石墨奇点
+item.universalSingularities.bigReactors.ludicrite.name=纯镥奇点
+item.universalSingularities.bigReactors.yellorium.name=黄铀奇点
+//Big Reactors
+
+//Draconic Evolution
+item.universalSingularities.draconicEvolution.draconium.name=龙奇点
+item.universalSingularities.draconicEvolution.draconiumAwakened.name=觉醒龙奇点
+//Draconic Evolution
+
+//Ender IO
+item.universalSingularities.enderIO.conductiveIron.name=导电铁奇点
+item.universalSingularities.enderIO.electricalSteel.name=磁钢奇点
+item.universalSingularities.enderIO.energeticAlloy.name=充能合金奇点
+item.universalSingularities.enderIO.darkSteel.name=玄钢奇点
+item.universalSingularities.enderIO.pulsatingIron.name=脉动铁奇点
+item.universalSingularities.enderIO.redstoneAlloy.name=红石合金奇点
+item.universalSingularities.enderIO.soularium.name=魂金奇点
+item.universalSingularities.enderIO.vibrantAlloy.name=脉冲合金奇点
+//Ender IO
+
+//ExtraPlanets
+item.universalSingularities.extraPlanets.blueGem.name=蓝色宝石奇点
+item.universalSingularities.extraPlanets.carbon.name=碳奇点
+item.universalSingularities.extraPlanets.crystal.name=水晶奇点
+item.universalSingularities.extraPlanets.redGem.name=红色宝石奇点
+item.universalSingularities.extraPlanets.whiteGem.name=白色宝石奇点
+//ExtraPlanets
+
+//ExtraTiC
+item.universalSingularities.extraTiC.fairy.name=精灵奇点
+item.universalSingularities.extraTiC.pokefennium.name=铁血奇点
+//ExtraTiC
+
+//Extra Utilities
+item.universalSingularities.extraUtilities.unstable.name=不稳定金属奇点
+//Extra Utilities
+
+//Mekanism
+item.universalSingularities.mekanism.refinedGlowstone.name=强化荧石奇点
+item.universalSingularities.mekanism.refinedObsidian.name=强化黑曜石奇点
+//Mekanism
+
+//Metallurgy 4
+//Utility
+item.universalSingularities.metallurgy.bitumen.name=沥青奇点
+item.universalSingularities.metallurgy.potash.name=碳酸钾奇点
+//Alloys - Base
+item.universalSingularities.metallurgy.angmallen.name=金铁奇点
+item.universalSingularities.metallurgy.hepatizon.name=魂晶奇点
+//Alloys - Ender
+item.universalSingularities.metallurgy.desichalkos.name=虚空魂石奇点
+//Alloys - Fantasy
+item.universalSingularities.metallurgy.celenegil.name=幽冥毒晶奇点
+item.universalSingularities.metallurgy.haderoth.name=幻铜奇点
+item.universalSingularities.metallurgy.tartarite.name=熔火石奇点
+//Alloys - Nether
+item.universalSingularities.metallurgy.amordrine.name=魔石奇点
+item.universalSingularities.metallurgy.inolashite.name=暗影秘银蓝金奇点
+//Metallurgy 4
+
+//PneumaticCraft
+item.universalSingularities.pneumaticCraft.compressedIron.name=致密铁奇点
+//PneumaticCraft
+
+//ProjectRed
+item.universalSingularities.projectRed.electrotine.name=蓝石奇点
+//ProjectRed
+
+//Redstone Arsenal
+item.universalSingularities.redstoneArsenal.crystalFlux.name=红石水晶奇点
+//Redstone Arsenal
+
+//Tinkers' Construct
+item.universalSingularities.tinkersConstruct.aluminumBrass.name=铝黄铜奇点
+item.universalSingularities.tinkersConstruct.alumite.name=耐酸铝奇点
+item.universalSingularities.tinkersConstruct.ardite.name=阿迪特奇点
+item.universalSingularities.tinkersConstruct.cobalt.name=钴奇点
+item.universalSingularities.tinkersConstruct.ender.name=末影奇点
+item.universalSingularities.tinkersConstruct.glue.name=凝胶奇点
+item.universalSingularities.tinkersConstruct.manyullyn.name=玛玉灵奇点
+//item.universalSingularities.tinkersConstruct.pigIron.name=生铁奇点
+//Tinkers' Construct
+
+/*Removed
+ * item.universalSingularities.general.salt.name=盐奇点
+ * item.universalSingularities.extraTiC.red_aurum.name=红金奇点
+ */
diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info
index 8d88f1e..15bb814 100644
--- a/src/main/resources/mcmod.info
+++ b/src/main/resources/mcmod.info
@@ -1,15 +1,13 @@
-[
-{
- "modid": "universalsingularities",
- "name": "Universal Singularities",
+[{
+ "modid": "${modId}",
+ "name": "${modName}",
"description": "A Mod that Adds an Unending Amount of Singularities!",
- "version": "8.0",
- "mcversion": "1.7.10",
+ "version": "${modVersion}",
+ "mcversion": "${minecraftVersion}",
"url": "https://minecraft.curseforge.com/projects/universal-singularities",
"updateUrl": "",
"authorList": ["Wealthyturtle, WanionCane"],
"logoFile": "",
"screenshots": [],
"dependencies": []
-}
-]
+}]