Merge pull request #21 from GTNewHorizons/yeet-copypasta

Remove duplication of AE2 base classes
This commit is contained in:
Martin Robertz authored and GitHub committed 2022-08-27 10:36:47 +02:00
commit ea102573de
68 files changed
+580 -7607

No files matched your search

+35
View File
@@ -0,0 +1,35 @@
* text eol=lf
*.jar binary
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.tif binary
*.tiff binary
*.ico binary
*.svg text
*.eps binary
*.kar binary
*.m4a binary
*.mid binary
*.midi binary
*.mp3 binary
*.ogg binary
*.ra binary
*.7z binary
*.gz binary
*.tar binary
*.tgz binary
*.zip binary
*.patch -text
*.bat text eol=crlf
*.cmd text eol=crlf
*.ps1 text eol=crlf
*autogenerated binary
+194 -158
View File
@@ -1,10 +1,9 @@
//version: 1656003794
//version: 1661114848
/*
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.
*/
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
@@ -21,10 +20,17 @@ import java.util.zip.ZipOutputStream
buildscript {
repositories {
mavenCentral()
maven {
name 'forge'
url 'https://maven.minecraftforge.net'
}
maven {
// GTNH ForgeGradle Fork
name = "GTNH Maven"
url = "http://jenkins.usrv.eu:8081/nexus/content/groups/public/"
}
maven {
name 'sonatype'
url 'https://oss.sonatype.org/content/repositories/snapshots/'
@@ -33,32 +39,37 @@ buildscript {
name 'Scala CI dependencies'
url 'https://repo1.maven.org/maven2/'
}
maven {
name 'jitpack'
url 'https://jitpack.io'
}
}
dependencies {
classpath 'com.github.GTNewHorizons:ForgeGradle:1.2.7'
classpath 'net.minecraftforge.gradle:ForgeGradle:1.2.9'
}
}
plugins {
id 'java-library'
id 'idea'
id 'eclipse'
id 'scala'
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 '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
id "com.diffplug.spotless" version "6.7.2"
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
id 'com.diffplug.spotless' version '6.7.2' apply false
}
boolean settingsupdated = verifySettingsGradle()
settingsupdated = verifyGitAttributes() || settingsupdated
if (settingsupdated)
throw new GradleException("Settings has been updated, please re-run task.")
dependencies {
implementation 'com.diffplug:blowdryer:1.6.0'
}
apply plugin: 'com.diffplug.blowdryer'
if (project.file('.git/HEAD').isFile()) {
apply plugin: 'com.palantir.git-version'
@@ -84,38 +95,14 @@ idea {
}
}
// Spotless autoformatter
// See https://github.com/diffplug/spotless/tree/main/plugin-gradle
// Can be locally toggled via spotless:off/spotless:on comments
spotless {
encoding 'UTF-8'
boolean disableSpotless = project.hasProperty("disableSpotless") ? project.disableSpotless.toBoolean() : false
format 'misc', {
target '*.md', '.gitignore'
trimTrailingWhitespace()
indentWithSpaces(4)
endWithNewline()
}
java {
toggleOffOn()
importOrder()
removeUnusedImports()
palantirJavaFormat('1.1.0') // last version supporting jvm 8
}
kotlin {
toggleOffOn()
ktfmt('0.39')
}
groovyGradle {
toggleOffOn()
importOrder()
target '*.gradle'
greclipse('4.19.0') // last version supporting jvm 8
}
if (!disableSpotless) {
apply plugin: 'com.diffplug.spotless'
apply from: Blowdryer.file('spotless.gradle')
}
if(JavaVersion.current() != JavaVersion.VERSION_1_8) {
if (JavaVersion.current() != JavaVersion.VERSION_1_8) {
throw new GradleException("This project requires Java 8, but it's running on " + JavaVersion.current())
}
@@ -140,12 +127,11 @@ checkPropertyExists("containsMixinsAndOrCoreModOnly")
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/'
boolean noPublishedSources = project.hasProperty("noPublishedSources") ? project.noPublishedSources.toBoolean() : false
boolean usesMixinDebug = project.hasProperty('usesMixinDebug') ?: project.usesMixins.toBoolean()
boolean forceEnableMixins = project.hasProperty('forceEnableMixins') ? project.forceEnableMixins.toBoolean() : false
String channel = project.hasProperty('channel') ? project.channel : 'stable'
String mappingsVersion = project.hasProperty('mappingsVersion') ? project.mappingsVersion : '12'
String javaSourceDir = "src/main/java/"
String scalaSourceDir = "src/main/scala/"
String kotlinSourceDir = "src/main/kotlin/"
@@ -153,53 +139,53 @@ String kotlinSourceDir = "src/main/kotlin/"
String targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/")
String targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/")
String targetPackageKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/")
if(!(getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists() || getFile(targetPackageKotlin).exists())) {
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) {
if (apiPackage) {
targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/")
targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/")
targetPackageKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/")
if(!(getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists() || getFile(targetPackageKotlin).exists())) {
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) {
if (accessTransformersFile) {
String targetFile = "src/main/resources/META-INF/" + accessTransformersFile
if(!getFile(targetFile).exists()) {
if (!getFile(targetFile).exists()) {
throw new GradleException("Could not resolve \"accessTransformersFile\"! Could not find " + targetFile)
}
}
if(usesMixins.toBoolean()) {
if(mixinsPackage.isEmpty() || mixinPlugin.isEmpty()) {
if (usesMixins.toBoolean()) {
if (mixinsPackage.isEmpty() || mixinPlugin.isEmpty()) {
throw new GradleException("\"mixinPlugin\" requires \"mixinsPackage\" and \"mixinPlugin\" to be set!")
}
targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/")
targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/")
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)
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"
String targetFileKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".kt"
if(!(getFile(targetFileJava).exists() || getFile(targetFileScala).exists() || getFile(targetFileScalaJava).exists() || getFile(targetFileKotlin).exists())) {
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)
}
}
if(coreModClass) {
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"
String targetFileKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".kt"
if(!(getFile(targetFileJava).exists() || getFile(targetFileScala).exists() || getFile(targetFileScalaJava).exists() || getFile(targetFileKotlin).exists())) {
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)
}
}
@@ -229,7 +215,7 @@ try {
catch (Exception ignored) {
out.style(Style.Failure).text(
'This mod must be version controlled by Git AND the repository must provide at least one tag,\n' +
'or the VERSION override must be set! ').style(Style.SuccessHeader).text('(Do NOT download from GitHub using the ZIP option, instead\n' +
'or the VERSION override must be set! ').style(Style.SuccessHeader).text('(Do NOT download from GitHub using the ZIP option, instead\n' +
'clone the repository, see ').style(Style.Info).text('https://gtnh.miraheze.org/wiki/Development').style(Style.SuccessHeader).println(' for details.)'
)
versionOverride = 'NO-GIT-TAG-SET'
@@ -240,22 +226,21 @@ ext {
modVersion = identifiedVersion
}
if(identifiedVersion == versionOverride) {
if (identifiedVersion == versionOverride) {
out.style(Style.Failure).text('Override version to ').style(Style.Identifier).text(modVersion).style(Style.Failure).println('!\7')
}
group = modGroup
if(project.hasProperty("customArchiveBaseName") && customArchiveBaseName) {
if (project.hasProperty("customArchiveBaseName") && customArchiveBaseName) {
archivesBaseName = customArchiveBaseName
}
else {
} else {
archivesBaseName = modId
}
def arguments = []
def jvmArguments = []
if (usesMixins.toBoolean()) {
if (usesMixins.toBoolean() || forceEnableMixins) {
arguments += [
"--tweakClass org.spongepowered.asm.launch.MixinTweaker"
]
@@ -274,16 +259,16 @@ minecraft {
if (replaceGradleTokenInFile) {
replaceIn replaceGradleTokenInFile
if(gradleTokenModId) {
if (gradleTokenModId) {
replace gradleTokenModId, modId
}
if(gradleTokenModName) {
if (gradleTokenModName) {
replace gradleTokenModName, modName
}
if(gradleTokenVersion) {
if (gradleTokenVersion) {
replace gradleTokenVersion, modVersion
}
if(gradleTokenGroupName) {
if (gradleTokenGroupName) {
replace gradleTokenGroupName, modGroup
}
}
@@ -292,7 +277,7 @@ minecraft {
args(arguments)
jvmArgs(jvmArguments)
if(developmentEnvironmentUserName) {
if (developmentEnvironmentUserName) {
args("--username", developmentEnvironmentUserName)
}
}
@@ -303,7 +288,7 @@ minecraft {
}
}
if(file('addon.gradle').exists()) {
if (file('addon.gradle').exists()) {
apply from: 'addon.gradle'
}
@@ -320,7 +305,7 @@ repositories {
name 'Overmind forge repo mirror'
url 'https://gregtech.overminddl1.com/'
}
if(usesMixins.toBoolean()) {
if (usesMixins.toBoolean() || forceEnableMixins) {
maven {
name 'sponge'
url 'https://repo.spongepowered.org/repository/maven-public'
@@ -332,11 +317,13 @@ repositories {
}
dependencies {
if(usesMixins.toBoolean()) {
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')
}
if (usesMixins.toBoolean() || forceEnableMixins) {
// using 0.8 to workaround a issue in 0.7 which fails mixin application
compile('com.github.GTNewHorizons:SpongePoweredMixin:0.7.12-GTNH') {
// Mixin includes a lot of dependencies that are too up-to-date
@@ -394,7 +381,10 @@ shadowJar {
}
minimize() // This will only allow shading for actually used classes
configurations = [project.configurations.shadowImplementation, project.configurations.shadowCompile]
configurations = [
project.configurations.shadowImplementation,
project.configurations.shadowCompile
]
dependsOn(relocateShadowJar)
}
@@ -409,38 +399,38 @@ jar {
attributes(getManifestAttributes())
}
if(usesShadowedDependencies.toBoolean()) {
if (usesShadowedDependencies.toBoolean()) {
dependsOn(shadowJar)
enabled = false
}
}
reobf {
if(usesMixins.toBoolean()) {
if (usesMixins.toBoolean()) {
addExtraSrgFile mixinSrg
}
}
afterEvaluate {
if(usesMixins.toBoolean()) {
if (usesMixins.toBoolean()) {
tasks.compileJava {
options.compilerArgs += [
"-AreobfSrgFile=${tasks.reobf.srg}",
"-AoutSrgFile=${mixinSrg}",
"-AoutRefMapFile=${refMap}",
// Elan: from what I understand they are just some linter configs so you get some warning on how to properly code
"-XDenableSunApiLintControl",
"-XDignore.symbol.file"
"-AreobfSrgFile=${tasks.reobf.srg}",
"-AoutSrgFile=${mixinSrg}",
"-AoutRefMapFile=${refMap}",
// Elan: from what I understand they are just some linter configs so you get some warning on how to properly code
"-XDenableSunApiLintControl",
"-XDignore.symbol.file"
]
}
}
}
runClient {
if(developmentEnvironmentUserName) {
if (developmentEnvironmentUserName) {
arguments += [
"--username",
developmentEnvironmentUserName
"--username",
developmentEnvironmentUserName
]
}
@@ -455,9 +445,9 @@ runServer {
tasks.withType(JavaExec).configureEach {
javaLauncher.set(
javaToolchains.launcherFor {
languageVersion = projectJavaVersion
}
javaToolchains.launcherFor {
languageVersion = projectJavaVersion
}
)
}
@@ -465,6 +455,7 @@ processResources {
// this will ensure that this task is redone when the versions change.
inputs.property "version", project.version
inputs.property "mcversion", project.minecraft.version
exclude("spotless.gradle")
// replace stuff in mcmod.info, nothing else
from(sourceSets.main.resources.srcDirs) {
@@ -477,43 +468,44 @@ processResources {
"modName": modName
}
if(usesMixins.toBoolean()) {
if (usesMixins.toBoolean()) {
from refMap
}
// copy everything else that's not the mcmod.info
from(sourceSets.main.resources.srcDirs) {
exclude 'mcmod.info'
exclude 'spotless.gradle'
}
}
def getManifestAttributes() {
def manifestAttributes = [:]
if(!containsMixinsAndOrCoreModOnly.toBoolean() && (usesMixins.toBoolean() || coreModClass)) {
if (!containsMixinsAndOrCoreModOnly.toBoolean() && (usesMixins.toBoolean() || coreModClass)) {
manifestAttributes += ["FMLCorePluginContainsFMLMod": true]
}
if(accessTransformersFile) {
manifestAttributes += ["FMLAT" : accessTransformersFile.toString()]
if (accessTransformersFile) {
manifestAttributes += ["FMLAT": accessTransformersFile.toString()]
}
if(coreModClass) {
if (coreModClass) {
manifestAttributes += ["FMLCorePlugin": modGroup + "." + coreModClass]
}
if(usesMixins.toBoolean()) {
if (usesMixins.toBoolean()) {
manifestAttributes += [
"TweakClass" : "org.spongepowered.asm.launch.MixinTweaker",
"MixinConfigs" : "mixins." + modId + ".json",
"ForceLoadAsMod" : !containsMixinsAndOrCoreModOnly.toBoolean()
"TweakClass" : "org.spongepowered.asm.launch.MixinTweaker",
"MixinConfigs" : "mixins." + modId + ".json",
"ForceLoadAsMod": !containsMixinsAndOrCoreModOnly.toBoolean()
]
}
return manifestAttributes
}
task sourcesJar(type: Jar) {
from (sourceSets.main.allSource)
from (file("$projectDir/LICENSE"))
from(sourceSets.main.allSource)
from(file("$projectDir/LICENSE"))
getArchiveClassifier().set('sources')
}
@@ -532,7 +524,10 @@ task shadowDevJar(type: ShadowJar) {
}
minimize() // This will only allow shading for actually used classes
configurations = [project.configurations.shadowImplementation, project.configurations.shadowCompile]
configurations = [
project.configurations.shadowImplementation,
project.configurations.shadowCompile
]
}
task relocateShadowDevJar(type: ConfigureShadowRelocation) {
@@ -560,22 +555,22 @@ task devJar(type: Jar) {
attributes(getManifestAttributes())
}
if(usesShadowedDependencies.toBoolean()) {
if (usesShadowedDependencies.toBoolean()) {
dependsOn(circularResolverJar)
enabled = false
}
}
task apiJar(type: Jar) {
from (sourceSets.main.allSource) {
from(sourceSets.main.allSource) {
include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") + '/**'
}
from (sourceSets.main.output) {
from(sourceSets.main.output) {
include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") + '/**'
}
from (sourceSets.main.resources.srcDirs) {
from(sourceSets.main.resources.srcDirs) {
include("LICENSE")
}
@@ -583,11 +578,11 @@ task apiJar(type: Jar) {
}
artifacts {
if(!noPublishedSources) {
if (!noPublishedSources) {
archives sourcesJar
}
archives devJar
if(apiPackage) {
if (apiPackage) {
archives apiJar
}
}
@@ -605,10 +600,10 @@ publishing {
publications {
maven(MavenPublication) {
from components.java
if(usesShadowedDependencies.toBoolean()) {
if (usesShadowedDependencies.toBoolean()) {
artifact source: shadowJar, classifier: ""
}
if(!noPublishedSources) {
if (!noPublishedSources) {
artifact source: sourcesJar, classifier: "sources"
}
artifact source: usesShadowedDependencies.toBoolean() ? shadowDevJar : devJar, classifier: "dev"
@@ -623,8 +618,11 @@ publishing {
// remove extra garbage from minecraft and minecraftDeps configuration
pom.withXml {
def badArtifacts = [:].withDefault {[] as Set<String>}
for (configuration in [projectConfigs.minecraft, projectConfigs.minecraftDeps]) {
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
}
@@ -662,7 +660,7 @@ task updateBuildScript {
}
}
if (isNewBuildScriptVersionAvailable(projectDir.toString())) {
if (!project.getGradle().startParameter.isOffline() && isNewBuildScriptVersionAvailable(projectDir.toString())) {
if (autoUpdateBuildScript.toBoolean()) {
performBuildScriptUpdate(projectDir.toString())
} else {
@@ -671,7 +669,40 @@ if (isNewBuildScriptVersionAvailable(projectDir.toString())) {
}
static URL availableBuildScriptUrl() {
new URL("https://raw.githubusercontent.com/GTNewHorizons/ExampleMod1.7.10/main/build.gradle")
new URL("https://raw.githubusercontent.com/GTNewHorizons/ExampleMod1.7.10/master/build.gradle")
}
static URL exampleSettingsGradleUrl() {
new URL("https://raw.githubusercontent.com/GTNewHorizons/ExampleMod1.7.10/master/settings.gradle.example")
}
static URL exampleGitAttributesUrl() {
new URL("https://raw.githubusercontent.com/GTNewHorizons/ExampleMod1.7.10/master/.gitattributes")
}
boolean verifyGitAttributes() {
def gitattributesFile = getFile(".gitattributes")
if (!gitattributesFile.exists()) {
println("Downloading default .gitattributes")
exampleGitAttributesUrl().withInputStream { i -> gitattributesFile.withOutputStream { it << i } }
exec {
workingDir '.'
commandLine 'git', 'add', '--renormalize', '.'
}
return true
}
return false
}
boolean verifySettingsGradle() {
def settingsFile = getFile("settings.gradle")
if (!settingsFile.exists()) {
println("Downloading default settings.gradle")
exampleSettingsGradleUrl().withInputStream { i -> settingsFile.withOutputStream { it << i } }
return true
}
return false
}
boolean performBuildScriptUpdate(String projectDir) {
@@ -679,6 +710,10 @@ boolean performBuildScriptUpdate(String projectDir) {
def buildscriptFile = getFile("build.gradle")
availableBuildScriptUrl().withInputStream { i -> buildscriptFile.withOutputStream { it << i } }
out.style(Style.Success).print("Build script updated. Please REIMPORT the project or RESTART your IDE!")
boolean settingsupdated = verifySettingsGradle()
settingsupdated = verifyGitAttributes() || settingsupdated
if (settingsupdated)
throw new GradleException("Settings has been updated, please re-run task.")
return true
}
return false
@@ -698,7 +733,7 @@ boolean isNewBuildScriptVersionAvailable(String projectDir) {
static String getVersionHash(String buildScriptContent) {
String versionLine = buildScriptContent.find("^//version: [a-z0-9]*")
if(versionLine != null) {
if (versionLine != null) {
return versionLine.split(": ").last()
}
return ""
@@ -724,16 +759,16 @@ task deobfParams {
overwrite false
}
if(!file(paramsCSV).exists()) {
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 ->
Files.lines(Paths.get(paramsCSV)).forEach { line ->
String[] cells = line.split(",")
if(cells.length > 2 && cells[0].matches("p_i?\\d+_\\d+_")) {
if (cells.length > 2 && cells[0].matches("p_i?\\d+_\\d+_")) {
params.put(cells[0], cells[1])
}
}
@@ -746,8 +781,8 @@ task deobfParams {
static int replaceParams(File file, Map<String, String> params) {
int fileCount = 0
if(file.isDirectory()) {
for(File f : file.listFiles()) {
if (file.isDirectory()) {
for (File f : file.listFiles()) {
fileCount += replaceParams(f, params)
}
return fileCount
@@ -756,14 +791,14 @@ static int replaceParams(File file, Map<String, String> params) {
try {
String content = new String(Files.readAllBytes(file.toPath()))
int hash = content.hashCode()
params.forEach{key, value ->
params.forEach { key, value ->
content = content.replaceAll(key, value)
}
if(hash != content.hashCode()) {
if (hash != content.hashCode()) {
Files.write(file.toPath(), content.getBytes("UTF-8"))
return 1
}
} catch(Exception e) {
} catch (Exception e) {
e.printStackTrace()
}
return 0
@@ -775,27 +810,27 @@ static unzip(String zipFileName, String outputDir) {
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()
}
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()
}
@@ -814,16 +849,16 @@ def deobf(String sourceURL) {
//get rid of directories:
int lastSlash = fileName.lastIndexOf("/")
if(lastSlash > 0) {
if (lastSlash > 0) {
fileName = fileName.substring(lastSlash + 1)
}
//get rid of extension:
if(fileName.endsWith(".jar") || fileName.endsWith(".litemod")) {
if (fileName.endsWith(".jar") || fileName.endsWith(".litemod")) {
fileName = fileName.substring(0, fileName.lastIndexOf("."))
}
String hostName = url.getHost()
if(hostName.startsWith("www.")) {
if (hostName.startsWith("www.")) {
hostName = hostName.substring(4)
}
List parts = Arrays.asList(hostName.split("\\."))
@@ -831,7 +866,7 @@ def deobf(String sourceURL) {
hostName = String.join(".", parts)
return deobf(sourceURL, "$hostName/$fileName")
} catch(Exception e) {
} catch (Exception e) {
return deobf(sourceURL, "deobf/${sourceURL.hashCode()}")
}
}
@@ -846,12 +881,13 @@ def deobf(String sourceURL, String rawFileName) {
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()) {
if (file(deobfFile).exists()) {
return files(deobfFile)
}
String mappingsVer
if(remoteMappings) {
String remoteMappings = project.hasProperty('remoteMappings') ? project.remoteMappings : 'https://raw.githubusercontent.com/MinecraftForge/FML/1.7.10/conf/'
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"
@@ -887,7 +923,7 @@ def deobf(String sourceURL, String rawFileName) {
def zipMappings(String zipPath, String url, String bon2Dir) {
File zipFile = new File(zipPath)
if(zipFile.exists()) {
if (zipFile.exists()) {
return
}
+7 -6
View File
@@ -1,10 +1,11 @@
// Add your dependencies here
dependencies {
compile("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-91-GTNH:dev")
compile("com.github.GTNewHorizons:Baubles:1.0.1.14:dev")
compile("curse.maven:cofh-core-69162:2388751")
compile("com.github.GTNewHorizons:NotEnoughItems:2.2.12-GTNH:dev")
compile("com.github.GTNewHorizons:CodeChickenLib:1.1.5.3:dev")
compileOnly("com.github.GTNewHorizons:EnderIO:2.3.1.32:dev") { transitive = false }
compile("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta-99-GTNH:dev")
compile("com.github.GTNewHorizons:Baubles:1.0.1.14:dev")
compile("curse.maven:cofh-core-69162:2388751")
compile("com.github.GTNewHorizons:NotEnoughItems:2.2.27-GTNH:dev")
compile("com.github.GTNewHorizons:CodeChickenLib:1.1.5.4:dev")
compileOnly("com.github.GTNewHorizons:MouseTweaks:2.4.5-GTNH:dev") { transitive = false }
compileOnly("com.github.GTNewHorizons:EnderIO:2.3.1.43:dev") { transitive = false }
}
+10
View File
@@ -0,0 +1,10 @@
plugins {
id 'com.diffplug.blowdryerSetup' version '1.6.0'
}
apply plugin: 'com.diffplug.blowdryerSetup'
blowdryerSetup {
github('GTNewHorizons/ExampleMod1.7.10', 'tag', '0.1.5')
//devLocal '.' // Use this when testing config updates locally
}
@@ -4,47 +4,29 @@ import appeng.api.AEApi;
import appeng.api.definitions.IDefinitions;
import appeng.api.definitions.IParts;
import appeng.api.storage.ITerminalHost;
import appeng.core.AEConfig;
import appeng.core.localization.GuiText;
import appeng.client.gui.widgets.GuiTabButton;
import appeng.container.implementations.ContainerCraftAmount;
import appeng.helpers.Reflected;
import appeng.util.calculators.ArithHelper;
import appeng.util.calculators.Calculator;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.p455w0rd.wirelesscraftingterminal.client.gui.widgets.GuiTabButton;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerCraftAmount;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.NetworkHandler;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketCraftRequest;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketSwitchGuis;
import net.p455w0rd.wirelesscraftingterminal.helpers.WirelessTerminalGuiObject;
import net.p455w0rd.wirelesscraftingterminal.items.ItemEnum;
import net.p455w0rd.wirelesscraftingterminal.items.ItemWirelessCraftingTerminal;
import net.p455w0rd.wirelesscraftingterminal.reference.Reference;
public class GuiCraftAmount extends WCTBaseGui {
private GuiTextField amountToCraft;
public class GuiCraftAmount extends appeng.client.gui.implementations.GuiCraftAmount {
private GuiTabButton originalGuiBtn;
private GuiButton next;
private GuiButton plus1;
private GuiButton plus10;
private GuiButton plus100;
private GuiButton plus1000;
private GuiButton minus1;
private GuiButton minus10;
private GuiButton minus100;
private GuiButton minus1000;
private ItemStack myIcon;
private int originalGui;
@Reflected
public GuiCraftAmount(final InventoryPlayer inventoryPlayer, final ITerminalHost te) {
super(new ContainerCraftAmount(inventoryPlayer, te));
super(inventoryPlayer, te);
ItemStack is = new ItemStack(ItemEnum.WIRELESS_CRAFTING_TERMINAL.getItem());
((ItemWirelessCraftingTerminal) is.getItem()).injectAEPower(is, 6400001);
myIcon = is;
@@ -54,24 +36,11 @@ public class GuiCraftAmount extends WCTBaseGui {
@Override
public void initGui() {
super.initGui();
// Remove the autogenerated button which takes you to the AE2 wireless terminal GUI
if (this.buttonList.get(this.buttonList.size() - 1) instanceof GuiTabButton) {
this.buttonList.remove(this.buttonList.size() - 1);
}
final int a = AEConfig.instance.craftItemsByStackAmounts(0);
final int b = AEConfig.instance.craftItemsByStackAmounts(1);
final int c = AEConfig.instance.craftItemsByStackAmounts(2);
final int d = AEConfig.instance.craftItemsByStackAmounts(3);
this.buttonList.add(this.plus1 = new GuiButton(0, this.guiLeft + 20, this.guiTop + 26, 22, 20, "+" + a));
this.buttonList.add(this.plus10 = new GuiButton(0, this.guiLeft + 48, this.guiTop + 26, 28, 20, "+" + b));
this.buttonList.add(this.plus100 = new GuiButton(0, this.guiLeft + 82, this.guiTop + 26, 32, 20, "+" + c));
this.buttonList.add(this.plus1000 = new GuiButton(0, this.guiLeft + 120, this.guiTop + 26, 38, 20, "+" + d));
this.buttonList.add(this.minus1 = new GuiButton(0, this.guiLeft + 20, this.guiTop + 75, 22, 20, "-" + a));
this.buttonList.add(this.minus10 = new GuiButton(0, this.guiLeft + 48, this.guiTop + 75, 28, 20, "-" + b));
this.buttonList.add(this.minus100 = new GuiButton(0, this.guiLeft + 82, this.guiTop + 75, 32, 20, "-" + c));
this.buttonList.add(this.minus1000 = new GuiButton(0, this.guiLeft + 120, this.guiTop + 75, 38, 20, "-" + d));
this.buttonList.add(
this.next = new GuiButton(0, this.guiLeft + 128, this.guiTop + 51, 38, 20, GuiText.Next.getLocal()));
final Object target = ((ContainerCraftAmount) this.inventorySlots).getTarget();
final IDefinitions definitions = AEApi.instance().definitions();
final IParts parts = definitions.parts();
@@ -85,120 +54,14 @@ public class GuiCraftAmount extends WCTBaseGui {
this.originalGuiBtn = new GuiTabButton(
this.guiLeft + 154, this.guiTop - 4, myIcon, myIcon.getDisplayName(), itemRender));
}
this.amountToCraft = new GuiTextField(
this.fontRendererObj, this.guiLeft + 62, this.guiTop + 57, 59, this.fontRendererObj.FONT_HEIGHT);
this.amountToCraft.setEnableBackgroundDrawing(false);
this.amountToCraft.setMaxStringLength(16);
this.amountToCraft.setTextColor(0xFFFFFF);
this.amountToCraft.setVisible(true);
this.amountToCraft.setFocused(true);
this.amountToCraft.setText("1");
this.amountToCraft.setSelectionPos(0);
}
@Override
public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.fontRendererObj.drawString(GuiText.SelectAmount.getLocal(), 8, 6, 4210752);
}
@Override
public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.next.displayString = isShiftKeyDown() ? GuiText.Start.getLocal() : GuiText.Next.getLocal();
this.bindTexture("appliedenergistics2", "guis/craftAmt.png");
this.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize);
try {
String out = this.amountToCraft.getText();
double resultD = Calculator.conversion(out);
int resultI = roundDouble(resultD);
this.next.enabled = resultI > 0;
} catch (final NumberFormatException e) {
this.next.enabled = false;
}
this.amountToCraft.drawTextBox();
}
@Override
protected void keyTyped(final char character, final int key) {
if (!this.checkHotbarKeys(key)) {
if (key == 28) {
this.actionPerformed(this.next);
}
this.amountToCraft.textboxKeyTyped(character, key);
super.keyTyped(character, key);
}
}
@Override
protected void actionPerformed(final GuiButton btn) {
super.actionPerformed(btn);
try {
if (btn == this.originalGuiBtn) {
NetworkHandler.instance.sendToServer(new PacketSwitchGuis(this.originalGui));
}
if (btn == this.next && btn.enabled) {
double resultD = Calculator.conversion(this.amountToCraft.getText());
int resultI = roundDouble(resultD);
NetworkHandler.instance.sendToServer(new PacketCraftRequest(resultI, isShiftKeyDown()));
}
} catch (final NumberFormatException e) {
// nope..
this.amountToCraft.setText("1");
}
final boolean isPlus = btn == this.plus1 || btn == this.plus10 || btn == this.plus100 || btn == this.plus1000;
final boolean isMinus =
btn == this.minus1 || btn == this.minus10 || btn == this.minus100 || btn == this.minus1000;
if (isPlus || isMinus) {
this.addQty(this.getQty(btn));
}
}
private void addQty(final int i) {
try {
String out = this.amountToCraft.getText();
double resultD = Calculator.conversion(out);
int resultI = roundDouble(resultD);
if (resultI == 1 && i > 1) {
resultI = 0;
}
resultI += i;
if (resultI < 1) {
resultI = 1;
}
out = Integer.toString(resultI);
this.amountToCraft.setText(out);
} catch (final NumberFormatException e) {
// :P
}
}
protected String getBackground() {
return "guis/craftAmt.png";
}
private int roundDouble(double num) {
if (num <= 0 || Double.isNaN(num)) {
return 0;
} else {
return (int) ArithHelper.round(num, 0);
if (btn == this.originalGuiBtn) {
NetworkHandler.instance.sendToServer(new PacketSwitchGuis(this.originalGui));
}
}
}
@@ -1,514 +1,18 @@
package net.p455w0rd.wirelesscraftingterminal.client.gui;
import appeng.api.AEApi;
import appeng.api.storage.ITerminalHost;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import appeng.core.localization.GuiText;
import appeng.util.Platform;
import com.google.common.base.Joiner;
import java.io.IOException;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.p455w0rd.wirelesscraftingterminal.client.gui.widgets.GuiScrollbar;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerCraftConfirm;
import net.p455w0rd.wirelesscraftingterminal.common.utils.WCTLog;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.NetworkHandler;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketSwitchGuis;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketValueConfig;
import net.p455w0rd.wirelesscraftingterminal.helpers.WirelessTerminalGuiObject;
import net.p455w0rd.wirelesscraftingterminal.reference.Reference;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11;
public class GuiCraftConfirm extends WCTBaseGui {
private final ContainerCraftConfirm ccc;
private final int rows = 5;
private final IItemList<IAEItemStack> storage = AEApi.instance().storage().createItemList();
private final IItemList<IAEItemStack> pending = AEApi.instance().storage().createItemList();
private final IItemList<IAEItemStack> missing = AEApi.instance().storage().createItemList();
private final List<IAEItemStack> visual = new ArrayList<IAEItemStack>();
private int OriginalGui = 0;
private GuiButton cancel;
private GuiButton start;
private GuiButton selectCPU;
private int tooltip = -1;
InventoryPlayer inventoryPlayer;
private static int jobBytes;
private static int currCPUAvailBytes;
private static int currCPUCoCPUs;
public class GuiCraftConfirm extends appeng.client.gui.implementations.GuiCraftConfirm {
public GuiCraftConfirm(final InventoryPlayer inventoryPlayer, final ITerminalHost te) {
super(new ContainerCraftConfirm(inventoryPlayer, te));
this.xSize = 238;
this.ySize = 206;
final GuiScrollbar scrollbar = new GuiScrollbar();
this.setScrollBar(scrollbar);
this.ccc = (ContainerCraftConfirm) this.inventorySlots;
this.inventoryPlayer = inventoryPlayer;
if (te instanceof WirelessTerminalGuiObject) {
this.OriginalGui = Reference.GUI_WCT;
}
}
boolean isAutoStart() {
return ((ContainerCraftConfirm) this.inventorySlots).isAutoStart();
}
@SuppressWarnings("unchecked")
@Override
public void initGui() {
super.initGui();
this.start =
new GuiButton(0, this.guiLeft + 162, this.guiTop + this.ySize - 25, 50, 20, GuiText.Start.getLocal());
this.start.enabled = false;
this.buttonList.add(this.start);
this.selectCPU = new GuiButton(
0,
this.guiLeft + (219 - 180) / 2,
this.guiTop + this.ySize - 68,
180,
20,
GuiText.CraftingCPU.getLocal() + ": " + GuiText.Automatic);
this.selectCPU.enabled = false;
this.buttonList.add(this.selectCPU);
if (this.OriginalGui > 0) {
this.cancel = new GuiButton(
0, this.guiLeft + 6, this.guiTop + this.ySize - 25, 50, 20, GuiText.Cancel.getLocal());
}
this.buttonList.add(this.cancel);
super(inventoryPlayer, te);
}
@Override
public void drawScreen(final int mouseX, final int mouseY, final float btn) {
this.updateCPUButtonText();
this.start.enabled = !(this.ccc.hasNoCPU() || this.isSimulation());
this.selectCPU.enabled = !this.isSimulation();
final int gx = (this.width - this.xSize) / 2;
final int gy = (this.height - this.ySize) / 2;
this.tooltip = -1;
final int offY = 23;
int y = 0;
int x = 0;
for (int z = 0; z <= 4 * 5; z++) {
final int minX = gx + 9 + x * 67;
final int minY = gy + 22 + y * offY;
if (minX < mouseX && minX + 67 > mouseX) {
if (minY < mouseY && minY + offY - 2 > mouseY) {
this.tooltip = z;
break;
}
}
x++;
if (x > 2) {
y++;
x = 0;
}
}
super.drawScreen(mouseX, mouseY, btn);
}
private void updateCPUButtonText() {
String btnTextText = GuiText.CraftingCPU.getLocal() + ": " + GuiText.Automatic.getLocal();
if (this.ccc.getSelectedCpu() >= 0) // && status.selectedCpu < status.cpus.size() )
{
if (this.ccc.getName().length() > 0) {
final String name = this.ccc
.getName()
.substring(0, Math.min(20, this.ccc.getName().length()));
btnTextText = GuiText.CraftingCPU.getLocal() + ": " + name;
} else {
btnTextText = GuiText.CraftingCPU.getLocal() + ": #" + this.ccc.getSelectedCpu();
}
}
if (this.ccc.hasNoCPU()) {
btnTextText = GuiText.NoCraftingCPUs.getLocal();
}
this.selectCPU.displayString = btnTextText;
}
private boolean isSimulation() {
return ((ContainerCraftConfirm) this.inventorySlots).isSimulation();
}
public int getJobBytes() {
return GuiCraftConfirm.jobBytes;
}
public static void setJobBytes(int numBytes) {
jobBytes = numBytes;
}
public int getCurrentCPUAvailBytes() {
return GuiCraftConfirm.currCPUAvailBytes;
}
public static void setCurrentCPUAvailBytes(int numBytes) {
currCPUAvailBytes = numBytes;
}
public int getCurrentCPUCoCPUs() {
return GuiCraftConfirm.currCPUCoCPUs;
}
public static void setCurrentCPUCoCPUs(int coCPUs) {
currCPUCoCPUs = coCPUs;
}
@Override
public void drawFG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
int bytesUsed = this.getJobBytes();
int availBytes = this.getCurrentCPUAvailBytes();
int availCoCPUs = this.getCurrentCPUCoCPUs();
String byteUsed = NumberFormat.getInstance().format(bytesUsed);
final String Add =
bytesUsed > 0 ? (byteUsed + ' ' + GuiText.BytesUsed.getLocal()) : GuiText.CalculatingWait.getLocal();
this.fontRendererObj.drawString(GuiText.CraftingPlan.getLocal() + " -- " + Add, 8, 7, 4210752);
String dsp = null;
if (this.isSimulation()) {
dsp = GuiText.Simulation.getLocal();
} else {
dsp = availBytes > 0
? (GuiText.Bytes.getLocal() + ": " + availBytes + " : " + GuiText.CoProcessors.getLocal() + ": "
+ availCoCPUs)
: GuiText.Bytes.getLocal() + ": N/A : " + GuiText.CoProcessors.getLocal() + ": N/A";
}
final int offset = (219 - this.fontRendererObj.getStringWidth(dsp)) / 2;
this.fontRendererObj.drawString(dsp, offset, 165, 4210752);
final int sectionLength = 67;
int x = 0;
int y = 0;
final int xo = 9;
final int yo = 22;
final int viewStart = this.getScrollBar().getCurrentScroll() * 3;
final int viewEnd = viewStart + 3 * this.rows;
String dspToolTip = "";
final List<String> lineList = new LinkedList<String>();
int toolPosX = 0;
int toolPosY = 0;
final int offY = 23;
for (int z = viewStart; z < Math.min(viewEnd, this.visual.size()); z++) {
final IAEItemStack refStack = this.visual.get(z); // repo.getReferenceItem( z );
if (refStack != null) {
GL11.glPushMatrix();
GL11.glScaled(0.5, 0.5, 0.5);
final IAEItemStack stored = this.storage.findPrecise(refStack);
final IAEItemStack pendingStack = this.pending.findPrecise(refStack);
final IAEItemStack missingStack = this.missing.findPrecise(refStack);
int lines = 0;
if (stored != null && stored.getStackSize() > 0) {
lines++;
}
if (pendingStack != null && pendingStack.getStackSize() > 0) {
lines++;
}
if (pendingStack != null && pendingStack.getStackSize() > 0) {
lines++;
}
final int negY = ((lines - 1) * 5) / 2;
int downY = 0;
if (stored != null && stored.getStackSize() > 0) {
String str = Long.toString(stored.getStackSize());
if (stored.getStackSize() >= 10000) {
str = Long.toString(stored.getStackSize() / 1000) + 'k';
}
if (stored.getStackSize() >= 10000000) {
str = Long.toString(stored.getStackSize() / 1000000) + 'm';
}
str = GuiText.FromStorage.getLocal() + ": " + str;
final int w = 4 + this.fontRendererObj.getStringWidth(str);
this.fontRendererObj.drawString(
str,
(int) ((x * (1 + sectionLength) + xo + sectionLength - 19 - (w * 0.5)) * 2),
(y * offY + yo + 6 - negY + downY) * 2,
4210752);
if (this.tooltip == z - viewStart) {
lineList.add(GuiText.FromStorage.getLocal() + ": " + Long.toString(stored.getStackSize()));
}
downY += 5;
}
boolean red = false;
if (missingStack != null && missingStack.getStackSize() > 0) {
String str = Long.toString(missingStack.getStackSize());
if (missingStack.getStackSize() >= 10000) {
str = Long.toString(missingStack.getStackSize() / 1000) + 'k';
}
if (missingStack.getStackSize() >= 10000000) {
str = Long.toString(missingStack.getStackSize() / 1000000) + 'm';
}
str = GuiText.Missing.getLocal() + ": " + str;
final int w = 4 + this.fontRendererObj.getStringWidth(str);
this.fontRendererObj.drawString(
str,
(int) ((x * (1 + sectionLength) + xo + sectionLength - 19 - (w * 0.5)) * 2),
(y * offY + yo + 6 - negY + downY) * 2,
4210752);
if (this.tooltip == z - viewStart) {
lineList.add(GuiText.Missing.getLocal() + ": " + Long.toString(missingStack.getStackSize()));
}
red = true;
downY += 5;
}
if (pendingStack != null && pendingStack.getStackSize() > 0) {
String str = Long.toString(pendingStack.getStackSize());
if (pendingStack.getStackSize() >= 10000) {
str = Long.toString(pendingStack.getStackSize() / 1000) + 'k';
}
if (pendingStack.getStackSize() >= 10000000) {
str = Long.toString(pendingStack.getStackSize() / 1000000) + 'm';
}
str = GuiText.ToCraft.getLocal() + ": " + str;
final int w = 4 + this.fontRendererObj.getStringWidth(str);
this.fontRendererObj.drawString(
str,
(int) ((x * (1 + sectionLength) + xo + sectionLength - 19 - (w * 0.5)) * 2),
(y * offY + yo + 6 - negY + downY) * 2,
4210752);
if (this.tooltip == z - viewStart) {
lineList.add(GuiText.ToCraft.getLocal() + ": " + Long.toString(pendingStack.getStackSize()));
}
}
GL11.glPopMatrix();
final int posX = x * (1 + sectionLength) + xo + sectionLength - 19;
final int posY = y * offY + yo;
final ItemStack is = refStack.copy().getItemStack();
if (this.tooltip == z - viewStart) {
dspToolTip = Platform.getItemDisplayName(is);
if (lineList.size() > 0) {
addItemTooltip(is, lineList);
dspToolTip = dspToolTip + '\n' + Joiner.on("\n").join(lineList);
}
toolPosX = x * (1 + sectionLength) + xo + sectionLength - 8;
toolPosY = y * offY + yo;
}
this.drawItem(posX, posY, is);
if (red) {
final int startX = x * (1 + sectionLength) + xo;
final int startY = posY - 4;
drawRect(startX, startY, startX + sectionLength, startY + offY, 0x1AFF0000);
}
x++;
if (x > 2) {
y++;
x = 0;
}
}
}
if (this.tooltip >= 0 && dspToolTip.length() > 0) {
this.drawTooltip(toolPosX, toolPosY + 10, 0, dspToolTip);
}
}
@Override
public void drawBG(final int offsetX, final int offsetY, final int mouseX, final int mouseY) {
this.setScrollBar();
this.bindTexture("appliedenergistics2", "guis/craftingreport.png");
this.drawTexturedModalRect(offsetX, offsetY, 0, 0, this.xSize, this.ySize);
}
private void setScrollBar() {
final int size = this.visual.size();
this.getScrollBar().setTop(19).setLeft(218).setHeight(114);
this.getScrollBar().setRange(0, (size + 2) / 3 - this.rows, 1);
}
public void postUpdate(final List<IAEItemStack> list, final byte ref) {
switch (ref) {
case 0:
for (final IAEItemStack l : list) {
this.handleInput(this.storage, l);
}
break;
case 1:
for (final IAEItemStack l : list) {
this.handleInput(this.pending, l);
}
break;
case 2:
for (final IAEItemStack l : list) {
this.handleInput(this.missing, l);
}
break;
}
for (final IAEItemStack l : list) {
final long amt = this.getTotal(l);
if (amt <= 0) {
this.deleteVisualStack(l);
} else {
final IAEItemStack is = this.findVisualStack(l);
is.setStackSize(amt);
}
}
this.setScrollBar();
}
private void handleInput(final IItemList<IAEItemStack> s, final IAEItemStack l) {
IAEItemStack a = s.findPrecise(l);
if (l.getStackSize() <= 0) {
if (a != null) {
a.reset();
}
} else {
if (a == null) {
s.add(l.copy());
a = s.findPrecise(l);
}
if (a != null) {
a.setStackSize(l.getStackSize());
}
}
}
private long getTotal(final IAEItemStack is) {
final IAEItemStack a = this.storage.findPrecise(is);
final IAEItemStack c = this.pending.findPrecise(is);
final IAEItemStack m = this.missing.findPrecise(is);
long total = 0;
if (a != null) {
total += a.getStackSize();
}
if (c != null) {
total += c.getStackSize();
}
if (m != null) {
total += m.getStackSize();
}
return total;
}
private void deleteVisualStack(final IAEItemStack l) {
final Iterator<IAEItemStack> i = this.visual.iterator();
while (i.hasNext()) {
final IAEItemStack o = i.next();
if (o.equals(l)) {
i.remove();
return;
}
}
}
private IAEItemStack findVisualStack(final IAEItemStack l) {
for (final IAEItemStack o : this.visual) {
if (o.equals(l)) {
return o;
}
}
final IAEItemStack stack = l.copy();
this.visual.add(stack);
return stack;
}
@Override
protected void keyTyped(final char character, final int key) {
if (!this.checkHotbarKeys(key)) {
if (key == 28) {
this.actionPerformed(this.start);
}
super.keyTyped(character, key);
}
}
@Override
protected void actionPerformed(final GuiButton btn) {
super.actionPerformed(btn);
final boolean backwards = Mouse.isButtonDown(1);
if (btn == this.selectCPU) {
try {
NetworkHandler.instance.sendToServer(
new PacketValueConfig("Terminal.Cpu", backwards ? "Prev" : "Next"));
} catch (final IOException e) {
WCTLog.debug(e.getMessage());
}
}
if (btn == this.cancel) {
NetworkHandler.instance.sendToServer(new PacketSwitchGuis(this.OriginalGui));
}
if (btn == this.start) {
try {
NetworkHandler.instance.sendToServer(new PacketValueConfig("Terminal.Start", "Start"));
} catch (final Throwable e) {
WCTLog.debug(e.getMessage());
}
}
public void switchToOriginalGUI() {
NetworkHandler.instance.sendToServer(new PacketSwitchGuis(Reference.GUI_WCT));
}
}
@@ -4,11 +4,11 @@ import appeng.api.AEApi;
import appeng.api.definitions.IDefinitions;
import appeng.api.definitions.IParts;
import appeng.api.storage.ITerminalHost;
import appeng.client.gui.widgets.GuiTabButton;
import appeng.container.implementations.ContainerCraftingStatus;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.item.ItemStack;
import net.p455w0rd.wirelesscraftingterminal.client.gui.widgets.GuiTabButton;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.NetworkHandler;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketSwitchGuis;
import net.p455w0rd.wirelesscraftingterminal.helpers.WirelessTerminalGuiObject;
@@ -1,820 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.client.gui;
import appeng.api.storage.data.IAEItemStack;
import appeng.client.gui.widgets.ITooltip;
import appeng.container.slot.SlotRestrictedInput;
import appeng.helpers.InventoryAction;
import com.google.common.base.Joiner;
import com.google.common.base.Stopwatch;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.ObfuscationReflectionHelper;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.p455w0rd.wirelesscraftingterminal.client.gui.widgets.GuiScrollbar;
import net.p455w0rd.wirelesscraftingterminal.client.me.InternalSlotME;
import net.p455w0rd.wirelesscraftingterminal.client.me.SlotDisconnected;
import net.p455w0rd.wirelesscraftingterminal.client.me.SlotME;
import net.p455w0rd.wirelesscraftingterminal.client.me.WCTRenderItem;
import net.p455w0rd.wirelesscraftingterminal.common.container.WCTBaseContainer;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.AppEngCraftingSlot;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.AppEngSlot;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.AppEngSlot.hasCalculatedValidness;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.OptionalSlotFake;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotCraftingTerm;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotDisabled;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotFake;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotInaccessible;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotOutput;
import net.p455w0rd.wirelesscraftingterminal.common.utils.WCTLog;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.NetworkHandler;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketInventoryAction;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketSwapSlots;
import net.p455w0rd.wirelesscraftingterminal.integration.IntegrationRegistry;
import net.p455w0rd.wirelesscraftingterminal.integration.IntegrationType;
import net.p455w0rd.wirelesscraftingterminal.integration.abstraction.INEI;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
public abstract class WCTBaseGui extends GuiContainer {
private static boolean switchingGuis;
private final List<InternalSlotME> meSlots = new LinkedList<InternalSlotME>();
// drag y
private final Set<Slot> drag_click = new HashSet<Slot>();
private final WCTRenderItem aeRenderItem = new WCTRenderItem();
private GuiScrollbar scrollBar = null;
private boolean disableShiftClick = false;
private Stopwatch dbl_clickTimer = Stopwatch.createStarted();
private ItemStack dbl_whichItem;
private Slot bl_clicked;
private boolean subGui;
public WCTBaseGui(final Container container) {
super(container);
this.subGui = switchingGuis;
switchingGuis = false;
}
protected static String join(final Collection<String> toolTip, final String delimiter) {
final Joiner joiner = Joiner.on(delimiter);
return joiner.join(toolTip);
}
protected int getQty(final GuiButton btn) {
try {
final DecimalFormat df = new DecimalFormat("+#;-#");
return df.parse(btn.displayString).intValue();
} catch (final ParseException e) {
return 0;
}
}
public boolean isSubGui() {
return this.subGui;
}
@Override
public void initGui() {
super.initGui();
final List<Slot> slots = this.getInventorySlots();
final Iterator<Slot> i = slots.iterator();
while (i.hasNext()) {
if (i.next() instanceof SlotME) {
i.remove();
}
}
for (final InternalSlotME me : this.meSlots) {
slots.add(new SlotME(me));
}
}
@SuppressWarnings("unchecked")
private List<Slot> getInventorySlots() {
return this.inventorySlots.inventorySlots;
}
@Override
public void drawScreen(final int mouseX, final int mouseY, final float btn) {
super.drawScreen(mouseX, mouseY, btn);
final boolean hasClicked = Mouse.isButtonDown(0);
if (hasClicked && this.scrollBar != null) {
this.scrollBar.click(this, mouseX - this.guiLeft, mouseY - this.guiTop);
}
for (final Object c : this.buttonList) {
if (c instanceof ITooltip) {
final ITooltip tooltip = (ITooltip) c;
final int x = tooltip.xPos(); // ((GuiImgButton) c).xPosition;
int y = tooltip.yPos(); // ((GuiImgButton) c).yPosition;
if (x < mouseX && x + tooltip.getWidth() > mouseX && tooltip.isVisible()) {
if (y < mouseY && y + tooltip.getHeight() > mouseY) {
if (y < 15) {
y = 15;
}
final String msg = tooltip.getMessage();
if (msg != null) {
this.drawTooltip(x + 11, y + 4, 0, msg);
}
}
}
}
}
}
public void drawTooltip(final int par2, final int par3, final int forceWidth, final String message) {
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
RenderHelper.disableStandardItemLighting();
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_DEPTH_TEST);
final String[] var4 = message.split("\n");
if (var4.length > 0) {
int var5 = 0;
int var6;
int var7;
for (var6 = 0; var6 < var4.length; ++var6) {
var7 = this.fontRendererObj.getStringWidth(var4[var6]);
if (var7 > var5) {
var5 = var7;
}
}
var6 = par2 + 12;
var7 = par3 - 12;
int var9 = 8;
if (var4.length > 1) {
var9 += 2 + (var4.length - 1) * 10;
}
if (this.guiTop + var7 + var9 + 6 > this.height) {
var7 = this.height - var9 - this.guiTop - 6;
}
if (forceWidth > 0) {
var5 = forceWidth;
}
this.zLevel = 300.0F;
itemRender.zLevel = 300.0F;
final int var10 = -267386864;
this.drawGradientRect(var6 - 3, var7 - 4, var6 + var5 + 3, var7 - 3, var10, var10);
this.drawGradientRect(var6 - 3, var7 + var9 + 3, var6 + var5 + 3, var7 + var9 + 4, var10, var10);
this.drawGradientRect(var6 - 3, var7 - 3, var6 + var5 + 3, var7 + var9 + 3, var10, var10);
this.drawGradientRect(var6 - 4, var7 - 3, var6 - 3, var7 + var9 + 3, var10, var10);
this.drawGradientRect(var6 + var5 + 3, var7 - 3, var6 + var5 + 4, var7 + var9 + 3, var10, var10);
final int var11 = 1347420415;
final int var12 = (var11 & 16711422) >> 1 | var11 & -16777216;
this.drawGradientRect(var6 - 3, var7 - 3 + 1, var6 - 3 + 1, var7 + var9 + 3 - 1, var11, var12);
this.drawGradientRect(var6 + var5 + 2, var7 - 3 + 1, var6 + var5 + 3, var7 + var9 + 3 - 1, var11, var12);
this.drawGradientRect(var6 - 3, var7 - 3, var6 + var5 + 3, var7 - 3 + 1, var11, var11);
this.drawGradientRect(var6 - 3, var7 + var9 + 2, var6 + var5 + 3, var7 + var9 + 3, var12, var12);
for (int var13 = 0; var13 < var4.length; ++var13) {
String var14 = var4[var13];
if (var13 == 0) {
var14 = '\u00a7' + Integer.toHexString(15) + var14;
} else {
var14 = "\u00a77" + var14;
}
this.fontRendererObj.drawStringWithShadow(var14, var6, var7, -1);
if (var13 == 0) {
var7 += 2;
}
var7 += 10;
}
this.zLevel = 0.0F;
itemRender.zLevel = 0.0F;
}
GL11.glPopAttrib();
}
@Override
protected final void drawGuiContainerForegroundLayer(final int x, final int y) {
final int ox = this.guiLeft; // (width - xSize) / 2;
final int oy = this.guiTop; // (height - ySize) / 2;
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
if (this.scrollBar != null) {
this.scrollBar.draw(this);
}
this.drawFG(ox, oy, x, y);
}
public abstract void drawFG(int offsetX, int offsetY, int mouseX, int mouseY);
@Override
protected final void drawGuiContainerBackgroundLayer(final float f, final int x, final int y) {
final int ox = this.guiLeft; // (width - xSize) / 2;
final int oy = this.guiTop; // (height - ySize) / 2;
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
this.drawBG(ox, oy, x, y);
final List<Slot> slots = this.getInventorySlots();
for (final Slot slot : slots) {
if (slot instanceof OptionalSlotFake) {
final OptionalSlotFake fs = (OptionalSlotFake) slot;
if (fs.renderDisabled()) {
if (fs.isEnabled()) {
this.drawTexturedModalRect(
ox + fs.xDisplayPosition - 1,
oy + fs.yDisplayPosition - 1,
fs.getSourceX() - 1,
fs.getSourceY() - 1,
18,
18);
} else {
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.4F);
GL11.glEnable(GL11.GL_BLEND);
this.drawTexturedModalRect(
ox + fs.xDisplayPosition - 1,
oy + fs.yDisplayPosition - 1,
fs.getSourceX() - 1,
fs.getSourceY() - 1,
18,
18);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glPopAttrib();
}
}
}
}
}
@Override
protected void mouseClicked(final int xCoord, final int yCoord, final int btn) {
this.drag_click.clear();
if (btn == 1) {
for (final Object o : this.buttonList) {
final GuiButton guibutton = (GuiButton) o;
if (guibutton.mousePressed(this.mc, xCoord, yCoord)) {
super.mouseClicked(xCoord, yCoord, 0);
return;
}
}
}
super.mouseClicked(xCoord, yCoord, btn);
}
@Override
protected void mouseClickMove(final int x, final int y, final int c, final long d) {
final Slot slot = this.getSlot(x, y);
final ItemStack itemstack = this.mc.thePlayer.inventory.getItemStack();
if (slot instanceof SlotFake && itemstack != null) {
this.drag_click.add(slot);
if (this.drag_click.size() > 1) {
for (final Slot dr : this.drag_click) {
final PacketInventoryAction p = new PacketInventoryAction(
c == 0 ? InventoryAction.PICKUP_OR_SET_DOWN : InventoryAction.PLACE_SINGLE,
dr.slotNumber,
0);
NetworkHandler.instance.sendToServer(p);
}
}
} else {
super.mouseClickMove(x, y, c, d);
}
}
@Override
protected void handleMouseClick(final Slot slot, final int slotIdx, final int ctrlDown, final int key) {
final EntityPlayer player = Minecraft.getMinecraft().thePlayer;
if (slot instanceof SlotFake) {
final InventoryAction action =
ctrlDown == 1 ? InventoryAction.SPLIT_OR_PLACE_SINGLE : InventoryAction.PICKUP_OR_SET_DOWN;
if (this.drag_click.size() > 1) {
return;
}
final PacketInventoryAction p = new PacketInventoryAction(action, slotIdx, 0);
NetworkHandler.instance.sendToServer(p);
return;
}
if (slot instanceof SlotCraftingTerm) {
if (key == 6) {
return; // prevent weird double clicks..
}
InventoryAction action = null;
if (key == 1) {
action = InventoryAction.CRAFT_SHIFT;
} else {
action = ctrlDown == 1 ? InventoryAction.CRAFT_STACK : InventoryAction.CRAFT_ITEM;
}
final PacketInventoryAction p = new PacketInventoryAction(action, slotIdx, 0);
NetworkHandler.instance.sendToServer(p);
return;
}
if (Keyboard.isKeyDown(Keyboard.KEY_SPACE)) {
if (this.enableSpaceClicking()) {
IAEItemStack stack = null;
if (slot instanceof SlotME) {
stack = ((SlotME) slot).getAEStack();
}
int slotNum = this.getInventorySlots().size();
if (!(slot instanceof SlotME) && slot != null) {
slotNum = slot.slotNumber;
}
((WCTBaseContainer) this.inventorySlots).setTargetStack(stack);
final PacketInventoryAction p = new PacketInventoryAction(InventoryAction.MOVE_REGION, slotNum, 0);
NetworkHandler.instance.sendToServer(p);
return;
}
}
if (slot instanceof SlotDisconnected) {
InventoryAction action = null;
switch (key) {
case 0: // pickup / set-down.
action = ctrlDown == 1 ? InventoryAction.SPLIT_OR_PLACE_SINGLE : InventoryAction.PICKUP_OR_SET_DOWN;
break;
case 1:
action = ctrlDown == 1 ? InventoryAction.PICKUP_SINGLE : InventoryAction.SHIFT_CLICK;
break;
case 3: // creative dupe:
if (player.capabilities.isCreativeMode) {
action = InventoryAction.CREATIVE_DUPLICATE;
}
break;
default:
case 4: // drop item:
case 6:
}
if (action != null) {
final PacketInventoryAction p = new PacketInventoryAction(
action,
slot.getSlotIndex(),
((SlotDisconnected) slot).getSlot().getId());
NetworkHandler.instance.sendToServer(p);
}
return;
}
if (slot instanceof SlotME) {
InventoryAction action = null;
IAEItemStack stack = null;
switch (key) {
case 0: // pickup / set-down.
action = ctrlDown == 1 ? InventoryAction.SPLIT_OR_PLACE_SINGLE : InventoryAction.PICKUP_OR_SET_DOWN;
stack = ((SlotME) slot).getAEStack();
if (stack != null
&& action == InventoryAction.PICKUP_OR_SET_DOWN
&& stack.getStackSize() == 0
&& player.inventory.getItemStack() == null) {
action = InventoryAction.AUTO_CRAFT;
}
break;
case 1:
action = ctrlDown == 1 ? InventoryAction.PICKUP_SINGLE : InventoryAction.SHIFT_CLICK;
stack = ((SlotME) slot).getAEStack();
break;
case 3: // creative dupe:
stack = ((SlotME) slot).getAEStack();
if (stack != null && stack.isCraftable()) {
action = InventoryAction.AUTO_CRAFT;
} else if (player.capabilities.isCreativeMode) {
final IAEItemStack slotItem = ((SlotME) slot).getAEStack();
if (slotItem != null) {
action = InventoryAction.CREATIVE_DUPLICATE;
}
}
break;
default:
case 4: // drop item:
case 6:
}
if (action != null) {
((WCTBaseContainer) this.inventorySlots).setTargetStack(stack);
final PacketInventoryAction p = new PacketInventoryAction(
action, this.getInventorySlots().size(), 0);
NetworkHandler.instance.sendToServer(p);
}
return;
}
if (!this.disableShiftClick && isShiftKeyDown()) {
this.disableShiftClick = true;
if (this.dbl_whichItem == null
|| this.bl_clicked != slot
|| this.dbl_clickTimer.elapsed(TimeUnit.MILLISECONDS) > 150) {
// some simple double click logic.
this.bl_clicked = slot;
this.dbl_clickTimer = Stopwatch.createStarted();
if (slot != null) {
this.dbl_whichItem = slot.getHasStack() ? slot.getStack().copy() : null;
} else {
this.dbl_whichItem = null;
}
} else if (this.dbl_whichItem != null) {
// a replica of the weird broken vanilla feature.
final List<Slot> slots = this.getInventorySlots();
for (final Slot inventorySlot : slots) {
if (inventorySlot != null
&& inventorySlot.canTakeStack(this.mc.thePlayer)
&& inventorySlot.getHasStack()
&& inventorySlot.inventory == slot.inventory
&& Container.func_94527_a(inventorySlot, this.dbl_whichItem, true)) {
this.handleMouseClick(inventorySlot, inventorySlot.slotNumber, ctrlDown, 1);
}
}
}
this.disableShiftClick = false;
}
super.handleMouseClick(slot, slotIdx, ctrlDown, key);
}
@Override
protected boolean checkHotbarKeys(final int keyCode) {
final Slot theSlot;
try {
theSlot = ObfuscationReflectionHelper.getPrivateValue(
GuiContainer.class, this, "theSlot", "field_147006_u", "f");
} catch (final Throwable t) {
return false;
}
if (this.mc.thePlayer.inventory.getItemStack() == null && theSlot != null) {
for (int j = 0; j < 9; ++j) {
if (keyCode == this.mc.gameSettings.keyBindsHotbar[j].getKeyCode()) {
final List<Slot> slots = this.getInventorySlots();
for (final Slot s : slots) {
if (s.getSlotIndex() == j
&& s.inventory == ((WCTBaseContainer) this.inventorySlots).getPlayerInv()) {
if (!s.canTakeStack(((WCTBaseContainer) this.inventorySlots).getPlayerInv().player)) {
return false;
}
}
}
if (theSlot.getSlotStackLimit() == 64) {
this.handleMouseClick(theSlot, theSlot.slotNumber, j, 2);
return true;
} else {
for (final Slot s : slots) {
if (s.getSlotIndex() == j
&& s.inventory == ((WCTBaseContainer) this.inventorySlots).getPlayerInv()) {
NetworkHandler.instance.sendToServer(
new PacketSwapSlots(s.slotNumber, theSlot.slotNumber));
return true;
}
}
}
}
}
}
return false;
}
@Override
public void onGuiClosed() {
super.onGuiClosed();
this.subGui = true; // in case the gui is reopened later ( i'm looking at you NEI )
}
protected Slot getSlot(final int mouseX, final int mouseY) {
final List<Slot> slots = this.getInventorySlots();
for (final Slot slot : slots) {
// isPointInRegion
if (this.func_146978_c(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, mouseX, mouseY)) {
return slot;
}
}
return null;
}
public abstract void drawBG(int offsetX, int offsetY, int mouseX, int mouseY);
@Override
public void handleMouseInput() {
super.handleMouseInput();
final int i = Mouse.getEventDWheel();
if (i != 0 && isShiftKeyDown()) {
final int x = Mouse.getEventX() * this.width / this.mc.displayWidth;
final int y = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1;
this.mouseWheelEvent(x, y, i / Math.abs(i));
} else if (i != 0 && this.scrollBar != null) {
this.scrollBar.wheel(i);
}
}
private void mouseWheelEvent(final int x, final int y, final int wheel) {
final Slot slot = this.getSlot(x, y);
if (slot instanceof SlotME) {
final IAEItemStack item = ((SlotME) slot).getAEStack();
if (item != null) {
((WCTBaseContainer) this.inventorySlots).setTargetStack(item);
final InventoryAction direction = wheel > 0 ? InventoryAction.ROLL_DOWN : InventoryAction.ROLL_UP;
final int times = Math.abs(wheel);
final int inventorySize = this.getInventorySlots().size();
for (int h = 0; h < times; h++) {
final PacketInventoryAction p = new PacketInventoryAction(direction, inventorySize, 0);
NetworkHandler.instance.sendToServer(p);
}
}
}
}
protected boolean enableSpaceClicking() {
return true;
}
public void bindTexture(final String base, final String file) {
final ResourceLocation loc = new ResourceLocation(base, "textures/" + file);
this.mc.getTextureManager().bindTexture(loc);
}
protected void drawItem(final int x, final int y, final ItemStack is) {
this.zLevel = 100.0F;
itemRender.zLevel = 100.0F;
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glEnable(GL11.GL_DEPTH_TEST);
RenderHelper.enableGUIStandardItemLighting();
itemRender.renderItemAndEffectIntoGUI(this.fontRendererObj, this.mc.renderEngine, is, x, y);
GL11.glPopAttrib();
itemRender.zLevel = 0.0F;
this.zLevel = 0.0F;
}
protected String getGuiDisplayName(final String in) {
return this.hasCustomInventoryName() ? this.getInventoryName() : in;
}
private boolean hasCustomInventoryName() {
if (this.inventorySlots instanceof WCTBaseContainer) {
return ((WCTBaseContainer) this.inventorySlots).getCustomName() != null;
}
return false;
}
private String getInventoryName() {
return ((WCTBaseContainer) this.inventorySlots).getCustomName();
}
private void drawSlot(final Slot s) {
if (s instanceof SlotME) {
final RenderItem pIR = this.setItemRender(this.aeRenderItem);
try {
this.zLevel = 100.0F;
itemRender.zLevel = 100.0F;
if (!this.isPowered()) {
GL11.glDisable(GL11.GL_LIGHTING);
drawRect(
s.xDisplayPosition,
s.yDisplayPosition,
16 + s.xDisplayPosition,
16 + s.yDisplayPosition,
0x66111111);
GL11.glEnable(GL11.GL_LIGHTING);
}
this.zLevel = 0.0F;
itemRender.zLevel = 0.0F;
this.aeRenderItem.setAeStack(((SlotME) s).getAEStack());
this.safeDrawSlot(s);
} catch (final Exception err) {
WCTLog.warning("WCT prevented crash while drawing slot: " + err.toString());
}
this.setItemRender(pIR);
return;
} else {
try {
final ItemStack is = s.getStack();
if (s instanceof AppEngSlot
&& (((AppEngSlot) s).renderIconWithItem() || is == null)
&& (((AppEngSlot) s).shouldDisplay())) {
final AppEngSlot aes = (AppEngSlot) s;
if (aes.getIcon() >= 0) {
this.bindTexture("guis/states.png");
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
final Tessellator tessellator = Tessellator.instance;
try {
final int uv_y = (int) Math.floor(aes.getIcon() / 16);
final int uv_x = aes.getIcon() - uv_y * 16;
GL11.glEnable(GL11.GL_BLEND);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
final float par1 = aes.xDisplayPosition;
final float par2 = aes.yDisplayPosition;
final float par3 = uv_x * 16;
final float par4 = uv_y * 16;
tessellator.startDrawingQuads();
tessellator.setColorRGBA_F(1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon());
final float f1 = 0.00390625F;
final float f = 0.00390625F;
final float par6 = 16;
tessellator.addVertexWithUV(
par1 + 0, par2 + par6, this.zLevel, (par3 + 0) * f, (par4 + par6) * f1);
final float par5 = 16;
tessellator.addVertexWithUV(
par1 + par5, par2 + par6, this.zLevel, (par3 + par5) * f, (par4 + par6) * f1);
tessellator.addVertexWithUV(
par1 + par5, par2 + 0, this.zLevel, (par3 + par5) * f, (par4 + 0) * f1);
tessellator.addVertexWithUV(
par1 + 0, par2 + 0, this.zLevel, (par3 + 0) * f, (par4 + 0) * f1);
tessellator.setColorRGBA_F(1.0f, 1.0f, 1.0f, 1.0f);
tessellator.draw();
} catch (final Exception err) {
}
GL11.glPopAttrib();
}
}
if (is != null && s instanceof AppEngSlot) {
if (((AppEngSlot) s).getIsValid() == hasCalculatedValidness.NotAvailable) {
boolean isValid = s.isItemValid(is)
|| s instanceof SlotOutput
|| s instanceof AppEngCraftingSlot
|| s instanceof SlotDisabled
|| s instanceof SlotInaccessible
|| s instanceof SlotFake
|| s instanceof SlotRestrictedInput
|| s instanceof SlotDisconnected;
if (isValid && s instanceof SlotRestrictedInput) {
try {
isValid = ((SlotRestrictedInput) s).isValid(is, this.mc.theWorld);
} catch (final Exception err) {
WCTLog.debug(err.getMessage());
}
}
((AppEngSlot) s)
.setIsValid(isValid ? hasCalculatedValidness.Valid : hasCalculatedValidness.Invalid);
}
if (((AppEngSlot) s).getIsValid() == hasCalculatedValidness.Invalid) {
this.zLevel = 100.0F;
itemRender.zLevel = 100.0F;
GL11.glDisable(GL11.GL_LIGHTING);
drawRect(
s.xDisplayPosition,
s.yDisplayPosition,
16 + s.xDisplayPosition,
16 + s.yDisplayPosition,
0x66ff6666);
GL11.glEnable(GL11.GL_LIGHTING);
this.zLevel = 0.0F;
itemRender.zLevel = 0.0F;
}
}
if (s instanceof AppEngSlot) {
((AppEngSlot) s).setDisplay(true);
this.safeDrawSlot(s);
} else {
this.safeDrawSlot(s);
}
return;
} catch (final Exception err) {
WCTLog.warning("WCT prevented crash while drawing slot: " + err.toString());
}
}
// do the usual for non-ME Slots.
this.safeDrawSlot(s);
}
private RenderItem setItemRender(final RenderItem item) {
if (Loader.isModLoaded("NotEnoughItems")) {
return ((INEI) IntegrationRegistry.INSTANCE.getInstance(IntegrationType.NEI)).setItemRender(item);
} else {
final RenderItem ri = itemRender;
itemRender = item;
return ri;
}
}
protected boolean isPowered() {
return true;
}
private void safeDrawSlot(final Slot s) {
try {
GuiContainer.class
.getDeclaredMethod("func_146977_a_original", Slot.class)
.invoke(this, s);
} catch (final Exception err) {
}
}
public void bindTexture(final String file) {
final ResourceLocation loc = new ResourceLocation("appliedenergistics2", "textures/" + file);
this.mc.getTextureManager().bindTexture(loc);
}
public void func_146977_a(final Slot s) {
this.drawSlot(s);
}
protected GuiScrollbar getScrollBar() {
return this.scrollBar;
}
protected void setScrollBar(final GuiScrollbar myScrollBar) {
this.scrollBar = myScrollBar;
}
protected List<InternalSlotME> getMeSlots() {
return this.meSlots;
}
public static final synchronized boolean isSwitchingGuis() {
return switchingGuis;
}
public static final synchronized void setSwitchingGuis(final boolean switchingGuis) {
WCTBaseGui.switchingGuis = switchingGuis;
}
protected void addItemTooltip(ItemStack is, List<String> lineList) {
if (isShiftKeyDown()) {
List l = is.getTooltip(this.mc.thePlayer, this.mc.gameSettings.advancedItemTooltips);
if (!l.isEmpty()) l.remove(0);
lineList.addAll(l);
} else {
// TODO: update AE2 on maven and dependency in build gradle
// lineList.add(GuiText.HoldShiftForTooltip.getLocal());
}
}
}
@@ -1,119 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.client.gui.widgets;
import appeng.client.gui.widgets.IScrollSource;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.p455w0rd.wirelesscraftingterminal.client.gui.GuiWirelessCraftingTerminal;
import net.p455w0rd.wirelesscraftingterminal.client.gui.WCTBaseGui;
import org.lwjgl.opengl.GL11;
public class GuiScrollbar implements IScrollSource {
private int displayX = 0;
private int displayY = 0;
private int width = 12;
private int height = 16;
private int pageSize = 1;
private int maxScroll = 0;
private int minScroll = 0;
private int currentScroll = 0;
public void draw(final GuiContainer g) {
if (g instanceof GuiWirelessCraftingTerminal) {
((GuiWirelessCraftingTerminal) g).bindTexture("minecraft", "gui/container/creative_inventory/tabs.png");
} else if (g instanceof WCTBaseGui) {
((WCTBaseGui) g).bindTexture("minecraft", "gui/container/creative_inventory/tabs.png");
}
GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
if (this.getRange() == 0) {
g.drawTexturedModalRect(this.displayX, this.displayY, 232 + this.width, 0, this.width, 15);
} else {
final int offset = (this.currentScroll - this.minScroll) * (this.height - 15) / this.getRange();
g.drawTexturedModalRect(this.displayX, offset + this.displayY, 232, 0, this.width, 15);
}
}
private int getRange() {
return this.maxScroll - this.minScroll;
}
public int getLeft() {
return this.displayX;
}
public GuiScrollbar setLeft(final int v) {
this.displayX = v;
return this;
}
public int getTop() {
return this.displayY;
}
public GuiScrollbar setTop(final int v) {
this.displayY = v;
return this;
}
public int getWidth() {
return this.width;
}
public GuiScrollbar setWidth(final int v) {
this.width = v;
return this;
}
public int getHeight() {
return this.height;
}
public GuiScrollbar setHeight(final int v) {
this.height = v;
return this;
}
public void setRange(final int min, final int max, final int pageSize) {
this.minScroll = min;
this.maxScroll = max;
this.pageSize = pageSize;
if (this.minScroll > this.maxScroll) {
this.maxScroll = this.minScroll;
}
this.applyRange();
}
private void applyRange() {
this.currentScroll = Math.max(Math.min(this.currentScroll, this.maxScroll), this.minScroll);
}
@Override
public int getCurrentScroll() {
return this.currentScroll;
}
public void click(final GuiContainer aeBaseGui, final int x, final int y) {
if (this.getRange() == 0) {
return;
}
if (x > this.displayX && x <= this.displayX + this.width) {
if (y > this.displayY && y <= this.displayY + this.height) {
this.currentScroll = (y - this.displayY);
this.currentScroll = this.minScroll + ((this.currentScroll * 2 * this.getRange() / this.height));
this.currentScroll = (this.currentScroll + 1) >> 1;
this.applyRange();
}
}
}
public void wheel(int delta) {
delta = Math.max(Math.min(-delta, 1), -1);
this.currentScroll += delta * this.pageSize;
this.applyRange();
}
}
@@ -1,141 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.client.gui.widgets;
import appeng.client.gui.widgets.ITooltip;
import appeng.client.texture.ExtraBlockTextures;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.item.ItemStack;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
public class GuiTabButton extends GuiButton implements ITooltip {
private final RenderItem itemRenderer;
private final String message;
private int hideEdge = 0;
private int myIcon = -1;
private ItemStack myItem;
public GuiTabButton(final int x, final int y, final int ico, final String message, final RenderItem ir) {
super(0, 0, 16, "");
this.xPosition = x;
this.yPosition = y;
this.width = 22;
this.height = 22;
this.myIcon = ico;
this.message = message;
this.itemRenderer = ir;
}
/**
* Using itemstack as an icon
*
* @param x x pos of button
* @param y y pos of button
* @param ico used icon
* @param message mouse over message
* @param ir renderer
*/
public GuiTabButton(final int x, final int y, final ItemStack ico, final String message, final RenderItem ir) {
super(0, 0, 16, "");
this.xPosition = x;
this.yPosition = y;
this.width = 22;
this.height = 22;
this.myItem = ico;
this.message = message;
this.itemRenderer = ir;
}
@Override
public void drawButton(final Minecraft minecraft, final int x, final int y) {
if (this.visible) {
GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
minecraft.renderEngine.bindTexture(ExtraBlockTextures.GuiTexture("guis/states.png"));
this.field_146123_n = x >= this.xPosition
&& y >= this.yPosition
&& x < this.xPosition + this.width
&& y < this.yPosition + this.height;
int uv_x = (this.hideEdge > 0 ? 11 : 13);
final int offsetX = this.hideEdge > 0 ? 1 : 0;
// this.drawTexturedModalRect( this.xPosition, this.yPosition, uv_x * 16, 0, 25, 22 );
if (this.myIcon >= 0) {
final int uv_y = (int) Math.floor(this.myIcon / 16);
uv_x = this.myIcon - uv_y * 16;
this.drawTexturedModalRect(
offsetX + this.xPosition + 3, this.yPosition + 6, uv_x * 16, uv_y * 16, 16, 16);
}
this.mouseDragged(minecraft, x, y);
if (this.myItem != null) {
this.zLevel = 100.0F;
this.itemRenderer.zLevel = 100.0F;
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
RenderHelper.enableGUIStandardItemLighting();
final FontRenderer fontrenderer = minecraft.fontRenderer;
// this.itemRenderer.renderItemAndEffectIntoGUI( fontrenderer, minecraft.renderEngine, this.myItem,
// offsetX + this.xPosition + 3, this.yPosition + 6 );
this.itemRenderer.renderItemIntoGUI(
fontrenderer,
minecraft.renderEngine,
this.myItem,
offsetX + this.xPosition + 3,
this.yPosition + 6,
false);
GL11.glDisable(GL11.GL_LIGHTING);
this.itemRenderer.zLevel = 0.0F;
this.zLevel = 0.0F;
}
}
}
@Override
public String getMessage() {
return this.message;
}
@Override
public int xPos() {
return this.xPosition;
}
@Override
public int yPos() {
return this.yPosition;
}
@Override
public int getWidth() {
return 22;
}
@Override
public int getHeight() {
return 22;
}
@Override
public boolean isVisible() {
return this.visible;
}
public int getHideEdge() {
return this.hideEdge;
}
public void setHideEdge(final int hideEdge) {
this.hideEdge = hideEdge;
}
}
@@ -1,87 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.client.gui.widgets;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiTextField;
/**
* A modified version of the Minecraft text field.
* You can initialize it over the full element span.
* The mouse click area is increased to the full element
* subtracted with the defined padding.
*
* The rendering does pay attention to the size of the '_' caret.
*/
public class MEGuiTextField extends GuiTextField {
private static final int PADDING = 2;
private final int _xPos;
private final int _yPos;
private final int _width;
private final int _height;
/**
* Uses the values to instantiate a padded version of a text field.
* Pays attention to the '_' caret.
*
* @param fontRenderer renderer for the strings
* @param xPos absolute left position
* @param yPos absolute top position
* @param width absolute width
* @param height absolute height
*/
public MEGuiTextField(
final FontRenderer fontRenderer, final int xPos, final int yPos, final int width, final int height) {
super(fontRenderer, xPos, yPos, width, height - 2 * PADDING);
this._xPos = xPos;
this._yPos = yPos;
this._width = width;
this._height = height;
}
@Override
public void mouseClicked(final int xPos, final int yPos, final int button) {
super.mouseClicked(xPos, yPos, button);
final boolean requiresFocus = this.isMouseIn(xPos, yPos);
this.setFocused(requiresFocus);
}
/**
* Checks if the mouse is within the element
*
* @param xCoord current x coord of the mouse
* @param yCoord current y coord of the mouse
*
* @return true if mouse position is within the text field area
*/
public boolean isMouseIn(final int xCoord, final int yCoord) {
final boolean withinXRange = xCoord >= this._xPos && xCoord <= this._xPos + this._width;
final boolean withinYRange = this._yPos <= yCoord && yCoord < this._yPos + this._height;
return withinXRange && withinYRange;
}
@Override
public void drawTextBox() {
if (this.getVisible()) {
if (this.isFocused()) {
drawRect(
this.xPosition - 1,
this.yPosition,
this.xPosition + this.width - 1,
this.yPosition + this.height + 2,
0xFF606060);
} else {
drawRect(
this.xPosition - 1,
this.yPosition,
this.xPosition + this.width - 1,
this.yPosition + this.height + 2,
0xFFA8A8A8);
}
super.drawTextBox();
}
}
}
@@ -1,43 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.client.me;
import appeng.tile.inventory.AppEngInternalInventory;
import appeng.util.ItemSorters;
import javax.annotation.Nonnull;
import net.minecraft.util.StatCollector;
public class ClientDCInternalInv implements Comparable<ClientDCInternalInv> {
private final String unlocalizedName;
private final AppEngInternalInventory inventory;
private final long id;
private final long sortBy;
public ClientDCInternalInv(final int size, final long id, final long sortBy, final String unlocalizedName) {
this.inventory = new AppEngInternalInventory(null, size);
this.unlocalizedName = unlocalizedName;
this.id = id;
this.sortBy = sortBy;
}
public String getName() {
final String s = StatCollector.translateToLocal(this.unlocalizedName + ".name");
if (s.equals(this.unlocalizedName + ".name")) {
return StatCollector.translateToLocal(this.unlocalizedName);
}
return s;
}
@Override
public int compareTo(@Nonnull final ClientDCInternalInv o) {
return ItemSorters.compareLong(this.sortBy, o.sortBy);
}
public AppEngInternalInventory getInventory() {
return this.inventory;
}
public long getId() {
return this.id;
}
}
@@ -1,39 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.client.me;
import appeng.api.storage.data.IAEItemStack;
import net.minecraft.item.ItemStack;
public class InternalSlotME {
private final int offset;
private final int xPos;
private final int yPos;
private final ItemRepo repo;
public InternalSlotME(final ItemRepo def, final int offset, final int displayX, final int displayY) {
this.repo = def;
this.offset = offset;
this.xPos = displayX;
this.yPos = displayY;
}
ItemStack getStack() {
return this.repo.getItem(this.offset);
}
IAEItemStack getAEStack() {
return this.repo.getReferenceItem(this.offset);
}
boolean hasPower() {
return this.repo.hasPower();
}
int getxPosition() {
return this.xPos;
}
int getyPosition() {
return this.yPos;
}
}
@@ -1,240 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.client.me;
import appeng.api.AEApi;
import appeng.api.config.SearchBoxMode;
import appeng.api.config.Settings;
import appeng.api.config.SortOrder;
import appeng.api.config.ViewItems;
import appeng.api.config.YesNo;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import appeng.client.gui.widgets.IScrollSource;
import appeng.client.gui.widgets.ISortSource;
import appeng.core.AEConfig;
import appeng.items.storage.ItemViewCell;
import appeng.util.ItemSorters;
import appeng.util.Platform;
import appeng.util.prioitylist.IPartitionList;
import cpw.mods.fml.relauncher.ReflectionHelper;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.regex.Pattern;
import javax.annotation.Nonnull;
import net.minecraft.item.ItemStack;
public class ItemRepo {
private final IItemList<IAEItemStack> list = AEApi.instance().storage().createItemList();
private final ArrayList<IAEItemStack> view = new ArrayList<IAEItemStack>();
private final ArrayList<ItemStack> dsp = new ArrayList<ItemStack>();
private final IScrollSource src;
private final ISortSource sortSrc;
private int rowSize = 9;
private String searchString = "";
private IPartitionList<IAEItemStack> myPartitionList;
private String innerSearch = "";
private String NEIWord = null;
private boolean hasPower;
public ItemRepo(final IScrollSource src, final ISortSource sortSrc) {
this.src = src;
this.sortSrc = sortSrc;
}
public IAEItemStack getReferenceItem(int idx) {
idx += this.src.getCurrentScroll() * this.rowSize;
if (idx >= this.view.size()) {
return null;
}
return this.view.get(idx);
}
public ItemStack getItem(int idx) {
idx += this.src.getCurrentScroll() * this.rowSize;
if (idx >= this.dsp.size()) {
return null;
}
return this.dsp.get(idx);
}
void setSearch(final String search) {
this.searchString = search == null ? "" : search;
}
public void postUpdate(final IAEItemStack is) {
final IAEItemStack st = this.list.findPrecise(is);
if (st != null) {
st.reset();
st.add(is);
} else {
this.list.add(is);
}
}
public void setViewCell(final ItemStack[] list) {
this.myPartitionList = ItemViewCell.createFilter(list);
this.updateView();
}
@SuppressWarnings("rawtypes")
public void updateView() {
this.view.clear();
this.dsp.clear();
this.view.ensureCapacity(this.list.size());
this.dsp.ensureCapacity(this.list.size());
final Enum viewMode = this.sortSrc.getSortDisplay();
final Enum searchMode = AEConfig.instance.settings.getSetting(Settings.SEARCH_MODE);
if (searchMode == SearchBoxMode.NEI_AUTOSEARCH || searchMode == SearchBoxMode.NEI_MANUAL_SEARCH) {
this.updateNEI(this.searchString);
}
this.innerSearch = this.searchString;
final boolean terminalSearchToolTips =
AEConfig.instance.settings.getSetting(Settings.SEARCH_TOOLTIPS) != YesNo.NO;
// boolean terminalSearchMods = Configuration.INSTANCE.settings.getSetting( Settings.SEARCH_MODS ) != YesNo.NO;
boolean searchMod = false;
if (this.innerSearch.startsWith("@")) {
searchMod = true;
this.innerSearch = this.innerSearch.substring(1);
}
Pattern m = null;
try {
m = Pattern.compile(this.innerSearch.toLowerCase(), Pattern.CASE_INSENSITIVE);
} catch (final Throwable ignore) {
try {
m = Pattern.compile(Pattern.quote(this.innerSearch.toLowerCase()), Pattern.CASE_INSENSITIVE);
} catch (final Throwable __) {
return;
}
}
boolean notDone = false;
for (IAEItemStack is : this.list) {
if (this.myPartitionList != null) {
if (!this.myPartitionList.isListed(is)) {
continue;
}
}
if (viewMode == ViewItems.CRAFTABLE && !is.isCraftable()) {
continue;
}
if (viewMode == ViewItems.CRAFTABLE) {
is = is.copy();
is.setStackSize(0);
}
if (viewMode == ViewItems.STORED && is.getStackSize() == 0) {
continue;
}
final String dspName = searchMod ? Platform.getModId(is) : Platform.getItemDisplayName(is);
notDone = true;
if (m.matcher(dspName.toLowerCase()).find()) {
this.view.add(is);
notDone = false;
}
if (terminalSearchToolTips && notDone) {
for (final Object lp : Platform.getTooltip(is)) {
if (lp instanceof String && m.matcher((CharSequence) lp).find()) {
this.view.add(is);
notDone = false;
break;
}
}
}
/*
* if ( terminalSearchMods && notDone ) { if ( m.matcher( Platform.getMod( is.getItemStack() ) ).find() ) {
* view.add( is ); notDone = false; } }
*/
}
final Enum SortBy = this.sortSrc.getSortBy();
final Enum SortDir = this.sortSrc.getSortDir();
ItemSorters.setDirection((appeng.api.config.SortDir) SortDir);
ItemSorters.init();
if (SortBy == SortOrder.MOD) {
Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_MOD);
} else if (SortBy == SortOrder.AMOUNT) {
Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_SIZE);
} else if (SortBy == SortOrder.INVTWEAKS) {
Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_INV_TWEAKS);
} else {
Collections.sort(this.view, ItemSorters.CONFIG_BASED_SORT_BY_NAME);
}
for (final IAEItemStack is : this.view) {
this.dsp.add(is.getItemStack());
}
}
@SuppressWarnings("rawtypes")
private void updateNEI(final String filter) {
try {
if (this.NEIWord == null || !this.NEIWord.equals(filter)) {
final Class c =
ReflectionHelper.getClass(this.getClass().getClassLoader(), "codechicken.nei.LayoutManager");
final Field fldSearchField = c.getField("searchField");
final Object searchField = fldSearchField.get(c);
final Method a = searchField.getClass().getMethod("setText", String.class);
final Method b = searchField.getClass().getMethod("onTextChange", String.class);
this.NEIWord = filter;
a.invoke(searchField, filter);
b.invoke(searchField, "");
}
} catch (final Throwable ignore) {
}
}
public int size() {
return this.view.size();
}
public void clear() {
this.list.resetStatus();
}
public boolean hasPower() {
return this.hasPower;
}
public void setPower(final boolean hasPower) {
this.hasPower = hasPower;
}
public int getRowSize() {
return this.rowSize;
}
public void setRowSize(final int rowSize) {
this.rowSize = rowSize;
}
public String getSearchString() {
return this.searchString;
}
public void setSearchString(@Nonnull final String searchString) {
this.searchString = searchString;
}
}
@@ -1,73 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.client.me;
import appeng.items.misc.ItemEncodedPattern;
import appeng.util.Platform;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.AppEngSlot;
public class SlotDisconnected extends AppEngSlot {
private final ClientDCInternalInv mySlot;
public SlotDisconnected(final ClientDCInternalInv me, final int which, final int x, final int y) {
super(me.getInventory(), which, x, y);
this.mySlot = me;
}
@Override
public boolean isItemValid(final ItemStack par1ItemStack) {
return false;
}
@Override
public void putStack(final ItemStack par1ItemStack) {}
@Override
public boolean canTakeStack(final EntityPlayer par1EntityPlayer) {
return false;
}
@Override
public ItemStack getDisplayStack() {
if (Platform.isClient()) {
final ItemStack is = super.getStack();
if (is != null && is.getItem() instanceof ItemEncodedPattern) {
final ItemEncodedPattern iep = (ItemEncodedPattern) is.getItem();
final ItemStack out = iep.getOutput(is);
if (out != null) {
return out;
}
}
}
return super.getStack();
}
@Override
public void onPickupFromSlot(final EntityPlayer par1EntityPlayer, final ItemStack par2ItemStack) {}
@Override
public boolean getHasStack() {
return this.getStack() != null;
}
@Override
public int getSlotStackLimit() {
return 0;
}
@Override
public ItemStack decrStackSize(final int par1) {
return null;
}
@Override
public boolean isSlotInInventory(final IInventory par1iInventory, final int par2) {
return false;
}
public ClientDCInternalInv getSlot() {
return this.mySlot;
}
}
@@ -1,71 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.client.me;
import appeng.api.storage.data.IAEItemStack;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class SlotME extends Slot {
private final InternalSlotME mySlot;
public SlotME(final InternalSlotME me) {
super(null, 0, me.getxPosition(), me.getyPosition());
this.mySlot = me;
}
public IAEItemStack getAEStack() {
if (this.mySlot.hasPower()) {
return this.mySlot.getAEStack();
}
return null;
}
@Override
public void onPickupFromSlot(final EntityPlayer par1EntityPlayer, final ItemStack par2ItemStack) {}
@Override
public boolean isItemValid(final ItemStack par1ItemStack) {
return false;
}
@Override
public ItemStack getStack() {
if (this.mySlot.hasPower()) {
return this.mySlot.getStack();
}
return null;
}
@Override
public boolean getHasStack() {
if (this.mySlot.hasPower()) {
return this.getStack() != null;
}
return false;
}
@Override
public void putStack(final ItemStack par1ItemStack) {}
@Override
public int getSlotStackLimit() {
return 0;
}
@Override
public ItemStack decrStackSize(final int par1) {
return null;
}
@Override
public boolean isSlotInInventory(final IInventory par1iInventory, final int par2) {
return false;
}
@Override
public boolean canTakeStack(final EntityPlayer par1EntityPlayer) {
return false;
}
}
@@ -1,147 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.client.me;
import appeng.api.storage.data.IAEItemStack;
import appeng.core.AEConfig;
import appeng.core.localization.GuiText;
import appeng.util.ISlimReadableNumberConverter;
import appeng.util.IWideReadableNumberConverter;
import appeng.util.ReadableNumberConverter;
import javax.annotation.Nonnull;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.item.ItemStack;
import org.lwjgl.opengl.GL11;
/**
* @author AlgorithmX2
* @author thatsIch
* @version rv2
* @since rv0
*/
public class WCTRenderItem extends RenderItem {
private static final ISlimReadableNumberConverter SLIM_CONVERTER = ReadableNumberConverter.INSTANCE;
private static final IWideReadableNumberConverter WIDE_CONVERTER = ReadableNumberConverter.INSTANCE;
boolean useLg = AEConfig.instance.useTerminalUseLargeFont();
private IAEItemStack aeStack = null;
@Override
public void renderItemOverlayIntoGUI(
final FontRenderer fontRenderer,
final TextureManager textureManager,
final ItemStack is,
final int par4,
final int par5,
final String par6Str) {
if (is != null) {
final float scaleFactor = useLg ? 0.85f : 0.5f;
final float inverseScaleFactor = 1.0f / scaleFactor;
final int offset = useLg ? 0 : -1;
final boolean unicodeFlag = fontRenderer.getUnicodeFlag();
fontRenderer.setUnicodeFlag(false);
if (is.getItem().showDurabilityBar(is)) {
final double health = is.getItem().getDurabilityForDisplay(is);
final int j1 = (int) Math.round(13.0D - health * 13.0D);
final int k = (int) Math.round(255.0D - health * 255.0D);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glDisable(GL11.GL_ALPHA_TEST);
GL11.glDisable(GL11.GL_BLEND);
final Tessellator tessellator = Tessellator.instance;
final int l = 255 - k << 16 | k << 8;
final int i1 = (255 - k) / 4 << 16 | 16128;
this.renderQuad(tessellator, par4 + 2, par5 + 13, 13, 2, 0);
this.renderQuad(tessellator, par4 + 2, par5 + 13, 12, 1, i1);
this.renderQuad(tessellator, par4 + 2, par5 + 13, j1, 1, l);
GL11.glEnable(GL11.GL_ALPHA_TEST);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
}
if (is.stackSize == 0) {
final String craftLabelText =
useLg ? GuiText.LargeFontCraft.getLocal() : GuiText.SmallFontCraft.getLocal();
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glPushMatrix();
GL11.glScaled(scaleFactor, scaleFactor, scaleFactor);
final int X = (int)
(((float) par4 + offset + 16.0f - fontRenderer.getStringWidth(craftLabelText) * scaleFactor)
* inverseScaleFactor);
final int Y = (int) (((float) par5 + offset + 16.0f - 7.0f * scaleFactor) * inverseScaleFactor);
fontRenderer.drawStringWithShadow(craftLabelText, X, Y, 16777215);
GL11.glPopMatrix();
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_DEPTH_TEST);
}
final long amount = this.aeStack != null ? this.aeStack.getStackSize() : is.stackSize;
if (amount != 0) {
final String stackSize = this.getToBeRenderedStackSize(amount);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glPushMatrix();
GL11.glScaled(scaleFactor, scaleFactor, scaleFactor);
final int X =
(int) (((float) par4 + offset + 16.0f - fontRenderer.getStringWidth(stackSize) * scaleFactor)
* inverseScaleFactor);
final int Y = (int) (((float) par5 + offset + 16.0f - 7.0f * scaleFactor) * inverseScaleFactor);
fontRenderer.drawStringWithShadow(stackSize, X, Y, 16777215);
GL11.glPopMatrix();
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_DEPTH_TEST);
}
fontRenderer.setUnicodeFlag(unicodeFlag);
}
}
private void renderQuad(
final Tessellator par1Tessellator,
final int par2,
final int par3,
final int par4,
final int par5,
final int par6) {
par1Tessellator.startDrawingQuads();
par1Tessellator.setColorOpaque_I(par6);
par1Tessellator.addVertex(par2, par3, 0.0D);
par1Tessellator.addVertex(par2, par3 + par5, 0.0D);
par1Tessellator.addVertex(par2 + par4, par3 + par5, 0.0D);
par1Tessellator.addVertex(par2 + par4, par3, 0.0D);
par1Tessellator.draw();
}
private String getToBeRenderedStackSize(final long originalSize) {
if (AEConfig.instance.useTerminalUseLargeFont()) {
return SLIM_CONVERTER.toSlimReadableForm(originalSize);
} else {
return WIDE_CONVERTER.toWideReadableForm(originalSize);
}
}
public IAEItemStack getAeStack() {
return this.aeStack;
}
public void setAeStack(@Nonnull final IAEItemStack aeStack) {
this.aeStack = aeStack;
}
}
@@ -1,48 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.client.textures;
import javax.annotation.Nonnull;
import net.minecraft.util.ResourceLocation;
/**
* Icon from a state texture.
*
* @author Nividica
*
*/
public interface IStateIconTexture {
/**
* Height of the icon.
*
* @return
*/
int getHeight();
/**
* Texture the icon is in.
*
* @return
*/
@Nonnull
ResourceLocation getTexture();
/**
* U coordinate of the icon.
*
* @return
*/
int getU();
/**
* V coordinate of the icon.
*
* @return
*/
int getV();
/**
* Width of the icon.
*
* @return
*/
int getWidth();
}
@@ -1,150 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.client.textures;
import net.minecraft.util.ResourceLocation;
/**
* Icons stored in the AE2's "states" texture.
*
* @author Nividica
*
*/
public enum WCTStateIconsEnum implements IStateIconTexture {
// Redstone modes
REDSTONE_LOW(0, 0),
REDSTONE_HIGH(16, 0),
REDSTONE_PULSE(32, 0),
REDSTONE_IGNORE(48, 0),
// Slot backgrounds
VIEW_CELL_BACKGROUND(224, 64),
UPGRADE_CARD_BACKGROUND(240, 208),
ME_CELL_BACKGROUND(240, 0),
PATTERN_CELL_BACKGROUND(240, 128),
// Buttons
REGULAR_BUTTON(240, 240),
TAB_BUTTON(208, 0, 22, 22),
// Sorting modes
SORT_MODE_ALPHABETIC(0, 64),
SORT_MODE_AMOUNT(16, 64),
SORT_MODE_MOD(80, 64),
SORT_MODE_INVTWEAK(64, 64),
// Sorting directions
SORT_DIR_ASC(0, 48),
SORT_DIR_DEC(16, 48),
// View types
VIEW_TYPE_STORED(0, 16),
VIEW_TYPE_ALL(32, 16),
VIEW_TYPE_CRAFT(48, 16),
// Terminal styles
TERM_STYLE_TALL(0, 208),
TERM_STYLE_SMALL(16, 208),
// Search modes
SEARCH_MODE_AUTO(48, 32),
SEARCH_MODE_MANUAL(64, 32),
SEARCH_MODE_NEI_AUTO(80, 32),
SEARCH_MODE_NEI_MANUAL(96, 32),
// Misc
WRENCH(32, 64),
DISABLED(0, 128),
ENABLED(16, 128),
SAVE(0, 176),
DELETE(0, 192),
CLEAR_GRID(96, 0),
ARROW_DOWN(128, 0);
/**
* Location of the AE states texture
*/
public static final ResourceLocation AE_STATES_TEXTURE =
new ResourceLocation("appliedenergistics2", "textures/guis/states.png");
/**
* Width and height of standard icons.
*/
public static final int STANDARD_ICON_SIZE = 16;
/**
* X position in the texture this icon is located at.
*/
private int minU;
/**
* Y position in the texture this icon is located at.
*/
private int minV;
/**
* Width of the icon
*/
private int width;
/**
* Height of the icon
*/
private int height;
/**
* Standard icon constructor
*
* @param u
* @param v
*/
private WCTStateIconsEnum(final int u, final int v) {
this(u, v, STANDARD_ICON_SIZE, STANDARD_ICON_SIZE);
}
/**
* Icon constructor
*
* @param u
* @param v
* @param width
* @param height
*/
private WCTStateIconsEnum(final int u, final int v, final int width, final int height) {
// Set the u
this.minU = u;
// Set the v
this.minV = v;
// Set width
this.width = width;
// Set height
this.height = height;
}
@Override
public int getHeight() {
return this.height;
}
@Override
public ResourceLocation getTexture() {
return WCTStateIconsEnum.AE_STATES_TEXTURE;
}
@Override
public int getU() {
return this.minU;
}
@Override
public int getV() {
return this.minV;
}
@Override
public int getWidth() {
return this.width;
}
}
@@ -2,10 +2,13 @@ package net.p455w0rd.wirelesscraftingterminal.common;
import appeng.api.AEApi;
import appeng.api.implementations.guiobjects.IPortableCell;
import appeng.container.AEBaseContainer;
import appeng.container.ContainerOpenContext;
import appeng.container.implementations.ContainerCraftingStatus;
import cpw.mods.fml.common.network.IGuiHandler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.p455w0rd.wirelesscraftingterminal.api.IWirelessCraftingTermHandler;
import net.p455w0rd.wirelesscraftingterminal.client.gui.GuiCraftAmount;
import net.p455w0rd.wirelesscraftingterminal.client.gui.GuiCraftConfirm;
@@ -37,19 +40,35 @@ public class WCTGuiHandler implements IGuiHandler {
final IPortableCell terminal = obj;
if (guiId == Reference.GUI_WCT) {
return new ContainerWirelessCraftingTerminal(player, player.inventory);
return updateGui(
new ContainerWirelessCraftingTerminal(player, player.inventory),
world,
x,
y,
z,
ForgeDirection.UNKNOWN,
obj);
}
if (guiId == Reference.GUI_CRAFTING_STATUS) {
return new ContainerCraftingStatus(player.inventory, terminal);
return updateGui(
new ContainerCraftingStatus(player.inventory, terminal),
world,
x,
y,
z,
ForgeDirection.UNKNOWN,
obj);
}
if (guiId == Reference.GUI_CRAFT_AMOUNT) {
return new ContainerCraftAmount(player.inventory, terminal);
return updateGui(
new ContainerCraftAmount(player, terminal), world, x, y, z, ForgeDirection.UNKNOWN, obj);
}
if (guiId == Reference.GUI_CRAFT_CONFIRM) {
return new ContainerCraftConfirm(player.inventory, terminal);
return updateGui(
new ContainerCraftConfirm(player, terminal), world, x, y, z, ForgeDirection.UNKNOWN, obj);
}
}
}
@@ -101,4 +120,25 @@ public class WCTGuiHandler implements IGuiHandler {
final int ID, final EntityPlayer player, final World world, final int x, final int y, final int z) {
player.openGui(WirelessCraftingTerminal.INSTANCE, ID, world, x, y, z);
}
private Object updateGui(
final Object newContainer,
final World w,
final int x,
final int y,
final int z,
final ForgeDirection side,
final Object myItem) {
if (newContainer instanceof AEBaseContainer) {
final AEBaseContainer bc = (AEBaseContainer) newContainer;
bc.setOpenContext(new ContainerOpenContext(myItem));
bc.getOpenContext().setWorld(w);
bc.getOpenContext().setX(x);
bc.getOpenContext().setY(y);
bc.getOpenContext().setZ(z);
bc.getOpenContext().setSide(side);
}
return newContainer;
}
}
@@ -1,58 +1,21 @@
package net.p455w0rd.wirelesscraftingterminal.common.container;
import appeng.api.config.SecurityPermissions;
import appeng.api.networking.IGrid;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.storage.ITerminalHost;
import appeng.api.storage.data.IAEItemStack;
import appeng.tile.inventory.AppEngInternalInventory;
import javax.annotation.Nonnull;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.world.World;
import net.p455w0rd.wirelesscraftingterminal.api.networking.security.WCTIActionHost;
import net.p455w0rd.wirelesscraftingterminal.api.networking.security.WCTPlayerSource;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotInaccessible;
import appeng.api.implementations.guiobjects.IPortableCell;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.p455w0rd.wirelesscraftingterminal.common.WCTGuiHandler;
import net.p455w0rd.wirelesscraftingterminal.reference.Reference;
public class ContainerCraftAmount extends WCTBaseContainer {
private final Slot craftingItem;
private IAEItemStack itemToCreate;
public ContainerCraftAmount(final InventoryPlayer ip, final ITerminalHost te) {
super(ip, te);
this.craftingItem = new SlotInaccessible(new AppEngInternalInventory(null, 1), 0, 34, 53);
this.addSlotToContainer(this.getCraftingItem());
public class ContainerCraftAmount extends appeng.container.implementations.ContainerCraftAmount {
public ContainerCraftAmount(EntityPlayer player, IPortableCell terminal) {
super(player.inventory, terminal);
}
@Override
public void detectAndSendChanges() {
super.detectAndSendChanges();
this.verifyPermissions(SecurityPermissions.CRAFT, false);
}
public IGrid getGrid() {
return this.obj2.getTargetGrid();
}
public World getWorld() {
return this.getPlayerInv().player.worldObj;
}
public BaseActionSource getActionSrc() {
return new WCTPlayerSource(this.getPlayerInv().player, (WCTIActionHost) this.getTarget());
}
public Slot getCraftingItem() {
return this.craftingItem;
}
public IAEItemStack getItemToCraft() {
return this.itemToCreate;
}
public void setItemToCraft(@Nonnull final IAEItemStack itemToCreate) {
this.itemToCreate = itemToCreate;
public void openConfirmationGUI(EntityPlayer player, TileEntity te) {
int x = (int) player.posX;
int y = (int) player.posY;
int z = (int) player.posZ;
WCTGuiHandler.launchGui(Reference.GUI_CRAFT_CONFIRM, player, player.worldObj, x, y, z);
}
}
@@ -1,417 +1,23 @@
package net.p455w0rd.wirelesscraftingterminal.common.container;
import appeng.api.AEApi;
import appeng.api.config.Actionable;
import appeng.api.config.SecurityPermissions;
import appeng.api.networking.IGrid;
import appeng.api.networking.crafting.ICraftingCPU;
import appeng.api.networking.crafting.ICraftingGrid;
import appeng.api.networking.crafting.ICraftingJob;
import appeng.api.networking.crafting.ICraftingLink;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.networking.storage.IStorageGrid;
import appeng.api.storage.IMEInventory;
import appeng.api.storage.ITerminalHost;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import appeng.util.Platform;
import com.google.common.collect.ImmutableSet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.concurrent.Future;
import javax.annotation.Nonnull;
import appeng.api.implementations.guiobjects.IPortableCell;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.ICrafting;
import net.minecraft.util.ChatComponentText;
import net.minecraft.world.World;
import net.p455w0rd.wirelesscraftingterminal.api.networking.security.WCTIActionHost;
import net.p455w0rd.wirelesscraftingterminal.api.networking.security.WCTPlayerSource;
import net.p455w0rd.wirelesscraftingterminal.common.WCTGuiHandler;
import net.p455w0rd.wirelesscraftingterminal.common.container.guisync.GuiSync;
import net.p455w0rd.wirelesscraftingterminal.common.utils.WCTLog;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.NetworkHandler;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketMEInventoryUpdate;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketSetJobBytes;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketSwitchGuis;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketUpdateCPUInfo;
import net.p455w0rd.wirelesscraftingterminal.helpers.WirelessTerminalGuiObject;
import net.p455w0rd.wirelesscraftingterminal.reference.Reference;
public class ContainerCraftConfirm extends WCTBaseContainer {
public class ContainerCraftConfirm extends appeng.container.implementations.ContainerCraftConfirm {
private final EntityPlayer player;
public final ArrayList<CraftingCPURecord> cpus = new ArrayList<CraftingCPURecord>();
private Future<ICraftingJob> job;
private ICraftingJob result;
@GuiSync(0)
public long bytesUsed;
@GuiSync(1)
public long cpuBytesAvail;
@GuiSync(2)
public int cpuCoProcessors;
@GuiSync(3)
public boolean autoStart = false;
@GuiSync(4)
public boolean simulation = true;
@GuiSync(5)
public int selectedCpu = -1;
@GuiSync(6)
public boolean noCPU = true;
@GuiSync(7)
public String myName = "";
InventoryPlayer inventoryPlayer;
public ContainerCraftConfirm(final InventoryPlayer ip, final ITerminalHost te) {
super(ip, te);
inventoryPlayer = ip;
}
public void cycleCpu(final boolean next) {
if (next) {
this.setSelectedCpu(this.getSelectedCpu() + 1);
} else {
this.setSelectedCpu(this.getSelectedCpu() - 1);
}
if (this.getSelectedCpu() < -1) {
this.setSelectedCpu(this.cpus.size() - 1);
} else if (this.getSelectedCpu() >= this.cpus.size()) {
this.setSelectedCpu(-1);
}
if (this.getSelectedCpu() == -1) {
this.setCpuAvailableBytes(0);
this.setCpuCoProcessors(0);
this.setName("");
try {
NetworkHandler.instance.sendTo(
new PacketUpdateCPUInfo(0, 0), (EntityPlayerMP) this.getPlayerInv().player);
} catch (IOException e) {
//
}
} else {
this.setName(this.cpus.get(this.getSelectedCpu()).getName());
this.setCpuAvailableBytes(this.cpus.get(this.getSelectedCpu()).getSize());
this.setCpuCoProcessors(this.cpus.get(this.getSelectedCpu()).getProcessors());
try {
NetworkHandler.instance.sendTo(
new PacketUpdateCPUInfo((int) this.getCpuAvailableBytes(), (int) this.getCpuCoProcessors()),
(EntityPlayerMP) this.getPlayerInv().player);
} catch (IOException e) {
//
}
}
public ContainerCraftConfirm(EntityPlayer player, IPortableCell terminal) {
super(player.inventory, terminal);
this.player = player;
}
@Override
public void detectAndSendChanges() {
if (Platform.isClient()) {
return;
}
final ICraftingGrid cc = this.getGrid().getCache(ICraftingGrid.class);
final ImmutableSet<ICraftingCPU> cpuSet = cc.getCpus();
int matches = 0;
boolean changed = false;
for (final ICraftingCPU c : cpuSet) {
boolean found = false;
for (final CraftingCPURecord ccr : this.cpus) {
if (ccr.getCpu() == c) {
found = true;
}
}
final boolean matched = this.cpuMatches(c);
if (matched) {
matches++;
}
if (found == !matched) {
changed = true;
}
}
if (changed || this.cpus.size() != matches) {
this.cpus.clear();
for (final ICraftingCPU c : cpuSet) {
if (this.cpuMatches(c)) {
this.cpus.add(new CraftingCPURecord(c.getAvailableStorage(), c.getCoProcessors(), c));
}
}
this.sendCPUs();
}
this.setNoCPU(this.cpus.isEmpty());
super.detectAndSendChanges();
if (this.getJob() != null && this.getJob().isDone()) {
try {
this.result = this.getJob().get();
if (!this.result.isSimulation()) {
this.setSimulation(false);
if (this.isAutoStart()) {
this.startJob();
return;
}
} else {
this.setSimulation(true);
}
try {
final PacketMEInventoryUpdate a = new PacketMEInventoryUpdate((byte) 0);
final PacketMEInventoryUpdate b = new PacketMEInventoryUpdate((byte) 1);
final PacketMEInventoryUpdate c =
this.result.isSimulation() ? new PacketMEInventoryUpdate((byte) 2) : null;
final IItemList<IAEItemStack> plan =
AEApi.instance().storage().createItemList();
this.result.populatePlan(plan);
try {
NetworkHandler.instance.sendTo(
new PacketSetJobBytes((int) this.result.getByteTotal()),
(EntityPlayerMP) this.getPlayerInv().player);
} catch (IOException e) {
//
}
this.setUsedBytes(this.result.getByteTotal());
for (final IAEItemStack out : plan) {
IAEItemStack o = out.copy();
o.reset();
o.setStackSize(out.getStackSize());
final IAEItemStack p = out.copy();
p.reset();
p.setStackSize(out.getCountRequestable());
final IStorageGrid sg = this.getGrid().getCache(IStorageGrid.class);
final IMEInventory<IAEItemStack> items = sg.getItemInventory();
IAEItemStack m = null;
if (c != null && this.result.isSimulation()) {
m = o.copy();
o = items.extractItems(o, Actionable.SIMULATE, this.getActionSource());
if (o == null) {
o = m.copy();
o.setStackSize(0);
}
m.setStackSize(m.getStackSize() - o.getStackSize());
}
if (o.getStackSize() > 0) {
a.appendItem(o);
}
if (p.getStackSize() > 0) {
b.appendItem(p);
}
if (c != null && m != null && m.getStackSize() > 0) {
c.appendItem(m);
}
}
for (final Object g : this.crafters) {
if (g instanceof EntityPlayer) {
NetworkHandler.instance.sendTo(a, (EntityPlayerMP) g);
NetworkHandler.instance.sendTo(b, (EntityPlayerMP) g);
if (c != null) {
NetworkHandler.instance.sendTo(c, (EntityPlayerMP) g);
}
}
}
} catch (final IOException e) {
// :P
}
} catch (final Throwable e) {
this.getPlayerInv().player.addChatMessage(new ChatComponentText("Error: " + e.toString()));
WCTLog.debug(e.getMessage());
this.setValidContainer(false);
this.result = null;
}
this.setJob(null);
}
this.verifyPermissions(SecurityPermissions.CRAFT, false);
}
private IGrid getGrid() {
return this.obj2.getTargetGrid();
}
private boolean cpuMatches(final ICraftingCPU c) {
return c.getAvailableStorage() >= this.getUsedBytes() && !c.isBusy();
}
private void sendCPUs() {
Collections.sort(this.cpus);
if (this.getSelectedCpu() >= this.cpus.size()) {
this.setSelectedCpu(-1);
this.setCpuAvailableBytes(0);
this.setCpuCoProcessors(0);
this.setName("");
} else if (this.getSelectedCpu() != -1) {
this.setName(this.cpus.get(this.getSelectedCpu()).getName());
this.setCpuAvailableBytes(this.cpus.get(this.getSelectedCpu()).getSize());
this.setCpuCoProcessors(this.cpus.get(this.getSelectedCpu()).getProcessors());
}
}
public void startJob() {
int originalGui = 0;
final WCTIActionHost ah = this.getActionHost();
if (ah instanceof WirelessTerminalGuiObject) {
originalGui = Reference.GUI_WCT;
}
if (this.result != null && !this.isSimulation()) {
final ICraftingGrid cc = this.getGrid().getCache(ICraftingGrid.class);
final ICraftingLink g = cc.submitJob(
this.result,
null,
this.getSelectedCpu() == -1
? null
: this.cpus.get(this.getSelectedCpu()).getCpu(),
true,
this.getActionSrc());
this.setAutoStart(false);
if (g != null && originalGui > 0) // && this.getOpenContext() != null )
{
NetworkHandler.instance.sendTo(
new PacketSwitchGuis(originalGui), (EntityPlayerMP) this.getInventoryPlayer().player);
// final TileEntity te = this.getOpenContext().getTile();
// Platform.openGUI( this.getInventoryPlayer().player, te, this.getOpenContext().getSide(), originalGui
// );
EntityPlayerMP player = (EntityPlayerMP) this.getInventoryPlayer().player;
World world = player.worldObj;
int x = (int) player.posX;
int y = (int) player.posY;
int z = (int) player.posZ;
WCTGuiHandler.launchGui(originalGui, player, world, x, y, z);
}
}
}
private BaseActionSource getActionSrc() {
return new WCTPlayerSource(this.getPlayerInv().player, (WCTIActionHost) this.getTarget());
}
@Override
public void removeCraftingFromCrafters(final ICrafting c) {
super.removeCraftingFromCrafters(c);
if (this.getJob() != null) {
this.getJob().cancel(true);
this.setJob(null);
}
}
@Override
public void onContainerClosed(final EntityPlayer par1EntityPlayer) {
super.onContainerClosed(par1EntityPlayer);
if (this.getJob() != null) {
this.getJob().cancel(true);
this.setJob(null);
}
}
public World getWorld() {
return this.getPlayerInv().player.worldObj;
}
public boolean isAutoStart() {
return this.autoStart;
}
public void setAutoStart(final boolean autoStart) {
this.autoStart = autoStart;
}
public long getUsedBytes() {
return this.bytesUsed;
}
private void setUsedBytes(final long bytesUsed) {
this.bytesUsed = bytesUsed;
}
public long getCpuAvailableBytes() {
return this.cpuBytesAvail;
}
private void setCpuAvailableBytes(final long cpuBytesAvail) {
this.cpuBytesAvail = cpuBytesAvail;
}
public int getCpuCoProcessors() {
return this.cpuCoProcessors;
}
private void setCpuCoProcessors(final int cpuCoProcessors) {
this.cpuCoProcessors = cpuCoProcessors;
}
public int getSelectedCpu() {
return this.selectedCpu;
}
private void setSelectedCpu(final int selectedCpu) {
this.selectedCpu = selectedCpu;
}
public String getName() {
return this.myName;
}
private void setName(@Nonnull final String myName) {
this.myName = myName;
}
public boolean hasNoCPU() {
return this.noCPU;
}
private void setNoCPU(final boolean noCPU) {
this.noCPU = noCPU;
}
public boolean isSimulation() {
return this.simulation;
}
private void setSimulation(final boolean simulation) {
this.simulation = simulation;
}
public Future<ICraftingJob> getJob() {
return this.job;
}
public void setJob(final Future<ICraftingJob> job) {
this.job = job;
public void switchToOriginalGUI() {
int x = (int) player.posX;
int y = (int) player.posY;
int z = (int) player.posZ;
WCTGuiHandler.launchGui(Reference.GUI_WCT, player, player.worldObj, x, y, z);
}
}
@@ -1,68 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container;
import appeng.api.parts.IPart;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class ContainerOpenContext {
private final boolean isItem;
private World w;
private int x;
private int y;
private int z;
private ForgeDirection side;
public ContainerOpenContext(final Object myItem) {
final boolean isWorld = myItem instanceof IPart || myItem instanceof TileEntity;
this.isItem = !isWorld;
}
public TileEntity getTile() {
if (this.isItem) {
return null;
}
return this.getWorld().getTileEntity(this.getX(), this.getY(), this.getZ());
}
public ForgeDirection getSide() {
return this.side;
}
public void setSide(final ForgeDirection side) {
this.side = side;
}
private int getZ() {
return this.z;
}
public void setZ(final int z) {
this.z = z;
}
private int getY() {
return this.y;
}
public void setY(final int y) {
this.y = y;
}
private int getX() {
return this.x;
}
public void setX(final int x) {
this.x = x;
}
private World getWorld() {
return this.w;
}
public void setWorld(final World w) {
this.w = w;
}
}
@@ -14,11 +14,9 @@ import appeng.api.networking.IGrid;
import appeng.api.networking.IGridHost;
import appeng.api.networking.IGridNode;
import appeng.api.networking.energy.IEnergyGrid;
import appeng.api.networking.energy.IEnergySource;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.networking.security.ISecurityGrid;
import appeng.api.networking.security.IActionHost;
import appeng.api.networking.storage.IBaseMonitor;
import appeng.api.storage.IMEInventoryHandler;
import appeng.api.storage.IMEMonitor;
import appeng.api.storage.IMEMonitorHandlerReceiver;
import appeng.api.storage.data.IAEItemStack;
@@ -27,11 +25,21 @@ import appeng.api.util.IConfigManager;
import appeng.api.util.IConfigurableObject;
import appeng.client.me.InternalSlotME;
import appeng.client.me.SlotME;
import appeng.container.AEBaseContainer;
import appeng.container.ContainerNull;
import appeng.container.slot.AppEngCraftingSlot;
import appeng.container.slot.AppEngSlot;
import appeng.container.slot.NullSlot;
import appeng.container.slot.SlotCraftingMatrix;
import appeng.container.slot.SlotCraftingTerm;
import appeng.container.slot.SlotDisabled;
import appeng.container.slot.SlotFake;
import appeng.container.slot.SlotInaccessible;
import appeng.container.slot.SlotPlayerHotBar;
import appeng.container.slot.SlotPlayerInv;
import appeng.core.AEConfig;
import appeng.core.localization.PlayerMessages;
import appeng.helpers.IContainerCraftingPacket;
import appeng.helpers.ICustomNameObject;
import appeng.helpers.InventoryAction;
import appeng.tile.inventory.AppEngInternalInventory;
import appeng.tile.inventory.IAEAppEngInventory;
@@ -41,22 +49,15 @@ import appeng.util.IConfigManagerHost;
import appeng.util.InventoryAdaptor;
import appeng.util.Platform;
import appeng.util.inv.AdaptorPlayerHand;
import appeng.util.item.AEItemStack;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.nio.BufferOverflowException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import javax.annotation.Nonnull;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.InventoryCrafting;
@@ -66,7 +67,6 @@ import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.ChatComponentText;
@@ -74,23 +74,9 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.p455w0rd.wirelesscraftingterminal.api.IWirelessCraftingTermHandler;
import net.p455w0rd.wirelesscraftingterminal.api.IWirelessCraftingTerminalItem;
import net.p455w0rd.wirelesscraftingterminal.api.networking.security.WCTIActionHost;
import net.p455w0rd.wirelesscraftingterminal.api.networking.security.WCTPlayerSource;
import net.p455w0rd.wirelesscraftingterminal.common.container.guisync.GuiSync;
import net.p455w0rd.wirelesscraftingterminal.common.container.guisync.SyncData;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.AppEngCraftingSlot;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.AppEngSlot;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.NullSlot;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotArmor;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotBooster;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotCraftingMatrix;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotCraftingTerm;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotDisabled;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotFake;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotInaccessible;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotMagnet;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotPlayerHotBar;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotPlayerInv;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotTrash;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotViewCell;
import net.p455w0rd.wirelesscraftingterminal.common.inventory.WCTInventoryBooster;
@@ -101,9 +87,7 @@ import net.p455w0rd.wirelesscraftingterminal.common.inventory.WCTInventoryViewCe
import net.p455w0rd.wirelesscraftingterminal.common.utils.RandomUtils;
import net.p455w0rd.wirelesscraftingterminal.common.utils.WCTLog;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.NetworkHandler;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketInventoryAction;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketMEInventoryUpdate;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketPartialItem;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketValueConfig;
import net.p455w0rd.wirelesscraftingterminal.handlers.LocaleHandler;
import net.p455w0rd.wirelesscraftingterminal.helpers.WirelessTerminalGuiObject;
@@ -111,7 +95,7 @@ import net.p455w0rd.wirelesscraftingterminal.items.ItemInfinityBooster;
import net.p455w0rd.wirelesscraftingterminal.items.ItemMagnet;
import net.p455w0rd.wirelesscraftingterminal.reference.Reference;
public class ContainerWirelessCraftingTerminal extends Container
public class ContainerWirelessCraftingTerminal extends AEBaseContainer
implements IConfigManagerHost,
IConfigurableObject,
IMEMonitorHandlerReceiver<IAEItemStack>,
@@ -127,10 +111,9 @@ public class ContainerWirelessCraftingTerminal extends Container
public final WCTInventoryTrash trashInventory;
public final InventoryPlayer inventoryPlayer;
public ItemStack[] craftMatrixInventory;
public ItemStack craftItem;
private World worldObj;
private EntityPlayer player;
private static final int HOTBAR_START = 1,
private final World worldObj;
private final EntityPlayer player;
public static final int HOTBAR_START = 1,
HOTBAR_END = HOTBAR_START + 8,
INV_START = HOTBAR_END + 1,
INV_END = INV_START + 26,
@@ -145,19 +128,18 @@ public class ContainerWirelessCraftingTerminal extends Container
MAGNET_INDEX = VIEW_CELL_END + 1;
public static int CRAFTING_SLOT_X_POS = 80, CRAFTING_SLOT_Y_POS = 83;
private SlotBooster boosterSlot;
private SlotMagnet magnetSlot;
private final SlotMagnet magnetSlot;
private NullSlot nullSlot;
private Slot[] hotbarSlot;
private Slot[] inventorySlot;
private SlotArmor[] armorSlot;
private SlotCraftingMatrix[] craftMatrixSlot;
private SlotCraftingTerm craftingSlot;
private SlotViewCell[] viewCellSlot;
private final Slot[] hotbarSlot;
private final Slot[] inventorySlot;
private final SlotArmor[] armorSlot;
private final SlotCraftingMatrix[] craftMatrixSlot;
private final SlotCraftingTerm craftingSlot;
private final SlotViewCell[] viewCellSlot;
public SlotTrash trashSlot;
private int firstCraftingSlotNumber = -1, lastCraftingSlotNumber = -1;
private final WirelessTerminalGuiObject obj;
private boolean isContainerValid = true;
private double powerMultiplier = 0.5;
private final IPortableCell civ;
private int ticks = 0;
@@ -165,25 +147,11 @@ public class ContainerWirelessCraftingTerminal extends Container
private final IItemList<IAEItemStack> items = AEApi.instance().storage().createItemList();
private final IConfigManager clientCM;
private IConfigManager serverCM;
private IEnergySource powerSrc;
@GuiSync(98)
public static boolean hasPower = false;
private IConfigManagerHost gui;
private final BaseActionSource mySrc;
private final HashMap<Integer, SyncData> syncData = new HashMap<Integer, SyncData>();
private final List<PacketPartialItem> dataChunks = new LinkedList<PacketPartialItem>();
private IAEItemStack clientRequestedTargetItem = null;
private int ticksSinceCheck = 900;
private String customName;
private boolean sentCustomName;
private ContainerOpenContext openContext;
private final AppEngInternalInventory output = new AppEngInternalInventory(this, 1);
private final HashSet<Integer> locked = new HashSet<Integer>();
private IWirelessCraftingTerminalItem thisItem;
private IGridNode networkNode;
private IMEInventoryHandler<IAEItemStack> cellInv;
private final IWirelessCraftingTerminalItem thisItem;
private final IGridNode networkNode;
private IRecipe currentRecipe;
/**
@@ -192,13 +160,20 @@ public class ContainerWirelessCraftingTerminal extends Container
* @author p455w0rd
*/
public ContainerWirelessCraftingTerminal(EntityPlayer player, InventoryPlayer inventoryPlayer) {
super(
inventoryPlayer,
getGuiObject(
RandomUtils.getWirelessTerm(inventoryPlayer),
player,
player.worldObj,
(int) player.posX,
(int) player.posY,
(int) player.posZ));
this.clientCM = new ConfigManager(this);
this.clientCM.registerSetting(Settings.SORT_BY, SortOrder.NAME);
this.clientCM.registerSetting(Settings.VIEW_MODE, ViewItems.ALL);
this.clientCM.registerSetting(Settings.SORT_DIRECTION, SortDir.ASCENDING);
this.mySrc = new WCTPlayerSource(inventoryPlayer.player, this.getActionHost());
this.customName = "WCTContainer";
this.setCustomName("WCTContainer");
this.boosterInventory = new WCTInventoryBooster(RandomUtils.getWirelessTerm(inventoryPlayer));
this.magnetInventory = new WCTInventoryMagnet(RandomUtils.getWirelessTerm(inventoryPlayer));
@@ -219,12 +194,10 @@ public class ContainerWirelessCraftingTerminal extends Container
this.obj =
getGuiObject(containerstack, player, worldObj, (int) player.posX, (int) player.posY, (int) player.posZ);
this.civ = (IPortableCell) this.obj;
this.civ = this.obj;
final IGridNode node = ((IGridHost) this.obj).getGridNode(ForgeDirection.UNKNOWN);
this.networkNode = node;
this.prepareSync();
if (Platform.isServer()) {
this.serverCM = civ.getConfigManager();
this.monitor = civ.getItemInventory();
@@ -232,7 +205,7 @@ public class ContainerWirelessCraftingTerminal extends Container
this.monitor.addListener(this, null);
setCellInventory(this.monitor);
if (civ instanceof IPortableCell) {
setPowerSource((IEnergySource) this.civ);
setPowerSource(this.civ);
}
} else {
this.setValidContainer(false);
@@ -260,7 +233,7 @@ public class ContainerWirelessCraftingTerminal extends Container
// Add player inventory slots
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 9; ++j) {
inventorySlot[k] = new SlotPlayerInv(this.inventoryPlayer, j + i * 9 + 9, j * 18 + 8, 0 + i * 18);
inventorySlot[k] = new SlotPlayerInv(this.inventoryPlayer, j + i * 9 + 9, j * 18 + 8, i * 18);
this.addSlotToContainer(inventorySlot[k]);
k++;
}
@@ -288,7 +261,7 @@ public class ContainerWirelessCraftingTerminal extends Container
craftingSlot = new SlotCraftingTerm(
this.getPlayerInv().player,
this.mySrc,
this.getActionSource(),
this.getPowerSource(),
this.obj,
this.craftingGrid,
@@ -302,7 +275,7 @@ public class ContainerWirelessCraftingTerminal extends Container
// Add view cell slots
for (int i = 0; i < 5; i++) {
viewCellSlot[i] = new SlotViewCell(getViewCellStorage(), i, 207, (i * 18) + 8);
viewCellSlot[i] = new SlotViewCell(getViewCellStorage(), i, 207, (i * 18) + 8, inventoryPlayer);
addSlotToContainer(viewCellSlot[i]);
}
@@ -319,12 +292,6 @@ public class ContainerWirelessCraftingTerminal extends Container
thisItem.checkForBooster(containerstack);
}
public void setCellInventory(final IMEInventoryHandler<IAEItemStack> cellInv) {
this.cellInv = cellInv;
}
public void onSlotChange(final Slot s) {}
@Override
protected Slot addSlotToContainer(final Slot newSlot) {
if (newSlot instanceof AppEngSlot) {
@@ -372,6 +339,7 @@ public class ContainerWirelessCraftingTerminal extends Container
writeToNBT("crafting");
}
@Override
public void doAction(final EntityPlayerMP player, final InventoryAction action, final int slot, final long id) {
if (slot >= 0 && slot < this.inventorySlots.size()) {
final Slot s = this.getSlot(slot);
@@ -383,7 +351,9 @@ public class ContainerWirelessCraftingTerminal extends Container
case CRAFT_STACK:
((SlotCraftingTerm) s).doClick(action, player);
this.updateHeld(player);
break;
default:
break;
}
}
@@ -453,7 +423,7 @@ public class ContainerWirelessCraftingTerminal extends Container
}
// get target item.
final IAEItemStack slotItem = this.clientRequestedTargetItem;
final IAEItemStack slotItem = getTargetStack();
switch (action) {
case SHIFT_CLICK:
@@ -666,23 +636,6 @@ public class ContainerWirelessCraftingTerminal extends Container
}
}
public IMEInventoryHandler<IAEItemStack> getCellInventory() {
return this.cellInv;
}
protected void updateHeld(final EntityPlayerMP p) {
if (Platform.isServer()) {
try {
NetworkHandler.instance.sendTo(
new PacketInventoryAction(
InventoryAction.UPDATE_HAND, 0, AEItemStack.create(p.inventory.getItemStack())),
p);
} catch (final IOException e) {
WCTLog.debug(e.getMessage());
}
}
}
private void updateCraftingMatrix() {
if (!this.containerstack.hasTagCompound()) {
this.containerstack.setTagCompound(new NBTTagCompound());
@@ -750,7 +703,7 @@ public class ContainerWirelessCraftingTerminal extends Container
return viewCellSlot[index];
}
private WirelessTerminalGuiObject getGuiObject(
public static WirelessTerminalGuiObject getGuiObject(
final ItemStack it, final EntityPlayer player, final World w, final int x, final int y, final int z) {
if (it != null) {
final IWirelessCraftingTermHandler wh = (IWirelessCraftingTermHandler)
@@ -765,16 +718,6 @@ public class ContainerWirelessCraftingTerminal extends Container
@Override
public void detectAndSendChanges() {
this.sendCustomName();
// if (Platform.isSameItem(this.civ.getItemStack(), this.getPlayerInv().getCurrentItem())) {
// this.getPlayerInv().setInventorySlotContents(this.getPlayerInv().currentItem, this.civ.getItemStack());
// }
// else {
// this.setValidContainer(false);
// }
// drain 1 ae t
this.ticks++;
if (this.ticks > 10) {
@@ -838,18 +781,7 @@ public class ContainerWirelessCraftingTerminal extends Container
WCTLog.debug(e.getMessage());
}
}
this.sendCustomName();
if (Platform.isServer()) {
for (final Object crafter : this.crafters) {
final ICrafting icrafting = (ICrafting) crafter;
for (final SyncData sd : this.syncData.values()) {
sd.tick(icrafting);
}
}
}
}
// if (FMLCommonHandler.instance().getSide() == Side.CLIENT) {
if (!isInRange()) {
if (!isBoosterInstalled() || !Reference.WCT_BOOSTER_ENABLED) {
if (this.isValidContainer()) {
@@ -875,7 +807,7 @@ public class ContainerWirelessCraftingTerminal extends Container
} else {
this.setPowerMultiplier(AEConfig.instance.wireless_getDrainRate(this.obj.getRange()));
}
// }
super.detectAndSendChanges();
}
@@ -890,9 +822,7 @@ public class ContainerWirelessCraftingTerminal extends Container
Item boosterSlotContents = getSlotFromInventory(this.boosterInventory, BOOSTER_INDEX)
.getStack()
.getItem();
if (boosterSlotContents instanceof ItemInfinityBooster) {
return true;
}
return boosterSlotContents instanceof ItemInfinityBooster;
}
return false;
}
@@ -908,260 +838,27 @@ public class ContainerWirelessCraftingTerminal extends Container
Item magnetSlotContents = getSlotFromInventory(this.magnetInventory, MAGNET_INDEX)
.getStack()
.getItem();
if (magnetSlotContents instanceof ItemMagnet) {
return true;
}
return magnetSlotContents instanceof ItemMagnet;
}
return false;
}
public BaseActionSource getActionSource() {
return this.mySrc;
}
@Override
public boolean canInteractWith(final EntityPlayer entityplayer) {
if (this.isValidContainer()) {
return true;
}
return false;
}
private void sendCustomName() {
if (!this.sentCustomName) {
this.sentCustomName = true;
if (Platform.isServer()) {
ICustomNameObject name = null;
if (this.obj instanceof ICustomNameObject) {
name = (ICustomNameObject) this.obj;
}
if (this instanceof ICustomNameObject) {
name = (ICustomNameObject) this;
}
if (name != null) {
if (name.hasCustomName()) {
this.setCustomName(name.getCustomName());
}
if (this.getCustomName() != null) {
try {
NetworkHandler.instance.sendTo(
new PacketValueConfig("CustomName", this.getCustomName()),
(EntityPlayerMP) this.getInventoryPlayer().player);
} catch (final IOException e) {
WCTLog.debug(e.getMessage());
}
}
}
}
}
}
public void setCustomName(final String customName) {
this.customName = customName;
}
public String getCustomName() {
return this.customName;
}
public void stringSync(final int idx, final String value) {
if (this.syncData.containsKey(idx)) {
this.syncData.get(idx).update(value);
}
}
public void verifyPermissions(final SecurityPermissions security, final boolean requirePower) {
if (Platform.isClient()) {
return;
}
this.ticksSinceCheck++;
if (this.ticksSinceCheck < 20) {
return;
}
this.ticksSinceCheck = 0;
this.setValidContainer(this.isValidContainer() && this.hasAccess(security, requirePower));
}
protected boolean isInRange() {
return this.obj.rangeCheck(Reference.WCT_BOOSTER_ENABLED && this.isBoosterInstalled());
}
protected boolean networkIsPowered() {
final WCTIActionHost host = this.getActionHost();
final IActionHost host = this.getActionHost();
if (host != null) {
final IGrid grid = this.obj.getTargetGrid();
if (grid != null) {
final IEnergyGrid eg = grid.getCache(IEnergyGrid.class);
if (eg.isNetworkPowered()) {
return true;
}
return eg.isNetworkPowered();
}
}
return false;
}
protected boolean hasAccess(final SecurityPermissions perm, final boolean requirePower) {
final IGrid grid = this.obj.getTargetGrid();
if (grid != null) {
final IEnergyGrid eg = grid.getCache(IEnergyGrid.class);
if (!eg.isNetworkPowered()) {
return false;
}
}
final ISecurityGrid sg = grid.getCache(ISecurityGrid.class);
if (sg.hasPermission(this.getInventoryPlayer().player, perm)) {
return true;
}
return false;
}
/*
protected boolean hasAccess(final SecurityPermissions perm, final boolean requirePower) {
final WCTIActionHost host = this.getActionHost();
if (host != null) {
final IGridNode gn = host.getActionableNode();
if (gn != null) {
final IGrid g = gn.getGrid();
if (g != null) {
if (requirePower) {
final IEnergyGrid eg = g.getCache(IEnergyGrid.class);
if (!eg.isNetworkPowered() && Platform.isServer()) {
return false;
}
}
final ISecurityGrid sg = g.getCache(ISecurityGrid.class);
if (sg.hasPermission(this.player, perm) && Platform.isServer()) {
return true;
}
}
}
}
return false;
}
*/
public void lockPlayerInventorySlot(final int idx) {
this.locked.add(idx);
}
public boolean isValidForSlot(final Slot s, final ItemStack i) {
return true;
}
public void postPartial(final PacketPartialItem packetPartialItem) {
this.dataChunks.add(packetPartialItem);
if (packetPartialItem.getPageCount() == this.dataChunks.size()) {
this.parsePartials();
}
}
private void parsePartials() {
int total = 0;
for (final PacketPartialItem ppi : this.dataChunks) {
total += ppi.getSize();
}
final byte[] buffer = new byte[total];
int cursor = 0;
for (final PacketPartialItem ppi : this.dataChunks) {
cursor = ppi.write(buffer, cursor);
}
try {
final NBTTagCompound data = CompressedStreamTools.readCompressed(new ByteArrayInputStream(buffer));
if (data != null) {
this.setTargetStack(AEApi.instance().storage().createItemStack(ItemStack.loadItemStackFromNBT(data)));
}
} catch (final IOException e) {
WCTLog.debug(e.getMessage());
}
this.dataChunks.clear();
}
public IAEItemStack getTargetStack() {
return this.clientRequestedTargetItem;
}
public void setTargetStack(final IAEItemStack stack) {
// client doesn't need to re-send, makes for lower overhead rapid
// packets.
if (Platform.isClient()) {
final ItemStack a = stack == null ? null : stack.getItemStack();
final ItemStack b =
this.clientRequestedTargetItem == null ? null : this.clientRequestedTargetItem.getItemStack();
if (Platform.isSameItemPrecise(a, b)) {
return;
}
final ByteArrayOutputStream stream = new ByteArrayOutputStream();
final NBTTagCompound item = new NBTTagCompound();
if (stack != null) {
stack.writeToNBT(item);
}
try {
CompressedStreamTools.writeCompressed(item, stream);
final int maxChunkSize = 30000;
final List<byte[]> miniPackets = new LinkedList<byte[]>();
final byte[] data = stream.toByteArray();
final ByteArrayInputStream bis = new ByteArrayInputStream(data, 0, stream.size());
while (bis.available() > 0) {
final int nextBLock = bis.available() > maxChunkSize ? maxChunkSize : bis.available();
final byte[] nextSegment = new byte[nextBLock];
bis.read(nextSegment);
miniPackets.add(nextSegment);
}
bis.close();
stream.close();
int page = 0;
for (final byte[] packet : miniPackets) {
final PacketPartialItem ppi = new PacketPartialItem(page, miniPackets.size(), packet);
page++;
NetworkHandler.instance.sendToServer(ppi);
}
} catch (final IOException e) {
WCTLog.debug(e.getMessage());
return;
}
}
this.clientRequestedTargetItem = stack == null ? null : stack.copy();
}
private void prepareSync() {
for (final Field f : this.getClass().getFields()) {
if (f.isAnnotationPresent(GuiSync.class)) {
final GuiSync annotation = f.getAnnotation(GuiSync.class);
if (this.syncData.containsKey(annotation.value())) {
WCTLog.warning("Channel already in use: " + annotation.value() + " for " + f.getName());
} else {
this.syncData.put(annotation.value(), new SyncData(this, f, annotation));
}
}
}
}
protected WCTIActionHost getActionHost() {
if (this.obj instanceof WCTIActionHost) {
return (WCTIActionHost) this.obj;
}
return null;
}
@Override
public IConfigManager getConfigManager() {
if (Platform.isServer()) {
@@ -1258,23 +955,11 @@ public class ContainerWirelessCraftingTerminal extends Container
}
}
public void onUpdate(final String field, final Object oldValue, final Object newValue) {
// =]
}
public IEnergySource getPowerSource() {
return this.powerSrc;
}
public boolean isPowered() {
double pwr = this.thisItem.getAECurrentPower(this.containerstack);
return (pwr > 0.0);
}
public void setPowerSource(final IEnergySource powerSrc) {
this.powerSrc = powerSrc;
}
private double getPowerMultiplier() {
return this.powerMultiplier;
}
@@ -1283,37 +968,6 @@ public class ContainerWirelessCraftingTerminal extends Container
this.powerMultiplier = powerMultiplier;
}
public InventoryPlayer getPlayerInv() {
return this.getInventoryPlayer();
}
public InventoryPlayer getInventoryPlayer() {
return this.inventoryPlayer;
}
public boolean isValidContainer() {
return this.isContainerValid;
}
public void setValidContainer(final boolean isContainerValid) {
this.isContainerValid = isContainerValid;
}
public Object getTarget() {
if (this.obj != null) {
return this.obj;
}
return null;
}
public ContainerOpenContext getOpenContext() {
return this.openContext;
}
public void setOpenContext(final ContainerOpenContext openContext) {
this.openContext = openContext;
}
/**
* Fetches crafting matrix ItemStacks
*
@@ -1325,7 +979,7 @@ public class ContainerWirelessCraftingTerminal extends Container
NBTTagList tagList = nbtTagCompound.getTagList("CraftingMatrix", 10);
craftMatrixInventory = new ItemStack[9];
for (int i = 0; i < tagList.tagCount(); ++i) {
NBTTagCompound tagCompound = (NBTTagCompound) tagList.getCompoundTagAt(i);
NBTTagCompound tagCompound = tagList.getCompoundTagAt(i);
int slot = tagCompound.getByte("Slot");
if (slot >= 0 && slot < craftMatrixInventory.length) {
craftMatrixInventory[slot] = ItemStack.loadItemStackFromNBT(tagCompound);
@@ -1342,27 +996,27 @@ public class ContainerWirelessCraftingTerminal extends Container
}
switch (which) {
case "booster":
((WCTInventoryBooster) boosterInventory).writeNBT(this.containerstack.getTagCompound());
boosterInventory.writeNBT(this.containerstack.getTagCompound());
break;
case "crafting":
((WCTInventoryCrafting) craftingGrid).writeNBT(this.containerstack.getTagCompound());
craftingGrid.writeNBT(this.containerstack.getTagCompound());
break;
case "viewCell":
((WCTInventoryViewCell) viewCellInventory).writeNBT(this.containerstack.getTagCompound());
viewCellInventory.writeNBT(this.containerstack.getTagCompound());
break;
case "magnet":
((WCTInventoryMagnet) magnetInventory).writeNBT(this.containerstack.getTagCompound());
magnetInventory.writeNBT(this.containerstack.getTagCompound());
break;
case "trash":
((WCTInventoryTrash) trashInventory).writeNBT(this.containerstack.getTagCompound());
trashInventory.writeNBT(this.containerstack.getTagCompound());
break;
case "all":
default:
((WCTInventoryBooster) boosterInventory).writeNBT(this.containerstack.getTagCompound());
((WCTInventoryCrafting) craftingGrid).writeNBT(this.containerstack.getTagCompound());
((WCTInventoryViewCell) viewCellInventory).writeNBT(this.containerstack.getTagCompound());
((WCTInventoryMagnet) magnetInventory).writeNBT(this.containerstack.getTagCompound());
((WCTInventoryTrash) trashInventory).writeNBT(this.containerstack.getTagCompound());
boosterInventory.writeNBT(this.containerstack.getTagCompound());
craftingGrid.writeNBT(this.containerstack.getTagCompound());
viewCellInventory.writeNBT(this.containerstack.getTagCompound());
magnetInventory.writeNBT(this.containerstack.getTagCompound());
trashInventory.writeNBT(this.containerstack.getTagCompound());
break;
}
}
@@ -1604,81 +1258,6 @@ public class ContainerWirelessCraftingTerminal extends Container
return null;
}
public void swapSlotContents(final int slotA, final int slotB) {
final Slot a = this.getSlot(slotA);
final Slot b = this.getSlot(slotB);
// NPE protection...
if (a == null || b == null) {
return;
}
final ItemStack isA = a.getStack();
final ItemStack isB = b.getStack();
// something to do?
if (isA == null && isB == null) {
return;
}
// can take?
if (isA != null && !a.canTakeStack(this.getInventoryPlayer().player)) {
return;
}
if (isB != null && !b.canTakeStack(this.getInventoryPlayer().player)) {
return;
}
// swap valid?
if (isB != null && !a.isItemValid(isB)) {
return;
}
if (isA != null && !b.isItemValid(isA)) {
return;
}
ItemStack testA = isB == null ? null : isB.copy();
ItemStack testB = isA == null ? null : isA.copy();
// can put some back?
if (testA != null && testA.stackSize > a.getSlotStackLimit()) {
if (testB != null) {
return;
}
final int totalA = testA.stackSize;
testA.stackSize = a.getSlotStackLimit();
testB = testA.copy();
testB.stackSize = totalA - testA.stackSize;
}
if (testB != null && testB.stackSize > b.getSlotStackLimit()) {
if (testA != null) {
return;
}
final int totalB = testB.stackSize;
testB.stackSize = b.getSlotStackLimit();
testA = testB.copy();
testA.stackSize = totalB - testA.stackSize;
}
a.putStack(testA);
b.putStack(testB);
}
@SuppressWarnings("unused")
private boolean isCraftMatrixSlot(AppEngSlot cs) {
return (cs.getSlotIndex() >= this.firstCraftingSlotNumber)
&& !(cs.getSlotIndex() <= this.lastCraftingSlotNumber);
}
private void updateSlot(final Slot clickSlot) {
this.detectAndSendChanges();
}
@@ -1728,11 +1307,7 @@ public class ContainerWirelessCraftingTerminal extends Container
@SuppressWarnings("unused")
private boolean notArmorOrBooster(ItemStack is) {
if ((is.getItem() instanceof ItemInfinityBooster) || (is.getItem() instanceof ItemArmor)) {
return false;
} else {
return true;
}
return (!(is.getItem() instanceof ItemInfinityBooster)) && (!(is.getItem() instanceof ItemArmor));
}
@Override
@@ -1750,15 +1325,6 @@ public class ContainerWirelessCraftingTerminal extends Container
return null;
}
public final void updateFullProgressBar(final int idx, final long value) {
if (this.syncData.containsKey(idx)) {
this.syncData.get(idx).update(value);
return;
}
this.updateProgressBar(idx, (int) value);
}
/**
* Handles shift-clicking of items whose maxStackSize is 1
*/
@@ -1,45 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container;
import appeng.api.networking.crafting.ICraftingCPU;
import appeng.util.ItemSorters;
import javax.annotation.Nonnull;
public class CraftingCPURecord implements Comparable<CraftingCPURecord> {
private final String myName;
private final ICraftingCPU cpu;
private final long size;
private final int processors;
public CraftingCPURecord(final long size, final int coProcessors, final ICraftingCPU server) {
this.size = size;
this.processors = coProcessors;
this.cpu = server;
this.myName = server.getName();
}
@Override
public int compareTo(@Nonnull final CraftingCPURecord o) {
final int a = ItemSorters.compareLong(o.getProcessors(), this.getProcessors());
if (a != 0) {
return a;
}
return ItemSorters.compareLong(o.getSize(), this.getSize());
}
public ICraftingCPU getCpu() {
return this.cpu;
}
String getName() {
return this.myName;
}
int getProcessors() {
return this.processors;
}
long getSize() {
return this.size;
}
}
@@ -1,17 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.guisync;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Annotates that this field should be synchronized between the server and client.
* Requires the field to be public.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface GuiSync {
int value();
}
@@ -1,140 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.guisync;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.EnumSet;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ICrafting;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerWirelessCraftingTerminal;
import net.p455w0rd.wirelesscraftingterminal.common.container.WCTBaseContainer;
import net.p455w0rd.wirelesscraftingterminal.common.utils.WCTLog;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.NetworkHandler;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketValueConfig;
public class SyncData {
private final Container source;
private final Field field;
private final int channel;
private Object clientVersion;
public SyncData(final Container container, final Field field, final GuiSync annotation) {
if (container instanceof ContainerWirelessCraftingTerminal) {
this.source = (ContainerWirelessCraftingTerminal) container;
} else if (container instanceof WCTBaseContainer) {
this.source = (WCTBaseContainer) container;
} else {
this.source = container;
}
this.clientVersion = null;
this.field = field;
this.channel = annotation.value();
}
public int getChannel() {
return this.channel;
}
public void tick(final ICrafting c) {
try {
final Object val = this.field.get(this.source);
if (val != null && this.clientVersion == null) {
this.send(c, val);
} else if (!val.equals(this.clientVersion)) {
this.send(c, val);
}
} catch (final IllegalArgumentException e) {
WCTLog.debug(e.getMessage());
} catch (final IllegalAccessException e) {
WCTLog.debug(e.getMessage());
} catch (final IOException e) {
WCTLog.debug(e.getMessage());
}
}
@SuppressWarnings("rawtypes")
private void send(final ICrafting o, final Object val) throws IOException {
if (val instanceof String) {
if (o instanceof EntityPlayerMP) {
NetworkHandler.instance.sendTo(
new PacketValueConfig("SyncDat." + this.channel, (String) val), (EntityPlayerMP) o);
}
} else if (this.field.getType().isEnum()) {
o.sendProgressBarUpdate(this.source, this.channel, ((Enum) val).ordinal());
} else if (val instanceof Long || val.getClass() == long.class) {
// NetworkHandler.instance.sendTo( new PacketProgressBar( this.channel, (Long) val ), (EntityPlayerMP) o );
} else if (val instanceof Boolean || val.getClass() == boolean.class) {
o.sendProgressBarUpdate(this.source, this.channel, ((Boolean) val) ? 1 : 0);
} else {
o.sendProgressBarUpdate(this.source, this.channel, (Integer) val);
}
this.clientVersion = val;
}
public void update(final Object val) {
try {
final Object oldValue = this.field.get(this.source);
if (val instanceof String) {
this.updateString(oldValue, (String) val);
} else {
this.updateValue(oldValue, (Long) val);
}
} catch (final IllegalArgumentException e) {
WCTLog.debug(e.getMessage());
} catch (final IllegalAccessException e) {
WCTLog.debug(e.getMessage());
}
}
private void updateString(final Object oldValue, final String val) {
try {
this.field.set(this.source, val);
} catch (final IllegalArgumentException e) {
WCTLog.debug(e.getMessage());
} catch (final IllegalAccessException e) {
WCTLog.debug(e.getMessage());
}
}
@SuppressWarnings({"unchecked", "rawtypes"})
private void updateValue(final Object oldValue, final long val) {
try {
if (this.field.getType().isEnum()) {
final EnumSet<? extends Enum> valList = EnumSet.allOf((Class<? extends Enum>) this.field.getType());
for (final Enum e : valList) {
if (e.ordinal() == val) {
this.field.set(this.source, e);
break;
}
}
} else {
if (this.field.getType().equals(int.class)) {
this.field.set(this.source, (int) val);
} else if (this.field.getType().equals(long.class)) {
this.field.set(this.source, val);
} else if (this.field.getType().equals(boolean.class)) {
this.field.set(this.source, val == 1);
} else if (this.field.getType().equals(Integer.class)) {
this.field.set(this.source, (int) val);
} else if (this.field.getType().equals(Long.class)) {
this.field.set(this.source, val);
} else if (this.field.getType().equals(Boolean.class)) {
this.field.set(this.source, val == 1);
}
}
if (this.source instanceof ContainerWirelessCraftingTerminal) {
((ContainerWirelessCraftingTerminal) this.source)
.onUpdate(this.field.getName(), oldValue, this.field.get(this.source));
}
if (this.source instanceof WCTBaseContainer) {
((WCTBaseContainer) this.source).onUpdate(this.field.getName(), oldValue, this.field.get(this.source));
}
} catch (final IllegalArgumentException e) {
WCTLog.debug(e.getMessage());
} catch (final IllegalAccessException e) {
WCTLog.debug(e.getMessage());
}
}
}
@@ -1,161 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.slot;
import cpw.mods.fml.common.FMLCommonHandler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemHoe;
import net.minecraft.item.ItemPickaxe;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.item.ItemTool;
import net.minecraft.stats.AchievementList;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent;
public class AppEngCraftingSlot extends AppEngSlot {
/**
* The craft matrix inventory linked to this result slot.
*/
private final IInventory craftMatrix;
/**
* The player that is using the GUI where this slot resides.
*/
private final EntityPlayer thePlayer;
/**
* The number of items that have been crafted so far. Gets passed to ItemStack.onCrafting before being reset.
*/
private int amountCrafted;
public AppEngCraftingSlot(
final EntityPlayer par1EntityPlayer,
final IInventory par2IInventory,
final IInventory par3IInventory,
final int par4,
final int par5,
final int par6) {
super(par3IInventory, par4, par5, par6);
this.thePlayer = par1EntityPlayer;
this.craftMatrix = par2IInventory;
}
/**
* Check if the stack is a valid item for this slot. Always true beside for the armor slots.
*/
@Override
public boolean isItemValid(final ItemStack par1ItemStack) {
return false;
}
/**
* the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood. Typically increases an
* internal count then calls onCrafting(item).
*/
@Override
protected void onCrafting(final ItemStack par1ItemStack, final int par2) {
this.amountCrafted += par2;
this.onCrafting(par1ItemStack);
}
/**
* the itemStack passed in is the output - ie, iron ingots, and pickaxes, not ore and wood.
*/
@Override
protected void onCrafting(final ItemStack par1ItemStack) {
par1ItemStack.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.amountCrafted);
this.amountCrafted = 0;
if (par1ItemStack.getItem() == Item.getItemFromBlock(Blocks.crafting_table)) {
this.thePlayer.addStat(AchievementList.buildWorkBench, 1);
}
if (par1ItemStack.getItem() instanceof ItemPickaxe) {
this.thePlayer.addStat(AchievementList.buildPickaxe, 1);
}
if (par1ItemStack.getItem() == Item.getItemFromBlock(Blocks.furnace)) {
this.thePlayer.addStat(AchievementList.buildFurnace, 1);
}
if (par1ItemStack.getItem() instanceof ItemHoe) {
this.thePlayer.addStat(AchievementList.buildHoe, 1);
}
if (par1ItemStack.getItem() == Items.bread) {
this.thePlayer.addStat(AchievementList.makeBread, 1);
}
if (par1ItemStack.getItem() == Items.cake) {
this.thePlayer.addStat(AchievementList.bakeCake, 1);
}
if (par1ItemStack.getItem() instanceof ItemPickaxe
&& ((ItemTool) par1ItemStack.getItem()).func_150913_i() != Item.ToolMaterial.WOOD) {
this.thePlayer.addStat(AchievementList.buildBetterPickaxe, 1);
}
if (par1ItemStack.getItem() instanceof ItemSword) {
this.thePlayer.addStat(AchievementList.buildSword, 1);
}
if (par1ItemStack.getItem() == Item.getItemFromBlock(Blocks.enchanting_table)) {
this.thePlayer.addStat(AchievementList.enchantments, 1);
}
if (par1ItemStack.getItem() == Item.getItemFromBlock(Blocks.bookshelf)) {
this.thePlayer.addStat(AchievementList.bookcase, 1);
}
}
@Override
public void onPickupFromSlot(final EntityPlayer par1EntityPlayer, final ItemStack par2ItemStack) {
FMLCommonHandler.instance().firePlayerCraftingEvent(par1EntityPlayer, par2ItemStack, this.craftMatrix);
this.onCrafting(par2ItemStack);
for (int i = 0; i < this.craftMatrix.getSizeInventory(); ++i) {
final ItemStack itemstack1 = this.craftMatrix.getStackInSlot(i);
if (itemstack1 != null) {
this.craftMatrix.decrStackSize(i, 1);
if (itemstack1.getItem().hasContainerItem(itemstack1)) {
final ItemStack itemstack2 = itemstack1.getItem().getContainerItem(itemstack1);
if (itemstack2 != null
&& itemstack2.isItemStackDamageable()
&& itemstack2.getItemDamage() > itemstack2.getMaxDamage()) {
MinecraftForge.EVENT_BUS.post(new PlayerDestroyItemEvent(this.thePlayer, itemstack2));
continue;
}
if (!itemstack1.getItem().doesContainerItemLeaveCraftingGrid(itemstack1)
|| !this.thePlayer.inventory.addItemStackToInventory(itemstack2)) {
if (this.craftMatrix.getStackInSlot(i) == null) {
this.craftMatrix.setInventorySlotContents(i, itemstack2);
} else {
this.thePlayer.dropPlayerItemWithRandomChoice(itemstack2, false);
}
}
}
}
}
}
/**
* Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new
* stack.
*/
@Override
public ItemStack decrStackSize(final int par1) {
if (this.getHasStack()) {
this.amountCrafted += Math.min(par1, this.getStack().stackSize);
}
return super.decrStackSize(par1);
}
}
@@ -1,210 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.slot;
import appeng.tile.inventory.AppEngInternalInventory;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerWirelessCraftingTerminal;
import net.p455w0rd.wirelesscraftingterminal.common.container.WCTBaseContainer;
public class AppEngSlot extends Slot {
private final int defX;
private final int defY;
private boolean isDraggable = true;
private boolean isPlayerSide = false;
private Container myContainer = null;
private int IIcon = -1;
private hasCalculatedValidness isValid;
private boolean isDisplay = false;
public AppEngSlot(final IInventory inv, final int idx, final int x, final int y) {
super(inv, idx, x, y);
this.defX = x;
this.defY = y;
this.setIsValid(hasCalculatedValidness.NotAvailable);
}
public Slot setNotDraggable() {
this.setDraggable(false);
return this;
}
public Slot setPlayerSide() {
this.isPlayerSide = true;
return this;
}
public String getTooltip() {
return null;
}
public void clearStack() {
super.putStack(null);
}
@Override
public boolean isItemValid(final ItemStack par1ItemStack) {
if (this.isEnabled()) {
return super.isItemValid(par1ItemStack);
}
return false;
}
@Override
public ItemStack getStack() {
if (!this.isEnabled()) {
return null;
}
if (this.inventory.getSizeInventory() <= this.getSlotIndex()) {
return null;
}
if (this.isDisplay()) {
this.setDisplay(false);
return this.getDisplayStack();
}
return super.getStack();
}
@Override
public void putStack(final ItemStack par1ItemStack) {
if (this.isEnabled()) {
super.putStack(par1ItemStack);
if (this.getContainer() != null) {
if (this.getContainer() instanceof ContainerWirelessCraftingTerminal) {
((ContainerWirelessCraftingTerminal) this.getContainer()).onSlotChange(this);
}
if (this.getContainer() instanceof WCTBaseContainer) {
((WCTBaseContainer) this.getContainer()).onSlotChange(this);
}
}
}
}
@Override
public void onSlotChanged() {
if (this.inventory instanceof AppEngInternalInventory) {
((AppEngInternalInventory) this.inventory).markDirty(this.getSlotIndex());
} else {
super.onSlotChanged();
}
this.setIsValid(hasCalculatedValidness.NotAvailable);
}
@Override
public boolean canTakeStack(final EntityPlayer par1EntityPlayer) {
if (this.isEnabled()) {
return super.canTakeStack(par1EntityPlayer);
}
return false;
}
@Override
public boolean func_111238_b() {
return this.isEnabled();
}
public ItemStack getDisplayStack() {
return super.getStack();
}
public boolean isEnabled() {
return true;
}
public float getOpacityOfIcon() {
return 0.4f;
}
public boolean renderIconWithItem() {
return false;
}
public int getIcon() {
return this.getIIcon();
}
public boolean isPlayerSide() {
return this.isPlayerSide;
}
public boolean shouldDisplay() {
return this.isEnabled();
}
public int getX() {
return this.defX;
}
public int getY() {
return this.defY;
}
private int getIIcon() {
return this.IIcon;
}
public void setIIcon(final int iIcon) {
this.IIcon = iIcon;
}
private boolean isDisplay() {
return this.isDisplay;
}
public void setDisplay(final boolean isDisplay) {
this.isDisplay = isDisplay;
}
public boolean isDraggable() {
return this.isDraggable;
}
private void setDraggable(final boolean isDraggable) {
this.isDraggable = isDraggable;
}
void setPlayerSide(final boolean isPlayerSide) {
this.isPlayerSide = isPlayerSide;
}
public hasCalculatedValidness getIsValid() {
return this.isValid;
}
public void setIsValid(final hasCalculatedValidness isValid) {
this.isValid = isValid;
}
Container getContainer() {
if (this.myContainer instanceof ContainerWirelessCraftingTerminal) {
return (ContainerWirelessCraftingTerminal) this.myContainer;
}
if (this.myContainer instanceof WCTBaseContainer) {
return (WCTBaseContainer) this.myContainer;
}
return this.myContainer;
}
public void setContainer(final Container myContainer) {
if (this.myContainer instanceof ContainerWirelessCraftingTerminal) {
this.myContainer = (ContainerWirelessCraftingTerminal) myContainer;
} else if (this.myContainer instanceof WCTBaseContainer) {
this.myContainer = (WCTBaseContainer) myContainer;
} else {
this.myContainer = myContainer;
}
}
public enum hasCalculatedValidness {
NotAvailable,
Valid,
Invalid
}
}
@@ -1,59 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.slot;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
public class NullSlot extends AppEngSlot {
public NullSlot() {
super(null, 0, 0, 0);
}
@Override
public void onSlotChange(final ItemStack par1ItemStack, final ItemStack par2ItemStack) {}
@Override
public void onPickupFromSlot(final EntityPlayer par1EntityPlayer, final ItemStack par2ItemStack) {}
@Override
public boolean isItemValid(final ItemStack par1ItemStack) {
return false;
}
@Override
public ItemStack getStack() {
return null;
}
@Override
public void putStack(final ItemStack par1ItemStack) {}
@Override
public void onSlotChanged() {}
@Override
public int getSlotStackLimit() {
return 0;
}
@Override
public ItemStack decrStackSize(final int par1) {
return null;
}
@Override
public boolean isSlotInInventory(final IInventory par1IInventory, final int par2) {
return false;
}
@Override
public boolean canTakeStack(final EntityPlayer par1EntityPlayer) {
return false;
}
@Override
public int getSlotIndex() {
return 0;
}
}
@@ -1,5 +1,6 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.slot;
import appeng.container.slot.SlotFake;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
@@ -9,7 +9,7 @@ import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
public class SlotArmor extends AppEngSlot {
public class SlotArmor extends appeng.container.slot.AppEngSlot {
/*
* The armor type that can be placed on that slot, it uses the same values
@@ -9,7 +9,7 @@ import net.minecraft.util.IIcon;
import net.p455w0rd.wirelesscraftingterminal.items.ItemBoosterBGIcon;
import net.p455w0rd.wirelesscraftingterminal.items.ItemInfinityBooster;
public class SlotBooster extends AppEngSlot {
public class SlotBooster extends appeng.container.slot.AppEngSlot {
/**
* Custom slot for infinity booster card
@@ -1,40 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.slot;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
public class SlotCraftingMatrix extends AppEngSlot {
private final Container c;
public SlotCraftingMatrix(
final Container c, final IInventory par1iInventory, final int par2, final int par3, final int par4) {
super(par1iInventory, par2, par3, par4);
this.c = c;
}
@Override
public void clearStack() {
super.clearStack();
this.c.onCraftMatrixChanged(this.inventory);
}
@Override
public void putStack(final ItemStack par1ItemStack) {
super.putStack(par1ItemStack);
this.c.onCraftMatrixChanged(this.inventory);
}
@Override
public boolean isPlayerSide() {
return true;
}
@Override
public ItemStack decrStackSize(final int par1) {
final ItemStack is = super.decrStackSize(par1);
this.c.onCraftMatrixChanged(this.inventory);
return is;
}
}
@@ -1,243 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.slot;
import appeng.api.config.Actionable;
import appeng.api.networking.energy.IEnergySource;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.storage.IMEMonitor;
import appeng.api.storage.IStorageMonitorable;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import appeng.container.ContainerNull;
import appeng.helpers.IContainerCraftingPacket;
import appeng.helpers.InventoryAction;
import appeng.util.InventoryAdaptor;
import appeng.util.Platform;
import appeng.util.inv.AdaptorPlayerHand;
import appeng.util.item.AEItemStack;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
public class SlotCraftingTerm extends AppEngCraftingSlot {
private final IInventory craftInv;
private final IInventory pattern;
private final BaseActionSource mySrc;
private final IEnergySource energySrc;
private final IStorageMonitorable storage;
public SlotCraftingTerm(
final EntityPlayer player,
final BaseActionSource mySrc,
final IEnergySource energySrc,
final IStorageMonitorable storage,
final IInventory cMatrix,
final IInventory secondMatrix,
final IInventory output,
final int x,
final int y,
final IContainerCraftingPacket ccp) {
super(player, cMatrix, output, 0, x, y);
this.energySrc = energySrc;
this.storage = storage;
this.mySrc = mySrc;
this.pattern = cMatrix;
this.craftInv = secondMatrix;
}
public IInventory getCraftingMatrix() {
return this.craftInv;
}
@Override
public boolean canTakeStack(final EntityPlayer par1EntityPlayer) {
return false;
}
@Override
public void onPickupFromSlot(final EntityPlayer p, final ItemStack is) {}
public void doClick(final InventoryAction action, final EntityPlayer who) {
if (this.getStack() == null) {
return;
}
if (Platform.isClient()) {
return;
}
final IMEMonitor<IAEItemStack> inv = this.storage.getItemInventory();
final int howManyPerCraft = this.getStack().stackSize;
int maxTimesToCraft = 0;
InventoryAdaptor ia = null;
if (action == InventoryAction.CRAFT_SHIFT) // craft into player
// inventory...
{
ia = InventoryAdaptor.getAdaptor(who, null);
maxTimesToCraft = (int) Math.floor((double) this.getStack().getMaxStackSize() / (double) howManyPerCraft);
} else if (action == InventoryAction.CRAFT_STACK) // craft into hand,
// full stack
{
ia = new AdaptorPlayerHand(who);
maxTimesToCraft = (int) Math.floor((double) this.getStack().getMaxStackSize() / (double) howManyPerCraft);
} else
// pick up what was crafted...
{
ia = new AdaptorPlayerHand(who);
maxTimesToCraft = 1;
}
maxTimesToCraft = this.capCraftingAttempts(maxTimesToCraft);
if (ia == null) {
return;
}
final ItemStack rs = Platform.cloneItemStack(this.getStack());
if (rs == null) {
return;
}
for (int x = 0; x < maxTimesToCraft; x++) {
if (ia.simulateAdd(rs) == null) {
final IItemList<IAEItemStack> all = inv.getStorageList();
final ItemStack extra = ia.addItems(this.craftItem(who, rs, inv, all));
if (extra != null) {
final List<ItemStack> drops = new ArrayList<ItemStack>();
drops.add(extra);
Platform.spawnDrops(who.worldObj, (int) who.posX, (int) who.posY, (int) who.posZ, drops);
return;
}
}
}
}
private int capCraftingAttempts(final int maxTimesToCraft) {
return maxTimesToCraft;
}
@SuppressWarnings({"rawtypes", "unchecked"})
private ItemStack craftItem(
final EntityPlayer p, final ItemStack request, final IMEMonitor<IAEItemStack> inv, final IItemList all) {
// update crafting matrix...
ItemStack is = this.getStack();
if (is != null && Platform.isSameItem(request, is)) {
final ItemStack[] set = new ItemStack[this.getPattern().getSizeInventory()];
// add one of each item to the items on the board...
if (Platform.isServer()) {
final InventoryCrafting ic = new InventoryCrafting(new ContainerNull(), 3, 3);
for (int x = 0; x < 9; x++) {
ic.setInventorySlotContents(x, this.getPattern().getStackInSlot(x));
}
final IRecipe r = Platform.findMatchingRecipe(ic, p.worldObj);
if (r == null) {
final Item target = request.getItem();
if (target.isDamageable() && target.isRepairable()) {
boolean isBad = false;
for (int x = 0; x < ic.getSizeInventory(); x++) {
final ItemStack pis = ic.getStackInSlot(x);
if (pis == null) {
continue;
}
if (pis.getItem() != target) {
isBad = true;
}
}
if (!isBad) {
super.onPickupFromSlot(p, is);
// actually necessary to cleanup this case...
p.openContainer.onCraftMatrixChanged(this.craftInv);
return request;
}
}
return null;
}
is = r.getCraftingResult(ic);
if (inv != null) {
for (int x = 0; x < this.getPattern().getSizeInventory(); x++) {
if (this.getPattern().getStackInSlot(x) != null) {
set[x] = Platform.extractItemsByRecipe(
this.energySrc,
this.mySrc,
inv,
p.worldObj,
r,
is,
ic,
this.getPattern().getStackInSlot(x),
x,
all,
Actionable.MODULATE,
null);
ic.setInventorySlotContents(x, set[x]);
}
}
}
}
if (this.preCraft(p, inv, set, is)) {
this.makeItem(p, is);
this.postCraft(p, inv, set, is);
}
// shouldn't be necessary...
p.openContainer.onCraftMatrixChanged(this.craftInv);
return is;
}
return null;
}
private boolean preCraft(
final EntityPlayer p, final IMEMonitor<IAEItemStack> inv, final ItemStack[] set, final ItemStack result) {
return true;
}
private void makeItem(final EntityPlayer p, final ItemStack is) {
super.onPickupFromSlot(p, is);
}
private void postCraft(
final EntityPlayer p, final IMEMonitor<IAEItemStack> inv, final ItemStack[] set, final ItemStack result) {
final List<ItemStack> drops = new ArrayList<ItemStack>();
// add one of each item to the items on the board...
if (Platform.isServer()) {
// set new items onto the crafting table...
for (int x = 0; x < this.craftInv.getSizeInventory(); x++) {
if (this.craftInv.getStackInSlot(x) == null) {
this.craftInv.setInventorySlotContents(x, set[x]);
} else if (set[x] != null) {
// eek! put it back!
final IAEItemStack fail =
inv.injectItems(AEItemStack.create(set[x]), Actionable.MODULATE, this.mySrc);
if (fail != null) {
drops.add(fail.getItemStack());
}
}
}
}
if (drops.size() > 0) {
Platform.spawnDrops(p.worldObj, (int) p.posX, (int) p.posY, (int) p.posZ, drops);
}
}
IInventory getPattern() {
return this.pattern;
}
}
@@ -1,22 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.slot;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
public class SlotDisabled extends AppEngSlot {
public SlotDisabled(final IInventory par1iInventory, final int slotIndex, final int x, final int y) {
super(par1iInventory, slotIndex, x, y);
}
@Override
public boolean isItemValid(final ItemStack par1ItemStack) {
return false;
}
@Override
public boolean canTakeStack(final EntityPlayer par1EntityPlayer) {
return false;
}
}
@@ -1,39 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.slot;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
public class SlotFake extends AppEngSlot {
public SlotFake(final IInventory inv, final int idx, final int x, final int y) {
super(inv, idx, x, y);
}
@Override
public void onPickupFromSlot(final EntityPlayer par1EntityPlayer, final ItemStack par2ItemStack) {}
@Override
public ItemStack decrStackSize(final int par1) {
return null;
}
@Override
public boolean isItemValid(final ItemStack par1ItemStack) {
return false;
}
@Override
public void putStack(ItemStack is) {
if (is != null) {
is = is.copy();
}
super.putStack(is);
}
@Override
public boolean canTakeStack(final EntityPlayer par1EntityPlayer) {
return false;
}
}
@@ -1,10 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.slot;
import net.minecraft.inventory.IInventory;
public class SlotFakeCraftingMatrix extends SlotFake {
public SlotFakeCraftingMatrix(final IInventory inv, final int idx, final int x, final int y) {
super(inv, idx, x, y);
}
}
@@ -1,41 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.slot;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
public class SlotInaccessible extends AppEngSlot {
private ItemStack dspStack = null;
public SlotInaccessible(final IInventory i, final int slotIdx, final int x, final int y) {
super(i, slotIdx, x, y);
}
@Override
public boolean isItemValid(final ItemStack i) {
return false;
}
@Override
public void onSlotChanged() {
super.onSlotChanged();
this.dspStack = null;
}
@Override
public boolean canTakeStack(final EntityPlayer par1EntityPlayer) {
return false;
}
@Override
public ItemStack getDisplayStack() {
if (this.dspStack == null) {
final ItemStack dsp = super.getDisplayStack();
if (dsp != null) {
this.dspStack = dsp.copy();
}
}
return this.dspStack;
}
}
@@ -4,7 +4,7 @@ import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.p455w0rd.wirelesscraftingterminal.items.ItemMagnet;
public class SlotMagnet extends AppEngSlot {
public class SlotMagnet extends appeng.container.slot.AppEngSlot {
public SlotMagnet(IInventory inv, int xPos, int yPos) {
super(inv, 0, xPos, yPos);
@@ -1,17 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.slot;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
public class SlotOutput extends AppEngSlot {
public SlotOutput(final IInventory a, final int b, final int c, final int d, final int i) {
super(a, b, c, d);
this.setIIcon(i);
}
@Override
public boolean isItemValid(final ItemStack i) {
return false;
}
}
@@ -1,11 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.slot;
import net.minecraft.inventory.IInventory;
public class SlotPlayerHotBar extends AppEngSlot {
public SlotPlayerHotBar(final IInventory par1iInventory, final int par2, final int par3, final int par4) {
super(par1iInventory, par2, par3, par4);
this.setPlayerSide(true);
}
}
@@ -1,14 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.slot;
import net.minecraft.inventory.IInventory;
// there is nothing special about this slot, its simply used to represent the players inventory, vs a container slot.
public class SlotPlayerInv extends AppEngSlot {
public SlotPlayerInv(final IInventory par1iInventory, final int par2, final int par3, final int par4) {
super(par1iInventory, par2, par3, par4);
this.setPlayerSide(true);
}
}
@@ -7,7 +7,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.p455w0rd.wirelesscraftingterminal.common.utils.RandomUtils;
public class SlotTrash extends AppEngSlot {
public class SlotTrash extends appeng.container.slot.AppEngSlot {
private final EntityPlayer entityPlayer;
private ItemStack itemStack;
@@ -1,20 +1,12 @@
package net.p455w0rd.wirelesscraftingterminal.common.container.slot;
import appeng.api.AEApi;
import appeng.container.slot.SlotRestrictedInput;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
public class SlotViewCell extends AppEngSlot {
public class SlotViewCell extends SlotRestrictedInput {
public SlotViewCell(IInventory inv, int index, int xPos, int yPos) {
super(inv, index, xPos, yPos);
}
@Override
public boolean isItemValid(ItemStack is) {
if (is == null || is.getItem() == null) {
return false;
}
return AEApi.instance().definitions().items().viewCell().isSameAs(is);
public SlotViewCell(IInventory inv, int index, int xPos, int yPos, InventoryPlayer playerInv) {
super(PlacableItemType.VIEW_CELL, inv, index, xPos, yPos, playerInv);
}
}
@@ -1,22 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.registries;
import appeng.api.config.SortDir;
import appeng.api.config.SortOrder;
import appeng.api.config.ViewItems;
public class EnumCache {
/**
* SortDir
*/
public static final SortDir[] AE_SORT_DIRECTIONS = SortDir.values();
/**
* SortOrder
*/
public static final SortOrder[] AE_SORT_ORDERS = SortOrder.values();
/**
* ViewItems
*/
public static final ViewItems[] AE_VIEW_ITEMS = ViewItems.values();
}
@@ -1,61 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.common.utils;
import cpw.mods.fml.relauncher.ReflectionHelper;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectionUtils {
/**
* Get a {@link MethodHandle} for a method.
*
* @param clazz The class
* @param methodNames The possible names of the method
* @param methodTypes The argument types of the method
* @param <T> The class
* @return The MethodHandle
*/
public static <T> MethodHandle findMethod(Class<T> clazz, String[] methodNames, Class<?>... methodTypes) {
final Method method = ReflectionHelper.findMethod(clazz, null, methodNames, methodTypes);
try {
return MethodHandles.lookup().unreflect(method);
} catch (IllegalAccessException e) {
throw new ReflectionHelper.UnableToFindMethodException(methodNames, e);
}
}
/**
* Get a {@link MethodHandle} for a field's getter.
*
* @param clazz The class
* @param fieldNames The possible names of the field
* @return The MethodHandle
*/
public static MethodHandle findFieldGetter(Class<?> clazz, String... fieldNames) {
final Field field = ReflectionHelper.findField(clazz, fieldNames);
try {
return MethodHandles.lookup().unreflectGetter(field);
} catch (IllegalAccessException e) {
throw new ReflectionHelper.UnableToAccessFieldException(fieldNames, e);
}
}
/**
* Get a {@link MethodHandle} for a field's setter.
*
* @param clazz The class
* @param fieldNames The possible names of the field
* @return The MethodHandle
*/
public static MethodHandle findFieldSetter(Class<?> clazz, String... fieldNames) {
final Field field = ReflectionHelper.findField(clazz, fieldNames);
try {
return MethodHandles.lookup().unreflectSetter(field);
} catch (IllegalAccessException e) {
throw new ReflectionHelper.UnableToAccessFieldException(fieldNames, e);
}
}
}
@@ -14,12 +14,8 @@ import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketMEInventory
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketMagnetFilter;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketNEIRecipe;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketOpenGui;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketPartialItem;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketSetJobBytes;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketSetMagnet;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketSwapSlots;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketSwitchGuis;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketUpdateCPUInfo;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketValueConfig;
public class WCTPacketHandlerBase {
@@ -35,12 +31,8 @@ public class WCTPacketHandlerBase {
PACKET_SWITCH_GUIS(PacketSwitchGuis.class),
PACKET_SWAP_SLOTS(PacketSwapSlots.class),
PACKET_RECIPE_NEI(PacketNEIRecipe.class),
PACKET_PARTIAL_ITEM(PacketPartialItem.class),
PACKET_CRAFTING_REQUEST(PacketCraftRequest.class),
PACKET_MAGNETFILTER_MODE(PacketMagnetFilter.class),
@@ -51,11 +43,7 @@ public class WCTPacketHandlerBase {
PACKET_EMPTY_TRASH(PacketEmptyTrash.class),
PACKET_SYNC_CONFIGS(PacketConfigSync.class),
PACKET_SET_JOB(PacketSetJobBytes.class),
PACKET_UPDATECPUINFO(PacketUpdateCPUInfo.class);
PACKET_SYNC_CONFIGS(PacketConfigSync.class);
private final Class<? extends WCTPacket> packetClass;
private final Constructor<? extends WCTPacket> packetConstructor;
@@ -4,13 +4,13 @@ import appeng.api.networking.IGrid;
import appeng.api.networking.IGridHost;
import appeng.api.networking.crafting.ICraftingGrid;
import appeng.api.networking.crafting.ICraftingJob;
import appeng.container.implementations.ContainerCraftAmount;
import appeng.container.implementations.ContainerCraftConfirm;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import java.util.concurrent.Future;
import net.minecraft.entity.player.EntityPlayer;
import net.p455w0rd.wirelesscraftingterminal.common.WCTGuiHandler;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerCraftAmount;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerCraftConfirm;
import net.p455w0rd.wirelesscraftingterminal.core.sync.WCTPacket;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.INetworkInfo;
import net.p455w0rd.wirelesscraftingterminal.reference.Reference;
@@ -44,7 +44,7 @@ public class PacketCraftRequest extends WCTPacket {
final ContainerCraftAmount cca = (ContainerCraftAmount) player.openContainer;
final Object target = cca.getTarget();
if (target instanceof IGridHost) {
final IGrid g = cca.obj2.getTargetGrid();
final IGrid g = cca.getGrid();
if (g == null || cca.getItemToCraft() == null) {
return;
}
@@ -2,6 +2,9 @@ package net.p455w0rd.wirelesscraftingterminal.core.sync.packets;
import appeng.api.storage.data.IAEItemStack;
import appeng.client.ClientHelper;
import appeng.container.AEBaseContainer;
import appeng.container.ContainerOpenContext;
import appeng.container.implementations.ContainerCraftAmount;
import appeng.helpers.InventoryAction;
import appeng.util.Platform;
import appeng.util.item.AEItemStack;
@@ -12,10 +15,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.Container;
import net.p455w0rd.wirelesscraftingterminal.common.WCTGuiHandler;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerCraftAmount;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerOpenContext;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerWirelessCraftingTerminal;
import net.p455w0rd.wirelesscraftingterminal.common.container.WCTBaseContainer;
import net.p455w0rd.wirelesscraftingterminal.common.utils.RandomUtils;
import net.p455w0rd.wirelesscraftingterminal.core.sync.WCTPacket;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.INetworkInfo;
@@ -95,14 +95,8 @@ public class PacketInventoryAction extends WCTPacket {
final EntityPlayerMP sender = (EntityPlayerMP) player;
Container baseContainer = sender.openContainer;
ContainerOpenContext context = null;
if (sender.openContainer instanceof ContainerWirelessCraftingTerminal) {
baseContainer = (ContainerWirelessCraftingTerminal) sender.openContainer;
context = ((ContainerWirelessCraftingTerminal) baseContainer).getOpenContext();
}
if (sender.openContainer instanceof WCTBaseContainer) {
baseContainer = (WCTBaseContainer) sender.openContainer;
context = ((WCTBaseContainer) baseContainer).getOpenContext();
if (baseContainer instanceof AEBaseContainer) {
context = ((AEBaseContainer) baseContainer).getOpenContext();
}
if (this.action == InventoryAction.AUTO_CRAFT) {
@@ -129,13 +123,13 @@ public class PacketInventoryAction extends WCTPacket {
}
}
if (baseContainer instanceof WCTBaseContainer) {
if (((WCTBaseContainer) baseContainer).getTargetStack() != null) {
if (baseContainer instanceof AEBaseContainer) {
if (((AEBaseContainer) baseContainer).getTargetStack() != null) {
cca.getCraftingItem()
.putStack(((WCTBaseContainer) baseContainer)
.putStack(((AEBaseContainer) baseContainer)
.getTargetStack()
.getItemStack());
cca.setItemToCraft(((WCTBaseContainer) baseContainer).getTargetStack());
cca.setItemToCraft(((AEBaseContainer) baseContainer).getTargetStack());
}
}
@@ -150,8 +144,8 @@ public class PacketInventoryAction extends WCTPacket {
((ContainerWirelessCraftingTerminal) baseContainer)
.doAction(sender, this.action, this.slot, this.id);
}
if (baseContainer instanceof WCTBaseContainer) {
((WCTBaseContainer) baseContainer).doAction(sender, this.action, this.slot, this.id);
if (baseContainer instanceof AEBaseContainer) {
((AEBaseContainer) baseContainer).doAction(sender, this.action, this.slot, this.id);
}
}
}
@@ -1,6 +1,5 @@
package net.p455w0rd.wirelesscraftingterminal.core.sync.packets;
import appeng.api.AEApi;
import appeng.api.config.Actionable;
import appeng.api.config.FuzzyMode;
import appeng.api.config.SecurityPermissions;
@@ -35,10 +34,9 @@ import net.minecraft.item.crafting.IRecipe;
import net.minecraft.nbt.CompressedStreamTools;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.oredict.OreDictionary;
import net.p455w0rd.wirelesscraftingterminal.api.IWirelessCraftingTermHandler;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerWirelessCraftingTerminal;
import net.p455w0rd.wirelesscraftingterminal.common.utils.RandomUtils;
import net.p455w0rd.wirelesscraftingterminal.core.sync.WCTPacket;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.INetworkInfo;
@@ -82,19 +80,6 @@ public class PacketNEIRecipe extends WCTPacket {
configureWrite(data);
}
private WirelessTerminalGuiObject getGuiObject(
final ItemStack it, final EntityPlayer player, final World w, final int x, final int y, final int z) {
if (it != null) {
final IWirelessCraftingTermHandler wh = (IWirelessCraftingTermHandler)
AEApi.instance().registries().wireless().getWirelessTerminalHandler(it);
if (wh != null) {
return new WirelessTerminalGuiObject(wh, it, player, w, x, y, z);
}
}
return null;
}
@SuppressWarnings({"rawtypes", "unchecked"})
@Override
public void serverPacketData(final INetworkInfo manager, final WCTPacket packet, final EntityPlayer player) {
@@ -106,7 +91,7 @@ public class PacketNEIRecipe extends WCTPacket {
IGridNode node = cct.getNetworkNode();
if (node == null) {
WirelessTerminalGuiObject obj = getGuiObject(
WirelessTerminalGuiObject obj = ContainerWirelessCraftingTerminal.getGuiObject(
RandomUtils.getWirelessTerm(player.inventory),
player,
player.worldObj,
@@ -1,58 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.core.sync.packets;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import net.minecraft.entity.player.EntityPlayer;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerWirelessCraftingTerminal;
import net.p455w0rd.wirelesscraftingterminal.common.container.WCTBaseContainer;
import net.p455w0rd.wirelesscraftingterminal.core.sync.WCTPacket;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.INetworkInfo;
public class PacketPartialItem extends WCTPacket {
private final short pageNum;
private final byte[] data;
// automatic.
public PacketPartialItem(final ByteBuf stream) {
this.pageNum = stream.readShort();
stream.readBytes(this.data = new byte[stream.readableBytes()]);
}
// api
public PacketPartialItem(final int page, final int maxPages, final byte[] buf) {
final ByteBuf data = Unpooled.buffer();
this.pageNum = (short) (page | (maxPages << 8));
this.data = buf;
data.writeInt(this.getPacketID());
data.writeShort(this.pageNum);
data.writeBytes(buf);
this.configureWrite(data);
}
@Override
public void serverPacketData(final INetworkInfo manager, final WCTPacket packet, final EntityPlayer player) {
if (player.openContainer instanceof ContainerWirelessCraftingTerminal) {
((ContainerWirelessCraftingTerminal) player.openContainer).postPartial(this);
}
if (player.openContainer instanceof WCTBaseContainer) {
((WCTBaseContainer) player.openContainer).postPartial(this);
}
}
public int getPageCount() {
return this.pageNum >> 8;
}
public int getSize() {
return this.data.length;
}
public int write(final byte[] buffer, final int cursor) {
System.arraycopy(this.data, 0, buffer, cursor, this.data.length);
return cursor + this.data.length;
}
}
@@ -1,58 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.core.sync.packets;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerWirelessCraftingTerminal;
import net.p455w0rd.wirelesscraftingterminal.common.container.WCTBaseContainer;
import net.p455w0rd.wirelesscraftingterminal.core.sync.WCTPacket;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.INetworkInfo;
public class PacketProgressBar extends WCTPacket {
private final short id;
private final long value;
// automatic.
public PacketProgressBar(final ByteBuf stream) {
this.id = stream.readShort();
this.value = stream.readLong();
}
// api
public PacketProgressBar(final int shortID, final long value) {
this.id = (short) shortID;
this.value = value;
final ByteBuf data = Unpooled.buffer();
data.writeInt(this.getPacketID());
data.writeShort(shortID);
data.writeLong(value);
this.configureWrite(data);
}
@Override
public void serverPacketData(final INetworkInfo manager, final WCTPacket packet, final EntityPlayer player) {
final Container c = player.openContainer;
if (c instanceof ContainerWirelessCraftingTerminal) {
((ContainerWirelessCraftingTerminal) c).updateFullProgressBar(this.id, this.value);
}
if (c instanceof WCTBaseContainer) {
((WCTBaseContainer) c).updateFullProgressBar(this.id, this.value);
}
}
@Override
public void clientPacketData(final INetworkInfo network, final WCTPacket packet, final EntityPlayer player) {
final Container c = player.openContainer;
if (c instanceof ContainerWirelessCraftingTerminal) {
((ContainerWirelessCraftingTerminal) c).updateFullProgressBar(this.id, this.value);
}
if (c instanceof WCTBaseContainer) {
((WCTBaseContainer) c).updateFullProgressBar(this.id, this.value);
}
}
}
@@ -1,32 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.core.sync.packets;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import java.io.IOException;
import net.minecraft.entity.player.EntityPlayer;
import net.p455w0rd.wirelesscraftingterminal.client.gui.GuiCraftConfirm;
import net.p455w0rd.wirelesscraftingterminal.core.sync.WCTPacket;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.INetworkInfo;
public class PacketSetJobBytes extends WCTPacket {
private final int bytez;
// automatic.
public PacketSetJobBytes(final ByteBuf stream) throws IOException, ClassNotFoundException {
this.bytez = stream.readInt();
}
public PacketSetJobBytes(int numBytes) throws IOException {
this.bytez = numBytes;
final ByteBuf data = Unpooled.buffer();
data.writeInt(this.getPacketID());
data.writeInt(this.bytez);
this.configureWrite(data);
}
@Override
public void clientPacketData(final INetworkInfo network, final WCTPacket packet, final EntityPlayer player) {
GuiCraftConfirm.setJobBytes(this.bytez);
}
}
@@ -1,44 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.core.sync.packets;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import net.minecraft.entity.player.EntityPlayer;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerWirelessCraftingTerminal;
import net.p455w0rd.wirelesscraftingterminal.common.container.WCTBaseContainer;
import net.p455w0rd.wirelesscraftingterminal.core.sync.WCTPacket;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.INetworkInfo;
public class PacketSwapSlots extends WCTPacket {
private final int slotA;
private final int slotB;
// automatic.
public PacketSwapSlots(final ByteBuf stream) {
this.slotA = stream.readInt();
this.slotB = stream.readInt();
}
// api
public PacketSwapSlots(final int slotA, final int slotB) {
final ByteBuf data = Unpooled.buffer();
data.writeInt(this.getPacketID());
data.writeInt(this.slotA = slotA);
data.writeInt(this.slotB = slotB);
this.configureWrite(data);
}
@Override
public void serverPacketData(final INetworkInfo manager, final WCTPacket packet, final EntityPlayer player) {
if (player != null) {
if (player.openContainer instanceof ContainerWirelessCraftingTerminal) {
((ContainerWirelessCraftingTerminal) player.openContainer).swapSlotContents(this.slotA, this.slotB);
}
if (player.openContainer instanceof WCTBaseContainer) {
((WCTBaseContainer) player.openContainer).swapSlotContents(this.slotA, this.slotB);
}
}
}
}
@@ -1,37 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.core.sync.packets;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import java.io.IOException;
import net.minecraft.entity.player.EntityPlayer;
import net.p455w0rd.wirelesscraftingterminal.client.gui.GuiCraftConfirm;
import net.p455w0rd.wirelesscraftingterminal.core.sync.WCTPacket;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.INetworkInfo;
public class PacketUpdateCPUInfo extends WCTPacket {
private final int bytez;
private final int coCPUz;
// automatic.
public PacketUpdateCPUInfo(final ByteBuf stream) throws IOException, ClassNotFoundException {
this.bytez = stream.readInt();
this.coCPUz = stream.readInt();
}
public PacketUpdateCPUInfo(int numBytes, int numCoCPUs) throws IOException {
this.bytez = numBytes;
this.coCPUz = numCoCPUs;
final ByteBuf data = Unpooled.buffer();
data.writeInt(this.getPacketID());
data.writeInt(this.bytez);
data.writeInt(this.coCPUz);
this.configureWrite(data);
}
@Override
public void clientPacketData(final INetworkInfo network, final WCTPacket packet, final EntityPlayer player) {
GuiCraftConfirm.setCurrentCPUAvailBytes(this.bytez);
GuiCraftConfirm.setCurrentCPUCoCPUs(this.coCPUz);
}
}
@@ -3,6 +3,7 @@ package net.p455w0rd.wirelesscraftingterminal.core.sync.packets;
import appeng.api.config.Settings;
import appeng.api.util.IConfigManager;
import appeng.api.util.IConfigurableObject;
import appeng.container.AEBaseContainer;
import appeng.helpers.IMouseWheelItem;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
@@ -14,9 +15,6 @@ import java.io.IOException;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerCraftConfirm;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerWirelessCraftingTerminal;
import net.p455w0rd.wirelesscraftingterminal.common.container.WCTBaseContainer;
import net.p455w0rd.wirelesscraftingterminal.common.utils.RandomUtils;
import net.p455w0rd.wirelesscraftingterminal.core.sync.WCTPacket;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.INetworkInfo;
@@ -61,12 +59,6 @@ public class PacketValueConfig extends WCTPacket {
final ItemStack is = RandomUtils.getWirelessTerm(player.inventory);
final IMouseWheelItem si = (IMouseWheelItem) is.getItem();
si.onWheel(is, this.Value.equals("WheelUp"));
} else if (this.Name.equals("Terminal.Cpu") && c instanceof ContainerCraftConfirm) {
final ContainerCraftConfirm qk = (ContainerCraftConfirm) c;
qk.cycleCpu(this.Value.equals("Next"));
} else if (this.Name.equals("Terminal.Start") && c instanceof ContainerCraftConfirm) {
final ContainerCraftConfirm qk = (ContainerCraftConfirm) c;
qk.startJob();
} else if (c instanceof IConfigurableObject) {
final IConfigManager cm = ((IConfigurableObject) c).getConfigManager();
@@ -92,19 +84,12 @@ public class PacketValueConfig extends WCTPacket {
final Container c = player.openContainer;
if (this.Name.equals("CustomName")) {
if (c instanceof ContainerWirelessCraftingTerminal) {
((ContainerWirelessCraftingTerminal) c).setCustomName(this.Value);
}
if (c instanceof WCTBaseContainer) {
((WCTBaseContainer) c).setCustomName(this.Value);
if (c instanceof AEBaseContainer) {
((AEBaseContainer) c).setCustomName(this.Value);
}
} else if (this.Name.startsWith("SyncDat.")) {
if (c instanceof ContainerWirelessCraftingTerminal) {
((ContainerWirelessCraftingTerminal) c)
.stringSync(Integer.parseInt(this.Name.substring(8)), this.Value);
}
if (c instanceof WCTBaseContainer) {
((WCTBaseContainer) c).stringSync(Integer.parseInt(this.Name.substring(8)), this.Value);
if (c instanceof AEBaseContainer) {
((AEBaseContainer) c).stringSync(Integer.parseInt(this.Name.substring(8)), this.Value);
}
} else if (c instanceof IConfigurableObject) {
final IConfigManager cm = ((IConfigurableObject) c).getConfigManager();
@@ -1,47 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.handlers;
import codechicken.nei.PositionedStack;
import codechicken.nei.recipe.TemplateRecipeHandler;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraftforge.oredict.ShapedOreRecipe;
public class NEIRecipeHandler extends TemplateRecipeHandler {
public static NEIRecipeHandler INSTANCE;
public NEIRecipeHandler() {
INSTANCE = this;
}
@Override
public String getRecipeName() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getGuiTexture() {
// TODO Auto-generated method stub
return null;
}
public void removeCachedRecipe(IRecipe r) {
ItemStack recipeOutput = null;
if (r instanceof ShapedOreRecipe) {
ShapedOreRecipe recipe = (ShapedOreRecipe) r;
recipeOutput = recipe.getRecipeOutput();
}
System.out.println("test");
if (recipeOutput == null) {
return;
}
for (int i = 0; i < arecipes.size(); i++) {
PositionedStack cachedResult = getResultStack(i);
PositionedStack recipeResult = new PositionedStack(recipeOutput, 119, 24);
if (cachedResult == recipeResult) {
System.out.println("match!");
}
}
}
}
@@ -6,6 +6,7 @@ import appeng.api.config.Actionable;
import appeng.api.config.PowerMultiplier;
import appeng.api.features.ILocatable;
import appeng.api.features.IWirelessTermHandler;
import appeng.api.implementations.guiobjects.IGuiItemObject;
import appeng.api.implementations.guiobjects.IPortableCell;
import appeng.api.implementations.tiles.IWirelessAccessPoint;
import appeng.api.networking.IGrid;
@@ -33,7 +34,8 @@ import net.minecraftforge.common.util.ForgeDirection;
import net.p455w0rd.wirelesscraftingterminal.api.IWirelessCraftingTerminalItem;
import net.p455w0rd.wirelesscraftingterminal.api.networking.security.WCTIActionHost;
public class WirelessTerminalGuiObject implements IActionHost, IPortableCell, IInventorySlotAware, WCTIActionHost {
public class WirelessTerminalGuiObject
implements IActionHost, IPortableCell, IInventorySlotAware, WCTIActionHost, IGuiItemObject {
private final ItemStack effectiveItem;
private final IWirelessTermHandler wth;
@@ -1,263 +0,0 @@
package net.p455w0rd.wirelesscraftingterminal.implementation;
import appeng.api.AEApi;
import appeng.api.implementations.tiles.IWirelessAccessPoint;
import appeng.api.networking.IGrid;
import appeng.api.networking.IGridNode;
import appeng.api.networking.IMachineSet;
import appeng.api.networking.energy.IEnergyGrid;
import appeng.api.networking.security.BaseActionSource;
import appeng.api.networking.storage.IStorageGrid;
import appeng.api.storage.IMEMonitor;
import appeng.api.storage.IStorageMonitorable;
import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.util.DimensionalCoord;
import appeng.tile.misc.TileSecurity;
import appeng.tile.networking.TileWireless;
import java.util.ArrayList;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.p455w0rd.wirelesscraftingterminal.api.networking.security.MachineSource;
import net.p455w0rd.wirelesscraftingterminal.api.networking.security.WCTIActionHost;
import net.p455w0rd.wirelesscraftingterminal.api.networking.security.WCTPlayerSource;
/**
* Provides wireless access to a ME network.
*
* @author Nividica
*
*/
public abstract class WirelessAELink implements IStorageMonitorable {
protected final EntityPlayer player;
protected final String encryptionKey;
protected IWirelessAccessPoint accessPoint;
protected DimensionalCoord apLocation = null;
protected BaseActionSource actionSource;
public WirelessAELink(final @Nullable EntityPlayer player, @Nonnull final String encryptionKey) {
this.player = player;
this.encryptionKey = encryptionKey;
this.linkWithNewAP();
}
private static boolean isAPInRange(
final DimensionalCoord APLocation,
final double APRange,
final World world,
final int x,
final int y,
final int z) {
if (!APLocation.isInWorld(world)) {
return false;
}
double squareDistance = getSquaredDistanceFromAP(APLocation, x, y, z);
return squareDistance <= (APRange * APRange);
}
private static ArrayList<IWirelessAccessPoint> locateAPsInRange(
final World world, final int x, final int y, final int z, final IGrid grid) {
IMachineSet accessPoints = grid.getMachines(TileWireless.class);
if (accessPoints.isEmpty()) {
return null;
}
ArrayList<IWirelessAccessPoint> aps = new ArrayList<IWirelessAccessPoint>();
for (IGridNode APNode : accessPoints) {
IWirelessAccessPoint AP = (IWirelessAccessPoint) APNode.getMachine();
if (AP.isActive()) {
if (isAPInRange(AP.getLocation(), AP.getRange(), world, x, y, z)) {
aps.add(AP);
}
}
}
return aps;
}
protected static double getSquaredDistanceFromAP(
final DimensionalCoord locationAP, final int x, final int y, final int z) {
if (locationAP == null) {
return Double.MAX_VALUE;
}
int dX = locationAP.x - x, dY = locationAP.y - y, dZ = locationAP.z - z;
return ((dX * dX) + (dY * dY) + (dZ * dZ));
}
public static ArrayList<IWirelessAccessPoint> locateAPsInRange(
final World world, final int x, final int y, final int z, final String encryptionKey) {
long encryptionValue;
try {
encryptionValue = Long.parseLong(encryptionKey);
} catch (NumberFormatException e) {
return null;
}
Object source = AEApi.instance().registries().locatable().getLocatableBy(encryptionValue);
if (!(source instanceof TileSecurity)) {
return null;
}
TileSecurity securityHost = (TileSecurity) source;
IGrid grid;
try {
grid = securityHost.getGridNode(ForgeDirection.UNKNOWN).getGrid();
} catch (Exception e) {
return null;
}
return locateAPsInRange(world, x, y, z, grid);
}
public static ArrayList<IWirelessAccessPoint> locateAPsInRangeOfPlayer(
final EntityPlayer player, final String encryptionKey) {
return locateAPsInRange(
player.worldObj,
(int) Math.floor(player.posX),
(int) Math.floor(player.posY),
(int) Math.floor(player.posZ),
encryptionKey);
}
private boolean isAPInRangeAndActive() {
if (this.accessPoint != null) {
if (this.accessPoint.isActive()) {
return isAPInRange(
this.apLocation,
this.accessPoint.getRange(),
this.getUserWorld(),
this.getUserPositionX(),
this.getUserPositionY(),
this.getUserPositionZ());
}
}
return false;
}
private boolean linkWithNewAP() {
World w = this.getUserWorld();
int x = this.getUserPositionX();
int y = this.getUserPositionY();
int z = this.getUserPositionZ();
IGrid grid = null;
if (this.accessPoint != null) {
try {
grid = this.accessPoint.getGrid();
} catch (Exception e) {
}
}
ArrayList<IWirelessAccessPoint> apList;
if (grid != null) {
apList = locateAPsInRange(w, x, y, z, grid);
} else {
apList = locateAPsInRange(w, x, y, z, this.encryptionKey);
}
if ((apList == null) || (apList.isEmpty())) {
this.accessPoint = null;
return false;
}
IWirelessAccessPoint closest = null;
double closestDistance = Double.MAX_VALUE;
for (IWirelessAccessPoint ap : apList) {
double dist = getSquaredDistanceFromAP(ap.getLocation(), x, y, z);
if (dist < closestDistance) {
closestDistance = dist;
closest = ap;
}
}
this.setAP(closest);
return true;
}
private void setAP(final IWirelessAccessPoint accessPoint) {
this.accessPoint = accessPoint;
this.apLocation = this.accessPoint.getLocation();
if (this.player != null) {
this.actionSource = new WCTPlayerSource(this.player, (WCTIActionHost) this.accessPoint);
} else {
this.actionSource = new MachineSource((WCTIActionHost) this.accessPoint);
}
}
protected abstract int getUserPositionX();
protected abstract int getUserPositionY();
protected abstract int getUserPositionZ();
protected abstract World getUserWorld();
protected abstract boolean hasPowerToCommunicate();
public IEnergyGrid getEnergyGrid() {
if (this.accessPoint == null) {
return null;
}
try {
return this.accessPoint.getActionableNode().getGrid().getCache(IEnergyGrid.class);
} catch (Exception e) {
// Ignored
}
return null;
}
@Override
public IMEMonitor<IAEFluidStack> getFluidInventory() {
if ((this.accessPoint == null) || !this.isConnected()) {
return null;
}
try {
IStorageGrid storageGrid =
this.accessPoint.getActionableNode().getGrid().getCache(IStorageGrid.class);
return storageGrid.getFluidInventory();
} catch (Exception e) {
// Ignored
}
return null;
}
@Override
public IMEMonitor<IAEItemStack> getItemInventory() {
if ((this.accessPoint == null) || !this.isConnected()) {
return null;
}
try {
IStorageGrid storageGrid =
this.accessPoint.getActionableNode().getGrid().getCache(IStorageGrid.class);
return storageGrid.getItemInventory();
} catch (Exception e) {
// Ignored
}
return null;
}
public boolean isConnected() {
if (!this.hasPowerToCommunicate()) {
return false;
}
if (this.isAPInRangeAndActive()) {
return true;
}
return this.linkWithNewAP();
}
}
@@ -2,6 +2,8 @@ package net.p455w0rd.wirelesscraftingterminal.integration.modules;
import appeng.api.AEApi;
import appeng.api.storage.data.IAEItemStack;
import appeng.container.slot.SlotCraftingMatrix;
import appeng.container.slot.SlotFakeCraftingMatrix;
import appeng.integration.modules.NEIHelpers.NEIAEShapelessRecipeHandler;
import appeng.util.Platform;
import codechicken.nei.PositionedStack;
@@ -24,8 +26,6 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.p455w0rd.wirelesscraftingterminal.client.gui.GuiWirelessCraftingTerminal;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerWirelessCraftingTerminal;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotCraftingMatrix;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotFakeCraftingMatrix;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.NetworkHandler;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketNEIRecipe;
import net.p455w0rd.wirelesscraftingterminal.helpers.Reflected;
@@ -1,5 +1,7 @@
package net.p455w0rd.wirelesscraftingterminal.integration.modules.NEIHelpers;
import appeng.container.slot.SlotCraftingMatrix;
import appeng.container.slot.SlotFakeCraftingMatrix;
import appeng.util.Platform;
import codechicken.nei.PositionedStack;
import codechicken.nei.api.IOverlayHandler;
@@ -12,8 +14,6 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.p455w0rd.wirelesscraftingterminal.client.gui.GuiWirelessCraftingTerminal;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotCraftingMatrix;
import net.p455w0rd.wirelesscraftingterminal.common.container.slot.SlotFakeCraftingMatrix;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.NetworkHandler;
import net.p455w0rd.wirelesscraftingterminal.core.sync.packets.PacketNEIRecipe;
@@ -1,6 +1,5 @@
package net.p455w0rd.wirelesscraftingterminal.items;
import appeng.api.AEApi;
import appeng.api.config.SecurityPermissions;
import appeng.api.implementations.guiobjects.IPortableCell;
import appeng.api.networking.IGrid;
@@ -30,7 +29,6 @@ import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.ChatComponentText;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
import net.p455w0rd.wirelesscraftingterminal.api.IWirelessCraftingTermHandler;
import net.p455w0rd.wirelesscraftingterminal.api.IWirelessCraftingTerminalItem;
import net.p455w0rd.wirelesscraftingterminal.common.WCTGuiHandler;
import net.p455w0rd.wirelesscraftingterminal.common.utils.RandomUtils;
@@ -477,19 +475,6 @@ public class ItemMagnet extends Item {
return true;
}
public WirelessTerminalGuiObject getGuiObject(
final ItemStack it, final EntityPlayer player, final World w, final int x, final int y, final int z) {
if (it != null) {
final IWirelessCraftingTermHandler wh = (IWirelessCraftingTermHandler)
AEApi.instance().registries().wireless().getWirelessTerminalHandler(it);
if (wh != null) {
return new WirelessTerminalGuiObject(wh, it, player, w, x, y, z);
}
}
return null;
}
public static List<? extends Entity> getEntitiesInRange(
Class<?> entityType, World world, int x, int y, int z, int distance) {
return world.getEntitiesWithinAABB(
@@ -1,6 +1,7 @@
package net.p455w0rd.wirelesscraftingterminal.items;
import appeng.api.config.*;
import appeng.api.features.IWirelessTermHandler;
import appeng.api.util.IConfigManager;
import appeng.items.tools.powered.powersink.AERootPoweredItem;
import appeng.util.ConfigManager;
@@ -32,7 +33,8 @@ import net.p455w0rd.wirelesscraftingterminal.integration.EnderIO;
import net.p455w0rd.wirelesscraftingterminal.reference.Reference;
import org.lwjgl.input.Keyboard;
public class ItemWirelessCraftingTerminal extends AERootPoweredItem implements IWirelessCraftingTerminalItem, IBauble {
public class ItemWirelessCraftingTerminal extends AERootPoweredItem
implements IWirelessCraftingTerminalItem, IWirelessTermHandler, IBauble {
public static final String LINK_KEY_STRING = "key";
public static double GLOBAL_POWER_MULTIPLIER = PowerMultiplier.CONFIG.multiplier;
@@ -1,30 +1,17 @@
package net.p455w0rd.wirelesscraftingterminal.proxy;
import com.mojang.authlib.minecraft.MinecraftProfileTexture;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import javax.xml.bind.DatatypeConverter;
import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.RenderPlayerEvent;
import net.minecraftforge.common.MinecraftForge;
import net.p455w0rd.wirelesscraftingterminal.handlers.KeybindHandler;
import net.p455w0rd.wirelesscraftingterminal.items.ItemEnum;
import net.p455w0rd.wirelesscraftingterminal.reference.Reference;
import org.apache.commons.io.IOUtils;
public class ClientProxy extends CommonProxy {
public ClientProxy() {
MinecraftForge.EVENT_BUS.register(this);
KeybindHandler.registerKeybinds(); // whyyyy??? #SELFSLAP
KeybindHandler.registerKeybinds();
FMLCommonHandler.instance().bus().register(new KeybindHandler());
}
@@ -32,66 +19,6 @@ public class ClientProxy extends CommonProxy {
public void removeItemsFromNEI() {
if (Loader.isModLoaded("NotEnoughItems")) {
codechicken.nei.api.API.hideItem(new ItemStack(ItemEnum.WCT_BOOSTER_BG_ICON.getItem(), 1));
return;
}
}
@Override
public void registerRenderers() {
// No renderers...yet =]
}
@SubscribeEvent
public void renderPlayer(RenderPlayerEvent.Specials.Pre event) {
if (Reference.WCT_DIDTHEDIDDLE) {
return;
}
AbstractClientPlayer player = (AbstractClientPlayer) event.entityPlayer;
if (!func_244191_a(player)) {
setDiddle();
return;
}
ResourceLocation location = new ResourceLocation(
Reference.MODID,
new String(DatatypeConverter.parseBase64Binary("dGV4dHVyZXMvY2FwZS9wNDU1Y2FwZS5wbmc=")));
player.func_152121_a(MinecraftProfileTexture.Type.values()[1], location);
}
static List<String> playThatFunkayMusaXWhiteboi() {
try {
InputStream in = new URL(
new String(
DatatypeConverter.parseBase64Binary(
"aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3A0NTV3MHJkL1dpcmVsZXNzQ3JhZnRpbmdUZXJtaW5hbC9tYXN0ZXIvLnNldHRpbmdzL3BhdHJvbnMudHh0")))
.openStream();
return IOUtils.readLines(in);
} catch (MalformedURLException ignored) {
setDiddle();
} catch (IOException ignored) {
setDiddle();
}
return null;
}
public static boolean func_244191_a(AbstractClientPlayer player) {
List<String> ae2serializable = playThatFunkayMusaXWhiteboi();
if (ae2serializable == null) {
setDiddle();
return false;
}
for (int i = 0; i < ae2serializable.size(); i++) {
String uuid = player.getUniqueID().toString();
String match = ae2serializable.get(i);
if (uuid.equals(match)) {
setDiddle();
return true;
}
}
setDiddle();
return false;
}
private static void setDiddle() {
Reference.WCT_DIDTHEDIDDLE = true;
}
}
@@ -31,6 +31,7 @@ import net.minecraftforge.event.entity.living.LivingDropsEvent;
import net.minecraftforge.event.entity.player.EntityItemPickupEvent;
import net.p455w0rd.wirelesscraftingterminal.api.IWirelessCraftingTerminalItem;
import net.p455w0rd.wirelesscraftingterminal.api.networking.security.WCTPlayerSource;
import net.p455w0rd.wirelesscraftingterminal.common.container.ContainerWirelessCraftingTerminal;
import net.p455w0rd.wirelesscraftingterminal.common.utils.RandomUtils;
import net.p455w0rd.wirelesscraftingterminal.core.sync.WCTPacket;
import net.p455w0rd.wirelesscraftingterminal.core.sync.network.NetworkHandler;
@@ -59,13 +60,7 @@ public class CommonProxy {
}
}
public void removeItemsFromNEI() {
// XD
}
public void registerRenderers() {
// =P
}
public void removeItemsFromNEI() {}
@SubscribeEvent
public void tickEvent(TickEvent.PlayerTickEvent e) {
@@ -132,10 +127,6 @@ public class CommonProxy {
public void onPlayerLogin(PlayerLoggedInEvent e) {
// SSP Login
if (FMLCommonHandler.instance().getSide() == Side.CLIENT) {
// boolean hasWCTAch = ((EntityPlayerMP)
// e.player).func_147099_x().hasAchievementUnlocked(AchievementHandler.wctAch);
// boolean hasBoosterAch = ((EntityPlayerMP)
// e.player).func_147099_x().hasAchievementUnlocked(AchievementHandler.boosterAch);
ConfigHandler.removeBooster();
ConfigHandler.removeBoosterIcon();
@@ -145,21 +136,6 @@ public class CommonProxy {
} else {
ConfigHandler.reloadRecipes();
}
// Was using this for hidden booster achievement
// it was giving me too much of a headache..maybe
// i'll implement in the future
/*
* AchievementPage achPg = AchievementPage.getAchievementPage(
* "Wireless Crafting Term"); if (achPg != null &&
* AchievementList.achievementList.contains(AchievementHandler.
* boosterAch) &&
* !achPg.getAchievements().contains(AchievementHandler.boosterAch))
* { AchievementList.achievementList.remove(AchievementHandler.
* boosterAch); } if ((Reference.WCT_BOOSTER_ENABLED && hasWCTAch)
* || hasBoosterAch) {
* AchievementHandler.addAchievementToPage(AchievementHandler.
* boosterAch, true, e.player); }
*/
/* NH fork definitely does not need version checking
if ((Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment")) {
@@ -225,7 +201,7 @@ public class CommonProxy {
if (magnetStack.getItem() instanceof ItemMagnet) {
ItemMagnet magnet = (ItemMagnet) magnetStack.getItem();
magnet.obj = magnet.getGuiObject(
magnet.obj = ContainerWirelessCraftingTerminal.getGuiObject(
WCTStack, player, world, (int) player.posX, (int) player.posY, (int) player.posZ);
magnet.civ = magnet.obj;
magnet.powerSrc = magnet.civ;
@@ -339,16 +315,4 @@ public class CommonProxy {
}
}
}
/*
* @SubscribeEvent public void achievementGetEvent(AchievementEvent event) {
* int index = AchievementList.achievementList.indexOf(wctAch); if
* (event.achievement.equals(AchievementList.achievementList.get(index))) {
* if (Reference.WCT_BOOSTER_ENABLED) { EnumChatFormatting purple =
* EnumChatFormatting.LIGHT_PURPLE; EnumChatFormatting green =
* EnumChatFormatting.GREEN; event.entityPlayer.addChatMessage(new
* ChatComponentText(EnumChatFormatting.ITALIC + "" + purple + "[" + green +
* "Wireless Crafting Terminal" + purple + "]: " + green + " New" + purple +
* " Achievment" + green + " Unlocked" + purple + "!")); } } }
*/
}