Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fab7b9b354 | ||
|
|
f8e96eaa59 | ||
|
|
1eeddad48f | ||
|
|
7e625f2bff | ||
|
|
47bd7efd19 | ||
|
|
4f8336dc5b | ||
|
|
b19a4c98b8 | ||
|
|
5f4a9794b0 | ||
|
|
6a00ab5d88 | ||
|
|
da6e0c5ba0 | ||
|
|
edc8786d79 | ||
|
|
88d7baef0a | ||
|
|
efc8eba67b | ||
|
|
f4f2b857b7 | ||
|
|
958da172e4 | ||
|
|
3669b5a690 | ||
|
|
d46289b0e1 | ||
|
|
07152aaee0 | ||
|
|
86da15ac65 | ||
|
|
979957a4c0 | ||
|
|
13634ef7c8 | ||
|
|
def6497c99 | ||
|
|
1448342910 |
No files matched your search
@@ -0,0 +1,26 @@
|
||||
# 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
|
||||
|
||||
[*.java]
|
||||
indent_size = 2
|
||||
ij_java_space_before_if_parentheses = false
|
||||
|
||||
[*.lang]
|
||||
trim_trailing_whitespace = false
|
||||
@@ -1,9 +0,0 @@
|
||||
directory="run/crash-reports"
|
||||
if [ -d $directory ]; then
|
||||
echo "Crash reports detected:"
|
||||
cat $directory/*
|
||||
exit 1
|
||||
else
|
||||
echo "No crash reports detected"
|
||||
exit 0
|
||||
fi
|
||||
@@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
RUNDIR="run"
|
||||
CRASH="crash-reports"
|
||||
SERVERLOG="server.log"
|
||||
|
||||
if [[ -d $RUNDIR/$CRASH ]]; then
|
||||
echo "Crash reports detected:"
|
||||
cat $RUNDIR/$CRASH/crash*.txt
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if grep --quiet "Fatal errors were detected" $SERVERLOG; 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" $SERVERLOG; then
|
||||
echo "Server force stopped:"
|
||||
cat server.log
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! grep --quiet -Po '.+Done \(.+\)\! For help, type "help" or "\?"' $SERVERLOG; then
|
||||
echo "Server didn't finish startup:"
|
||||
cat server.log
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "No crash reports detected"
|
||||
exit 0
|
||||
|
||||
@@ -14,32 +14,32 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
|
||||
- name: Set up JDK 8
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '8'
|
||||
distribution: 'adopt'
|
||||
cache: gradle
|
||||
|
||||
|
||||
- name: Grant execute permission for gradlew
|
||||
run: chmod +x gradlew
|
||||
|
||||
- name: Setup the workspace
|
||||
run: ./gradlew setupDecompWorkspace
|
||||
|
||||
run: ./gradlew setupCIWorkspace
|
||||
|
||||
- name: Build the mod
|
||||
run: ./gradlew build
|
||||
|
||||
- name: Run server for 1 minute
|
||||
- name: Run server for 1.5 minutes
|
||||
run: |
|
||||
mkdir run
|
||||
echo "eula=true" > run/eula.txt
|
||||
timeout 60 ./gradlew runServer || true
|
||||
echo "eula=true" > run/eula.txt
|
||||
timeout 90 ./gradlew runServer 2>&1 | tee -a server.log || true
|
||||
|
||||
- name: Test no crashes happend
|
||||
- name: Test no errors reported during server run
|
||||
run: |
|
||||
chmod +x .github/scripts/test-no-crash-reports.sh
|
||||
.github/scripts/test-no-crash-reports.sh
|
||||
chmod +x .github/scripts/test-no-error-reports.sh
|
||||
.github/scripts/test-no-error-reports.sh
|
||||
@@ -1,34 +1,41 @@
|
||||
//version: 1643020202
|
||||
//version: 1655755555
|
||||
/*
|
||||
DO NOT CHANGE THIS FILE!
|
||||
|
||||
Also, you may replace this file at any time if there is an update available.
|
||||
Please check https://github.com/GTNewHorizons/ExampleMod1.7.10/blob/main/build.gradle for updates.
|
||||
*/
|
||||
*/
|
||||
|
||||
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation
|
||||
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
|
||||
import org.gradle.internal.logging.text.StyledTextOutput.Style
|
||||
import org.gradle.internal.logging.text.StyledTextOutputFactory
|
||||
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Paths
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.zip.ZipEntry
|
||||
import java.util.zip.ZipInputStream
|
||||
import java.util.zip.ZipOutputStream
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
maven {
|
||||
name = "forge"
|
||||
url = "https://maven.minecraftforge.net"
|
||||
name 'forge'
|
||||
url 'https://maven.minecraftforge.net'
|
||||
}
|
||||
maven {
|
||||
name = "sonatype"
|
||||
url = "https://oss.sonatype.org/content/repositories/snapshots/"
|
||||
name 'sonatype'
|
||||
url 'https://oss.sonatype.org/content/repositories/snapshots/'
|
||||
}
|
||||
maven {
|
||||
name = "Scala CI dependencies"
|
||||
url = "https://repo1.maven.org/maven2/"
|
||||
name 'Scala CI dependencies'
|
||||
url 'https://repo1.maven.org/maven2/'
|
||||
}
|
||||
maven {
|
||||
name = "jitpack"
|
||||
url = "https://jitpack.io"
|
||||
name 'jitpack'
|
||||
url 'https://jitpack.io'
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
@@ -37,16 +44,27 @@ buildscript {
|
||||
}
|
||||
|
||||
plugins {
|
||||
id 'java-library'
|
||||
id 'idea'
|
||||
id 'eclipse'
|
||||
id 'scala'
|
||||
id("org.ajoberstar.grgit") version("3.1.1")
|
||||
id("com.github.johnrengelman.shadow") version("4.0.4")
|
||||
id("com.palantir.git-version") version("0.12.3")
|
||||
id('de.undercouch.download') version('4.1.2')
|
||||
id("maven-publish")
|
||||
id 'maven-publish'
|
||||
id 'org.jetbrains.kotlin.jvm' version '1.5.30' apply false
|
||||
id 'org.jetbrains.kotlin.kapt' version '1.5.30' apply false
|
||||
id 'com.google.devtools.ksp' version '1.5.30-1.0.0' apply false
|
||||
id 'org.ajoberstar.grgit' version '4.1.1'
|
||||
id 'com.github.johnrengelman.shadow' version '4.0.4'
|
||||
id 'com.palantir.git-version' version '0.13.0' apply false
|
||||
id 'de.undercouch.download' version '5.0.1'
|
||||
id 'com.github.gmazzo.buildconfig' version '3.0.3' apply false
|
||||
}
|
||||
|
||||
if (project.file('.git/HEAD').isFile()) {
|
||||
apply plugin: 'com.palantir.git-version'
|
||||
}
|
||||
|
||||
def out = services.get(StyledTextOutputFactory).create('an-output')
|
||||
|
||||
apply plugin: 'forge'
|
||||
|
||||
def projectJavaVersion = JavaLanguageVersion.of(8)
|
||||
@@ -91,27 +109,34 @@ checkPropertyExists("usesShadowedDependencies")
|
||||
checkPropertyExists("developmentEnvironmentUserName")
|
||||
|
||||
boolean noPublishedSources = project.findProperty("noPublishedSources") ? project.noPublishedSources.toBoolean() : false
|
||||
boolean usesMixinDebug = project.findProperty('usesMixinDebug') ?: project.usesMixins.toBoolean()
|
||||
String channel = project.findProperty('channel') ? project.channel : 'stable'
|
||||
String mappingsVersion = project.findProperty('mappingsVersion') ? project.mappingsVersion : '12'
|
||||
String remoteMappings = project.findProperty('remoteMappings') ? project.remoteMappings : 'https://raw.githubusercontent.com/MinecraftForge/FML/1.7.10/conf/'
|
||||
|
||||
String javaSourceDir = "src/main/java/"
|
||||
String scalaSourceDir = "src/main/scala/"
|
||||
String kotlinSourceDir = "src/main/kotlin/"
|
||||
|
||||
String targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/")
|
||||
String targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/")
|
||||
if((getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists()) == false) {
|
||||
throw new GradleException("Could not resolve \"modGroup\"! Could not find " + targetPackageJava + " or " + targetPackageScala)
|
||||
String targetPackageKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/")
|
||||
if(!(getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists() || getFile(targetPackageKotlin).exists())) {
|
||||
throw new GradleException("Could not resolve \"modGroup\"! Could not find " + targetPackageJava + " or " + targetPackageScala + " or " + targetPackageKotlin)
|
||||
}
|
||||
|
||||
if(apiPackage) {
|
||||
targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/")
|
||||
targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/")
|
||||
if((getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists()) == false) {
|
||||
throw new GradleException("Could not resolve \"apiPackage\"! Could not find " + targetPackageJava + " or " + targetPackageScala)
|
||||
targetPackageKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/")
|
||||
if(!(getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists() || getFile(targetPackageKotlin).exists())) {
|
||||
throw new GradleException("Could not resolve \"apiPackage\"! Could not find " + targetPackageJava + " or " + targetPackageScala + " or " + targetPackageKotlin)
|
||||
}
|
||||
}
|
||||
|
||||
if(accessTransformersFile) {
|
||||
String targetFile = "src/main/resources/META-INF/" + accessTransformersFile
|
||||
if(getFile(targetFile).exists() == false) {
|
||||
if(!getFile(targetFile).exists()) {
|
||||
throw new GradleException("Could not resolve \"accessTransformersFile\"! Could not find " + targetFile)
|
||||
}
|
||||
}
|
||||
@@ -123,15 +148,17 @@ if(usesMixins.toBoolean()) {
|
||||
|
||||
targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/")
|
||||
targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/")
|
||||
if((getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists()) == false) {
|
||||
throw new GradleException("Could not resolve \"mixinsPackage\"! Could not find " + targetPackageJava + " or " + targetPackageScala)
|
||||
targetPackageKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/")
|
||||
if(!(getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists() || getFile(targetPackageKotlin).exists())) {
|
||||
throw new GradleException("Could not resolve \"mixinsPackage\"! Could not find " + targetPackageJava + " or " + targetPackageScala + " or " + targetPackageKotlin)
|
||||
}
|
||||
|
||||
String targetFileJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".java"
|
||||
String targetFileScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".scala"
|
||||
String targetFileScalaJava = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".java"
|
||||
if((getFile(targetFileJava).exists() || getFile(targetFileScala).exists() || getFile(targetFileScalaJava).exists()) == false) {
|
||||
throw new GradleException("Could not resolve \"mixinPlugin\"! Could not find " + targetFileJava + " or " + targetFileScala + " or " + targetFileScalaJava)
|
||||
String targetFileKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".kt"
|
||||
if(!(getFile(targetFileJava).exists() || getFile(targetFileScala).exists() || getFile(targetFileScalaJava).exists() || getFile(targetFileKotlin).exists())) {
|
||||
throw new GradleException("Could not resolve \"mixinPlugin\"! Could not find " + targetFileJava + " or " + targetFileScala + " or " + targetFileScalaJava + " or " + targetFileKotlin)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,8 +166,9 @@ if(coreModClass) {
|
||||
String targetFileJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".java"
|
||||
String targetFileScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".scala"
|
||||
String targetFileScalaJava = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".java"
|
||||
if((getFile(targetFileJava).exists() || getFile(targetFileScala).exists() || getFile(targetFileScalaJava).exists()) == false) {
|
||||
throw new GradleException("Could not resolve \"coreModClass\"! Could not find " + targetFileJava + " or " + targetFileScala + " or " + targetFileScalaJava)
|
||||
String targetFileKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".kt"
|
||||
if(!(getFile(targetFileJava).exists() || getFile(targetFileScala).exists() || getFile(targetFileScalaJava).exists() || getFile(targetFileKotlin).exists())) {
|
||||
throw new GradleException("Could not resolve \"coreModClass\"! Could not find " + targetFileJava + " or " + targetFileScala + " or " + targetFileScalaJava + " or " + targetFileKotlin)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,17 +181,35 @@ configurations.all {
|
||||
}
|
||||
|
||||
// Fix Jenkins' Git: chmod a file should not be detected as a change and append a '.dirty' to the version
|
||||
'git config core.fileMode false'.execute()
|
||||
try {
|
||||
'git config core.fileMode false'.execute()
|
||||
}
|
||||
catch (Exception ignored) {
|
||||
out.style(Style.Failure).println("git isn't installed at all")
|
||||
}
|
||||
|
||||
// Pulls version first from the VERSION env and then git tag
|
||||
String identifiedVersion
|
||||
String versionOverride = System.getenv("VERSION") ?: null
|
||||
try {
|
||||
String versionOverride = System.getenv("VERSION") ?: null
|
||||
identifiedVersion = versionOverride == null ? gitVersion() : versionOverride
|
||||
version = minecraftVersion + "-" + identifiedVersion
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw new IllegalStateException("This mod must be version controlled by Git AND the repository must provide at least one tag, or the VERSION override must be set!");
|
||||
catch (Exception ignored) {
|
||||
out.style(Style.Failure).text(
|
||||
'This mod must be version controlled by Git AND the repository must provide at least one tag,\n' +
|
||||
'or the VERSION override must be set! ').style(Style.SuccessHeader).text('(Do NOT download from GitHub using the ZIP option, instead\n' +
|
||||
'clone the repository, see ').style(Style.Info).text('https://gtnh.miraheze.org/wiki/Development').style(Style.SuccessHeader).println(' for details.)'
|
||||
)
|
||||
versionOverride = 'NO-GIT-TAG-SET'
|
||||
identifiedVersion = versionOverride
|
||||
}
|
||||
version = minecraftVersion + '-' + identifiedVersion
|
||||
ext {
|
||||
modVersion = identifiedVersion
|
||||
}
|
||||
|
||||
if(identifiedVersion == versionOverride) {
|
||||
out.style(Style.Failure).text('Override version to ').style(Style.Identifier).text(modVersion).style(Style.Failure).println('!\7')
|
||||
}
|
||||
|
||||
group = modGroup
|
||||
@@ -174,22 +220,25 @@ else {
|
||||
archivesBaseName = modId
|
||||
}
|
||||
|
||||
|
||||
def arguments = []
|
||||
def jvmArguments = []
|
||||
|
||||
if(usesMixins.toBoolean()) {
|
||||
if (usesMixins.toBoolean()) {
|
||||
arguments += [
|
||||
"--tweakClass org.spongepowered.asm.launch.MixinTweaker"
|
||||
]
|
||||
jvmArguments += [
|
||||
"-Dmixin.debug.countInjections=true", "-Dmixin.debug.verbose=true", "-Dmixin.debug.export=true"
|
||||
"--tweakClass org.spongepowered.asm.launch.MixinTweaker"
|
||||
]
|
||||
if (usesMixinDebug.toBoolean()) {
|
||||
jvmArguments += [
|
||||
"-Dmixin.debug.countInjections=true",
|
||||
"-Dmixin.debug.verbose=true",
|
||||
"-Dmixin.debug.export=true"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
minecraft {
|
||||
version = minecraftVersion + "-" + forgeVersion + "-" + minecraftVersion
|
||||
runDir = "run"
|
||||
version = minecraftVersion + '-' + forgeVersion + '-' + minecraftVersion
|
||||
runDir = 'run'
|
||||
|
||||
if (replaceGradleTokenInFile) {
|
||||
replaceIn replaceGradleTokenInFile
|
||||
@@ -200,7 +249,7 @@ minecraft {
|
||||
replace gradleTokenModName, modName
|
||||
}
|
||||
if(gradleTokenVersion) {
|
||||
replace gradleTokenVersion, versionDetails().lastTag
|
||||
replace gradleTokenVersion, modVersion
|
||||
}
|
||||
if(gradleTokenGroupName) {
|
||||
replace gradleTokenGroupName, modGroup
|
||||
@@ -222,8 +271,8 @@ minecraft {
|
||||
}
|
||||
}
|
||||
|
||||
if(file("addon.gradle").exists()) {
|
||||
apply from: "addon.gradle"
|
||||
if(file('addon.gradle').exists()) {
|
||||
apply from: 'addon.gradle'
|
||||
}
|
||||
|
||||
apply from: 'repositories.gradle'
|
||||
@@ -236,58 +285,63 @@ configurations {
|
||||
|
||||
repositories {
|
||||
maven {
|
||||
name = "Overmind forge repo mirror"
|
||||
url = "https://gregtech.overminddl1.com/"
|
||||
name 'Overmind forge repo mirror'
|
||||
url 'https://gregtech.overminddl1.com/'
|
||||
}
|
||||
if(usesMixins.toBoolean()) {
|
||||
maven {
|
||||
name = "sponge"
|
||||
url = "https://repo.spongepowered.org/repository/maven-public"
|
||||
name 'sponge'
|
||||
url 'https://repo.spongepowered.org/repository/maven-public'
|
||||
}
|
||||
maven {
|
||||
url = "https://jitpack.io"
|
||||
url 'https://jitpack.io'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
if(usesMixins.toBoolean()) {
|
||||
annotationProcessor("org.ow2.asm:asm-debug-all:5.0.3")
|
||||
annotationProcessor("com.google.guava:guava:24.1.1-jre")
|
||||
annotationProcessor("com.google.code.gson:gson:2.8.6")
|
||||
annotationProcessor("org.spongepowered:mixin:0.8-SNAPSHOT")
|
||||
annotationProcessor('org.ow2.asm:asm-debug-all:5.0.3')
|
||||
annotationProcessor('com.google.guava:guava:24.1.1-jre')
|
||||
annotationProcessor('com.google.code.gson:gson:2.8.6')
|
||||
annotationProcessor('org.spongepowered:mixin:0.8-SNAPSHOT')
|
||||
// using 0.8 to workaround a issue in 0.7 which fails mixin application
|
||||
compile("com.github.GTNewHorizons:SpongePoweredMixin:0.7.12-GTNH") {
|
||||
compile('com.github.GTNewHorizons:SpongePoweredMixin:0.7.12-GTNH') {
|
||||
// Mixin includes a lot of dependencies that are too up-to-date
|
||||
exclude module: "launchwrapper"
|
||||
exclude module: "guava"
|
||||
exclude module: "gson"
|
||||
exclude module: "commons-io"
|
||||
exclude module: "log4j-core"
|
||||
exclude module: 'launchwrapper'
|
||||
exclude module: 'guava'
|
||||
exclude module: 'gson'
|
||||
exclude module: 'commons-io'
|
||||
exclude module: 'log4j-core'
|
||||
}
|
||||
compile("com.github.GTNewHorizons:SpongeMixins:1.5.0")
|
||||
compile('com.github.GTNewHorizons:SpongeMixins:1.5.0')
|
||||
}
|
||||
}
|
||||
|
||||
apply from: 'dependencies.gradle'
|
||||
|
||||
def mixingConfigRefMap = "mixins." + modId + ".refmap.json"
|
||||
def mixingConfigRefMap = 'mixins.' + modId + '.refmap.json'
|
||||
def refMap = "${tasks.compileJava.temporaryDir}" + File.separator + mixingConfigRefMap
|
||||
def mixinSrg = "${tasks.reobf.temporaryDir}" + File.separator + "mixins.srg"
|
||||
|
||||
task generateAssets {
|
||||
if(usesMixins.toBoolean()) {
|
||||
getFile("/src/main/resources/mixins." + modId + ".json").text = """{
|
||||
if (usesMixins.toBoolean()) {
|
||||
def mixinConfigFile = getFile("/src/main/resources/mixins." + modId + ".json");
|
||||
if (!mixinConfigFile.exists()) {
|
||||
mixinConfigFile.text = """{
|
||||
"required": true,
|
||||
"minVersion": "0.7.11",
|
||||
"package": "${modGroup}.${mixinsPackage}",
|
||||
"plugin": "${modGroup}.${mixinPlugin}",
|
||||
"refmap": "${mixingConfigRefMap}",
|
||||
"target": "@env(DEFAULT)",
|
||||
"compatibilityLevel": "JAVA_8"
|
||||
"compatibilityLevel": "JAVA_8",
|
||||
"mixins": [],
|
||||
"client": [],
|
||||
"server": []
|
||||
}
|
||||
|
||||
"""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -375,8 +429,7 @@ tasks.withType(JavaExec).configureEach {
|
||||
)
|
||||
}
|
||||
|
||||
processResources
|
||||
{
|
||||
processResources {
|
||||
// this will ensure that this task is redone when the versions change.
|
||||
inputs.property "version", project.version
|
||||
inputs.property "mcversion", project.minecraft.version
|
||||
@@ -385,18 +438,18 @@ processResources
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
include 'mcmod.info'
|
||||
|
||||
// replace version and mcversion
|
||||
// replace modVersion and minecraftVersion
|
||||
expand "minecraftVersion": project.minecraft.version,
|
||||
"modVersion": versionDetails().lastTag,
|
||||
"modId": modId,
|
||||
"modName": modName
|
||||
"modVersion": modVersion,
|
||||
"modId": modId,
|
||||
"modName": modName
|
||||
}
|
||||
|
||||
if(usesMixins.toBoolean()) {
|
||||
from refMap
|
||||
}
|
||||
|
||||
// copy everything else, thats not the mcmod.info
|
||||
// copy everything else that's not the mcmod.info
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
exclude 'mcmod.info'
|
||||
}
|
||||
@@ -404,7 +457,7 @@ processResources
|
||||
|
||||
def getManifestAttributes() {
|
||||
def manifestAttributes = [:]
|
||||
if(containsMixinsAndOrCoreModOnly.toBoolean() == false && (usesMixins.toBoolean() || coreModClass)) {
|
||||
if(!containsMixinsAndOrCoreModOnly.toBoolean() && (usesMixins.toBoolean() || coreModClass)) {
|
||||
manifestAttributes += ["FMLCorePluginContainsFMLMod": true]
|
||||
}
|
||||
|
||||
@@ -420,14 +473,14 @@ def getManifestAttributes() {
|
||||
manifestAttributes += [
|
||||
"TweakClass" : "org.spongepowered.asm.launch.MixinTweaker",
|
||||
"MixinConfigs" : "mixins." + modId + ".json",
|
||||
"ForceLoadAsMod" : containsMixinsAndOrCoreModOnly.toBoolean() == false
|
||||
"ForceLoadAsMod" : !containsMixinsAndOrCoreModOnly.toBoolean()
|
||||
]
|
||||
}
|
||||
return manifestAttributes
|
||||
}
|
||||
|
||||
task sourcesJar(type: Jar) {
|
||||
from (sourceSets.main.allJava)
|
||||
from (sourceSets.main.allSource)
|
||||
from (file("$projectDir/LICENSE"))
|
||||
getArchiveClassifier().set('sources')
|
||||
}
|
||||
@@ -482,7 +535,7 @@ task devJar(type: Jar) {
|
||||
}
|
||||
|
||||
task apiJar(type: Jar) {
|
||||
from (sourceSets.main.allJava) {
|
||||
from (sourceSets.main.allSource) {
|
||||
include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") + '/**'
|
||||
}
|
||||
|
||||
@@ -507,14 +560,15 @@ artifacts {
|
||||
}
|
||||
}
|
||||
|
||||
// The gradle metadata includes all of the additional deps that we disabled from POM generation (including forgeBin with no groupID),
|
||||
// The gradle metadata includes all of the additional deps that we disabled from POM generation (including forgeBin with no groupID),
|
||||
// and isn't strictly needed with the POM so just disable it.
|
||||
tasks.withType(GenerateModuleMetadata) {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
// workaround variable hiding in pom processing
|
||||
def projectConfigs = project.configurations
|
||||
|
||||
// publishing
|
||||
publishing {
|
||||
publications {
|
||||
maven(MavenPublication) {
|
||||
@@ -523,7 +577,7 @@ publishing {
|
||||
artifact source: shadowJar, classifier: ""
|
||||
}
|
||||
if(!noPublishedSources) {
|
||||
artifact source: sourcesJar, classifier: "src"
|
||||
artifact source: sourcesJar, classifier: "sources"
|
||||
}
|
||||
artifact source: usesShadowedDependencies.toBoolean() ? shadowDevJar : devJar, classifier: "dev"
|
||||
if (apiPackage) {
|
||||
@@ -534,14 +588,21 @@ publishing {
|
||||
artifactId = System.getenv("ARTIFACT_ID") ?: project.name
|
||||
// Using the identified version, not project.version as it has the prepended 1.7.10
|
||||
version = System.getenv("RELEASE_VERSION") ?: identifiedVersion
|
||||
|
||||
// Remove all non GTNH deps here.
|
||||
// Original intention was to remove an invalid forgeBin being generated without a groupId (mandatory), but
|
||||
// it also removes all of the MC deps
|
||||
|
||||
// remove extra garbage from minecraft and minecraftDeps configuration
|
||||
pom.withXml {
|
||||
def badArtifacts = [:].withDefault {[] as Set<String>}
|
||||
for (configuration in [projectConfigs.minecraft, projectConfigs.minecraftDeps]) {
|
||||
for (dependency in configuration.allDependencies) {
|
||||
badArtifacts[dependency.group == null ? "" : dependency.group] += dependency.name
|
||||
}
|
||||
}
|
||||
// example for specifying extra stuff to ignore
|
||||
// badArtifacts["org.example.group"] += "artifactName"
|
||||
|
||||
Node pomNode = asNode()
|
||||
pomNode.dependencies.'*'.findAll() {
|
||||
it.groupId.text() != 'com.github.GTNewHorizons'
|
||||
badArtifacts[it.groupId.text()].contains(it.artifactId.text())
|
||||
}.each() {
|
||||
it.parent().remove(it)
|
||||
}
|
||||
@@ -573,7 +634,7 @@ if (isNewBuildScriptVersionAvailable(projectDir.toString())) {
|
||||
if (autoUpdateBuildScript.toBoolean()) {
|
||||
performBuildScriptUpdate(projectDir.toString())
|
||||
} else {
|
||||
println("Build script update available! Run 'gradle updateBuildScript'")
|
||||
out.style(Style.SuccessHeader).println("Build script update available! Run 'gradle updateBuildScript'")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -585,7 +646,7 @@ boolean performBuildScriptUpdate(String projectDir) {
|
||||
if (isNewBuildScriptVersionAvailable(projectDir)) {
|
||||
def buildscriptFile = getFile("build.gradle")
|
||||
availableBuildScriptUrl().withInputStream { i -> buildscriptFile.withOutputStream { it << i } }
|
||||
print("Build script updated. Please REIMPORT the project or RESTART your IDE!")
|
||||
out.style(Style.Success).print("Build script updated. Please REIMPORT the project or RESTART your IDE!")
|
||||
return true
|
||||
}
|
||||
return false
|
||||
@@ -616,7 +677,103 @@ configure(updateBuildScript) {
|
||||
description = 'Updates the build script to the latest version'
|
||||
}
|
||||
|
||||
// Deobfuscation
|
||||
// Parameter Deobfuscation
|
||||
|
||||
task deobfParams {
|
||||
doLast {
|
||||
|
||||
String mcpDir = "$project.gradle.gradleUserHomeDir/caches/minecraft/de/oceanlabs/mcp/mcp_$channel/$mappingsVersion"
|
||||
String mcpZIP = "$mcpDir/mcp_$channel-$mappingsVersion-${minecraftVersion}.zip"
|
||||
String paramsCSV = "$mcpDir/params.csv"
|
||||
|
||||
download.run {
|
||||
src "https://maven.minecraftforge.net/de/oceanlabs/mcp/mcp_$channel/$mappingsVersion-$minecraftVersion/mcp_$channel-$mappingsVersion-${minecraftVersion}.zip"
|
||||
dest mcpZIP
|
||||
overwrite false
|
||||
}
|
||||
|
||||
if(!file(paramsCSV).exists()) {
|
||||
println("Extracting MCP archive ...")
|
||||
unzip(mcpZIP, mcpDir)
|
||||
}
|
||||
|
||||
println("Parsing params.csv ...")
|
||||
Map<String, String> params = new HashMap<>()
|
||||
Files.lines(Paths.get(paramsCSV)).forEach{line ->
|
||||
String[] cells = line.split(",")
|
||||
if(cells.length > 2 && cells[0].matches("p_i?\\d+_\\d+_")) {
|
||||
params.put(cells[0], cells[1])
|
||||
}
|
||||
}
|
||||
|
||||
out.style(Style.Success).println("Modified ${replaceParams(file("$projectDir/src/main/java"), params)} files!")
|
||||
out.style(Style.Failure).println("Don't forget to verify that the code still works as before!\n It could be broken due to duplicate variables existing now\n or parameters taking priority over other variables.")
|
||||
}
|
||||
}
|
||||
|
||||
static int replaceParams(File file, Map<String, String> params) {
|
||||
int fileCount = 0
|
||||
|
||||
if(file.isDirectory()) {
|
||||
for(File f : file.listFiles()) {
|
||||
fileCount += replaceParams(f, params)
|
||||
}
|
||||
return fileCount
|
||||
}
|
||||
println("Visiting ${file.getName()} ...")
|
||||
try {
|
||||
String content = new String(Files.readAllBytes(file.toPath()))
|
||||
int hash = content.hashCode()
|
||||
params.forEach{key, value ->
|
||||
content = content.replaceAll(key, value)
|
||||
}
|
||||
if(hash != content.hashCode()) {
|
||||
Files.write(file.toPath(), content.getBytes("UTF-8"))
|
||||
return 1
|
||||
}
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// Credit: bitsnaps (https://gist.github.com/bitsnaps/00947f2dce66f4bbdabc67d7e7b33681)
|
||||
static unzip(String zipFileName, String outputDir) {
|
||||
byte[] buffer = new byte[16384]
|
||||
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFileName))
|
||||
ZipEntry zipEntry = zis.getNextEntry()
|
||||
while (zipEntry != null) {
|
||||
File newFile = new File(outputDir + File.separator, zipEntry.name)
|
||||
if (zipEntry.isDirectory()) {
|
||||
if (!newFile.isDirectory() && !newFile.mkdirs()) {
|
||||
throw new IOException("Failed to create directory $newFile")
|
||||
}
|
||||
} else {
|
||||
// fix for Windows-created archives
|
||||
File parent = newFile.parentFile
|
||||
if (!parent.isDirectory() && !parent.mkdirs()) {
|
||||
throw new IOException("Failed to create directory $parent")
|
||||
}
|
||||
// write file content
|
||||
FileOutputStream fos = new FileOutputStream(newFile)
|
||||
int len = 0
|
||||
while ((len = zis.read(buffer)) > 0) {
|
||||
fos.write(buffer, 0, len)
|
||||
}
|
||||
fos.close()
|
||||
}
|
||||
zipEntry = zis.getNextEntry()
|
||||
}
|
||||
zis.closeEntry()
|
||||
zis.close()
|
||||
}
|
||||
|
||||
configure(deobfParams) {
|
||||
group = 'forgegradle'
|
||||
description = 'Rename all obfuscated parameter names inherited from Minecraft classes'
|
||||
}
|
||||
|
||||
// Dependency Deobfuscation
|
||||
|
||||
def deobf(String sourceURL) {
|
||||
try {
|
||||
@@ -629,7 +786,7 @@ def deobf(String sourceURL) {
|
||||
fileName = fileName.substring(lastSlash + 1)
|
||||
}
|
||||
//get rid of extension:
|
||||
if(fileName.endsWith(".jar")) {
|
||||
if(fileName.endsWith(".jar") || fileName.endsWith(".litemod")) {
|
||||
fileName = fileName.substring(0, fileName.lastIndexOf("."))
|
||||
}
|
||||
|
||||
@@ -641,32 +798,46 @@ def deobf(String sourceURL) {
|
||||
Collections.reverse(parts)
|
||||
hostName = String.join(".", parts)
|
||||
|
||||
return deobf(sourceURL, hostName + "/" + fileName)
|
||||
return deobf(sourceURL, "$hostName/$fileName")
|
||||
} catch(Exception e) {
|
||||
return deobf(sourceURL, "deobf/" + String.valueOf(sourceURL.hashCode()))
|
||||
return deobf(sourceURL, "deobf/${sourceURL.hashCode()}")
|
||||
}
|
||||
}
|
||||
|
||||
// The method above is to be prefered. Use this method if the filename is not at the end of the URL.
|
||||
def deobf(String sourceURL, String fileName) {
|
||||
String cacheDir = System.getProperty("user.home") + "/.gradle/caches/"
|
||||
String bon2Dir = cacheDir + "forge_gradle/deobf"
|
||||
String bon2File = bon2Dir + "/BON2-2.5.0.jar"
|
||||
String obfFile = cacheDir + "modules-2/files-2.1/" + fileName + ".jar"
|
||||
String deobfFile = cacheDir + "modules-2/files-2.1/" + fileName + "-deobf.jar"
|
||||
|
||||
// The method above is to be preferred. Use this method if the filename is not at the end of the URL.
|
||||
def deobf(String sourceURL, String rawFileName) {
|
||||
String bon2Version = "2.5.1"
|
||||
String fileName = URLDecoder.decode(rawFileName, "UTF-8")
|
||||
String cacheDir = "$project.gradle.gradleUserHomeDir/caches"
|
||||
String bon2Dir = "$cacheDir/forge_gradle/deobf"
|
||||
String bon2File = "$bon2Dir/BON2-${bon2Version}.jar"
|
||||
String obfFile = "$cacheDir/modules-2/files-2.1/${fileName}.jar"
|
||||
String deobfFile = "$cacheDir/modules-2/files-2.1/${fileName}-deobf.jar"
|
||||
|
||||
if(file(deobfFile).exists()) {
|
||||
return files(deobfFile)
|
||||
}
|
||||
|
||||
download {
|
||||
src 'https://github.com/GTNewHorizons/BON2/releases/download/2.5.0/BON2-2.5.0.CUSTOM-all.jar'
|
||||
String mappingsVer
|
||||
if(remoteMappings) {
|
||||
String id = "${forgeVersion.split("\\.")[3]}-$minecraftVersion"
|
||||
String mappingsZIP = "$cacheDir/forge_gradle/maven_downloader/de/oceanlabs/mcp/mcp_snapshot_nodoc/$id/mcp_snapshot_nodoc-${id}.zip"
|
||||
|
||||
zipMappings(mappingsZIP, remoteMappings, bon2Dir)
|
||||
|
||||
mappingsVer = "snapshot_$id"
|
||||
} else {
|
||||
mappingsVer = "${channel}_$mappingsVersion"
|
||||
}
|
||||
|
||||
download.run {
|
||||
src "http://jenkins.usrv.eu:8081/nexus/content/repositories/releases/com/github/parker8283/BON2/$bon2Version-CUSTOM/BON2-$bon2Version-CUSTOM-all.jar"
|
||||
dest bon2File
|
||||
quiet true
|
||||
overwrite false
|
||||
}
|
||||
|
||||
download {
|
||||
download.run {
|
||||
src sourceURL
|
||||
dest obfFile
|
||||
quiet true
|
||||
@@ -674,18 +845,52 @@ def deobf(String sourceURL, String fileName) {
|
||||
}
|
||||
|
||||
exec {
|
||||
commandLine 'java', '-jar', bon2File, '--inputJar', obfFile, '--outputJar', deobfFile, '--mcVer', '1.7.10', '--mappingsVer', 'stable_12', '--notch'
|
||||
commandLine 'java', '-jar', bon2File, '--inputJar', obfFile, '--outputJar', deobfFile, '--mcVer', minecraftVersion, '--mappingsVer', mappingsVer, '--notch'
|
||||
workingDir bon2Dir
|
||||
standardOutput = new ByteArrayOutputStream()
|
||||
standardOutput = new FileOutputStream("${deobfFile}.log")
|
||||
}
|
||||
|
||||
return files(deobfFile)
|
||||
}
|
||||
|
||||
def zipMappings(String zipPath, String url, String bon2Dir) {
|
||||
File zipFile = new File(zipPath)
|
||||
if(zipFile.exists()) {
|
||||
return
|
||||
}
|
||||
|
||||
String fieldsCache = "$bon2Dir/data/fields.csv"
|
||||
String methodsCache = "$bon2Dir/data/methods.csv"
|
||||
|
||||
download.run {
|
||||
src "${url}fields.csv"
|
||||
dest fieldsCache
|
||||
quiet true
|
||||
}
|
||||
download.run {
|
||||
src "${url}methods.csv"
|
||||
dest methodsCache
|
||||
quiet true
|
||||
}
|
||||
|
||||
zipFile.getParentFile().mkdirs()
|
||||
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))
|
||||
|
||||
zos.putNextEntry(new ZipEntry("fields.csv"))
|
||||
Files.copy(Paths.get(fieldsCache), zos)
|
||||
zos.closeEntry()
|
||||
|
||||
zos.putNextEntry(new ZipEntry("methods.csv"))
|
||||
Files.copy(Paths.get(methodsCache), zos)
|
||||
zos.closeEntry()
|
||||
|
||||
zos.close()
|
||||
}
|
||||
|
||||
// Helper methods
|
||||
|
||||
def checkPropertyExists(String propertyName) {
|
||||
if (project.hasProperty(propertyName) == false) {
|
||||
if (!project.hasProperty(propertyName)) {
|
||||
throw new GradleException("This project requires a property \"" + propertyName + "\"! Please add it your \"gradle.properties\". You can find all properties and their description here: https://github.com/GTNewHorizons/ExampleMod1.7.10/blob/main/gradle.properties")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,51 +1,24 @@
|
||||
// Add your dependencies here
|
||||
|
||||
dependencies {
|
||||
compile("com.github.GTNewHorizons:CodeChickenLib:1.1.5.1:dev")
|
||||
compile("com.github.GTNewHorizons:CodeChickenCore:1.1.3:dev")
|
||||
compile("com.github.GTNewHorizons:EnderCore:0.2.6:dev")
|
||||
compile("com.github.GTNewHorizons:ForestryMC:4.4.5:dev")
|
||||
compile("com.github.GTNewHorizons:NotEnoughItems:2.2.3-GTNH:dev")
|
||||
compile("curse.maven:cofh-lib-220333:2388748")
|
||||
compile("com.mod-buildcraft:buildcraft:7.1.23:dev")
|
||||
shadowImplementation("cglib:cglib-nodep:3.3.0")
|
||||
compile('com.github.GTNewHorizons:EnderCore:0.2.9:dev')
|
||||
compile('com.github.GTNewHorizons:ForestryMC:4.4.6:dev')
|
||||
compile('com.github.GTNewHorizons:NotEnoughItems:2.2.15-GTNH:dev')
|
||||
compile('com.github.GTNewHorizons:BuildCraft:7.1.27:dev')
|
||||
compile('curse.maven:cofh-lib-220333:2388748') // https://www.curseforge.com/minecraft/mc-mods/cofh-lib/files/2388748
|
||||
shadowImplementation('cglib:cglib-nodep:3.3.0')
|
||||
|
||||
compileOnly("com.github.GTNewHorizons:waila:1.5.18:api") {
|
||||
transitive = false
|
||||
}
|
||||
compileOnly("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-70-GTNH:api") {
|
||||
transitive = false
|
||||
}
|
||||
compileOnly("com.github.GTNewHorizons:Baubles:1.0.1.14:dev") {
|
||||
transitive = false
|
||||
}
|
||||
compileOnly("com.github.GTNewHorizons:Railcraft:9.13.5:api") {
|
||||
transitive = false
|
||||
}
|
||||
compileOnly("com.github.GTNewHorizons:StorageDrawers:1.11.11-GTNH:api") {
|
||||
transitive = false
|
||||
}
|
||||
compileOnly("com.github.GTNewHorizons:Chisel:2.10.6-GTNH:dev") {
|
||||
transitive = false
|
||||
}
|
||||
|
||||
compileOnly("curse.maven:minefactory-reloaded-66672:2366150") {
|
||||
transitive = false
|
||||
}
|
||||
compileOnly("curse.maven:computercraft-67504:2269339") { // https://www.curseforge.com/minecraft/mc-mods/computercraft/files/2269339
|
||||
transitive = false
|
||||
}
|
||||
compileOnly("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev") {
|
||||
transitive = false
|
||||
}
|
||||
compileOnly("li.cil.oc:OpenComputers:MC1.7.10-1.7.5.1356:api") {
|
||||
transitive = false
|
||||
}
|
||||
compileOnly("curse.maven:mekanism-268560:2475797") { // https://www.curseforge.com/minecraft/mc-mods/mekanism/files/2475797
|
||||
transitive = false
|
||||
}
|
||||
compileOnly("curse.maven:ee3-65509:2305023") { // https://www.curseforge.com/minecraft/mc-mods/ee3/files/2305023
|
||||
transitive = false
|
||||
}
|
||||
compileOnly files("dependencies/immibis-microblocks-59.1.2.jar")
|
||||
compileOnly('com.github.GTNewHorizons:waila:1.5.19:api') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-85-GTNH:api') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:Baubles:1.0.1.14:dev') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:Railcraft:9.13.6:api') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:StorageDrawers:1.11.13-GTNH:api') {transitive = false}
|
||||
compile('com.github.GTNewHorizons:Chisel:2.10.8-GTNH:dev') {transitive = false}
|
||||
compileOnly('com.github.GTNewHorizons:OpenComputers:1.7.5.25-GTNH:api') {transitive = false}
|
||||
compileOnly('curse.maven:minefactory-reloaded-66672:2366150') // https://www.curseforge.com/minecraft/mc-mods/minefactory-reloaded/files/2366150
|
||||
compileOnly('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev')
|
||||
compileOnly('curse.maven:ee3-65509:2305023') // https://www.curseforge.com/minecraft/mc-mods/ee3/files/2305023
|
||||
compileOnly(deobf('https://media.forgecdn.net/files/2269/339/ComputerCraft1.75.jar')) // https://www.curseforge.com/minecraft/mc-mods/computercraft/files/2269339
|
||||
compileOnly(deobf('https://media.forgecdn.net/files/2426/270/Mekanism-1.7.10-9.1.0.281.jar')) // https://aidancbrady.com/mekanism/download/
|
||||
compileOnly(deobf('https://immibis.com/mcmoddl/files/immibis-microblocks-59.1.2.jar'))
|
||||
}
|
||||
@@ -19,7 +19,7 @@ forgeVersion = 10.13.4.1614
|
||||
# restart Minecraft in development. Choose this dependent on your mod:
|
||||
# Do you need consistent player progressing (for example Thaumcraft)? -> Select a name
|
||||
# Do you need to test how your custom blocks interacts with a player that is not the owner? -> leave name empty
|
||||
developmentEnvironmentUserName = "Developer"
|
||||
developmentEnvironmentUserName = Developer
|
||||
|
||||
# Define a source file of your project with:
|
||||
# public static final String VERSION = "GRADLETOKEN_VERSION";
|
||||
|
||||
@@ -2,29 +2,25 @@
|
||||
|
||||
repositories {
|
||||
maven {
|
||||
name = "GTNH Maven"
|
||||
url = "http://jenkins.usrv.eu:8081/nexus/content/groups/public/"
|
||||
name 'GTNH Maven'
|
||||
url 'http://jenkins.usrv.eu:8081/nexus/content/groups/public/'
|
||||
allowInsecureProtocol
|
||||
}
|
||||
maven {
|
||||
name = "ic2"
|
||||
url = "http://maven.ic2.player.to/"
|
||||
name 'ic2'
|
||||
url 'http://maven.ic2.player.to/'
|
||||
metadataSources {
|
||||
mavenPom()
|
||||
artifact()
|
||||
}
|
||||
}
|
||||
maven {
|
||||
name "OpenComputers Repo"
|
||||
url = "http://maven.cil.li/"
|
||||
metadataSources {
|
||||
mavenPom()
|
||||
artifact()
|
||||
url 'https://cursemaven.com'
|
||||
content {
|
||||
includeGroup 'curse.maven'
|
||||
}
|
||||
}
|
||||
maven {
|
||||
url "https://cursemaven.com"
|
||||
}
|
||||
maven {
|
||||
url = "https://jitpack.io"
|
||||
url = 'https://jitpack.io'
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import java.text.DecimalFormat;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.potion.Potion;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.World;
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
@@ -44,7 +45,7 @@ public class CommonProxy {
|
||||
public void loadIcons() {
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
public void load() {
|
||||
FMLCommonHandler.instance().bus().register(tickTimer);
|
||||
}
|
||||
@@ -68,6 +69,13 @@ public class CommonProxy {
|
||||
protected void onClientTick() {
|
||||
}
|
||||
|
||||
private static final String TEXTURE_PATH = ":textures/gui/23/";
|
||||
private static final String TEXTURE_EXT = ".png";
|
||||
|
||||
public ResourceLocation getGuiTexture(String name) {
|
||||
return new ResourceLocation(EnderIO.DOMAIN + TEXTURE_PATH + name + TEXTURE_EXT);
|
||||
}
|
||||
|
||||
public final class TickTimer {
|
||||
|
||||
@SubscribeEvent
|
||||
|
||||
@@ -12,7 +12,6 @@ import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.enderio.core.common.Lang;
|
||||
import com.enderio.core.common.network.MessageTileNBT;
|
||||
import com.enderio.core.common.util.EntityUtil;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
@@ -30,6 +29,7 @@ import cpw.mods.fml.common.event.FMLPostInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLServerStartedEvent;
|
||||
import cpw.mods.fml.common.event.FMLServerStoppedEvent;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import cpw.mods.fml.common.network.NetworkRegistry;
|
||||
import cpw.mods.fml.common.registry.EntityRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
@@ -173,6 +173,7 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.WeightedRandomChestContent;
|
||||
import net.minecraftforge.common.ChestGenHooks;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.world.WorldEvent;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidRegistry;
|
||||
|
||||
@@ -591,7 +592,6 @@ public class EnderIO {
|
||||
|
||||
instance = this;
|
||||
|
||||
PacketHandler.INSTANCE.registerMessage(MessageTileNBT.class, MessageTileNBT.class, PacketHandler.nextID(), Side.SERVER);
|
||||
PacketHandler.INSTANCE.registerMessage(PacketRedstoneMode.class, PacketRedstoneMode.class, PacketHandler.nextID(), Side.SERVER);
|
||||
|
||||
NetworkRegistry.INSTANCE.registerGuiHandler(this, guiHandler);
|
||||
@@ -830,9 +830,16 @@ public class EnderIO {
|
||||
ServerChannelRegister.load();
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void worldSaved(WorldEvent.Save event) {
|
||||
// Only save together with the overworld, because this gets called for every dimension separately
|
||||
if (event.world.provider != null && event.world.provider.dimensionId == 0) {
|
||||
ServerChannelRegister.store();
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void serverStopped(FMLServerStoppedEvent event) {
|
||||
HyperCubeRegister.unload();
|
||||
ServerChannelRegister.store();
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ import crazypants.util.UserIdent;
|
||||
|
||||
public interface ITravelAccessable {
|
||||
|
||||
public enum AccessMode {
|
||||
enum AccessMode {
|
||||
PUBLIC,
|
||||
PRIVATE,
|
||||
PROTECTED
|
||||
@@ -53,8 +53,22 @@ public interface ITravelAccessable {
|
||||
|
||||
void setPlacedBy(EntityPlayer player);
|
||||
|
||||
public void clearAuthorisedUsers();
|
||||
void clearAuthorisedUsers();
|
||||
|
||||
public BlockCoord getLocation();
|
||||
BlockCoord getLocation();
|
||||
|
||||
/**
|
||||
* Is this block a travel target for the staff or a travel anchor?
|
||||
*/
|
||||
default boolean isTravelSource() {
|
||||
return true;
|
||||
}
|
||||
|
||||
default boolean isVisible() {
|
||||
return true;
|
||||
}
|
||||
|
||||
default void setVisible(boolean visible) {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -142,7 +142,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
|
||||
if (MicroblocksUtil.supportMicroblocks() && IM__addHitEffects(world, target, effectRenderer)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
IIcon tex = null;
|
||||
|
||||
TileConduitBundle cb = (TileConduitBundle) world.getTileEntity(target.blockX, target.blockY, target.blockZ);
|
||||
@@ -263,7 +263,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
|
||||
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) {
|
||||
return getPickBlock(target, world, x, y, z, null);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z, EntityPlayer player) {
|
||||
ItemStack ret = null;
|
||||
@@ -532,7 +532,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
|
||||
drop.addAll(con.getDrops());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
BlockCoord bc = te.getLocation();
|
||||
ConduitUtil.playBreakSound(Block.soundTypeMetal, te.getWorld(), bc.x, bc.y, bc.z);
|
||||
|
||||
@@ -699,7 +699,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
|
||||
if (MicroblocksUtil.supportMicroblocks() && hasMicroblocks(bundle)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// Add facade
|
||||
if(player.isSneaking()) {
|
||||
return false;
|
||||
@@ -724,7 +724,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
|
||||
Util.dropItems(world, fac, x, y, z, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bundle.setFacadeId(facadeID);
|
||||
bundle.setFacadeMetadata(facadeMeta);
|
||||
bundle.setFacadeType(FacadeType.values()[facadeType]);
|
||||
@@ -817,7 +817,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
|
||||
@Override
|
||||
public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB axisalignedbb, @SuppressWarnings("rawtypes") List arraylist,
|
||||
Entity par7Entity) {
|
||||
|
||||
|
||||
if (MicroblocksUtil.supportMicroblocks()) {
|
||||
IM__addCollisionBoxesToList(world, x, y, z, axisalignedbb, arraylist, par7Entity);
|
||||
}
|
||||
@@ -1097,7 +1097,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
|
||||
IConduitBundle bundle = (IConduitBundle) te;
|
||||
return bundle.getConduit(IRedstoneConduit.class);
|
||||
}
|
||||
|
||||
|
||||
public ItemStack getMicroblockPickBlock(MovingObjectPosition target, World world, int x, int y, int z, EntityPlayer player) {
|
||||
return IMultipartSystem.instance.hook_getPickBlock(target, world, x, y, z, player);
|
||||
}
|
||||
|
||||
@@ -55,6 +55,8 @@ import crazypants.enderio.conduit.geom.Offset;
|
||||
import crazypants.enderio.conduit.geom.Offsets;
|
||||
import crazypants.enderio.conduit.item.IItemConduit;
|
||||
import crazypants.enderio.conduit.liquid.ILiquidConduit;
|
||||
import crazypants.enderio.conduit.liquid.AbstractTankConduit;
|
||||
import crazypants.enderio.conduit.redstone.IRedstoneConduit;
|
||||
import crazypants.enderio.conduit.me.IMEConduit;
|
||||
import crazypants.enderio.conduit.oc.IOCConduit;
|
||||
import crazypants.enderio.conduit.power.IPowerConduit;
|
||||
@@ -164,11 +166,15 @@ public class TileConduitBundle extends TileEntityEio implements IConduitBundle {
|
||||
facadeMeta = nbtRoot.getInteger("facadeMeta");
|
||||
|
||||
if(worldObj != null && worldObj.isRemote) {
|
||||
if (conduits.size() == 1 && conduits.get(0) instanceof IItemConduit) {
|
||||
boolean stableConduit = true;
|
||||
for(IConduit iConduit: conduits) {
|
||||
if ((iConduit instanceof IRedstoneConduit) || (iConduit instanceof AbstractTankConduit)) stableConduit = false;
|
||||
}
|
||||
if (stableConduit) {
|
||||
boolean itemConduitClientUpdated = false;
|
||||
for (Object o : Minecraft.getMinecraft().theWorld.playerEntities) {
|
||||
Entity e = ((Entity) o);
|
||||
if (e.getDistanceSq(this.xCoord, yCoord, zCoord) < 36) {
|
||||
if (e.getDistanceSq(this.xCoord, yCoord, zCoord) < 25) {
|
||||
itemConduitClientUpdated = true;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1,16 +1,24 @@
|
||||
package crazypants.enderio.conduit.gui;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.enderio.core.client.gui.button.CheckBox;
|
||||
import com.enderio.core.client.gui.button.IconButton;
|
||||
import com.enderio.core.client.gui.widget.GuiToolTip;
|
||||
import com.enderio.core.client.handlers.SpecialTooltipHandler;
|
||||
import crazypants.enderio.conduit.item.FunctionUpgrade;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import com.enderio.core.api.client.gui.ITabPanel;
|
||||
import com.enderio.core.api.client.render.IWidgetIcon;
|
||||
import com.enderio.core.client.gui.button.MultiIconButton;
|
||||
import com.enderio.core.client.render.ColorUtil;
|
||||
|
||||
import crazypants.enderio.EnderIO;
|
||||
@@ -20,76 +28,206 @@ import crazypants.enderio.conduit.packet.PacketConnectionMode;
|
||||
import crazypants.enderio.gui.IconEIO;
|
||||
import crazypants.enderio.network.PacketHandler;
|
||||
|
||||
|
||||
public class BaseSettingsPanel implements ITabPanel {
|
||||
|
||||
static final int PREV_MODE_B = 327;
|
||||
static final int NEXT_MODE_B = 328;
|
||||
static final int ID_INSERT_ENABLED = 327;
|
||||
static final int ID_EXTRACT_ENABLED = 328;
|
||||
protected static final int ID_INSERT_FILTER_OPTIONS = 329;
|
||||
protected static final int ID_EXTRACT_FILTER_OPTIONS = 330;
|
||||
protected final int ID_ENABLED = 331;
|
||||
|
||||
protected final IconEIO icon;
|
||||
protected final GuiExternalConnection gui;
|
||||
protected final IConduit con;
|
||||
protected final String typeName;
|
||||
protected final @Nonnull IWidgetIcon icon;
|
||||
protected final @Nonnull GuiExternalConnection gui;
|
||||
protected @Nonnull IConduit con;
|
||||
protected final @Nonnull String typeName;
|
||||
protected final @Nonnull ResourceLocation texture;
|
||||
|
||||
protected MultiIconButton leftArrow;
|
||||
protected MultiIconButton rightArrow;
|
||||
protected String modeLabel;
|
||||
protected ConnectionMode oldConnectionMode;
|
||||
|
||||
private @Nonnull String inputHeading;
|
||||
private @Nonnull String outputHeading;
|
||||
|
||||
private boolean insertEnabled = false;
|
||||
private boolean extractEnabled = false;
|
||||
|
||||
private boolean enabled = false;
|
||||
|
||||
private final @Nonnull CheckBox extractEnabledB;
|
||||
private final @Nonnull CheckBox insertEnabledB;
|
||||
|
||||
private final @Nonnull CheckBox enabledB;
|
||||
|
||||
protected int left = 0;
|
||||
protected int top = 0;
|
||||
protected int width = 0;
|
||||
protected int height = 0;
|
||||
protected int rightColumn = 112;
|
||||
protected int leftColumn = 22;
|
||||
|
||||
protected int gap = 5;
|
||||
|
||||
protected int customTop = 0;
|
||||
|
||||
protected BaseSettingsPanel(IconEIO icon, String typeName, GuiExternalConnection gui, IConduit con) {
|
||||
protected int textureHeight = 166 + 29;
|
||||
|
||||
private final @Nonnull GuiToolTip speedUpgradeTooltip;
|
||||
private final @Nonnull GuiToolTip functionUpgradeTooltip;
|
||||
protected @Nonnull GuiToolTip filterExtractUpgradeTooltip;
|
||||
protected @Nonnull GuiToolTip filterInsertUpgradeTooltip;
|
||||
|
||||
protected BaseSettingsPanel(@Nonnull IWidgetIcon icon, @Nonnull String typeName, @Nonnull GuiExternalConnection gui, @Nonnull IConduit con) {
|
||||
this(icon, typeName, gui, con, "externalConduitConnection");
|
||||
}
|
||||
|
||||
protected BaseSettingsPanel(@Nonnull IWidgetIcon icon, @Nonnull String typeName, @Nonnull GuiExternalConnection gui, @Nonnull IConduit con,
|
||||
@Nonnull String texture) {
|
||||
this.icon = icon;
|
||||
this.typeName = typeName;
|
||||
this.gui = gui;
|
||||
this.con = con;
|
||||
this.texture = EnderIO.proxy.getGuiTexture(texture);
|
||||
|
||||
modeLabel = EnderIO.lang.localize("gui.conduit.ioMode");
|
||||
inputHeading = getInputHeading();
|
||||
outputHeading = getOutputHeading();
|
||||
|
||||
FontRenderer fr = Minecraft.getMinecraft().fontRenderer;
|
||||
int x = gap * 3 + fr.getStringWidth(modeLabel);
|
||||
int y = 8;// + fr.FONT_HEIGHT;
|
||||
|
||||
leftArrow = MultiIconButton.createLeftArrowButton(gui, PREV_MODE_B, x, y);
|
||||
|
||||
x += leftArrow.getWidth() + gap + getLongestModeStringWidth() + gap;
|
||||
rightArrow = MultiIconButton.createRightArrowButton(gui, NEXT_MODE_B, x, y);
|
||||
|
||||
customTop = top + gap * 5 + fr.FONT_HEIGHT * 2;
|
||||
customTop -= 16;
|
||||
//customTop = top;
|
||||
|
||||
int x = leftColumn;
|
||||
int y = 6;
|
||||
|
||||
insertEnabledB = new CheckBox(gui, ID_INSERT_ENABLED, x, y);
|
||||
|
||||
enabledB = new CheckBox(gui, ID_ENABLED, x, y);
|
||||
|
||||
x = rightColumn;
|
||||
|
||||
extractEnabledB = new CheckBox(gui, ID_EXTRACT_ENABLED, x, y);
|
||||
|
||||
x = leftColumn;
|
||||
y = 92;
|
||||
|
||||
x = rightColumn;
|
||||
|
||||
x = rightColumn + 18 + 1;
|
||||
|
||||
filterExtractUpgradeTooltip = new GuiToolTip(new Rectangle(rightColumn, 70, 18, 18), EnderIO.lang.localize("gui.conduit.item.filterupgrade")) {
|
||||
@Override
|
||||
public boolean shouldDraw() {
|
||||
return !gui.getContainer().hasFilterUpgrades(false) && super.shouldDraw();
|
||||
}
|
||||
};
|
||||
|
||||
filterInsertUpgradeTooltip = new GuiToolTip(new Rectangle(leftColumn, 70, 18, 18), EnderIO.lang.localize("gui.conduit.item.filterupgrade")) {
|
||||
@Override
|
||||
public boolean shouldDraw() {
|
||||
return !gui.getContainer().hasFilterUpgrades(true) && super.shouldDraw();
|
||||
}
|
||||
};
|
||||
|
||||
speedUpgradeTooltip = new GuiToolTip(new Rectangle(rightColumn + 18, customTop + 43, 18, 18), EnderIO.lang.localize("gui.conduit.item.speedupgrade"),
|
||||
EnderIO.lang.localize("gui.conduit.item.speedupgrade2")) {
|
||||
@Override
|
||||
public boolean shouldDraw() {
|
||||
return !gui.getContainer().hasSpeedUpgrades() && super.shouldDraw();
|
||||
}
|
||||
};
|
||||
|
||||
ArrayList<String> funcUpgradeTips = new ArrayList<String>();
|
||||
SpecialTooltipHandler.addTooltipFromResources(funcUpgradeTips, "enderio.gui.conduit.item.functionupgrade.line");
|
||||
for(FunctionUpgrade upgrade : FunctionUpgrade.values()) {
|
||||
funcUpgradeTips.add(EnderIO.lang.localizeExact(upgrade.unlocName.concat(".name")));
|
||||
}
|
||||
functionUpgradeTooltip = new GuiToolTip(new Rectangle(rightColumn + 36, customTop + 43, 18, 18), funcUpgradeTips.toArray(new String[0])) {
|
||||
@Override
|
||||
public boolean shouldDraw() {
|
||||
return !gui.getContainer().hasFunctionUpgrades() && super.shouldDraw();
|
||||
}
|
||||
};
|
||||
|
||||
gui.getContainer().setInoutSlotsVisible(false, false);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGuiInit(int left, int top, int width, int height) {
|
||||
this.left = left;
|
||||
this.top = top;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
public ResourceLocation getTexture() {
|
||||
return texture;
|
||||
}
|
||||
|
||||
leftArrow.onGuiInit();
|
||||
rightArrow.onGuiInit();
|
||||
public int getTextureHeight() {
|
||||
return textureHeight;
|
||||
}
|
||||
|
||||
connectionModeChanged(con.getConnectionMode(gui.getDir()));
|
||||
protected void updateFilterButtons() {
|
||||
}
|
||||
|
||||
protected boolean hasFilterGui(boolean input) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean updateConduit(@Nonnull IConduit conduit) {
|
||||
this.con = conduit;
|
||||
if (oldConnectionMode != con.getConnectionMode(gui.getDir())) {
|
||||
connectionModeChanged(con.getConnectionMode(gui.getDir()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGuiInit(int leftIn, int topIn, int widthIn, int heightIn) {
|
||||
this.left = leftIn;
|
||||
this.top = topIn;
|
||||
this.width = widthIn;
|
||||
this.height = heightIn;
|
||||
|
||||
updateConduit(con);
|
||||
|
||||
if (hasInOutModes()) {
|
||||
insertEnabledB.onGuiInit();
|
||||
extractEnabledB.onGuiInit();
|
||||
|
||||
insertEnabledB.setSelected(insertEnabled);
|
||||
extractEnabledB.setSelected(extractEnabled);
|
||||
} else {
|
||||
enabledB.onGuiInit();
|
||||
enabledB.setSelected(enabled);
|
||||
}
|
||||
|
||||
if (hasFilters()) {
|
||||
gui.addToolTip(filterExtractUpgradeTooltip);
|
||||
gui.addToolTip(filterInsertUpgradeTooltip);
|
||||
}
|
||||
if (hasUpgrades()) {
|
||||
gui.addToolTip(speedUpgradeTooltip);
|
||||
gui.addToolTip(functionUpgradeTooltip);
|
||||
}
|
||||
|
||||
initCustomOptions();
|
||||
}
|
||||
|
||||
protected boolean hasUpgrades() {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected void initCustomOptions() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deactivate() {
|
||||
insertEnabledB.detach();
|
||||
extractEnabledB.detach();
|
||||
|
||||
gui.removeToolTip(speedUpgradeTooltip);
|
||||
gui.removeToolTip(functionUpgradeTooltip);
|
||||
gui.removeToolTip(filterExtractUpgradeTooltip);
|
||||
gui.removeToolTip(filterInsertUpgradeTooltip);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void mouseClicked(int x, int y, int par3) {
|
||||
public void mouseClicked(int x, int y, int par3) {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -97,79 +235,108 @@ public class BaseSettingsPanel implements ITabPanel {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateScreen() {
|
||||
public void updateScreen() {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nonnull
|
||||
public IWidgetIcon getIcon() {
|
||||
return icon;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(GuiButton guiButton) {
|
||||
if(guiButton.id == PREV_MODE_B) {
|
||||
con.setConnectionMode(gui.getDir(), con.getPreviousConnectionMode(gui.getDir()));
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketConnectionMode(con, gui.getDir()));
|
||||
connectionModeChanged(con.getConnectionMode(gui.getDir()));
|
||||
private void updateConnectionMode() {
|
||||
ConnectionMode mode = ConnectionMode.DISABLED;
|
||||
if (insertEnabled && extractEnabled || enabled) {
|
||||
mode = ConnectionMode.IN_OUT;
|
||||
} else if (insertEnabled) {
|
||||
mode = ConnectionMode.OUTPUT;
|
||||
} else if (extractEnabled) {
|
||||
mode = ConnectionMode.INPUT;
|
||||
}
|
||||
con.setConnectionMode(gui.getDir(), mode);
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketConnectionMode(con, gui.getDir()));
|
||||
}
|
||||
|
||||
} else if(guiButton.id == NEXT_MODE_B) {
|
||||
con.setConnectionMode(gui.getDir(), con.getNextConnectionMode(gui.getDir()));
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketConnectionMode(con, gui.getDir()));
|
||||
connectionModeChanged(con.getConnectionMode(gui.getDir()));
|
||||
@Override
|
||||
public void actionPerformed(@Nonnull GuiButton guiButton) {
|
||||
if (guiButton.id == ID_INSERT_ENABLED) {
|
||||
insertEnabled = !insertEnabled;
|
||||
updateConnectionMode();
|
||||
} else if (guiButton.id == ID_EXTRACT_ENABLED) {
|
||||
extractEnabled = !extractEnabled;
|
||||
updateConnectionMode();
|
||||
} else if (guiButton.id == ID_ENABLED) {
|
||||
enabled = !enabled;
|
||||
updateConnectionMode();
|
||||
}
|
||||
}
|
||||
|
||||
protected void connectionModeChanged(ConnectionMode conectionMode) {
|
||||
protected void connectionModeChanged(@Nonnull ConnectionMode mode) {
|
||||
oldConnectionMode = mode;
|
||||
if (hasInOutModes()) {
|
||||
insertEnabled = mode.acceptsOutput();
|
||||
extractEnabled = mode.acceptsInput();
|
||||
} else {
|
||||
enabled = mode == ConnectionMode.IN_OUT;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(float par1, int par2, int par3) {
|
||||
updateFilterButtons();
|
||||
|
||||
FontRenderer fr = gui.getFontRenderer();
|
||||
|
||||
int rgb = ColorUtil.getRGB(Color.darkGray);
|
||||
int x = left + (width - fr.getStringWidth(getTypeName())) / 2;
|
||||
int x = left + 32;
|
||||
int y = gui.getGuiTop() + 10;
|
||||
|
||||
//fr.drawString(getTypeName(), x, top, rgb);
|
||||
|
||||
x = left;
|
||||
|
||||
int y = gui.getGuiTop() + 13;//customTop + 8;//gap + fr.FONT_HEIGHT + gap;
|
||||
gui.getFontRenderer().drawString(modeLabel, x, y, rgb);
|
||||
|
||||
String modeString = con.getConnectionMode(gui.getDir()).getLocalisedName();
|
||||
x += gap + leftArrow.getWidth() + fr.getStringWidth(modeLabel) + gap;
|
||||
|
||||
GL11.glColor3f(1, 1, 1);
|
||||
// TODO figure out what this should be
|
||||
// IconEIO icon = new IconEIO(10, 48, 64, 16);
|
||||
// icon.getMap().render(icon, x - gap, y - (fr.FONT_HEIGHT / 2) - 1, getLongestModeStringWidth() + gap * 2, leftArrow.getHeight(), 0, true);
|
||||
|
||||
int move = (getLongestModeStringWidth() - fr.getStringWidth(modeString)) / 2;
|
||||
x += move;
|
||||
rgb = ColorUtil.getRGB(Color.white);
|
||||
gui.getFontRenderer().drawString(modeString, x, y, rgb);
|
||||
|
||||
renderCustomOptions(y + gap + fr.FONT_HEIGHT + gap, par1, par2, par3);
|
||||
//renderCustomOptions(y + gap, par1, par2, par3);
|
||||
}
|
||||
|
||||
protected void renderCustomOptions(int top, float par1, int par2, int par3) {
|
||||
|
||||
}
|
||||
|
||||
private int getLongestModeStringWidth() {
|
||||
int maxWidth = 0;
|
||||
for (ConnectionMode mode : ConnectionMode.values()) {
|
||||
int width = gui.getFontRenderer().getStringWidth(mode.getLocalisedName());
|
||||
if(width > maxWidth) {
|
||||
maxWidth = width;
|
||||
}
|
||||
if (hasInOutModes()) {
|
||||
fr.drawString(inputHeading, x, y, rgb);
|
||||
x += 92;
|
||||
fr.drawString(outputHeading, x, y, rgb);
|
||||
} else {
|
||||
String heading = enabled ? getEnabledHeading() : getDisabledHeading();
|
||||
fr.drawString(heading, x, y, rgb);
|
||||
}
|
||||
return maxWidth;
|
||||
renderCustomOptions(y + gap + fr.FONT_HEIGHT + gap, par1, par2, par3);
|
||||
}
|
||||
|
||||
protected String getTypeName() {
|
||||
protected void renderCustomOptions(int topIn, float par1, int par2, int par3) {
|
||||
|
||||
}
|
||||
|
||||
protected @Nonnull String getTypeName() {
|
||||
return typeName;
|
||||
}
|
||||
|
||||
protected boolean hasFilters() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
protected String getInputHeading() {
|
||||
// lang strings are nonintuitive for some reason
|
||||
return EnderIO.lang.localize("gui.conduit.ioMode.output");
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
protected String getOutputHeading() {
|
||||
return EnderIO.lang.localize("gui.conduit.ioMode.input");
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
protected String getEnabledHeading() {
|
||||
return EnderIO.lang.localize("gui.enabled");
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
protected String getDisabledHeading() {
|
||||
return EnderIO.lang.localize("gui.disabled");
|
||||
}
|
||||
|
||||
protected boolean hasInOutModes() {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,8 +2,10 @@ package crazypants.enderio.conduit.gui;
|
||||
|
||||
import java.awt.Point;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import crazypants.enderio.conduit.item.filter.IItemFilter;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.InventoryPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
@@ -27,6 +29,7 @@ import crazypants.enderio.network.PacketHandler;
|
||||
public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrades> {
|
||||
|
||||
private final IItemConduit itemConduit;
|
||||
private final ForgeDirection direction;
|
||||
|
||||
private int speedUpgradeSlotLimit = 15;
|
||||
|
||||
@@ -40,13 +43,14 @@ public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrade
|
||||
private Slot slotInputFilterUpgrades;
|
||||
private Slot slotOutputFilterUpgrades;
|
||||
|
||||
private final List<Point> slotLocations = new ArrayList<Point>();
|
||||
private final List<Point> slotLocations = new ArrayList<>();
|
||||
|
||||
final List<FilterChangeListener> filterListeners = new ArrayList<FilterChangeListener>();
|
||||
final List<GhostBackgroundItemSlot> bgSlots = new ArrayList<GhostBackgroundItemSlot>();
|
||||
final List<FilterChangeListener> filterListeners = new ArrayList<>();
|
||||
final List<GhostBackgroundItemSlot> bgSlots = new ArrayList<>();
|
||||
|
||||
public ExternalConnectionContainer(InventoryPlayer playerInv, IConduitBundle bundle, ForgeDirection dir) {
|
||||
super(playerInv, new InventoryUpgrades(bundle.getConduit(IItemConduit.class), dir));
|
||||
this.direction = dir;
|
||||
this.itemConduit = bundle.getConduit(IItemConduit.class);
|
||||
slotLocations.addAll(playerSlotLocations.values());
|
||||
|
||||
@@ -54,20 +58,20 @@ public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrade
|
||||
int y;
|
||||
|
||||
if (itemConduit != null) {
|
||||
x = 10;
|
||||
y = 47;
|
||||
x = 113;
|
||||
y = 71;
|
||||
slotOutputFilterUpgrades = addSlotToContainer(new FilterSlot(getInv(), 3, x, y));
|
||||
slotLocations.add(new Point(x, y));
|
||||
bgSlots.add(new GhostBackgroundItemSlot(EnderIO.itemBasicFilterUpgrade, slotOutputFilterUpgrades));
|
||||
|
||||
x = 10;
|
||||
y = 47;
|
||||
x = 23;
|
||||
y = 71;
|
||||
slotInputFilterUpgrades = addSlotToContainer(new FilterSlot(getInv(), 2, x, y));
|
||||
slotLocations.add(new Point(x, y));
|
||||
bgSlots.add(new GhostBackgroundItemSlot(EnderIO.itemBasicFilterUpgrade, slotInputFilterUpgrades));
|
||||
|
||||
x = 10;
|
||||
y = 83;
|
||||
x = 131;
|
||||
y = 71;
|
||||
slotSpeedUpgrades = addSlotToContainer(new Slot(getInv(), 0, x, y) {
|
||||
@Override
|
||||
public boolean isItemValid(ItemStack par1ItemStack) {
|
||||
@@ -82,8 +86,8 @@ public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrade
|
||||
slotLocations.add(new Point(x, y));
|
||||
bgSlots.add(new GhostBackgroundItemSlot(EnderIO.itemExtractSpeedUpgrade, slotSpeedUpgrades));
|
||||
|
||||
x = 10;
|
||||
y = 65;
|
||||
x = 149;
|
||||
y = 71;
|
||||
slotFunctionUpgrades = addSlotToContainer(new Slot(getInv(), 1, x, y) {
|
||||
@Override
|
||||
public boolean isItemValid(ItemStack par1ItemStack) {
|
||||
@@ -98,6 +102,8 @@ public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrade
|
||||
slotLocations.add(new Point(x, y));
|
||||
bgSlots.add(new GhostBackgroundItemSlot(EnderIO.itemFunctionUpgrade, slotFunctionUpgrades));
|
||||
}
|
||||
|
||||
setInventorySlotsVisible(false);
|
||||
}
|
||||
|
||||
public void createGhostSlots(List<GhostSlot> slots) {
|
||||
@@ -106,7 +112,7 @@ public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrade
|
||||
|
||||
@Override
|
||||
public Point getPlayerInventoryOffset() {
|
||||
return new Point(23, 113);
|
||||
return new Point(23, 161);
|
||||
}
|
||||
|
||||
public void addFilterListener(FilterChangeListener list) {
|
||||
@@ -132,6 +138,17 @@ public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrade
|
||||
return slot != null && slot.getHasStack();
|
||||
}
|
||||
|
||||
public ForgeDirection getDirection() {
|
||||
return direction;
|
||||
}
|
||||
|
||||
public IItemFilter getFilter(boolean input) {
|
||||
if (itemConduit == null) {
|
||||
return null;
|
||||
}
|
||||
return input ? itemConduit.getInputFilter(direction) : itemConduit.getOutputFilter(direction);
|
||||
}
|
||||
|
||||
public void setInoutSlotsVisible(boolean inputVisible, boolean outputVisible) {
|
||||
if(itemConduit == null) {
|
||||
return;
|
||||
@@ -282,4 +299,8 @@ public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrade
|
||||
|
||||
}
|
||||
|
||||
public List<String> getFunctionUpgradeToolTipText() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
package crazypants.enderio.conduit.gui;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import com.enderio.core.client.gui.button.TooltipButton;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.enderio.core.api.client.gui.IGuiScreen;
|
||||
import com.enderio.core.api.client.render.IWidgetIcon;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
||||
public class FakeButton extends TooltipButton {
|
||||
|
||||
public static final int DEFAULT_WIDTH = 16;
|
||||
public static final int DEFAULT_HEIGHT = 16;
|
||||
|
||||
protected @Nonnull IWidgetIcon icon;
|
||||
|
||||
private int marginY = 0;
|
||||
private int marginX = 0;
|
||||
|
||||
public FakeButton(@Nonnull IGuiScreen gui, int x, int y, @Nonnull IWidgetIcon icon) {
|
||||
super(gui, -1, x, y, DEFAULT_WIDTH, DEFAULT_HEIGHT, "");
|
||||
this.icon = icon;
|
||||
}
|
||||
|
||||
@Override
|
||||
public FakeButton setPosition(int x, int y) {
|
||||
super.setPosition(x, y);
|
||||
return this;
|
||||
}
|
||||
|
||||
public FakeButton setIconMargin(int x, int y) {
|
||||
marginX = x;
|
||||
marginY = y;
|
||||
return this;
|
||||
}
|
||||
|
||||
public @Nonnull IWidgetIcon getIcon() {
|
||||
return icon;
|
||||
}
|
||||
|
||||
public void setIcon(@Nonnull IWidgetIcon icon) {
|
||||
this.icon = icon;
|
||||
}
|
||||
|
||||
public boolean mousePressedButton(@Nonnull Minecraft mc, int mouseX, int mouseY, int button) {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected boolean checkMousePress(@Nonnull Minecraft mc, int mouseX, int mouseY) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws this button to the screen.
|
||||
*/
|
||||
@Override
|
||||
public void drawButton(@Nonnull Minecraft mc, int mouseX, int mouseY) {
|
||||
updateTooltip(mc, mouseX, mouseY);
|
||||
if (isVisible()) {
|
||||
GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
icon.getMap().render(icon, xPosition + marginX, yPosition + marginY, width - 2 * marginX, height - 2 * marginY, 0, true);
|
||||
GL11.glPopAttrib();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package crazypants.enderio.conduit.gui;
|
||||
|
||||
public class FilterGuiUtil {
|
||||
|
||||
// List of filter indexes for reference in guis
|
||||
public static final int INDEX_INPUT_ITEM = 1;
|
||||
public static final int INDEX_OUTPUT_ITEM = 2;
|
||||
public static final int INDEX_INPUT_FLUID = 3;
|
||||
public static final int INDEX_OUTPUT_FLUID = 4;
|
||||
public static final int INDEX_INPUT_REDSTONE = 6;
|
||||
public static final int INDEX_OUTPUT_REDSTONE = 5;
|
||||
public static final int INDEX_NONE = 0;
|
||||
|
||||
public static final int INDEX_FILTER_HANDHELD = -1;
|
||||
|
||||
private static int nextButtonId = 1;
|
||||
|
||||
public static int nextButtonId() {
|
||||
return nextButtonId++;
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,8 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.enderio.core.client.gui.GuiContainerBase;
|
||||
import com.enderio.core.client.gui.widget.GhostSlot;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.inventory.GuiContainer;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
@@ -43,6 +45,12 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
|
||||
return nextButtonId++;
|
||||
}
|
||||
|
||||
public static int nextButtonIds(int count) {
|
||||
int id = nextButtonId;
|
||||
nextButtonId += count;
|
||||
return id;
|
||||
}
|
||||
|
||||
private static final Map<Class<? extends IConduit>, Integer> TAB_ORDER = new HashMap<Class<? extends IConduit>, Integer>();
|
||||
static {
|
||||
TAB_ORDER.put(IItemConduit.class, 0);
|
||||
@@ -73,11 +81,10 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
|
||||
this.bundle = bundle;
|
||||
this.dir = dir;
|
||||
|
||||
ySize = 166 + 29;
|
||||
ySize = 166 + 29 + 48;
|
||||
xSize = 206;
|
||||
|
||||
container.setInoutSlotsVisible(false, false);
|
||||
container.setInventorySlotsVisible(false);
|
||||
|
||||
List<IConduit> cons = new ArrayList<IConduit>(bundle.getConduits());
|
||||
Collections.sort(cons, new Comparator<IConduit>() {
|
||||
@@ -92,8 +99,7 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
|
||||
if(int2 == null) {
|
||||
return 1;
|
||||
}
|
||||
//NB: using Double.comp instead of Integer.comp as the int version is only from Java 1.7+
|
||||
return Double.compare(int1, int2);
|
||||
return Integer.compare(int1, int2);
|
||||
|
||||
}
|
||||
});
|
||||
@@ -105,12 +111,17 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
|
||||
if(tab != null) {
|
||||
conduits.add(con);
|
||||
tabs.add(tab);
|
||||
tab.deactivate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public IConduitBundle getBundle() {
|
||||
return bundle;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initGui() {
|
||||
super.initGui();
|
||||
@@ -119,8 +130,6 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
|
||||
for (int i = 0; i < tabs.size(); i++) {
|
||||
if(i == activeTab) {
|
||||
tabs.get(i).onGuiInit(guiLeft + 10, guiTop, xSize - 20, ySize - 20);
|
||||
} else {
|
||||
tabs.get(i).deactivate();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -132,6 +141,16 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
|
||||
|
||||
@Override
|
||||
protected void mouseClicked(int x, int y, int par3) {
|
||||
// handle out-of-bounds ghost slots
|
||||
boolean outOfBounds = x < guiLeft || y < guiTop || x >= guiLeft + xSize || y >= guiTop + ySize;
|
||||
boolean hasItem = playerInv.getItemStack() != null;
|
||||
if (outOfBounds && hasItem && !getGhostSlots().isEmpty()) {
|
||||
GhostSlot slot = getGhostSlot(x, y);
|
||||
if (slot != null) {
|
||||
ghostSlotClicked(slot, x, y, par3);
|
||||
return;
|
||||
}
|
||||
}
|
||||
super.mouseClicked(x, y, par3);
|
||||
|
||||
int tabLeftX = xSize;
|
||||
@@ -145,6 +164,8 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
|
||||
|
||||
if(x > tabLeftX && x < tabRightX + 24) {
|
||||
if(y > minY && y < maxY) {
|
||||
tabs.get(activeTab).deactivate();
|
||||
getGhostSlots().clear();
|
||||
activeTab = (y - minY) / 24;
|
||||
initGui();
|
||||
return;
|
||||
@@ -186,8 +207,17 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
|
||||
|
||||
tes.draw();
|
||||
|
||||
bindGuiTexture();
|
||||
drawTexturedModalRect(sx, sy, 0, 0, this.xSize, this.ySize);
|
||||
int textureHeight = 166 + 29;
|
||||
if (tabs.isEmpty()) {
|
||||
bindGuiTexture();
|
||||
} else {
|
||||
ITabPanel tab = tabs.get(activeTab);
|
||||
RenderUtil.bindTexture(tab.getTexture());
|
||||
if (tab instanceof BaseSettingsPanel) {
|
||||
textureHeight = ((BaseSettingsPanel) tab).getTextureHeight();
|
||||
}
|
||||
}
|
||||
drawTexturedModalRect(sx, sy, 0, 0, this.xSize, textureHeight);
|
||||
|
||||
RenderUtil.bindTexture(IconEIO.TEXTURE);
|
||||
tes.startDrawingQuads();
|
||||
@@ -216,13 +246,44 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
|
||||
@Override
|
||||
@Optional.Method(modid = "NotEnoughItems")
|
||||
public boolean hideItemPanelSlot(GuiContainer gc, int x, int y, int w, int h) {
|
||||
int sx = (width - xSize) / 2;
|
||||
int sy = (height - ySize) / 2;
|
||||
if(tabs.size() > 0) {
|
||||
int sx = (width - xSize) / 2;
|
||||
int sy = (height - ySize) / 2;
|
||||
int tabX = sx + xSize - 3;
|
||||
int tabY = sy + tabYOffset;
|
||||
|
||||
return (x+w) >= tabX && x < (tabX + 14) && (y+h) >= tabY && y < (tabY + tabs.size()*TAB_HEIGHT);
|
||||
if((x+w) >= tabX && x < (tabX + 14) && (y+h) >= tabY && y < (tabY + tabs.size()*TAB_HEIGHT)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
List<GhostSlot> slots = getGhostSlots();
|
||||
if (slots != null && !slots.isEmpty()) {
|
||||
for (GhostSlot slot : slots) {
|
||||
int slotX = sx + slot.x;
|
||||
int slotY = sy + slot.y;
|
||||
if((x+w) >= slotX && x < (slotX + 20) && (y+h) >= slotY && y < (slotY + 20)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Optional.Method(modid = "NotEnoughItems")
|
||||
public boolean handleDragNDrop(GuiContainer gc, int x, int y, ItemStack is, int button)
|
||||
{
|
||||
if (super.handleDragNDrop(gc, x, y, is, button)) {
|
||||
return true;
|
||||
}
|
||||
x -= guiLeft;
|
||||
y -= guiTop;
|
||||
if (is != null && is.stackSize > 0 && !tabs.isEmpty() && tabs.get(activeTab) instanceof LiquidSettings) {
|
||||
LiquidSettings settings = (LiquidSettings) tabs.get(activeTab);
|
||||
if (settings.setFilterFromItem(x, y, is)) {
|
||||
is.stackSize = 0;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -44,16 +44,19 @@ public class LiquidSettings extends BaseSettingsPanel {
|
||||
|
||||
private static final int ID_COLOR_BUTTON = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_ROUND_ROBIN_BUTTON = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_WHITELIST = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_INSERT_WHITELIST = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_EXTRACT_WHITELIST = GuiExternalConnection.nextButtonId();
|
||||
|
||||
private static final int NEXT_FILTER_ID = 989322;
|
||||
|
||||
private static final int ID_CHANNEL = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_INSERT_CHANNEL = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_EXTRACT_CHANNEL = GuiExternalConnection.nextButtonId();
|
||||
|
||||
private final RedstoneModeButton rsB;
|
||||
private final ToggleButton roundRobinB;
|
||||
private final ColorButton colorB;
|
||||
private ColorButton channelB;
|
||||
private ColorButton insertChannelB;
|
||||
private ColorButton extractChannelB;
|
||||
|
||||
private static final String autoExtractStr = EnderIO.lang.localize("gui.conduit.fluid.autoExtract");
|
||||
private static final String filterStr = EnderIO.lang.localize("gui.conduit.fluid.filter");
|
||||
@@ -62,17 +65,20 @@ public class LiquidSettings extends BaseSettingsPanel {
|
||||
|
||||
private AbstractEnderLiquidConduit eConduit;
|
||||
private boolean isEnder;
|
||||
private static final int filterX = 59;
|
||||
private static final int filterIX = 4;
|
||||
private static final int filterEX = 104;
|
||||
private static final int filterY = 63;
|
||||
private static final Rectangle filterBounds = new Rectangle(filterX, filterY, 90, 18);
|
||||
private static final Rectangle insertFilterBounds = new Rectangle(filterIX, filterY, 90, 18);
|
||||
private static final Rectangle extractFilterBounds = new Rectangle(filterEX, filterY, 90, 18);
|
||||
private GuiToolTip[] filterToolTips;
|
||||
|
||||
private boolean inOutShowIn = true;
|
||||
private MultiIconButton inOutNextB;
|
||||
private IconButton whiteListB;
|
||||
private IconButton insertWhiteListB;
|
||||
private IconButton extractWhiteListB;
|
||||
|
||||
protected LiquidSettings(final GuiExternalConnection gui, IConduit con) {
|
||||
super(IconEIO.WRENCH_OVERLAY_FLUID, EnderIO.lang.localize("itemLiquidConduit.name"), gui, con);
|
||||
super(IconEIO.WRENCH_OVERLAY_FLUID, EnderIO.lang.localize("itemLiquidConduit.name"), gui, con, "in_out_settings");
|
||||
this.textureHeight += 48;
|
||||
|
||||
conduit = (ILiquidConduit) con;
|
||||
if(con instanceof AbstractEnderLiquidConduit) {
|
||||
@@ -80,33 +86,34 @@ public class LiquidSettings extends BaseSettingsPanel {
|
||||
isEnder = true;
|
||||
|
||||
|
||||
int x = 52;
|
||||
int x = leftColumn;
|
||||
int y = customTop;
|
||||
insertWhiteListB = new IconButton(gui, ID_INSERT_WHITELIST, x, y, IconEIO.FILTER_WHITELIST);
|
||||
insertWhiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.fluid.whitelist"));
|
||||
|
||||
|
||||
inOutNextB = MultiIconButton.createRightArrowButton(gui, NEXT_FILTER_ID, x, y);
|
||||
|
||||
x = filterX - 20;
|
||||
y = filterY + 1;
|
||||
|
||||
whiteListB = new IconButton(gui, ID_WHITELIST, x, y, IconEIO.FILTER_WHITELIST);
|
||||
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.fluid.whitelist"));
|
||||
x = rightColumn;
|
||||
extractWhiteListB = new IconButton(gui, ID_EXTRACT_WHITELIST, x, y, IconEIO.FILTER_WHITELIST);
|
||||
extractWhiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.fluid.whitelist"));
|
||||
} else {
|
||||
isEnder = false;
|
||||
gui.getContainer().setInventorySlotsVisible(false);
|
||||
}
|
||||
|
||||
int x = 66;
|
||||
int x = leftColumn + 21;
|
||||
int y = customTop;
|
||||
|
||||
if(isEnder)
|
||||
{
|
||||
channelB = new ColorButton(gui, ID_CHANNEL, x, y);
|
||||
channelB.setColorIndex(0);
|
||||
channelB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.channel"));
|
||||
x += channelB.getWidth() + gap;
|
||||
insertChannelB = new ColorButton(gui, ID_INSERT_CHANNEL, x, y);
|
||||
insertChannelB.setColorIndex(0);
|
||||
insertChannelB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.channel"));
|
||||
extractChannelB = new ColorButton(gui, ID_EXTRACT_CHANNEL, x + rightColumn - leftColumn, y);
|
||||
extractChannelB.setColorIndex(0);
|
||||
extractChannelB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.channel"));
|
||||
x += insertChannelB.getWidth();
|
||||
}
|
||||
|
||||
x += rightColumn - leftColumn;
|
||||
rsB = new RedstoneModeButton(gui, ID_REDSTONE_BUTTON, x, y, new IRedstoneModeControlable() {
|
||||
|
||||
@Override
|
||||
@@ -125,13 +132,13 @@ public class LiquidSettings extends BaseSettingsPanel {
|
||||
}
|
||||
});
|
||||
|
||||
x += rsB.getWidth() + gap;
|
||||
x += rsB.getWidth();
|
||||
colorB = new ColorButton(gui, ID_COLOR_BUTTON, x, y);
|
||||
colorB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.redstone.signalColor"));
|
||||
colorB.setColorIndex(conduit.getExtractionSignalColor(gui.getDir()).ordinal());
|
||||
|
||||
if (isEnder) {
|
||||
x += rsB.getWidth() + gap;
|
||||
x += rsB.getWidth();
|
||||
roundRobinB = new ToggleButton(gui, ID_ROUND_ROBIN_BUTTON, x, y, IconEIO.ROUND_ROBIN_OFF, IconEIO.ROUND_ROBIN);
|
||||
roundRobinB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinEnabled"));
|
||||
roundRobinB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinDisabled"));
|
||||
@@ -144,8 +151,13 @@ public class LiquidSettings extends BaseSettingsPanel {
|
||||
private void addFilterTooltips() {
|
||||
filterToolTips = new GuiToolTip[5];
|
||||
for (int i = 0; i < 5; i++) {
|
||||
Rectangle bound = new Rectangle(filterX + (i * 18), filterY, 18, 18);
|
||||
filterToolTips[i] = new FilterToolTip(bound, i);
|
||||
Rectangle bound = new Rectangle(filterIX + (i * 18), filterY, 18, 18);
|
||||
filterToolTips[i] = new FilterToolTip(bound, i, false);
|
||||
gui.addToolTip(filterToolTips[i]);
|
||||
}
|
||||
for (int i = 0; i < 5; i++) {
|
||||
Rectangle bound = new Rectangle(filterEX + (i * 18), filterY, 18, 18);
|
||||
filterToolTips[i] = new FilterToolTip(bound, i, true);
|
||||
gui.addToolTip(filterToolTips[i]);
|
||||
}
|
||||
}
|
||||
@@ -156,48 +168,24 @@ public class LiquidSettings extends BaseSettingsPanel {
|
||||
if(guiButton.id == ID_COLOR_BUTTON) {
|
||||
conduit.setExtractionSignalColor(gui.getDir(), DyeColor.values()[colorB.getColorIndex()]);
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketExtractMode(conduit, gui.getDir()));
|
||||
} else if(guiButton.id == ID_WHITELIST) {
|
||||
toggleBlacklist();
|
||||
} else if(guiButton.id == NEXT_FILTER_ID) {
|
||||
inOutShowIn = !inOutShowIn;
|
||||
if(channelB != null) {
|
||||
channelB.onGuiInit();
|
||||
if(isInput()) {
|
||||
channelB.setColorIndex(eConduit.getInputColor(gui.getDir()).ordinal());
|
||||
} else {
|
||||
channelB.setColorIndex(eConduit.getOutputColor(gui.getDir()).ordinal());
|
||||
}
|
||||
}
|
||||
if(isInput()) {
|
||||
if (isEnder) {
|
||||
roundRobinB.onGuiInit();
|
||||
}
|
||||
rsB.onGuiInit();
|
||||
colorB.onGuiInit();
|
||||
} else {
|
||||
if (isEnder) {
|
||||
roundRobinB.detach();
|
||||
}
|
||||
rsB.detach();
|
||||
colorB.detach();
|
||||
}
|
||||
if(isFilterVisible()) {
|
||||
updateWhiteListButton(eConduit.getFilter(gui.getDir(), isInput()));
|
||||
}
|
||||
} else if(guiButton.id == ID_CHANNEL) {
|
||||
} else if(guiButton.id == ID_INSERT_WHITELIST || guiButton.id == ID_EXTRACT_WHITELIST) {
|
||||
toggleBlacklist(guiButton.id == ID_EXTRACT_WHITELIST);
|
||||
}else if(guiButton.id == ID_INSERT_CHANNEL || guiButton.id == ID_EXTRACT_CHANNEL) {
|
||||
ColorButton btn = (ColorButton) guiButton;
|
||||
if(isEnder) {
|
||||
|
||||
DyeColor col = DyeColor.values()[channelB.getColorIndex()];
|
||||
DyeColor col = DyeColor.values()[btn.getColorIndex()];
|
||||
boolean isInput = guiButton.id == ID_EXTRACT_CHANNEL;
|
||||
|
||||
if (isInput()) {
|
||||
if (isInput) {
|
||||
eConduit.setInputColor(gui.getDir(), col);
|
||||
} else {
|
||||
eConduit.setOutputColor(gui.getDir(), col);
|
||||
}
|
||||
setConduitChannel(col);
|
||||
setConduitChannel(isInput, col);
|
||||
}
|
||||
} else if(guiButton.id == ID_ROUND_ROBIN_BUTTON) {
|
||||
if (isEnder && isInput()) {
|
||||
if (isEnder) {
|
||||
final boolean selected = roundRobinB.isSelected();
|
||||
eConduit.setRoundRobin(gui.getDir(), selected);
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketRoundRobinMode(eConduit, gui.getDir()));
|
||||
@@ -211,17 +199,17 @@ public class LiquidSettings extends BaseSettingsPanel {
|
||||
updateGuiVisibility();
|
||||
}
|
||||
|
||||
private void toggleBlacklist() {
|
||||
private void toggleBlacklist(boolean isInput) {
|
||||
if(!isFilterVisible()) {
|
||||
return;
|
||||
}
|
||||
FluidFilter filter = eConduit.getFilter(gui.getDir(), isInput());
|
||||
FluidFilter filter = eConduit.getFilter(gui.getDir(), isInput);
|
||||
if(filter == null) {
|
||||
filter = new FluidFilter();
|
||||
}
|
||||
filter.setBlacklist(!filter.isBlacklist());
|
||||
setConduitFilter(filter);
|
||||
updateWhiteListButton(filter);
|
||||
setConduitFilter(isInput, filter);
|
||||
updateWhiteListButton(filter, isInput);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -230,35 +218,56 @@ public class LiquidSettings extends BaseSettingsPanel {
|
||||
if(!isFilterVisible()) {
|
||||
return;
|
||||
}
|
||||
if(!filterBounds.contains(x, y)) {
|
||||
return;
|
||||
}
|
||||
ItemStack st = Minecraft.getMinecraft().thePlayer.inventory.getItemStack();
|
||||
FluidFilter filter = eConduit.getFilter(gui.getDir(), isInput());
|
||||
if(filter == null && st == null) {
|
||||
if (st == null && par3 == 0) {
|
||||
return;
|
||||
}
|
||||
if(filter == null) {
|
||||
filter = new FluidFilter();
|
||||
setFilterFromItem(x, y, st);
|
||||
}
|
||||
|
||||
public boolean setFilterFromItem(int x, int y, ItemStack st) {
|
||||
if (insertFilterBounds.contains(x, y)) {
|
||||
FluidFilter filter = eConduit.getFilter(gui.getDir(), false);
|
||||
if(filter == null && st == null) {
|
||||
return false;
|
||||
}
|
||||
if(filter == null) {
|
||||
filter = new FluidFilter();
|
||||
}
|
||||
int slot = (x - filterIX) / 18;
|
||||
filter.setFluid(slot, st);
|
||||
setConduitFilter(false, filter);
|
||||
return true;
|
||||
}
|
||||
int slot = (x - filterX) / 18;
|
||||
filter.setFluid(slot, st);
|
||||
setConduitFilter(filter);
|
||||
if (extractFilterBounds.contains(x, y)) {
|
||||
FluidFilter filter = eConduit.getFilter(gui.getDir(), true);
|
||||
if(filter == null && st == null) {
|
||||
return false;
|
||||
}
|
||||
if(filter == null) {
|
||||
filter = new FluidFilter();
|
||||
}
|
||||
int slot = (x - filterEX) / 18;
|
||||
filter.setFluid(slot, st);
|
||||
setConduitFilter(true, filter);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected void setConduitFilter(FluidFilter filter) {
|
||||
eConduit.setFilter(gui.getDir(), filter, isInput());
|
||||
protected void setConduitFilter(boolean isInput, FluidFilter filter) {
|
||||
eConduit.setFilter(gui.getDir(), filter, isInput);
|
||||
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketFluidFilter(eConduit, gui.getDir(), filter, isInput()));
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketFluidFilter(eConduit, gui.getDir(), filter, isInput));
|
||||
}
|
||||
protected void setConduitChannel(DyeColor channel) {
|
||||
if(isInput()) {
|
||||
protected void setConduitChannel(boolean isInput, DyeColor channel) {
|
||||
if(isInput) {
|
||||
eConduit.setInputColor(gui.getDir(), channel);
|
||||
} else {
|
||||
eConduit.setOutputColor(gui.getDir(), channel);
|
||||
}
|
||||
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketFluidChannel(eConduit, gui.getDir(), isInput(), channel));
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketFluidChannel(eConduit, gui.getDir(), isInput, channel));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -269,47 +278,37 @@ public class LiquidSettings extends BaseSettingsPanel {
|
||||
private void updateGuiVisibility() {
|
||||
deactivate();
|
||||
|
||||
if(isInput()) {
|
||||
rsB.onGuiInit();
|
||||
colorB.onGuiInit();
|
||||
}
|
||||
rsB.onGuiInit();
|
||||
colorB.onGuiInit();
|
||||
|
||||
if(!isEnder) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(conduit.getConnectionMode(gui.getDir()) == ConnectionMode.DISABLED) {
|
||||
channelB.detach();
|
||||
} else {
|
||||
channelB.onGuiInit();
|
||||
if (isInput()) {
|
||||
channelB.setColorIndex(eConduit.getInputColor(gui.getDir()).ordinal());
|
||||
} else {
|
||||
channelB.setColorIndex(eConduit.getOutputColor(gui.getDir()).ordinal());
|
||||
}
|
||||
}
|
||||
if(isInput()) {
|
||||
roundRobinB.onGuiInit();
|
||||
roundRobinB.setSelected(eConduit.isRoundRobin(gui.getDir()));
|
||||
}
|
||||
insertChannelB.onGuiInit();
|
||||
insertChannelB.setColorIndex(eConduit.getOutputColor(gui.getDir()).ordinal());
|
||||
extractChannelB.onGuiInit();
|
||||
extractChannelB.setColorIndex(eConduit.getInputColor(gui.getDir()).ordinal());
|
||||
roundRobinB.onGuiInit();
|
||||
roundRobinB.setSelected(eConduit.isRoundRobin(gui.getDir()));
|
||||
|
||||
gui.getContainer().setInventorySlotsVisible(true);
|
||||
if(isFilterVisible()) {
|
||||
gui.getContainer().setInventorySlotsVisible(true);
|
||||
addFilterTooltips();
|
||||
|
||||
whiteListB.onGuiInit();
|
||||
updateWhiteListButton(eConduit.getFilter(gui.getDir(), isInput()));
|
||||
} else {
|
||||
gui.getContainer().setInventorySlotsVisible(false);
|
||||
}
|
||||
|
||||
ConnectionMode mode = con.getConnectionMode(gui.getDir());
|
||||
if(mode == ConnectionMode.IN_OUT) {
|
||||
inOutNextB.onGuiInit();
|
||||
insertWhiteListB.onGuiInit();
|
||||
extractWhiteListB.onGuiInit();
|
||||
updateWhiteListButtons();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateWhiteListButton(FluidFilter filter) {
|
||||
private void updateWhiteListButtons() {
|
||||
updateWhiteListButton(eConduit.getFilter(gui.getDir(), false), false);
|
||||
updateWhiteListButton(eConduit.getFilter(gui.getDir(), true), true);
|
||||
}
|
||||
|
||||
private void updateWhiteListButton(FluidFilter filter, boolean isInput) {
|
||||
IconButton whiteListB = isInput ? extractWhiteListB : insertWhiteListB;
|
||||
if(filter != null && filter.isBlacklist()) {
|
||||
whiteListB.setIcon(IconEIO.FILTER_BLACKLIST);
|
||||
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.fluid.blacklist"));
|
||||
@@ -324,9 +323,9 @@ public class LiquidSettings extends BaseSettingsPanel {
|
||||
|
||||
rsB.detach();
|
||||
colorB.detach();
|
||||
gui.getContainer().setInventorySlotsVisible(false);
|
||||
if(isEnder) {
|
||||
roundRobinB.detach();
|
||||
gui.getContainer().setInventorySlotsVisible(false);
|
||||
if(filterToolTips != null) {
|
||||
for (GuiToolTip tt : filterToolTips) {
|
||||
if(tt != null) {
|
||||
@@ -334,43 +333,53 @@ public class LiquidSettings extends BaseSettingsPanel {
|
||||
}
|
||||
}
|
||||
}
|
||||
inOutNextB.detach();
|
||||
whiteListB.detach();
|
||||
channelB.detach();
|
||||
insertWhiteListB.detach();
|
||||
extractWhiteListB.detach();
|
||||
insertChannelB.detach();
|
||||
extractChannelB.detach();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderCustomOptions(int top, float par1, int par2, int par3) {
|
||||
boolean isInput = isInput();
|
||||
if(isEnder && isFilterVisible()) {
|
||||
String inOutStr = EnderIO.lang.localize("gui.conduit.ioMode.output");
|
||||
if(conduit.getConnectionMode(gui.getDir()) == ConnectionMode.IN_OUT) {
|
||||
inOutStr = inOutShowIn ? EnderIO.lang.localize("gui.conduit.ioMode.input") : EnderIO.lang.localize("gui.conduit.ioMode.output");
|
||||
} else if(conduit.getConnectionMode(gui.getDir()) == ConnectionMode.INPUT){
|
||||
inOutStr = EnderIO.lang.localize("gui.conduit.ioMode.input");
|
||||
}
|
||||
int x = left;
|
||||
int y = top;
|
||||
gui.getFontRenderer().drawString(inOutStr, x, y, ColorUtil.getRGB(Color.DARK_GRAY));
|
||||
|
||||
GL11.glColor3f(1, 1, 1);
|
||||
gui.bindGuiTexture(1);
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft(), gui.getGuiTop() + 55, 0, 55, gui.getXSize(), 145);
|
||||
//gui.drawTexturedModalRect(gui.getGuiLeft(), gui.getGuiTop() + 55, 0, 55, gui.getXSize(), 145);
|
||||
|
||||
FontRenderer fr = gui.getFontRenderer();
|
||||
int sw = fr.getStringWidth(filterStr);
|
||||
x = (gui.width / 2) - sw / 2;
|
||||
x = left + 50 - sw/2;
|
||||
y = top + 20;
|
||||
fr.drawString(filterStr, x, y, ColorUtil.getRGB(Color.DARK_GRAY));
|
||||
x = left + 150 - sw/2;
|
||||
fr.drawString(filterStr, x, y, ColorUtil.getRGB(Color.DARK_GRAY));
|
||||
|
||||
x = gui.getGuiLeft() + filterX;
|
||||
x = gui.getGuiLeft() + filterIX;
|
||||
y = gui.getGuiTop() + filterY;
|
||||
GL11.glColor3f(1, 1, 1);
|
||||
gui.bindGuiTexture();
|
||||
gui.drawTexturedModalRect(x, y, 24, 238, 90, 18);
|
||||
|
||||
FluidFilter filter = eConduit.getFilter(gui.getDir(), isInput);
|
||||
FluidFilter filter = eConduit.getFilter(gui.getDir(), false);
|
||||
if(filter != null && !filter.isEmpty()) {
|
||||
for (int i = 0; i < filter.size(); i++) {
|
||||
FluidStack f = filter.getFluidStackAt(i);
|
||||
if(f != null) {
|
||||
renderFluid(f, x + (i * 18), y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
x = gui.getGuiLeft() + filterEX;
|
||||
GL11.glColor3f(1, 1, 1);
|
||||
gui.bindGuiTexture();
|
||||
gui.drawTexturedModalRect(x, y, 24, 238, 90, 18);
|
||||
|
||||
filter = eConduit.getFilter(gui.getDir(), true);
|
||||
if(filter != null && !filter.isEmpty()) {
|
||||
for (int i = 0; i < filter.size(); i++) {
|
||||
FluidStack f = filter.getFluidStackAt(i);
|
||||
@@ -395,26 +404,19 @@ public class LiquidSettings extends BaseSettingsPanel {
|
||||
|
||||
}
|
||||
|
||||
private boolean isInput() {
|
||||
ConnectionMode mode = conduit.getConnectionMode(gui.getDir());
|
||||
return (mode == ConnectionMode.IN_OUT && inOutShowIn) || (mode == ConnectionMode.INPUT);
|
||||
}
|
||||
|
||||
private boolean isFilterVisible() {
|
||||
if(!isEnder) {
|
||||
return false;
|
||||
}
|
||||
ConnectionMode mode = conduit.getConnectionMode(gui.getDir());
|
||||
return mode == ConnectionMode.INPUT || mode == ConnectionMode.OUTPUT || mode == ConnectionMode.IN_OUT;
|
||||
return isEnder;
|
||||
}
|
||||
|
||||
private class FilterToolTip extends GuiToolTip {
|
||||
|
||||
int index;
|
||||
boolean isInput;
|
||||
|
||||
public FilterToolTip(Rectangle bounds, int index) {
|
||||
public FilterToolTip(Rectangle bounds, int index, boolean isInput) {
|
||||
super(bounds, (String[]) null);
|
||||
this.index = index;
|
||||
this.isInput = isInput;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -422,7 +424,7 @@ public class LiquidSettings extends BaseSettingsPanel {
|
||||
if(!isFilterVisible()) {
|
||||
return null;
|
||||
}
|
||||
FluidFilter filter = eConduit.getFilter(gui.getDir(), isInput());
|
||||
FluidFilter filter = eConduit.getFilter(gui.getDir(), isInput);
|
||||
if(filter == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -13,38 +13,41 @@ import net.minecraft.client.gui.GuiButton;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
public class BasicItemFilterGui implements IItemFilterGui {
|
||||
|
||||
|
||||
private static final int ID_WHITELIST = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_NBT = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_META = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_ORE_DICT = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_STICKY = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_STICKY = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_FUZZY = GuiExternalConnection.nextButtonId();
|
||||
|
||||
|
||||
private final GuiContainerBaseEIO gui;
|
||||
|
||||
|
||||
private final ToggleButton useMetaB;
|
||||
private final ToggleButton useNbtB;
|
||||
private final IconButton whiteListB;
|
||||
private final ToggleButton useOreDictB;
|
||||
private final ToggleButton stickyB;
|
||||
private final CycleButton<FuzzyMode> fuzzyB;
|
||||
|
||||
|
||||
final boolean isAdvanced;
|
||||
final boolean isStickyModeAvailable;
|
||||
|
||||
|
||||
private final IItemFilterContainer filterContainer;
|
||||
private final ItemFilter filter;
|
||||
|
||||
|
||||
private int buttonIdOffset;
|
||||
private int xOffset;
|
||||
private int yOffset;
|
||||
|
||||
public BasicItemFilterGui(GuiContainerBaseEIO gui, IItemFilterContainer filterContainer, boolean isStickyModeAvailable) {
|
||||
this(gui, filterContainer, isStickyModeAvailable, 32, 68, 0);
|
||||
private boolean isInput;
|
||||
|
||||
public BasicItemFilterGui(GuiContainerBaseEIO gui, IItemFilterContainer filterContainer, boolean isStickyModeAvailable, boolean isInput) {
|
||||
this(gui, filterContainer, isStickyModeAvailable, isInput, isInput ? 6 : 104, 96, isInput ? 0 : 256);
|
||||
}
|
||||
|
||||
public BasicItemFilterGui(GuiContainerBaseEIO gui, IItemFilterContainer filterContainer, boolean isStickyModeAvailable,
|
||||
boolean isInput,
|
||||
int xOffset, int yOffset,
|
||||
int buttonIdOffset) {
|
||||
this.gui = gui;
|
||||
@@ -53,44 +56,43 @@ public class BasicItemFilterGui implements IItemFilterGui {
|
||||
this.xOffset = xOffset;
|
||||
this.yOffset = yOffset;
|
||||
this.buttonIdOffset = buttonIdOffset;
|
||||
this.isInput = isInput;
|
||||
|
||||
filter = filterContainer.getItemFilter();
|
||||
|
||||
|
||||
isAdvanced = filter.isAdvanced();
|
||||
|
||||
int butLeft = xOffset + 92;
|
||||
|
||||
int butLeft = xOffset;
|
||||
int x = butLeft;
|
||||
int y = yOffset + 1;
|
||||
int y = yOffset + (isAdvanced ? 40 : 20);
|
||||
whiteListB = new IconButton(gui, ID_WHITELIST + buttonIdOffset, x, y, IconEIO.FILTER_WHITELIST);
|
||||
whiteListB.setToolTip(getWhitelistTooltips(false));
|
||||
|
||||
x += 20;
|
||||
x += 16;
|
||||
useMetaB = new ToggleButton(gui, ID_META + buttonIdOffset, x, y, IconEIO.FILTER_META_OFF, IconEIO.FILTER_META);
|
||||
useMetaB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.matchMetaData"));
|
||||
useMetaB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreMetaData"));
|
||||
useMetaB.setPaintSelectedBorder(false);
|
||||
|
||||
x += 20;
|
||||
x += 16;
|
||||
stickyB = new ToggleButton(gui, ID_STICKY + buttonIdOffset, x, y, IconEIO.FILTER_STICKY_OFF, IconEIO.FILTER_STICKY);
|
||||
stickyB.setSelectedToolTip(EnderIO.lang.localizeList("gui.conduit.item.stickyEnabled"));
|
||||
stickyB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.stickyDisbaled"));
|
||||
stickyB.setPaintSelectedBorder(false);
|
||||
|
||||
y += 20;
|
||||
x = butLeft;
|
||||
|
||||
if(isStickyModeAvailable) x += 16;
|
||||
useOreDictB = new ToggleButton(gui, ID_ORE_DICT + buttonIdOffset, x, y, IconEIO.FILTER_ORE_DICT_OFF, IconEIO.FILTER_ORE_DICT);
|
||||
useOreDictB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.oreDicEnabled"));
|
||||
useOreDictB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.oreDicDisabled"));
|
||||
useOreDictB.setPaintSelectedBorder(false);
|
||||
|
||||
x += 20;
|
||||
x += 16;
|
||||
useNbtB = new ToggleButton(gui, ID_NBT + buttonIdOffset, x, y, IconEIO.FILTER_NBT_OFF, IconEIO.FILTER_NBT);
|
||||
useNbtB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.matchNBT"));
|
||||
useNbtB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreNBT"));
|
||||
useNbtB.setPaintSelectedBorder(false);
|
||||
|
||||
x += 20;
|
||||
x += 16;
|
||||
fuzzyB = new CycleButton(gui, ID_FUZZY + buttonIdOffset, x, y, FuzzyMode.class);
|
||||
}
|
||||
|
||||
@@ -104,9 +106,9 @@ public class BasicItemFilterGui implements IItemFilterGui {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseClicked(int x, int y, int par3) {
|
||||
public void mouseClicked(int x, int y, int par3) {
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void updateButtons() {
|
||||
ItemFilter activeFilter = filter;
|
||||
@@ -117,7 +119,7 @@ public class BasicItemFilterGui implements IItemFilterGui {
|
||||
|
||||
useOreDictB.onGuiInit();
|
||||
useOreDictB.setSelected(activeFilter.isUseOreDict());
|
||||
|
||||
|
||||
if(isStickyModeAvailable) {
|
||||
stickyB.onGuiInit();
|
||||
stickyB.setSelected(activeFilter.isSticky());
|
||||
@@ -138,10 +140,10 @@ public class BasicItemFilterGui implements IItemFilterGui {
|
||||
whiteListB.setIcon(IconEIO.FILTER_WHITELIST);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void actionPerformed(GuiButton guiButton) {
|
||||
|
||||
|
||||
if(guiButton.id == ID_META + buttonIdOffset) {
|
||||
filter.setMatchMeta(useMetaB.isSelected());
|
||||
sendFilterChange();
|
||||
@@ -160,16 +162,16 @@ public class BasicItemFilterGui implements IItemFilterGui {
|
||||
} else if(guiButton.id == ID_WHITELIST + buttonIdOffset) {
|
||||
filter.setBlacklist(!filter.isBlacklist());
|
||||
sendFilterChange();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void sendFilterChange() {
|
||||
updateButtons();
|
||||
filterContainer.onFilterChanged();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void deactivate() {
|
||||
public void deactivate() {
|
||||
useNbtB.detach();
|
||||
useMetaB.detach();
|
||||
useOreDictB.detach();
|
||||
@@ -177,13 +179,13 @@ public class BasicItemFilterGui implements IItemFilterGui {
|
||||
stickyB.detach();
|
||||
fuzzyB.detach();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void renderCustomOptions(int top, float par1, int par2, int par3) {
|
||||
GL11.glColor3f(1, 1, 1);
|
||||
gui.bindGuiTexture(1);
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset, gui.getGuiTop() + yOffset, 0, 238, 18 * 5, 18);
|
||||
if(filter.isAdvanced()) {
|
||||
if(filter.isAdvanced()) {
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset, gui.getGuiTop() + yOffset + 20, 0, 238, 18 * 5, 18);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,11 +44,11 @@ public class BigItemFilterGui implements IItemFilterGui {
|
||||
private int xOffset;
|
||||
private int yOffset;
|
||||
|
||||
public BigItemFilterGui(GuiContainerBaseEIO gui, IItemFilterContainer filterContainer, boolean isStickyModeAvailable) {
|
||||
this(gui, filterContainer, isStickyModeAvailable, 32, 48, 0);
|
||||
public BigItemFilterGui(GuiContainerBaseEIO gui, IItemFilterContainer filterContainer, boolean isStickyModeAvailable, boolean isInput) {
|
||||
this(gui, filterContainer, isStickyModeAvailable, isInput, isInput ? 6 : 104, 96, isInput ? 0 : 256);
|
||||
}
|
||||
|
||||
public BigItemFilterGui(GuiContainerBaseEIO gui, IItemFilterContainer filterContainer, boolean isStickyModeAvailable,
|
||||
public BigItemFilterGui(GuiContainerBaseEIO gui, IItemFilterContainer filterContainer, boolean isStickyModeAvailable, boolean isInput,
|
||||
int xOffset, int yOffset,
|
||||
int buttonIdOffset) {
|
||||
this.gui = gui;
|
||||
@@ -62,37 +62,45 @@ public class BigItemFilterGui implements IItemFilterGui {
|
||||
|
||||
isAdvanced = filter.isAdvanced();
|
||||
|
||||
int butLeft = xOffset + 92+ 54;
|
||||
int butLeft = xOffset;
|
||||
int x = butLeft;
|
||||
int y = yOffset + 40;
|
||||
int y = yOffset - 8;
|
||||
whiteListB = new IconButton(gui, ID_WHITELIST + buttonIdOffset, x, y, IconEIO.FILTER_WHITELIST);
|
||||
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist"));
|
||||
|
||||
y -= 20;
|
||||
x += 16;
|
||||
useMetaB = new ToggleButton(gui, ID_META + buttonIdOffset, x, y, IconEIO.FILTER_META_OFF, IconEIO.FILTER_META);
|
||||
useMetaB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.matchMetaData"));
|
||||
useMetaB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreMetaData"));
|
||||
useMetaB.setPaintSelectedBorder(false);
|
||||
|
||||
stickyB = new ToggleButton(gui, ID_STICKY + buttonIdOffset, x, y, IconEIO.FILTER_STICKY_OFF, IconEIO.FILTER_STICKY);
|
||||
stickyB.setSelectedToolTip(EnderIO.lang.localizeList("gui.conduit.item.stickyEnabled"));
|
||||
stickyB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.stickyDisbaled"));
|
||||
stickyB.setPaintSelectedBorder(false);
|
||||
|
||||
y -= 20;
|
||||
x += 16;
|
||||
useOreDictB = new ToggleButton(gui, ID_ORE_DICT + buttonIdOffset, x, y, IconEIO.FILTER_ORE_DICT_OFF, IconEIO.FILTER_ORE_DICT);
|
||||
useOreDictB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.oreDicEnabled"));
|
||||
useOreDictB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.oreDicDisabled"));
|
||||
useOreDictB.setPaintSelectedBorder(false);
|
||||
|
||||
y -= 20;
|
||||
x += 16;
|
||||
useNbtB = new ToggleButton(gui, ID_NBT + buttonIdOffset, x, y, IconEIO.FILTER_NBT_OFF, IconEIO.FILTER_NBT);
|
||||
useNbtB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.matchNBT"));
|
||||
useNbtB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreNBT"));
|
||||
useNbtB.setPaintSelectedBorder(false);
|
||||
|
||||
y -= 20;
|
||||
x += 16;
|
||||
fuzzyB = new CycleButton(gui, ID_FUZZY + buttonIdOffset, x, y, FuzzyMode.class);
|
||||
|
||||
x += 16;
|
||||
stickyB = new ToggleButton(gui, ID_STICKY + buttonIdOffset, x, y, IconEIO.FILTER_STICKY_OFF, IconEIO.FILTER_STICKY);
|
||||
stickyB.setSelectedToolTip(EnderIO.lang.localizeList("gui.conduit.item.stickyEnabled"));
|
||||
stickyB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.stickyDisbaled"));
|
||||
stickyB.setPaintSelectedBorder(false);
|
||||
|
||||
this.yOffset += 8;
|
||||
if (isInput) {
|
||||
this.xOffset -= 50;
|
||||
} else {
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
public void createFilterSlots() {
|
||||
@@ -188,10 +196,10 @@ public class BigItemFilterGui implements IItemFilterGui {
|
||||
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset + 54, gui.getGuiTop() + yOffset, 0, 238, 18 * 5, 18);
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset, gui.getGuiTop() + yOffset, 0, 238, 18 * 5, 18);
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset + 54, gui.getGuiTop() + yOffset + 20, 0, 238, 18 * 5, 18);
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset, gui.getGuiTop() + yOffset + 20, 0, 238, 18 * 5, 18);
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset + 54, gui.getGuiTop() + yOffset + 40, 0, 238, 18 * 5, 18);
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset, gui.getGuiTop() + yOffset + 40, 0, 238, 18 * 5, 18);
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset + 54, gui.getGuiTop() + yOffset + 18, 0, 238, 18 * 5, 18);
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset, gui.getGuiTop() + yOffset + 18, 0, 238, 18 * 5, 18);
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset + 54, gui.getGuiTop() + yOffset + 36, 0, 238, 18 * 5, 18);
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset, gui.getGuiTop() + yOffset + 36, 0, 238, 18 * 5, 18);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -32,12 +32,12 @@ public class ExistingItemFilterGui implements IItemFilterGui {
|
||||
private static final int ID_META = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_ORE_DICT = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_STICKY = GuiExternalConnection.nextButtonId();
|
||||
|
||||
|
||||
private static final int ID_SNAPSHOT = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_CLEAR = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_SHOW = GuiExternalConnection.nextButtonId();
|
||||
private static final int ID_MERGE = GuiExternalConnection.nextButtonId();
|
||||
|
||||
|
||||
|
||||
private IItemConduit itemConduit;
|
||||
private GuiExternalConnection gui;
|
||||
@@ -46,7 +46,7 @@ public class ExistingItemFilterGui implements IItemFilterGui {
|
||||
private ToggleButton useNbtB;
|
||||
private ToggleButton useOreDictB;
|
||||
private ToggleButton stickyB;
|
||||
|
||||
|
||||
private final IconButton whiteListB;
|
||||
|
||||
private GuiButton snapshotB;
|
||||
@@ -56,6 +56,7 @@ public class ExistingItemFilterGui implements IItemFilterGui {
|
||||
private SnapshotOverlay snapshotOverlay;
|
||||
|
||||
boolean isInput;
|
||||
private int buttonIdOffset = 0;
|
||||
|
||||
private ExistingItemFilter filter;
|
||||
|
||||
@@ -63,6 +64,7 @@ public class ExistingItemFilterGui implements IItemFilterGui {
|
||||
this.gui = gui;
|
||||
this.itemConduit = itemConduit;
|
||||
this.isInput = isInput;
|
||||
this.buttonIdOffset = isInput ? 0 : 256;
|
||||
|
||||
if(isInput) {
|
||||
filter = (ExistingItemFilter) itemConduit.getInputFilter(gui.getDir());
|
||||
@@ -70,54 +72,51 @@ public class ExistingItemFilterGui implements IItemFilterGui {
|
||||
filter = (ExistingItemFilter) itemConduit.getOutputFilter(gui.getDir());
|
||||
}
|
||||
|
||||
int butLeft = 37;
|
||||
int butLeft = isInput ? 6 : 104;
|
||||
int x = butLeft;
|
||||
int y = 68;
|
||||
int y = 96;
|
||||
|
||||
useMetaB = new ToggleButton(gui, ID_META, x, y, IconEIO.FILTER_META_OFF, IconEIO.FILTER_META);
|
||||
useMetaB = new ToggleButton(gui, ID_META + buttonIdOffset, x, y, IconEIO.FILTER_META_OFF, IconEIO.FILTER_META);
|
||||
useMetaB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.matchMetaData"));
|
||||
useMetaB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreMetaData"));
|
||||
useMetaB.setPaintSelectedBorder(false);
|
||||
|
||||
x += 20;
|
||||
stickyB = new ToggleButton(gui, ID_STICKY, x, y, IconEIO.FILTER_STICKY_OFF, IconEIO.FILTER_STICKY);
|
||||
x += 16;
|
||||
whiteListB = new IconButton(gui, -1, x, y, IconEIO.FILTER_WHITELIST);
|
||||
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist"));
|
||||
|
||||
x += 16;
|
||||
stickyB = new ToggleButton(gui, ID_STICKY + buttonIdOffset, x, y, IconEIO.FILTER_STICKY_OFF, IconEIO.FILTER_STICKY);
|
||||
String[] lines = EnderIO.lang.localizeList("gui.conduit.item.stickyEnabled");
|
||||
stickyB.setSelectedToolTip(lines);
|
||||
stickyB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.stickyDisbaled"));
|
||||
stickyB.setPaintSelectedBorder(false);
|
||||
|
||||
y += 20;
|
||||
x = butLeft;
|
||||
|
||||
x += 20;
|
||||
useNbtB = new ToggleButton(gui, ID_NBT, x, y, IconEIO.FILTER_NBT_OFF, IconEIO.FILTER_NBT);
|
||||
if(!isInput) x += 16;
|
||||
useNbtB = new ToggleButton(gui, ID_NBT + buttonIdOffset, x, y, IconEIO.FILTER_NBT_OFF, IconEIO.FILTER_NBT);
|
||||
useNbtB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.matchNBT"));
|
||||
useNbtB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreNBT"));
|
||||
useNbtB.setPaintSelectedBorder(false);
|
||||
|
||||
x = butLeft;
|
||||
useOreDictB = new ToggleButton(gui, ID_ORE_DICT, x, y, IconEIO.FILTER_ORE_DICT_OFF, IconEIO.FILTER_ORE_DICT);
|
||||
x += 16;
|
||||
useOreDictB = new ToggleButton(gui, ID_ORE_DICT + buttonIdOffset, x, y, IconEIO.FILTER_ORE_DICT_OFF, IconEIO.FILTER_ORE_DICT);
|
||||
useOreDictB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.oreDicEnabled"));
|
||||
useOreDictB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.oreDicDisabled"));
|
||||
useOreDictB.setPaintSelectedBorder(false);
|
||||
|
||||
snapshotB = new GuiButton(ID_SNAPSHOT, 0, 0, 60, 20, EnderIO.lang.localize("gui.conduit.button.snap"));
|
||||
mergeB = new GuiButton(ID_MERGE, 0, 0, 40, 20, EnderIO.lang.localize("gui.conduit.button.merge"));
|
||||
clearB = new GuiButton(ID_CLEAR, 0, 0, 60, 20, EnderIO.lang.localize("gui.conduit.button.clear"));
|
||||
showB = new GuiButton(ID_SHOW, 0, 0, 40, 20, EnderIO.lang.localize("gui.conduit.button.show"));
|
||||
|
||||
x -= 20;
|
||||
whiteListB = new IconButton(gui, -1, x, y, IconEIO.FILTER_WHITELIST);
|
||||
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist"));
|
||||
snapshotB = new GuiButton(ID_SNAPSHOT + buttonIdOffset, 0, 0, 56, 20, EnderIO.lang.localize("gui.conduit.button.snap"));
|
||||
mergeB = new GuiButton(ID_MERGE + buttonIdOffset, 0, 0, 40, 20, EnderIO.lang.localize("gui.conduit.button.merge"));
|
||||
clearB = new GuiButton(ID_CLEAR + buttonIdOffset, 0, 0, 56, 20, EnderIO.lang.localize("gui.conduit.button.clear"));
|
||||
showB = new GuiButton(ID_SHOW + buttonIdOffset, 0, 0, 40, 20, EnderIO.lang.localize("gui.conduit.button.show"));
|
||||
|
||||
snapshotOverlay = new SnapshotOverlay();
|
||||
gui.addOverlay(snapshotOverlay);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void mouseClicked(int x, int y, int par3) {
|
||||
public void mouseClicked(int x, int y, int par3) {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -148,22 +147,25 @@ public class ExistingItemFilterGui implements IItemFilterGui {
|
||||
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist"));
|
||||
}
|
||||
|
||||
int x0 = gui.getGuiLeft() + 80;
|
||||
int y0 = gui.getGuiTop() + 65;
|
||||
int x1 = x0 + 65;
|
||||
int y1 = y0 + 22;
|
||||
int butLeft = gui.getGuiLeft() + (isInput ? 5 : 104);
|
||||
int x = butLeft;
|
||||
int y = gui.getGuiTop() + 96 + 20;
|
||||
|
||||
snapshotB.xPosition = x0;
|
||||
snapshotB.yPosition = y0;
|
||||
snapshotB.xPosition = x;
|
||||
snapshotB.yPosition = y;
|
||||
|
||||
mergeB.xPosition = x1;
|
||||
mergeB.yPosition = y0;
|
||||
x += 56;
|
||||
mergeB.xPosition = x;
|
||||
mergeB.yPosition = y;
|
||||
|
||||
clearB.xPosition = x0;
|
||||
clearB.yPosition = y1;
|
||||
x = butLeft;
|
||||
y += 20;
|
||||
clearB.xPosition = x;
|
||||
clearB.yPosition = y;
|
||||
|
||||
showB.xPosition = x1;
|
||||
showB.yPosition = y1;
|
||||
x += 56;
|
||||
showB.xPosition = x;
|
||||
showB.yPosition = y;
|
||||
|
||||
clearB.enabled = filter.getSnapshot() != null;
|
||||
showB.enabled = clearB.enabled;
|
||||
@@ -177,26 +179,26 @@ public class ExistingItemFilterGui implements IItemFilterGui {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(GuiButton guiButton) {
|
||||
if(guiButton.id == ID_META) {
|
||||
if(guiButton.id == ID_META + buttonIdOffset) {
|
||||
filter.setMatchMeta(useMetaB.isSelected());
|
||||
sendFilterChange();
|
||||
} else if(guiButton.id == ID_NBT) {
|
||||
} else if(guiButton.id == ID_NBT + buttonIdOffset) {
|
||||
filter.setMatchNBT(useNbtB.isSelected());
|
||||
sendFilterChange();
|
||||
} else if(guiButton.id == ID_STICKY) {
|
||||
} else if(guiButton.id == ID_STICKY + buttonIdOffset) {
|
||||
filter.setSticky(stickyB.isSelected());
|
||||
sendFilterChange();
|
||||
} else if(guiButton.id == ID_ORE_DICT) {
|
||||
} else if(guiButton.id == ID_ORE_DICT + buttonIdOffset) {
|
||||
filter.setUseOreDict(useOreDictB.isSelected());
|
||||
sendFilterChange();
|
||||
} else if(guiButton.id == ID_SNAPSHOT) {
|
||||
} else if(guiButton.id == ID_SNAPSHOT + buttonIdOffset) {
|
||||
sendSnapshotPacket(PacketExistingItemFilterSnapshot.Opcode.SET);
|
||||
} else if(guiButton.id == ID_CLEAR) {
|
||||
} else if(guiButton.id == ID_CLEAR + buttonIdOffset) {
|
||||
sendSnapshotPacket(PacketExistingItemFilterSnapshot.Opcode.CLEAR);
|
||||
} else if(guiButton.id == ID_MERGE) {
|
||||
} else if(guiButton.id == ID_MERGE + buttonIdOffset) {
|
||||
sendSnapshotPacket(PacketExistingItemFilterSnapshot.Opcode.MERGE);
|
||||
} else if(guiButton.id == ID_SHOW) {
|
||||
showSnapshotOverlay();
|
||||
} else if(guiButton.id == ID_SHOW + buttonIdOffset) {
|
||||
showSnapshotOverlay();
|
||||
} else if (guiButton == whiteListB) {
|
||||
filter.setBlacklist(!filter.isBlacklist());
|
||||
sendSnapshotPacket(filter.isBlacklist() ? PacketExistingItemFilterSnapshot.Opcode.SET_BLACK
|
||||
@@ -205,7 +207,7 @@ public class ExistingItemFilterGui implements IItemFilterGui {
|
||||
}
|
||||
|
||||
private void showSnapshotOverlay() {
|
||||
snapshotOverlay.setVisible(true);
|
||||
snapshotOverlay.setVisible(true);
|
||||
}
|
||||
|
||||
private void sendSnapshotPacket(PacketExistingItemFilterSnapshot.Opcode opcode) {
|
||||
@@ -214,14 +216,14 @@ public class ExistingItemFilterGui implements IItemFilterGui {
|
||||
|
||||
private void sendFilterChange() {
|
||||
updateButtons();
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketItemConduitFilter(itemConduit, gui.getDir()));
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketItemConduitFilter(itemConduit, gui.getDir()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deactivate() {
|
||||
useNbtB.detach();
|
||||
useMetaB.detach();
|
||||
useOreDictB.detach();
|
||||
useOreDictB.detach();
|
||||
stickyB.detach();
|
||||
whiteListB.detach();
|
||||
gui.removeButton(snapshotB);
|
||||
@@ -239,32 +241,32 @@ public class ExistingItemFilterGui implements IItemFilterGui {
|
||||
// gui.drawTexturedModalRect(gui.getGuiLeft() + 32, gui.getGuiTop() + 86, 0, 238, 18 * 5, 18);
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
class SnapshotOverlay implements IGuiOverlay {
|
||||
|
||||
boolean visible;
|
||||
|
||||
|
||||
@Override
|
||||
public void init(IGuiScreen screen) {
|
||||
public void init(IGuiScreen screen) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Rectangle getBounds() {
|
||||
public Rectangle getBounds() {
|
||||
return new Rectangle(0,0,gui.width,gui.height);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(int mouseX, int mouseY, float partialTick) {
|
||||
public void draw(int mouseX, int mouseY, float partialTick) {
|
||||
RenderHelper.enableGUIStandardItemLighting();
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
RenderUtil.renderQuad2D(4, 4, 0, gui.getXSize() - 9, gui.getYSize() - 8, new Vector4f(0,0,0,1));
|
||||
RenderUtil.renderQuad2D(6, 6, 0, gui.getXSize() - 13, gui.getYSize() - 12, new Vector4f(0.6,0.6,0.6,1));
|
||||
|
||||
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
RenderItem itemRenderer = new RenderItem();
|
||||
|
||||
|
||||
GL11.glEnable(GL11.GL_DEPTH_TEST);
|
||||
|
||||
|
||||
List<ItemStack> snapshot = filter.getSnapshot();
|
||||
int x = 15;
|
||||
int y = 10;
|
||||
@@ -272,20 +274,20 @@ public class ExistingItemFilterGui implements IItemFilterGui {
|
||||
for(ItemStack st : snapshot) {
|
||||
if(st != null) {
|
||||
itemRenderer.renderItemAndEffectIntoGUI(mc.fontRenderer, mc.getTextureManager(), st, x, y);
|
||||
//itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, mc.getTextureManager(), st, x, y, s);
|
||||
}
|
||||
//itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, mc.getTextureManager(), st, x, y, s);
|
||||
}
|
||||
x += 20;
|
||||
count++;
|
||||
if(count % 9 == 0) {
|
||||
x = 15;
|
||||
y += 20;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVisible(boolean visible) {
|
||||
this.visible = visible;
|
||||
this.visible = visible;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -299,9 +301,9 @@ public class ExistingItemFilterGui implements IItemFilterGui {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMouseInBounds(int mouseX, int mouseY) {
|
||||
public boolean isMouseInBounds(int mouseX, int mouseY) {
|
||||
return getBounds().contains(mouseX, mouseY);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,37 +1,20 @@
|
||||
package crazypants.enderio.conduit.gui.item;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Rectangle;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.enderio.core.client.gui.button.ColorButton;
|
||||
import com.enderio.core.client.gui.button.MultiIconButton;
|
||||
import com.enderio.core.client.gui.button.ToggleButton;
|
||||
import com.enderio.core.client.gui.widget.GuiToolTip;
|
||||
import com.enderio.core.client.handlers.SpecialTooltipHandler;
|
||||
import com.enderio.core.client.render.ColorUtil;
|
||||
import com.enderio.core.client.render.EnderWidget;
|
||||
import com.enderio.core.client.render.RenderUtil;
|
||||
import com.enderio.core.common.util.DyeColor;
|
||||
|
||||
import crazypants.enderio.EnderIO;
|
||||
import crazypants.enderio.conduit.ConnectionMode;
|
||||
import crazypants.enderio.conduit.IConduit;
|
||||
import crazypants.enderio.conduit.gui.BaseSettingsPanel;
|
||||
import crazypants.enderio.conduit.gui.FilterChangeListener;
|
||||
import crazypants.enderio.conduit.gui.FilterGuiUtil;
|
||||
import crazypants.enderio.conduit.gui.GuiExternalConnection;
|
||||
import crazypants.enderio.conduit.item.FunctionUpgrade;
|
||||
import crazypants.enderio.conduit.item.IItemConduit;
|
||||
import crazypants.enderio.conduit.item.filter.ExistingItemFilter;
|
||||
import crazypants.enderio.conduit.item.filter.IItemFilter;
|
||||
import crazypants.enderio.conduit.item.filter.ItemFilter;
|
||||
import crazypants.enderio.conduit.item.filter.ModItemFilter;
|
||||
import crazypants.enderio.conduit.item.filter.PowerItemFilter;
|
||||
import crazypants.enderio.conduit.packet.PacketExtractMode;
|
||||
import crazypants.enderio.conduit.packet.PacketItemConduitFilter;
|
||||
import crazypants.enderio.gui.IconEIO;
|
||||
@@ -39,27 +22,26 @@ import crazypants.enderio.gui.RedstoneModeButton;
|
||||
import crazypants.enderio.machine.IRedstoneModeControlable;
|
||||
import crazypants.enderio.machine.RedstoneControlMode;
|
||||
import crazypants.enderio.network.PacketHandler;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.awt.*;
|
||||
|
||||
public class ItemSettings extends BaseSettingsPanel {
|
||||
|
||||
private static final int NEXT_FILTER_ID = 98932;
|
||||
|
||||
private static final int ID_REDSTONE_BUTTON = 12614;
|
||||
|
||||
private static final int ID_COLOR_BUTTON = 179816;
|
||||
|
||||
private static final int ID_LOOP = 22;
|
||||
private static final int ID_ROUND_ROBIN = 24;
|
||||
private static final int ID_PRIORITY_UP = 25;
|
||||
private static final int ID_PRIORITY_DOWN = 26;
|
||||
private static final int ID_CHANNEL = 23;
|
||||
private static final int ID_INSERT_CHANNEL = 23;
|
||||
private static final int ID_EXTRACT_CHANNEL = 27;
|
||||
|
||||
private IItemConduit itemConduit;
|
||||
|
||||
private String inputHeading;
|
||||
private String outputHeading;
|
||||
|
||||
private final MultiIconButton nextFilterB;
|
||||
private @Nonnull IItemConduit itemConduit;
|
||||
|
||||
private final ToggleButton loopB;
|
||||
private final ToggleButton roundRobinB;
|
||||
@@ -68,71 +50,56 @@ public class ItemSettings extends BaseSettingsPanel {
|
||||
private final MultiIconButton priDownB;
|
||||
|
||||
private final RedstoneModeButton rsB;
|
||||
private final ColorButton colorB;
|
||||
private final @Nonnull ColorButton colorB;
|
||||
|
||||
private ColorButton channelB;
|
||||
private ColorButton insertChannelB;
|
||||
private ColorButton extractChannelB;
|
||||
|
||||
boolean inOutShowIn = false;
|
||||
|
||||
private IItemFilter activeFilter;
|
||||
|
||||
private int priLeft;
|
||||
private int priLeft = 46;
|
||||
private int priWidth = 32;
|
||||
|
||||
private final GuiToolTip priorityTooltip;
|
||||
private final GuiToolTip speedUpgradeTooltip;
|
||||
private final GuiToolTip functionUpgradeTooltip;
|
||||
private final GuiToolTip filterUpgradeTooltip;
|
||||
private IItemFilterGui insertFilterGui;
|
||||
private IItemFilterGui extractFilterGui;
|
||||
|
||||
private IItemFilterGui filterGui;
|
||||
|
||||
public ItemSettings(final GuiExternalConnection gui, IConduit con) {
|
||||
super(IconEIO.WRENCH_OVERLAY_ITEM, EnderIO.lang.localize("itemItemConduit.name"), gui, con);
|
||||
public ItemSettings(@Nonnull final GuiExternalConnection gui, @Nonnull IConduit con) {
|
||||
super(IconEIO.WRENCH_OVERLAY_ITEM, EnderIO.lang.localize("itemItemConduit.name"), gui, con, "filter_upgrade_settings");
|
||||
itemConduit = (IItemConduit) con;
|
||||
this.textureHeight += 48;
|
||||
|
||||
inputHeading = EnderIO.lang.localize("gui.conduit.item.extractionFilter");
|
||||
outputHeading = EnderIO.lang.localize("gui.conduit.item.insertionFilter");
|
||||
|
||||
int x = 52;
|
||||
int x = leftColumn;
|
||||
int y = customTop;
|
||||
|
||||
nextFilterB = MultiIconButton.createRightArrowButton(gui, NEXT_FILTER_ID, x, y);
|
||||
insertChannelB = new ColorButton(gui, ID_INSERT_CHANNEL, x, y);
|
||||
insertChannelB.setColorIndex(0);
|
||||
insertChannelB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.channel"));
|
||||
|
||||
x = 66;
|
||||
channelB = new ColorButton(gui, ID_CHANNEL, x, y);
|
||||
channelB.setColorIndex(0);
|
||||
channelB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.channel"));
|
||||
x = rightColumn;
|
||||
extractChannelB = new ColorButton(gui, ID_EXTRACT_CHANNEL, x, y);
|
||||
extractChannelB.setColorIndex(0);
|
||||
extractChannelB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.channel"));
|
||||
|
||||
filterUpgradeTooltip = new GuiToolTip(new Rectangle(x - 21 - 18 * 2, customTop + 3 + 16, 18, 18), EnderIO.lang.localize("gui.conduit.item.filterupgrade")) {
|
||||
@Override
|
||||
public boolean shouldDraw() {
|
||||
return !gui.getContainer().hasFilterUpgrades(isInputVisible()) && super.shouldDraw();
|
||||
}
|
||||
};
|
||||
speedUpgradeTooltip = new GuiToolTip(new Rectangle(x - 21 - 18*2, customTop + 3 + 16 + 36, 18, 18), EnderIO.lang.localize("gui.conduit.item.speedupgrade"), EnderIO.lang.localize("gui.conduit.item.speedupgrade2")) {
|
||||
@Override
|
||||
public boolean shouldDraw() {
|
||||
return !gui.getContainer().hasSpeedUpgrades() && super.shouldDraw();
|
||||
}
|
||||
};
|
||||
x += 4 + extractChannelB.getWidth();
|
||||
roundRobinB = new ToggleButton(gui, ID_ROUND_ROBIN, x, y, IconEIO.ROUND_ROBIN_OFF, IconEIO.ROUND_ROBIN);
|
||||
roundRobinB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinEnabled"));
|
||||
roundRobinB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinDisabled"));
|
||||
roundRobinB.setPaintSelectedBorder(false);
|
||||
|
||||
ArrayList<String> list = new ArrayList<String>();
|
||||
SpecialTooltipHandler.addTooltipFromResources(list, "enderio.gui.conduit.item.functionupgrade.line");
|
||||
for(FunctionUpgrade upgrade : FunctionUpgrade.values()) {
|
||||
list.add(EnderIO.lang.localizeExact(upgrade.unlocName.concat(".name")));
|
||||
}
|
||||
functionUpgradeTooltip = new GuiToolTip(new Rectangle(x - 21 - 18*2, customTop + 3 + 34, 18, 18), list) {
|
||||
@Override
|
||||
public boolean shouldDraw() {
|
||||
return !gui.getContainer().hasFunctionUpgrades() && super.shouldDraw();
|
||||
}
|
||||
};
|
||||
x += 4 + roundRobinB.getWidth();
|
||||
loopB = new ToggleButton(gui, ID_LOOP, x, y, IconEIO.LOOP_OFF, IconEIO.LOOP);
|
||||
loopB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.selfFeedEnabled"));
|
||||
loopB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.selfFeedDisabled"));
|
||||
loopB.setPaintSelectedBorder(false);
|
||||
|
||||
x += channelB.getWidth() + gap;
|
||||
priLeft = x - 8;
|
||||
y += insertChannelB.getHeight() + 6;
|
||||
x = rightColumn;
|
||||
|
||||
int x0 = x + 20;
|
||||
colorB = new ColorButton(gui, ID_COLOR_BUTTON, x0, y);
|
||||
colorB.setColorIndex(itemConduit.getExtractionSignalColor(gui.getDir()).ordinal());
|
||||
colorB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.channel"));
|
||||
|
||||
rsB = new RedstoneModeButton(gui, ID_REDSTONE_BUTTON, x, y, new IRedstoneModeControlable() {
|
||||
|
||||
@Override
|
||||
public void setRedstoneControlMode(RedstoneControlMode mode) {
|
||||
RedstoneControlMode curMode = getRedstoneControlMode();
|
||||
@@ -149,286 +116,158 @@ public class ItemSettings extends BaseSettingsPanel {
|
||||
}
|
||||
});
|
||||
|
||||
x += rsB.getWidth() + gap;
|
||||
colorB = new ColorButton(gui, ID_COLOR_BUTTON, x, y);
|
||||
colorB.setColorIndex(itemConduit.getExtractionSignalColor(gui.getDir()).ordinal());
|
||||
colorB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.sigCol"));
|
||||
|
||||
x += gap + colorB.getWidth();
|
||||
roundRobinB = new ToggleButton(gui, ID_ROUND_ROBIN, x, y, IconEIO.ROUND_ROBIN_OFF, IconEIO.ROUND_ROBIN);
|
||||
roundRobinB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinEnabled"));
|
||||
roundRobinB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinDisabled"));
|
||||
roundRobinB.setPaintSelectedBorder(false);
|
||||
|
||||
x += gap + roundRobinB.getWidth();
|
||||
loopB = new ToggleButton(gui, ID_LOOP, x, y, IconEIO.LOOP_OFF, IconEIO.LOOP);
|
||||
loopB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.selfFeedEnabled"));
|
||||
loopB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.selfFeedDisabled"));
|
||||
loopB.setPaintSelectedBorder(false);
|
||||
|
||||
priorityTooltip = new GuiToolTip(new Rectangle(priLeft + 9, y, priWidth, 16), EnderIO.lang.localize("gui.conduit.item.priority"));
|
||||
|
||||
x = priLeft + priWidth + 9;
|
||||
priUpB = MultiIconButton.createAddButton(gui, ID_PRIORITY_UP, x, y);
|
||||
priDownB = MultiIconButton.createMinusButton(gui, ID_PRIORITY_DOWN, x, y+8);
|
||||
priDownB = MultiIconButton.createMinusButton(gui, ID_PRIORITY_DOWN, x, y + 8);
|
||||
|
||||
gui.getContainer().addFilterListener(new FilterChangeListener() {
|
||||
FilterChangeListener fcl = new FilterChangeListener() {
|
||||
@Override
|
||||
public void onFilterChanged() {
|
||||
filtersChanged();
|
||||
if (insertFilterGui != null) {
|
||||
insertFilterGui.deactivate();
|
||||
insertFilterGui = null;
|
||||
}
|
||||
if (extractFilterGui != null) {
|
||||
extractFilterGui.deactivate();
|
||||
extractFilterGui = null;
|
||||
}
|
||||
gui.clearGhostSlots();
|
||||
IItemFilter filt = gui.getContainer().getFilter(false);
|
||||
if (filt != null) {
|
||||
insertFilterGui = filt.getGui(gui, gui.getContainer().getInv().itemConduit, false);
|
||||
}
|
||||
filt = gui.getContainer().getFilter(true);
|
||||
if (filt != null) {
|
||||
extractFilterGui = filt.getGui(gui, gui.getContainer().getInv().itemConduit, true);
|
||||
}
|
||||
if (insertFilterGui != null) {
|
||||
insertFilterGui.updateButtons();
|
||||
}
|
||||
if (extractFilterGui != null) {
|
||||
extractFilterGui.updateButtons();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private String getHeading() {
|
||||
ConnectionMode mode = con.getConnectionMode(gui.getDir());
|
||||
if(mode == ConnectionMode.DISABLED) {
|
||||
return "";
|
||||
}
|
||||
if(mode == ConnectionMode.OUTPUT) {
|
||||
return outputHeading;
|
||||
}
|
||||
if(mode == ConnectionMode.INPUT || inOutShowIn) {
|
||||
return inputHeading;
|
||||
}
|
||||
return outputHeading;
|
||||
};
|
||||
fcl.onFilterChanged();
|
||||
gui.getContainer().addFilterListener(fcl);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initCustomOptions() {
|
||||
gui.getContainer().setInoutSlotsVisible(true, true);
|
||||
gui.getContainer().createGhostSlots(gui.getGhostSlots());
|
||||
gui.getContainer().setInventorySlotsVisible(true);
|
||||
updateGuiVisibility();
|
||||
}
|
||||
|
||||
private void updateGuiVisibility() {
|
||||
deactivate();
|
||||
createFilterGUI();
|
||||
updateButtons();
|
||||
}
|
||||
|
||||
private void createFilterGUI() {
|
||||
boolean showInput = false;
|
||||
boolean showOutput = false;
|
||||
|
||||
ConnectionMode mode = con.getConnectionMode(gui.getDir());
|
||||
if(mode == ConnectionMode.INPUT) {
|
||||
showInput = true;
|
||||
} else if(mode == ConnectionMode.OUTPUT) {
|
||||
showOutput = true;
|
||||
} else if(mode == ConnectionMode.IN_OUT) {
|
||||
nextFilterB.onGuiInit();
|
||||
showInput = inOutShowIn;
|
||||
showOutput = !inOutShowIn;
|
||||
}
|
||||
|
||||
if(!showInput && !showOutput) {
|
||||
filterGui = null;
|
||||
activeFilter = null;
|
||||
} else if(showInput) {
|
||||
activeFilter = itemConduit.getInputFilter(gui.getDir());
|
||||
gui.getContainer().setInventorySlotsVisible(true);
|
||||
gui.getContainer().setInoutSlotsVisible(true, false);
|
||||
if(activeFilter != null) {
|
||||
filterGui = activeFilter.getGui(gui,itemConduit,true);
|
||||
}
|
||||
} else if(showOutput) {
|
||||
activeFilter = itemConduit.getOutputFilter(gui.getDir());
|
||||
gui.getContainer().setInoutSlotsVisible(false, true);
|
||||
gui.getContainer().setInventorySlotsVisible(true);
|
||||
if(activeFilter != null) {
|
||||
filterGui = activeFilter.getGui(gui,itemConduit,false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void filtersChanged() {
|
||||
deactiveFilterGUI();
|
||||
createFilterGUI();
|
||||
|
||||
if(filterGui != null) {
|
||||
filterGui.updateButtons();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateButtons() {
|
||||
rsB.onGuiInit();
|
||||
rsB.setMode(itemConduit.getExtractionRedstoneMode(gui.getDir()));
|
||||
|
||||
ConnectionMode mode = con.getConnectionMode(gui.getDir());
|
||||
if(mode == ConnectionMode.DISABLED) {
|
||||
return;
|
||||
}
|
||||
boolean outputActive = (mode == ConnectionMode.IN_OUT && !inOutShowIn) || (mode == ConnectionMode.OUTPUT);
|
||||
loopB.onGuiInit();
|
||||
loopB.setSelected(itemConduit.isSelfFeedEnabled(gui.getDir()));
|
||||
roundRobinB.onGuiInit();
|
||||
roundRobinB.setSelected(itemConduit.isRoundRobinEnabled(gui.getDir()));
|
||||
|
||||
if(!outputActive) {
|
||||
priUpB.onGuiInit();
|
||||
priDownB.onGuiInit();
|
||||
|
||||
rsB.onGuiInit();
|
||||
rsB.setMode(itemConduit.getExtractionRedstoneMode(gui.getDir()));
|
||||
insertChannelB.onGuiInit();
|
||||
insertChannelB.setColorIndex(itemConduit.getOutputColor(gui.getDir()).ordinal());
|
||||
extractChannelB.onGuiInit();
|
||||
extractChannelB.setColorIndex(itemConduit.getInputColor(gui.getDir()).ordinal());
|
||||
|
||||
colorB.onGuiInit();
|
||||
colorB.setColorIndex(itemConduit.getExtractionSignalColor(gui.getDir()).ordinal());
|
||||
}
|
||||
|
||||
gui.addToolTip(filterUpgradeTooltip);
|
||||
gui.addToolTip(functionUpgradeTooltip);
|
||||
|
||||
if(mode == ConnectionMode.IN_OUT && !outputActive) {
|
||||
loopB.onGuiInit();
|
||||
loopB.setSelected(itemConduit.isSelfFeedEnabled(gui.getDir()));
|
||||
}
|
||||
|
||||
if((mode == ConnectionMode.IN_OUT && !outputActive) || mode == ConnectionMode.INPUT) {
|
||||
roundRobinB.onGuiInit();
|
||||
roundRobinB.setSelected(itemConduit.isRoundRobinEnabled(gui.getDir()));
|
||||
gui.addToolTip(speedUpgradeTooltip);
|
||||
}
|
||||
|
||||
if((mode == ConnectionMode.IN_OUT && outputActive) || mode == ConnectionMode.OUTPUT) {
|
||||
priUpB.onGuiInit();
|
||||
priDownB.onGuiInit();
|
||||
gui.addToolTip(priorityTooltip);
|
||||
}
|
||||
|
||||
int chanCol;
|
||||
if(!outputActive) {
|
||||
chanCol = itemConduit.getInputColor(gui.getDir()).ordinal();
|
||||
} else {
|
||||
chanCol = itemConduit.getOutputColor(gui.getDir()).ordinal();
|
||||
}
|
||||
channelB.onGuiInit();
|
||||
channelB.setColorIndex(chanCol);
|
||||
|
||||
if(filterGui != null) {
|
||||
filterGui.updateButtons();
|
||||
}
|
||||
if (insertFilterGui != null) insertFilterGui.updateButtons();
|
||||
if (extractFilterGui != null) extractFilterGui.updateButtons();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(GuiButton guiButton) {
|
||||
public void actionPerformed(@Nonnull GuiButton guiButton) {
|
||||
super.actionPerformed(guiButton);
|
||||
if(guiButton.id == NEXT_FILTER_ID) {
|
||||
inOutShowIn = !inOutShowIn;
|
||||
updateGuiVisibility();
|
||||
} else if(guiButton.id == ID_COLOR_BUTTON) {
|
||||
itemConduit.setExtractionSignalColor(gui.getDir(), DyeColor.values()[colorB.getColorIndex()]);
|
||||
if(guiButton.id == ID_COLOR_BUTTON) {
|
||||
itemConduit.setExtractionSignalColor(gui.getDir(), DyeColor.fromIndex(colorB.getColorIndex()));
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketExtractMode(itemConduit, gui.getDir()));
|
||||
return;
|
||||
} else if(guiButton.id == ID_LOOP) {
|
||||
itemConduit.setSelfFeedEnabled(gui.getDir(), !itemConduit.isSelfFeedEnabled(gui.getDir()));
|
||||
sendFilterChange();
|
||||
} else if(guiButton.id == ID_ROUND_ROBIN) {
|
||||
itemConduit.setRoundRobinEnabled(gui.getDir(), !itemConduit.isRoundRobinEnabled(gui.getDir()));
|
||||
sendFilterChange();
|
||||
} else if(guiButton.id == ID_PRIORITY_UP) {
|
||||
itemConduit.setOutputPriority(gui.getDir(), itemConduit.getOutputPriority(gui.getDir()) + 1);
|
||||
sendFilterChange();
|
||||
} else if(guiButton.id == ID_PRIORITY_DOWN) {
|
||||
itemConduit.setOutputPriority(gui.getDir(), itemConduit.getOutputPriority(gui.getDir()) - 1);
|
||||
sendFilterChange();
|
||||
} else if(guiButton.id == ID_CHANNEL) {
|
||||
|
||||
DyeColor col = DyeColor.values()[channelB.getColorIndex()];
|
||||
if(isInputVisible()) {
|
||||
itemConduit.setInputColor(gui.getDir(), col);
|
||||
} else {
|
||||
itemConduit.setOutputColor(gui.getDir(), col);
|
||||
}
|
||||
sendFilterChange();
|
||||
}
|
||||
|
||||
if(filterGui != null) {
|
||||
filterGui.actionPerformed(guiButton);
|
||||
} else if(guiButton.id == ID_INSERT_CHANNEL) {
|
||||
DyeColor col = DyeColor.fromIndex(insertChannelB.getColorIndex());
|
||||
itemConduit.setOutputColor(gui.getDir(), col);
|
||||
} else if(guiButton.id == ID_EXTRACT_CHANNEL) {
|
||||
DyeColor col = DyeColor.fromIndex(extractChannelB.getColorIndex());
|
||||
itemConduit.setInputColor(gui.getDir(), col);
|
||||
}
|
||||
if (insertFilterGui != null) insertFilterGui.actionPerformed(guiButton);
|
||||
if (extractFilterGui != null) extractFilterGui.actionPerformed(guiButton);
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketItemConduitFilter(itemConduit, gui.getDir()));
|
||||
}
|
||||
|
||||
private void sendFilterChange() {
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketItemConduitFilter(itemConduit, gui.getDir()));
|
||||
@Override
|
||||
protected void connectionModeChanged(@Nonnull ConnectionMode mode) {
|
||||
super.connectionModeChanged(mode);
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketExtractMode(itemConduit, gui.getDir()));
|
||||
updateGuiVisibility();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderCustomOptions(int top1, float par1, int par2, int par3) {
|
||||
FontRenderer fr = gui.getFontRenderer();
|
||||
|
||||
GL11.glColor3f(1, 1, 1);
|
||||
IconEIO.map.render(EnderWidget.BUTTON_DOWN, left + priLeft, top1 - 5, priWidth, 16, 0, true);
|
||||
String str = itemConduit.getOutputPriority(gui.getDir()) + "";
|
||||
int sw = fr.getStringWidth(str);
|
||||
|
||||
String priority = EnderIO.lang.localize("gui.conduit.item.priority");
|
||||
fr.drawString(priority, left + 12, top1 + 25, ColorUtil.getRGB(Color.black));
|
||||
fr.drawString(str, left + priLeft + priWidth - sw - gap, top1 + 25, ColorUtil.getRGB(Color.black));
|
||||
|
||||
if (insertFilterGui != null) insertFilterGui.renderCustomOptions(top1, par1, par2, par3);
|
||||
if (extractFilterGui != null) extractFilterGui.renderCustomOptions(top1, par1, par2, par3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseClicked(int x, int y, int par3) {
|
||||
super.mouseClicked(x, y, par3);
|
||||
if(filterGui != null) {
|
||||
filterGui.mouseClicked(x, y, par3);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isInputVisible() {
|
||||
ConnectionMode mode = con.getConnectionMode(gui.getDir());
|
||||
return (mode == ConnectionMode.IN_OUT && inOutShowIn) || (mode == ConnectionMode.INPUT);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void connectionModeChanged(ConnectionMode conectionMode) {
|
||||
super.connectionModeChanged(conectionMode);
|
||||
updateGuiVisibility();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void renderCustomOptions(int top, float par1, int par2, int par3) {
|
||||
ConnectionMode mode = con.getConnectionMode(gui.getDir());
|
||||
if(mode == ConnectionMode.DISABLED) {
|
||||
return;
|
||||
}
|
||||
|
||||
gui.bindGuiTexture(1);
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft(), gui.getGuiTop() + 55, 0, 55, gui.getXSize(), 145);
|
||||
|
||||
FontRenderer fr = gui.getFontRenderer();
|
||||
String heading = getHeading();
|
||||
int x = 0;
|
||||
int rgb = ColorUtil.getRGB(Color.darkGray);
|
||||
fr.drawString(heading, left + x, top, rgb);
|
||||
|
||||
boolean outputActive = (mode == ConnectionMode.IN_OUT && !inOutShowIn) || (mode == ConnectionMode.OUTPUT);
|
||||
if(outputActive) {
|
||||
GL11.glColor3f(1, 1, 1);
|
||||
IconEIO.map.render(EnderWidget.BUTTON_DOWN, left + priLeft, top - 5, priWidth, 16, 0, true);
|
||||
String str = itemConduit.getOutputPriority(gui.getDir()) + "";
|
||||
int sw = fr.getStringWidth(str);
|
||||
fr.drawString(str, left + priLeft + priWidth - sw - gap, top, ColorUtil.getRGB(Color.black));
|
||||
} else {
|
||||
//draw speed upgrade slot
|
||||
GL11.glColor3f(1, 1, 1);
|
||||
gui.bindGuiTexture(1);
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + 9, gui.getGuiTop() + 46 +18 +18, 94, 238, 18, 18);
|
||||
}
|
||||
|
||||
//filter upgrade slot
|
||||
GL11.glColor3f(1, 1, 1);
|
||||
gui.bindGuiTexture(1);
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + 9, gui.getGuiTop() + 46, 94, 220, 18, 18);
|
||||
|
||||
//function upgrade slot
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + 9, gui.getGuiTop() + 46 + 18, 112, 238, 18, 18);
|
||||
|
||||
if(filterGui != null) {
|
||||
filterGui.renderCustomOptions(top, par1, par2, par3);
|
||||
}
|
||||
if (insertFilterGui != null) insertFilterGui.mouseClicked(x, y, par3);
|
||||
if (extractFilterGui != null) extractFilterGui.mouseClicked(x, y, par3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deactivate() {
|
||||
gui.getContainer().setInventorySlotsVisible(false);
|
||||
super.deactivate();
|
||||
gui.getContainer().setInoutSlotsVisible(false, false);
|
||||
rsB.detach();
|
||||
colorB.detach();
|
||||
roundRobinB.detach();
|
||||
loopB.detach();
|
||||
nextFilterB.detach();
|
||||
priUpB.detach();
|
||||
priDownB.detach();
|
||||
gui.removeToolTip(priorityTooltip);
|
||||
gui.removeToolTip(speedUpgradeTooltip);
|
||||
gui.removeToolTip(functionUpgradeTooltip);
|
||||
gui.removeToolTip(filterUpgradeTooltip);
|
||||
channelB.detach();
|
||||
deactiveFilterGUI();
|
||||
insertChannelB.detach();
|
||||
extractChannelB.detach();
|
||||
gui.getContainer().setInventorySlotsVisible(false);
|
||||
if (insertFilterGui != null) insertFilterGui.deactivate();
|
||||
if (extractFilterGui != null) extractFilterGui.deactivate();
|
||||
}
|
||||
|
||||
private void deactiveFilterGUI() {
|
||||
if(filterGui != null) {
|
||||
filterGui.deactivate();
|
||||
filterGui = null;
|
||||
}
|
||||
gui.clearGhostSlots();
|
||||
@Override
|
||||
protected boolean hasFilters() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean hasUpgrades() {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -27,13 +27,13 @@ public class ModItemFilterGui implements IItemFilterGui {
|
||||
|
||||
private final IItemConduit itemConduit;
|
||||
private final GuiExternalConnection gui;
|
||||
|
||||
|
||||
boolean isInput;
|
||||
|
||||
private final ModItemFilter filter;
|
||||
|
||||
|
||||
private final Rectangle[] inputBounds;
|
||||
|
||||
|
||||
private final IconButton[] deleteButs;
|
||||
|
||||
private final IconButton whiteListB;
|
||||
@@ -42,47 +42,45 @@ public class ModItemFilterGui implements IItemFilterGui {
|
||||
private final int tfWidth;
|
||||
private final int tfTextureX;
|
||||
private final int tfTextureY;
|
||||
|
||||
|
||||
public ModItemFilterGui(GuiExternalConnection gui, IItemConduit itemConduit, boolean isInput) {
|
||||
this.gui = gui;
|
||||
this.itemConduit = itemConduit;
|
||||
this.isInput = isInput;
|
||||
|
||||
|
||||
int butLeft = isInput ? 5 : 106;
|
||||
int x = butLeft;
|
||||
int y = 96;
|
||||
|
||||
if(isInput) {
|
||||
filter = (ModItemFilter) itemConduit.getInputFilter(gui.getDir());
|
||||
inputOffsetX = 50;
|
||||
tfWidth = 96;
|
||||
tfTextureX = 120;
|
||||
tfTextureY = 214;
|
||||
} else {
|
||||
filter = (ModItemFilter) itemConduit.getOutputFilter(gui.getDir());
|
||||
inputOffsetX = 32;
|
||||
tfWidth = 114;
|
||||
tfTextureX = 120;
|
||||
tfTextureY = 238;
|
||||
}
|
||||
|
||||
|
||||
inputOffsetX = x;
|
||||
tfWidth = 52;
|
||||
tfTextureX = 120;
|
||||
tfTextureY = 214;
|
||||
|
||||
inputBounds = new Rectangle[] {
|
||||
new Rectangle(inputOffsetX,47,16,16),
|
||||
new Rectangle(inputOffsetX,68,16,16),
|
||||
new Rectangle(inputOffsetX,89,16,16)
|
||||
new Rectangle(inputOffsetX,y,16,16),
|
||||
new Rectangle(inputOffsetX,y + 18,16,16),
|
||||
new Rectangle(inputOffsetX,y + 36,16,16)
|
||||
};
|
||||
|
||||
deleteButs = new IconButton[inputBounds.length];
|
||||
|
||||
deleteButs = new IconButton[inputBounds.length];
|
||||
for(int i=0; i < deleteButs.length; i++) {
|
||||
Rectangle r = inputBounds[i];
|
||||
IconButton but = new IconButton(gui, GuiExternalConnection.nextButtonId(), r.x + 19, r.y, IconEIO.MINUS);
|
||||
deleteButs[i] = but;
|
||||
}
|
||||
|
||||
whiteListB = new IconButton(gui, -1, inputOffsetX - 19, 89, IconEIO.FILTER_WHITELIST);
|
||||
|
||||
whiteListB = new IconButton(gui, -1, x + 64, y - 25, IconEIO.FILTER_WHITELIST);
|
||||
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deactivate() {
|
||||
public void deactivate() {
|
||||
for(IconButton but : deleteButs) {
|
||||
but.detach();
|
||||
}
|
||||
@@ -109,7 +107,7 @@ public class ModItemFilterGui implements IItemFilterGui {
|
||||
public void actionPerformed(GuiButton guiButton) {
|
||||
for(int i=0; i < deleteButs.length; i++) {
|
||||
IconButton but = deleteButs[i];
|
||||
if(but.id == guiButton.id) {
|
||||
if(but == guiButton) {
|
||||
setMod(i, null);
|
||||
return;
|
||||
}
|
||||
@@ -120,7 +118,7 @@ public class ModItemFilterGui implements IItemFilterGui {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderCustomOptions(int top, float par1, int par2, int par3) {
|
||||
public void renderCustomOptions(int top, float par1, int par2, int par3) {
|
||||
GL11.glColor3f(1, 1, 1);
|
||||
gui.bindGuiTexture();
|
||||
for(Rectangle r : inputBounds) {
|
||||
@@ -128,8 +126,8 @@ public class ModItemFilterGui implements IItemFilterGui {
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + r.x - 1, gui.getGuiTop() + r.y - 1, 24, 214, 18, 18);
|
||||
//text box
|
||||
gui.drawTexturedModalRect(gui.getGuiLeft() + r.x + 38, gui.getGuiTop() + r.y - 1, tfTextureX, tfTextureY, tfWidth, 18);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
FontRenderer fr = Minecraft.getMinecraft().fontRenderer;
|
||||
for(int i=0;i<inputBounds.length;i++) {
|
||||
String mod = filter.getModAt(i);
|
||||
@@ -140,26 +138,26 @@ public class ModItemFilterGui implements IItemFilterGui {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void mouseClicked(int x, int y, int par3) {
|
||||
ItemStack st = Minecraft.getMinecraft().thePlayer.inventory.getItemStack();
|
||||
if(st == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
for(int i=0;i<inputBounds.length;i++) {
|
||||
Rectangle bound = inputBounds[i];
|
||||
if(bound.contains(x,y)) {
|
||||
setMod(i, st);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setMod(int i, ItemStack st) {
|
||||
String mod = filter.setMod(i, st);
|
||||
String mod = filter.setMod(i, st);
|
||||
PacketHandler.INSTANCE.sendToServer(new PacketModItemFilter(itemConduit, gui.getDir(),isInput,i, mod));
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void toggleBlacklist() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package crazypants.enderio.conduit.gui.item;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
|
||||
import com.enderio.core.client.gui.button.ToggleButton;
|
||||
@@ -42,11 +43,10 @@ public class PowerItemFilterGui implements IItemFilterGui {
|
||||
filter = (PowerItemFilter) itemConduit.getOutputFilter(gui.getDir());
|
||||
}
|
||||
|
||||
int butLeft = 37;
|
||||
int butLeft = isInput ? 5 : 106;
|
||||
int x = butLeft;
|
||||
int y = 68;
|
||||
int y = 96 + 24;
|
||||
|
||||
x += 20;
|
||||
stickyB = new ToggleButton(gui, ID_STICKY, x, y, IconEIO.FILTER_STICKY_OFF, IconEIO.FILTER_STICKY);
|
||||
String[] lines = EnderIO.lang.localizeList("gui.conduit.item.stickyEnabled");
|
||||
stickyB.setSelectedToolTip(lines);
|
||||
@@ -59,6 +59,20 @@ public class PowerItemFilterGui implements IItemFilterGui {
|
||||
|
||||
@Override
|
||||
public void mouseClicked(int x, int y, int par3) {
|
||||
x += gui.getGuiLeft();
|
||||
y += gui.getGuiTop();
|
||||
if(par3 == 1) {
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
if (modeB.mousePressed(mc, x, y)) {
|
||||
modeB.func_146113_a(mc.getSoundHandler());
|
||||
filter.setMode(filter.getMode().prev());
|
||||
sendFilterChange();
|
||||
} else if (levelB.mousePressed(mc, x, y)) {
|
||||
levelB.func_146113_a(mc.getSoundHandler());
|
||||
filter.setLevel((filter.getLevel() + PowerItemFilter.MAX_LEVEL) % (PowerItemFilter.MAX_LEVEL + 1));
|
||||
sendFilterChange();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -68,8 +82,8 @@ public class PowerItemFilterGui implements IItemFilterGui {
|
||||
stickyB.setSelected(filter.isSticky());
|
||||
}
|
||||
|
||||
int x0 = gui.getGuiLeft() + 80;
|
||||
int y0 = gui.getGuiTop() + 65;
|
||||
int x0 = gui.getGuiLeft() + (isInput ? 5 : 106);
|
||||
int y0 = gui.getGuiTop() + 96;
|
||||
int x1 = x0 + 45;
|
||||
|
||||
modeB.xPosition = x0;
|
||||
@@ -95,13 +109,13 @@ public class PowerItemFilterGui implements IItemFilterGui {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(GuiButton guiButton) {
|
||||
if(guiButton.id == ID_STICKY) {
|
||||
if(guiButton == stickyB) {
|
||||
filter.setSticky(stickyB.isSelected());
|
||||
sendFilterChange();
|
||||
} else if(guiButton.id == ID_MORE) {
|
||||
} else if(guiButton == modeB) {
|
||||
filter.setMode(filter.getMode().next());
|
||||
sendFilterChange();
|
||||
} else if(guiButton.id == ID_LEVEL) {
|
||||
} else if(guiButton == levelB) {
|
||||
filter.setLevel((filter.getLevel() + 1) % (PowerItemFilter.MAX_LEVEL + 1));
|
||||
sendFilterChange();
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ public class ExistingItemFilter implements IItemFilter {
|
||||
public int getSlotCount() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
public void setSnapshot(NetworkedInventory ni) {
|
||||
snapshot = new ArrayList<ItemStack>();
|
||||
mergeSnapshot(ni);
|
||||
@@ -201,7 +201,7 @@ public class ExistingItemFilter implements IItemFilter {
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound nbtRoot) {
|
||||
readSettingsFromNBT(nbtRoot);
|
||||
|
||||
|
||||
if(nbtRoot.hasKey("snapshot")) {
|
||||
snapshot = new ArrayList<ItemStack>();
|
||||
NBTTagList itemList = (NBTTagList)nbtRoot.getTag("snapshot");
|
||||
@@ -212,7 +212,7 @@ public class ExistingItemFilter implements IItemFilter {
|
||||
snapshot.add(itemStack);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
snapshot = null;
|
||||
}
|
||||
@@ -229,9 +229,9 @@ public class ExistingItemFilter implements IItemFilter {
|
||||
@Override
|
||||
public void writeToNBT(NBTTagCompound nbtRoot) {
|
||||
writeSettingToNBT(nbtRoot);
|
||||
|
||||
|
||||
if(snapshot != null) {
|
||||
|
||||
|
||||
NBTTagList itemList = new NBTTagList();
|
||||
for (ItemStack item : snapshot) {
|
||||
if(item != null) {
|
||||
@@ -241,7 +241,7 @@ public class ExistingItemFilter implements IItemFilter {
|
||||
}
|
||||
}
|
||||
nbtRoot.setTag("snapshot", itemList);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -289,4 +289,8 @@ public class ExistingItemFilter implements IItemFilter {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName() {
|
||||
return "gui.existing_item_filter";
|
||||
}
|
||||
}
|
||||
@@ -47,4 +47,8 @@ public interface IItemFilter {
|
||||
|
||||
int getSlotCount();
|
||||
|
||||
default String getUnlocalizedName() {
|
||||
return "gui.basic_item_filter";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -287,7 +287,7 @@ public class ItemFilter implements IInventory, IItemFilter {
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IItemFilterGui getGui(GuiExternalConnection gui, IItemConduit itemConduit, boolean isInput) {
|
||||
ItemConduitFilterContainer cont = new ItemConduitFilterContainer(itemConduit, gui.getDir(), isInput);
|
||||
BasicItemFilterGui basicItemFilterGui = new BasicItemFilterGui(gui, cont, !isInput);
|
||||
BasicItemFilterGui basicItemFilterGui = new BasicItemFilterGui(gui, cont, !isInput, isInput);
|
||||
basicItemFilterGui.createFilterSlots();
|
||||
return basicItemFilterGui;
|
||||
}
|
||||
@@ -452,6 +452,11 @@ public class ItemFilter implements IInventory, IItemFilter {
|
||||
return "ItemFilter [isAdvanced=" + isAdvanced + ", items=" + Arrays.toString(items) + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName() {
|
||||
return isAdvanced ? "enderio.gui.advanced_item_filter" : "gui.basic_item_filter";
|
||||
}
|
||||
|
||||
class ItemFilterGhostSlot extends GhostSlot {
|
||||
private final int slot;
|
||||
private final Runnable cb;
|
||||
|
||||
@@ -32,7 +32,7 @@ public class ItemFilterBig extends ItemFilter {
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IItemFilterGui getGui(GuiExternalConnection gui, IItemConduit itemConduit, boolean isInput) {
|
||||
ItemConduitFilterContainer cont = new ItemConduitFilterContainer(itemConduit, gui.getDir(), isInput);
|
||||
BigItemFilterGui bigItemFilterGui = new BigItemFilterGui(gui, cont, !isInput);
|
||||
BigItemFilterGui bigItemFilterGui = new BigItemFilterGui(gui, cont, !isInput, isInput);
|
||||
bigItemFilterGui.createFilterSlots();
|
||||
return bigItemFilterGui;
|
||||
}
|
||||
@@ -46,7 +46,7 @@ public class ItemFilterBig extends ItemFilter {
|
||||
for (int row = 0; row < numRows; ++row) {
|
||||
for (int col = 0; col < 8; ++col) {
|
||||
int x = leftX + col * 18;
|
||||
int y = topY + row * 20;
|
||||
int y = topY + row * 18;
|
||||
slots.add(new ItemFilterGhostSlot(index, x, y, cb));
|
||||
index++;
|
||||
}
|
||||
@@ -66,4 +66,8 @@ public class ItemFilterBig extends ItemFilter {
|
||||
return "Big"+super.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName() {
|
||||
return isAdvanced() ? "gui.big_advanced_item_filter" : "gui.big_item_filter";
|
||||
}
|
||||
}
|
||||
@@ -163,4 +163,8 @@ public class ModItemFilter implements IItemFilter {
|
||||
readFromNBT(tag);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName() {
|
||||
return "gui.mod_item_filter";
|
||||
}
|
||||
}
|
||||
@@ -36,6 +36,11 @@ public class PowerItemFilter implements IItemFilter {
|
||||
CmpMode[] values = values();
|
||||
return values[(ordinal() + 1) % values.length];
|
||||
}
|
||||
|
||||
public CmpMode prev() {
|
||||
CmpMode[] values = values();
|
||||
return values[(ordinal() - 1 + values.length) % values.length];
|
||||
}
|
||||
}
|
||||
|
||||
public static final int MAX_LEVEL = 4;
|
||||
@@ -150,4 +155,9 @@ public class PowerItemFilter implements IItemFilter {
|
||||
NBTTagCompound settingsTag = NetworkUtil.readNBTTagCompound(buf);
|
||||
readSettingsFromNBT(settingsTag);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName() {
|
||||
return "gui.power_item_filter";
|
||||
}
|
||||
}
|
||||
@@ -161,6 +161,7 @@ public final class Config {
|
||||
"Thaumcraft:blockWarded"
|
||||
};
|
||||
public static float travelAnchorZoomScale = 0.2f;
|
||||
public static boolean travelStaffSearchOptimize = true;
|
||||
|
||||
public static int enderIoRange = 8;
|
||||
public static boolean enderIoMeAccessEnabled = true;
|
||||
@@ -386,6 +387,13 @@ public final class Config {
|
||||
public static int poweredSpawnerLevelOnePowerPerTickRF = 160;
|
||||
public static int poweredSpawnerLevelTwoPowerPerTickRF = 500;
|
||||
public static int poweredSpawnerLevelThreePowerPerTickRF = 1500;
|
||||
public static int poweredSpawnerLevelFourPowerPerTickRF = 4500;
|
||||
public static int poweredSpawnerLevelFivePowerPerTickRF = 2000;
|
||||
public static int poweredSpawnerLevelSixPowerPerTickRF = 1000;
|
||||
public static int poweredSpawnerLevelSevenPowerPerTickRF = 500;
|
||||
public static int poweredSpawnerLevelEightPowerPerTickRF = 160;
|
||||
public static int poweredSpawnerLevelNinePowerPerTickRF = 500;
|
||||
public static int poweredSpawnerLevelTenPowerPerTickRF = 1500;
|
||||
public static int poweredSpawnerMaxPlayerDistance = 0;
|
||||
public static int poweredSpawnerDespawnTimeSeconds = 120;
|
||||
public static int poweredSpawnerSpawnCount = 4;
|
||||
@@ -439,6 +447,13 @@ public final class Config {
|
||||
public static int soulBinderLevelOnePowerPerTickRF = 500;
|
||||
public static int soulBinderLevelTwoPowerPerTickRF = 1000;
|
||||
public static int soulBinderLevelThreePowerPerTickRF = 2000;
|
||||
public static int soulBinderLevelFourPowerPerTickRF = 4000;
|
||||
public static int soulBinderLevelFivePowerPerTickRF = 8000;
|
||||
public static int soulBinderLevelSixPowerPerTickRF = 16000;
|
||||
public static int soulBinderLevelSevenPowerPerTickRF = 32000;
|
||||
public static int soulBinderLevelEightPowerPerTickRF = 500;
|
||||
public static int soulBinderLevelNinePowerPerTickRF = 1000;
|
||||
public static int soulBinderLevelTenPowerPerTickRF = 2000;
|
||||
public static int soulBinderBrokenSpawnerRF = 2500000;
|
||||
public static int soulBinderBrokenSpawnerLevels = 15;
|
||||
public static int soulBinderReanimationRF = 100000;
|
||||
@@ -463,6 +478,13 @@ public final class Config {
|
||||
public static int sliceAndSpliceLevelOnePowerPerTickRF = 80;
|
||||
public static int sliceAndSpliceLevelTwoPowerPerTickRF = 160;
|
||||
public static int sliceAndSpliceLevelThreePowerPerTickRF = 320;
|
||||
public static int sliceAndSpliceLevelFourPowerPerTickRF = 640;
|
||||
public static int sliceAndSpliceLevelFivePowerPerTickRF = 1280;
|
||||
public static int sliceAndSpliceLevelSixPowerPerTickRF = 2560;
|
||||
public static int sliceAndSpliceLevelSevenPowerPerTickRF = 5120;
|
||||
public static int sliceAndSpliceLevelEightPowerPerTickRF = 80;
|
||||
public static int sliceAndSpliceLevelNinePowerPerTickRF = 160;
|
||||
public static int sliceAndSpliceLevelTenPowerPerTickRF = 320;
|
||||
|
||||
public static boolean soulBinderRequiresEndermanSkull = true;
|
||||
|
||||
@@ -849,6 +871,11 @@ public final class Config {
|
||||
"Lists the blocks that cannot be teleported through in the form 'modID:blockName'");
|
||||
travelAnchorZoomScale = config.getFloat("travelAnchorZoomScale", sectionStaff.name, travelAnchorZoomScale, 0, 1,
|
||||
"Set the max zoomed size of a travel anchor as an aprox. percentage of screen height");
|
||||
travelStaffSearchOptimize = config.get(sectionStaff.name, "travelStaffSearchOptimize", travelStaffSearchOptimize,
|
||||
"If set to true: blinking by travel staff has reduced search branch. " +
|
||||
"You can now teleport onto the roof. " +
|
||||
"This config is experimental, so if you encounter any strange behavior, please report to GTNH developer.")
|
||||
.getBoolean(travelStaffSearchOptimize);
|
||||
|
||||
|
||||
enderIoRange = config.get(sectionEfficiency.name, "enderIoRange", enderIoRange,
|
||||
@@ -1231,6 +1258,27 @@ public final class Config {
|
||||
poweredSpawnerLevelThreePowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelThreePowerPerTickRF",
|
||||
poweredSpawnerLevelThreePowerPerTickRF,
|
||||
"RF per tick for a level 3 spawner").getInt(poweredSpawnerLevelThreePowerPerTickRF);
|
||||
poweredSpawnerLevelFourPowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelFourPowerPerTickRF",
|
||||
poweredSpawnerLevelFourPowerPerTickRF,
|
||||
"RF per tick for a level 4 spawner").getInt(poweredSpawnerLevelFourPowerPerTickRF);
|
||||
poweredSpawnerLevelFivePowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelFivePowerPerTickRF",
|
||||
poweredSpawnerLevelFivePowerPerTickRF,
|
||||
"RF per tick for a level 5 spawner").getInt(poweredSpawnerLevelFivePowerPerTickRF);
|
||||
poweredSpawnerLevelSixPowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelSixPowerPerTickRF",
|
||||
poweredSpawnerLevelSixPowerPerTickRF,
|
||||
"RF per tick for a level 6 spawner").getInt(poweredSpawnerLevelSixPowerPerTickRF);
|
||||
poweredSpawnerLevelSevenPowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelSevenPowerPerTickRF",
|
||||
poweredSpawnerLevelSevenPowerPerTickRF,
|
||||
"RF per tick for a level 7 spawner").getInt(poweredSpawnerLevelSevenPowerPerTickRF);
|
||||
poweredSpawnerLevelEightPowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelEightPowerPerTickRF",
|
||||
poweredSpawnerLevelEightPowerPerTickRF,
|
||||
"RF per tick for a level 1 spawner").getInt(poweredSpawnerLevelEightPowerPerTickRF);
|
||||
poweredSpawnerLevelNinePowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelNinePowerPerTickRF",
|
||||
poweredSpawnerLevelNinePowerPerTickRF,
|
||||
"RF per tick for a level 2 spawner").getInt(poweredSpawnerLevelNinePowerPerTickRF);
|
||||
poweredSpawnerLevelTenPowerPerTickRF = config.get(sectionSpawner.name, "poweredSpawnerLevelTenPowerPerTickRF",
|
||||
poweredSpawnerLevelTenPowerPerTickRF,
|
||||
"RF per tick for a level 3 spawner").getInt(poweredSpawnerLevelTenPowerPerTickRF);
|
||||
poweredSpawnerMaxPlayerDistance = config.get(sectionSpawner.name, "poweredSpawnerMaxPlayerDistance", poweredSpawnerMaxPlayerDistance,
|
||||
"Max distance of the closest player for the spawner to be active. A zero value will remove the player check").getInt(poweredSpawnerMaxPlayerDistance);
|
||||
poweredSpawnerDespawnTimeSeconds = config.get(sectionSpawner.name, "poweredSpawnerDespawnTimeSeconds" , poweredSpawnerDespawnTimeSeconds,
|
||||
@@ -1303,9 +1351,23 @@ public final class Config {
|
||||
soulBinderLevelOnePowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelOnePowerPerTickRF", soulBinderLevelOnePowerPerTickRF,
|
||||
"The number of RF/t consumed by an unupgraded soul binder.").getInt(soulBinderLevelOnePowerPerTickRF);
|
||||
soulBinderLevelTwoPowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelTwoPowerPerTickRF", soulBinderLevelTwoPowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with a double layer capacitor upgrade.").getInt(soulBinderLevelTwoPowerPerTickRF);
|
||||
"The number of RF/t consumed by a soul binder with a double layer capacitor or a endergetic capacitor upgrade.").getInt(soulBinderLevelTwoPowerPerTickRF);
|
||||
soulBinderLevelThreePowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelThreePowerPerTickRF", soulBinderLevelThreePowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an octadic capacitor upgrade.").getInt(soulBinderLevelThreePowerPerTickRF);
|
||||
"The number of RF/t consumed by a soul binder with an octadic capacitor or a endergised upgrade.").getInt(soulBinderLevelThreePowerPerTickRF);
|
||||
soulBinderLevelFourPowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelFourPowerPerTickRF", soulBinderLevelFourPowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an crystalline capacitor upgrade.").getInt(soulBinderLevelFourPowerPerTickRF);
|
||||
soulBinderLevelFivePowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelFivePowerPerTickRF", soulBinderLevelFivePowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an melodic capacitor upgrade.").getInt(soulBinderLevelFivePowerPerTickRF);
|
||||
soulBinderLevelSixPowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelSixPowerPerTickRF", soulBinderLevelSixPowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an stellar capacitor upgrade.").getInt(soulBinderLevelSixPowerPerTickRF);
|
||||
soulBinderLevelSevenPowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelSevenPowerPerTickRF", soulBinderLevelSevenPowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an totemic capacitor upgrade.").getInt(soulBinderLevelSevenPowerPerTickRF);
|
||||
soulBinderLevelEightPowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelEightPowerPerTickRF", soulBinderLevelEightPowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an silver capacitor upgrade.").getInt(soulBinderLevelEightPowerPerTickRF);
|
||||
soulBinderLevelNinePowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelNinePowerPerTickRF", soulBinderLevelNinePowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an endergetic capacitor upgrade.").getInt(soulBinderLevelNinePowerPerTickRF);
|
||||
soulBinderLevelTenPowerPerTickRF = config.get(sectionSoulBinder.name, "soulBinderLevelTenPowerPerTickRF", soulBinderLevelTenPowerPerTickRF,
|
||||
"The number of RF/t consumed by a soul binder with an endergised capacitor upgrade.").getInt(soulBinderLevelTenPowerPerTickRF);
|
||||
soulBinderBrokenSpawnerRF = config.get(sectionSoulBinder.name, "soulBinderBrokenSpawnerRF", soulBinderBrokenSpawnerRF,
|
||||
"The number of RF required to change the type of a broken spawner.").getInt(soulBinderBrokenSpawnerRF);
|
||||
soulBinderReanimationRF = config.get(sectionSoulBinder.name, "soulBinderReanimationRF", soulBinderReanimationRF,
|
||||
@@ -1341,6 +1403,21 @@ public final class Config {
|
||||
"The number of RF/t consumed by a Slice'N'Splice with a double layer capacitor upgrade.").getInt(sliceAndSpliceLevelTwoPowerPerTickRF);
|
||||
sliceAndSpliceLevelThreePowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelThreePowerPerTickRF", sliceAndSpliceLevelThreePowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an octadic capacitor upgrade.").getInt(sliceAndSpliceLevelThreePowerPerTickRF);
|
||||
sliceAndSpliceLevelFourPowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelFourPowerPerTickRF", sliceAndSpliceLevelFourPowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an crystalline capacitor upgrade.").getInt(sliceAndSpliceLevelFourPowerPerTickRF);
|
||||
sliceAndSpliceLevelFivePowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelFivePowerPerTickRF", sliceAndSpliceLevelFivePowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an melodic capacitor upgrade.").getInt(sliceAndSpliceLevelFivePowerPerTickRF);
|
||||
sliceAndSpliceLevelSixPowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelSixPowerPerTickRF", sliceAndSpliceLevelSixPowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an stellar capacitor upgrade.").getInt(sliceAndSpliceLevelSixPowerPerTickRF);
|
||||
sliceAndSpliceLevelSevenPowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelSevenPowerPerTickRF", sliceAndSpliceLevelSevenPowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an totemic capacitor upgrade.").getInt(sliceAndSpliceLevelSevenPowerPerTickRF);
|
||||
sliceAndSpliceLevelEightPowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelEightPowerPerTickRF", sliceAndSpliceLevelEightPowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an silver capacitor upgrade.").getInt(sliceAndSpliceLevelEightPowerPerTickRF);
|
||||
sliceAndSpliceLevelNinePowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelNinePowerPerTickRF", sliceAndSpliceLevelNinePowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an endergetic capacitor upgrade.").getInt(sliceAndSpliceLevelNinePowerPerTickRF);
|
||||
sliceAndSpliceLevelTenPowerPerTickRF = config.get(sectionPower.name, "sliceAndSpliceLevelTenPowerPerTickRF", sliceAndSpliceLevelTenPowerPerTickRF,
|
||||
"The number of RF/t consumed by a Slice'N'Splice with an endergised capacitor upgrade.").getInt(sliceAndSpliceLevelTenPowerPerTickRF);
|
||||
|
||||
|
||||
attractorRangeLevelOne = config.get(sectionAttractor.name, "attractorRangeLevelOne", attractorRangeLevelOne,
|
||||
"The range of the mob attractor with no upgrades").getInt(attractorRangeLevelOne);
|
||||
|
||||
@@ -123,7 +123,10 @@ public enum IconEIO implements IWidgetIcon {
|
||||
SORT_SIZE_DOWN(224, 240, SORT_DIR_DOWN),
|
||||
SORT_SIZE_UP(224, 240, SORT_DIR_UP),
|
||||
SORT_MOD_DOWN(240, 240, SORT_DIR_DOWN),
|
||||
SORT_MOD_UP(240, 240, SORT_DIR_UP);
|
||||
SORT_MOD_UP(240, 240, SORT_DIR_UP),
|
||||
|
||||
VISIBLE_NO(224, 160),
|
||||
VISIBLE_YES(240, 160);
|
||||
|
||||
// Texture size is actually 512 but everything is aligned to a 256 grid
|
||||
private static final int TEX_SIZE = 256;
|
||||
|
||||
@@ -41,9 +41,9 @@ public class TooltipHandlerFluid implements ITooltipCallback {
|
||||
} else {
|
||||
IFluidCoolant coolant = FluidFuelRegister.instance.getCoolant(fluid);
|
||||
if (coolant != null) {
|
||||
list.add(EnderIO.lang.localize("enderio.coolant.tooltip.heading"));
|
||||
list.add(EnderIO.lang.localize("coolant.tooltip.heading"));
|
||||
list.add(EnumChatFormatting.ITALIC + " " + PowerDisplayUtil.formatPowerFloat(coolant.getDegreesCoolingPerMB(100) * 1000) + " "
|
||||
+ EnderIO.lang.localize("enderio.coolant.tooltip.degreesPerBucket"));
|
||||
+ EnderIO.lang.localize("coolant.tooltip.degreesPerBucket"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,9 +7,11 @@ import crazypants.enderio.material.Material;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class TravelUpgrade extends AbstractUpgrade {
|
||||
|
||||
private static String UPGRADE_NAME = "travel";
|
||||
private static final String UPGRADE_NAME = "travel";
|
||||
|
||||
public static final TravelUpgrade INSTANCE = new TravelUpgrade();
|
||||
|
||||
@@ -32,17 +34,18 @@ public class TravelUpgrade extends AbstractUpgrade {
|
||||
}
|
||||
|
||||
public TravelUpgrade() {
|
||||
super(UPGRADE_NAME, "enderio.darksteel.upgrade.travel", new ItemStack(EnderIO.itemMaterial,1,Material.ENDER_CRYSTAL.ordinal()), Config.darkSteelTravelCost);
|
||||
super(UPGRADE_NAME, "enderio.darksteel.upgrade.travel", new ItemStack(EnderIO.itemMaterial, 1, Material.ENDER_CRYSTAL.ordinal()), Config.darkSteelTravelCost);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canAddToItem(ItemStack stack) {
|
||||
if(stack == null || (stack.getItem() != DarkSteelItems.itemDarkSteelSword && stack.getItem() != DarkSteelItems.itemEndSteelPickaxe && stack.getItem() != DarkSteelItems.itemEndSteelSword && stack.getItem() != DarkSteelItems.itemDarkSteelPickaxe)|| !EnergyUpgrade.itemHasAnyPowerUpgrade(stack)) {
|
||||
return false;
|
||||
}
|
||||
TravelUpgrade up = loadFromItem(stack);
|
||||
if(up == null) {
|
||||
return true;
|
||||
if(stack == null) return false;
|
||||
if(Stream.of(
|
||||
DarkSteelItems.itemDarkSteelSword, DarkSteelItems.itemEndSteelSword, DarkSteelItems.itemStellarSword,
|
||||
DarkSteelItems.itemDarkSteelPickaxe, DarkSteelItems.itemEndSteelPickaxe, DarkSteelItems.itemStellarPickaxe,
|
||||
DarkSteelItems.itemEndSteelAxe, DarkSteelItems.itemStellarAxe
|
||||
).anyMatch(item -> stack.getItem() == item)) {
|
||||
return EnergyUpgrade.itemHasAnyPowerUpgrade(stack) && loadFromItem(stack) == null;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
package crazypants.enderio.machine.farm;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.Items;
|
||||
@@ -38,7 +35,9 @@ public final class FarmersRegistry {
|
||||
addIC2();
|
||||
addThaumcraft();
|
||||
addFlowers();
|
||||
ForestryFarmer.init();
|
||||
if (Loader.isModLoaded("Forestry")) {
|
||||
ForestryFarmer.init();
|
||||
}
|
||||
|
||||
FarmersCommune.joinCommune(new StemFarmer(Blocks.reeds, new ItemStack(Items.reeds)));
|
||||
FarmersCommune.joinCommune(new StemFarmer(Blocks.cactus, new ItemStack(Blocks.cactus)));
|
||||
|
||||
@@ -196,7 +196,7 @@ public class TileFarmStation extends AbstractPoweredTaskEntity {
|
||||
if(inventory[upg] == null) {
|
||||
return 0;
|
||||
} else {
|
||||
return Config.farmBonusSize * EnderIO.itemBasicCapacitor.getCapacitor(inventory[upg]).getTier();
|
||||
return Config.farmBonusSize * (EnderIO.itemBasicCapacitor.getCapacitor(inventory[upg]).getTier()-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package crazypants.enderio.machine.farm.farmers;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.init.Blocks;
|
||||
@@ -41,7 +42,11 @@ public class CustomSeedFarmer implements IFarmerJoe {
|
||||
this.grownBlockMeta = grownBlockMeta;
|
||||
this.seeds = seeds;
|
||||
FarmStationContainer.slotItemsSeeds.add(seeds);
|
||||
addTilledBlock(Blocks.farmland);
|
||||
addTilledBlock(Blocks.farmland);
|
||||
Block ztonesSoil = GameRegistry.findBlock("Ztones", "cleanDirt");
|
||||
if (ztonesSoil != null) {
|
||||
addTilledBlock(ztonesSoil);
|
||||
}
|
||||
}
|
||||
|
||||
public void addTilledBlock(Block block) {
|
||||
|
||||
@@ -92,16 +92,20 @@ public class TileAttractor extends AbstractPowerConsumerEntity implements IRange
|
||||
|
||||
@Override
|
||||
public void onCapacitorTypeChange() {
|
||||
switch (getCapacitorType()) {
|
||||
case ACTIVATED_CAPACITOR:
|
||||
switch (getCapacitor().getTier()) {
|
||||
case 2:
|
||||
range = Config.attractorRangeLevelTwo;
|
||||
powerPerTick = Config.attractorPowerPerTickLevelTwo;
|
||||
break;
|
||||
case ENDER_CAPACITOR:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
range = Config.attractorRangeLevelThree;
|
||||
powerPerTick = Config.attractorPowerPerTickLevelThree;
|
||||
break;
|
||||
case BASIC_CAPACITOR:
|
||||
case 1:
|
||||
default:
|
||||
range = Config.attractorRangeLevelOne;
|
||||
powerPerTick = Config.attractorPowerPerTickLevelOne;
|
||||
|
||||
@@ -70,16 +70,20 @@ public class TileAversionObelisk extends AbstractPowerConsumerEntity implements
|
||||
|
||||
@Override
|
||||
public void onCapacitorTypeChange() {
|
||||
switch (getCapacitorType()) {
|
||||
case BASIC_CAPACITOR:
|
||||
switch (getCapacitor().getTier()) {
|
||||
case 1:
|
||||
range = Config.spawnGuardRangeLevelOne;
|
||||
powerPerTick = Config.spawnGuardPowerPerTickLevelOne;
|
||||
break;
|
||||
case ACTIVATED_CAPACITOR:
|
||||
case 2:
|
||||
range = Config.spawnGuardRangeLevelTwo;
|
||||
powerPerTick = Config.spawnGuardPowerPerTickLevelTwo;
|
||||
break;
|
||||
case ENDER_CAPACITOR:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
range = Config.spawnGuardRangeLevelThree;
|
||||
powerPerTick = Config.spawnGuardPowerPerTickLevelThree;
|
||||
break;
|
||||
|
||||
@@ -39,6 +39,48 @@ public class TileSliceAndSplice extends AbstractPoweredTaskEntity {
|
||||
Capacitors.ENDER_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_THREE);
|
||||
|
||||
public static final int POWER_PER_TICK_FOUR = Config.sliceAndSpliceLevelFourPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_FOUR = new BasicCapacitor(0,
|
||||
POWER_PER_TICK_FOUR * 2,
|
||||
Capacitors.CRYSTALLINE_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_FOUR);
|
||||
|
||||
public static final int POWER_PER_TICK_FIVE = Config.sliceAndSpliceLevelFivePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_FIVE = new BasicCapacitor(0,
|
||||
POWER_PER_TICK_FIVE * 2,
|
||||
Capacitors.ENDER_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_FIVE);
|
||||
|
||||
public static final int POWER_PER_TICK_SIX = Config.sliceAndSpliceLevelSixPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_SIX = new BasicCapacitor(0,
|
||||
POWER_PER_TICK_SIX * 2,
|
||||
Capacitors.STELLAR_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_SIX);
|
||||
|
||||
public static final int POWER_PER_TICK_SEVEN = Config.sliceAndSpliceLevelSevenPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_SEVEN = new BasicCapacitor(0,
|
||||
POWER_PER_TICK_SEVEN * 2,
|
||||
Capacitors.TOTEMIC_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_SEVEN);
|
||||
|
||||
public static final int POWER_PER_TICK_EIGHT = Config.sliceAndSpliceLevelEightPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_EIGHT = new BasicCapacitor(0,
|
||||
POWER_PER_TICK_EIGHT * 2,
|
||||
Capacitors.SILVER_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_EIGHT);
|
||||
|
||||
public static final int POWER_PER_TICK_NINE = Config.sliceAndSpliceLevelNinePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_NINE = new BasicCapacitor(0,
|
||||
POWER_PER_TICK_NINE * 2,
|
||||
Capacitors.ENDERGETIC_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_NINE);
|
||||
|
||||
public static final int POWER_PER_TICK_TEN = Config.sliceAndSpliceLevelTenPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_TEN = new BasicCapacitor(0,
|
||||
POWER_PER_TICK_TEN * 2,
|
||||
Capacitors.ENDERGISED_CAPACITOR.capacitor.getMaxEnergyStored(),
|
||||
POWER_PER_TICK_TEN);
|
||||
|
||||
private final int axeIndex = 6;
|
||||
private final int shearsIndex = 7;
|
||||
private EntityLivingBase fakePlayer;
|
||||
@@ -67,6 +109,27 @@ public class TileSliceAndSplice extends AbstractPoweredTaskEntity {
|
||||
setCapacitor(CAP_TWO);
|
||||
break;
|
||||
case ENDER_CAPACITOR:
|
||||
setCapacitor(CAP_THREE);
|
||||
break;
|
||||
case CRYSTALLINE_CAPACITOR:
|
||||
setCapacitor(CAP_FOUR);
|
||||
break;
|
||||
case MELODIC_CAPACITOR:
|
||||
setCapacitor(CAP_FIVE);
|
||||
break;
|
||||
case STELLAR_CAPACITOR:
|
||||
setCapacitor(CAP_SIX);
|
||||
break;
|
||||
case TOTEMIC_CAPACITOR:
|
||||
setCapacitor(CAP_SEVEN);
|
||||
break;
|
||||
case SILVER_CAPACITOR:
|
||||
setCapacitor(CAP_ONE);
|
||||
break;
|
||||
case ENDERGETIC_CAPACITOR:
|
||||
setCapacitor(CAP_TWO);
|
||||
break;
|
||||
case ENDERGISED_CAPACITOR:
|
||||
setCapacitor(CAP_THREE);
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -43,6 +43,35 @@ public class TileSoulBinder extends AbstractPoweredTaskEntity implements IHaveEx
|
||||
private static final BasicCapacitor CAP_THREE = new BasicCapacitor(0,POWER_PER_TICK_THREE * 2,
|
||||
Capacitors.ENDER_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_THREE);
|
||||
|
||||
public static final int POWER_PER_TICK_FOUR = Config.soulBinderLevelFourPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_FOUR = new BasicCapacitor(0,POWER_PER_TICK_FOUR * 2,
|
||||
Capacitors.CRYSTALLINE_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_FOUR);
|
||||
|
||||
public static final int POWER_PER_TICK_FIVE = Config.soulBinderLevelFivePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_FIVE = new BasicCapacitor(0,POWER_PER_TICK_FIVE * 2,
|
||||
Capacitors.MELODIC_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_FIVE);
|
||||
|
||||
public static final int POWER_PER_TICK_SIX = Config.soulBinderLevelSixPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_SIX = new BasicCapacitor(0,POWER_PER_TICK_SIX * 2,
|
||||
Capacitors.STELLAR_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_SIX);
|
||||
|
||||
public static final int POWER_PER_TICK_SEVEN = Config.soulBinderLevelSevenPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_SEVEN = new BasicCapacitor(0,POWER_PER_TICK_SEVEN * 2,
|
||||
Capacitors.TOTEMIC_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_SEVEN);
|
||||
|
||||
public static final int POWER_PER_TICK_EIGHT = Config.soulBinderLevelEightPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_EIGHT = new BasicCapacitor(0,POWER_PER_TICK_EIGHT * 2,
|
||||
Capacitors.SILVER_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_EIGHT);
|
||||
|
||||
public static final int POWER_PER_TICK_NINE = Config.soulBinderLevelNinePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_NINE = new BasicCapacitor(0,POWER_PER_TICK_NINE * 2,
|
||||
Capacitors.ENDERGETIC_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_NINE);
|
||||
|
||||
public static final int POWER_PER_TICK_TEN = Config.soulBinderLevelTenPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_TEN = new BasicCapacitor(0,POWER_PER_TICK_TEN * 2,
|
||||
Capacitors.ENDERGISED_CAPACITOR.capacitor.getMaxEnergyStored(), POWER_PER_TICK_TEN);
|
||||
|
||||
|
||||
private final ExperienceContainer xpCont = new ExperienceContainer(XpUtil.getExperienceForLevel(Config.soulBinderMaxXpLevel));
|
||||
|
||||
public TileSoulBinder() {
|
||||
@@ -170,18 +199,25 @@ public class TileSoulBinder extends AbstractPoweredTaskEntity implements IHaveEx
|
||||
setCapacitor(CAP_THREE);
|
||||
break;
|
||||
case CRYSTALLINE_CAPACITOR:
|
||||
break;
|
||||
case ENDERGETIC_CAPACITOR:
|
||||
break;
|
||||
case ENDERGISED_CAPACITOR:
|
||||
setCapacitor(CAP_FOUR);
|
||||
break;
|
||||
case MELODIC_CAPACITOR:
|
||||
break;
|
||||
case SILVER_CAPACITOR:
|
||||
setCapacitor(CAP_FIVE);
|
||||
break;
|
||||
case STELLAR_CAPACITOR:
|
||||
setCapacitor(CAP_SIX);
|
||||
break;
|
||||
case TOTEMIC_CAPACITOR:
|
||||
setCapacitor(CAP_SEVEN);
|
||||
break;
|
||||
case SILVER_CAPACITOR:
|
||||
setCapacitor(CAP_EIGHT);
|
||||
break;
|
||||
case ENDERGETIC_CAPACITOR:
|
||||
setCapacitor(CAP_NINE);
|
||||
break;
|
||||
case ENDERGISED_CAPACITOR:
|
||||
setCapacitor(CAP_TEN);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -25,15 +25,34 @@ public class TilePoweredSpawner extends AbstractPoweredTaskEntity {
|
||||
public static final int MAX_SPAWN_DELAY_BASE = Config.poweredSpawnerMaxDelayTicks;
|
||||
|
||||
public static final int POWER_PER_TICK_ONE = Config.poweredSpawnerLevelOnePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_ONE = new BasicCapacitor(0, (int) (POWER_PER_TICK_ONE * 1.25), Capacitors.BASIC_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
private static final BasicCapacitor CAP_ONE = new BasicCapacitor(Capacitors.BASIC_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_ONE * 1.25), Capacitors.BASIC_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_TWO = Config.poweredSpawnerLevelTwoPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_TWO = new BasicCapacitor(0,(int) (POWER_PER_TICK_TWO * 1.25),
|
||||
Capacitors.ACTIVATED_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
private static final BasicCapacitor CAP_TWO = new BasicCapacitor(Capacitors.ACTIVATED_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_TWO * 1.25), Capacitors.ACTIVATED_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_THREE = Config.poweredSpawnerLevelThreePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_THREE = new BasicCapacitor(0,(int) (POWER_PER_TICK_THREE * 1.25),
|
||||
Capacitors.ENDER_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
private static final BasicCapacitor CAP_THREE = new BasicCapacitor(Capacitors.ENDER_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_THREE * 1.25), Capacitors.ENDER_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_FOUR = Config.poweredSpawnerLevelFourPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_FOUR = new BasicCapacitor(Capacitors.CRYSTALLINE_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_FOUR * 1.25), Capacitors.CRYSTALLINE_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_FIVE = Config.poweredSpawnerLevelFivePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_FIVE = new BasicCapacitor(Capacitors.MELODIC_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_FIVE * 1.25), Capacitors.MELODIC_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_SIX = Config.poweredSpawnerLevelSixPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_SIX = new BasicCapacitor(Capacitors.STELLAR_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_SIX * 1.25), Capacitors.STELLAR_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_SEVEN = Config.poweredSpawnerLevelSevenPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_SEVEN = new BasicCapacitor(Capacitors.TOTEMIC_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_SEVEN * 1.25), Capacitors.TOTEMIC_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_EIGHT = Config.poweredSpawnerLevelEightPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_EIGHT = new BasicCapacitor(Capacitors.SILVER_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_EIGHT * 1.25), Capacitors.SILVER_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_NINE = Config.poweredSpawnerLevelNinePowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_NINE = new BasicCapacitor(Capacitors.ENDERGETIC_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_NINE * 1.25), Capacitors.ENDERGETIC_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int POWER_PER_TICK_TEN = Config.poweredSpawnerLevelTenPowerPerTickRF;
|
||||
private static final BasicCapacitor CAP_TEN = new BasicCapacitor(Capacitors.ENDERGISED_CAPACITOR.capacitor.getTier(), (int) (POWER_PER_TICK_TEN * 1.25), Capacitors.ENDERGISED_CAPACITOR.capacitor.getMaxEnergyStored());
|
||||
|
||||
public static final int MIN_PLAYER_DISTANCE = Config.poweredSpawnerMaxPlayerDistance;
|
||||
public static final boolean USE_VANILLA_SPAWN_CHECKS = Config.poweredSpawnerUseVanillaSpawChecks;
|
||||
@@ -99,9 +118,37 @@ public class TilePoweredSpawner extends AbstractPoweredTaskEntity {
|
||||
refCap = CAP_THREE;
|
||||
basePowerUse = POWER_PER_TICK_THREE;
|
||||
break;
|
||||
case CRYSTALLINE_CAPACITOR:
|
||||
refCap = CAP_FOUR;
|
||||
basePowerUse = POWER_PER_TICK_FOUR;
|
||||
break;
|
||||
case MELODIC_CAPACITOR:
|
||||
refCap = CAP_FIVE;
|
||||
basePowerUse = POWER_PER_TICK_FIVE;
|
||||
break;
|
||||
case STELLAR_CAPACITOR:
|
||||
refCap = CAP_SIX;
|
||||
basePowerUse = POWER_PER_TICK_SIX;
|
||||
break;
|
||||
case TOTEMIC_CAPACITOR:
|
||||
refCap = CAP_SEVEN;
|
||||
basePowerUse = POWER_PER_TICK_SEVEN;
|
||||
break;
|
||||
case SILVER_CAPACITOR:
|
||||
refCap = CAP_EIGHT;
|
||||
basePowerUse = POWER_PER_TICK_EIGHT;
|
||||
break;
|
||||
case ENDERGETIC_CAPACITOR:
|
||||
refCap = CAP_NINE;
|
||||
basePowerUse = POWER_PER_TICK_NINE;
|
||||
break;
|
||||
case ENDERGISED_CAPACITOR:
|
||||
refCap = CAP_TEN;
|
||||
basePowerUse = POWER_PER_TICK_TEN;
|
||||
break;
|
||||
}
|
||||
double multiplier = PoweredSpawnerConfig.getInstance().getCostMultiplierFor(getEntityName());
|
||||
setCapacitor(new BasicCapacitor((int) (refCap.getMaxEnergyExtracted() * multiplier), refCap.getMaxEnergyStored()));
|
||||
setCapacitor(new BasicCapacitor(refCap.getTier(), (int) (refCap.getMaxEnergyExtracted() * multiplier), refCap.getMaxEnergyStored()));
|
||||
powerUsePerTick = (int) Math.ceil(basePowerUse * multiplier);
|
||||
forceClientUpdate = true;
|
||||
}
|
||||
@@ -211,11 +258,7 @@ public class TilePoweredSpawner extends AbstractPoweredTaskEntity {
|
||||
} else {
|
||||
ticksDelay = TilePoweredSpawner.MAX_SPAWN_DELAY_BASE - ((TilePoweredSpawner.MAX_SPAWN_DELAY_BASE - TilePoweredSpawner.MIN_SPAWN_DELAY_BASE) / 2);
|
||||
}
|
||||
if(getCapacitorType().ordinal() == 1) {
|
||||
ticksDelay /= 2;
|
||||
} else if(getCapacitorType().ordinal() == 2) {
|
||||
ticksDelay /= 4;
|
||||
}
|
||||
ticksDelay >>= Math.min(3, getCapacitor().getTier() - 1);
|
||||
int powerPerTick = getPowerUsePerTick();
|
||||
res.setRequiredEnergy(powerPerTick * ticksDelay);
|
||||
return res;
|
||||
|
||||
@@ -130,7 +130,6 @@ public class ServerChannelRegister extends ChannelRegister {
|
||||
return;
|
||||
}
|
||||
}
|
||||
Log.info("ServerChannelRegister: Dimensional Transceiver data saved to " + dataFile.getAbsolutePath());
|
||||
}
|
||||
|
||||
private static boolean createFolderAndWriteFile(ListMultimap<ChannelType, Channel> channels, File dataFile) {
|
||||
@@ -305,7 +304,7 @@ public class ServerChannelRegister extends ChannelRegister {
|
||||
return 0;
|
||||
}
|
||||
|
||||
//Item
|
||||
//Item
|
||||
|
||||
public void sendItem(TileTransceiver from, Set<Channel> channels, int slot, ItemStack contents) {
|
||||
if(!from.hasPower()) {
|
||||
@@ -332,7 +331,7 @@ public class ServerChannelRegister extends ChannelRegister {
|
||||
if(!to.getReceiveItemFilter().doesItemPassFilter(null, contents)) {
|
||||
return contents;
|
||||
}
|
||||
//try merging into existing stacks
|
||||
//try merging into existing stacks
|
||||
|
||||
boolean sendComplete = false; // Only allow 1 stack per item type
|
||||
for (int i = sd.minOutputSlot; i <= sd.maxOutputSlot && !sendComplete; i++) {
|
||||
|
||||
@@ -36,9 +36,9 @@ public class FilterTab implements ITabPanel {
|
||||
FilterTab(GuiTransceiver parent) {
|
||||
this.parent = parent;
|
||||
container = parent.getContainer();
|
||||
sendGui = new BasicItemFilterGui(parent, new FilterContainer(parent.getTransciever(), true), false, container.getFilterOffset().x,
|
||||
sendGui = new BasicItemFilterGui(parent, new FilterContainer(parent.getTransciever(), true), false, true, container.getFilterOffset().x,
|
||||
container.getFilterOffset().y, 0);
|
||||
recGui = new BasicItemFilterGui(parent, new FilterContainer(parent.getTransciever(), false), false, container.getFilterOffset().x,
|
||||
recGui = new BasicItemFilterGui(parent, new FilterContainer(parent.getTransciever(), false), false, false, container.getFilterOffset().x,
|
||||
container.getFilterOffset().y, 20);
|
||||
|
||||
sendRecB = MultiIconButton.createRightArrowButton(parent, 8888, container.getFilterOffset().x + 79, container.getFilterOffset().y - 20);
|
||||
|
||||
@@ -2,6 +2,9 @@ package crazypants.enderio.teleport;
|
||||
|
||||
import java.awt.Color;
|
||||
|
||||
import com.enderio.core.client.gui.button.ToggleButton;
|
||||
import crazypants.enderio.gui.IconEIO;
|
||||
import crazypants.enderio.teleport.packet.PacketVisibility;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.FontRenderer;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
@@ -29,18 +32,23 @@ public class GuiTravelAccessable extends GuiContainerBaseEIO {
|
||||
private static final int ID_PUBLIC = 0;
|
||||
private static final int ID_PRIVATE = 1;
|
||||
private static final int ID_PROTECTED = 2;
|
||||
private static final int ID_VISIBLE = -1;
|
||||
|
||||
private CheckBox publicCB;
|
||||
private CheckBox privateCB;
|
||||
private CheckBox protectedCB;
|
||||
private final CheckBox publicCB;
|
||||
private final CheckBox privateCB;
|
||||
private final CheckBox protectedCB;
|
||||
private final ToggleButton visibleCB;
|
||||
|
||||
private TextFieldEnder tf;
|
||||
private final TextFieldEnder tf;
|
||||
|
||||
private String publicStr;
|
||||
private String privateStr;
|
||||
private String protectedStr;
|
||||
private final String publicStr;
|
||||
private final String privateStr;
|
||||
private final String protectedStr;
|
||||
private final String visibleStr;
|
||||
private final String visibleDesc1Str;
|
||||
private final String visibleDesc2Str;
|
||||
|
||||
private ITravelAccessable te;
|
||||
private final ITravelAccessable te;
|
||||
private int col0x;
|
||||
private int col1x;
|
||||
private int col2x;
|
||||
@@ -59,6 +67,9 @@ public class GuiTravelAccessable extends GuiContainerBaseEIO {
|
||||
publicStr = EnderIO.lang.localize("gui.travelAccessable.public");
|
||||
privateStr = EnderIO.lang.localize("gui.travelAccessable.private");
|
||||
protectedStr = EnderIO.lang.localize("gui.travelAccessable.protected");
|
||||
visibleStr = EnderIO.lang.localize("gui.travelAccessable.tooltip.visible");
|
||||
visibleDesc1Str = EnderIO.lang.localize("gui.travelAccessable.tooltip.visible.desc1");
|
||||
visibleDesc2Str = EnderIO.lang.localize("gui.travelAccessable.tooltip.visible.desc2");
|
||||
|
||||
FontRenderer fr = Minecraft.getMinecraft().fontRenderer;
|
||||
|
||||
@@ -84,6 +95,10 @@ public class GuiTravelAccessable extends GuiContainerBaseEIO {
|
||||
publicCB = new CheckBox(this, ID_PUBLIC, x, y);
|
||||
publicCB.setSelected(te.getAccessMode() == AccessMode.PUBLIC);
|
||||
|
||||
visibleCB = new ToggleButton(this, ID_VISIBLE, 150, 10, IconEIO.VISIBLE_NO, IconEIO.VISIBLE_YES);
|
||||
visibleCB.setSelected(te.isVisible());
|
||||
visibleCB.setToolTip(visibleStr, visibleDesc1Str, visibleDesc2Str);
|
||||
|
||||
ySize = 185;
|
||||
|
||||
textFields.add(tf);
|
||||
@@ -91,16 +106,24 @@ public class GuiTravelAccessable extends GuiContainerBaseEIO {
|
||||
|
||||
@Override
|
||||
protected void actionPerformed(GuiButton b) {
|
||||
privateCB.setSelected(b.id == ID_PRIVATE);
|
||||
protectedCB.setSelected(b.id == ID_PROTECTED);
|
||||
publicCB.setSelected(b.id == ID_PUBLIC);
|
||||
if (b.id >= 0) {
|
||||
privateCB.setSelected(b.id == ID_PRIVATE);
|
||||
protectedCB.setSelected(b.id == ID_PROTECTED);
|
||||
publicCB.setSelected(b.id == ID_PUBLIC);
|
||||
|
||||
AccessMode curMode = b.id == ID_PRIVATE ? AccessMode.PRIVATE : b.id == ID_PROTECTED ? AccessMode.PROTECTED : AccessMode.PUBLIC;
|
||||
te.setAccessMode(curMode);
|
||||
AccessMode curMode = b.id == ID_PRIVATE ? AccessMode.PRIVATE : b.id == ID_PROTECTED ? AccessMode.PROTECTED : AccessMode.PUBLIC;
|
||||
te.setAccessMode(curMode);
|
||||
BlockCoord bc = te.getLocation();
|
||||
PacketAccessMode p = new PacketAccessMode(bc.x, bc.y, bc.z, curMode);
|
||||
PacketHandler.INSTANCE.sendToServer(p);
|
||||
} else if (b == visibleCB) {
|
||||
boolean visible = visibleCB.isSelected();
|
||||
te.setVisible(visible);
|
||||
BlockCoord bc = te.getLocation();
|
||||
PacketVisibility p = new PacketVisibility(bc.x, bc.y, bc.z, visible);
|
||||
PacketHandler.INSTANCE.sendToServer(p);
|
||||
}
|
||||
|
||||
BlockCoord bc = te.getLocation();
|
||||
PacketAccessMode p = new PacketAccessMode(bc.x, bc.y, bc.z, curMode);
|
||||
PacketHandler.INSTANCE.sendToServer(p);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -112,6 +135,7 @@ public class GuiTravelAccessable extends GuiContainerBaseEIO {
|
||||
publicCB.onGuiInit();
|
||||
privateCB.onGuiInit();
|
||||
protectedCB.onGuiInit();
|
||||
visibleCB.onGuiInit();
|
||||
|
||||
tf.setMaxStringLength(32);
|
||||
tf.setFocused(true);
|
||||
|
||||
@@ -5,19 +5,15 @@ import java.awt.Color;
|
||||
import net.minecraft.client.gui.GuiButton;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.enderio.core.client.render.ColorUtil;
|
||||
import com.enderio.core.client.render.RenderUtil;
|
||||
import com.enderio.core.common.network.MessageTileNBT;
|
||||
|
||||
import crazypants.enderio.EnderIO;
|
||||
import crazypants.enderio.api.teleport.ITravelAccessable;
|
||||
import crazypants.enderio.gui.GuiContainerBaseEIO;
|
||||
import crazypants.enderio.network.PacketHandler;
|
||||
|
||||
public class GuiTravelAuth extends GuiContainerBaseEIO {
|
||||
|
||||
@@ -51,9 +47,6 @@ public class GuiTravelAuth extends GuiContainerBaseEIO {
|
||||
protected void actionPerformed(GuiButton par1GuiButton) {
|
||||
ContainerTravelAuth poo = (ContainerTravelAuth) inventorySlots;
|
||||
if(ta.authoriseUser(player, poo.getInv().getInventory())) {
|
||||
TileEntity te = ((TileEntity) ta);
|
||||
PacketHandler.INSTANCE.sendToServer(new MessageTileNBT(te));
|
||||
|
||||
this.mc.displayGuiScreen((GuiScreen) null);
|
||||
this.mc.setIngameFocus();
|
||||
} else {
|
||||
|
||||
@@ -63,7 +63,7 @@ public class TravelController {
|
||||
|
||||
private int delayTimer = 0;
|
||||
|
||||
private int timer = Config.travelAnchorCooldown;
|
||||
private final int timer = Config.travelAnchorCooldown;
|
||||
|
||||
private boolean tempJump;
|
||||
|
||||
@@ -71,6 +71,8 @@ public class TravelController {
|
||||
|
||||
private boolean showTargets = false;
|
||||
|
||||
private boolean insufficientPower;
|
||||
|
||||
public BlockCoord onBlockCoord;
|
||||
|
||||
public BlockCoord selectedCoord;
|
||||
@@ -211,15 +213,17 @@ public class TravelController {
|
||||
}
|
||||
|
||||
private boolean doBlinkAround(EntityPlayer player, Vector3d sample, boolean conserveMomentum) {
|
||||
if(doBlink(player, new BlockCoord((int) Math.floor(sample.x), (int) Math.floor(sample.y) - 1, (int) Math.floor(sample.z)), conserveMomentum)) {
|
||||
return true;
|
||||
}
|
||||
if(doBlink(player, new BlockCoord((int) Math.floor(sample.x), (int) Math.floor(sample.y), (int) Math.floor(sample.z)), conserveMomentum)) {
|
||||
return true;
|
||||
}
|
||||
if(doBlink(player, new BlockCoord((int) Math.floor(sample.x), (int) Math.floor(sample.y) + 1, (int) Math.floor(sample.z)), conserveMomentum)) {
|
||||
return true;
|
||||
}
|
||||
if (!Config.travelStaffSearchOptimize) {
|
||||
if (doBlink(player, new BlockCoord((int) Math.floor(sample.x), (int) Math.floor(sample.y) - 1, (int) Math.floor(sample.z)), conserveMomentum)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -307,23 +311,25 @@ public class TravelController {
|
||||
if((input.jump && !wasJumping && onBlock && selectedCoord != null && delayTimer == 0)
|
||||
|| (input.sneak && !wasSneaking && onBlock && selectedCoord != null && delayTimer == 0 && Config.travelAnchorSneak)) {
|
||||
|
||||
onInput(player);
|
||||
delayTimer = timer;
|
||||
if (onInput(player)) {
|
||||
delayTimer = timer;
|
||||
}
|
||||
}
|
||||
// If there is no selected coordinate and the input is jump, go up
|
||||
if(input.jump && !wasJumping && onBlock && selectedCoord == null && delayTimer == 0) {
|
||||
|
||||
updateVerticalTarget(player, 1);
|
||||
onInput(player);
|
||||
delayTimer = timer;
|
||||
|
||||
if (onInput(player)) {
|
||||
delayTimer = timer;
|
||||
}
|
||||
}
|
||||
|
||||
// If there is no selected coordinate and the input is sneak, go down
|
||||
if(input.sneak && !wasSneaking && onBlock && selectedCoord == null && delayTimer == 0) {
|
||||
updateVerticalTarget(player, -1);
|
||||
onInput(player);
|
||||
delayTimer = timer;
|
||||
if (onInput(player)) {
|
||||
delayTimer = timer;
|
||||
}
|
||||
}
|
||||
|
||||
if(delayTimer != 0) {
|
||||
@@ -333,6 +339,7 @@ public class TravelController {
|
||||
wasJumping = tempJump;
|
||||
wasSneaking = tempSneak;
|
||||
candidates.clear();
|
||||
insufficientPower = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -434,7 +441,11 @@ public class TravelController {
|
||||
requiredPower = (int) (getDistance(player, coord) * source.getPowerCostPerBlockTraveledRF());
|
||||
int canUsePower = getEnergyInTravelItem(staff);
|
||||
if(requiredPower > canUsePower) {
|
||||
player.addChatComponentMessage(new ChatComponentTranslation("enderio.itemTravelStaff.notEnoughPower"));
|
||||
// make sure chat is sent only once per trial
|
||||
if (!insufficientPower) {
|
||||
player.addChatComponentMessage(new ChatComponentTranslation("enderio.itemTravelStaff.notEnoughPower"));
|
||||
insufficientPower = true;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
return requiredPower;
|
||||
@@ -604,12 +615,12 @@ public class TravelController {
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private void onInput(EntityClientPlayerMP player) {
|
||||
private boolean onInput(EntityClientPlayerMP player) {
|
||||
|
||||
MovementInput input = player.movementInput;
|
||||
BlockCoord target = TravelController.instance.selectedCoord;
|
||||
if(target == null) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
TileEntity te = player.worldObj.getTileEntity(target.x, target.y, target.z);
|
||||
@@ -618,12 +629,13 @@ public class TravelController {
|
||||
if(ta.getRequiresPassword(player)) {
|
||||
PacketOpenAuthGui p = new PacketOpenAuthGui(target.x, target.y, target.z);
|
||||
PacketHandler.INSTANCE.sendToServer(p);
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(isTargetEnderIO()) {
|
||||
openEnderIO(null, player.worldObj, player);
|
||||
return true;
|
||||
} else if(Config.travelAnchorEnabled && travelToSelectedTarget(player, TravelSource.BLOCK, false)) {
|
||||
input.jump = false;
|
||||
try {
|
||||
@@ -631,8 +643,9 @@ public class TravelController {
|
||||
} catch (Exception e) {
|
||||
//ignore
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public double getScaleForCandidate(Vector3d loc) {
|
||||
@@ -720,8 +733,11 @@ public class TravelController {
|
||||
int x = MathHelper.floor_double(player.posX);
|
||||
int y = MathHelper.floor_double(player.boundingBox.minY) - 1;
|
||||
int z = MathHelper.floor_double(player.posZ);
|
||||
if(world.getBlock(x, y, z) == EnderIO.blockTravelPlatform) {
|
||||
return new BlockCoord(x, y, z);
|
||||
TileEntity tileEntity = world.getTileEntity(x, y, z);
|
||||
if(tileEntity instanceof ITravelAccessable) {
|
||||
if (((ITravelAccessable) tileEntity).isTravelSource()) {
|
||||
return new BlockCoord(x, y, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -2,6 +2,7 @@ package crazypants.enderio.teleport.anchor;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import crazypants.enderio.teleport.packet.PacketVisibility;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.ITileEntityProvider;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
@@ -62,6 +63,7 @@ public class BlockTravelAnchor extends BlockEio implements IGuiHandler, ITileEnt
|
||||
PacketHandler.INSTANCE.registerMessage(PacketDrainStaff.class, PacketDrainStaff.class, PacketHandler.nextID(), Side.SERVER);
|
||||
PacketHandler.INSTANCE.registerMessage(PacketOpenAuthGui.class, PacketOpenAuthGui.class, PacketHandler.nextID(), Side.SERVER);
|
||||
PacketHandler.INSTANCE.registerMessage(PacketPassword.Handler.class, PacketPassword.class, PacketHandler.nextID(), Side.SERVER);
|
||||
PacketHandler.INSTANCE.registerMessage(PacketVisibility.class, PacketVisibility.class, PacketHandler.nextID(), Side.SERVER);
|
||||
|
||||
BlockTravelAnchor result = new BlockTravelAnchor();
|
||||
result.init();
|
||||
|
||||
@@ -44,13 +44,23 @@ public class TileTravelAnchor extends TileEntityEio implements ITravelAccessable
|
||||
|
||||
private List<UserIdent> authorisedUsers = new ArrayList<UserIdent>();
|
||||
|
||||
private boolean visible = true;
|
||||
|
||||
private boolean isAuthorisedUser(UserIdent ident) {
|
||||
return authorisedUsers.contains(ident);
|
||||
}
|
||||
|
||||
private boolean isOwnerUser(UserIdent ident) {
|
||||
return owner.equals(ident);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBlockBeAccessed(EntityPlayer playerName) {
|
||||
if(accessMode == AccessMode.PUBLIC) {
|
||||
return true;
|
||||
}
|
||||
// Covers protected and private access modes
|
||||
return owner.equals(playerName.getGameProfile()) || authorisedUsers.contains(playerName.getGameProfile());
|
||||
return isOwnerUser(UserIdent.create(playerName.getGameProfile())) || isAuthorisedUser(UserIdent.create(playerName.getGameProfile()));
|
||||
|
||||
}
|
||||
|
||||
@@ -81,7 +91,7 @@ public class TileTravelAnchor extends TileEntityEio implements ITravelAccessable
|
||||
@Override
|
||||
public boolean getRequiresPassword(EntityPlayer playerName) {
|
||||
return getAccessMode() == AccessMode.PROTECTED && !canUiBeAccessed(playerName)
|
||||
&& !authorisedUsers.contains(PlayerUtil.getPlayerUUID(playerName.getGameProfile().getName()));
|
||||
&& !isAuthorisedUser(UserIdent.create(playerName.getGameProfile()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -95,7 +105,7 @@ public class TileTravelAnchor extends TileEntityEio implements ITravelAccessable
|
||||
|
||||
@Override
|
||||
public boolean canUiBeAccessed(EntityPlayer playerName) {
|
||||
return owner.equals(playerName.getGameProfile());
|
||||
return isOwnerUser(UserIdent.create(playerName.getGameProfile()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -103,7 +113,7 @@ public class TileTravelAnchor extends TileEntityEio implements ITravelAccessable
|
||||
if(accessMode != AccessMode.PRIVATE) {
|
||||
return true;
|
||||
}
|
||||
return owner.equals(playerName.getGameProfile());
|
||||
return isOwnerUser(UserIdent.create(playerName.getGameProfile()));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -210,6 +220,11 @@ public class TileTravelAnchor extends TileEntityEio implements ITravelAccessable
|
||||
//keep behavior the same for blocks placed prior to this update
|
||||
accessMode = AccessMode.PUBLIC;
|
||||
}
|
||||
if (root.hasKey("visible")) {
|
||||
visible = root.getBoolean("visible");
|
||||
} else {
|
||||
visible = true;
|
||||
}
|
||||
if (root.hasKey("placedBy")) {
|
||||
owner = UserIdent.create(root.getString("placedBy"));
|
||||
} else {
|
||||
@@ -264,6 +279,7 @@ public class TileTravelAnchor extends TileEntityEio implements ITravelAccessable
|
||||
@Override
|
||||
protected void writeCustomNBT(NBTTagCompound root) {
|
||||
root.setShort("accessMode", (short) accessMode.ordinal());
|
||||
root.setBoolean("visible", visible);
|
||||
owner.saveToNbt(root, "owner");
|
||||
for (int i = 0; i < password.length; i++) {
|
||||
ItemStack stack = password[i];
|
||||
@@ -308,4 +324,14 @@ public class TileTravelAnchor extends TileEntityEio implements ITravelAccessable
|
||||
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
|
||||
readCustomNBT(pkt.func_148857_g());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return visible;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVisible(boolean visible) {
|
||||
this.visible = visible;
|
||||
}
|
||||
}
|
||||
@@ -54,6 +54,10 @@ public class TravelEntitySpecialRenderer extends TileEntitySpecialRenderer {
|
||||
|
||||
ITravelAccessable ta = (ITravelAccessable) tileentity;
|
||||
|
||||
if (!ta.isVisible()) {
|
||||
return;
|
||||
}
|
||||
|
||||
BlockCoord onBlock = TravelController.instance.onBlockCoord;
|
||||
if(onBlock != null && onBlock.equals(ta.getLocation())) {
|
||||
return;
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package crazypants.enderio.teleport.packet;
|
||||
|
||||
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 crazypants.enderio.api.teleport.ITravelAccessable;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
public class PacketVisibility implements IMessage, IMessageHandler<PacketVisibility, IMessage> {
|
||||
int x, y, z;
|
||||
boolean visible;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public PacketVisibility() {}
|
||||
|
||||
public PacketVisibility(int x, int y, int z, boolean visible) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
this.visible = visible;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buf) {
|
||||
buf.writeInt(x);
|
||||
buf.writeInt(y);
|
||||
buf.writeInt(z);
|
||||
buf.writeBoolean(visible);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fromBytes(ByteBuf buf) {
|
||||
x = buf.readInt();
|
||||
y = buf.readInt();
|
||||
z = buf.readInt();
|
||||
visible = buf.readBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMessage onMessage(PacketVisibility message, MessageContext ctx) {
|
||||
EntityPlayer player = ctx.getServerHandler().playerEntity;
|
||||
TileEntity te = player.worldObj.getTileEntity(message.x, message.y, message.z);
|
||||
if(te instanceof ITravelAccessable) {
|
||||
((ITravelAccessable) te).setVisible(message.visible);
|
||||
player.worldObj.markBlockForUpdate(message.x, message.y, message.z);
|
||||
player.worldObj.markTileEntityChunkModified(message.x, message.y, message.z, te);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -419,6 +419,17 @@ public class TileTelePad extends TileTravelAnchor implements IInternalPowerRecei
|
||||
return this;
|
||||
}
|
||||
|
||||
/* ITravelAccessable */
|
||||
@Override
|
||||
public boolean isTravelSource() {
|
||||
return isMaster() && inNetwork();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return super.isVisible() && isTravelSource();
|
||||
}
|
||||
|
||||
/* ITelePad */
|
||||
|
||||
@Override
|
||||
|
||||
@@ -27,14 +27,14 @@ public class EnderIOCrashCallable implements ICrashCallable {
|
||||
|
||||
for (ModContainer modContainer : ModAPIManager.INSTANCE.getAPIList()) {
|
||||
if ("appliedenergistics2|API".equals(modContainer.getModId())) {
|
||||
if ("rv1".equals(modContainer.getVersion())) {
|
||||
if ("rv1".equals(modContainer.getVersion()) || "rv2".equals(modContainer.getVersion())) {
|
||||
result.add(" * An unsupportted old AE2 API is installed (" + modContainer.getVersion() + " from "
|
||||
+ modContainer.getSource().getName() + ").");
|
||||
result.add(" Ender IO was build against API version rv2 and will NOT work with older versions.");
|
||||
} else if (!"rv2".equals(modContainer.getVersion())) {
|
||||
result.add(" Ender IO was build against API version rv3 and will NOT work with older versions.");
|
||||
} else if (!"rv3".equals(modContainer.getVersion())) {
|
||||
result.add(" * An unknown AE2 API is installed (" + modContainer.getVersion() + " from "
|
||||
+ modContainer.getSource().getName() + ").");
|
||||
result.add(" Ender IO was build against API version rv2 and may or may not work with a newer version.");
|
||||
result.add(" Ender IO was build against API version rv3 and may or may not work with a newer version.");
|
||||
}
|
||||
} else if ("CoFHAPI|energy".equals(modContainer.getModId())) {
|
||||
if ("1.7.10R1.0.0".equals(modContainer.getVersion()) || "1.7.10R1.0.1".equals(modContainer.getVersion())) {
|
||||
|
||||
@@ -29,7 +29,8 @@ public class ExperienceContainer extends FluidTank {
|
||||
|
||||
public ExperienceContainer(int maxStored) {
|
||||
super(null, 0);
|
||||
maxXp = maxStored;
|
||||
// enforce overflow-safe value
|
||||
maxXp = Math.min(maxStored, XpUtil.liquidToExperience(Integer.MAX_VALUE));
|
||||
}
|
||||
|
||||
public int getMaximumExperiance() {
|
||||
|
||||
@@ -1158,6 +1158,9 @@ enderio.gui.travelAccessable.ok=Authorise
|
||||
enderio.gui.travelAccessable.skipLocked=Skipped locked anchor, use targeted teleport.
|
||||
enderio.gui.travelAccessable.skipObstructed=Skipped obstructed anchor.
|
||||
enderio.gui.travelAccessable.skipPrivate=Skipped private anchor.
|
||||
enderio.gui.travelAccessable.tooltip.visible=Visibility
|
||||
enderio.gui.travelAccessable.tooltip.visible.desc1=When off, you cannot see this block through other blocks.
|
||||
enderio.gui.travelAccessable.tooltip.visible.desc2=Handy for use as elevators.
|
||||
|
||||
enderio.gui.telepad.configure.travel=Travel Settings
|
||||
enderio.gui.telepad.configure.telepad=Telepad Settings
|
||||
@@ -1168,6 +1171,83 @@ enderio.gui.spawnGurad.showRange=Show Range
|
||||
enderio.gui.spawnGurad.hideRange=Hide Range
|
||||
enderio.gui.spawnGurad.range=Range:
|
||||
|
||||
# Filters
|
||||
enderio.gui.item_filter.damage.disabled=Ignore Damage
|
||||
enderio.gui.item_filter.damage.damage_00_25=Up to 25% Damaged
|
||||
enderio.gui.item_filter.damage.damage_25_00=More than 25% Damaged
|
||||
enderio.gui.item_filter.damage.damage_00_50=Up to 50% Damaged
|
||||
enderio.gui.item_filter.damage.damage_50_00=More than 50% Damaged
|
||||
enderio.gui.item_filter.damage.damage_00_75=Up to 75% Damaged
|
||||
enderio.gui.item_filter.damage.damage_75_00=More than 75% Damaged
|
||||
enderio.gui.item_filter.damage.damage_00_00=Not Damaged
|
||||
enderio.gui.item_filter.damage.damage_01_00=Damaged
|
||||
enderio.gui.item_filter.damage.damage_yes=Can be Damaged
|
||||
enderio.gui.item_filter.damage.damage_not=Cannot be Damaged
|
||||
|
||||
enderio.gui.edit_item_filter=Edit Filter Settings
|
||||
enderio.gui.item_filter.close=Close Filter
|
||||
enderio.gui.item_filter.close2=Go back to previous inventory
|
||||
|
||||
enderio.gui.item_filter.whitelist=Whitelist
|
||||
enderio.gui.item_filter.blacklist=Blacklist
|
||||
enderio.gui.item_filter.match_meta=Match Metadata
|
||||
enderio.gui.item_filter.ignore_meta=Ignore Metadata
|
||||
enderio.gui.item_filter.sticky_enabled=Sticky Mode Enabled
|
||||
enderio.gui.item_filter.sticky_enabled2=Selected items will only be sent to this or other sticky outputs
|
||||
enderio.gui.item_filter.sticky_disabled=Sticky Mode Disabled
|
||||
enderio.gui.item_filter.ore_dic_enabled=Ore Dictionary Enabled
|
||||
enderio.gui.item_filter.ore_dic_disabled=Ore Dictionary Disabled
|
||||
enderio.gui.item_filter.match_nbt=Match NBT
|
||||
enderio.gui.item_filter.ignore_nbt=Ignore NBT
|
||||
|
||||
enderio.gui.existing.item_filter.snapshot=Snapshot
|
||||
enderio.gui.existing.item_filter.merge=Merge
|
||||
enderio.gui.existing.item_filter.clear=Clear
|
||||
enderio.gui.existing.item_filter.show=Show
|
||||
enderio.gui.existing.item_filter.snapshot2=Optional: If no snapshot is set, the inventory content will be used as filter
|
||||
enderio.gui.existing.item_filter.merge2=Merge the current snapshot with a new one
|
||||
enderio.gui.existing.item_filter.clear2=Clear the snapshot
|
||||
enderio.gui.existing.item_filter.show2=Show the current snapshot
|
||||
enderio.item.item_existing_item_filter.filter_not_updated=Filter not updated
|
||||
enderio.item.item_existing_item_filter.filter_updated=Filter updated
|
||||
|
||||
enderio.gui.basic_item_filter=Basic Item Filter
|
||||
enderio.gui.advanced_item_filter=Advanced Item Filter
|
||||
enderio.gui.limited_item_filter=Limited Item Filter
|
||||
enderio.gui.big_item_filter=Big Item Filter
|
||||
# Note big_advanced_item_filter doesn't have enough space for the full name
|
||||
enderio.gui.big_advanced_item_filter=Filter
|
||||
enderio.gui.existing_item_filter=Existing Item Filter
|
||||
enderio.gui.mod_item_filter=Mod Item Filter
|
||||
enderio.gui.power_item_filter=Power Item Filter
|
||||
enderio.gui.species_item_filter=Species Item Filter
|
||||
enderio.gui.soul_filter_normal=Soul Item Filter
|
||||
enderio.gui.soul_filter_big=Big Soul Item Filter
|
||||
enderio.gui.enchantment_filter_normal=Enchantment Item Filter
|
||||
enderio.gui.enchantment_filter_big=Big Enchantment Item Filter
|
||||
|
||||
enderio.gui.fluid_filter=Basic Fluid Filter
|
||||
|
||||
enderio.gui.redstone_filter.and=Redstone AND Filter
|
||||
enderio.gui.redstone_filter.or=Redstone OR Filter
|
||||
enderio.gui.redstone_filter.nor=Redstone NOR Filter
|
||||
enderio.gui.redstone_filter.nand=Redstone NAND Filter
|
||||
enderio.gui.redstone_filter.xor=Redstone XOR Filter
|
||||
enderio.gui.redstone_filter.xnor=Redstone XNOR Filter
|
||||
enderio.gui.redstone_filter.counting=Redstone Counting Filter
|
||||
enderio.gui.redstone_filter.timer=Redstone Timer Filter
|
||||
|
||||
enderio.gui.mod.item_filter.delete=Delete
|
||||
enderio.gui.mod.item_filter.slot=Input Slot
|
||||
|
||||
enderio.gui.power.item_filter.compare=Comparison Mode
|
||||
enderio.gui.power.item_filter.percent=Power Percentage
|
||||
|
||||
enderio.gui.redstone_filter.signal_color=Redstone Signal Color
|
||||
enderio.gui.redstone_filter.input_signal=Input Signal
|
||||
enderio.gui.redstone_filter.count=Count
|
||||
enderio.gui.redstone_filter.time=Time
|
||||
|
||||
#conduits
|
||||
enderio.gui.conduit.ioMode=Mode
|
||||
enderio.gui.conduit.ioMode.inOut=In / Out
|
||||
@@ -1240,7 +1320,7 @@ enderio.weatherObelisk.fuelTank=Barometric Flux Tank
|
||||
|
||||
#Enchants
|
||||
enchantment.enderio.soulBound=Soulbound
|
||||
description.enchantment.enderio.soulBound=Prevents item from being lost on death
|
||||
description.enchantment.enderio.soulBound=When the player dies the item/tool/armor will be kept in the inventory and not drop on the ground.
|
||||
|
||||
#Configuration
|
||||
enderio.config.title=Ender IO Configuration
|
||||
|
||||
@@ -991,7 +991,7 @@ enderio.darksteel.upgrade.solar_one.name=Солнечная батарея I
|
||||
enderio.darksteel.upgrade.solar_one.tooltip.detailed.line1=Генерирует энергию от солнечных лучей.
|
||||
|
||||
enderio.darksteel.upgrade.solar_two.name=Солнечная батарея II
|
||||
enderio.darksteel.upgrade.solar_two.tooltip.detailed.line1==Генерирует энергию от солнечных лучей.
|
||||
enderio.darksteel.upgrade.solar_two.tooltip.detailed.line1=Генерирует энергию от солнечных лучей.
|
||||
|
||||
enderio.darksteel.upgrade.solar_three.name=Солнечная батарея III
|
||||
enderio.darksteel.upgrade.solar_three.tooltip.detailed.line1=Генерирует энергию от солнечных лучей.
|
||||
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 37 KiB |